diff --git a/common/activities/activity_types/camp_party.txt b/common/activities/activity_types/camp_party.txt new file mode 100644 index 00000000..caa94110 --- /dev/null +++ b/common/activities/activity_types/camp_party.txt @@ -0,0 +1,887 @@ +activity_camp_party = { + is_shown = { + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_adult = yes + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_camp_party } + is_available = yes + age >= 16 + } + + is_valid = { + scope:host = { + is_alive = yes + is_imprisoned = no + has_government = landless_adventurer_government + NOT = { is_incapable = yes } + } + } + + on_invalidated = { + # Host becomes incapable + if = { + limit = { + scope:host = { is_incapable = yes } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_attending_character = { + limit = { this != scope:host } + trigger_event = activity_system.0331 + } + } + } + + province_filter = domicile_domain + ai_province_filter = domicile_domain + + max_province_icons = 1 + allow_zero_guest_invites = no + open_invite = no + + province_description = { + desc = activity_camp_party_province_desc + } + + province_score = { + add = camp_party_province_reference_value + } + + cost = { + gold = { + add = { + add = { + value = standard_camp_party_activity_cost + desc = hunt_base_cost + } + if = { + limit = { + has_character_modifier = journey_communal_modifier + } + multiply = { + value = 0.8 + desc = journey_communal_modifier + } + } + } + } + } + + ui_predicted_cost = { + gold = { + # Base Cost + value = standard_camp_party_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + + cooldown = { years = standard_camp_party_cooldown_time } + + ################### + # PHASES AND OPTIONS + ################### + + phases = { + phase_camp_party = { + is_predefined = yes + location_source = pickable + + ai_will_do = { + value = 0 + add = { + value = 30 + desc = "Base test value" + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + + scope:host = { + trigger_event = { + id = ep3_camp_party.0009 + days = 89 + } + } + + scope:activity = { + #Phase progression + progress_activity_phase_after = { days = 90 } + #Loc + activity_location = { save_scope_as = location } + } + #Arrival event + trigger_event = ep3_camp_party.0001 + } + } + + on_monthly_pulse = { + if = { + limit = { this = scope:host } + trigger_event = { on_action = camp_party_destination_events } + } + } + } + } + + options = { + #Food options: upgrades locked behind Supply Tent + camp_party_option_food = { + camp_party_food_none = { #Default + default = yes + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Quantity preference. + add = activity_option_food_prefers_small_volume_value + } + } + camp_party_food_simple = { #locked behind Supply Tent + is_shown = { always = yes } + + is_valid = { + custom_tooltip = { + text = camp_party_food_options_invalid + domicile ?= { + has_domicile_parameter = camp_unlocks_camp_party_food_option + } + } + } + + cost = { + gold = { + add = { + desc = camp_party_food_simple + add = { + value = 5 + desc = camp_party_food_simple + } + add = { + value = 5 + multiply = activity_cost_scale_by_tier + subtract = 5 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 5 + multiply = activity_cost_scale_by_era + subtract = 5 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 5 + add = { + value = 5 + multiply = activity_cost_scale_by_tier + subtract = 5 + } + add = { + value = 5 + multiply = activity_cost_scale_by_era + subtract = 5 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.3 + } + } + } + camp_party_food_lavish = { + is_shown = { always = yes } + + is_valid = { + custom_tooltip = { + text = camp_party_food_options_invalid + domicile ?= { + has_domicile_parameter = camp_unlocks_camp_party_food_option + } + } + } + + cost = { + gold = { + add = { + desc = camp_party_food_lavish + add = { + value = 15 + desc = camp_party_food_lavish + } + add = { + value = 15 + multiply = activity_cost_scale_by_tier + subtract = 15 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 15 + multiply = activity_cost_scale_by_era + subtract = 15 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 15 + add = { + value = 15 + multiply = activity_cost_scale_by_tier + subtract = 15 + } + add = { + value = 15 + multiply = activity_cost_scale_by_era + subtract = 15 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.6 + } + } + } + } + #Drinks options: upgrades locked behind Mess Tent & Mobile Brewery + camp_party_option_drinks = { + camp_party_drinks_none = { #Default + default = yes + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Quantity preference. + add = activity_option_food_prefers_small_volume_value + } + } + camp_party_drinks_adequate = { #locked behind Mess Tent + is_shown = { always = yes } + + is_valid = { + custom_tooltip = { + text = camp_party_drinks_adequate_invalid + domicile ?= { + has_domicile_building_or_higher = mess_tent_01 + } + } + } + + cost = { + gold = { + add = { + desc = camp_party_drinks_adequate + add = { + value = 10 + desc = camp_party_drinks_adequate + } + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 10 + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.3 + } + } + } + camp_party_drinks_abundant = { #locked behind Mobile Brewery + is_shown = { always = yes } + + is_valid = { + custom_tooltip = { + text = camp_party_drinks_abundant_invalid + domicile ?= { + has_domicile_building_or_higher = mess_tent_brewers + } + } + } + + cost = { + gold = { + add = { + desc = camp_party_drinks_abundant + add = { + value = 20 + desc = camp_party_drinks_abundant + } + add = { + value = 20 + multiply = activity_cost_scale_by_tier + subtract = 20 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 35 + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.6 + } + } + } + } + } + + max_guest_arrival_delay_time = { weeks = 1 } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + apa_bonded_by_fire + apa_taught_repair + apa_revelry_hangover_camp + apa_local_food_camp + apa_lauded_food_camp + apa_guest_of_honor_impressed + apa_cultural_acceptance + apa_camp_host_gifted + apa_fireside_chat_shared_stories_martial + apa_fireside_chat_shared_stories_learning + apa_fireside_chat_shared_stories_diplomacy + apa_fireside_chat_shared_stories_stewardship + apa_fireside_chat_shared_stories_intrigue + apa_fireside_chat_shared_drinks + apa_fireside_chat_inspiring_speech + apa_camp_party_sad_lonesome + apa_camp_party_shadows_in_the_dark + apa_camp_party_fortress_of_solitude + apa_camp_party_lecture + apa_camp_party_tales_of_distant_lands + apa_camp_party_tales_of_war + apa_camp_party_tales_of_lands_lost + apa_camp_party_blademaster_sparring + apa_camp_party_tales_of_piety + + #Re-used + host_gains_diplo_xp + host_gains_intrigue_xp + hook_trusting_guest + } + chance_of_no_event = 2 + } + + on_start = { + scope:activity ?= { + activity_setup_special_type_progression_effect = yes + if = { + limit = { + has_activity_option = { + category = camp_party_option_food + option = camp_party_food_simple + } + } + activity_special_type_progression_variable = { NUM = 25 } + } + else_if = { + limit = { + has_activity_option = { + category = camp_party_option_food + option = camp_party_food_lavish + } + } + activity_special_type_progression_variable = { NUM = 50 } + } + } + } + + ################### + # AI VALUES + ################### + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 50 + + if = { + limit = { + has_trait = lazy + } + add = -10 + } + + #Can you actually afford this? + if = { + limit = { + domicile.provisions <= 100 + } + add = -75 + } + } + + ai_check_interval = 60 + + ai_will_select_province = { + value = 10 + } + + ################### + # GUEST HANDLING + ################### + + host_intents = { + default = reduce_stress_intent + intents = { reduce_stress_intent befriend_attendee_intent fireside_chat_intent } + } + + guest_intents = { + intents = { reduce_stress_intent befriend_attendee_intent } + default = reduce_stress_intent + } + + can_be_activity_guest = { + OR = { #Follower + AND = { + is_healthy = yes + is_available = yes + age >= 16 + is_ai = yes + liege = scope:host + location = scope:host.location + } + AND = { #Local lord + is_healthy = yes + is_available = yes + age >= 16 + is_ai = yes + top_liege = this + location = scope:host.location + } + } + } + + guest_invite_rules = { + defaults = { + 1 = activity_invite_rule_followers + 2 = activity_invite_rule_local_lord + 2 = activity_invite_rule_friends + 2 = activity_invite_rule_potential_friends + 2 = activity_invite_rule_lovers + 2 = activity_invite_rule_potential_lovers + } + } + + special_guests = { + camp_party_honorary_guest = { + is_required = no + + can_pick = { + this != scope:host + is_healthy = yes + is_available = yes + age >= 16 + is_ai = yes + top_liege = this + location = scope:host.location + } + + ai_will_do = { + value = 10 + } + } + } + + travel_entourage_selection = { + weight = { + value = 10 + if = { + limit = { + NOT = { is_in_list = special_guests } + } + multiply = 0 + } + } + + invite_rule_order = 1 + + # Up to how many characters to select for a player + max = 2 + + # Up to how many characters to select for an AI + ai_max = 2 + } + + max_guests = 50 #Theoretically everyone, practically only around 2-10 usually + + guest_join_chance = { + base = 50 #Everyone should accept, but... + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + + modifier = { + is_courtier_of = scope:host + scope:host = { + has_government = landless_adventurer_government + } + add = 100 + desc = ACTIVITY_GUEST_ADVENTURER_REASON + } + + modifier = { #Emperors + primary_title.tier = tier_empire + add = -100 + desc = ACTIVITY_GUEST_LANDLESS_REASON + } + modifier = { #Kings + primary_title.tier = tier_kingdom + add = -75 + desc = ACTIVITY_GUEST_LANDLESS_REASON + } + modifier = { #Dukes + primary_title.tier = tier_duchy + add = -50 + desc = ACTIVITY_GUEST_LANDLESS_REASON + } + modifier = { #Counts + primary_title.tier = tier_county + add = -25 + desc = ACTIVITY_GUEST_LANDLESS_REASON + } + modifier = { #Barons + primary_title.tier = tier_barony + add = -5 + desc = ACTIVITY_GUEST_LANDLESS_REASON + } + } + + ################### + # GRAPHICS + ################### + + #Backgrounds mostly not needed here + background = { #Campfire + trigger = { + scope:host.location = scope:activity.activity_location + } + texture = "gfx/interface/illustrations/event_scenes/ep3_campfire.dds" + environment = "environment_event_bp1_bonfire" + ambience = "event:/SFX/Events/Backgrounds/burning_building" + } + + ### Plug in widgets + activity_window_widgets = { + activity_special_type_progression = "activity_plugin_widgets_summary" + } + + window_characters = { + guest = { + camera = camera_body_right + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { drink_goblet happiness flirtation throne_room_conversation_3 throne_room_conversation_1 instrument_idle alto_flute_active } + } + } + } + + #Guest of Honor + guest = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + any_attending_character = { + this = scope:activity.special_guest:camp_party_honorary_guest + location = scope:activity.activity_location + } + } + every_attending_character = { + limit = { + this = scope:activity.special_guest:camp_party_honorary_guest + location = scope:activity.activity_location + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { has_trait = shy } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet } + } + triggered_animation = { + trigger = { + scope:character = { + NOT = { has_trait = shy } + } + } + animation = { ecstasy wedding_priest chaplain personality_honorable personality_bold hero_flex } + } + #Fallback + animation = toast_goblet + } + } + + host = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { toast_goblet toast lute_active } + } + } + } + + guest = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { has_trait = shy } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet } + } + triggered_animation = { + trigger = { + scope:character = { + NOT = { has_trait = shy } + } + } + animation = { dancing laugh throne_room_conversation_2 } + } + #Fallback + animation = toast + } + } + + guest = { + camera = camera_body_left + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { has_trait = shy } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet } + } + triggered_animation = { + trigger = { + scope:character = { + NOT = { has_trait = shy } + } + } + animation = { drink eavesdrop wedding_drunk instrument_active } + } + #Fallback + animation = toast + } + } + } +} diff --git a/common/activities/activity_types/feast.txt b/common/activities/activity_types/feast.txt new file mode 100644 index 00000000..e6a531af --- /dev/null +++ b/common/activities/activity_types/feast.txt @@ -0,0 +1,4933 @@ +@weight_up_ai_select_province_small = 10 +@weight_up_ai_select_province_medium = 50 +@weight_up_ai_select_province_large = 250 +@weight_up_ai_select_province_massive = 500 + +@feast_cost_gold_low = tiny_gold_value +@feast_cost_gold_medium = medium_gold_value +@feast_cost_gold_high = major_gold_value + +activity_feast = { + is_shown = { + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + highest_held_title_tier > tier_barony + trigger_if = { + limit = { + is_ai = yes + NOT = { has_character_flag = feast_ai_override } + } + years_from_game_start >= 3 + ai_should_focus_on_building_in_their_capital = no + is_at_war = no + OR = { + has_character_flag = feasts_a_lot + short_term_gold >= feast_activity_cost + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + short_term_treasury >= feast_activity_cost + } + } + trigger_if = { # Throttle Counts + limit = { + highest_held_title_tier = tier_county + NOR = { + has_government = japan_administrative_government + has_government = japan_feudal_government + } + } + ai_sociability >= 100 + } + } + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_feast } + trigger_if = { + limit = { + OR = { + is_ai = no + NOT = { has_character_flag = feast_ai_override } + } + } + is_available_adult = yes + } + } + + is_valid = { + scope:host = { + is_alive = yes + is_capable_adult = yes + is_imprisoned = no + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + NOT = { is_incapable = yes } + } + # If no one shows up + trigger_if = { + limit = { + is_current_phase_active = yes + } + has_attending_activity_guests = yes + } + } + + on_host_death = { + every_attending_character = { + limit = { is_alive = yes } + trigger_event = { + id = feast.5003 + days = 1 # So you don't get spammed + } + } + # Code sends your entourage home on invalidated + scope:activity.var:host_var = { + # Saving the title for loc + primary_title = { save_scope_as = host_title } + # Inform your heir if you have one + player_heir ?= { + trigger_event = { + id = feast.0800 + days = 1 + } + } + } + } + + on_invalidated = { + if = { + limit = { + scope:host = { is_imprisoned = yes } + } + #Host has been imprisoned + every_attending_character = { + limit = { + this != scope:host + } + trigger_event = feast.5005 + } + scope:host = { trigger_event = feast.5004 } + } + else_if = { #Invalidation for your Murder Target not showing up + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + exists = special_guest:honorary_guest + } + scope:activity = { #theyre not attending + any_attending_character = { + this != scope:activity.special_guest:honorary_guest + } + } + scope:activity.special_guest:honorary_guest = { is_alive = yes } #but they're alive + scope:host = { #and you didn't back down/fail + NOR = { + has_variable = murder_feast_murder_back_down + has_variable = murder_feast_murder_failure_var + } + } + } + activity_host = { trigger_event = feast.2020 } + every_attending_character = { + limit = { + this != scope:host + } + trigger_event = feast.2021 + } + } + else_if = { #Invalidation for your Murder Target dying before you kill them + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + scope:activity.special_guest:honorary_guest = { + is_alive = no + scope:host = { has_variable = murder_feast_killed_var } + } + } + activity_host = { trigger_event = feast.2010 } + every_attending_character = { + limit = { + this != scope:host + } + trigger_event = feast.2011 + } + } + if = { + limit = { + scope:host = { is_incapable = yes } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_attending_character = { + limit = { this != scope:host } + trigger_event = activity_system.0331 + } + } + if = { # No one shows up + limit = { + has_attending_activity_guests = no + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + activity_location = { save_scope_as = location } + } + scope:host = { trigger_event = feast.2003 } + } + # Accolade stuff + if = { + limit = { + any_attending_character = { + has_character_modifier = accolade_charmer_party_modifier + } + } + every_attending_character = { + limit = { + has_character_modifier = accolade_charmer_party_modifier + } + remove_character_modifier = accolade_charmer_party_modifier + } + } + if = { + limit = { + any_attending_character = { + has_character_modifier = accolade_charmer_party_high_modifier + } + } + every_attending_character = { + limit = { + has_character_modifier = accolade_charmer_party_high_modifier + } + remove_character_modifier = accolade_charmer_party_high_modifier + } + } + # Host becomes unlanded + if = { + limit = { + scope:host = { + is_landed_or_landless_administrative = no + } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + every_attending_character = { + trigger_event = activity_system.0320 + } + } + } + + ################### + # PARAMETERS + ################### + + is_single_location = yes + + province_filter = domicile_domain + ai_province_filter = capital + + max_route_deviation_mult = 2.0 + + is_location_valid = { + has_holding = yes + } + + province_description = { + desc = activity_feast_province_desc + # +++ / triple plus good + triggered_desc = { + trigger = { has_building_or_higher = citadel_of_aleppo_01 } + desc = activity_feast_province_desc_citadel_of_aleppo + } + triggered_desc = { + trigger = { has_building_or_higher = palace_of_aachen_01 } + desc = activity_feast_province_desc_palace_of_aachen + } + triggered_desc = { + trigger = { has_building_or_higher = doges_palace_01 } + desc = activity_feast_province_desc_doges_palace + } + triggered_desc = { + trigger = { has_building_or_higher = ghana_palace_01 } + desc = activity_feast_province_desc_ghana_palace_01 + } + triggered_desc = { + trigger = { has_building_or_higher = kyz_kala_01 } + desc = activity_feast_province_desc_kyz_kala_01 + } + triggered_desc = { + trigger = { has_building_or_higher = leisure_palace_01 } + desc = activity_feast_province_desc_leisure_palace + } + triggered_desc = { + trigger = { has_building_or_higher = alhambra_01 } + desc = activity_feast_province_desc_alhambra + } + # ++ / double plus good + triggered_desc = { + trigger = { has_building_or_higher = paddy_fields_01 } + desc = activity_feast_province_desc_paddy_fields + } + # + / plus good + triggered_desc = { + trigger = { has_building_or_higher = longhouses_01 } + desc = activity_feast_province_desc_longhouses + } + triggered_desc = { + trigger = { has_building_or_higher = orchards_01 } + desc = activity_feast_province_desc_orchards + } + triggered_desc = { + trigger = { has_building_or_higher = cereal_fields_01 } + desc = activity_feast_province_desc_cereal_fields + } + triggered_desc = { + trigger = { has_building_or_higher = plantations_01 } + desc = activity_feast_province_desc_plantations + } + triggered_desc = { + trigger = { has_building_or_higher = pleasure_dome } + desc = activity_feast_province_desc_pleasure_dome + } + } + + max_province_icons = 5 + + province_score = { + value = 0 + # BUILDINGS + # Triple good / +++ + if = { + limit = { has_building_or_higher = citadel_of_aleppo_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = palace_of_aachen_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = doges_palace_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = ghana_palace_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = kyz_kala_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = leisure_palace_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = alhambra_01 } + add = 100 + } + if = { + limit = { has_building_or_higher = pleasure_dome } + add = 100 + } + # Double good / ++ + if = { + limit = { has_building_or_higher = farm_estates_01 } + add = 50 + } + if = { + limit = { has_building_or_higher = paddy_fields_01 } + add = 50 + } + # Good / + + if = { + limit = { has_building_or_higher = longhouses_01 } + add = 25 + } + if = { + limit = { has_building_or_higher = orchards_01 } + add = 25 + } + if = { + limit = { has_building_or_higher = cereal_fields_01 } + add = 25 + } + if = { + limit = { has_building_or_higher = plantations_01 } + add = 25 + } + } + + cooldown = { years = standard_feast_cooldown_time } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 30 + desc = "Base" + } + add = { + value = ai_greed + multiply = -0.25 + desc = "ai_greed" + } + add = { + value = ai_sociability + multiply = 0.5 + desc = "ai_sociability" + } + if = { + limit = { + ai_energy < 0 + } + add = { + add = ai_energy + desc = "ai_energy" + } + } + if = { + limit = { has_trait = gregarious } + add = { + value = 10 + desc = "Is gregarious" + } + } + if = { + limit = { has_trait = shy } + add = { + value = -30 + desc = "Is shy" + } + } + if = { + limit = { has_trait = inappetetic } + add = { + value = -30 + desc = "Is inappetetic" + } + } + if = { + limit = { has_trait = reclusive } + add = { + value = -30 + desc = "Is reclusive" + } + } + if = { + limit = { + short_term_gold >= feast_activity_cost + short_term_gold >= major_gold_value + } + add = { + value = 30 + desc = "Got gold to burn" + } + } + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + short_term_treasury >= hunt_activity_base_cost + short_term_treasury >= major_gold_value + } + add = { + value = 30 + desc = "Got treasury to burn" + } + } + if = { + limit = { has_trait = lifestyle_reveler } + add = { + value = 20 + desc = "Is Reveler" + } + } + if = { + limit = { + has_royal_court = yes + has_court_type = court_intrigue + } + add = { + value = 10 + desc = "Intrigue court trait" + } + } + if = { + limit = { has_trait = comfort_eater } + add = { + value = 10 + desc = "Is Comfort Eater" + } + } + if = { + limit = { has_trait = drunkard } + add = { + value = 10 + desc = "Is Drunkard" + } + } + if = { + limit = { has_trait = gluttonous } + add = { + value = 10 + desc = "Is Gluttonous" + } + } + if = { + limit = { has_trait = hashishiyah } + add = { + value = 10 + desc = "Has Munchies" + } + } + # Stress + if = { # Low Stress + limit = { + stress >= lower_than_baseline_stress + NOT = { has_trait = shy } + } + add = { + value = 20 + desc = "lower_than_baseline_stress" + } + } + if = { # High Stress + limit = { + stress >= higher_than_baseline_stress + NOT = { has_trait = shy } + } + add = { + value = 20 + desc = "higher_than_baseline_stress" + } + } + if = { # Very High Stress + limit = { + stress >= high_stress + NOT = { has_trait = shy } + } + add = { + value = 20 + desc = "high_stress" + } + } + if = { + limit = { + culture = { + has_cultural_tradition = tradition_culinary_art + } + } + add = { + value = 20 + desc = "Host culture has Culinary Artists Cultural Tradition" + } + } + if = { + limit = { + faith = { has_doctrine = tenet_ritual_celebrations } + } + add = { + value = 35 + desc = "Host culture has Ritual Celebrations Cultural Tradition" + } + } + if = { + limit = { + faith = { has_doctrine = tenet_hedonistic } + } + add = { + value = 35 + desc = "Host faith has Hedonistic Tenet" + } + } + if = { + limit = { + host.faith = { + has_doctrine = tenet_asceticism + } + } + add = { + value = -20 + desc = "Host faith has Asceticism tenet" + } + } + if = { + limit = { has_character_flag = feasts_a_lot } + add = { + value = 500 + desc = "feasts a lot" + } + } + if = { + limit = { + top_liege != this + has_vassal_stance = courtly + } + add = { + value = 10 + desc = courtly + } + } + if = { + limit = { ai_has_warlike_personality = yes } + add = { + value = -30 + desc = "Warlike" + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + gold > prestige + gold > 200 + prestige < 600 + } + add = { + value = 70 + desc = "Nomad searching for prestige" + } + } + # Struggles. + if = { + limit = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + } + } + # Escalating. + if = { + limit = { has_character_flag = agenda_towards_escalation } + add = { + value = -25 + desc = debug_gui.activity_weight.struggle.wants_to_escalate + } + } + # Deescalating. + if = { + limit = { has_character_flag = agenda_towards_deescalation } + add = { + value = 50 + desc = debug_gui.activity_weight.struggle.wants_to_deescalate + } + } + } + if = { + limit = { + ai_has_warlike_personality = yes + war_chest_gold < war_chest_gold_maximum + } + multiply = { + value = 0.25 + desc = "Warlike" + } + } + # Economic Archetype + if = { # Too busy booming the economy + limit = { + OR = { + ai_has_economical_boom_personality = yes + has_character_flag = ai_boom + } + } + add = { + value = -200 + desc = "Builder" + } + } + if = { # Should probably spend their gold elsewhere + limit = { + ai_has_pious_builder_personality = yes + } + if = { # Unless... + limit = { + faith = { has_doctrine = tenet_ritual_celebrations } + } + add = { + value = 100 + desc = "Pious Builder with Ritual Celebrations" + } + } + else = { + add = { + value = -100 + desc = "Pious Builder" + } + } + } + if = { + limit = { + has_variable = conqueror + OR = { + AND = { + prestige_level < 4 + can_use_conquest_cbs_trigger = yes + } + prestige < 1000 + } + } + add = { + value = 1000 + desc = "conqueror looking for prestige" + } + } + if = { + limit = { + has_variable = conqueror + trigger_if = { + limit = { + prestige_level >= 4 + can_use_conquest_cbs_trigger = yes + } + prestige_level >= 4 + } + prestige >= 1000 + } + add = { + value = -5000 + desc = "conqueror sated for prestige" + } + } + # Legitimacy + if = { + limit = { + is_valid_for_legitimacy_change = yes + } + if = { # Low Legitimacy + limit = { + OR = { + legitimacy_level = 1 + legitimacy_level = 2 + } + } + add = { + value = 10 + desc = "low_legitimacy" + } + } + if = { # Very Low Legitimacy + limit = { + legitimacy_level = 0 + } + add = { + value = 20 + desc = "low_legitimacy" + } + } + } + # Plague + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Domain" + } + } + else_if = { + limit = { + any_realm_county = { + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -20 + desc = "Plague in Top Realm" + } + } + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Domain" + } + } + else_if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -40 + desc = "Apocalyptic Plague in Top Realm" + } + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + add = 10000 + } + } + + ################### + # GUEST HANDLING + ################### + + max_guests = 40 + + guest_invite_rules = { + rules = { + # Relations. + 2 = activity_invite_rule_rivals_if_appropriate + + # Family. + 3 = activity_invite_rule_extended_family + + # Magnates. + 4 = activity_invite_neighbouring_rulers + + # Misc landless. + 5 = activity_invite_rule_knights + + # MP + 6 = activity_invite_mp + } + defaults = { + 1 = activity_invite_rule_friends + 1 = activity_invite_rule_potential_friends + 2 = activity_invite_rule_lovers + 2 = activity_invite_rule_potential_lovers + 1 = activity_invite_rule_close_family + 1 = activity_invite_rule_liege + 1 = activity_invite_rule_suzerain + 1 = activity_invite_rule_tributaries + 1 = activity_invite_rule_confederates + 1 = activity_invite_rule_vassals + 2 = activity_invite_rule_fellow_vassals + 3 = activity_invite_rule_courtiers + 4 = activity_invite_rule_guests + 1 = activity_invite_spouses + 1 = activity_invite_rule_landless_adventurers_restricted_range_opinion + } + } + + can_be_activity_guest = { + is_adult = yes + is_healthy = yes + in_diplomatic_range = scope:host + } + + host_intents = { + intents = { reduce_stress_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent spread_legend_intent legitimacy_intent } + default = reduce_stress_intent + } + + guest_intents = { + intents = { reduce_stress_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent banquet_mischief_intent spread_legend_intent legitimacy_intent } + default = reduce_stress_intent + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + activity_guest_feast_ai_accept_modifier = yes + + # If the Host has hosted a Murder Feast recently people are sus + modifier = { + scope:host = { has_variable = recent_murder_feast_var } + add = { + value = -15 + desc = "Recent $feast_type_murder$" + } + } + + # Master of Revels Accolade increasing invite acceptance + modifier = { + scope:host = { + any_active_accolade = { + accolade_parameter = acclaimed_knight_feast_wedding_invite_acceptance_bonus + } + } + add = accolade_feast_wedding_invite_acceptance_value + } + } + + special_guests = { + honorary_guest_regular = { + is_required = no + + is_shown = { + scope:special_option = flag:feast_type_generic + } + + can_pick = { + this != scope:host + is_healthy = yes + is_adult = yes + trigger_if = { # Pick adventurers first! + limit = { + scope:host = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + reverse_has_opinion_modifier = { + modifier = laamp_used_contact_opinion_special + target = scope:host + } + } + trigger_if = { + limit = { + scope:host = { + is_ai = yes + NOT = { has_character_flag = feast_ai_override } + } + } + OR = { + is_vassal_of = scope:host + target_is_vassal_or_below = scope:host + has_relation_friend = scope:host + has_relation_lover = scope:host + } + } + } + + ai_will_do = { + value = 10 + } + } + + honorary_guest = { #Murder guest, localization changes for host + is_required = yes + + is_shown = { + scope:special_option = flag:feast_type_murder + } + + can_pick = { + this != scope:host + is_healthy = yes + is_adult = yes + NOT = { is_spouse_of = scope:host } + trigger_if = { + limit = { + scope:host = { is_ai = yes } + } + has_relation_rival = scope:host #AI only picks rivals + this != scope:host.liege #AI doesnt pick their liege + this != scope:host.faith.religious_head #AI doesnt pick their HoF + } + } + + ai_will_do = { + value = 10 + } + } + } + + travel_entourage_selection = { + weight = { + value = standard_travel_entourage_additions + if = { + limit = { + OR = { + has_trait = gregarious + has_trait = drunkard + has_trait = hashishiyah + has_trait = gluttonous + has_trait = comfort_eater + } + } + add = 10 + } + } + max = 18 + invite_rule_order = 3 + } + + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + add = base_feast_cost_value + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + treasury = { + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = base_feast_cost_value + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + } + piety = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_mandala } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + add = base_feast_cost_value + } + } + barter_goods = { + if = { + limit = { + NOT = { government_allows = barter } + } + value = 0 + } + else = { + add = base_feast_cost_value + } + } + } + + ui_predicted_cost = { + # All costs are balanced on County/Early Era starting point + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + value = base_feast_ui_cost_value + } + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + } + value = 0 + } + else = { + value = base_feast_cost_value + } + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + value = base_feast_ui_cost_value + } + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + + barter_goods = { + if = { + limit = { + NOT = { government_allows = barter } + } + value = 0 + } + else = { + value = base_feast_ui_cost_value + } + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + } + + ################### + # GRAPHICS + ################### + + map_entity = { + trigger = { + activity_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_feast_01_entity" + } + + map_entity = { + trigger = { + activity_location.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_indian_feast_01_entity" + } + + map_entity = "building_western_feast_01_entity" + + # Travel + background = { # Bridge + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + + background = { + trigger = { + OR = { + scope:host = { government_has_flag = government_is_nomadic } + AND = { + scope:host = { government_has_flag = government_is_tribal } + activity_location.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + scope:host = { + is_landless_adventurer = yes + culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_steppe.dds" + environment = "environment_steppe_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { # EP3 + trigger = { + activity_location.culture = { + OR = { + has_building_gfx = byzantine_building_gfx + has_building_gfx = caucasian_building_gfx + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep3_feast_byzantine.dds" + environment = "environment_ep3_byzantine_feast" + ambience = "event:/SFX/Events/Backgrounds/corner_of_tavern" + } + background = { # FP1 + trigger = { + activity_location.culture = { has_building_gfx = norse_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_viking_feast.dds" + environment = "environment_event_fp1_viking_feast" + ambience = "event:/DLC/FP1/SFX/Events/event_viking_feast" + } + background = { + trigger = { + activity_location ?= { + OR = { + culture = { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_indian.dds" + environment = "environment_indian_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + OR = { + activity_location.culture = { has_building_gfx = arabic_group_building_gfx } + activity_location.culture = { has_building_gfx = berber_group_building_gfx } + activity_location.culture = { has_building_gfx = iberian_building_gfx } + activity_location.culture = { has_building_gfx = iranian_building_gfx } + activity_location = { steppe_building_gfx_use_mena_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_mena.dds" + environment = "environment_mena_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + activity_location ?= { + OR = { + culture = { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_feast_asia.dds" + environment = "environment_tgp_feast_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_feast_asia" + } + background = { + trigger = { + activity_location.culture = { has_building_gfx = african_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_sub_saharan.dds" + environment = "environment_sub-saharan_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + OR = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_generic + } + } + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_legendary + } + } + scope:activity.special_guest:honorary_guest ?= { is_alive = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/feast.dds" + environment = "environment_event_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + music = "grandfeast_cue" + } + background = { + trigger = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + scope:activity.special_guest:honorary_guest ?= { is_alive = no } + } + texture = "gfx/interface/illustrations/event_scenes/feast.dds" + environment = "environment_event_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + music = "murderfest_cue" + } + background = { + trigger = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_tsagaan_sar + } + } + scope:activity.special_guest:honorary_guest ?= { is_alive = no } + } + texture = "gfx/interface/illustrations/event_scenes/feast.dds" + environment = "environment_event_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + music = "grandfeast_cue" + } + + window_characters = { + + guest = { + camera = camera_body_right + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + exists = scope:player + scope:player = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + } + } + scope:player ?= { add_to_list = characters } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + exists = scope:host.intent_target + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + this = scope:host.intent_target + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + this = scope:host.intent_target + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + has_relation_lover = scope:host + has_relation_friend = scope:host + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + has_relation_lover = scope:host + has_relation_friend = scope:host + } + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_consort_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_consort_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = yes } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + has_activity_intent = woo_attendee_intent + } + scope:character = scope:host.intent_target + } + animation = { love flirtation } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + has_activity_intent = murder_attendee_intent + } + scope:character = scope:host.intent_target + } + animation = { dismissal worry paranoia } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + scope:character = { has_trait = shy } + } + animation = { sadness worry } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + } + animation = { drink_goblet happiness flirtation throne_room_conversation_3 throne_room_conversation_1 } + } + #Fallback + animation = toast + } + } + + host = { + camera = camera_body + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:host.location = { is_sea_province = yes } + } + animation = { survey } + } + triggered_animation = { + trigger = { + OR = { + AND = { + exists = scope:activity.special_guest:honorary_guest.location + NOT = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:honorary_guest_regular.location + NOT = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + } + } + animation = { boredom } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = yes } + } + animation = { schadenfreude personality_vengeful } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + is_male = yes + has_activity_intent = befriend_attendee_intent + } + scope:host.intent_target.location = scope:activity.activity_location + } + animation = { personality_forgiving personality_compassionate } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + is_male = yes + has_activity_intent = murder_attendee_intent + } + scope:host.intent_target.location = scope:activity.activity_location + } + animation = { hunting_knife_start } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + is_male = yes + has_activity_intent = woo_attendee_intent + } + scope:host.intent_target.location = scope:activity.activity_location + } + animation = { wedding_groom_right } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + is_female = yes + has_activity_intent = woo_attendee_intent + } + scope:host.intent_target.location = scope:activity.activity_location + } + animation = { reception_bride_right } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + } + animation = { toast_goblet } + } + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + honorary_guest_traveling_murder = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:activity.special_guest:honorary_guest.involved_activity ?= scope:activity + NOR = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + scope:activity.special_guest:honorary_guest.location ?= { is_sea_province = yes } + } + } + special_guest:honorary_guest ?= { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + honorary_guest_murder = { # Both regular and murder + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + scope:activity.special_guest:honorary_guest.location ?= { is_sea_province = yes } + } + } + special_guest:honorary_guest ?= { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity.special_guest:honorary_guest_regular = { is_travelling = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { + always = yes + } + animation = { ecstasy wedding_priest chaplain personality_honorable personality_bold } + } + } + } + + honorary_guest_regular_traveling = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:activity.special_guest:honorary_guest_regular.involved_activity ?= scope:activity + NOR = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + scope:activity.special_guest:honorary_guest_regular.location = { is_sea_province = yes } + } + } + special_guest:honorary_guest_regular ?= { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + honorary_guest_regular = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + scope:activity.special_guest:honorary_guest_regular.location ?= { is_sea_province = yes } + } + } + special_guest:honorary_guest_regular ?= { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity.special_guest:honorary_guest_regular = { is_travelling = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { + always = yes + } + animation = { ecstasy wedding_priest chaplain personality_honorable personality_bold dancing } + } + } + } + + guest = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = yes } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + scope:character = { has_trait = shy } + } + animation = { stress } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + } + animation = { dancing laugh toast flirtation_left throne_room_conversation_2 } + } + #Fallback + animation = toast + } + } + + guest = { + camera = camera_body_left + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + OR = { + is_parent_of = scope:host + is_close_or_extended_family_of = scope:host + } + } + add_to_list = characters + } + } + else_if = { + limit = { + scope:host.location = scope:activity.activity_location + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest } + scope:activity.special_guest:honorary_guest.location ?= scope:activity.activity_location + } + OR = { + NOT = { exists = scope:activity.special_guest:honorary_guest_regular } + scope:activity.special_guest:honorary_guest_regular.location ?= scope:activity.activity_location + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + scope:activity.special_guest:honorary_guest ?= this + scope:activity.special_guest:honorary_guest_regular ?= this + } + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = yes } + } + animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet dancing } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + scope:character = { has_trait = shy } + } + animation = { paranoia } + } + triggered_animation = { + trigger = { + scope:activity = { is_murder_feast = no } + } + animation = { drink eavesdrop wedding_drunk dancing } + } + #Fallback + animation = toast + } + } + } + + ################### + # OPTIONS + ################### + + options = { + #Feast types + special_type = { + # Revel feast. + ## Generic feast for when you've got no specific reason. + feast_type_generic = { + default = yes + + ai_will_do = { + value = 50 + if = { + limit = { + OR = { + has_trait = gregarious + has_trait = arrogant + has_trait = arbitrary + has_trait = brave + has_trait = just + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = shy + has_trait = humble + has_trait = callous + has_trait = sadistic + } + } + subtract = 50 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + add = 100 + } + } + } + # Legendary feast. + ## Spread your legend. + feast_type_legendary = { + + is_shown = { + has_dlc_feature = legends_of_the_dead + } + + is_valid = { + custom_tooltip = { + text = legendary_feast_valid_tt + exists = promoted_legend #you need to have a legend to promote + } + } + + ai_will_do = { + value = 50 + if = { + limit = { + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = lifestyle_poet + has_trait = journaller + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = shy + has_trait = humble + } + } + subtract = 50 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + add = 100 + } + } + } + # Murder feast. + ## You're trying to kill. _Everyone_. Kind of. + feast_type_murder = { + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + value = feast_type_murder_value + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_type_murder_value + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + } + } + + is_shown = { + has_dlc_feature = tours_and_tournaments + } + + is_valid = { + has_perk = forever_infamous_perk + custom_tooltip = { + text = feast_type_murder_valid_tt + NOT = { has_variable = recent_murder_feast_var } #15 years cooldown + } + } + + blocked_intents = { murder_attendee_intent befriend_attendee_intent woo_attendee_intent } #you can only relax mate + + ai_will_do = { + value = 0 + if = { + limit = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arbitrary + has_trait = vengeful + has_trait = torturer + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = just + has_trait = honest + has_trait = compassionate + has_trait = generous + has_trait = forgiving + } + } + subtract = 50 + } + if = { + limit = { + this = faith.religious_head + NOT = { has_trait = torturer } + faith = { + NOR = { + has_doctrine_parameter = gruesome_festivals_active + has_doctrine_parameter = human_sacrifice_active + } + } + } + add = -100 + } + if = { + limit = { + this = faith.religious_head + NOT = { has_trait = compassionate } + faith = { + OR = { + has_doctrine_parameter = gruesome_festivals_active + has_doctrine_parameter = human_sacrifice_active + } + } + } + add = 50 + } + } + } + # Tsagaan Sar + ## Special feast for nomads + feast_type_tsagaan_sar = { + cost = { + gold = { + add = { + add = { + value = feast_activity_cost + multiply = 2.5 + desc = feast_type_tsagaan_sar + } + add = { + value = feast_activity_cost + multiply = 2.5 + multiply = activity_cost_scale_by_era + subtract = { + value = feast_activity_cost + multiply = 2.5 + } + desc = activity_cost_scale_by_era_desc + } + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = feast_activity_cost + multiply = 2.5 + multiply = activity_cost_scale_by_era + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_character_modifier = mpo_bountiful_sheep_modifier + } + multiply = { + value = 0.8 + desc = mpo_bountiful_sheep_modifier + } + } + if = { + limit = { + has_character_modifier = mpo_si_slaughtered_animals + } + multiply = { + value = 0.5 + desc = mpo_si_slaughtered_animals + } + } + if = { + limit = { + has_character_modifier = mpo_nerge_feast_discount + } + multiply = { + value = 0.5 + desc = mpo_nerge_feast_discount + } + } + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + } + + is_shown = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + culture = { + OR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + } + } + } + + is_valid = { + custom_tooltip = { + text = feast_type_tsagaan_sar_valid_tt + NOT = { has_variable = recent_tsagaan_sar_feast_var } #3 years cooldown + } + custom_tooltip = { + text = feast_type_tsagaan_sar_valid_tt_time + AND = { + current_month >= 1 + current_month <= 3 + } + } + } + + ai_will_do = { + value = 50 + if = { + limit = { + OR = { + has_trait = gregarious + has_trait = arrogant + has_trait = arbitrary + has_trait = brave + has_trait = just + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = shy + has_trait = humble + has_trait = callous + has_trait = sadistic + } + } + subtract = 50 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + add = 100 + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + add = 100 + } + } + } + } + + # How fancy do you make your dishes? + feast_option_food = { + feast_food_bad = { + is_shown = { has_dlc_feature = advanced_activities } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Fanciness preference. + add = activity_option_likes_functional_food_option_value + } + } + feast_food_normal = { + default = yes + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + value = feast_food_normal_value + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_normal_value + } + } + piety = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_mandala } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_normal_value + } + } + barter_goods = { + if = { + limit = { + OR = { + NOT = { government_allows = barter } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_normal_value + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Fanciness preference. + ## We just use slightly reduced fanciness prefs here. + add = { + value = activity_option_likes_ostentatious_food_option_value + multiply = 0.5 + } + } + } + feast_food_good = { + is_shown = { has_dlc_feature = advanced_activities } + + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + value = feast_food_good_value + } + } + treasury = { + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_good_value + } + } + piety = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_mandala } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_good_value + } + } + barter_goods = { + if = { + limit = { + OR = { + NOT = { government_allows = barter } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_food_good_value + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + # Fanciness preference. + add = activity_option_likes_ostentatious_food_option_value + } + } + } + + # How many courses do you have? + feast_option_courses = { + feast_courses_bad = { + is_shown = { has_dlc_feature = advanced_activities } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Quantity preference. + add = activity_option_food_prefers_small_volume_value + } + } + feast_courses_normal = { + default = yes + + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + value = feast_courses_normal_value + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_normal_value + } + } + + piety = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_mandala } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_normal_value + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + } + + barter_goods = { + if = { + limit = { + OR = { + NOT = { government_allows = barter } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_normal_value + + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + multiply = { + value = 0 # Free + desc = mpo_nerge_1060_free_feast_desc + } + } + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.5 + } + } + } + feast_courses_good = { + is_shown = { has_dlc_feature = advanced_activities } + + cost = { + gold = { + if = { + limit = { + OR = { + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + government_allows = barter + } + } + value = 0 + } + else = { + value = feast_courses_good_value + } + } + treasury = { + if = { + limit = { + OR = { + NAND = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_good_value + } + } + piety = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_mandala } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_good_value + } + } + + barter_goods = { + if = { + limit = { + OR = { + NOT = { government_allows = barter } + AND = { + is_ai = yes + has_character_flag = feast_ai_override + } + } + } + value = 0 + } + else = { + value = feast_courses_good_value + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + # Quantity preference. + add = activity_option_prefers_large_volume_value + } + } + } + + # Estate Unlock - Wine Selection, how much do you spend on wine and other exotic drinks? + feast_option_wine = { + feast_wine_none = { + is_shown = { + has_dlc_feature = advanced_activities + domicile ?= { + OR = { + has_domicile_parameter = estate_unlock_feast_influence_option_1 + has_domicile_parameter = estate_unlock_feast_influence_option_2 + has_domicile_parameter = estate_unlock_feast_influence_option_3 + } + } + } + + default = yes + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Quantity preference. + add = activity_option_food_prefers_small_volume_value + } + } + feast_wine_limited = { + is_shown = { + has_dlc_feature = advanced_activities + domicile ?= { + OR = { + has_domicile_parameter = estate_unlock_feast_influence_option_1 + has_domicile_parameter = estate_unlock_feast_influence_option_2 + has_domicile_parameter = estate_unlock_feast_influence_option_3 + } + } + } + + cost = { + gold = { + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + value = 0 + } + else = { + add = { + desc = feast_wine_limited + add = { + value = 10 + desc = feast_wine_limited + } + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 10 + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + add = { + desc = feast_wine_limited + add = { + value = 10 + desc = feast_wine_limited + } + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 10 + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + else = { + value = 0 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.3 + } + } + } + feast_wine_normal = { + is_shown = { + has_dlc_feature = advanced_activities + domicile ?= { + OR = { + has_domicile_parameter = estate_unlock_feast_influence_option_2 + has_domicile_parameter = estate_unlock_feast_influence_option_3 + } + } + } + + cost = { + gold = { + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + value = 0 + } + else = { + add = { + desc = feast_wine_normal + add = { + value = 35 + desc = feast_wine_normal + } + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 35 + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + add = { + desc = feast_wine_normal + add = { + value = 35 + desc = feast_wine_normal + } + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 35 + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + else = { + value = 0 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.6 + } + } + } + feast_wine_extensive = { + is_shown = { + has_dlc_feature = advanced_activities + domicile ?= { has_domicile_parameter = estate_unlock_feast_influence_option_3 } + } + + cost = { + gold = { + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + value = 0 + } + else = { + add = { + desc = feast_wine_extensive + add = { + value = 90 + desc = feast_wine_extensive + } + add = { + value = 90 + multiply = activity_cost_scale_by_tier + subtract = 90 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 90 + multiply = activity_cost_scale_by_era + subtract = 90 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 90 + add = { + value = 90 + multiply = activity_cost_scale_by_tier + subtract = 90 + } + add = { + value = 90 + multiply = activity_cost_scale_by_era + subtract = 90 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = feasts_costs_treasury } + has_treasury = yes + } + add = { + desc = feast_wine_extensive + add = { + value = 90 + desc = feast_wine_extensive + } + add = { + value = 90 + multiply = activity_cost_scale_by_tier + subtract = 90 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 90 + multiply = activity_cost_scale_by_era + subtract = 90 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 90 + add = { + value = 90 + multiply = activity_cost_scale_by_tier + subtract = 90 + } + add = { + value = 90 + multiply = activity_cost_scale_by_era + subtract = 90 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + min = 0 + } + } + else = { + value = 0 + } + if = { + limit = { + is_ai = yes + has_character_flag = feast_ai_override + } + multiply = 0 + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + # Quantity preference. + add = activity_option_prefers_large_volume_value + } + } + } + } + + special_option_category = special_type + + ################### + # PHASES + ################### + + max_guest_arrival_delay_time = { months = 8 } + + phases = { + # Meal. + feast_phase_meal = { + order = 1 + is_predefined = yes + + is_shown = { always = yes } + is_valid = { + trigger_if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + } + scope:activity.special_guest:honorary_guest = { + OR = { + AND = { #is alive and attending/invited + is_alive = yes + OR = { + is_participant_in_activity = scope:activity + scope:activity = { + any_invited_character = { this = scope:activity.special_guest:honorary_guest } + } + } + } + AND = { #is dead but you killed them + is_alive = no + scope:host = { has_variable = murder_feast_killed_var } + } + } + } + } + } + + on_phase_active = { + # Sort some stuff on the host. + if = { + limit = { this = scope:host } + + scope:activity = { progress_activity_phase_after = { months = 1 } } + + # Misc. old content variable. + ## Reduce alcohol stores if appropriate. + if = { + limit = { exists = var:protected_alcohol_stores } + set_variable = { + name = protected_alcohol_stores + value = 0 + } + } + ## Look for a target you're trying to befriend + if = { + limit = { + any_scheme = { + type = befriend + scheme_target_character = { + involved_activity ?= scope:activity + } + } + } + random_scheme = { + type = befriend + limit = { + scheme_target_character = { + involved_activity ?= scope:activity + } + } + scheme_target_character = { + save_scope_as = potential_friend + scope:activity = { + set_variable = { + name = potential_friend + value = scope:potential_friend + } + } + } + scheme_freeze = { + reason = "BEFRIENDING_AT_FEAST" + days = 10 + } + } + } + # And now, the main event! + ## Check that there are guests apart from the feast host. + if = { + limit = { + scope:activity = { + any_attending_character = { + count = 0 + this != scope:host + } + } + } + # If there are no other guests, throw this event. + ## [sad period-appropriate trombone noises] + trigger_event = feast.2003 + } + ## Otherwise, there are guests present. + ### The key event is chosen for the host, and fires other events from there to every participant. + else = { + trigger_event = feast.2001 + # Struggle Catalysts + ## We trigger this here to make sure that someone else actually turned up to the party before having it affect regional relations. + if = { + limit = { + # At least one participant is involved and of a different faith or culture + scope:activity = { + any_attending_character = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + } + is_diff_faith_or_culture_trigger = { + CHAR = scope:host + STATUS = involved + } + } + } + } + every_character_struggle = { + involvement = involved + activate_struggle_catalyst = { + catalyst = catalyst_invite_diff_faith_culture_to_feast + character = scope:activity.activity_host + } + } + } + } + # Accolade stuff + if = { + limit = { + any_active_accolade = { + accolade_parameter = accolade_party_fertility + } + } + add_character_modifier = { + modifier = accolade_charmer_party_modifier + } + } + if = { + limit = { + any_active_accolade = { + accolade_parameter = accolade_party_fertility_high + } + } + add_character_modifier = { + modifier = accolade_charmer_party_high_modifier + } + } + if = { + limit = { is_tsagaan_sar = yes } + set_variable = { + name = recent_tsagaan_sar_feast_var + years = 5 + } + trigger_event = feast_tsagaan_sar_events.0001 # Determine who should give gifts, and who will + } + } + # And for everyone else. + else = { + # You're busy at another party! (invites were sent the same day, but you agreed to another party after this one ) + if = { + limit = { + exists = var:booked_for_a_party + var:booked_for_a_party = { + this != scope:activity.activity_host + } + } + trigger_event = feast.0010 + } + else = { + random_list = { + 0 = { #they don't join + modifier = { + add = 100 + scope:host = { has_variable = murder_feast_perpetrator_var } #if you have hosted a murder feast + } + } + 100 = { + trigger_event = feast.7051 + } + } + # Take care of reveller stuff for everyone else. + if = { + limit = { + NOT = { has_trait = temperate } + } + # Reveler lifestyle tracking: + reveler_points_gain_effect = { + CHANGE = 1 + RANDOM_CHANGE = 1 + } + # Remove blocker for invitations to feasts (the feast is now active and will work as a blocker) + remove_variable = booked_for_a_party + } + } + } + } + + on_weekly_pulse = { + if = { #host + limit = { + this = scope:host + } + trigger_event = { on_action = feast_new_event_selection_tombola } + } + else_if = { #guest + limit = { + this != scope:host + } + trigger_event = { on_action = feast_default_event_selection } + } + } + } + + # Toast. + feast_phase_toast = { + order = 2 + is_predefined = yes + + on_enter_phase = { + if = { + limit = { this = scope:host } + + # No passive state for the toast, just jump right into it + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + + if = { # Regular feast + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_generic + } + } + } + + # Save the GoH for the sake of my sanity. + scope:activity.special_guest:honorary_guest_regular ?= { save_scope_as = goh } + + # EP3 Dynasty Legacy Domicile Building Buff + ep3_dynasty_legacy_add_legitimacy_effect = yes + + # Trigger summary event, also handles guest events + trigger_event = feast.7201 + } + else_if = { # Legendary feast + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_legendary + } + } + } + # Trigger summary event, also handles guest events + trigger_event = feast.7204 + } + else_if = { # Murder feast + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + scope:host = { NOT = { has_variable = murder_feast_murder_back_down } } + } + + trigger_event = { on_action = feast_murder_feast_event_selection } #KILL event, also handles the guest events + } + + scope:activity = { progress_activity_phase_after = { weeks = 1 } } + } + + if = { # Tsagaan Sar + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_tsagaan_sar + } + } + } + + trigger_event = { id = feast_tsagaan_sar_events.0290 } + + if = { + limit = { this = scope:host } + + trigger_event = { + id = feast_tsagaan_sar_events.0010 + days = 2 + } + } + } + } + + on_end = { + # Adjust everyone's waistlines. + target_weight_modifier_effect = { + VALUE = feast_weight_modifier_value + } + } + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_will_select_province = { + # Base + value = 1 + # Buildings + ## Tribal + ### Gathering Halls + if = { + limit = { has_building_or_higher = longhouses_01 } + add = { + value = @weight_up_ai_select_province_small + desc = activity_feast_province_desc_longhouses + } + } + ## Terrain + ### Manor Houses + if = { + limit = { has_building_or_higher = farm_estates_01 } + add = { + value = @weight_up_ai_select_province_medium + desc = activity_feast_province_desc_farm_estates + } + } + ### Paddy Fields + if = { + limit = { has_building_or_higher = paddy_fields_01 } + add = { + value = @weight_up_ai_select_province_medium + desc = activity_feast_province_desc_paddy_fields + } + } + ### Orchards + if = { + limit = { has_building_or_higher = orchards_01 } + add = { + value = @weight_up_ai_select_province_small + desc = activity_feast_province_desc_orchards + } + } + ### Farms & Fields + if = { + limit = { has_building_or_higher = cereal_fields_01 } + add = { + value = @weight_up_ai_select_province_small + desc = activity_feast_province_desc_cereal_fields + } + } + ### Hill Farms + if = { + limit = { has_building_or_higher = hill_farms_01 } + add = { + value = @weight_up_ai_select_province_small + desc = debug_gui.location_weight.building.hill_farms + } + } + ### Desert Agriculture + if = { + limit = { has_building_or_higher = plantations_01 } + add = { + value = @weight_up_ai_select_province_small + desc = activity_feast_province_desc_plantations + } + } + ## Duchy + ### Leisure Palaces + if = { + limit = { has_building_or_higher = leisure_palace_01 } + add = { + value = @weight_up_ai_select_province_large + desc = activity_feast_province_desc_leisure_palace + } + } + ## Special + ### Doge's Palace + if = { + limit = { has_building_or_higher = doges_palace_01 } + add = { + value = @weight_up_ai_select_province_massive + desc = activity_feast_province_desc_doges_palace + } + } + ### Ghana Palace + if = { + limit = { has_building_or_higher = ghana_palace_01 } + add = { + value = @weight_up_ai_select_province_massive + desc = activity_feast_province_desc_ghana_palace_01 + } + } + ### Palace of Aachen + if = { + limit = { has_building_or_higher = palace_of_aachen_01 } + add = { + value = @weight_up_ai_select_province_large + desc = activity_feast_province_desc_palace_of_aachen + } + } + ### Royal Palace of Alhambra + if = { + limit = { has_building_or_higher = alhambra_01 } + add = { + value = @weight_up_ai_select_province_massive + desc = activity_feast_province_desc_alhambra + } + } + ### Citadel of Aleppo + if = { + limit = { has_building_or_higher = citadel_of_aleppo_01 } + add = { + value = @weight_up_ai_select_province_massive + desc = activity_feast_province_desc_citadel_of_aleppo + } + } + ### Theodosian Walls + #### Standing in for "Constantinople's guts" because otherwise we'd use the Hagia Sophia, and that would be weird. + if = { + limit = { has_building_or_higher = theodosian_walls_01 } + add = { + value = @weight_up_ai_select_province_massive + desc = activity_feast_province_desc_theodosian_walls + } + } + ### Hall of Heroes + if = { + limit = { has_building_or_higher = hall_of_heroes_01 } + add = { + value = @weight_up_ai_select_province_medium + desc = activity_feast_province_desc_hall_of_heroes + } + } + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + spouse_skill_diplomacy_improves spouse_gives_host_prestige spouse_manages_feast_splendidly spouse_impresses_clergy spouse_gives_hook + relation_gains_friend children_bonding hook_trusting_guest guest_tells_fantastic_joke + excellent_food lauded_food guest_impressed_by_court_artifact friend_lauds_efforts courtly_vassals_appeased impressed_courtly_vassal + impressed_guest_honor guest_of_honor_impressed guest_of_honor_praised + guest_chokes_on_bone guest_brawl spouse_insults_host ridiculed_food + host_gains_diplo_xp host_gains_steward_xp host_gains_intrigue_xp + leftover_food_giveaway virtuous_feast noble_privileges good_kitty good_puppy antiquarian_admires_artifact jester_entertained_guests apa_executioner + } + chance_of_no_event = 5 + } + + on_start = { + #if = { + # limit = { + # NOT = { + # exists = global_var:feasts_worldwide + # } + # } + # set_global_variable = { + # name = feasts_worldwide + # value = 1 + # } + #} + #else = { + # change_global_variable = { + # name = feasts_worldwide + # add = 1 + # } + #} + scope:host = { + if = { + limit = { + has_character_flag = feast_ai_override + } + remove_character_flag = feast_ai_override + } + if = { + limit = { + has_character_modifier = mpo_nerge_feast_discount + } + remove_character_modifier = mpo_nerge_feast_discount + } + if = { + limit = { has_variable = mpo_nerge_1060_free_feast } + remove_variable = mpo_nerge_1060_free_feast + } + #Mandala Serenity tracker + if = { + limit = { + government_has_flag = government_is_mandala + scope:activity = { + has_activity_option = { + category = feast_option_food + option = feast_food_good + } + has_activity_option = { + category = feast_option_courses + option = feast_courses_good + } + } + } + increment_variable_effect = { + VAR = num_exorbitant_feasts_hosted + VAL = 1 + } + } + } + set_variable = { + name = host_var + value = scope:host + } + add_activity_log_entry = { + key = feast_start_log + character = scope:host + score = 10 + } + if = { + limit = { is_murder_feast = yes } + scope:host = { + set_variable = { + name = recent_murder_feast_var + years = 15 + } + } + scope:activity = { + set_variable = { + name = murder_guest_var + value = scope:activity.special_guest:honorary_guest + } + } + scope:host = { #doing this to get the loc for invalidation cases + set_variable = { + name = murder_guest_host_var + value = scope:activity.special_guest:honorary_guest + } + } + if = { + limit = { + scope:activity.special_guest:honorary_guest = scope:host.liege + } + scope:host = { set_variable = murder_feast_liege_var } + } + if = { + limit = { + scope:activity.special_guest:honorary_guest = scope:host.faith.religious_head + } + scope:host = { set_variable = murder_feast_head_of_faith_var } + } + } + scope:host = { + if = { + limit = { + ai_sociability > 0 + is_ai = yes + } + random = { + chance = { + value = 0.5 # One in 200 feasts + if = { + limit = { + has_trait = gluttonous + } + add = 0.5 + } + if = { + limit = { + has_trait = comfort_eater + } + add = 0.5 + } + if = { + limit = { + ai_rationality <= -25 + has_personality_extroverted_trigger = yes + } + add = 0.5 + } + } + add_character_flag = feasts_a_lot + } + } + } + #fires hostage reunion event, if hostage giver is also present + every_attending_character = { + limit = { + is_hostage_warden = yes + has_bp2_dlc_trigger = yes + this != scope:host + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + } + + on_enter_passive_state = { + trigger_event = feast.7002 + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + + # Effects run when the activity completes after its last phase + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_complete = { + # Run conclusion stuff here + if = { + limit = { this = scope:host } + location = { save_scope_as = activity_location } + if = { + limit = { + is_murder_feast = yes + scope:host = { NOT = { has_variable = murder_feast_murder_back_down } } + } + scope:activity.var:murder_guest_var = { save_scope_as = murder_guest } + scope:host = { + save_scope_as = root_scope + trigger_event = feast.7110 + disburse_murder_feast_activity_rewards = yes + } + } + else_if = { + limit = { this = scope:host } + scope:host = { + save_scope_as = root_scope + trigger_event = feast.7101 + disburse_feast_activity_rewards = yes + } + } + # Various post-feast effects. + if = { + limit = { + has_character_flag = murdered_someone_during_feast + } + remove_character_flag = murdered_someone_during_feast + } + ## A vassal was promised a feast (vassal.2101) + if = { + limit = { + exists = var:was_promised_a_feast + var:was_promised_a_feast = { is_alive = yes } + } + trigger_event = { + id = vassal.2110 + days = { 7 14 } + } + } + ## Hold Court: A vassal sponsored a feast (vassal.2101) + if = { + limit = { + exists = var:hold_court_sponsored_a_feast + has_royal_court = yes + has_dlc_feature = royal_court + } + trigger_event = { + id = hold_court.3001 + days = { 15 20 } + } + } + ## Remove strife variable. + if = { + limit = { has_variable = strife_loss_total } + remove_variable = strife_loss_total + } + # Accolade stuff + if = { + limit = { + has_character_modifier = accolade_charmer_party_modifier + } + remove_character_modifier = accolade_charmer_party_modifier + } + if = { + limit = { + has_character_modifier = accolade_charmer_party_high_modifier + } + remove_character_modifier = accolade_charmer_party_high_modifier + } + ## mpo_contract_events.0055 feast modifier + if = { + limit = { has_character_modifier = mpo_si_slaughtered_animals } + remove_character_modifier = mpo_si_slaughtered_animals + } + } + # Conclusion event for guests + else = { + if = { + limit = { + is_alive = yes + this != scope:host + is_imprisoned = no + } + if = { + limit = { + is_murder_feast = yes + scope:host = { NOT = { has_variable = murder_feast_murder_back_down } } + } + scope:activity.var:murder_guest_var = { save_scope_as = murder_guest } + trigger_event = feast_default.8061 + } + else = { + disburse_feast_reveler_rewards = yes + trigger_event = feast.7151 + } + } + } + # Achievements. + scope:host = { + if = { + limit = { + exists = global_var:started_black_dinner_achievement + is_ai = no + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + NOR = { + has_variable = murder_feast_murder_failure_var + has_variable = murder_feast_murder_back_down + } + } + set_global_variable = { + name = finished_black_dinner_achievement + value = yes + } + } + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:feast + } + remove_variable = tgp_ceremonial_liege_events_0020_discount + } + } + + # Struggle Catalysts + fp3_struggle_catalysts_for_activities_effect = yes + } +} diff --git a/common/activities/activity_types/funeral.txt b/common/activities/activity_types/funeral.txt new file mode 100644 index 00000000..1ce7790a --- /dev/null +++ b/common/activities/activity_types/funeral.txt @@ -0,0 +1,1694 @@ +@weight_up_ai_select_province_small = 10 +@weight_up_ai_select_province_medium = 50 +@weight_up_ai_select_province_large = 250 +@weight_up_ai_select_province_massive = 500 + +@funeral_cost_gold_low = tiny_gold_value +@funeral_cost_gold_medium = medium_gold_value +@funeral_cost_gold_high = major_gold_value + +activity_funeral = { + is_shown = { + highest_held_title_tier > tier_barony + is_landed = yes + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + short_term_gold >= funeral_activity_cost + } + has_ce1_dlc_trigger = yes + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_funeral } + age >= 12 + is_available = yes + trigger_if = { + limit = { + is_ai = no + } + custom_tooltip = { + text = has_someone_selected_to_bury + exists = scope:body_to_bury + } + } + trigger_if = { + limit = { + is_ai = yes + } + has_available_funeral_target = yes + } + } + + can_plan = { + custom_tooltip = { + text = has_someone_to_bury_tt + has_available_funeral_target = yes + } + } + + can_start = { + custom_tooltip = { + text = has_someone_to_bury_tt + has_available_funeral_target = yes + } + } + + is_valid = { + scope:host = { + is_alive = yes + is_imprisoned = no + is_landed = yes + NOT = { is_incapable = yes } + } + # If no one shows up + trigger_if = { + limit = { + is_current_phase_active = yes + } + has_attending_activity_guests = yes + } + } + + on_host_death = { + if = { # Transfer hostly duties to the heir if possible + limit = { + exists = scope:host.player_heir + any_attending_character = { this = scope:host.player_heir } + } + scope:host.player_heir = { save_scope_as = new_host } + #Also inherit the travel plan + if = { + limit = { + scope:host.current_travel_plan = { + any_entourage_character = { this = scope:new_host } + } + } + scope:host.current_travel_plan = { set_travel_plan_owner = scope:new_host } + } + scope:activity = { set_activity_host = scope:new_host } + scope:new_host = { + primary_title = { save_scope_as = host_title } + trigger_event = { + id = funeral.0002 + days = 1 + } + } + } + else = { # Otherwise, tell everyone to go home + every_attending_character = { + limit = { is_alive = yes } + trigger_event = { + id = funeral.0001 + days = 1 # So you don't get spammed + } + } + } + } + + ################### + # PARAMETERS + ################### + + is_single_location = yes + + province_filter = realm + ai_province_filter = capital + + max_route_deviation_mult = 2.0 + + is_location_valid = { + has_holding = yes + } + + province_description = { + desc = activity_funeral_province_desc + # +++ / triple plus good + # Triple good / +++ + triggered_desc = { # Has a big cool temple of your faith + trigger = { + has_holy_building = yes + } + desc = activity_funeral_major_religious_building + } + triggered_desc = { # Has a tower of silence + trigger = { + has_building_or_higher = tower_of_silence_01 + } + desc = activity_funeral_tos + } + triggered_desc = { #Wavel Cathedral + trigger = { + has_building_or_higher = wawel_cathedral_01 + } + desc = activity_funeral_wavel + } + # Double good / ++ + triggered_desc = { + trigger = { + barony = { + is_holy_site_of = scope:host.faith + } + } + desc = activity_funeral_holy_site + } + # Things your religion values + triggered_desc = { + trigger = { + scope:host.faith = { has_doctrine_parameter = sky_burials_active } + is_mountainous_trigger = yes + } + desc = activity_funeral_mountain + } + # Good / + + triggered_desc = { + trigger = { + has_building_or_higher = temple_01 + faith.religion = scope:host.faith.religion + } + desc = activity_funeral_temple + } + } + + max_province_icons = 5 + + province_score = { + value = 0 + # BUILDINGS + # Triple good / +++ + if = { # Has a big cool temple of your faith + limit = { + has_holy_building = yes + } + add = 100 + } + if = { # Wavel Cathedral + limit = { + has_building_or_higher = wawel_cathedral_01 + } + add = 100 #Also a holy building so this means +200 + } + if = { # Has a tower of silence + limit = { + has_building_or_higher = tower_of_silence_01 + } + add = 100 + } + # Double good / ++ + if = { + limit = { + barony = { + is_holy_site_of = scope:host.faith + } + } + add = 50 + } + # Things your religion values + if = { + limit = { + scope:host.faith = { has_doctrine_parameter = sky_burials_active } + is_mountainous_trigger = yes + } + add = 50 + } + # Good / + + if = { + limit = { + has_building_or_higher = temple_01 + faith.religion = scope:host.faith.religion + } + add = 25 + } + } + + cooldown = { years = standard_funeral_cooldown_time } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 30 + desc = "Base" + } + add = { + value = ai_greed + multiply = -0.25 + desc = "ai_greed" + } + add = { + value = ai_sociability + multiply = 0.5 + desc = "ai_sociability" + } + if = { + limit = { + ai_energy < 0 + } + add = { + add = ai_energy + desc = "ai_energy" + } + } + if = { + limit = { has_trait = gregarious } + add = { + value = 10 + desc = "Is gregarious" + } + } + if = { + limit = { has_trait = shy } + add = { + value = -30 + desc = "Is shy" + } + } + if = { + limit = { has_trait = inappetetic } + add = { + value = -30 + desc = "Is inappetetic" + } + } + if = { + limit = { has_trait = reclusive } + add = { + value = -30 + desc = "Is reclusive" + } + } + if = { + limit = { + short_term_gold >= funeral_activity_cost + short_term_gold >= major_gold_value + } + add = { + value = 30 + desc = "Got gold to burn" + } + } + if = { + limit = { has_trait = lifestyle_reveler } + add = { + value = 20 + desc = "Is Reveler" + } + } + if = { + limit = { + has_royal_court = yes + has_court_type = court_intrigue + } + add = { + value = 10 + desc = "Intrigue court trait" + } + } + if = { + limit = { has_trait = comfort_eater } + add = { + value = 10 + desc = "Is Comfort Eater" + } + } + if = { + limit = { has_trait = drunkard } + add = { + value = 10 + desc = "Is Drunkard" + } + } + if = { + limit = { has_trait = gluttonous } + add = { + value = 10 + desc = "Is Gluttonous" + } + } + if = { + limit = { has_trait = hashishiyah } + add = { + value = 10 + desc = "Has Munchies" + } + } + # Stress + if = { # Low Stress + limit = { + stress >= lower_than_baseline_stress + NOT = { has_trait = shy } + } + add = { + value = 10 + desc = "lower_than_baseline_stress" + } + } + if = { # High Stress + limit = { + stress >= higher_than_baseline_stress + NOT = { has_trait = shy } + } + add = { + value = 10 + desc = "higher_than_baseline_stress" + } + } + if = { # Very High Stress + limit = { + stress >= high_stress + NOT = { has_trait = shy } + } + add = { + value = 10 + desc = "high_stress" + } + } + if = { + limit = { + culture = { + has_cultural_tradition = tradition_culinary_art + } + } + add = { + value = 20 + desc = "Host culture has Culinary Artists Cultural Tradition" + } + } + if = { + limit = { + faith = { has_doctrine = tenet_ritual_celebrations } + } + add = { + value = 35 + desc = "Host culture has Ritual Celebrations Cultural Tradition" + } + } + if = { + limit = { + faith = { has_doctrine = tenet_hedonistic } + } + add = { + value = 35 + desc = "Host faith has Hedonistic Tenet" + } + } + if = { + limit = { + host.faith = { + has_doctrine = tenet_asceticism + } + } + add = { + value = -20 + desc = "Host faith has Asceticism tenet" + } + } + if = { + limit = { + top_liege != this + has_vassal_stance = courtly + } + add = { + value = 10 + desc = courtly + } + } + if = { + limit = { ai_has_warlike_personality = yes } + add = { + value = -30 + desc = "Warlike" + } + } + if = { + limit = { + ai_has_warlike_personality = yes + war_chest_gold < war_chest_gold_maximum + } + multiply = { + value = 0.25 + desc = "Warlike" + } + } + # Economic Archetype + if = { # Too busy booming the economy + limit = { + OR = { + ai_has_economical_boom_personality = yes + has_character_flag = ai_boom + } + } + add = { + value = -200 + desc = "Builder" + } + } + if = { # Funerals are good... and pious + limit = { ai_has_pious_builder_personality = yes } + add = { + value = 50 + desc = "Pious Builder" + } + } + # Legitimacy + if = { + limit = { + is_valid_for_legitimacy_change = yes + } + if = { # Low Legitimacy + limit = { + OR = { + legitimacy_level = 1 + legitimacy_level = 2 + } + } + add = { + value = 20 + desc = "low_legitimacy" + } + } + if = { # Very Low Legitimacy + limit = { + legitimacy_level = 0 + } + add = { + value = 30 + desc = "low_legitimacy" + } + } + } + # Plague + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Domain" + } + } + else_if = { + limit = { + any_realm_county = { + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -20 + desc = "Plague in Top Realm" + } + } + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Domain" + } + } + else_if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -40 + desc = "Apocalyptic Plague in Top Realm" + } + } + } + + ################### + # GUEST HANDLING + ################### + + max_guests = 40 + + guest_invite_rules = { + rules = { + # Relations. + 2 = activity_invite_rule_rivals_if_appropriate + + # Family. + 3 = activity_invite_rule_extended_family + + # Magnates. + 4 = activity_invite_neighbouring_rulers + + # Misc landless. + 5 = activity_invite_rule_knights + + # MP + 6 = activity_invite_mp + } + defaults = { + 1 = activity_invite_rule_friends + 1 = activity_invite_rule_potential_friends + 2 = activity_invite_rule_lovers + 2 = activity_invite_rule_potential_lovers + 1 = activity_invite_rule_close_family + 1 = activity_invite_rule_liege + 1 = activity_invite_rule_suzerain + 1 = activity_invite_rule_tributaries + 1 = activity_invite_rule_vassals + 1 = activity_invite_rule_confederates + 2 = activity_invite_rule_fellow_vassals + 3 = activity_invite_rule_courtiers + 4 = activity_invite_rule_guests + 1 = activity_invite_spouses + 1 = activity_invite_rule_landless_adventurers_restricted_range + } + } + + can_be_activity_guest = { + age >= 12 + is_healthy = yes + in_diplomatic_range = scope:host + } + + host_intents = { + intents = { mourn_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent legitimacy_intent } + default = mourn_intent + } + + guest_intents = { + intents = { mourn_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent legitimacy_intent } + default = mourn_intent + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + } + + travel_entourage_selection = { + weight = { + value = standard_travel_entourage_additions + if = { + limit = { + OR = { + has_trait = gregarious + has_trait = drunkard + has_trait = hashishiyah + has_trait = gluttonous + has_trait = comfort_eater + } + } + add = 10 + } + } + max = 18 + invite_rule_order = 3 + } + + cost = { + gold = { + add = { + value = 0 + desc = funeral_activity_cost_desc + add = { + value = funeral_activity_cost + desc = funeral_activity_cost_desc + } + add = { + value = funeral_activity_cost + multiply = activity_cost_scale_by_era + subtract = funeral_activity_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + scope:province ?= { + OR = { + has_building_or_higher = holy_site_cathedral_01 + has_building_or_higher = holy_site_mosque_01 + has_building_or_higher = holy_site_pagan_grand_temple_01 + has_building_or_higher = holy_site_indian_grand_temple_01 + has_building_or_higher = holy_site_other_grand_temple_01 + has_building_or_higher = tower_of_silence_01 + # TGP + has_building_or_higher = holy_site_buddhist_grand_temple_01 + has_building_or_higher = holy_site_japanese_temple_01 + has_building_or_higher = holy_site_chinese_temple_01 + has_building_or_higher = holy_site_se_asia_pagan_temple_01 + } + } + } + add = { + value = funeral_activity_cost + multiply = funeral_activity_cost_increase_max + subtract = funeral_activity_cost + desc = funeral_cost_increase_great_temple + } + } + if = { + limit = { + root.faith ?= { has_doctrine_parameter = mummification_funeral } + } + add = { + value = funeral_activity_cost + multiply = 2 + subtract = funeral_activity_cost + desc = funeral_cost_increase_mummification + } + } + if = { + limit = { + root.faith ?= { has_doctrine_parameter = cremation_funeral } + } + add = { + value = funeral_activity_cost + multiply = funeral_activity_cost_discount_max + subtract = funeral_activity_cost + desc = funeral_cost_discount_cremation + } + } + if = { + limit = { + domicile ?= { has_domicile_parameter = estate_cheaper_funeral_cost } + } + subtract = { + value = 0 + add = { + value = funeral_activity_cost + add = { + value = feast_activity_cost + multiply = activity_cost_scale_by_era + subtract = feast_activity_cost + } + } + multiply = estate_cheaper_funeral_cost_value + desc = estate_cheaper_funeral_cost_desc + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + } + + ui_predicted_cost = { + # All costs are balanced on County/Early Era starting point + gold = { + add = { # Base Cost, scaled by era + value = funeral_activity_cost + multiply = activity_cost_scale_by_era + } + add = { # Ceremony + value = 0 # Bad Option Cost + add = 10 # Normal Option Cost + add = 35 # Good Option Cost + # Scale the sum of the options by era and tier + add = { + value = 45 + multiply = activity_cost_scale_by_tier + } + add = { + value = 45 + multiply = activity_cost_scale_by_era + } + # Divide by 3 (num of levels for this option) so we get the average option cost + divide = 3 + } + save_temporary_value_as = pre_discount_funeral_cost_ui + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = scope:pre_discount_funeral_cost_ui + multiply = law_legacy_cost_reduction_mult + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + } + + ################### + # GRAPHICS + ################### + + map_entity = { + trigger = { + activity_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_feast_01_entity" + } + + map_entity = { + trigger = { + activity_location.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_indian_feast_01_entity" + } + + map_entity = "building_western_feast_01_entity" + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + + background = { + trigger = { + exists = scope:activity + exists = scope:host + scope:host = { + faith = { + has_doctrine_parameter = cremation_funeral + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_bonfire.dds" + environment = "environment_event_bp1_bonfire" + ambience = "event:/SFX/Events/Backgrounds/burning_building" + } + background = { + trigger = { + exists = scope:activity + exists = scope:host + scope:host.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_chinese_corridor_night.dds" + environment = "environment_tgp_chinese_corridor_night" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_chinese_corridor_night" + } + background = { + texture = "gfx/interface/illustrations/event_scenes/fp4_catacombs.dds" + environment = "environment_ce1_catacombs" + ambience = "event:/SFX/Events/Backgrounds/FP4/fp4_condemned_village" + } + + window_characters = { + + host = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:host.location = { is_sea_province = yes } + } + animation = survey + } + triggered_animation = { + trigger = { + scope:activity.var:body_to_bury = { + killer ?= scope:host + } + } + animation = eccentric + } + triggered_animation = { + trigger = { + scope:character.faith = { + has_doctrine_parameter = bewailment_funeral + } + } + animation = { wailing grief } + } + triggered_animation = { + trigger = { + scope:character.faith = { + NOT = { has_doctrine_parameter = bewailment_funeral } + } + } + animation = { grief sadness } + } + + #Fallback + animation = grief + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + guest = { + camera = camera_event_left + + effect = { + every_attending_character = { + limit = { + scope:host.location = scope:activity.activity_location + } + add_to_list = characters + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.faith = { + has_doctrine_parameter = bewailment_funeral + } + } + animation = { sadness } + } + triggered_animation = { + trigger = { + scope:character.faith = { + NOT = { has_doctrine_parameter = bewailment_funeral } + } + } + animation = { wailing } + } + #Fallback + animation = grief + } + } + + guest = { + camera = camera_event_center + + effect = { + every_attending_character = { + limit = { + scope:host.location = scope:activity.activity_location + } + add_to_list = characters + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.faith = { + has_doctrine_parameter = bewailment_funeral + } + } + animation = { stress crying } + } + triggered_animation = { + trigger = { + scope:character.faith = { + NOT = { has_doctrine_parameter = bewailment_funeral } + } + } + animation = { stress crying } + } + #Fallback + animation = grief + } + } + + body = { + camera = camera_event_center + + effect = { + if = { + limit = { + exists = scope:activity.var:body_to_bury + } + scope:activity.var:body_to_bury = { + add_to_list = characters + } + } + } + + scripted_animation = { + animation = dead + } + } + } + + ################### + # OPTIONS + ################### + + options = { + # How much do you spend on pomp and fancy stuff at the funeral? + + # How much do you spend on the religious ceremony? + funeral_option_ceremony = { + funeral_ceremony_bad = { + is_shown = { has_dlc_feature = advanced_activities } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + # Quantity preference. + add = activity_option_food_prefers_small_volume_value + } + } + funeral_ceremony_normal = { + default = yes + + cost = { + gold = { + add = { + value = 0 + desc = funeral_ceremony_normal + add = { + value = 10 + desc = funeral_ceremony_normal + } + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 10 + add = { + value = 10 + multiply = activity_cost_scale_by_tier + subtract = 10 + } + add = { + value = 10 + multiply = activity_cost_scale_by_era + subtract = 10 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + # Quantity preference. + ## We just use slightly reduced quantity prefs here. + add = { + value = activity_option_prefers_large_volume_value + multiply = 0.5 + } + } + } + funeral_ceremony_good = { + is_shown = { has_dlc_feature = advanced_activities } + + cost = { + gold = { + add = { + value = 0 + desc = funeral_ceremony_good + add = { + value = 35 + desc = funeral_ceremony_good + } + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + desc = activity_cost_scale_by_tier_desc + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 35 + add = { + value = 35 + multiply = activity_cost_scale_by_tier + subtract = 35 + } + add = { + value = 35 + multiply = activity_cost_scale_by_era + subtract = 35 + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + # Quantity preference. + add = activity_option_prefers_large_volume_value + } + } + } + } + + ################### + # PHASES + ################### + + max_guest_arrival_delay_time = { months = 8 } + + phases = { + # Mingling and socialising + funeral_phase_wake = { + order = 1 + is_predefined = yes + + is_shown = { always = yes } + + on_phase_active = { + # Sort some stuff on the host. + if = { + limit = { this = scope:host } + + scope:activity = { progress_activity_phase_after = { months = 3 } } + } + } + + on_weekly_pulse = { + scope:activity.var:body_to_bury = { save_scope_as = deceased } + root.involved_activity = { save_scope_as = activity } + trigger_event = { on_action = funeral_wake_pulse } + } + } + + # The funeral ceremony itself + funeral_phase_ceremony = { + order = 2 + is_predefined = yes + + on_enter_phase = { + if = { + limit = { this = scope:host } + + # No passive state for the toast, just jump right into it + scope:activity = { progress_activity_phase_after = { days = 5 } } + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + scope:activity = { save_scope_as = activity } + trigger_event = funeral.0100 + scope:activity = { progress_activity_phase_after = { weeks = 1 } } + } + } + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_will_select_province = { + # Base + value = 0 + # BUILDINGS + # Triple good / +++ + if = { # Has a big cool temple of your faith + limit = { + barony = { + is_holy_site_of = scope:host.faith + } + has_holy_building = yes + } + add = { + value = @weight_up_ai_select_province_large + desc = activity_funeral_major_religious_building + } + } + if = { # Has a big cool temple of your faith + limit = { + has_building_or_higher = wawel_cathedral_01 + } + add = { + value = @weight_up_ai_select_province_large + desc = activity_funeral_wavel + } + } + if = { # Has a tower of silence + limit = { + has_building_or_higher = tower_of_silence_01 + } + add = { + value = @weight_up_ai_select_province_large + desc = activity_funeral_tos + } + } + # Double good / ++ + if = { + limit = { + barony = { + is_holy_site_of = scope:host.faith + } + } + add = { + value = @weight_up_ai_select_province_medium + desc = activity_funeral_holy_site + } + } + # Things your religion values + if = { + limit = { + scope:host.faith = { has_doctrine_parameter = sky_burials_active } + is_mountainous_trigger = yes + } + add = { + value = @weight_up_ai_select_province_medium + desc = activity_funeral_mountain + } + } + # Good / + + if = { + limit = { + has_building_or_higher = temple_01 + faith.religion = scope:host.faith.religion + } + add = { + value = @weight_up_ai_select_province_small + desc = activity_funeral_temple + } + } + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + spouse_skill_diplomacy_improves spouse_gives_host_prestige spouse_impresses_clergy spouse_gives_hook + relation_gains_friend children_bonding hook_trusting_guest guest_tells_fantastic_joke + excellent_food lauded_food guest_impressed_by_court_artifact friend_lauds_efforts courtly_vassals_appeased impressed_courtly_vassal + guest_of_honor_praised + guest_chokes_on_bone guest_brawl spouse_insults_host ridiculed_food + host_gains_diplo_xp host_gains_steward_xp host_gains_intrigue_xp + good_kitty good_puppy antiquarian_admires_artifact jester_entertained_guests apa_executioner + } + chance_of_no_event = 5 + } + + on_start = { + if = { + limit = { + scope:host = { + is_ai = yes + } + } + scope:host = { + funeral_add_funeral_targets_to_list = { + LIST_NAME = funeral_activity_targets + } + random_in_list = { + variable = funeral_activity_targets + save_scope_as = body_to_bury + } + clear_variable_list = funeral_activity_targets + } + set_variable = { + name = body_to_bury + value = scope:body_to_bury + } + } + random = { + chance = 5 + set_variable = { + name = incorrupt_body + value = yes + years = 5 + } + } + scope:activity.var:body_to_bury = { + set_dead_character_variable = { + name = body_has_been_disposed + value = yes + years = 5 + } + } + } + + on_enter_passive_state = { + trigger_event = funeral.0010 + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + # Effects run when the activity completes after its last phase + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_complete = { + if = { + limit = { + is_ai = no + promoted_legend ?= { + legend_protagonist = scope:activity.var:body_to_bury + } + } + add_achievement_global_variable_effect = { + VARIABLE = ce1_f_achievement_unlocked + VALUE = yes + } + } + scope:host = { + if = { + limit = { + has_character_flag = cancelled_coronation + } + remove_character_flag = cancelled_coronation + } + } + } + + activity_planner_widgets = { + funeral_deceased_selection_button = "activity_options_plugins" + funeral_deceased_selection_widget = "activity_plugin_center" + } + + activity_window_widgets = { + funeral_deceased_portrait = "activity_top_layer_event_widgets" + funeral_deceased_portrait = "activity_top_layer_idle_widgets" + } +} diff --git a/common/activities/activity_types/hike.txt b/common/activities/activity_types/hike.txt new file mode 100644 index 00000000..de4bb5b8 --- /dev/null +++ b/common/activities/activity_types/hike.txt @@ -0,0 +1,1030 @@ +activity_roaming = { + is_shown = { + has_bp3_dlc_trigger = yes + highest_held_title_tier >= tier_county + is_adult = yes + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + has_perk = roaming_perk + } + + can_always_plan = no + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_roaming } + is_available = yes + age >= 16 + } + + is_valid = { + scope:host = { + is_alive = yes + is_imprisoned = no + NOT = { is_incapable = yes } + OR = { + is_ai = no + is_landed = yes + } + } + } + + is_location_valid = { + trigger_if = { + limit = { + scope:host = { + is_ai = no + OR = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + is_landed = no + } + } + } + custom_tooltip = { + text = hike_province_requirement_landless + scope:host.location = { + OR = { + AND = { + this = root + exists = county + } + any_neighboring_province = { + this = root + exists = county + } + } + } + } + } + trigger_else_if = { + limit = { + scope:host = { + is_ai = no + is_landless_adventurer = no + } + } + custom_tooltip = { + text = hike_province_requirement_landed + scope:host = { + any_realm_province = { + this = root + } + } + } + } + trigger_else = { + always = yes + } + } + + on_enter_travel_state = { + add_character_flag = roaming_character + } + + on_invalidated = { + invalidation_imprisoned_effect = yes + invalidation_incapable_effect = yes + invalidation_unlanded_effect = yes + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + + on_complete = { + scope:activity.special_guest:honorary_guest_traveling_companion ?= { save_scope_as = special_guest } + if = { + limit = { + this = scope:host + } + scope:activity = { + add_activity_log_entry = { + key = roaming_end_of_the_journey_key + tags = { pulse_action } + character = root + show_in_conclusion = yes + show_as_tooltip = { + ordered_attending_character = { + order_by = { + value = 1 + if = { + limit = { this = scope:host } + add = 20 + } + } + if = { + limit = { + has_variable = roaming_tally_opinion + exists = scope:special_guest + this = scope:host + } + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:special_guest + opinion = var:roaming_tally_opinion + } + } + else_if = { + limit = { + has_variable = roaming_tally_opinion + exists = scope:special_guest + this = scope:special_guest + } + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:host + opinion = var:roaming_tally_opinion + } + } + if = { + limit = { + has_variable = roaming_tally_fame + } + add_prestige_experience = var:roaming_tally_fame + } + if = { + limit = { + has_variable = roaming_tally_stress + } + stress_impact = { base = var:roaming_tally_stress } + } + if = { + limit = { + has_variable = roaming_tally_piety + } + add_piety = var:roaming_tally_piety + } + if = { + limit = { + has_variable = roaming_tally_gold + } + add_gold = var:roaming_tally_gold + } + if = { + limit = { + has_variable = roaming_tally_mystic + } + add_trait_force_tooltip = lifestyle_mystic + } + if = { + limit = { + has_variable = roaming_tally_mystic_xp + } + add_trait_xp = { + trait = lifestyle_mystic + value = var:roaming_tally_mystic_xp + } + } + if = { + limit = { + has_variable = roaming_tally_athletic + } + add_trait_force_tooltip = athletic + } + if = { + limit = { + has_variable = roaming_tally_learning_skill + } + add_learning_skill = var:roaming_tally_learning_skill + } + if = { + limit = { + has_variable = roaming_tally_learning_lifestyle_xp + } + add_learning_lifestyle_xp = var:roaming_tally_learning_lifestyle_xp + } + } + } + } + hidden_effect = { + every_attending_character = { + remove_variable = roaming_tally_opinion + remove_variable = roaming_tally_fame + remove_variable = roaming_tally_stress + remove_variable = roaming_tally_piety + remove_variable = roaming_tally_gold + remove_variable = roaming_tally_mystic + remove_variable = roaming_tally_mystic_xp + remove_variable = roaming_tally_athletic + remove_variable = roaming_tally_learning_skill + remove_variable = roaming_tally_learning_lifestyle_xp + } + } + } + } + } + + on_host_death = { + invalidation_host_death_effect = yes + } + + province_filter = all + ai_province_filter = domain + + max_province_icons = 3 + allow_zero_guest_invites = yes + open_invite = no + + province_description = { + desc = activity_roaming_province_desc + + triggered_desc = { + trigger = { + has_province_modifier = wayfarer_astronomical_phenomenon + } + desc = activity_roaming_astronomical_phenomenon + } + + triggered_desc = { + trigger = { + OR = { + terrain = desert_mountains + terrain = mountains + } + } + desc = activity_roaming_good_terrain + } + + triggered_desc = { + trigger = { + OR = { + terrain = oasis + terrain = hills + terrain = taiga + terrain = forest + terrain = jungle + } + } + desc = activity_roaming_ok_terrain + } + + triggered_desc = { + trigger = { has_holding = no } + desc = activity_roaming_empty_holding + } + } + + province_score = { + add = roaming_province_reference_value + } + + cost = { + gold = { + add = { + value = standard_roaming_activity_cost + desc = hunt_base_cost + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + } + + ui_predicted_cost = { + gold = { + # Base Cost + value = standard_roaming_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + } + + cooldown = { months = 18 } + + ################### + # PHASES AND OPTIONS + ################### + + phases = { + phase_roaming = { + is_predefined = yes + location_source = pickable + + on_phase_active = { + scope:activity.special_guest:honorary_guest_traveling_companion ?= { save_scope_as = special_guest } + trigger_event = { id = bp3_roaming.0005 } + if = { + limit = { + this = scope:host + scope:activity = { + has_activity_option = { + category = roaming_option_travel_length + option = roaming_long_length + } + } + } + scope:activity = { progress_activity_phase_after = { days = 90 } } + trigger_event = { + on_action = random_roaming_event_pulse + days = 15 + } + trigger_event = { + on_action = random_roaming_event_pulse + days = 30 + } + trigger_event = { + on_action = roaming_mid_activity_event_pulse + days = 45 + } + trigger_event = { + on_action = random_roaming_event_pulse + days = 60 + } + trigger_event = { + on_action = random_roaming_event_pulse + days = 75 + } + } + else_if = { + limit = { + this = scope:host + } + scope:activity = { progress_activity_phase_after = { days = 60 } } + trigger_event = { + on_action = random_roaming_event_pulse + days = 15 + } + trigger_event = { + on_action = roaming_mid_activity_event_pulse + days = 30 + } + trigger_event = { + on_action = random_roaming_event_pulse + days = 45 + } + } + if = { + limit = { + this = scope:host + scope:host.location = { + has_province_modifier = wayfarer_astronomical_phenomenon + } + } + trigger_event = { + id = bp3_roaming.0200 + days = 40 + } + } + } + + on_end = { + random_list = { + 1 = { add_character_flag = roaming_weak_stress_loss } + 1 = { add_character_flag = roaming_medium_stress_loss } + 1 = { add_character_flag = roaming_strong_stress_loss } + 1 = { add_character_flag = roaming_very_strong_stress_loss } + } + roaming_tally_variable_effect = { TYPE = stress VALUE = roaming_outro_stress_loss_value } + roaming_tally_stress_impact_effect = { TRAIT = athletic VALUE = medium_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = lifestyle_traveler VALUE = minor_stress_impact_loss } + trigger_event = { id = bp3_roaming.0010 } + } + } + } + + options = { + roaming_option_travel_length = { + roaming_short_length = { + default = yes + } + roaming_long_length = { + is_valid = { + has_perk = the_home_away_from_home_perk + } + + cost = { + gold = { + add = { + value = 35 + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + desc = roaming_long_length + } + } + } + } + } + } + + max_guest_arrival_delay_time = { months = 1 } + + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + apa_roaming_feather + apa_roaming_ancient_runestone + apa_roaming_ancient_megalith + apa_roaming_natural_arch + apa_roaming_coast_seashells + apa_roaming_forest_gnarled_oak + apa_roaming_rabbit_family + apa_roaming_desert_lilies + apa_roaming_desert_lilies_oasis + apa_roaming_desert_fox + apa_roaming_mountain_river + apa_roaming_lonely_yurt + apa_roaming_standing_stone + apa_roaming_wildflowers + apa_roaming_lost_sheep + apa_roaming_friendly_dog + apa_roaming_grazing_cattle + apa_roaming_rock_outcrop_plains + apa_roaming_rock_outcrop_hills + apa_roaming_waterfall + apa_roaming_heron + apa_roaming_dragonfly + apa_roaming_ducklings + apa_roaming_dates + apa_roaming_oasis_shelter + apa_roaming_oasis_traders + apa_roaming_traders + apa_roaming_luminescent_mushrooms + apa_roaming_wild_berries + } + chance_of_no_event = 0 + } + + ################### + # AI VALUES + ################### + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 50 + + if = { + limit = { + has_trait = lazy + } + add = -10 + } + + #Can you actually afford this? + if = { + limit = { + NOT = { can_make_expensive_purchase_trigger = { PRICE = activity_minor_gold_value } } + } + add = -75 + } + } + + ai_check_interval = 60 + + ai_will_select_province = { + value = 10 + } + + ################### + # GUEST HANDLING + ################### + + host_intents = { + default = reduce_stress_intent + intents = { reduce_stress_intent roaming_storyteller_intent roaming_befriend_intent roaming_mystic_intent } + } + + guest_intents = { + intents = { reduce_stress_intent } + default = reduce_stress_intent + } + + can_be_activity_guest = { + roaming_activity_special_guest_trigger = yes + } + + guest_invite_rules = { + defaults = { + 2 = activity_invite_rule_lovers + 1 = activity_invite_rule_friends + 1 = activity_invite_rule_close_family + 1 = activity_invite_spouses + 1 = activity_invite_rule_knights + } + } + + special_guests = { + honorary_guest_traveling_companion = { + is_required = no + + is_shown = { + + } + + can_pick = { + roaming_activity_special_guest_trigger = yes + } + + ai_will_do = { + value = 10 + } + } + } + + travel_entourage_selection = { + weight = { + value = 10 + if = { + limit = { + NOT = { is_in_list = special_guests } + } + multiply = 0 + } + } + + invite_rule_order = 1 + + # Up to how many characters to select for a player + max = 2 + + # Up to how many characters to select for an AI + ai_max = 2 + } + + max_guests = 1 + + guest_join_chance = { + base = 10 + + modifier = { + factor = 0 + NOT = { is_in_list = special_guests } + } + } + + ################### + # GRAPHICS + ################### + + # Travel + background = { # Bridge + trigger = { + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { # Riverside + trigger = { + scope:host.location = { + has_winter_trigger = no + is_riverside_province = yes + OR = { + terrain = plains + terrain = mountains + terrain = hills + terrain = steppe + } + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_riverside.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Hunts/ep2_event_grand_hunt_waterbank" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland/Plains, winter + trigger = { + scope:host.location = { + has_winter_trigger = yes + OR = { + terrain = farmlands + terrain = plains + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_plains_winter.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { # Farmland, settled + trigger = { + scope:host.location = { + terrain = farmlands + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location = { + terrain = farmlands + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { # Plains, settled + trigger = { + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Plains, unsettled + trigger = { + scope:host.location = { + graphical_plains_trigger = yes + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { # Desert, settled + trigger = { + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { # Desert, unsettled + trigger = { + scope:host.location = { + graphical_wilderness_desert_trigger = yes + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { # Forest, Winter + trigger = { + scope:host.location ?= { + has_winter_trigger = yes + OR = { + graphical_wilderness_forest_trigger = yes + graphical_wilderness_forest_pine_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { # Forest_pine + trigger = { + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { # Forest + trigger = { + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { # Mountains, winter + trigger = { + scope:host.location = { + has_winter_trigger = yes + graphical_wilderness_mountains_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_mountain_winter.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { # Mountains, settled + trigger = { + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { # Mountains, unsettled + trigger = { + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { # Steppe, winter + trigger = { + scope:host.location = { + has_winter_trigger = yes + graphical_wilderness_steppe_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_steppe_winter.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { # Steppe, settled + trigger = { + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { # Steppe, unsettled + trigger = { + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { # Drylands (formerly desert) + trigger = { + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { # Wetlands, Winter + trigger = { + scope:host.location = { + has_winter_trigger = yes + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_wetlands_winter.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Hunts/ep2_event_grand_hunt_waterbank" + } + background = { # Wetlands + trigger = { + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Hunts/ep2_event_grand_hunt_waterbank" + } + + background = { # Jungle + trigger = { + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { # Hills, winter + trigger = { + scope:host.location = { + has_winter_trigger = yes + graphical_hills_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp3_hills_winter.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Hills, settled + trigger = { + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + this != scope:province + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Hills, unsettled + trigger = { + scope:host.location = { + graphical_hills_trigger = yes + OR = { + NOT = { exists = province_owner } + this = scope:province + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { # Sea + trigger = { + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + + window_characters = { + + host = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + animation = survey_staff + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:host.location != scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + guest = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + animation = idle + } + } + } +} diff --git a/common/activities/activity_types/hunt.txt b/common/activities/activity_types/hunt.txt new file mode 100644 index 00000000..f76f96f2 --- /dev/null +++ b/common/activities/activity_types/hunt.txt @@ -0,0 +1,5789 @@ +activity_hunt = { + is_shown = { + highest_held_title_tier > tier_barony + is_playable_character = yes + trigger_if = { + limit = { + is_ai = yes + } + years_from_game_start >= 3 + is_at_war = no + ai_should_focus_on_building_in_their_capital = no + OR = { + has_character_flag = hunts_a_lot + short_term_gold >= hunt_activity_base_cost + AND = { + gold >= hunt_activity_base_cost + ai_has_warlike_personality = yes + } + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + short_term_treasury >= hunt_activity_base_cost + } + government_has_flag = government_is_nomadic + } + trigger_if = { # Throttle Counts + limit = { + highest_held_title_tier = tier_county + NOR = { + has_government = japan_administrative_government + has_government = japan_feudal_government + } + } + ai_boldness >= 100 + } + } + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_hunt } + is_available_adult = yes + can_hunt_trigger = yes + trigger_if = { + limit = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + custom_tooltip = { + text = adventurer_3_courtiers + any_courtier = { + count >= 3 + is_available_adult = yes + can_hunt_trigger = yes + } + } + } + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + } + is_landed = yes + } + } + + is_valid = { + scope:host = { + is_alive = yes + is_imprisoned = no + is_playable_character = yes + NOT = { is_incapable = yes } + top_liege = { + NOT = { has_variable = banned_falconry_hunts } + } + } + NOT = { has_variable = hunt_invalidated } + trigger_if = { + limit = { exists = var:hunt_started } + exists = var:animal_type + } + # If no one shows up + trigger_if = { + limit = { + is_current_phase_active = yes + } + has_attending_activity_guests = yes + } + } + + on_invalidated = { + # Save scopes for flavor events + scope:activity = { + var:hunt_invalidated_flavor ?= { save_scope_as = invalidated_flavor } + var:hunt_invalidated_culprit ?= { save_scope_as = invalidated_culprit } + every_attending_character = { + limit = { + is_ai = no + is_alive = yes + NOR = { + scope:invalidated_culprit ?= this + scope:activity.activity_host = this + } + } + add_to_list = attendees + } + if = { # Wound + limit = { var:hunt_invalidated ?= flag:wounded } + save_scope_as = wounded_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0086 + } + } + else_if = { # Death + limit = { var:hunt_invalidated ?= flag:death } + save_scope_as = death_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0080 + } + } + else_if = { # Assassination Attempt + limit = { var:hunt_invalidated ?= flag:assassination_attempt } + save_scope_as = assassination_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0083 + } + } + else_if = { # Abduction Attempt + limit = { var:hunt_invalidated ?= flag:abduction_attempt } + save_scope_as = abduction_attempt_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0084 + } + } + else_if = { # Abduction + limit = { var:hunt_invalidated ?= flag:abduction } + save_scope_as = abduction_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0085 + } + } + else_if = { # Host Imprisoned + limit = { + scope:host = { is_imprisoned = yes} + } + every_in_list = { + list = attendees + trigger_event = hunt.0082 + } + } + # Host becomes unlanded + else_if = { + limit = { + scope:host = { + is_playable_character = no + } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + every_in_list = { + list = attendees + limit = { this != scope:host } + trigger_event = activity_system.0320 + } + } + else_if = { + limit = { + scope:host = { is_incapable = yes } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_in_list = { + list = attendees + limit = { this != scope:host } + trigger_event = activity_system.0331 + } + } + else_if = { # No one shows up + limit = { + has_attending_activity_guests = no + NOT = { + scope:host = { has_character_flag = no_claims_to_land } + } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + activity_location = { save_scope_as = location } + } + scope:host = { trigger_event = activity_system.0100 } + } + else_if = { # You don't have hunting rights + limit = { var:hunt_invalidated ?= flag:landless } + save_scope_as = landless_invalidation + every_in_list = { + list = attendees + trigger_event = hunt.0080 + } + } + else_if = { + limit = { + has_activity_option = { category = special_type option = hunt_type_falconry } + scope:host.top_liege = { + NOT = { has_variable = banned_falconry_hunts } + } + } + every_in_list = { + list = attendees + limit = { this != scope:host } + trigger_event = tgp_hunt.0003 + } + } + else_if = { + limit = { scope:host = { is_alive = no } } + every_in_list = { + list = attendees + trigger_event = hunt.0087 + } + } + + hunt_remove_variables_effect = yes + } + } + + cooldown = { years = standard_hunting_cooldown_time } # 4 years + + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.minor_herd_value + min = 50 + desc = hunt_base_cost + } + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + } + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + add = { + value = hunt_activity_base_cost #Base level + desc = hunt_base_cost + } + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + domicile ?= { has_domicile_parameter = estate_cheaper_hunt_cost } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = estate_cheaper_hunt_cost_value + desc = estate_cheaper_hunt_cost_desc + } + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_character_modifier = mpo_bountiful_hunting_modifier + } + multiply = { + value = 0.8 + desc = mpo_bountiful_hunting_modifier + } + } + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_hunt + } + multiply = { + value = 0.5 + desc = court_event_discount_desc + } + } + if = { + limit = { + government_has_flag = government_is_japan_feudal + } + multiply = { + value = 0.75 + desc = japan_feudal_government + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + } + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + add = { + value = hunt_activity_base_cost #Base level + desc = hunt_base_cost + } + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + domicile ?= { has_domicile_parameter = estate_cheaper_hunt_cost } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = estate_cheaper_hunt_cost_value + desc = estate_cheaper_hunt_cost_desc + } + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_character_modifier = mpo_bountiful_hunting_modifier + } + multiply = { + value = 0.8 + desc = mpo_bountiful_hunting_modifier + } + } + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_hunt + } + multiply = { + value = 0.5 + desc = court_event_discount_desc + } + } + if = { + limit = { + government_has_flag = government_is_japan_feudal + } + multiply = { + value = 0.75 + desc = japan_feudal_government + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + } + } + else = { + value = 0 + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { + add = { + value = hunt_activity_base_cost #Base level + desc = hunt_base_cost + } + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + domicile ?= { has_domicile_parameter = estate_cheaper_hunt_cost } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = estate_cheaper_hunt_cost_value + desc = estate_cheaper_hunt_cost_desc + } + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_character_modifier = mpo_bountiful_hunting_modifier + } + multiply = { + value = 0.8 + desc = mpo_bountiful_hunting_modifier + } + } + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_hunt + } + multiply = { + value = 0.5 + desc = court_event_discount_desc + } + } + } + } + } + } + + ui_predicted_cost = { + # All costs are balanced on County/Early Era starting point + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { # Base cost, scaled by era + value = domicile.minor_herd_value + min = 50 + } + + # Options + add = { # Attendants + value = 0 # Local Game Keepers Cost + add = domicile.miniscule_herd_value # Search Parties Cost + add = domicile.minor_herd_value # Flushing Gangs Cost + # Divide by the number of option levels +2 to get an average option cost + divide = 5 + } + add = { # Party Size + value = 0 # Intimate Party Cost + add = domicile.miniscule_herd_value # Reasonable Party Cost + add = domicile.minor_herd_value # Substantial Party Cost + # Divide by the number of option levels +2 to get an average option cost + divide = 5 + } + + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + } + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { # Base cost, scaled by era + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + } + + # Options + add = { # Attendants + value = 0 # Local Game Keepers Cost + add = 10 # Search Parties Cost + add = 35 # Flushing Gangs Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + add = { # Party Size + value = 0 # Intimate Party Cost + add = 10 # Reasonable Party Cost + add = 35 # Substantial Party Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_activity_base_cost + multiply = law_legacy_cost_reduction_mult + } + } + + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_feast + } + multiply = { + value = 0.5 + } + } + + # Adventurer + if = { + limit = { OR = { has_government = landless_adventurer_government has_government = landless_minority_government } } + multiply = 0.25 + } + + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { # Base cost, scaled by era + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + } + + # Options + add = { # Attendants + value = 0 # Local Game Keepers Cost + add = 10 # Search Parties Cost + add = 35 # Flushing Gangs Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + add = { # Party Size + value = 0 # Intimate Party Cost + add = 10 # Reasonable Party Cost + add = 35 # Substantial Party Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_activity_base_cost + multiply = law_legacy_cost_reduction_mult + } + } + + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_feast + } + multiply = { + value = 0.5 + } + } + + # Adventurer + if = { + limit = { OR = { has_government = landless_adventurer_government has_government = landless_minority_government } } + multiply = 0.25 + } + + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + multiply = { + value = 0.85 + desc = tgp_ceremonial_liege_events_0020_discount_desc + } + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + else = { + value = 0 + } + if = { + limit = { + has_title = title:e_minister_of_revenue + } + multiply = 0.85 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { # Base cost, scaled by era + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + } + + # Options + add = { # Attendants + value = 0 # Local Game Keepers Cost + add = 10 # Search Parties Cost + add = 35 # Flushing Gangs Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + add = { # Party Size + value = 0 # Intimate Party Cost + add = 10 # Reasonable Party Cost + add = 35 # Substantial Party Cost + # Scale option costs by tier and era + multiply = activity_cost_scale_by_tier + multiply = activity_cost_scale_by_era + # Divide by the number of option levels to get an average option cost + divide = 3 + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_activity_base_cost + multiply = law_legacy_cost_reduction_mult + } + } + + #court.8140 + if = { + limit = { + has_character_flag = court_event_discount_feast + } + multiply = { + value = 0.5 + } + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + + on_host_death = { + scope:activity = { + save_scope_as = death_invalidation + if = { + limit = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + save_scope_as = legendary_invalidation + } + } + scope:host = { + save_scope_as = invalidated_flavor + player_heir ?= { + save_scope_as = heir + add_character_flag = { + flag = hunt_heir + weeks = 1 + } + trigger_event = { id = hunt.0080 days = 1 } + } + } + } + + is_location_valid = { + custom_tooltip = { + text = activity_location_any_game_tt + hunt_animal_small_available_trigger = yes + } + trigger_if = { + limit = { scope:special_option ?= flag:hunt_type_legendary } + custom_tooltip = { + text = activity_hunt_location_legendary_sighting_tt + county = { + has_county_modifier = hunt_sighting_legendary_modifier + var:sighting_owner ?= scope:host + } + } + } + trigger_if = { + limit = { scope:special_option ?= flag:hunt_type_nerge } + custom_tooltip = { + text = activity_hunt_location_nerge_recently_visited_tt + county = { + scope:host = { + NOT = { + is_target_in_variable_list = { + name = recent_nerges + target = prev + } + } + } + } + } + } + } + + ai_will_do = { + value = 0 + + # Base + add = { + value = -10 + desc = "base" + } + if = { + limit = { + highest_held_title_tier <= tier_county + } + add = -20 + } + # ai_value + add = { + value = ai_greed + multiply = -0.5 + desc = "ai_greed" + } + add = { + value = ai_boldness + desc = "ai_boldness" + } + add = { + value = ai_sociability + multiply = 0.5 + desc = "ai_sociability" + } + if = { + limit = { + ai_energy < 0 + } + add = { + add = ai_energy + desc = "ai_energy" + } + } + # Dharmic Pacificism + if = { + limit = { + hunt_dharmic_pacificist_trigger = yes + NOT = { has_trait = sadistic } + } + add = { + value = -40 + desc = tenet_dharmic_pacifism_name + } + } + # Personality + if = { # Avoids responsibilities + limit = { has_trait = lazy } + add = { + value = 20 + desc = lazy + } + } + if = { + limit = { has_trait = ambitious } + add = { + value = 20 + desc = ambitious + } + } + else_if = { # Better things to do + limit = { has_trait = diligent } + add = { + value = -10 + desc = diligent + } + } + if = { # Likes hurting things + limit = { has_trait = sadistic } + add = { + value = 20 + desc = sadistic + } + } + else_if = { # Empathetic + limit = { has_trait = compassionate } + add = { + value = -10 + desc = compassionate + } + } + if = { # Likes to socialize + limit = { has_trait = gregarious } + add = { + value = 20 + desc = gregarious + } + } + else_if = { + limit = { has_trait = shy } + add = { + value = -10 + desc = shy + } + } + if = { + limit = { has_trait = reclusive } + add = { + value = -25 + desc = reclusive + } + } + # Prestige + if = { + limit = { prestige < 0 } + add = { + value = 30 + desc = "Very low prestige" + } + } + if = { + limit = { prestige_level <= 1 } + add = { + value = 5 + desc = "Low prestige level" + } + } + if = { + limit = { + prestige_level <= 2 + can_use_conquest_cbs_trigger = yes + ai_has_warlike_personality = yes + } + add = { + value = 15 + desc = "Can use conquest but has low prestige_level" + } + } + if = { + limit = { + prestige <= 500 + can_use_conquest_cbs_trigger = yes + ai_has_warlike_personality = yes + } + add = { + value = 25 + desc = "Can use conquest but has low prestige" + } + } + # Court + if = { + limit = { + has_royal_court = yes + has_court_type = court_warlike + } + add = { + value = 15 + desc = court_warlike + } + } + # Education + if = { + limit = { has_trait = education_martial } + add = { + value = 20 + desc = education_martial + } + } + # Culture + if = { # Prolific Hunters + limit = { + culture = { has_cultural_parameter = hunting_traits_more_common } + } + add = { + value = 20 + desc = "hunting_traits_more_common" + } + } + if = { # Prolific Hunters + limit = { + culture = { has_cultural_parameter = hunting_traits_more_valued } + } + add = { + value = 20 + desc = "hunting_traits_more_valued" + } + } + if = { # Sacred Hunts + limit = { + culture = { has_cultural_parameter = hunting_traits_more_pious } + } + add = { + value = 20 + desc = "hunting_traits_more_pious" + } + } + if = { # Bellicose + limit = { + culture = { has_cultural_pillar = ethos_bellicose } + } + add = { + value = 15 + desc = ethos_bellicose + } + } + # Lifestyle + if = { + limit = { has_trait = lifestyle_hunter } + add = { + value = 25 + desc = lifestyle_hunter + } + } + if = { + limit = { + has_trait = lifestyle_hunter + OR = { + has_trait_xp = { + trait = lifestyle_hunter + track = hunter + value >= trait_second_level + } + has_trait_xp = { + trait = lifestyle_hunter + track = falconer + value >= trait_second_level + } + } + } + add = { + value = 25 + desc = "experienced hunter" + } + } + # Stress + if = { # Low Stress + limit = { stress >= lower_than_baseline_stress } + add = { + value = 20 + desc = "lower_than_baseline_stress" + } + } + if = { # High Stress + limit = { stress >= higher_than_baseline_stress } + add = { + value = 20 + desc = "higher_than_baseline_stress" + } + } + if = { # Very High Stress + limit = { stress >= high_stress } + add = { + value = 20 + desc = "high_stress" + } + } + # Economic Archetype + if = { # Too busy booming the economy + limit = { + NOT = { government_has_flag = government_is_nomadic } + OR = { + ai_has_economical_boom_personality = yes + has_character_flag = ai_boom + } + } + add = { + value = -200 + desc = "Builder" + } + } + if = { # Prestige? Pffft. + limit = { ai_has_pious_builder_personality = yes } + add = { + value = -100 + desc = "Pious Builder" + } + } + if = { + limit = { + top_liege != this + has_vassal_stance = glory_hound + } + add = { + value = 10 + desc = glory_hound + } + } + if = { + limit = { ai_has_warlike_personality = yes } + add = { + value = 20 + desc = "Warlike" + } + } + # Economy Sanity + if = { # Work first, play later + limit = { + NOT = { government_has_flag = government_is_nomadic } + exists = capital_county + capital_county.title_province = { free_building_slots > 0 } + } + add = { + value = -35 + desc = "Work first, play later" + } + } + # Sightings + if = { + limit = { + NOT = { + any_sub_realm_county = { + OR = { + has_county_modifier = hunt_sighting_standard_modifier + has_county_modifier = hunt_sighting_dangerous_modifier + has_county_modifier = hunt_sighting_falconry_modifier + has_county_modifier = hunt_sighting_legendary_modifier + } + var:sighting_owner ?= root + } + } + } + add = { + value = -10 + desc = "No Sighting" + } + } + if = { + limit = { + any_sub_realm_county = { + OR = { + has_county_modifier = hunt_sighting_standard_modifier + has_county_modifier = hunt_sighting_dangerous_modifier + has_county_modifier = hunt_sighting_falconry_modifier + } + var:sighting_owner ?= root + } + } + add = { + value = 25 + desc = "Sighting" + } + } + if = { + limit = { + any_sub_realm_county = { + has_county_modifier = hunt_sighting_legendary_modifier + var:sighting_owner ?= root + } + } + add = { + value = 50 + desc = "Legendary Sighting" + } + } + if = { + limit = { + short_term_gold >= hunt_activity_base_cost + short_term_gold >= major_gold_value + } + add = { + value = 30 + desc = "Got gold to burn" + } + } + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + short_term_treasury >= hunt_activity_base_cost + short_term_treasury >= major_gold_value + } + add = { + value = 30 + desc = "Got treasury to burn" + } + } + if = { + limit = { has_character_flag = hunts_a_lot } + add = { + value = 500 + desc = "hunts a lot" + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + add = { + value = 1000 + desc = "nomads love hunting" + } + } + if = { + limit = { + has_variable = conqueror + OR = { + AND = { + prestige_level < 4 + can_use_conquest_cbs_trigger = yes + } + prestige < 1000 + } + } + add = { + value = 1000 + desc = "conqueror looking for prestige" + } + } + if = { + limit = { + has_variable = conqueror + trigger_if = { + limit = { + prestige_level >= 4 + can_use_conquest_cbs_trigger = yes + } + prestige_level >= 4 + } + prestige >= 1000 + } + add = { + value = -5000 + desc = "conqueror sated for prestige" + } + } + # Legitimacy + if = { + limit = { + is_valid_for_legitimacy_change = yes + } + if = { # Low Legitimacy + limit = { + OR = { + legitimacy_level = 1 + legitimacy_level = 2 + } + } + add = { + value = 10 + desc = "low_legitimacy" + } + } + if = { # Very Low Legitimacy + limit = { + legitimacy_level = 0 + } + add = { + value = 20 + desc = "low_legitimacy" + } + } + } + # Plague + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Domain" + } + } + else_if = { + limit = { + any_realm_county = { + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -20 + desc = "Plague in Top Realm" + } + } + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Domain" + } + } + else_if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -40 + desc = "Apocalyptic Plague in Top Realm" + } + } + #Government type + if = { + limit = { government_has_flag = government_is_mandala } + add = { + value = -50 + desc = "Has Mandala Government" + } + } + if = { + limit = { + any_held_title = { + tier = tier_county + any_county_province = { + any_province_epidemic = { + count >= 1 + outbreak_intensity < apocalyptic + } + } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Domain" + } + } + else_if = { + limit = { + any_realm_county = { + any_county_province = { + any_province_epidemic = { + count >= 1 + outbreak_intensity < apocalyptic + } + } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -20 + desc = "Plague in Top Realm" + } + } + if = { + limit = { + any_held_title = { + tier = tier_county + any_county_province = { + any_province_epidemic = { + count >= 1 + outbreak_intensity = apocalyptic + } + } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Domain" + } + } + else_if = { + limit = { + any_held_title = { + tier = tier_county + any_county_province = { + any_province_epidemic = { + count >= 1 + outbreak_intensity = apocalyptic + } + } + } + } + add = { + value = -40 + desc = "Apocalyptic Plague in Top Realm" + } + } + #ACH Greatest Hunter Oath + if = { + limit = { + has_character_modifier = oath_greatest_hunter + } + add = { + value = 200 + desc = "Greatest Hunter Oath" + } + } + } + + host_description = { + desc = activity_hunt_host_desc + triggered_desc = { + trigger = { + has_dlc_feature = legends + NOT = { has_game_rule = historical_legends_only } + } + desc = activity_legend_seed_tt + } + first_valid = { + triggered_desc = { + trigger = { + culture = { has_cultural_parameter = sacred_hunts } + } + desc = activity_hunt_host_desc_piety + } + desc = activity_hunt_host_desc_prestige + } + first_valid = { + triggered_desc = { + trigger = { has_trait = lifestyle_hunter } + desc = activity_hunt_host_desc_trait_xp + } + desc = activity_hunt_host_desc_trait + } + triggered_desc = { + trigger = { + has_dlc_feature = accolades + } + desc = activity_hunt_guest_desc_accolade + } + triggered_desc = { + trigger = { + is_landless_adventurer = no + NOT = { employs_court_position = master_of_hunt_court_position } + } + desc = activity_hunt_host_desc_moh + } + triggered_desc = { + trigger = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + NOT = { employs_court_position = huntperson_camp_officer } + } + desc = activity_hunt_host_desc_huntsperson + } + triggered_desc = { + trigger = { + is_landed = yes + NOT = { + any_held_county = { + any_county_province = { + NOT = { exists = var:recent_hunt_held } + } + } + } + } + desc = activity_hunt_host_desc_recent + } + } + + guest_description = { + first_valid = { + triggered_desc = { + trigger = { + culture = { has_cultural_parameter = sacred_hunts } + } + desc = activity_hunt_host_desc_piety + } + desc = activity_hunt_host_desc_prestige + } + first_valid = { + triggered_desc = { + trigger = { has_trait = lifestyle_hunter } + desc = activity_hunt_host_desc_trait_xp + } + desc = activity_hunt_host_desc_trait + } + desc = activity_hunt_guest_desc_accolade + } + + conclusion_description = { + first_valid = { + triggered_desc = { + trigger = { + activity_is_nerge_type = no + scope:activity.var:hunt_success_chance >= 50 + scope:activity.var:hunt_success_chance_event >= hunt_activity_success_increase_medium_value + } + desc = hunt.9001.desc_good + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + scope:activity.var:hunt_success_chance >= 50 + scope:activity.var:hunt_success_chance_event < hunt_activity_success_decrease_minor_value + } + desc = hunt.9001.desc_good_bad + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + scope:activity.var:hunt_success_chance < 50 + scope:activity.var:hunt_success_chance_event < hunt_activity_success_decrease_minor_value + } + desc = hunt.9001.desc_bad + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + scope:activity.var:hunt_success_chance < 50 + scope:activity.var:hunt_success_chance_event >= hunt_activity_success_increase_medium_value + } + desc = hunt.9001.desc_bad_good + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + } + desc = hunt.9001.desc_same + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + } + desc = activity_hunt_conclusion_desc_legendary_success + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + } + desc = activity_hunt_conclusion_desc_legendary + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + desc = activity_hunt_conclusion_desc_falconry_success + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + desc = activity_hunt_conclusion_desc_falconry + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + scope:activity.var:hunt_success ?= flag:yes + } + desc = activity_hunt_conclusion_desc_standard_success + } + triggered_desc = { + trigger = { + activity_is_nerge_type = no + } + desc = activity_hunt_conclusion_desc_standard + } + } + first_valid = { # Nerge Text + triggered_desc = { + trigger = { + activity_is_nerge_type = yes + scope:activity.var:activity_special_type_progression < 25 + } + desc = activity_hunt_conclusion_nerge_desc_failed + } + triggered_desc = { + trigger = { + activity_is_nerge_type = yes + scope:activity.var:activity_special_type_progression <= 50 + } + desc = activity_hunt_conclusion_nerge_desc_standard + } + triggered_desc = { + trigger = { + activity_is_nerge_type = yes + scope:activity.var:activity_special_type_progression <= 100 + } + desc = activity_hunt_conclusion_nerge_desc_excellent + } + } + } + + ################### + # PARAMETERS + ################### + + is_single_location = yes + + ################### + # LOCATION + ################### + + province_filter = domicile_realm + ai_province_filter = domicile_domain + + province_description = { + desc = activity_hunt_province_desc + # +++ / triple plus good + triggered_desc = { + trigger = { + scope:special_option ?= flag:hunt_type_standard + NOT = { scope:special_option ?= flag:hunt_type_nerge } + county ?= { has_county_modifier = hunt_sighting_standard_modifier } + } + desc = activity_hunt_province_desc_standard_sighting + } + triggered_desc = { + trigger = { + scope:special_option ?= flag:hunt_type_standard + NOT = { scope:special_option ?= flag:hunt_type_nerge } + county ?= { has_county_modifier = hunt_sighting_dangerous_modifier } + } + desc = activity_hunt_province_desc_dangerous_sighting + } + triggered_desc = { + trigger = { + scope:special_option ?= flag:hunt_type_falconry + NOT = { scope:special_option ?= flag:hunt_type_nerge } + county ?= { has_county_modifier = hunt_sighting_falconry_modifier } + } + desc = activity_hunt_province_desc_falconry_sighting + } + triggered_desc = { + trigger = { + has_building = royal_forest_03 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_royal_forest_major + } + triggered_desc = { + trigger = { + has_building_or_higher = hunting_grounds_06 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_hunting_grounds_major + } + triggered_desc = { + trigger = { + has_building_or_higher = rainbow_mountains_01 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_rainbow_mountains_major + } + triggered_desc = { + trigger = { + has_building_or_higher = visegrad_castle_01 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_visegrad_castle_01_major + } + triggered_desc = { + trigger = { + OR = { + terrain = taiga + terrain = forest + terrain = mountains + terrain = jungle + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_terrain_great + } + triggered_desc = { + trigger = { + OR = { + has_province_modifier = inspection_hidden_hinterlands_recruit_modifier + has_province_modifier = inspection_hidden_hinterlands_hunters_modifier + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_hidden_hinterlands + } + triggered_desc = { + trigger = { + exists = county + county = { uses_county_fertility = yes } + county.county_fertility >= great_county_fertility_level + } + desc = activity_hunt_province_desc_fertility_great + } + # --- / triple minus bad + triggered_desc = { + trigger = { + OR = { + terrain = farmlands + terrain = floodplains + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_terrain_terrible + } + triggered_desc = { + trigger = { + exists = county + county.development_level >= medium_development_level + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_development_terrible + } + triggered_desc = { + trigger = { + has_building_or_higher = logging_camps_06 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_logging_camps_major + } + triggered_desc = { + trigger = { + exists = var:recent_hunt_held + var:recent_hunt_held >= 5 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_recent_hunt_major + } + # ++ / double plus good + triggered_desc = { + trigger = { + has_holding = no + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_no_holding + } + triggered_desc = { + trigger = { + has_building = royal_forest_02 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_royal_forest_medium + } + triggered_desc = { + trigger = { + has_building_or_higher = hunting_grounds_03 + NOT = { has_building_or_higher = hunting_grounds_06 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_hunting_grounds_medium + } + triggered_desc = { + trigger = { + exists = county + county = { uses_county_fertility = yes } + county.county_fertility < great_county_fertility_level + county.county_fertility >= good_county_fertility_level + } + desc = activity_hunt_province_desc_fertility_good + } + # -- / double minus bad + triggered_desc = { + trigger = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_terrain_bad + } + triggered_desc = { + trigger = { + exists = county + county.development_level < medium_development_level + county.development_level >= bad_development_level + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_development_bad + } + triggered_desc = { + trigger = { + has_building_or_higher = logging_camps_03 + NOT = { has_building_or_higher = logging_camps_06 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_logging_camps_medium + } + triggered_desc = { + trigger = { + exists = var:recent_hunt_held + var:recent_hunt_held >= 2 + var:recent_hunt_held <= 4 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_recent_hunt_medium + } + # + / plus good + triggered_desc = { + trigger = { + has_building = royal_forest_01 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_royal_forest_minor + } + triggered_desc = { + trigger = { + has_building_or_higher = hunting_grounds_01 + NOT = { has_building_or_higher = hunting_grounds_03 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_hunting_grounds_minor + } + triggered_desc = { + trigger = { + county ?= { has_county_modifier = hunt_mismanaged_game_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_punished_poachers + } + triggered_desc = { + trigger = { + county ?= { has_county_modifier = ep3_abundant_game_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_abundant_game + } + triggered_desc = { + trigger = { + OR = { + terrain = hills + terrain = wetlands + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_terrain_good + } + triggered_desc = { + trigger = { + scope:host.culture ?= { + OR = { + AND = { # Forests + has_cultural_parameter = forest_hunt_success_chance + root = { + OR = { + terrain = forest + terrain = taiga + } + } + } + AND = { # Hills + has_cultural_parameter = hills_hunt_success_chance + root = { terrain = hills } + } + AND = { # Deserts + has_cultural_parameter = desert_hunt_success_chance + root = { + OR = { + terrain = desert + terrain = oasis + } + } + } + AND = { # Steppes + has_cultural_parameter = steppe_hunt_success_chance + root = { terrain = steppe } + } + AND = { # Mountains + has_cultural_parameter = mountains_hunt_success_chance + root = { + OR = { + terrain = mountains + terrain = desert_mountains + } + } + } + AND = { # Drylands + has_cultural_parameter = drylands_hunt_success_chance + root = { + OR = { + terrain = drylands + terrain = desert + } + } + } + AND = { # Jungle + has_cultural_parameter = jungle_hunt_success_chance + root = { terrain = jungle } + } + AND = { # Wetlands + has_cultural_parameter = wetlands_hunt_success_chance + root = { + OR = { + terrain = wetlands + terrain = floodplains + } + } + } + } + } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_culture + } + triggered_desc = { + trigger = { + exists = county + county = { uses_county_fertility = yes } + county.county_fertility < good_county_fertility_level + county.county_fertility >= medium_county_fertility_level + } + desc = activity_hunt_province_desc_fertility + } + # - / minus bad + triggered_desc = { + trigger = { + exists = county + county.development_level < bad_development_level + county.development_level >= terrible_development_level + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_development + } + triggered_desc = { + trigger = { + county ?= { has_county_modifier = hunt_mismanaged_game_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_mismanaged_game + } + triggered_desc = { + trigger = { + county ?= { has_county_modifier = ep3_wild_predators_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_wild_predators + } + triggered_desc = { + trigger = { + has_building_or_higher = logging_camps_01 + NOT = { has_building_or_higher = logging_camps_03 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_logging_camps_minor + } + triggered_desc = { + trigger = { + exists = var:recent_hunt_held + var:recent_hunt_held <= 1 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + desc = activity_hunt_province_desc_recent_hunt_minor + } + } + + max_province_icons = 5 + + province_score = { + add = hunt_province_reference_value + if = { + limit = { + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } + # SIGHTINGS + if = { + limit = { + OR = { + # Standard + AND = { + OR = { + county = { has_county_modifier = hunt_sighting_standard_modifier } + county = { has_county_modifier = hunt_sighting_dangerous_modifier } + } + scope:special_option ?= flag:hunt_type_standard + } + # Falconry + AND = { + county = { has_county_modifier = hunt_sighting_falconry_modifier } + scope:special_option ?= flag:hunt_type_falconry + } + } + } + add = 20 + } + # LEGENDARY BUILDING + if = { + limit = { + county = { + any_county_province = { + has_building_or_higher = legendary_hunting_lodge + } + } + } + add = 50 + } + # Stop AI stealing sightings + if = { + limit = { + scope:host = { is_ai = yes } + exists = county.var:animal_type + NOT = { var:sighting_owner ?= scope:host } + } + add = -1000 + } + } + else_if = { + limit = { + scope:special_option ?= flag:hunt_type_nerge + } + add = county.county_fertility + } + } + + ################### + # GRAPHICS + ################### + + map_entity = { + trigger = { + activity_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_hunt_01_entity" + } + + map_entity = { + trigger = { + activity_location.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_indian_hunt_01_entity" + } + + map_entity = "building_western_hunt_01_entity" + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + + # End Travel + + background = { # Snowy Forest + trigger = { + activity_location = { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { # Mountains + trigger = { + activity_location = { graphical_wilderness_mountains_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { + trigger = { + scope:host = { + government_has_flag = government_is_nomadic + } + NOT = { scope:activity = { has_variable = nerge_began } } + } + texture = "gfx/interface/illustrations/event_scenes/mpo_hunt_steppe.dds" + environment = "environment_mpo_hunt_steppe" + ambience = "event:/DLC/CE2/Events/Event_Images/mpo_hunt_steppe" + } + + background = { # Steppe + trigger = { + activity_location = { graphical_wilderness_steppe_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #Desert + trigger = { + activity_location = { graphical_wilderness_desert_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { # Jungle + trigger = { + activity_location = { graphical_wilderness_jungle_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { # Drylands + trigger = { + activity_location = { graphical_drylands_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, settled, Tribal + trigger = { + activity_location ?= { + OR = { + graphical_wilderness_desert_trigger = yes + terrain = drylands + } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert_nomad.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { # Nomad Camp + trigger = { + activity_host = { government_has_flag = government_is_nomadic } + } + texture = "gfx/interface/illustrations/event_scenes/mpo_hunt_steppe.dds" + environment = "environment_mpo_hunt_steppe" + ambience = "event:/DLC/CE2/Events/Event_Images/mpo_hunt_steppe" + } + background = { #SE Asia and India tribals + trigger = { + activity_location = { + OR = { + geographical_region = world_asia + geographical_region = world_burma + geographical_region = world_india + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_hunt_generic_asia.dds" + environment = "environment_tgp_hunt_generic_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_hunt_generic_asia" + } + background = { # Camp + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_poachers_camp.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + ### Plug in widgets + activity_window_widgets = { + hunt_success_chance = "activity_plugin_widgets_summary" + nerge_special_type_progression = "activity_plugin_widgets_summary" + artifact_rewards = "activity_plugin_widgets_conclusion" + trait_rewards = "activity_plugin_widgets_conclusion" + } + + window_characters = { + hunter = { + camera = camera_event_center + + effect = { + if = { + limit = { + activity_is_nerge_type = no + scope:host.location = scope:activity.activity_location + } + if = { + limit = { + scope:player ?= { + NOR = { + this = scope:host + AND = { + exists = scope:host.court_position:master_of_hunt_court_position + this = scope:host.court_position:master_of_hunt_court_position + } + AND = { + exists = scope:host.court_position:huntperson_camp_officer + this = scope:host.court_position:huntperson_camp_officer + } + AND = { + exists = var:animal_slayer + this = var:animal_slayer + } + } + } + } + scope:player ?= { add_to_list = characters } + } + else_if = { + limit = { + exists = scope:host.intent_target + any_attending_character = { + location = scope:activity.activity_location + this != scope:host + this = scope:host.intent_target + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + this = scope:host.intent_target + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + location = scope:activity.activity_location + this != scope:host + OR = { + has_relation_lover = scope:host + has_relation_friend = scope:host + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + OR = { + has_relation_lover = scope:host + has_relation_friend = scope:host + } + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + has_court_position = master_of_hunt_court_position + has_court_position = huntperson_camp_officer + } + } + add_to_list = characters + } + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + has_activity_intent = woo_attendee_intent + } + scope:character = scope:host.intent_target + } + animation = { love flirtation } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + has_activity_intent = murder_attendee_intent + } + scope:character = scope:host.intent_target + } + animation = { dismissal worry paranoia } + } + triggered_animation = { + trigger = { + exists = scope:host.intent_target + scope:host = { + has_activity_intent = impose_obedience_intent + } + scope:character = scope:host.intent_target + } + animation = { dismissal worry fear } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + NOR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start throne_room_two_handed_passive_1 lantern marshal throne_room_one_handed_passive_1 } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + OR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start hunting_shortbow_rest_arrow_default lantern marshal } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + animation = { idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + NOR = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + } + animation = { lantern worry paranoia stress } + } + #Fallback + animation = hunting_knife_start + } + } + + hunter = { # Nerge + camera = camera_activity_horse + + effect = { + if = { + limit = { + activity_is_nerge_type = yes + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + has_court_position = master_of_hunt_court_position + has_court_position = huntperson_camp_officer + } + } + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { has_variable = nerge_began } + } + animation = jockey_gallop + } + animation = horse_conversing_right + } + } + + host = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + scope:activity = { + hunt_is_nerge_type = no + } + } + scope:host = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = survey + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + animation = hunting_falcon + } + triggered_animation = { + trigger = { + scope:activity.var:animal_slayer ?= scope:character + scope:activity.var:animal_type ?= flag:hare + } + animation = hunting_carcass_start + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + NOT = { + scope:host = { + OR = { + employs_court_position = master_of_hunt_court_position + employs_court_position = huntperson_camp_officer + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + } + animation = hunting_horn + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + NOR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:host = { + OR = { + employs_court_position = master_of_hunt_court_position + employs_court_position = huntperson_camp_officer + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start throne_room_two_handed_passive_1 throne_room_one_handed_passive_1 idle } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + OR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:host = { + OR = { + employs_court_position = master_of_hunt_court_position + employs_court_position = huntperson_camp_officer + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start hunting_longbow_rest_arrow_default idle } + } + #Fallback + animation = idle + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + host = { # Nerge + camera = camera_activity_horse + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + scope:activity = { + hunt_is_nerge_type = yes + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { has_variable = nerge_began } + } + animation = horse_sword_shield + } + animation = horse_archer_idle + } + } + + master_of_hunt = { + camera = camera_event_center + + effect = { + if = { + limit = { + activity_is_nerge_type = no + scope:host.location = scope:activity.activity_location + } + scope:host.court_position:master_of_hunt_court_position ?= { + if = { + limit = { + is_participant_in_activity = scope:activity + location = scope:activity.activity_location + } + add_to_list = characters + } + } + scope:host.court_position:huntperson_camp_officer ?= { + if = { + limit = { + is_participant_in_activity = scope:activity + location = scope:activity.activity_location + } + add_to_list = characters + } + } + } + } + scripted_animation = { + animation = hunting_horn + } + } + + master_of_chase = { # Nerge + camera = camera_activity_horse + + effect = { + if = { + limit = { + activity_is_nerge_type = yes + scope:host.location = scope:activity.activity_location + } + scope:host.court_position:master_of_hunt_court_position ?= { + if = { + limit = { + is_participant_in_activity = scope:activity + location = scope:activity.activity_location + } + add_to_list = characters + } + } + scope:host.court_position:huntperson_camp_officer ?= { + if = { + limit = { + is_participant_in_activity = scope:activity + location = scope:activity.activity_location + } + add_to_list = characters + } + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { has_variable = nerge_began } + } + animation = horse_sword_shield + } + animation = horse_conversing_left + } + } + + animal_slayer = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + var:animal_slayer ?= { add_to_list = characters } + } + } + scripted_animation = { + triggered_animation = { + trigger = { scope:activity.var:animal_type ?= flag:hare } + animation = hunting_carcass_start + } + animation = marshal + } + } + + hunter = { + camera = camera_event_center + + effect = { + if = { + limit = { + NOT = { exists = var:animal_slayer } + activity_is_nerge_type = no + scope:host.location = scope:activity.activity_location + } + if = { + limit = { + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + has_court_position = master_of_hunt_court_position + has_court_position = huntperson_camp_officer + } + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + OR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:character = { + culture = { has_innovation = innovation_advanced_bowmaking } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_longbow_aim_arrow_default hunting_shortbow_aim_arrow_default crossbow } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + OR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + NOT = { + scope:host.culture = { has_innovation = innovation_advanced_bowmaking } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_longbow_aim_arrow_default hunting_shortbow_aim_arrow_default } + } + triggered_animation = { + trigger = { + scope:activity = { + NOT = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + # Only show weapons in the active part + exists = var:hunt_activity_story + NOR = { + var:hunt_activity_story = flag:ambush + var:hunt_activity_story = flag:stealth + } + NOT = { exists = var:hunt_success } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start throne_room_two_handed_passive_1 throne_room_one_handed_passive_1 idle } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:character = { + NOT = { can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } } + } + } + animation = { idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + scope:activity = { NOT = { has_activity_option = { category = special_type option = hunt_type_falconry } } } + scope:character = { + NOT = { can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } } + } + } + animation = { shock paranoia fear } + } + #Fallback + animation = hunting_shortbow_rest_arrow_default + } + } + + hunter = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + activity_is_nerge_type = no + } + if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + has_court_position = master_of_hunt_court_position + has_court_position = huntperson_camp_officer + } + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_knife_start idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + NOT = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + } + scope:host.culture = { has_innovation = innovation_advanced_bowmaking } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_longbow_aim_arrow_default hunting_shortbow_aim_arrow_default crossbow } + } + triggered_animation = { + trigger = { + NOR = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:host.culture = { has_innovation = innovation_advanced_bowmaking } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + animation = { hunting_longbow_aim_arrow_default hunting_shortbow_aim_arrow_default } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + NOT = { + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + } + animation = { idle happiness laugh admiration worry } + } + triggered_animation = { + trigger = { + NOR = { + scope:activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + scope:character = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + } + animation = { shock paranoia fear } + } + #Fallback + animation = hunting_knife_start + } + } + + hunter = { # Nerge + camera = camera_activity_horse + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + activity_is_nerge_type = yes + } + if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOT = { + this = scope:host + } + is_councillor_of = scope:host + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOT = { + this = scope:host + } + is_councillor_of = scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOT = { + this = scope:host + } + highest_held_title_tier >= tier_duchy + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOT = { + this = scope:host + } + highest_held_title_tier >= tier_duchy + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + count >= 3 + location = scope:activity.activity_location + NOT = { + this = scope:host + } + highest_held_title_tier >= tier_county + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOT = { + this = scope:host + } + highest_held_title_tier >= tier_county + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + has_court_position = master_of_hunt_court_position + has_court_position = huntperson_camp_officer + } + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:activity = { has_variable = nerge_began } + } + animation = jockey_gallop + } + animation = horse_archer_aggressive + } + } + } + + ################### + # OPTIONS + ################### + + special_option_category = special_type + + options = { + # option example + special_type = { + hunt_type_standard = { + default = yes + blocked_intents = { + successful_nerge_intent + dreadful_nerge_intent + } + ai_will_do = { + add = { + value = 30 + desc = "base" + } + # Personality + if = { + limit = { has_trait = craven } + add = { + value = 10 + desc = "Cowardly" + } + } + # Gender + if = { + limit = { + save_temporary_scope_as = host_temp + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host_temp } + } + } + add = { + value = -25 + desc = "martial gender" + } + } + # Sighting + if = { + limit = { + any_sub_realm_county = { + has_county_modifier = hunt_sighting_standard_modifier + var:sighting_owner ?= root + } + } + add = { + value = 15 + desc = hunt_sighting_standard_modifier + } + } + # Trait + if = { + limit = { + has_trait = lifestyle_hunter + has_trait_xp = { + trait = lifestyle_hunter + track = hunter + value >= 10 + } + } + add = { + value = 10 + desc = hunter + } + } + } + } + hunt_type_falconry = { + is_shown = { has_dlc_feature = tours_and_tournaments } + blocked_intents = { + successful_nerge_intent + dreadful_nerge_intent + } + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.miniscule_herd_value + multiply = 0.5 + desc = hunt_type_falconry + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { + add = { + value = hunt_activity_base_cost #Base level + desc = hunt_type_falconry + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + add = { + value = hunt_activity_base_cost #Base level + desc = hunt_type_falconry + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = 0 + add = { + value = hunt_activity_base_cost + add = { + value = hunt_activity_base_cost + multiply = activity_cost_scale_by_era + subtract = hunt_activity_base_cost + } + } + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + + if = { + limit = { + has_character_flag = free_hunt + } + multiply = 0 + } + if = { + limit = { + has_character_flag = free_falconry + } + multiply = 0 + } + } + } + else = { + value = 0 + } + } + } + ai_will_do = { + value = 15 + add = { + value = ai_greed + multiply = -0.25 + desc = "ai_greed" + } + add = { + value = ai_sociability + multiply = 0.25 + desc = "ai_sociability" + } + add = { + value = ai_boldness + multiply = -0.25 + desc = "ai_boldness" + } + # Cowardice + if = { + limit = { has_trait = brave } + add = { + value = -25 + desc = "Brave" + } + } + else_if = { + limit = { has_trait = craven } + add = { + value = 25 + desc = "Cowardly" + } + } + # Economic Archetype + if = { + limit = { ai_has_cautious_personality = yes } + add = { + value = -25 + desc = "cautious" + } + } + if = { + limit = { ai_has_economical_boom_personality = yes } + add = { + value = -25 + desc = "builder" + } + } + # Gender + if = { + limit = { + save_temporary_scope_as = host_temp + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host_temp } + } + } + add = { + value = 50 + desc = "martial gender" + } + } + # Sighting + if = { + limit = { + any_sub_realm_county = { + has_county_modifier = hunt_sighting_falconry_modifier + var:sighting_owner ?= root + } + } + add = { + value = 15 + desc = hunt_sighting_falconry_modifier + } + } + # Trait + if = { + limit = { + has_trait = lifestyle_hunter + has_trait_xp = { + trait = lifestyle_hunter + track = falconer + value >= 10 + } + } + add = { + value = 25 + desc = falconer + } + } + # Court + if = { + limit = { + has_royal_court = yes + has_court_type = court_diplomatic + } + add = { + value = 25 + desc = court_diplomatic + } + } + # Culture + if = { + limit = { + culture = { has_cultural_pillar = ethos_courtly } + } + add = { + value = 25 + desc = ethos_courtly + } + } + # It's Free + if = { + limit = { + has_character_flag = free_falconry + } + add = { + value = 100 + desc = "free" + } + } + } + } + hunt_type_nerge = { + is_shown = { + government_has_flag = government_is_nomadic + } + + blocked_intents = { + reduce_stress_intent + slay_beast_intent + woo_attendee_intent + befriend_attendee_intent + } + ai_will_do = { + add = { + value = 10 + desc = "base" + } + if = { + limit = { gold < 200 } + add = { + value = 90 + desc = nomad_seeking_gold + } + } + if = { + limit = { + prestige >= 500 + prestige > gold + } + add = { + value = 90 + desc = nomad_satiated_with_prestige + } + } + } + } + hunt_type_legendary = { + is_valid = { + custom_tooltip = { + text = hunt_any_county_legendary_sighting_tt + OR = { + root.domicile.domicile_location.county ?= { + has_county_modifier = hunt_sighting_legendary_modifier + } + any_sub_realm_county = { + has_county_modifier = hunt_sighting_legendary_modifier + var:sighting_owner ?= root + } + } + } + } + blocked_intents = { + successful_nerge_intent + dreadful_nerge_intent + } + ai_will_do = { + add = { + value = 50 + desc = "base" + } + add = { + value = ai_boldness + desc = ai_boldness + } + add = { + value = ai_vengefulness + min = 0 + desc = ai_vengefulness + } + # Personality + if = { + limit = { has_trait = stubborn } + add = { + value = 25 + desc = stubborn + } + } + # Gender + if = { + limit = { + save_temporary_scope_as = host_temp + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host_temp } + } + } + add = { + value = -25 + desc = "martial gender" + } + } + # Trait + if = { + limit = { + has_trait = lifestyle_hunter + has_trait_xp = { + trait = lifestyle_hunter + track = hunter + value >= 10 + } + } + add = { + value = 25 + desc = hunter + } + } + # ACH Greatest Hunter Oath + if = { + limit = { + has_variable = greatest_hunter_oath + } + add = { + value = 200 + desc = "greatest hunter oath" + } + } + } + } + } + + ######### + # ATTENDANTS NUMBER + ######### + hunt_option_attendants = { + hunt_attendants_few = { + + is_shown = { + has_dlc_feature = advanced_activities + NOT = { government_has_flag = government_is_nomadic } + } + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 25 + # Economic Archetype + if = { # Cautious + limit = { ai_has_cautious_personality = yes } + add = { + value = 25 + desc = "Cautious" + } + } + if = { # Builder + limit = { + OR = { + ai_has_economical_boom_personality = yes + has_character_flag = ai_boom + } + } + add = { + value = 25 + desc = "Builder" + } + } + if = { # There's probably a Pilgrimage somewhere I should attend + limit = { ai_has_pious_builder_personality = yes } + add = { + value = -25 + desc = "Pious Builder" + } + } + # Economy Sanity + if = { # Work first, play later + limit = { + exists = capital_county + capital_county.title_province = { free_building_slots > 0 } + } + add = { + value = 25 + desc = "Work first, play later" + } + } + } + } + hunt_attendants_normal = { + default = yes + + is_shown = { + NOT = { government_has_flag = government_is_nomadic } + } + + is_valid = { + can_make_expensive_purchase_trigger = { + PRICE = root.hunt_normal_option_cost + } + } + + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.miniscule_herd_value + desc = hunt_attendants_normal + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { + desc = hunt_attendants_normal + add = { + value = hunt_normal_option_cost + desc = hunt_attendants_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + desc = hunt_attendants_normal + add = { + value = hunt_normal_option_cost + desc = hunt_attendants_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + else = { + value = 0 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { + desc = hunt_attendants_normal + add = { + value = hunt_normal_option_cost + desc = hunt_attendants_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 25 + desc = hunt_attendants_normal + } + if = { # Cautious + limit = { gold >= major_gold_value } + add = { + value = 25 + desc = "Rich" + } + } + if = { # Ambitious + limit = { has_trait = ambitious } + add = { + value = 10 + desc = "Ambitious" + } + } + if = { # Ambitious + limit = { has_trait = greedy } + add = { + value = -10 + desc = "Greedy" + } + } + if = { # Warlike + limit = { ai_has_warlike_personality = yes } + add = { + value = 25 + desc = "Warlike" + } + } + } + } + hunt_attendants_many = { + + is_shown = { + has_dlc_feature = advanced_activities + NOT = { government_has_flag = government_is_nomadic } + } + + is_valid = { + can_make_expensive_purchase_trigger = { + PRICE = root.hunt_good_option_cost + } + } + + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.minor_herd_value + desc = hunt_attendants_many + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { + desc = hunt_attendants_many + add = { + value = hunt_good_option_cost #Base level + desc = hunt_attendants_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + desc = hunt_attendants_many + add = { + value = hunt_good_option_cost #Base level + desc = hunt_attendants_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + else = { + value = 0 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { + desc = hunt_attendants_many + add = { + value = hunt_good_option_cost #Base level + desc = hunt_attendants_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 10 + desc = hunt_attendants_many + } + if = { # Cautious + limit = { gold >= major_gold_value } + add = { + value = 25 + desc = "Rich" + } + } + if = { # Cautious + limit = { gold >= monumental_gold_value } + add = { + value = 25 + desc = "Rich" + } + } + if = { # Ambitious + limit = { has_trait = ambitious } + add = { + value = 10 + desc = "Ambitious" + } + } + if = { # Ambitious + limit = { has_trait = greedy } + add = { + value = -10 + desc = "Greedy" + } + } + if = { # Warlike + limit = { ai_has_warlike_personality = yes } + add = { + value = 25 + desc = "Warlike" + } + } + } + } + } + + ######### + # GUEST NUMBER + ######### + hunt_option_party_size = { + hunt_party_size_few = { + default = yes + is_shown = { has_dlc_feature = advanced_activities } + + # Entourage option grabbing suitable bodyguards & maybe someone from court who really likes you, + randos. + travel_entourage_selection = { + weight = hunt_entourage_base_set_weighting_value + max = 5 + invite_rule_order = 2 + } + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Economic Archetype + if = { # Cautious + limit = { ai_has_cautious_personality = yes } + add = { + value = 25 + desc = "Cautious" + } + } + if = { # Builder + limit = { + OR = { + ai_has_economical_boom_personality = yes + has_character_flag = ai_boom + } + } + add = { + value = 25 + desc = "Builder" + } + } + # Economy Sanity + if = { # Work first, play later + limit = { + exists = capital_county + capital_county.title_province = { free_building_slots > 0 } + } + add = { + value = 25 + desc = "Work first, play later" + } + } + } + } + hunt_party_size_normal = { + is_valid = { + trigger_if = { + limit = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + custom_tooltip = { + text = I_AM_LANDLESS_ADVENTURER_TRIGGER + is_landless_adventurer = no + } + } + } + + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.miniscule_herd_value + min = 25 + desc = hunt_attendants_many + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { + desc = hunt_party_size_normal + add = { + value = hunt_normal_option_cost + desc = hunt_party_size_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + desc = hunt_party_size_normal + add = { + value = hunt_normal_option_cost + desc = hunt_party_size_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + else = { + value = 0 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { + desc = hunt_party_size_normal + add = { + value = hunt_normal_option_cost + desc = hunt_party_size_normal + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_normal_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + } + + #Entourage option grabbing most people suitable from court, + randos. + travel_entourage_selection = { + weight = { + add = hunt_entourage_base_set_weighting_value + add = hunt_entourage_extras_set_weighting_value + } + max = 8 + invite_rule_order = 2 + } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 25 + desc = hunt_party_size_normal + } + } + } + hunt_party_size_many = { + is_shown = { has_dlc_feature = advanced_activities } + + is_valid = { + trigger_if = { + limit = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + custom_tooltip = { + text = I_AM_LANDLESS_ADVENTURER_TRIGGER + is_landless_adventurer = no + } + } + } + + cost = { + herd = { + if = { + limit = { + OR = { + NOT = { government_has_flag = government_is_nomadic } + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + value = 0 + } + else = { + add = { + value = domicile.minor_herd_value + min = 50 + desc = hunt_attendants_many + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_cheaper_hunts + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + + } + multiply = { + value = 0.5 + desc = steppe_season_hunt_discount_desc + } + } + + if = { + limit = { + OR = { + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + } + } + multiply = 0 + } + } + } + } + gold = { + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + has_character_flag = free_hunt + AND = { + has_character_flag = free_falconry + involved_activity = { has_activity_option = { category = special_type option = hunt_type_falconry } } + } + government_has_flag = government_is_mandala + AND = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + } + } + value = 0 + } + else = { + add = { + desc = hunt_party_size_many + add = { + value = hunt_good_option_cost + desc = hunt_party_size_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + treasury = { # Make sure this matches the gold cost above + if = { + limit = { + house ?= { has_house_power_parameter = hunts_costs_treasury } + has_treasury = yes + } + add = { + desc = hunt_party_size_many + add = { + value = hunt_good_option_cost + desc = hunt_party_size_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + else = { + value = 0 + } + } + piety = { + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + value = 0 + } + else = { + add = { + desc = hunt_party_size_many + add = { + value = hunt_good_option_cost + desc = hunt_party_size_many + } + if = { + limit = { + dynasty ?= { + has_dynasty_perk = law_legacy_1 + } + } + subtract = { + value = hunt_good_option_cost + multiply = law_legacy_cost_reduction_mult + desc = law_legacy_1_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + } + } + } + } + + #Entourage option grabbing sodding everyone suitable from court, + every grabbable rando in the duchy and maybe a few extra. + travel_entourage_selection = { + weight = { + add = hunt_entourage_base_set_weighting_value + add = hunt_entourage_extras_set_weighting_value + add = hunt_entourage_sodding_everyone_set_weighting_value + } + + max = 15 + invite_rule_order = 2 + } + + # desc is only shown in debug AI watch window + ai_will_do = { + add = { + value = 10 + desc = hunt_party_size_many + } + if = { # Cautious + limit = { gold >= monumental_gold_value } + add = { + value = 25 + desc = "Rich" + } + } + if = { # Ambitious + limit = { has_trait = ambitious } + add = { + value = 10 + desc = "Ambitious" + } + } + if = { # Ambitious + limit = { has_trait = greedy } + add = { + value = -10 + desc = "Greedy" + } + } + if = { # Warlike + limit = { ai_has_warlike_personality = yes } + add = { + value = 25 + desc = "Warlike" + } + } + } + } + } + } + + ################### + # PHASES + ################### + + max_guest_arrival_delay_time = { months = 8 } + + phases = { + hunt_phase = { + is_predefined = yes + + is_shown = {} + + on_phase_active = { # Fires for every attendee + if = { + limit = { + this = scope:host + activity_is_nerge_type = no + } + scope:activity = { progress_activity_phase_after = { weeks = 6 } } + + trigger_event = { on_action = hunt_start_events } + trigger_event = { + on_action = hunt_outcome_start_events + days = 21 + } + trigger_event = { + on_action = hunt_outcome_complication_events + days = 28 + } + trigger_event = { + on_action = hunt_outcome_end_events + days = 35 + } + scope:activity = { + every_attending_character = { + limit = { is_ai = no } + trigger_event = { + on_action = hunt_random_pulse + days = 7 + } + trigger_event = { + on_action = hunt_random_pulse + days = 14 + } + } + } + } + else_if = { + limit = { + this = scope:host + activity_is_nerge_type = yes + } + scope:activity = { progress_activity_phase_after = { weeks = 8 } } + trigger_event = { + id = mpo_nerge.0005 + } + trigger_event = { + id = mpo_nerge.0105 + days = 54 + } + scope:activity = { + every_attending_character = { + limit = { is_ai = no } + trigger_event = { + on_action = nerge_flavor_events_on_action + days = 10 + } + trigger_event = { + on_action = nerge_flavor_events_on_action + days = 20 + } + trigger_event = { + on_action = nerge_flavor_events_on_action + days = 30 + } + trigger_event = { + on_action = nerge_flavor_events_on_action + days = 40 + } + } + every_attending_character = { + limit = { is_ai = yes } + trigger_event = { + on_action = nerge_flavor_events_ai_attending_on_action + days = 10 + } + trigger_event = { + on_action = nerge_flavor_events_ai_attending_on_action + days = 20 + } + trigger_event = { + on_action = nerge_flavor_events_ai_attending_on_action + days = 30 + } + trigger_event = { + on_action = nerge_flavor_events_ai_attending_on_action + days = 40 + } + } + } + } + } + + on_weekly_pulse = { # Fires for every attendee + trigger_event = hunt.0081 # Invalidation + } + + on_end = { # Fires for every attendee + if = { + limit = { + is_alive = yes + trigger_if = { + limit = { + scope:activity = { + NOR = { + has_activity_option = { category = special_type option = hunt_type_falconry } + has_activity_option = { category = special_type option = hunt_type_nerge } + } + } + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + } + } + target_weight_modifier_effect = { VALUE = hunt_weight_modifier_value } + + # House aspiration - gain merit + if = { + limit = { + house ?= { has_house_power_parameter = hunts_provides_merit } + } + scope:activity = { + add_activity_log_entry = { + key = hunt_completed_merit_gain_log + tags = { good } + character = prev + show_in_conclusion = yes + # EFFECT + prev = { change_merit = major_merit_gain } + } + } + } + } + scope:activity.activity_location = { save_scope_as = activity_location } + if = { + limit = { + this = scope:host + activity_is_nerge_type = no + } + scope:activity = { + random_list = { + 10 = { # Success + trigger = { + # Only fired for legendary if a proxy animal was hunted + trigger_if = { + limit = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + exists = var:legendary_proxy + } + trigger_if = { + limit = { exists = var:hunt_success } + var:hunt_success = flag:yes + } + } + if = { + limit = { exists = var:hunt_credit_taker } + var:hunt_credit_taker = { save_scope_as = credit_taker } + } + set_variable = { + name = hunt_success + value = flag:yes + } + # Create trophy artifact + scope:host = { + if = { + limit = { + NOT = { exists = scope:activity.var:animal_spared } + } + hunt_create_trophy_effect = yes + } + } + # Prestige etc. + if = { + limit = { exists = scope:newly_created_artifact } + add_activity_log_entry = { + key = hunt_completed_success_log + score = 80 + tags = { complete good } + character = scope:host + show_in_conclusion = yes + artifact = scope:newly_created_artifact + # EFFECT + scope:host = { disburse_hunt_activity_rewards = yes } + } + } + else = { + add_activity_log_entry = { + key = hunt_completed_success_log + score = 80 + tags = { complete good } + character = scope:host + show_in_conclusion = yes + # EFFECT + scope:host = { disburse_hunt_activity_rewards = yes } + } + } + scope:host = { + trigger_event = hunt.9001 + if = { + limit = { + has_variable = greatest_hunter_oath_r_counter + } + change_variable = { + name = greatest_hunter_oath_r_counter + add = 1 + } + } + } + } + 3 = { # Great Success + trigger = { + has_activity_option = { category = special_type option = hunt_type_legendary } + NOT = { exists = var:legendary_proxy } + trigger_if = { + limit = { exists = var:hunt_success } + var:hunt_success = flag:yes + } + } + if = { + limit = { exists = var:hunt_credit_taker } + var:hunt_credit_taker = { save_scope_as = credit_taker } + } + set_variable = { + name = hunt_success + value = flag:yes + } + # Create trophy artifact + save_scope_as = impressive_trophy + add_activity_log_entry = { + key = hunt_completed_success_log + score = 80 + tags = { complete good } + character = scope:host + show_in_conclusion = yes + artifact = scope:newly_created_artifact + + # EFFECT + scope:host = { + end_hunt_mystical_animal_story_cycle_effect = yes + disburse_hunt_activity_rewards = yes + } + } + scope:host = { + trigger_event = hunt.4004 + if = { + limit = { + has_variable = greatest_hunter_oath_l_counter + } + change_variable = { + name = greatest_hunter_oath_l_counter + add = 1 + } + } + } + } + 10 = { # Failure + trigger = { + trigger_if = { + limit = { exists = var:hunt_success } + var:hunt_success = flag:no + } + } + set_variable = { + name = hunt_success + value = flag:no + } + add_activity_log_entry = { + key = hunt_completed_failure_log + score = 80 + tags = { complete bad } + character = scope:host + show_in_conclusion = yes + + # EFFECT + scope:host = { disburse_hunt_activity_rewards = yes } + } + scope:host = { trigger_event = hunt.9002 } + } + } + # tgp_ceremonial_liege_events.0020 + if = { + limit = { + var:hunt_success ?= flag:yes + } + scope:host = { + if = { + limit = { + var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt + } + tgp_one_up_activity_effect = yes + } + } + } + if = { + limit = { + scope:host = { var:tgp_ceremonial_liege_events_0020_discount ?= flag:hunt } + } + remove_variable = tgp_ceremonial_liege_events_0020_discount + } + } + } + } + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_will_select_province = { + value = 50 + add = { + value = scope:score # Derived from province_score + multiply = 10 + } + } + + ################### + # GUEST HANDLING + ################### + + guest_invite_rules = { + rules = { + 2 = activity_invite_rule_rivals + 3 = activity_invite_rule_extended_family + 4 = activity_invite_rule_guests + + # MP + 6 = activity_invite_mp + } + defaults = { + 3 = activity_invite_rule_liege + 3 = activity_invite_rule_suzerain + 3 = activity_invite_rule_tributaries + 3 = activity_invite_rule_vassals + 1 = activity_invite_rule_confederates + 3 = activity_invite_rule_close_family + 1 = activity_invite_rule_friends + 1 = activity_invite_rule_potential_friends + 2 = activity_invite_rule_lovers + 2 = activity_invite_rule_potential_lovers + 2 = activity_invite_rule_glory_hounds + 1 = activity_invite_rule_hunters + 3 = activity_invite_rule_knights + 4 = activity_invite_rule_courtiers + 4 = activity_invite_rule_fellow_vassals + 1 = activity_invite_rule_landless_adventurers_restricted_range + } + } + + max_guests = 20 + + can_be_activity_guest = { + OR = { + is_adult = yes + AND = { + government_has_flag = government_is_nomadic + is_child_of = scope:host + age >= 8 + } + } + NOT = { has_trait = incapable } + can_hunt_trigger = yes + in_diplomatic_range = scope:host + } + + host_intents = { + intents = { reduce_stress_intent slay_beast_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent successful_nerge_intent dreadful_nerge_intent impose_obedience_intent } + default = reduce_stress_intent + player_defaults = { successful_nerge_intent reduce_stress_intent slay_beast_intent } + } + + guest_intents = { + intents = { reduce_stress_intent slay_beast_intent murder_attendee_intent woo_attendee_intent befriend_attendee_intent successful_nerge_intent dreadful_nerge_intent } + default = reduce_stress_intent + player_defaults = { successful_nerge_intent reduce_stress_intent slay_beast_intent } + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + activity_guest_hunt_ai_accept_modifier = yes + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + # Regular + guest_friendship guest_insulted hunt_tracks_character hunt_tracks_option hunt_tracks_dog hunt_tracks_building hunt_hunters_bond hunt_dog_bond hunt_knowledge_sharing hunt_small_game hunt_moh_positive hunt_moh_negative hunt_poetic_inspiration hunt_fervor_gain hunt_distinguished_ability hunt_annoyed_owner hunt_impressive_grounds hunt_eggs_found + + # Nerge + hunt_successful_kill hunt_very_successful_kill hunt_worked_together hunt_failed_kill hunt_failed_several_kills hunt_successful_maneuver hunt_learned_maneuver hunt_prowess_mastery hunt_martial_mastery + } + chance_of_no_event = 3 + } + + on_start = { + #if = { + # limit = { + # NOT = { + # exists = global_var:hunts_worldwide + # } + # } + # set_global_variable = { + # name = hunts_worldwide + # value = 1 + # } + #} + #else = { + # change_global_variable = { + # name = hunts_worldwide + # add = 1 + # } + #} + if = { + limit = { + has_activity_option = { + category = special_type + option = hunt_type_nerge + } + } + set_variable = { + name = nerge_activity + value = 1 + } + activity_setup_special_type_progression_effect = yes + } + else = { + set_variable = { + name = hunt_success_chance + value = hunt_success_chance_value + } + } + if = { + limit = { + exists = activity_location.county.var:animal_type + OR = { + AND = { + has_activity_option = { category = special_type option = hunt_type_standard } + activity_location.county = { + OR = { + has_county_modifier = hunt_sighting_standard_modifier + has_county_modifier = hunt_sighting_dangerous_modifier + } + } + } + AND = { + has_activity_option = { category = special_type option = hunt_type_legendary } + activity_location.county = { has_county_modifier = hunt_sighting_legendary_modifier } + } + AND = { + has_activity_option = { category = special_type option = hunt_type_falconry } + activity_location.county = { has_county_modifier = hunt_sighting_falconry_modifier } + } + } + } + set_variable = { + name = animal_type + value = scope:activity.activity_location.county.var:animal_type + } + } + scope:host = { + if = { + limit = { + ai_sociability > 0 + is_ai = yes + } + random = { + chance = { + value = 0.5 # One in 200 hunts + if = { + limit = { + has_trait = lifestyle_hunter + } + add = 1 + } + if = { + limit = { + ai_rationality <= -25 + has_personality_dominant_trigger = yes + } + add = 0.5 + } + } + add_character_flag = hunts_a_lot + } + } + if = { + limit = { + has_character_flag = free_hunt + } + remove_character_flag = free_hunt + } + if = { + limit = { + has_character_flag = free_falconry + } + remove_character_flag = free_falconry + } + } + } + allow_zero_guest_invites = yes + + on_enter_passive_state = { + scope:activity = { + if = { + limit = { + NOT = { has_variable = progressed_to_active } + # Everyone who accepted is here + any_attending_character = { + count = all + location = scope:activity.activity_location + } + # There are no open invitations + any_invited_character = { + count = 0 + } + } + set_variable = progressed_to_active + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + trigger_event = hunt.0550 + if = { + limit = { + this = scope:host + is_landless_adventurer = no + NOT = { employs_court_position = master_of_hunt_court_position } + involved_activity = { + any_attending_character = { + location = root.location + save_temporary_scope_as = potential_moh + + } + } + can_appoint_char_to_court_position = { CHAR = scope:potential_moh COURT_POS = master_of_hunt_court_position } + } + trigger_event = { + id = hunt.0540 + days = { 3 9 } + } + } + if = { + limit = { + this = scope:host + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + can_employ_court_position_type = huntperson_camp_officer + NOT = { employs_court_position = huntperson_camp_officer } + } + trigger_event = { + id = hunt.0540 + days = 1 + } + } + if = { + limit = { + this = scope:host + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + trigger_event = { + id = hunt.1337 + } + } + if = { + limit = { + this = scope:host + involved_activity = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + } + random = { + chance = 5 + trigger_event = { + id = hunt.8540 + days = { 10 12 } + } + } + } + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + if = { + limit = { this = scope:host } + trigger_event = { id = hunt.0110 } + } + trigger_event = { + id = hunt.7200 # Do you murder or not? + days = 3 + } + trigger_event = { + id = hunt.7400 # Do you abduct or not? + days = 3 + } + scope:activity ?= { + set_variable = { + name = nerge_began + value = 1 + } + } + } + + on_complete = { + # Struggle Catalysts + fp3_struggle_catalysts_for_activities_effect = yes + + hunt_remove_variables_effect = yes + scope:activity.activity_location = { + if = { + limit = { exists = var:recent_hunt_held } + save_scope_value_as = { + name = recent_hunt_held_count + value = var:recent_hunt_held + } + set_variable = { + name = recent_hunt_held + value = { + value = scope:recent_hunt_held_count + add = 1 + } + years = 4 + } + } + else = { + set_variable = { + name = recent_hunt_held + value = 1 + years = 4 + } + } + if = { + limit = { + activity_is_nerge_type = yes + } + county = { + scope:host = { + add_to_variable_list = { + name = recent_nerges + target = prev + years = 30 + } + } + } + } + } + } +} diff --git a/common/activities/activity_types/imperial_examination.txt b/common/activities/activity_types/imperial_examination.txt new file mode 100644 index 00000000..d97a75d9 --- /dev/null +++ b/common/activities/activity_types/imperial_examination.txt @@ -0,0 +1,2222 @@ +activity_imperial_examination = { + + notify_player_can_join_activity = yes + + is_shown = { + government_has_flag = government_is_celestial + has_tgp_dlc_trigger = yes + trigger_if = { # Allow a local exam to be hosted first. + limit = { + is_ai = yes + NOT = { has_character_flag = examinations_ai_override } + } + years_from_game_start >= 5 + } + } + + can_start_showing_failures_only = { + highest_held_title_tier = tier_hegemony + NOT = { is_activity_type_on_cooldown = activity_imperial_examination } + trigger_if = { + limit = { + is_ai = yes + } + # Special logic for AI Hegemons, more specific than any other is_available trigger + is_available_quick = { + alive = yes + travel = 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 } + } + } + trigger_else = { + is_available = yes + } + } + + is_valid = { + scope:host = { + is_physically_able = yes + is_landed = yes + government_allows = merit + } + # If no one shows up + trigger_if = { + limit = { is_current_phase_active = yes } + has_attending_activity_guests = yes + } + } + + on_invalidated = { + activity_type = { save_scope_as = activity_type } + imperial_examination_clean_up_phase_variables_effect = yes + scope:activity = { + every_attending_character = { + if = { # If we still have a short duration remaining on our appointment timeout, clear it + limit = { + appointment_timeout_days > 0 + appointment_timeout_days < 365 + } + clear_appointment_timeout = yes + } + } + } + # Host becomes unlanded + if = { + limit = { + scope:host = { is_landed = no } + } + every_attending_character = { trigger_event = activity_system.0320 } + } + if = { # No one shows up + limit = { + has_attending_activity_guests = no + } + activity_location = { save_scope_as = location } + scope:host = { trigger_event = activity_system.0100 } + } + } + + on_host_death = { + imperial_examination_clean_up_phase_variables_effect = yes + every_attending_character = { trigger_event = activity_system.0501 } + } + + province_description = { + triggered_desc = { + trigger = { this = scope:host.capital_province } + desc = activity_chariot_race_province_capital + } + # + / plus good + triggered_desc = { + trigger = { has_building_or_higher = kaifeng_palace_01 } + desc = activity_imperial_examination_province_kaifeng_palace_desc + } + triggered_desc = { + trigger = { has_building_or_higher = examination_hall_01 } + desc = activity_imperial_examination_province_examination_hall_desc + } + } + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 100 + + #Special flags + if = { + limit = { + is_ai = yes + has_character_flag = examinations_ai_override + } + add = 10000 + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 0 + empire = 0 + hegemony = 12 + } + + ai_will_select_province = { + # Base + add = { + value = 5 + desc = "base" + } + # Buildings + if = { + limit = { + has_building_or_higher = kaifeng_palace_01 + } + add = { + value = 100 + desc = activity_imperial_examination_province_kaifeng_palace_desc + } + } + if = { + limit = { + has_building_or_higher = examination_hall_01 + } + add = { + value = 5 + desc = activity_imperial_examination_province_examination_hall_desc + } + } + } + + ################### + # PARAMETERS + ################### + + is_single_location = yes + + cooldown = { years = 5 } + + max_province_icons = 3 + + max_route_deviation_mult = 3.0 + + cost = { + treasury = { + if = { + limit = { is_ai = no } + add = { + add = { + value = imperial_examination_actual_cost + desc = imperial_examination_base_cost + } + # Kaifeng cost bonus + if = { + limit = { + root.capital_province = { has_building_or_higher = kaifeng_palace_01 } + } + multiply = { + value = { + value = 1 + subtract = kaifeng_examination_cost_value + } + desc = kaifeng_palace_name_desc + } + } + if = { + limit = { + scope:province ?= { has_building_or_higher = examination_hall_01 } + } + add = { + value = 0 + add = { + value = imperial_examination_base_cost + add = { + value = imperial_examination_base_cost + multiply = activity_cost_scale_by_era + subtract = imperial_examination_base_cost + } + } + multiply = imperial_examination_cost_discount_max_value + desc = imperial_examination_cost_discount_examination_hall + } + } + } + } + else = { value = 0 } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + + # Used to show a rough minimum or expected cost at all to plan this + ui_predicted_cost = { + #Treasury for China + treasury = { + if = { + limit = { + is_ai = yes + has_character_flag = examinations_ai_override + } + value = 0 + } + else = { + add = imperial_examination_predicted_cost + add = imperial_examination_breadth_restricted_value + } + } + } + + conclusion_description = { + desc = imperial_examination_conclusion.intro + desc = { + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_extreme_grade_trigger = yes } + } + desc = imperial_examination_conclusion.intro.passing_grade.extreme + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_high_grade_trigger = yes } + } + desc = imperial_examination_conclusion.intro.passing_grade.high + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_mediocre_grade_trigger = yes } + } + desc = imperial_examination_conclusion.intro.passing_grade.mediocre + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_low_grade_trigger = yes } + } + desc = imperial_examination_conclusion.intro.passing_grade.low + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_imperial_exams_trigger = yes } + } + desc = imperial_examination_conclusion.intro.breadth.imperial + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_grand_exams_trigger = yes } + } + desc = imperial_examination_conclusion.intro.breadth.grand + } + triggered_desc = { + trigger = { + this = scope:host + scope:activity = { activity_has_palace_exams_trigger = yes } + } + desc = imperial_examination_conclusion.intro.breadth.palace + } + triggered_desc = { + trigger = { this = scope:host } + desc = imperial_examination_conclusion.general + } + triggered_desc = { + trigger = { + has_character_flag = exam_taker + OR = { + has_variable = been_caught_cheating_longterm + is_in_guest_subset = { name = failees } + } + } + desc = imperial_examination_conclusion.entrant_failee + } + triggered_desc = { + trigger = { + has_character_flag = exam_taker + is_in_guest_subset = { name = entrants } + } + desc = imperial_examination_conclusion.entrant_passed + } + triggered_desc = { + trigger = { + has_character_flag = exam_taker + is_in_guest_subset = { name = palace_entrants } + } + desc = imperial_examination_conclusion.entrant_passed_palace + } + } + } + + ################### + # OPTIONS + ################### + + options = { + #Emperor gets to choose skill focus option, making characters with these skills more successful in passing exam rounds + special_type = { + imperial_examination_focus_learning = { + default = yes + ai_will_do = { + value = 100 + # Traits + if = { + limit = { + has_trait = greedy + } + add = 25 + desc = greedy + } + if = { + limit = { + has_trait = lazy + } + add = 15 + desc = lazy + } + if = { + limit = { + OR = { + has_trait = scholarly_court_1 + has_trait = scholarly_court_2 + } + } + add = { + value = 25 + desc = trait_scholarly_court_2 + } + } + # Lifestyle + if = { + limit = { + OR = { + has_focus = learning_scholarship_focus + has_focus = learning_theology_focus + } + } + add = { + value = 20 + desc = focus + } + } + if = { + limit = { has_trait = education_learning } + add = { + value = 50 + desc = education_learning + } + } + if = { + limit = { has_trait = theologian } + add = { + value = 50 + desc = theologian + } + } + if = { + limit = { has_trait = scholar } + add = { + value = 50 + desc = scholar + } + } + } + } + imperial_examination_focus_martial = { + is_valid = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + cost = { + #Treasury for China + treasury = { + if = { + limit = { is_ai = no } + add = { + value = imperial_examination_alternate_focus_value + desc = imperial_examination_focus_martial + } + } + else = { value = 0 } + } + } + ai_will_do = { + value = 100 + # Lifestyle + if = { + limit = { has_focus = martial_strategy_focus } + add = { + value = 20 + desc = focus + } + } + if = { + limit = { has_trait = strategist } + add = { + value = 10 + desc = strategist + } + } + if = { + limit = { has_trait = overseer } + add = { + value = 10 + desc = overseer + } + } + # Education + if = { + limit = { has_trait = education_martial } + add = { + value = 20 + desc = education_martial + } + } + # Personality + if = { + limit = { + ai_has_warlike_personality = yes + } + add = { + value = 25 + desc = "Warlike" + } + } + } + } + imperial_examination_focus_stewardship = { + is_valid = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + cost = { + #Treasury for China + treasury = { + if = { + limit = { is_ai = no } + add = { + value = imperial_examination_alternate_focus_value + desc = imperial_examination_focus_stewardship + } + } + else = { value = 0 } + } + } + ai_will_do = { + value = 100 + # Lifestyle + if = { + limit = { has_focus = stewardship_domain_focus } + add = { + value = 20 + desc = focus + } + } + if = { + limit = { has_trait = architect } + add = { + value = 10 + desc = architect + } + } + if = { + limit = { has_trait = administrator } + add = { + value = 10 + desc = administrator + } + } + if = { + limit = { has_trait = education_stewardship } + add = { + value = 20 + desc = education_stewardship + } + } + } + } + } + + #Choose the amount of entrants you want + #Choose to add additional entrants - each size adding a multiplier to final legitimacy and rewards, but also increasing cost. + imperial_examination_breadth = { + #50 guests + imperial_examination_breadth_exclusive = { + + cost = { + #Treasury for China + treasury = { + if = { + limit = { is_ai = no } + add = imperial_examination_breadth_exclusive_value + } + else = { value = 0 } + } + } + ai_will_do = { + value = 100 + # Personality + if = { # This is the cheap option + limit = { has_trait = greedy } + add = { + value = 20 + desc = greedy + } + } + # This is the elitist option + add = { + value = ai_honor + multiply = -0.25 + desc = "ai_honor" + } + add = { + value = ai_vengefulness + multiply = 0.15 + desc = "ai_vengefulness" + } + add = { + value = ai_boldness + multiply = 0.15 + desc = "ai_boldness" + } + if = { # Does not like to socialize + limit = { has_trait = shy } + add = { + value = -15 + desc = shy + } + } + if = { # Really does not like socializing + limit = { has_trait = reclusive } + add = { + value = -25 + desc = reclusive + } + } + } + } + #100 guests + imperial_examination_breadth_restricted = { + default = yes + + cost = { + #Treasury for China + treasury = { + if = { + limit = { is_ai = no } + add = imperial_examination_breadth_restricted_value + } + else = { value = 0 } + } + } + ai_will_do = { + value = 100 + if = { # Lazy is likely to go for default option + limit = { has_trait = lazy } + add = { + value = 20 + desc = lazy + } + } + add = { # In many ways, this is the most safe option + value = ai_rationality + multiply = 0.25 + desc = "ai_rationality" + } + } + } + #200 guests + imperial_examination_breadth_open = { + + cost = { + #Treasury for China + treasury = { + if = { + limit = { is_ai = no } + add = imperial_examination_breadth_open_value + } + else = { value = 0 } + } + } + ai_will_do = { + value = 150 + add = { # Wants to socialize and be seen by as many people as possible + value = ai_sociability + multiply = 0.25 + desc = "ai_sociability" + } + if = { # Is a good confucian + limit = { has_trait = compassionate } + add = { + value = 10 + desc = compassionate + } + } + if = { # Is a good confucian + limit = { has_trait = just } + add = { + value = 10 + desc = just + } + } + if = { # Is a good confucian + limit = { has_trait = honest } + add = { + value = 10 + desc = honest + } + } + } + } + } + imperial_examination_passing_grade = { + imperial_examination_passing_grade_low = { + #Don't really need a cost, you pay in decreased legitimacy reward + ai_will_do = { + value = 100 + add = { # The more governors the better! + value = ai_sociability + multiply = 0.25 + desc = "ai_sociability" + } + if = { # Lazy does not wish to bother with difficult tests + limit = { has_trait = lazy } + add = { + value = 20 + desc = lazy + } + } + if = { # Who has the patience to come up with difficult tests?! + limit = { has_trait = impatient } + add = { + value = 20 + desc = impatient + } + } + if = { + limit = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_martial_1 + has_trait = education_stewardship_1 + has_trait = education_intrigue_1 + has_trait = education_learning_1 + } + } + add = { + value = 50 + desc = "low education" + } + } + } + } + imperial_examination_passing_grade_mediocre = { + #Don't really need a cost, you pay in decreased legitimacy reward + ai_will_do = { + value = 100 + if = { # Let's be chill about this + limit = { has_trait = content } + add = { + value = 20 + desc = content + } + } + if = { # I really don't expect _that_ much + limit = { has_trait = humble } + add = { + value = 10 + desc = humble + } + } + if = { # I don't want to cause too much fuss + limit = { has_trait = craven } + add = { + value = 10 + desc = craven + } + } + if = { # I can't really make up my mind + limit = { has_trait = fickle } + add = { + value = 10 + desc = fickle + } + } + if = { + limit = { + OR = { + has_trait = education_diplomacy_2 + has_trait = education_martial_2 + has_trait = education_stewardship_2 + has_trait = education_intrigue_2 + has_trait = education_learning_2 + } + } + add = { + value = 50 + desc = "mediocre education" + } + } + } + } + imperial_examination_passing_grade_high = { + default = yes + #Don't really need a cost, you pay in decreased legitimacy reward + ai_will_do = { + value = 25 + } + } + imperial_examination_passing_grade_extreme = { + # High Legitimacy reward at cost of fewer prospective governors + ai_will_do = { + value = 25 + } + } + } + } + special_option_category = special_type + + ################### + # PHASES + ################### + + phases = { + #Assembly Phase + imperial_examination_phase_assembly = { + order = 1 + is_predefined = yes + + on_phase_active = { + if = { + limit = { this = scope:host } + #Add all the examiners to guest subsets so they don't become Entrants + imperial_examination_set_up_examiners_effect = { HOST = scope:host } + imperial_examination_gather_examiners_effect = yes + #Add all the Entrants to guest subsets so we can keep track of them + imperial_examination_gather_entrants_effect = yes + #Add all landed characters as guests + imperial_examination_gather_guests_effect = yes + #Let's gooo! + trigger_event = { on_action = imperial_examination_opening_on_action } + } + scope:activity = { + progress_activity_phase_after = { days = imperial_examination_assembly_days } + #Set up the scoreboard + metropolitan_examination_scoreboard_setup_effect = yes + } + } + + on_weekly_pulse = { + trigger_event = { on_action = imperial_examination_pulse } + } + } + + #Preparation Phase + imperial_examination_phase_preparation = { + order = 2 + is_predefined = yes + + on_enter_phase = { + scope:activity = { + progress_activity_phase_after = { days = 1 } + } + } + + on_phase_active = { + scope:activity = { + progress_activity_phase_after = { days = imperial_examination_prep_days } + } + } + + on_weekly_pulse = { + trigger_event = { on_action = imperial_examination_pulse } + } + } + + #Metropolitan Examination Phase + imperial_examination_phase_examination = { + order = 3 + is_predefined = yes + + on_enter_phase = { + scope:activity = { + progress_activity_phase_after = { days = 1 } + every_attending_character = { + limit = { + is_ai = no + is_in_guest_subset = { name = entrants } + NOT = { has_activity_intent = imperial_exam_taker_intent } + } + save_temporary_scope_as = temp_character + scope:activity = { + remove_from_guest_subset = { + name = entrants + target = scope:temp_character + } + add_to_guest_subset = { + name = guests + target = scope:temp_character + } + } + } + } + } + + on_phase_active = { + #Intro event for the phase + if = { + limit = { this = scope:host } + trigger_event = imperial_examination.3000 + } + else_if = { + limit = { has_activity_intent = imperial_exam_support_entrants_intent } + trigger_event = imperial_examination.3005 + } + else_if = { + limit = { has_activity_intent = exam_assist_exam_intent } + trigger_event = imperial_examination.3006 + } + else_if = { + limit = { has_activity_intent = imperial_exam_taker_intent } + trigger_event = imperial_examination.3007 + } + # Progress activity + scope:activity = { + progress_activity_phase_after = { weeks = 6 } + } + } + + on_weekly_pulse = { + if = { # host + limit = { + this = scope:host + } + trigger_event = { on_action = imperial_examination_exam_host_events } + } + else_if = { + limit = { + is_in_guest_subset = { name = entrants } + } + trigger_event = { on_action = imperial_examination_exam_entrant_events } + } + } + + on_end = { + #Run once + if = { + limit = { this = scope:host } + imperial_examination_determine_exam_outcome_effect = yes + } + if = { + #Entrants + limit = { + is_in_guest_subset = { name = entrants } + } + #Get rid of failees + imperial_examination_prune_failees_effect = yes + # If not having taken the Provincial Exam and then attempting the Metropolitan, we are a bit harsh. + if = { + limit = { + is_ai = no + var:imperial_examination_score < 50 + } + save_temporary_scope_as = temp_character + scope:activity = { + remove_from_guest_subset = { + name = entrants + target = scope:temp_character + } + add_to_guest_subset = { + name = failees + target = scope:temp_character + } + } + } + #Clear the scoreboard + if = { + limit = { is_in_guest_subset = { name = scoreboard } } + save_temporary_scope_as = temp_character + scope:activity = { + remove_from_guest_subset = { + name = scoreboard + target = scope:temp_character + } + } + } + } + #Gather the top 10 Entrants into the Palace Entrants + if = { + limit = { this = scope:host } + scope:activity = { + ordered_guest_subset = { + name = entrants + order_by = imperial_examination_score_value + max = metropolitan_exam_final_entrants + check_range_bounds = no + save_temporary_scope_as = temp_char + scope:activity = { + remove_from_guest_subset = { + name = entrants + target = scope:temp_char + } + add_to_guest_subset = { + name = palace_entrants + target = scope:temp_char + } + } + } + } + } + #Clean up variables + imperial_examination_clean_up_phase_variables_effect = yes + } + } + + #Palace Exam + imperial_examination_phase_palace_examination = { + order = 4 + is_predefined = yes + + on_enter_phase = { + # Let us trigger some enter phase events + if = { + limit = { this = scope:host } + trigger_event = imperial_examination.9000 + scope:activity = { + # Save this scope so we trigger the first place entrant event correctly (handled via host event). + ordered_guest_subset = { + name = palace_entrants + order_by = imperial_examination_score_value + save_scope_as = highest_score_entrant + } + set_variable = { + name = highest_score_entrant + value = scope:highest_score_entrant + } + } + } + + if = { + # Event for those who did not make the Palace Exam + limit = { + OR = { + is_in_guest_subset = { name = entrants } + is_in_guest_subset = { name = failees } + } + } + trigger_event = imperial_examination.8010 + } + else_if = { + # Event for those who made the Palace Exam (excluding the first place entrant) + limit = { + is_ai = no + this != scope:activity.var:highest_score_entrant + is_in_guest_subset = { name = palace_entrants } + } + trigger_event = imperial_examination.8000 + } + #Let us enter the Prep event on_action loop + trigger_event = { + on_action = palace_examination_prep_events + days = 9 + } + trigger_event = { + on_action = palace_examination_prep_events + days = 17 + } + trigger_event = { + on_action = palace_examination_prep_events + days = 24 + } + scope:activity = { + progress_activity_phase_after = { days = imperial_examination_prep_days } + #Refresh the scoreboard + palace_examination_scoreboard_setup_effect = yes + } + } + + on_phase_active = { + #Reflect on the exam starting + if = { + limit = { this = scope:host } + trigger_event = imperial_examination.3000 + } + else_if = { + limit = { + is_in_guest_subset = { name = palace_entrants } + has_activity_intent = imperial_exam_taker_intent + } + trigger_event = { on_action = imperial_examination_exam_entrant_events } + } + scope:activity = { + progress_activity_phase_after = { days = 14 } + } + } + + on_weekly_pulse = { + + } + + on_end = { + if = { + #Entrant + limit = { + is_in_guest_subset = { name = palace_entrants } + } + #Clear the scoreboard + if = { + limit = { is_in_guest_subset = { name = scoreboard } } + save_temporary_scope_as = temp_character + scope:activity = { + remove_from_guest_subset = { + name = scoreboard + target = scope:temp_character + } + } + } + } + scope:activity = { + set_variable = { + name = first_place_entrant_score + value = 0 + } + #Record the score of the top three entrants + ordered_guest_subset = { + name = palace_entrants + order_by = imperial_examination_score_value + position = 0 + save_temporary_scope_as = temp_first_char + scope:activity = { + set_variable = { + name = first_place_entrant + value = scope:temp_first_char + } + #And the score of the first place entrant + change_variable = { + name = first_place_entrant_score + add = scope:temp_first_char.var:imperial_examination_score + } + if = { + limit = { exists = var:first_place_entrant_score } + #Error suppressant + } + } + } + ordered_guest_subset = { + name = palace_entrants + order_by = imperial_examination_score_value + position = 1 + save_temporary_scope_as = temp_second_char + scope:activity = { + set_variable = { + name = second_place_entrant + value = scope:temp_second_char + } + } + } + ordered_guest_subset = { + name = palace_entrants + order_by = imperial_examination_score_value + position = 2 + save_temporary_scope_as = temp_third_char + scope:activity = { + set_variable = { + name = third_place_entrant + value = scope:temp_third_char + } + } + } + #Describe the score of the first place entrant + if = { + limit = { has_perfect_score_trigger = { SCORE_VAR = first_place_entrant_score } } + set_variable = has_perfect_score + } + if = { + limit = { has_good_score_trigger = { SCORE_VAR = first_place_entrant_score } } + set_variable = has_great_score + } + if = { + limit = { has_decent_score_trigger = { SCORE_VAR = first_place_entrant_score } } + set_variable = has_decent_score + } + if = { + limit = { has_questionable_score_trigger = { SCORE_VAR = first_place_entrant_score } } + set_variable = has_questionable_score + } + #Record the final amount of failees + set_variable = { + name = num_final_failees + value = 0 + } + } + if = { + limit = { + is_in_guest_subset = { name = failees } + } + scope:activity = { + change_variable = { + name = num_final_failees + add = 1 + } + } + } + #Emperor + if = { + limit = { this = scope:host } + imperial_examination_disburse_activity_host_rewards = yes + } + #Examiner/s + if = { + limit = { + this = { + is_in_guest_subset = { name = imperial_examiners } + OR = { + is_vassal_of = scope:host + is_courtier_of = scope:host + } + } + } + imperial_examination_disburse_activity_examiner_rewards = yes + } + #Entrants & Failees + if = { + limit = { + OR = { + is_in_guest_subset = { name = palace_entrants } + is_in_guest_subset = { name = entrants } + is_in_guest_subset = { name = failees } + } + } + save_temporary_scope_as = entrant + # This effect also handles close family member messaging (excluding the house head) + if = { + limit = { is_ai = no } + exam_grab_entrant_position_effect = yes + } + # This effect also handles close family member messaging (excluding the house head) + imperial_examination_disburse_activity_entrant_rewards = yes + every_parent = { + limit = { + is_ai = no + scope:entrant.court_owner != this + } + add_to_list = exam_house_member + scope:entrant = { + add_to_list = parent_relevant_entrants + } + } + house.house_head ?= { + if = { + limit = { + is_ai = no + NOT = { is_in_list = exam_house_member } + scope:entrant.court_owner != this + } + add_to_list = exam_house_member + scope:entrant = { + add_to_list = parent_relevant_entrants + } + } + if = { + limit = { + list_size = { + name = exam_house_member + value = 0 + } + } + house.house_head ?= { + if = { + limit = { + is_ai = no + NOT = { is_in_list = exam_house_member } + scope:entrant.court_owner != this + } + add_to_list = exam_house_member + scope:entrant = { + add_to_list = parent_relevant_entrants + } + } + } + } + } + } + every_in_list = { + list = exam_house_member + limit = { + NOR = { + involved_activity ?= scope:activity + has_character_flag = triggered_family_followup + } + } + add_character_flag = triggered_family_followup + trigger_event = imperial_examination.7100 + } + # Save scopes for characters involved in the Capital exam, to use in conclusion descs. + if = { + limit = { has_activity_intent = imperial_exam_support_entrants_intent } + scope:activity = { + if = { + limit = { + any_attending_character = { + has_activity_intent = imperial_exam_taker_intent + OR = { + is_close_or_extended_family_of = root + has_relation_disciple = root + this = root.primary_spouse + } + court_owner = root + } + } + every_attending_character = { + limit = { + has_activity_intent = imperial_exam_taker_intent + OR = { + is_close_or_extended_family_of = root + has_relation_disciple = root + this = root.primary_spouse + } + court_owner = root + } + add_to_list = parent_relevant_entrants + } + } + } + add_character_flag = { + flag = family_supporter + years = 1 + } + } + if = { + limit = { has_activity_intent = imperial_exam_taker_intent } + add_character_flag = { + flag = exam_taker + years = 1 + } + } + # Trigger conclusion event + if = { + limit = { has_character_flag = family_supporter } + trigger_event = imperial_examination.7003 + } + else = { trigger_event = imperial_examination.7000 } + } + } + } + + ################### + # GUEST HANDLING + ################### + + open_invite = yes + + max_guests = { + value = 1 + if = { + limit = { + scope:imperial_examination_breadth ?= flag:imperial_examination_breadth_exclusive + } + add = exclusive_exam_guests_amount + max = exclusive_exam_guests_amount + } + else_if = { + limit = { + scope:imperial_examination_breadth ?= flag:imperial_examination_breadth_restricted + } + add = restricted_exam_guests_amount + max = restricted_exam_guests_amount + } + else_if = { + limit = { + scope:imperial_examination_breadth ?= flag:imperial_examination_breadth_open + } + add = open_exam_guests_amount + max = open_exam_guests_amount + } + min = 1 + } + + can_be_activity_guest = { + trigger_if = { + limit = { + is_ruler = no + host ?= { + is_ai = yes + is_ruler = yes + } + } + trigger_if = { + limit = { + scope:host.involved_activity ?= { + any_attending_character = { + count >= { + if = { + limit = { + scope:host.involved_activity = { + has_activity_option = { + category = imperial_examination_breadth + option = imperial_examination_breadth_exclusive + } + } + } + add = exclusive_exam_guests_amount + max = exclusive_exam_guests_amount + } + else_if = { + limit = { + scope:host.involved_activity = { + has_activity_option = { + category = imperial_examination_breadth + option = imperial_examination_breadth_restricted + } + } + } + add = restricted_exam_guests_amount + max = restricted_exam_guests_amount + } + else_if = { + limit = { + scope:host.involved_activity = { + has_activity_option = { + category = imperial_examination_breadth + option = imperial_examination_breadth_open + } + } + } + add = open_exam_guests_amount + max = open_exam_guests_amount + } + multiply = 0.8 + } + } + } + } + always = no + } + } + OR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_landless_adventurer + } + #Just... roll with it. + in_diplomatic_range = scope:host + is_adult = yes + # To avoid monks flooding the activity + NOR = { + has_trait = devoted + has_trait = eunuch + } + # To avoid mercenaries and holy orders to join + trigger_if = { + limit = { + exists = primary_title + } + primary_title = { + is_mercenary_company = no + is_holy_order = no + } + } + # Must be the right gender or a player + trigger_if = { + limit = { + scope:host = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + OR = { + is_male = yes + is_ai = no + } + } + trigger_if = { + limit = { + scope:host = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + OR = { + is_female = yes + is_ai = no + } + } + } + + host_intents = { + intents = { legitimacy_intent exam_recruit_courtiers_intent } + default = exam_recruit_courtiers_intent + } + + guest_intents = { + intents = { imperial_exam_taker_intent imperial_exam_support_entrants_intent exam_assist_exam_intent } + + default = exam_assist_exam_intent + } + + guest_join_chance = { + base = 5 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + activity_guest_health_ai_accept_modifier = yes + #Failee checks + imperial_examination_activity_failee_modifier = yes + #Forced to retake exam checks + imperial_examination_activity_forced_back_modifier = yes + #Is the Minister of Rites + imperial_examination_activity_rites_modifier = yes + modifier = { + any_player = { + is_close_or_extended_family_of = prev + has_character_flag = command_to_attend_flag + top_liege = prev.top_liege + } + NOR = { + # You should get as many shots at the Palace Exam as you want. + has_character_flag = passed_palace_exam + has_trait = devoted + has_trait = eunuch + } + tgp_gender_can_be_exam_entrant_trigger = yes + is_available = yes + is_adult = yes + + add = 5000 + desc = ACTIVITY_GUEST_CLOSE_FAMILY_REASON + } + } + + guest_subsets = { + palace_entrants + entrants + imperial_examiners + scoreboard + failees + guests + } + + wait_time_before_start = { + # Fixed duration, because it is an open activity + months = imperial_examination_wait_time_before_start_months + } + + max_guest_arrival_delay_time = { months = 2 } + + guest_invite_rules = { + #These are not weighed differenty because the guest invite rules themselves handle the guest distribution. + defaults = { + 1 = activity_invite_rule_player_family_opt_in_imperial_exam + 1 = activity_invite_rule_imperial_exam_entrants + 1 = activity_invite_rule_imperial_exam_guests + } + } + + travel_entourage_selection = { + weight = { + value = standard_travel_entourage_additions + if = { + limit = { + is_landed = no + is_faith_dominant_gender = yes + NOT = { has_character_flag = passed_palace_exam } + court_owner = scope:owner + is_available = yes + is_ai = yes + is_adult = yes + location = scope:owner.location + } + add = 50 + } + } + + max = 15 + ai_max = 7 + invite_rule_order = 1 + } + + ################### + # ON ACTIONS + ################### + + pulse_actions = { + entries = { + apa_boasting_calligraphy + apa_impressive_shot + apa_overcome_with_stress + apa_brought_huangdi_gift + apa_friendly_discussions + apa_high_tempers + apa_impressed_examiner + apa_entrant_disagreement + apa_burning_midnight_oil + apa_found_disciple + apa_fruitful_debate + apa_confucian_fervor + apa_floating_poetry + apa_studied_confucian_classics + } + chance_of_no_event = 5 + } + + on_start = { + scope:host = { + #Dynastic Cycle is pleased! + if = { + limit = { this = title:h_china.holder } + title:h_china = { + set_variable = { + name = years_since_imperial_examination + value = 0 + } + } + } + if = { + limit = { is_ai = yes} + remove_treasury = { + value = { + value = imperial_examination_actual_cost + # Kaifeng cost bonus + if = { + limit = { + root.capital_province = { has_building_or_higher = kaifeng_palace_01 } + } + multiply = { + value = { + value = 1 + subtract = kaifeng_examination_cost_value + } + desc = kaifeng_palace_name_desc + } + } + if = { + limit = { + scope:province ?= { has_building_or_higher = examination_hall_01 } + } + add = { + value = 0 + add = { + value = imperial_examination_base_cost + add = { + value = imperial_examination_base_cost + multiply = activity_cost_scale_by_era + subtract = imperial_examination_base_cost + } + } + multiply = imperial_examination_cost_discount_max_value + desc = imperial_examination_cost_discount_examination_hall + } + } + if = { + limit = { + scope:activity = { + NOT = { + has_activity_option = { + category = special_type + option = imperial_examination_focus_learning + } + } + } + } + add = imperial_examination_alternate_focus_value + } + if = { + limit = { + scope:activity = { + has_activity_option = { + category = imperial_examination_breadth + option = imperial_examination_breadth_exclusive + } + } + } + add = imperial_examination_breadth_exclusive_value + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = imperial_examination_breadth + option = imperial_examination_breadth_restricted + } + } + } + add = imperial_examination_breadth_restricted_value + } + else = { add = imperial_examination_breadth_open_value } + # AI gets it for free if a Movement demanded it, to ensure they do it. + if = { + limit = { has_character_flag = examinations_ai_override } + multiply = 0 + } + } + } + if = { + limit = { + has_character_flag = examinations_ai_override + } + remove_character_flag = examinations_ai_override + } + } + } + + # Make sure that Examinations are held roughly every 5 years in relevant areas + if = { + limit = { + scope:host.location = { geographical_region = world_asia_china } + NOT = { + exists = global_var:examination_world_asia_china_motivation + } + } + set_global_variable = { + name = examination_world_asia_china_motivation + value = yes + years = 5 + } + } + every_player = { + limit = { + is_landed = no + NOT = { has_variable = recently_invited_to_exam } + should_notify_can_join_activity = scope:activity.activity_type + NOT = { has_character_flag = passed_palace_exam } + can_join_activity = scope:activity + can_arrive_in_time_to_activity_minimum = scope:activity + } + set_variable = { + name = recently_invited_to_exam + years = 1 + } + scope:activity = { open_view_data = { view = activity_list_detail_invite_window player = prev } } + } + } + + on_enter_travel_state = { + # Set an appointment timeout, to prevent you from getting a new appointment during the examinations + if = { + limit = { is_pool_character = no } + set_appointment_timeout = { + months = 6 + desc = appointment_timeout_desc_examinations + } + } + } + + on_enter_passive_state = { # Character scope + #Add any stray Entrants who are in travel entourage of guests + imperial_examination_gather_stray_entrants_effect = yes + if = { + limit = { + is_ai = no + NOR = { + has_character_flag = passed_palace_exam + has_character_flag = set_activity_intent + } + } + set_activity_intent = imperial_exam_taker_intent + add_character_flag = set_activity_intent + } + if = { + limit = { + has_activity_intent = imperial_exam_taker_intent + is_pool_character = no + } + # Set an appointment timeout, to prevent you from getting a new appointment during the examinations + set_appointment_timeout = { + years = 1 + desc = appointment_timeout_desc_examinations + } + } + } + + on_passive_state_pulse = { + imperial_examination_gather_stray_entrants_effect = yes + } + + on_enter_active_state = { # Character scope + } + + on_active_state_pulse = { # Character scope + } + + on_complete = { # Character scope + scope:activity = { + every_attending_character = { + if = { # If we still have a short duration remaining on our appointment timeout, clear it + limit = { + appointment_timeout_days > 0 + appointment_timeout_days < 365 + } + clear_appointment_timeout = yes + } + } + } + } + + ################### + # GRAPHICS + ################### + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + + background = { + texture = "gfx/interface/illustrations/event_scenes/tgp_examination_room.dds" + environment = "environment_tgp_examination_room" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_examination_room" + } + + ### Plugin widgets + activity_window_widgets = { + imperial_examination_scoreboard_widget = "window_activity_contestants_right_bar_container" + imperial_examination_progress_widget = "activity_plugin_widgets_summary" + } + + window_characters = { + player_entrant_traveling = { + camera = camera_activity_horse + + effect = { + scope:player ?= { + if = { + limit = { + NOR = { + this = scope:activity.activity_host + location = scope:activity.activity_location + } + } + add_to_list = characters + } + } + } + scripted_animation = { + animation = jockey_walk + } + } + player_entrant = { + camera = camera_event_center + + effect = { + scope:player ?= { + if = { + limit = { + this != scope:activity.activity_host + location = scope:activity.activity_location + has_activity_intent = imperial_exam_taker_intent + } + add_to_list = characters + } + } + + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { has_variable = been_caught_cheating_longterm } + } + animation = { stress } + } + animation = thinking + } + } + host = { + camera = camera_event_center + + effect = { + if = { + limit = { scope:player = scope:activity.activity_host } + } + scope:host ?= { add_to_list = characters } + } + scripted_animation = { + animation = pondering + } + } + + minister_of_rites = { + camera = camera_event_very_left_activity + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + any_attending_character = { + location = scope:activity.activity_location + has_title = title:e_minister_of_rites + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + has_title = title:e_minister_of_rites + } + add_to_list = characters + } + } + } + scripted_animation = { + animation = chancellor + } + } + + entrant = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + is_in_guest_subset = { name = entrants } + has_activity_intent = imperial_exam_taker_intent + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { + NOR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + } + } + animation = { worry admiration beg stress holding_scrolls } + } + #Fallback + animation = chancellor + } + } + + guest = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + is_in_guest_subset = { name = guests } + OR = { + has_activity_intent = imperial_exam_support_entrants_intent + has_activity_intent = exam_assist_exam_intent + } + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character = { + OR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + } + } + animation = { happiness storyteller interested_left } + } + animation = flirtation_left + } + } + + examiner = { + camera = camera_event_very_right_activity + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + is_in_guest_subset = { name = imperial_examiners } + } + add_to_list = characters + } + } + } + scripted_animation = { + animation = happy_teacher + } + } + } +} diff --git a/common/activities/activity_types/inspection.txt b/common/activities/activity_types/inspection.txt new file mode 100644 index 00000000..3f3965b5 --- /dev/null +++ b/common/activities/activity_types/inspection.txt @@ -0,0 +1,1244 @@ +activity_survey = { + is_shown = { + OR = { + has_bp3_dlc_trigger = yes + has_tgp_dlc_trigger = yes + has_ep3_dlc_trigger = yes + } + highest_held_title_tier >= tier_county + is_adult = yes + government_has_flag = government_is_settled + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + OR = { + has_perk = local_inspection_perk + government_allows = administrative + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + } + trigger_if = { # Small AI's pace themselves more + limit = { + is_ai = yes + } + sub_realm_size > 1 + } + trigger_else = { + sub_realm_size >= 1 + } + } + + can_always_plan = no + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_survey } + #Trigger if chain for good DLC dependent tooltips: + #If I lack both DLC this never shows. + trigger_if = { #I have BP3 only - I need the perk + limit = { + has_bp3_dlc_trigger = yes + NOR = { + has_ep3_dlc_trigger = yes + has_tgp_dlc_trigger = yes + } + } + has_perk = local_inspection_perk + } + trigger_else_if = { #I have both TGP/EP3 and BP3 + limit = { + OR = { + has_ep3_dlc_trigger = yes + has_tgp_dlc_trigger = yes + } + has_bp3_dlc_trigger = yes + } + custom_tooltip = { + text = neither_local_inspection_perk_nor_merit + OR = { + has_perk = local_inspection_perk + government_allows = administrative + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + } + } + } + trigger_else_if = { #I have only TGP/EP3 - I am required to have a bureaucratic government form (i.e. admin based). + limit = { + OR = { + has_ep3_dlc_trigger = yes + has_tgp_dlc_trigger = yes + } + has_bp3_dlc_trigger = no + } + OR = { + government_allows = administrative + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + } + } + trigger_else = { + always = no + } + is_available = yes + is_landed = yes + age >= 16 + } + + is_valid = { + scope:host = { + is_alive = yes + is_imprisoned = no + is_incapable = no + } + } + + is_location_valid = { + trigger_if = { + limit = { + scope:host = { + is_governor = no + } + } + custom_tooltip = { + text = survey_activity_not_capital + this != scope:host.capital_province + } + } + trigger_if = { + limit = { + scope:host = { has_variable_list = recently_visited_inspection } + } + custom_tooltip = { + text = survey_activity_on_cooldown + scope:host = { + NOT = { + is_target_in_variable_list = { + name = recently_visited_inspection + target = root + } + } + } + } + } + trigger_if = { + limit = { + scope:host = { is_ai = yes } + } + county.holder = scope:host + } + is_county_capital = yes + } + + on_start = { + set_variable = { + name = inspection_success_chance + value = inspection_success_chance_value + } + scope:host = { + switch = { + trigger = has_variable + inspection_activity_border_focus = { remove_variable = inspection_activity_border_focus } + inspection_activity_bureaucracy_focus = { remove_variable = inspection_activity_bureaucracy_focus } + inspection_activity_domain_focus = { remove_variable = inspection_activity_domain_focus } + } + switch = { + trigger = has_variable + inspection_activity_border_vassal_focus = { remove_variable = inspection_activity_border_vassal_focus } + inspection_activity_border_claim_focus = { remove_variable = inspection_activity_border_claim_focus } + inspection_activity_bureaucracy_tax_focus = { remove_variable = inspection_activity_bureaucracy_tax_focus } + inspection_activity_bureaucracy_development_focus = { remove_variable = inspection_activity_bureaucracy_development_focus } + inspection_activity_bureaucracy_control_focus = { remove_variable = inspection_activity_bureaucracy_control_focus } + inspection_activity_domain_levy_focus = { remove_variable = inspection_activity_domain_levy_focus } + inspection_activity_domain_opinion_focus = { remove_variable = inspection_activity_domain_opinion_focus } + inspection_activity_domain_popular_focus = { remove_variable = inspection_activity_domain_popular_focus } + } + add_to_variable_list = { + name = recently_visited_inspection + target = scope:activity.activity_location + years = 5 + } + } + scope:host = { + if = { + limit = { + has_character_flag = free_inspection + } + remove_character_flag = free_inspection + } + } + } + + on_enter_travel_state = { + + } + + on_invalidated = { + invalidation_imprisoned_effect = yes + invalidation_incapable_effect = yes + invalidation_unlanded_effect = yes + } + + on_complete = { + + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + if = { + limit = { + this = scope:host + has_perk = personal_touch_perk + } + location.county = { + local_adjudicate_effect = yes + } + } + } + + on_host_death = { + invalidation_host_death_effect = yes + } + + province_filter = realm + ai_province_filter = realm + + max_province_icons = 3 + allow_zero_guest_invites = yes + open_invite = no + + province_description = { + desc = activity_survey_province_desc + first_valid = { + triggered_desc = { + trigger = { + county = { + any_neighboring_county = { + exists = holder + holder.top_liege != root.county.holder.top_liege + } + } + } + desc = survey_border_county + } + triggered_desc = { + trigger = { + scope:host = { top_liege != this } + county = { + any_neighboring_county = { + exists = holder + holder.top_liege = root.county.holder.top_liege + NOT = { + holder = { + OR = { + is_vassal_of = scope:host + this = scope:host + } + } + } + } + } + } + desc = survey_bordering_other_vassals_county + } + } + first_valid = { + triggered_desc = { + trigger = { + county.county_control <= 25 + } + desc = survey_very_low_county_control + } + triggered_desc = { + trigger = { + county.county_control <= 50 + } + desc = survey_low_county_control + } + triggered_desc = { + trigger = { + county.county_control <= 75 + } + desc = survey_medium_county_control + } + } + } + + province_score = { + add = survey_province_reference_value + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + NOR = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + has_character_flag = free_inspection + } + } + add = { + value = standard_survey_activity_cost + desc = hunt_base_cost + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + NOR = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + has_character_flag = free_inspection + } + } + add = { + value = standard_survey_activity_cost + desc = hunt_base_cost + } + } + } + piety = { + value = 0 + if = { + limit = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + NOT = { has_character_flag = free_inspection } + } + add = { + value = standard_survey_activity_cost + desc = hunt_base_cost + } + } + } + } + + ui_predicted_cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + NOR = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + has_character_flag = free_inspection + } + } + add = { + # Base Cost + value = standard_survey_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + NOR = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + has_character_flag = free_inspection + } + } + add = { + # Base Cost + value = standard_survey_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + piety = { + value = 0 + if = { + limit = { + faith = { has_doctrine_parameter = inspections_unlocked_and_costs_piety } + NOT = { has_character_flag = free_inspection } + } + add = { + # Base Cost + value = standard_survey_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + } + + cooldown = { years = 2 } + + ################### + # PHASES + ################### + + phases = { + phase_surveying = { + is_predefined = yes + location_source = pickable + + on_phase_active = { + if = { + limit = { + this = scope:host + } + scope:activity = { progress_activity_phase_after = { months = 2 } } + trigger_event = { id = bp3_survey.0005 } + trigger_event = { + on_action = random_survey_first_event_pulse + weeks = 2 + } + trigger_event = { + on_action = random_survey_mid_event_pulse + months = 1 + } + trigger_event = { + on_action = random_survey_second_event_pulse + weeks = 6 + } + trigger_event = { + id = bp3_survey.0010 + days = 59 + } + } + } + + on_end = { + + } + } + } + + options = { + inspection_option_allocated_funds = { + inspection_no_funding = { + default = yes + } + inspection_small_fund = { + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + if = { + limit = { + NOT = { has_character_flag = free_inspection } + } + add = { + value = 20 + multiply = { + value = root.highest_held_title_tier + subtract = 1 + divide = 2 + min = 1 + } + multiply = { + value = current_year + subtract = 900 + divide = 2 + min = 100 + max = 300 + divide = 100 + ceiling = yes + } + desc = inspection_small_fund + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + if = { + limit = { + NOT = { has_character_flag = free_inspection } + } + add = { + value = 20 + multiply = { + value = root.highest_held_title_tier + subtract = 1 + divide = 2 + min = 1 + } + multiply = { + value = current_year + subtract = 900 + divide = 2 + min = 100 + max = 300 + divide = 100 + ceiling = yes + } + desc = inspection_small_fund + } + } + } + } + } + } + inspection_large_fund = { + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + if = { + limit = { + NOT = { has_character_flag = free_inspection } + } + add = { + value = 40 + multiply = { + value = root.highest_held_title_tier + subtract = 1 + divide = 2 + min = 1 + } + multiply = { + value = current_year + subtract = 900 + divide = 2 + min = 100 + max = 300 + divide = 100 + ceiling = yes + } + desc = inspection_large_fund + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + if = { + limit = { + NOT = { has_character_flag = free_inspection } + } + add = { + value = 40 + multiply = { + value = root.highest_held_title_tier + subtract = 1 + divide = 2 + min = 1 + } + multiply = { + value = current_year + subtract = 900 + divide = 2 + min = 100 + max = 300 + divide = 100 + ceiling = yes + } + desc = inspection_large_fund + } + } + } + } + } + } + } + } + + max_guest_arrival_delay_time = { months = 1 } + + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + apa_survey_bad_harvest + apa_survey_good_harvest + apa_survey_bad_merchant_guild + apa_survey_good_merchant_guild + apa_survey_bad_noble + apa_survey_good_noble + apa_survey_tax_problems + apa_survey_extra_taxes + apa_survey_old_bridge + apa_survey_bad_mercenaries + apa_survey_good_mercenaries + apa_survey_small_festival + apa_survey_fishing_rights + apa_survey_city_walls + apa_survey_local_gift + } + chance_of_no_event = 0 + } + + ################### + # AI VALUES + ################### + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 50 + + if = { + limit = { + has_trait = lazy + } + add = -10 + } + + #Can you actually afford this? + if = { + limit = { + NOT = { can_make_expensive_purchase_trigger = { PRICE = activity_minor_gold_value } } + } + add = -75 + } + } + + ai_check_interval = 60 + + ai_will_select_province = { + value = 10 + } + + ################### + # GUEST HANDLING + ################### + + host_intents = { + default = survey_overseer_intent + intents = { survey_overseer_intent survey_learning_intent } + } + + guest_intents = { + intents = { survey_learning_intent_guest } + default = survey_learning_intent_guest + } + + can_be_activity_guest = { + is_ai = yes + court_owner ?= scope:host + is_healthy = yes + is_landed = no + age >= 12 + OR = { + is_knight_of = scope:host + is_councillor_of = scope:host + is_child_of = scope:host + is_heir_of = scope:host + is_spouse_of = scope:host + is_consort_of = scope:host + has_relation_ward = scope:host + has_relation_friend = scope:host + has_relation_lover = scope:host + } + } + + travel_entourage_selection = { + weight = 1 + + # Up to how many characters to select for a player + max = 20 + + # Up to how many characters to select for an AI + ai_max = 15 + + invite_rule_order = 1 + } + + max_guests = 20 + + guest_join_chance = { + base = 10 + } + + ################### + # GRAPHICS + ################### + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #Nomads and steppe tribals + trigger = { + scope:activity = { + OR = { + activity_host = { government_has_flag = government_is_nomadic } + AND = { + activity_host = { government_has_flag = government_is_tribal } + activity_location.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + AND = { + is_landless_adventurer = yes + activity_location.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/mpo_camp_steppe.dds" + environment = "environment_mpo_camp_steppe" + ambience = "event:/DLC/CE2/Events/Event_Images/mpo_camp_steppe" + } + background = { + trigger = { + scope:activity ?= { + activity_location.county = title:c_byzantion + } + } + texture = "gfx/interface/illustrations/event_scenes/ep3_constantinople.dds" + environment = "environment_ep3_constantinople" + ambience = "event:/DLC/EP3/SFX/Events/Event_Images/ep3_evn_eventimage_constantinople" + } + background = { #FP2 + trigger = { + scope:activity ?= { + activity_location = { + OR = { + culture = { has_building_gfx = iberian_building_gfx } + geographical_region = world_europe_west_iberia + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/fp2_courtyard.dds" + environment = "environment_event_fp2_courtyard" + ambience = "event:/DLC/FP2/SFX/Events/courtyard" + } + background = { #Indian Courtyard + trigger = { + scope:activity ?= { + activity_location ?= { + OR = { + culture = { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_courtyard_indian.dds" + environment = "environment_event_bp1_courtyard_indian" + ambience = "event:/SFX/Events/Backgrounds/castle_courtyard_western" + } + background = { #MENA Courtyard + trigger = { + scope:activity ?= { + activity_location = { + OR = { + culture ?= { has_graphical_mena_culture_group_trigger = yes } + culture ?= { has_building_gfx = iranian_building_gfx } + steppe_building_gfx_use_mena_trigger = yes + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_courtyard_mena.dds" + environment = "environment_event_bp1_courtyard_mena" + ambience = "event:/SFX/Events/Backgrounds/castle_courtyard_western" + } + background = { #East Asia + trigger = { + scope:activity.activity_location ?= { + OR = { + culture ?= { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_courtyard_asia.dds" + environment = "environment_tgp_courtyard_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_courtyard_asia" + } + background = { # Fallback + texture = "gfx/interface/illustrations/event_scenes/bp2_courtyard.dds" + environment = "environment_bp2_courtyard" + ambience = "event:/DLC/FP2/SFX/Events/courtyard" + } + + window_characters = { + guest = { + camera = camera_body_left + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + if = { + limit = { + any_attending_character = { + is_councillor_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + } + every_attending_character = { + limit = { + is_councillor_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + is_knight_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + } + every_attending_character = { + limit = { + is_knight_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + is_adult = yes + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + animation = writing + } + } + + host = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + animation = debating + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:host.location != scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + guest = { + camera = camera_body + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + if = { + limit = { + any_attending_character = { + age >= 12 + is_primary_heir_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + } + every_attending_character = { + limit = { + age >= 12 + is_primary_heir_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + is_consort_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + } + every_attending_character = { + limit = { + is_consort_of = scope:host + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + else_if = { + limit = { + any_attending_character = { + age >= 12 + OR = { + is_child_of = scope:host + is_grandchild_of = scope:host + } + location = scope:activity.activity_location + this != scope:host + } + } + every_attending_character = { + limit = { + age >= 12 + OR = { + is_child_of = scope:host + is_grandchild_of = scope:host + } + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + animation = survey + } + } + } + + activity_window_widgets = { + inspection_success_chance = "activity_plugin_widgets_summary" + } +} diff --git a/common/activities/activity_types/playdate.txt b/common/activities/activity_types/playdate.txt new file mode 100644 index 00000000..288049cf --- /dev/null +++ b/common/activities/activity_types/playdate.txt @@ -0,0 +1,1016 @@ +activity_playdate = { + is_shown = { + highest_held_title_tier > tier_barony + trigger_if = { + limit = { + highest_held_title_tier = tier_county + } + top_liege != this + } + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + NOT = { has_variable = conqueror } + trigger_if = { # Throttle Counts + limit = { + highest_held_title_tier = tier_county + } + ai_sociability >= 100 + } + } + is_adult = no + age < less_than_two_years_to_adulthood_value #Consistency! + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + age >= 12 + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_playdate } + is_available = yes + age >= 4 + } + + is_valid = { + scope:host = { + is_imprisoned = no + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + NOT = { is_incapable = yes } + } + # If no one shows up + trigger_if = { + limit = { + is_current_phase_active = yes + } + has_attending_activity_guests = yes + } + } + + on_invalidated = { + + if = { # host is imprisoned + limit = { + scope:host = { is_imprisoned = yes } + } + #Host has been imprisoned + every_attending_character = { + limit = { + this != scope:host + } + trigger_event = playdate.0022 + } + scope:host = { + trigger_event = playdate.0021 + } + } + # Host becomes unlanded + if = { + limit = { + scope:host = { + is_landed_or_landless_administrative = no + } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + every_attending_character = { + trigger_event = activity_system.0320 + } + } + if = { + limit = { + scope:host = { is_incapable = yes } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_attending_character = { + limit = { this != scope:host } + trigger_event = activity_system.0331 + } + } + if = { # No one shows up + limit = { + has_attending_activity_guests = no + } + scope:host = { + trigger_event = playdate.2003 + } + } + } + + is_location_valid = { + exists = province_owner + province_owner.top_liege = scope:host.top_liege + } + + + on_host_death = { + every_attending_character = { + trigger_event = playdate.0020 + } + } + + province_filter = capital + ai_province_filter = capital + + max_province_icons = 5 + + cost = { + gold = { + add = { + value = standard_playdate_activity_cost + desc = hunt_base_cost + } + # Free playdate credit from various events. + if = { + limit = { has_variable = free_meet_peers_credit } + multiply = 0 + } + } + } + + ui_predicted_cost = { + gold = { + # Base Cost + value = standard_playdate_activity_cost + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + + cooldown = { days = standard_playdate_cooldown_time } + + ################### + # PHASES + ################### + + phases = { + playdate_phase = { + is_predefined = yes + + on_phase_active = { + if = { + limit = { this = scope:host } + scope:activity = { progress_activity_phase_after = { months = 3 } } + trigger_event = playdate.2001 + } + else = { + trigger_event = playdate.2501 + } + } + + on_monthly_pulse = { + # Fires for every attendee + trigger_event = { + on_action = playdate_event_selection + days = { 1 3 } + } + random = { + chance = { + value = 10 + if = { + limit = { + has_bp2_dlc_trigger = yes + this = scope:activity.activity_host + } + add = 40 + } + } + trigger_event = { + on_action = playdate_event_selection + days = { 15 20 } + } + } + } + + on_end = { + # Send each character back home + #set_location_to_default = yes + # Send the parents an interface notification that their child has returned from the playdate + if = { + limit = { + this != scope:host + is_ai = yes + is_playable_character = no + save_temporary_scope_as = child_scope_check + any_parent = { + is_ai = no + any_courtier = { + this = scope:child_scope_check + } + } + } + save_scope_as = child_scope + random_parent = { + limit = { + is_ai = no + any_courtier = { + this = scope:child_scope + } + } + send_interface_message = { + type = event_childhood_neutral_text + title = child_return_from_playdate_title + desc = child_return_from_playdate_desc + + left_icon = scope:child_scope + right_icon = scope:host + } + } + } + + # Fire conclusion events + if = { + limit = { this = scope:host } + scope:activity = { + add_activity_log_entry = { + key = playdate_conc_reward + score = 100 + show_in_conclusion = yes + character = root + root = { add_prestige = medium_prestige_gain } + every_attending_character = { + limit = { this != root } + custom = every_guest_scope_tt + add_opinion = { + target = root + modifier = hosted_successful_playdate_opinion + } + } + } + } + trigger_event = playdate.9001 + } + else = { + trigger_event = playdate.9002 + } + } + } + } + + wait_time_before_start = { days = 7 } + max_guest_arrival_delay_time = { months = 8 } + + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + apa_won_at_dice apa_good_manners apa_visited_friends_chapel apa_mentor_taught_me apa_read_a_book apa_joked_together apa_rescued_kid apa_shared_food apa_broke_toy apa_found_gold_stash apa_learned_from_kid apa_sang_nice_song apa_practiced_with_swords apa_studied_ledger apa_had_charming_convo + } + chance_of_no_event = 10 + } + + + ################### + # AI VALUES + ################### + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 50 + + if = { + limit = { + OR = { + has_trait = shy + has_trait = reclusive + has_trait = depressed_1 + has_trait = depressed_genetic + } + } + add = -30 + } + + if = { + limit = { + has_trait = lazy + } + add = -10 + } + + if = { + limit = { + has_trait = gregarious + } + add = 50 + } + + #Can you actually afford this? + if = { + limit = { + NOT = { can_make_expensive_purchase_trigger = { PRICE = activity_minor_gold_value } } + } + add = -75 + } + # Plague + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Domain" + } + } + else_if = { + limit = { + any_realm_county = { + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -20 + desc = "Plague in Top Realm" + } + } + if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Domain" + } + } + else_if = { + limit = { + any_held_title = { + title_tier = county + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -40 + desc = "Apocalyptic Plague in Top Realm" + } + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_will_select_province = { + value = 10 + if = { + limit = { + this = scope:host.capital_province + } + add = { + value = 30 + desc = "Capital Province preferred" + } + } + } + + ################### + # GUEST HANDLING + ################### + + max_guests = 30 + + guest_invite_rules = { + defaults = { + 2 = activity_invite_rule_liege + 2 = activity_invite_rule_siblings + 2 = activity_invite_rule_vassals + 1 = activity_invite_rule_confederates + 1 = activity_invite_rule_friends + 1 = activity_invite_rule_crushes + 1 = activity_invite_rule_personal_scheme_targets + 2 = activity_invite_rule_powerful_vassals_children + 2 = activity_invite_rule_fellow_vassals + 3 = activity_invite_rule_fellow_vassals_children + + } + rules = { + # MP + 6 = activity_invite_mp + 3 = activity_invite_rule_vassals_children + } + } + + can_be_activity_guest = { + is_available_for_child_activity_trigger = yes + in_diplomatic_range = scope:host + } + + host_intents = { + default = reduce_stress_intent + intents = { reduce_stress_intent } + } + + guest_intents = { + default = reduce_stress_intent + intents = { reduce_stress_intent } + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + + modifier = { + add = 25 + desc = ACTIVITY_GUEST_PLAYDATE_CREDIT_REASON + scope:host = { has_variable = free_meet_peers_credit } + } + } + + ################### + # GRAPHICS + ################### + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + background = { #Nomads + trigger = { + OR = { + activity_host = { government_has_flag = government_is_nomadic } + AND = { + activity_host = { government_has_flag = government_is_tribal } + activity_location.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + AND = { + activity_host = { is_landless_adventurer = yes } + activity_host.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/mpo_hunt_steppe.dds" + environment = "environment_mpo_hunt_steppe" + ambience = "event:/DLC/CE2/Events/Event_Images/mpo_hunt_steppe" + } + background = { + trigger = { + activity_location = { + OR = { + geographical_region = world_europe_west_iberia + culture = { has_building_gfx = iberian_building_gfx } + } + } + } + texture = "gfx/interface/illustrations/activity_backgrounds/fp2_garden.dds" + environment = "environment_event_fp2_garden" + ambience = "event:/DLC/FP2/SFX/Events/garden" + } + background = { + trigger = { + activity_location = { + OR = { + culture ?= { + has_graphical_mena_culture_group_trigger = yes + } + steppe_building_gfx_use_mena_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/activity_backgrounds/bp1_garden_mena_day.dds" + environment = "environment_event_fp2_garden" + ambience = "event:/DLC/FP2/SFX/Events/garden" + } + background = { #Indian + trigger = { + activity_location = { + OR = { + steppe_building_gfx_use_indian_trigger = yes + culture ?= { has_graphical_india_culture_group_trigger = yes } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp2_indian_garden.dds" + environment = "environment_bp2_garden_india_day" + ambience = "event:/SFX/Events/Backgrounds/castle_garden_day" + } + background = { #Asia Garden + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_garden_asia.dds" + environment = "environment_tgp_garden_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_garden_asia" + } + background = { + texture = "gfx/interface/illustrations/activity_backgrounds/garden.dds" + environment = "environment_event_garden" + ambience = "event:/DLC/FP2/SFX/Events/garden" + } + + window_characters = { + + guest = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + scope:player ?= { + this != scope:host + } + } + scope:player ?= { add_to_list = characters } + } + else = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { idle throne_room_cheer_2 child_hobby_horse } + } + } + } + + guest = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { idle laugh clutching_ball } + } + } + } + + host = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { survey } + } + animation = idle + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + guest = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { idle thinking throne_room_cheer_1 clutching_doll } + } + } + } + + guest = { + camera = camera_event_center + + effect = { + if = { + limit = { + scope:host.location = scope:activity.activity_location + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + this != scope:host + } + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { idle happiness eccentric chess_cocky chess_certain_win reading } + } + } + } + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + on_start = { + # Remove free credit. + scope:host = { remove_variable = free_meet_peers_credit } + } +} diff --git a/common/activities/activity_types/tour.txt b/common/activities/activity_types/tour.txt new file mode 100644 index 00000000..fd873ac5 --- /dev/null +++ b/common/activities/activity_types/tour.txt @@ -0,0 +1,4095 @@ +activity_tour = { + is_shown = { + highest_held_title_tier > tier_barony + is_landed = yes + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + has_dlc_feature = tours_and_tournaments + has_dlc_feature = advanced_activities + NOT = { government_has_flag = government_is_administrative } + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_tour } + highest_held_title_tier >= tier_duchy + is_available = yes + age >= 12 + custom_tooltip = { + text = 3_vassals_or_more + vassal_count >= 3 + } + custom_tooltip = { + text = 5_courtiers_or_more + any_courtier_or_guest = { count >= 5 } + } + is_in_civil_war = no + } + + is_valid = { + scope:host = { + is_landed = yes + NOT = { is_incapable = yes } + is_in_civil_war = no + } + } + + on_invalidated = { + # Host becomes unlanded + if = { + limit = { + scope:host = { is_landed = no } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + every_in_list = { + variable = tour_vassals_to_visit + trigger_event = activity_system.0320 + } + } + if = { + limit = { + scope:host = { is_incapable = yes } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_in_list = { + variable = tour_vassals_to_visit + trigger_event = activity_system.0331 + } + } + # Clean up character flag preventing visited vassals from starting other activities + every_in_list = { + variable = tour_vassals_to_visit + if = { + limit = { + has_character_flag = being_visited_on_tour + } + remove_character_flag = being_visited_on_tour + trigger_event = { + id = tour_general.9998 + } + } + } + } + + on_host_death = { + # Send your entourage home + scope:host = { + current_travel_plan = { + every_entourage_character = { + set_location_to_default = yes + } + } + # saving the title for loc + primary_title = { save_scope_as = host_title } + # Inform your heir if you have one + player_heir ?= { + trigger_event = activity_system.1010 + } + } + # Inform all the other attendees + scope:activity = { + every_in_list = { + variable = tour_vassals_to_visit + limit = { + this != scope:host.player_heir + } + trigger_event = activity_system.1011 + } + } + } + + ai_will_do = { + value = 30 + if = { + limit = { + liege = { has_ongoing_grand_activity_trigger = yes } + } + desc = "Liege grand activities" + add = -1000 + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + NOT = { has_character_flag = had_tour } + } + desc = "I am a king and should go on at least one tour" + add = 200 + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + has_character_flag = had_tour + } + desc = "I am a king and have gone on one tour already" + add = -10 + } + if = { + limit = { + highest_held_title_tier <= tier_duchy + has_character_flag = had_tour + } + desc = "I am a duke and have gone on one tour already" + add = -30 + } + if = { + limit = { + gold <= major_gold_value + OR = { + has_trait = sadistic + has_trait = arbitrary + has_trait = greedy + ai_greed >= 75 + } + NOR = { + has_trait = generous + ai_greed <= -75 + } + } + desc = "I am poor and likely to go on a taxation tour!" + add = 30 + } + if = { + limit = { + ai_has_warlike_personality = yes + war_chest_gold < war_chest_gold_maximum + } + desc = "I am warlike and want to fill my war chest" + add = 30 + } + if = { + limit = { + ai_has_economical_boom_personality = yes + gold < major_gold_value + } + desc = "I am a builder and want more gold to build building with!" + add = 30 + } + if = { + limit = { + gold <= major_gold_value + } + desc = "I am very poor" + add = -20 + } + if = { + limit = { + gold <= massive_gold_value + } + desc = "I am poor" + add = -10 + } + if = { + limit = { + any_powerful_vassal = { + opinion = { + target = root + value <= -25 + } + } + } + desc = "Vassals hate me" + add = 10 + } + if = { + limit = { + any_sub_realm_county = { + count >= 3 + culture = { + cultural_acceptance = { + target = root.culture + value <= 25 + } + } + } + } + desc = "Foreign subjects hate me" + add = 10 + } + if = { + limit = { + any_vassal = { + count >= 5 + } + } + desc = "I have many vassals" + add = 10 + } + if = { + limit = { + OR = { + gold >= 1000 + gold >= massive_gold_value + } + } + desc = "I have a lot of money" + add = 10 + } + # Plague + if = { + limit = { + any_sub_realm_county = { + has_province_with_epidemic = { intensity < apocalyptic } + } + would_follow_social_distancing_value >= -1 + } + add = { + value = -60 + desc = "Plague in Realm" + } + } + if = { + limit = { + any_sub_realm_county = { + has_province_with_epidemic = { intensity = apocalyptic } + } + } + add = { + value = -200 + desc = "Apocalyptic Plague in Realm" + } + } + if = { + limit = { + government_has_flag = government_is_celestial + highest_held_title_tier >= tier_empire + is_independent_ruler = yes + } + add = { + value = -500 + desc = "I have people for that" + } + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_select_num_provinces = { + value = 0 + if = { + limit = { + highest_held_title_tier <= tier_duchy + } + add = { + value = 3 + desc = "Duchy base value" + } + } + else = { + add = { + value = 4 + desc = "King+ base value" + } + } + + if = { + limit = { + gold >= medium_gold_value + } + add = { + value = 1 + desc = "Medium gold +1" + } + } + if = { + limit = { + gold >= major_gold_value + } + add = { + value = 2 + desc = "Major gold +2" + } + } + if = { + limit = { + OR = { + gold >= 1000 + gold >= massive_gold_value + } + } + add = { + value = 5 + desc = "Massive gold +5" + } + } + if = { + limit = { + has_variable = conqueror + } + add = { + value = 10 + desc = "Conquerors" + } + } + if = { + limit = { + ai_should_focus_on_building_in_their_capital = yes + } + add = { + value = 10 + desc = "Needs gold for focused building" + } + } + } + + ai_will_select_province = { + value = scope:score + } + + province_score = { + value = 0 + # General reasons + if = { + limit = { + scope:host ?= { has_relation_friend = root.county.holder } + } + desc = "The host is my friend" + add = 20 + } + if = { + limit = { + scope:host ?= { has_relation_lover = root.county.holder } + } + desc = "The host is my lover" + add = 20 + } + if = { + limit = { + county.holder ?= { is_ai = no } + } + desc = "The host is a player" + add = 50 + } + # Tour grounds reasons + if = { + limit = { + county ?= { + county_control <= 100 + } + } + desc = "I do not completely control this province" + add = 20 + } + if = { + limit = { + county ?= { + county_control <= 75 + } + } + desc = "Control is below average" + add = 20 + } + if = { + limit = { + county ?= { + county_control <= 50 + } + } + desc = "Control is quite low" + add = 20 + } + if = { + limit = { + county ?= { + county_control <= 20 + } + } + desc = "Control is catastrophically low" + add = 20 + } + if = { + limit = { + county ?= { + county_control <= 5 + } + } + desc = "Control is nonexistent" + add = 20 + } + # Culture festival reasons + if = { + limit = { + culture != scope:host.culture + } + desc = "They're a different culture from me" + add = 20 + } + if = { + limit = { + culture = { + cultural_acceptance = { + target = scope:host.culture + value <= 25 + } + } + } + desc = "They're a different culture who actively dislike me" + add = 20 + } + if = { + limit = { + culture = { + cultural_acceptance = { + target = scope:host.culture + value <= 50 + } + } + } + desc = "They're a different culture who are lukewarm to me" + add = 10 + } + if = { + limit = { + county = { county_opinion < 0 } + } + desc = "They have low popular opinion" + add = 20 + } + if = { + limit = { + county = { county_opinion < -20 } + } + desc = "They have very low popular opinion" + add = 20 + } + # Hosted dinner reasons + if = { + limit = { + county.holder = { is_powerful_vassal = yes } + } + desc = "The host is a powerful vassal" + add = 50 + } + if = { + limit = { + county.holder = { + opinion = { + target = scope:host + value <= 10 + } + } + } + desc = "The host doesn't like me" + add = 20 + } + if = { + limit = { + county.holder = { + opinion = { + target = scope:host + value <= -15 + } + } + } + desc = "The host actively dislikes me" + add = 20 + } + if = { + limit = { + county.holder = { + opinion = { + target = scope:host + value <= -50 + } + } + } + desc = "The host hates me" + add = 20 + } + if = { + limit = { + county.holder = { + opinion = { + target = scope:host + value <= -75 + } + } + } + desc = "The host really hates me" + value = 50 + } + } + + ################### + # PARAMETERS + ################### + + activity_group_type = grand + + province_filter = realm + is_single_location = no + planner_type = holder + + is_location_valid = { + ep2_phase_general_location_checks = yes + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + add = { + value = 50 + desc = tour_base_cost + } + add = { + value = 50 + multiply = activity_cost_scale_by_era + subtract = 50 + desc = activity_cost_scale_by_era_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + add = { + value = 50 + desc = tour_base_cost + } + add = { + value = 50 + multiply = activity_cost_scale_by_era + subtract = 50 + desc = activity_cost_scale_by_era_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + + ui_predicted_cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + # Base Cost + add = { + value = 50 + # Scale by Era + multiply = activity_cost_scale_by_era + } + + # Options + # Entourage Option + add = { + value = { # Calculate the average of the 3 option costs + value = 0 + add = 20 # Small Cost + add = 60 # Modest Cost + add = 180 # Grand Cost + # Divide by total number of option level to get an average option cost + divide = 3 + # Scale Option costs by era + multiply = activity_cost_scale_by_era + } + } + # Luxuries Option + add = { + value = { # Calculate the average of the 5 option costs + value = 0 + add = 20 # No Luxuries Cost + add = 40 # Essential Luxuries Cost + add = 60 # Extravagant Luxuries Cost + add = 120 # Luxurious Furniture Cost + add = 180 # Extravagant Furniture Cost + # Divide by total number of option level to get an average option cost + divide = 5 + # Scale Option costs by era + multiply = activity_cost_scale_by_era + } + } + + # Tour Stops + if = { + limit = { primary_title.tier = tier_empire } + add = { + value = 114 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + else_if = { + limit = { primary_title.tier = tier_kingdom } + add = { + value = 44 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + else_if = { + limit = { primary_title.tier = tier_duchy } + add = { + value = 36 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + # Base Cost + add = { + value = 50 + # Scale by Era + multiply = activity_cost_scale_by_era + } + + # Options + # Entourage Option + add = { + value = { # Calculate the average of the 3 option costs + value = 0 + add = 20 # Small Cost + add = 60 # Modest Cost + add = 180 # Grand Cost + # Divide by total number of option level to get an average option cost + divide = 3 + # Scale Option costs by era + multiply = activity_cost_scale_by_era + } + } + # Luxuries Option + add = { + value = { # Calculate the average of the 5 option costs + value = 0 + add = 20 # No Luxuries Cost + add = 40 # Essential Luxuries Cost + add = 60 # Extravagant Luxuries Cost + add = 120 # Luxurious Furniture Cost + add = 180 # Extravagant Furniture Cost + # Divide by total number of option level to get an average option cost + divide = 5 + # Scale Option costs by era + multiply = activity_cost_scale_by_era + } + } + + # Tour Stops + if = { + limit = { primary_title.tier = tier_empire } + add = { + value = 114 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + else_if = { + limit = { primary_title.tier = tier_kingdom } + add = { + value = 44 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + else_if = { + limit = { primary_title.tier = tier_duchy } + add = { + value = 36 # derived from testing + multiply = activity_cost_scale_by_era + multiply = 5 # median number of tour stops (min = 1, max = 10) + } + } + + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + + cooldown = { years = 10 } + + ################### + # OPTIONS + ################### + + options = { + #Tour types + special_type = { + tour_type_majesty = { + default = yes + ai_will_do = { + value = 50 + if = { # Cautious AI's want stability + limit = { + OR = { + ai_has_cautious_personality = yes + ai_has_pious_builder_personality = yes #Legitimacy, ho! + } + war_chest_gold > cautious_ai_minimum_war_chest_gold + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = gregarious + has_trait = arrogant + has_trait = arbitrary + has_trait = brave + has_trait = just + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = shy + has_trait = humble + has_trait = callous + has_trait = sadistic + } + } + subtract = 50 + } + if = { + limit = { + has_variable = conqueror + prestige >= 500 + } + subtract = 500 + } + if = { + limit = { + ai_should_focus_on_building_in_their_capital = yes + } + subtract = 500 + } + } + } + tour_type_intimidation = { + ai_will_do = { + value = 0 + if = { # Cautious AI's want stability + limit = { + ai_has_cautious_personality = yes + war_chest_gold > cautious_ai_minimum_war_chest_gold + NOR = { + has_trait = compassionate + has_trait = generous + has_trait = forgiving + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arbitrary + has_trait = vengeful + has_trait = torturer + } + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = just + has_trait = honest + has_trait = compassionate + has_trait = generous + has_trait = forgiving + } + } + subtract = 50 + } + if = { + limit = { + has_variable = conqueror + } + subtract = 500 + } + if = { + limit = { + ai_should_focus_on_building_in_their_capital = yes + } + subtract = 500 + } + } + } + tour_type_taxation = { + is_valid = { + custom_tooltip = { + text = CB_TRIBAL_COST + NOT = { + government_has_flag = government_is_tribal + } + } + } + ai_will_do = { + value = 50 + if = { # Warlike AI's want to fill their coffers + limit = { + ai_has_warlike_personality = yes + war_chest_gold < war_chest_gold_maximum + } + add = 50 + } + if = { # Very appropriate for Builders/Economical Boom personalities + limit = { + ai_has_economical_boom_personality = yes + } + add = 50 + } + if = { + limit = { + OR = { + has_trait = sadistic + has_trait = arbitrary + has_trait = greedy + ai_greed >= 75 + } + } + add = 50 + } + if = { + limit = { + gold < major_gold_value + } + add = 200 + } + if = { + limit = { + OR = { + has_trait = just + has_trait = honest + has_trait = compassionate + has_trait = generous + has_trait = forgiving + } + } + subtract = 50 + } + if = { + limit = { + OR = { + has_trait = generous + ai_greed <= -75 + } + } + subtract = 5000 + } + if = { + limit = { + has_variable = conqueror + } + add = 10000 + } + if = { + limit = { + ai_should_focus_on_building_in_their_capital = yes + } + add = 10000 + } + } + } + } + tour_entourage = { + tour_entourage_small = { + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_entourage_small + add = { + value = 20 + desc = tour_entourage_small + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_entourage_small + add = { + value = 20 + desc = tour_entourage_small + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + + travel_entourage_selection = { + weight = tour_entourage_weight_value + max = 5 + invite_rule_order = 1 + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 30 + } + if = { + limit = { + has_trait = greedy + } + add = 30 + } + if = { + limit = { + OR = { + has_trait = lazy + has_trait = temperate + has_trait = content + } + } + add = 15 + } + if = { + limit = { + has_trait = humble + } + add = 10 + } + if = { + limit = { + gold <= major_gold_value + } + add = 100 + } + } + } + tour_entourage_normal = { + default = yes + travel_entourage_selection = { + weight = tour_entourage_weight_value + max = 10 + invite_rule_order = 1 + } + + on_start = { + scope:host = { + add_prestige = medium_prestige_gain + } + } + is_valid = { + custom_tooltip = { + text = more_than_5_courtiers + any_courtier_or_guest = { count > 5 } + } + } + + ai_will_do = { + value = 50 + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_entourage_normal + add = { + value = 60 + desc = tour_entourage_normal + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_entourage_normal + add = { + value = 60 + desc = tour_entourage_normal + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + } + tour_entourage_grand = { + is_valid = { + custom_tooltip = { + text = more_than_10_courtiers + any_courtier_or_guest = { count > 10 } + } + } + + travel_entourage_selection = { + weight = tour_entourage_weight_value + max = 40 + ai_max = 20 + invite_rule_order = 1 + } + + on_start = { + scope:host = { + add_prestige = major_prestige_gain + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 30 + } + if = { + limit = { + has_trait = generous + } + add = 30 + } + if = { + limit = { + OR = { + has_trait = diligent + has_trait = gluttonous + has_trait = ambitious + } + } + add = 15 + } + if = { + limit = { + has_trait = arrogant + } + add = 10 + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_entourage_grand + add = { + value = 180 + desc = tour_entourage_grand + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_entourage_grand + add = { + value = 180 + desc = tour_entourage_grand + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + } + } + tour_luxuries = { + tour_luxuries_bad = { + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_luxuries_bad + add = { + value = 20 + desc = tour_luxuries_bad + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_luxuries_bad + add = { + value = 20 + desc = tour_luxuries_bad + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 30 + } + if = { + limit = { + has_trait = greedy + } + add = 30 + } + if = { + limit = { + OR = { + has_trait = lazy + has_trait = temperate + has_trait = content + } + } + add = 15 + } + if = { + limit = { + has_trait = humble + } + add = 10 + } + if = { + limit = { + gold <= major_gold_value + } + add = 100 + } + } + } + tour_luxuries_normal = { + default = yes + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_luxuries_normal + add = { + value = 40 + desc = tour_luxuries_normal + } + add = { + value = 40 + multiply = activity_cost_scale_by_era + subtract = 40 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_luxuries_normal + add = { + value = 40 + desc = tour_luxuries_normal + } + add = { + value = 40 + multiply = activity_cost_scale_by_era + subtract = 40 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 50 + } + } + } + tour_luxuries_good = { + is_valid = { + custom_tooltip = { + text = government_is_tribal_tt + NOT = { government_has_flag = government_is_tribal } + } + } + + on_start = { + scope:host = { + add_prestige = 30 + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 30 + } + if = { + limit = { + has_trait = generous + } + add = 30 + } + if = { + limit = { + OR = { + has_trait = diligent + has_trait = gluttonous + has_trait = ambitious + } + } + add = 15 + } + if = { + limit = { + has_trait = arrogant + } + add = 10 + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_luxuries_good + add = { + value = 60 + desc = tour_luxuries_good + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_luxuries_good + add = { + value = 60 + desc = tour_luxuries_good + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + } + tour_furniture_normal = { + default = yes + is_valid = { + custom_tooltip = { + text = government_is_tribal_tt + NOT = { government_has_flag = government_is_tribal } + } + } + + on_start = { + scope:host = { + add_prestige = medium_prestige_gain + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 50 + } + } + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_furniture_normal + add = { + value = 120 + desc = tour_furniture_normal + } + add = { + value = 120 + multiply = activity_cost_scale_by_era + subtract = 120 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_furniture_normal + add = { + value = 120 + desc = tour_furniture_normal + } + add = { + value = 120 + multiply = activity_cost_scale_by_era + subtract = 120 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + } + tour_furniture_good = { + is_valid = { + custom_tooltip = { + text = government_is_tribal_tt + NOT = { government_has_flag = government_is_tribal } + } + } + + on_start = { + scope:host = { + add_prestige = major_prestige_gain + } + } + + ai_will_do = { + value = 0 + add = { #Base amount + value = 30 + } + if = { + limit = { + has_trait = ambitious + } + add = 15 + } + if = { + limit = { + has_trait = arrogant + } + add = 10 + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + desc = tour_furniture_good + add = { + value = 180 + desc = tour_furniture_good + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + desc = tour_furniture_good + add = { + value = 180 + desc = tour_furniture_good + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + } + } + } + } + + special_option_category = special_type + + ################### + # PHASES + ################### + + phases = { + # tour the grounds + tour_phase_tour_grounds = { + order = 1 + + number_of_picks = 10 + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + add = scope:province.county.development_level + if = { + limit = { + scope:province.county = { county_control <= 100 } + } + desc = "I do not completely control this province" + add = 20 + } + if = { + limit = { + scope:province.county = { county_control <= 75 } + } + desc = "Control is below average" + add = 20 + } + if = { + limit = { + scope:province.county = { county_control <= 50 } + } + desc = "Control is quite low" + add = 20 + } + if = { + limit = { + scope:province.county = { county_control <= 20 } + } + desc = "Control is catastrophically low" + add = 20 + } + if = { + limit = { + scope:province.county = { county_control <= 5 } + } + desc = "Control is nonexistent" + add = 20 + } + } + + is_shown = { + + } + + # Is this phase valid to execute for this ongoing activity + # root = the activity + # scope:host = activity host + # scope:province = current phase location + is_valid = { + ep2_tour_phase_invalidation_check = yes + } + + # Run if this phase is invalidated by its is_valid trigger + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + # scope:province = current phase location + on_invalidated = { + scope:province.province_owner = { save_scope_as = stop_host_scope } + scope:province = { save_scope_as = tour_location } + if = { + limit = { + this = scope:host + } + trigger_event = { + id = tour_general.0500 + } + } + if = { + limit = { + # If I just inherited this title, don't send me two letter events + this != scope:host + # Send it to the province owner + this = scope:province.province_owner + } + if = { + limit = { has_character_flag = being_visited_on_tour } + remove_character_flag = being_visited_on_tour + } + trigger_event = { + id = tour_general.9998 + } + } + if = { + limit = { + scope:activity = { exists = var:months_of_stop } + } + remove_variable = months_of_stop + } + # Achievements. + process_tour_achievement_tallies_effect = yes + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + value = tour_stop_value + desc = tour_phase_tour_grounds_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + value = tour_stop_value + desc = tour_phase_tour_grounds_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + scope:activity = { + tour_stop_host_effect = yes + add_activity_log_entry = { + key = tour_stop_tour_grounds_log + character = scope:host + target = scope:stop_host_scope + score = 50 + show_in_conclusion = yes + } + } + scope:activity.var:stop_host = { + trigger_event = tour_general.0001 #event to see tell you that your liege is about to arrive, turn them away? - vassal + } + # Achievements. + process_tour_achievement_tallies_effect = yes + #fires hostage reunion event, if hostage giver is also present + scope:activity = { + every_attending_character = { + limit = { + is_hostage_warden = yes + has_bp2_dlc_trigger = yes + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + } + } + } + + on_monthly_pulse = { + if = { + limit = { + this = scope:host + } + scope:activity = { + if = { # Migrate the heir to the tour activity + limit = { + OR = { + NOT = { exists = var:stop_host } + var:stop_host = { is_alive = no } + NOT = { activity_location.county.holder = var:stop_host } + } + } + remove_variable = stop_host + tour_stop_host_effect = yes + add_to_variable_list = { + name = tour_vassals_to_visit + target = var:stop_host + } + } + } + tour_progress_effect = yes + } + scope:host.location.barony = { + save_scope_as = touring_grounds_scope + } + tour_monthly_pulse_effect = { + ON_ACTION_POOL = on_tour_grounds + } + } + + on_end = { + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + } + # Attend a Dinner + tour_phase_dinner = { + order = 1 + + number_of_picks = 10 + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + if = { + limit = { + scope:province.county.holder = { is_powerful_vassal = yes } + } + desc = "The host is a powerful vassal" + add = 50 + } + if = { + limit = { + scope:province.county.holder = { + opinion = { + target = scope:province.county.holder.liege + value <= 10 + } + } + } + desc = "The host doesn't like me" + add = 20 + } + if = { + limit = { + scope:province.county.holder = { + opinion = { + target = scope:province.county.holder.liege + value <= -15 + } + } + } + desc = "The host actively dislikes me" + add = 20 + } + if = { + limit = { + scope:province.county.holder = { + opinion = { + target = scope:province.county.holder.liege + value <= -50 + } + } + } + desc = "The host hates me" + add = 20 + } + if = { + limit = { + scope:province.county.holder = { + opinion = { + target = scope:province.county.holder.liege + value <= -75 + } + } + } + desc = "The host really hates me" + add = 50 + } + } + + is_shown = { + + } + + can_pick = { + #scope:province.province_owner = { is_adult = yes } Commenting out for now since there's been an event audit, we'll see if issues prop up + scope:province.province_owner = { age >= 12 } + } + + # Is this phase valid to execute for this ongoing activity + # root = the activity + # scope:host = activity host + # scope:province = current phase location + is_valid = { + ep2_tour_phase_invalidation_check = yes + #scope:province.province_owner = { is_adult = yes } + scope:province.province_owner = { age >= 12 } + } + + # Run if this phase is invalidated by its is_valid trigger + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + # scope:province = current phase location + on_invalidated = { + scope:province.province_owner = { save_scope_as = stop_host_scope } + scope:province = { save_scope_as = tour_location } + if = { + limit = { + this = scope:host + } + trigger_event = { + id = tour_general.0500 + } + } + if = { + limit = { + # If I just inherited this title, don't send me two letter events + this != scope:host + # Send it to the province owner + this = scope:province.province_owner + } + if = { + limit = { has_character_flag = being_visited_on_tour } + remove_character_flag = being_visited_on_tour + } + trigger_event = { + id = tour_general.9998 + } + } + if = { + limit = { + scope:activity = { exists = var:months_of_stop } + } + remove_variable = months_of_stop + } + # Achievements. + process_tour_achievement_tallies_effect = yes + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + value = tour_stop_value + desc = tour_phase_dinner_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + value = tour_stop_value + desc = tour_phase_dinner_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + scope:activity = { + tour_stop_host_effect = yes + add_activity_log_entry = { + key = tour_stop_dinner_log + character = scope:host + target = scope:stop_host_scope + score = 50 + show_in_conclusion = yes + } + } + scope:activity.var:stop_host = { + trigger_event = tour_general.0001 #event to see tell you that your liege is about to arrive, turn them away? - vassal + } + # Achievements. + process_tour_achievement_tallies_effect = yes + #fires hostage reunion event, if hostage giver is also present + scope:activity = { + every_attending_character = { + limit = { + is_hostage_warden = yes + has_bp2_dlc_trigger = yes + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + } + } + } + + on_monthly_pulse = { + if = { + limit = { + this = scope:host + } + scope:activity = { + if = { # Migrate the heir to the tour activity + limit = { + OR = { + NOT = { exists = var:stop_host } + var:stop_host = { is_alive = no } + NOT = { activity_location.county.holder = var:stop_host } + } + } + remove_variable = stop_host + tour_stop_host_effect = yes + add_to_variable_list = { + name = tour_vassals_to_visit + target = var:stop_host + } + } + } + tour_progress_effect = yes + } + tour_monthly_pulse_effect = { + ON_ACTION_POOL = on_tour_dinner + } + } + + on_end = { + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + } + # Observe a Cultural Festival + tour_phase_cultural_festival = { + order = 1 + + number_of_picks = 10 + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + if = { + limit = { + scope:province.culture != root.culture + } + desc = "They're a different culture from me" + add = 20 + } + if = { + limit = { + scope:province.culture = { + cultural_acceptance = { + target = root.culture + value <= 25 + } + } + } + desc = "They're a different culture who actively dislike me" + add = 20 + } + if = { + limit = { + scope:province.culture = { + cultural_acceptance = { + target = root.culture + value <= 50 + } + } + } + desc = "They're a different culture who are lukewarm to me" + add = 10 + } + if = { + limit = { + scope:province.county = { county_opinion < 0 } + } + desc = "They have low popular opinion" + add = 20 + } + if = { + limit = { + scope:province.county = { county_opinion < -20 } + } + desc = "They have very low popular opinion" + add = 20 + } + } + + is_shown = { + + } + + # Is this phase valid to execute for this ongoing activity + # root = the activity + # scope:host = activity host + # scope:province = current phase location + is_valid = { + ep2_tour_phase_invalidation_check = yes + } + + # Run if this phase is invalidated by its is_valid trigger + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + # scope:province = current phase location + on_invalidated = { + scope:province.province_owner = { save_scope_as = stop_host_scope } + scope:province = { save_scope_as = tour_location } + if = { + limit = { + this = scope:host + } + trigger_event = { + id = tour_general.0500 + } + } + if = { + limit = { + # If I just inherited this title, don't send me two letter events + this != scope:host + # Send it to the province owner + this = scope:province.province_owner + } + if = { + limit = { has_character_flag = being_visited_on_tour } + remove_character_flag = being_visited_on_tour + } + trigger_event = { + id = tour_general.9998 + } + } + if = { + limit = { + scope:activity = { exists = var:months_of_stop } + } + remove_variable = months_of_stop + } + # Achievements. + process_tour_achievement_tallies_effect = yes + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + add = { + value = tour_stop_value + desc = tour_phase_cultural_festival_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + add = { + value = tour_stop_value + desc = tour_phase_cultural_festival_cost_desc + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } + } + } + + on_phase_active = { + if = { + limit = { this = scope:host } + scope:activity = { + tour_stop_host_effect = yes + add_activity_log_entry = { + key = tour_stop_cultural_festival_log + character = scope:host + target = scope:stop_host_scope + score = 50 + show_in_conclusion = yes + } + } + scope:activity.var:stop_host = { + trigger_event = tour_general.0001 #event to see tell you that your liege is about to arrive, turn them away? - vassal + } + # Achievements. + process_tour_achievement_tallies_effect = yes + #fires hostage reunion event, if hostage giver is also present + scope:activity = { + every_attending_character = { + limit = { + is_hostage_warden = yes + has_bp2_dlc_trigger = yes + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + } + } + } + + on_monthly_pulse = { + if = { + limit = { + this = scope:host + } + scope:activity = { + if = { # Migrate the heir to the tour activity + limit = { + OR = { + NOT = { exists = var:stop_host } + var:stop_host = { is_alive = no } + NOT = { activity_location.county.holder = var:stop_host } + } + } + remove_variable = stop_host + tour_stop_host_effect = yes + add_to_variable_list = { + name = tour_vassals_to_visit + target = var:stop_host + } + } + } + tour_progress_effect = yes + } + scope:host.location.county = { #remember in events that this is a county scope + save_scope_as = cultural_festival_scope + } + tour_monthly_pulse_effect = { + ON_ACTION_POOL = on_tour_festival + } + } + + on_end = { + if = { + limit = { + this = scope:host + } + remove_variable = having_end_event + } + } + } + # Go home + tour_phase_journey_home = { + # No effects, exists entirely as a buffer between the final parting demand and the tour conclusion event + is_predefined = yes + order = 2 + + select_scripted_location = { # Every tour should end where it began + root.capital_province = { save_scope_as = province } + } + + # Once you arrive we instantly end this phase since now you are home and happy + on_phase_active = { + if = { + limit = { this = scope:host } + # Run conclusion stuff here + set_variable = { + name = tour_success_var + value = scope:activity.var:tour_success_var + } + disburse_tour_activity_rewards = yes + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + location_source = scripted + } + } + + num_pickable_phases = 10 + + max_pickable_phases_per_province = 1 + + max_guest_arrival_delay_time = { months = 1 } # Note: The tour stops' rulers are not guests + + ################### + # GUEST HANDLING + ################### + + max_guests = 100 + + host_intents = { + intents = { + reduce_stress_intent + lechery_intent + altruism_intent + justice_intent + spread_legend_intent + legitimacy_intent + } + default = justice_intent + } + + guest_intents = { + intents = { reduce_stress_intent } + default = reduce_stress_intent + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + } + + travel_entourage_selection = { + weight = standard_travel_entourage_additions + max = 10 + invite_rule_order = 1 + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { + courtiers_became_lovers courtier_friendship + courtier_improved_skill courtier_learned_language + courtiers_got_into_fight courtiers_became_rivals + + liege_intimidated_courtier + + liege_visited_benevolence liege_local_benevolence increased_control + + liege_local_tax levied_tax local_mayor_tax tax_rich_local church_tax local_baron_tax + } + chance_of_no_event = 5 + } + + # Need to fire an activity welcome event when the first active phase starts + on_start = { + # Activity count debugging + #if = { + # limit = { + # debug_only = yes + # } + # if = { + # limit = { + # NOT = { + # exists = global_var:tour_count + # } + # } + # set_global_variable = { + # name = tour_count + # value = 1 + # } + # } + # else = { + # change_global_variable = { + # name = tour_count + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_county } + # NOT = { + # exists = global_var:tour_c + # } + # } + # set_global_variable = { + # name = tour_c + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_county } + # } + # change_global_variable = { + # name = tour_c + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_duchy } + # NOT = { + # exists = global_var:tour_d + # } + # } + # set_global_variable = { + # name = tour_d + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_duchy } + # } + # change_global_variable = { + # name = tour_d + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_kingdom } + # NOT = { + # exists = global_var:tour_k + # } + # } + # set_global_variable = { + # name = tour_k + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_kingdom } + # } + # change_global_variable = { + # name = tour_k + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_empire } + # NOT = { + # exists = global_var:tour_e + # } + # } + # set_global_variable = { + # name = tour_e + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_empire } + # } + # change_global_variable = { + # name = tour_e + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_middle_east } + # NOT = { + # exists = global_var:tour_world_middle_east + # } + # } + # set_global_variable = { + # name = tour_world_middle_east + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_middle_east } + # } + # change_global_variable = { + # name = tour_world_middle_east + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_europe } + # NOT = { + # exists = global_var:tour_world_europe + # } + # } + # set_global_variable = { + # name = tour_world_europe + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_europe } + # } + # change_global_variable = { + # name = tour_world_europe + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_steppe } + # NOT = { + # exists = global_var:tour_world_steppe + # } + # } + # set_global_variable = { + # name = tour_world_steppe + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_steppe } + # } + # change_global_variable = { + # name = tour_world_steppe + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_africa } + # NOT = { + # exists = global_var:tour_world_africa + # } + # } + # set_global_variable = { + # name = tour_world_africa + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_africa } + # } + # change_global_variable = { + # name = tour_world_africa + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_india } + # NOT = { + # exists = global_var:tour_world_india + # } + # } + # set_global_variable = { + # name = tour_world_india + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_india } + # } + # change_global_variable = { + # name = tour_world_india + # add = 1 + # } + # } + #} + set_variable = { + name = tour_success_var + value = 0 + } + if = { + limit = { + scope:activity = { + has_activity_option = { + category = tour_luxuries + option = tour_luxuries_bad + } + } + } + change_variable = { + name = tour_success_var + add = 5 + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = tour_luxuries + option = tour_luxuries_normal + } + } + } + change_variable = { + name = tour_success_var + add = 10 + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = tour_luxuries + option = tour_luxuries_good + } + } + } + change_variable = { + name = tour_success_var + add = 15 + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = tour_luxuries + option = tour_furniture_normal + } + } + } + change_variable = { + name = tour_success_var + add = 20 + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = tour_luxuries + option = tour_furniture_good + } + } + } + change_variable = { + name = tour_success_var + add = 25 + } + } + + # Creates a list of every vassal you plan to visit and sets a character flag on them so they are unavailable and cannot plan activities/travel + every_activity_phase_location = { + limit = { + NOT = { # Don't tell yourself that you're coming to visit + county.holder = scope:host + } + } + scope:activity = { + # Using a variable list saved on the activity so we can reference it elsewhere, like for removing the character flag upon invalidation or completion + add_to_variable_list = { + name = tour_vassals_to_visit + target = prev.county.holder + } + } + } + every_in_list = { + variable = tour_vassals_to_visit + add_character_flag = being_visited_on_tour + # Send them an event to let them know they will be visited by their liege on tour + trigger_event = { + id = tour_general.9999 + days = 1 # delay so we can test that the event is firing correctly + } + } + # Add activity logs / Type is secret to the guests + scope:host = { + add_character_flag = had_tour + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_majesty + } + } + } + scope:activity = { + add_activity_log_entry = { + key = tour_start_majesty_log + character = scope:host + score = 10 + } + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_intimidation + } + } + } + scope:activity = { + add_activity_log_entry = { + key = tour_start_intimidation_log + character = scope:host + score = 10 + } + } + } + else = { #Taxation + scope:activity = { + add_activity_log_entry = { + key = tour_start_taxation_log + character = scope:host + score = 10 + } + } + } + } + } + + # Effects run when a character enters a passive state after travel + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_enter_passive_state = { + #If you arrive early we just start early + if = { + limit = { + root = scope:host + } + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + + # Effects run when the activity completes after its last phase + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_complete = { + # Clean up character flag preventing visited vassals from starting other activities + if = { + limit = { + scope:host = this + } + scope:activity = { + every_in_list = { + variable = tour_vassals_to_visit + if = { + limit = { + has_character_flag = being_visited_on_tour + } + remove_character_flag = being_visited_on_tour + } + } + } + } + # Dynasty Legacy + if = { + limit = { + this = scope:host + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_3 } + } + # Apply our new modifiers. + ## Majesty. + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_majesty + } + } + } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_majesty_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + # Do we need to refresh the other modifiers? + hidden_effect = { + # Intimidation. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_intimidation_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_intimidation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + # Taxation. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_taxation_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_taxation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + } + } + ## Intimidation. + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_intimidation + } + } + } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_intimidation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + # Do we need to refresh the other modifiers? + hidden_effect = { + # Majesty. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_majesty_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_majesty_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + # Taxation. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_taxation_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_taxation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + } + } + ## Taxation. + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_taxation + } + } + } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_taxation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + # Do we need to refresh the other modifiers? + hidden_effect = { + # Majesty. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_majesty_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_majesty_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + # Intimidation. + if = { + limit = { has_character_modifier = ep2_activities_legacy_3_tours_intimidation_modifier } + add_character_modifier = { + modifier = ep2_activities_legacy_3_tours_intimidation_modifier + years = ep2_activities_legacy_3_tours_modifier_duration_value + } + } + } + } + } + host_has_taken_freebie_activity_effect = yes + + # Achievements. + if = { + limit = { + scope:host = this + } + scope:host = { + if = { + limit = { + highest_held_title_tier >= tier_empire + scope:activity = { + has_variable_list = imperial_march_achievement_list + variable_list_size = { + name = imperial_march_achievement_list + value >= achievement_imperial_march_achievement_powerful_vassal_tally_value + } + } + } + set_global_variable = { + name = finished_imperial_march_achievement + value = yes + } + } + if = { + limit = { + scope:activity = { + has_variable_list = the_grandest_tour_achievement_tally_list + variable_list_size = { + name = the_grandest_tour_achievement_tally_list + value >= 10 + } + } + } + set_global_variable = { + name = finished_the_grandest_tour_achievement + value = yes + } + } + } + } + } + + ### Graphics + map_entity = { + trigger = { + activity_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_feast_01_entity" + } + + map_entity = { + trigger = { + activity_location.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_indian_feast_01_entity" + } + + map_entity = "building_western_feast_01_entity" + + # Travel + background = { # Bridge + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { # Farmland, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:host.location != scope:activity.activity_location + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + + # Tour the Grounds + background = { #FP2 + trigger = { + has_current_phase = tour_phase_tour_grounds + OR = { + activity_location.culture ?= { has_building_gfx = iberian_building_gfx } + activity_location = { geographical_region = world_europe_west_iberia } + } + } + texture = "gfx/interface/illustrations/event_scenes/fp2_courtyard.dds" + environment = "environment_event_fp2_courtyard" + ambience = "event:/DLC/FP2/SFX/Events/courtyard" + } + + background = { #Indian Courtyard + trigger = { + has_current_phase = tour_phase_tour_grounds + activity_location ?= { + OR = { + culture = { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_courtyard_indian.dds" + environment = "environment_event_bp1_courtyard_indian" + ambience = "event:/SFX/Events/Backgrounds/castle_courtyard_western" + } + background = { #MENA Courtyard + trigger = { + has_current_phase = tour_phase_tour_grounds + activity_location ?= { + OR = { + culture = { has_graphical_iranian_culture_group_trigger = yes } + culture = { has_graphical_mena_culture_group_trigger = yes } + steppe_building_gfx_use_mena_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_courtyard_mena.dds" + environment = "environment_event_bp1_courtyard_mena" + ambience = "event:/SFX/Events/Backgrounds/castle_courtyard_western" + } + background = { #East Asian Courtyard + trigger = { + has_current_phase = tour_phase_tour_grounds + activity_location ?= { + OR = { + culture = { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_courtyard_asia.dds" + environment = "environment_tgp_courtyard_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_courtyard_asia" + } + + background = { #Fallback + trigger = { + has_current_phase = tour_phase_tour_grounds + } + texture = "gfx/interface/illustrations/event_scenes/courtyard.dds" + environment = "environment_event_courtyard" + ambience = "event:/SFX/Events/Backgrounds/castle_courtyard_western" + } + + # Hosted Dinner + background = { + trigger = { + has_current_phase = tour_phase_dinner + activity_location.county.holder = { + OR = { + government_has_flag = government_is_nomadic + AND = { + government_has_flag = government_is_tribal + culture ?= { has_building_gfx = steppe_building_gfx } + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_steppe.dds" + environment = "environment_steppe_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { # FP1 + trigger = { + has_current_phase = tour_phase_dinner + activity_location.culture = { has_building_gfx = norse_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_viking_feast.dds" + environment = "environment_event_fp1_viking_feast" + ambience = "event:/DLC/FP1/SFX/Events/event_viking_feast" + } + background = { #East Asia + trigger = { + has_current_phase = tour_phase_dinner + activity_location ?= { + OR = { + culture = { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_feast_asia.dds" + environment = "environment_tgp_feast_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_feast_asia" + } + background = { + trigger = { + has_current_phase = tour_phase_dinner + activity_location ?= { + OR = { + culture = { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_indian.dds" + environment = "environment_indian_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + has_current_phase = tour_phase_dinner + OR = { + activity_location.culture = { has_building_gfx = arabic_group_building_gfx } + activity_location.culture = { has_building_gfx = berber_group_building_gfx } + activity_location.culture = { has_building_gfx = iberian_building_gfx } + activity_location = { steppe_building_gfx_use_mena_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_mena.dds" + environment = "environment_mena_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + has_current_phase = tour_phase_dinner + activity_location.culture = { has_building_gfx = african_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_sub_saharan.dds" + environment = "environment_sub-saharan_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + background = { + trigger = { + has_current_phase = tour_phase_dinner + } + texture = "gfx/interface/illustrations/event_scenes/feast.dds" + environment = "environment_event_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + } + + # Cultural Festival + background = { + trigger = { + has_current_phase = tour_phase_cultural_festival + activity_location = { + is_coastal = yes + province_owner ?= { + government_has_flag = government_is_tribal + } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_docks_tribal.dds" + environment = "environment_event_bp1_docks_tribal" + ambience = "event:/SFX/Events/Backgrounds/docks_day" + } + background = { + trigger = { + has_current_phase = tour_phase_cultural_festival + activity_location = { + is_coastal = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/docks.dds" + environment = "environment_event_docks" + ambience = "event:/SFX/Events/Backgrounds/docks_day" + } + background = { #Eastern + trigger = { + has_current_phase = tour_phase_cultural_festival + activity_location = { + OR = { + geographical_region = graphical_mena + geographical_region = graphical_india + AND = { + geographical_region = world_europe_west_iberia + faith ?= { religion = religion:islam_religion } + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/market_east.dds" + environment = "environment_event_market_east" + ambience = "event:/SFX/Events/Backgrounds/town_market_middleeastern_day" + } + background = { #East Asia + trigger = { + has_current_phase = tour_phase_cultural_festival + activity_location.culture = {has_graphical_east_asia_culture_group_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_market_asia.dds" + environment = "environment_tgp_market_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_market_asia" + } + background = { #Steppe + trigger = { + has_current_phase = tour_phase_cultural_festival + activity_location.culture = { has_building_gfx = steppe_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_steppe.dds" + environment = "environment_steppe_feast" + ambience = "event:/DLC/EP2/SFX/Events/Backgrounds/evn_background_steppe" + } + background = { #Western (standard/fallback) + trigger = { + has_current_phase = tour_phase_cultural_festival + } + texture = "gfx/interface/illustrations/event_scenes/ep2_village_festival_western.dds" + environment = "environment_village_festival" + ambience = "event:/SFX/Events/Backgrounds/corner_of_tavern" + } + + # Tour end/conclusion + background = { # MPO - Nomads + trigger = { + activity_host = { + OR = { + government_has_flag = government_is_nomadic + AND = { + government_has_flag = government_is_tribal + culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + AND = { + is_landless_adventurer = yes + culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } + } + } + } + texture = "gfx/interface/illustrations/event_scenes/mpo_tent_interior_mongol.dds" + environment = "environment_mpo_tent_interior_mongol" + ambience = "event:/DLC/CE2/Events/Event_Images/mpo_tent_interior_mongol" + } + background = { #FP2 + trigger = { + OR = { + activity_location.culture ?= { has_building_gfx = iberian_building_gfx } + activity_location = { geographical_region = world_europe_west_iberia } + } + } + texture = "gfx/interface/illustrations/event_scenes/fp2_throneroom.dds" + environment = "environment_event_fp2_throneroom" + ambience = "event:/DLC/FP2/SFX/Events/throneroom" + } + + background = { #FP1 Tribal + trigger = { + activity_location.culture ?= { has_building_gfx = norse_building_gfx } + activity_location.barony.holder = { government_has_flag = government_is_tribal } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_throneroom_tribal.dds" + environment = "environment_event_fp1_throneroom_tribal" + ambience = "event:/DLC/FP1/SFX/Events/event_throneroom" + } + + background = { #Tribal + trigger = { activity_location.barony.holder = { should_use_tribal_realm_palace_graphics_trigger = yes } } + texture = "gfx/interface/illustrations/event_scenes/throneroom_tribal.dds" + environment = "environment_frontend_tribal_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_tribal_pagan" + } + + background = { #FP1 Non-Tribal + trigger = { + activity_location.culture ?= { has_building_gfx = norse_building_gfx } + activity_location.barony.holder = { NOT = { government_has_flag = government_is_tribal } } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_throneroom_nontribal.dds" + environment = "environment_event_fp1_throneroom_nontribal" + ambience = "event:/DLC/FP1/SFX/Events/event_throneroom_nontribal" + } + + background = { #iranian + trigger = { + activity_location.culture ?= { has_graphical_iranian_culture_group_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/fp3_throneroom.dds" + environment = "environment_event_temple" + ambience = "event:/SFX/Events/Backgrounds/throneroom_middleeastern_african" + } + + background = { #MENA + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_mena_culture_group_trigger = yes } + steppe_building_gfx_use_mena_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/throneroom_east.dds" + environment = "environment_frontend_east_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_middleeastern_african" + } + + background = { #India + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/throneroom_india.dds" + environment = "environment_frontend_india_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_middleeastern_african" + } + + background = { #Mediterranean + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_mediterranean_culture_group_trigger = yes } + steppe_building_gfx_use_mediterranean_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/throneroom_mediterranean.dds" + environment = "environment_frontend_mediterranean_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_mediterranean" + } + background = { #Eas Asia + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_asia_throne_room.dds" + environment = "environment_tgp_frontend_celestial_main" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_study_asia" + } + + background = { + texture = "gfx/interface/illustrations/event_scenes/throneroom_west.dds" + environment = "environment_frontend_west_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_western" + } + + activity_window_widgets = { + tour_conclusion_stops = "activity_plugin_widgets_conclusion" + tour_success_bar = "activity_plugin_widgets_summary" + } + + window_characters = { + tour_host = { + camera = camera_body_right + + effect = { + if = { + limit = { + OR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { survey } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_majesty + } + } + } + animation = { toast_goblet war_over_win personality_honorable thinking } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_intimidation + } + } + } + animation = { celebrate_dagger personality_cynical personality_vengeful scheme personality_callous } + } + triggered_animation = { + trigger = { + scope:activity = { + has_activity_option = { + category = special_type + option = tour_type_taxation + } + } + } + animation = { steward drink_goblet toast personality_greedy } + } + } + } + + travel_tour_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + visited_vassal = { + camera = camera_body_left_slight + + effect = { + every_in_list = { + variable = tour_vassals_to_visit + limit = { + is_alive = yes + location = scope:host.location + } + this ?= { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { idle drink_goblet toast personality_greedy happiness admiration personality_honorable personality_cynical personality_vengeful personality_callous + } + } + } + } + } +} diff --git a/common/activities/activity_types/wedding.txt b/common/activities/activity_types/wedding.txt new file mode 100644 index 00000000..8c9ee4a0 --- /dev/null +++ b/common/activities/activity_types/wedding.txt @@ -0,0 +1,4172 @@ +activity_wedding = { + is_shown = { + highest_held_title_tier > tier_barony + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + NOT = { has_variable = conqueror } + } + # DLC locked + has_dlc_feature = tours_and_tournaments + has_dlc_feature = advanced_activities + #Every other activity must be blocked until an uncrowned AI crowns themselves + trigger_if = { + limit = { + is_ai = yes + } + NOT = { + has_realm_law = uncrowned + } + } + } + + can_start_showing_failures_only = { + NOT = { is_activity_type_on_cooldown = activity_wedding } + is_available = yes + #You have promised a grand wedding to someone + custom_tooltip = { + text = wedding_need_to_promise + has_variable = promised_grand_wedding_marriage_countdown + exists = var:promised_grand_wedding_marriage_countdown.betrothed + } + trigger_if = { + limit = { + has_variable = promised_grand_wedding_marriage_countdown + exists = var:promised_grand_wedding_marriage_countdown.betrothed + } + custom_tooltip = { + text = wedding_need_to_be_valid + #That someone and their betrothed are alive and adults and can marry + var:promised_grand_wedding_marriage_countdown = { + is_valid_grand_wedding_special_guest_trigger = { OTHER_SPOUSE = root.var:promised_grand_wedding_marriage_countdown.betrothed } + } + var:promised_grand_wedding_marriage_countdown.betrothed = { + is_valid_grand_wedding_special_guest_trigger = { OTHER_SPOUSE = root.var:promised_grand_wedding_marriage_countdown } + } + } + } + } + + # Require a betrothal for player to start planning a wedding + can_always_plan = no + + is_valid = { + # A spouse dying will invalidate + scope:activity.special_guest:spouse_1 = { + is_alive = yes + } + trigger_if = { # weird workaround because the on_start is parsed after the is_valid the first time + limit = { exists = scope:activity.var:spouse_2_var } + OR = { + scope:activity.var:spouse_2_var = { + is_alive = yes + } + AND = { + scope:activity.var:spouse_2_var = { + is_alive = no + } + scope:activity = { #you're in a murder wedding + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + } + } + # Being imprisoned will invalidate + scope:activity.special_guest:spouse_1 = { + is_imprisoned = no + } + trigger_if = { # weird workaround because the on_start is parsed after the is_valid the first time + limit = { exists = scope:activity.var:spouse_2_var } + scope:activity.var:spouse_2_var = { + is_imprisoned = no + } + } + scope:host = { + # The host becoming unlanded will invalidate + OR = { + is_landed_or_landless_administrative = yes + has_government = landless_minority_government + } + # The new host being only a baron will invalidate + highest_held_title_tier >= tier_county + # Incapable host will invalidate + NOT = { is_incapable = yes } + } + # Saying no at the altar will invalidate + scope:activity = { + NOT = { has_variable = wedding_invalidated_said_no } + } + # If no one shows up + trigger_if = { + limit = { + scope:activity = { is_current_phase_active = yes } + } + has_attending_activity_guests = yes + } + # Emergency Invalidation: one of the spouses is not coming for some reason + trigger_if = { + limit = { + scope:activity = { + NOT = { has_variable = activity_travel_countdown } + } + exists = scope:activity.var:spouse_2_var + } + scope:activity.var:spouse_2_var = { + OR = { + AND = { + is_ai = yes + involved_activity ?= scope:activity + OR = { + location = scope:activity.activity_location + current_travel_plan ?= { + travel_plan_activity = scope:activity + } + } + } + is_ai = no + AND = { + is_alive = no + scope:activity = { #you're in a murder wedding + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + } + } + } + } + + on_invalidated = { + scope:host ?= { save_scope_as = previous_host } + scope:activity.special_guest:spouse_1 ?= { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 ?= { save_scope_as = spouse_2 } + # Set up the refund + scope:previous_host = { + set_variable = { + name = gwedding_gold_recoup_value + value = { + value = 0 + # For a base, add the total pot spent. + add = scope:activity.var:gwedding_refund_pot + # Then revise it down a little to account for some costs being irredeemable. + multiply = 0.75 + } + } + } + + if = { + limit = { + scope:host = { has_trait = incapable } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + scope:host = { + trigger_event = activity_system.0330 + } + every_attending_character = { + limit = { this != scope:host } + trigger_event = activity_system.0331 + } + } + + # Only the player as spouse_1 can say no at the altar, no reason to have events to notify the AI + else_if = { + limit = { + scope:activity = { + has_variable = wedding_invalidated_said_no + } + exists = scope:spouse_1 + scope:spouse_1 = { is_alive = yes } + } + scope:spouse_1 = { trigger_event = ep2_wedding.0152 } + } + + # One of the spouses was taken prisoner along the way + else_if = { + limit = { + OR = { + scope:spouse_1 ?= { is_imprisoned = yes } + scope:spouse_2 ?= { is_imprisoned = yes } + } + } + if = { + limit = { + scope:spouse_1 = { is_imprisoned = yes } + } + scope:spouse_1 = { save_scope_as = prisoner_spouse } + scope:spouse_2 = { save_scope_as = free_spouse } + } + else = { + scope:spouse_2 = { save_scope_as = prisoner_spouse } + scope:spouse_1 = { save_scope_as = free_spouse } + } + scope:prisoner_spouse = { trigger_event = ep2_wedding.0920 } + every_attending_character = { + limit = { + this != scope:prisoner_spouse + } + trigger_event = ep2_wedding.0921 + } + } + + # Host becomes unlanded + else_if = { + limit = { + scope:host = { + is_landed_or_landless_administrative = no + } + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + } + every_attending_character = { + trigger_event = activity_system.0320 + } + } + + # The new host doesn't meet the tier requirements + else_if = { + limit = { + scope:host = { highest_held_title_tier < tier_county } + } + every_attending_character = { + trigger_event = ep2_wedding.0999 + } + } + + # The activity failed because one of the spouses died + else_if = { + limit = { + OR = { + scope:activity.special_guest:spouse_1 = { + is_alive = no + } + AND = { + scope:activity.var:spouse_2_var ?= { + is_alive = no + } + scope:activity = { #you're not in a murder wedding + has_activity_option = { + category = special_type + option = wedding_type_normal + } + } + } + } + } + if = { + limit = { + scope:previous_host = { + is_alive = yes + } + } + scope:previous_host = { + # Set up the refund + set_variable = { + name = gwedding_gold_recoup_value + value = { + value = 0 + # For a base, add the total pot spent. + add = scope:activity.var:gwedding_refund_pot + # Then revise it down a little to account for some costs being irredeemable. + multiply = 0.75 + } + } + } + } + # The host was one of the spouses and died + else = { + scope:previous_host.player_heir = { + # Set up the refund + set_variable = { + name = gwedding_gold_recoup_value + value = { + value = 0 + # For a base, add the total pot spent. + add = scope:activity.var:gwedding_refund_pot + # Then revise it down a little to account for some costs being irredeemable. + multiply = 0.75 + } + } + } + } + # Special event for the surviving spouse + if = { + limit = { + scope:spouse_1 = { + is_alive = yes + } + } + scope:spouse_2 = { save_scope_as = dead_spouse } + scope:spouse_1 = { + trigger_event = ep2_wedding.0910 + } + } + else_if = { + limit = { + scope:spouse_1 = { + is_alive = no + } + } + scope:spouse_1 = { save_scope_as = dead_spouse } + scope:spouse_2 = { + trigger_event = ep2_wedding.0910 + } + } + # Event for all other attending characters, including the host + scope:activity = { + every_attending_character = { + limit = { + NOR = { + this = scope:spouse_1 + this = scope:spouse_2 + } + } + trigger_event = ep2_wedding.0900 + } + } + # If the host/spouse died, notify the heir if somewhere else + if = { + limit = { + scope:previous_host = { + is_alive = no + player_heir = { + NOT = { involved_activity ?= scope:activity } + } + } + } + scope:previous_host.player_heir = { + trigger_event = ep2_wedding.0915 + } + } + } + # Emergency Invalidation: one of the spouses is not coming for some reason + else_if = { + limit = { + scope:activity = { + NOT = { has_variable = activity_travel_countdown } + } + scope:activity.var:spouse_2_var ?= { + NOR = { + is_ai = yes + involved_activity ?= scope:activity + location = scope:activity.activity_location + current_travel_plan ?= { + travel_plan_activity = scope:activity + } + } + } + } + scope:activity.var:spouse_2_var = { save_scope_as = missing_spouse } + scope:activity.special_guest:spouse_1 = { save_scope_as = other_spouse } + scope:activity = { + every_attending_character = { + trigger_event = ep2_wedding.0997 + } + } + } + # Fallback Invalidation + else = { + if = { + limit = { + scope:spouse_1 ?= { + is_betrothed = yes + } + exists = scope:spouse_2 + } + scope:spouse_1 = { + break_betrothal = scope:spouse_2 + } + } + scope:activity = { + every_attending_character = { + trigger_event = ep2_wedding.0998 + } + } + } + #Accolades' modifiers' removal + if = { + limit = { + scope:activity = { + any_attending_character = { + has_character_modifier = accolade_charmer_party_modifier + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_character_modifier = accolade_charmer_party_modifier + } + remove_character_modifier = accolade_charmer_party_modifier + } + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + has_character_modifier = accolade_charmer_party_high_modifier + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_character_modifier = accolade_charmer_party_high_modifier + } + remove_character_modifier = accolade_charmer_party_high_modifier + } + } + } + if = { # No one shows up + limit = { + has_attending_activity_guests = no + } + scope:activity = { + activity_type = { save_scope_as = activity_type } + activity_location = { save_scope_as = location } + } + scope:host = { trigger_event = activity_system.0100 } + } + #Get rid of temporary modifiers + if = { + limit = { + scope:activity = { + any_attending_character = { + has_character_modifier = wedding_jitters + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_character_modifier = wedding_jitters + } + remove_character_modifier = wedding_jitters + } + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + has_character_modifier = wedding_confident_groom + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_character_modifier = wedding_confident_groom + } + remove_character_modifier = wedding_confident_groom + } + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + has_character_modifier = wedding_confident_bride + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_character_modifier = wedding_confident_bride + } + remove_character_modifier = wedding_confident_bride + } + } + } + + if = { + limit = { exists = scope:officiant } + scope:officiant = { + if = { + limit = { has_character_flag = need_priest_outfit } + remove_character_flag = need_priest_outfit + } + if = { + limit = { has_character_flag = officiant } + remove_character_flag = officiant + } + } + } + scope:host = { #In case of bloody wedding, run the variable cleanup event + trigger_event = { #cleans up the variables with enough delay for the guest events + id = ep2_wedding.0958 + days = 7 + } + } + + } + + on_host_death = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + # Make the player heir the new host if attending (unless it was the host's wedding!) + if = { + limit = { + exists = scope:host.player_heir + scope:host.player_heir = { + involved_activity = scope:activity + } + scope:host = { + NOR = { + this = scope:spouse_1 + this = scope:spouse_2 + } + } + } + scope:host.player_heir = { save_scope_as = new_host } + } + # Otherwise, spouse_1 takes over + else = { + scope:spouse_1 = { save_scope_as = new_host } + } + # If spouse_1 is landless, it will invalidate to activity_system.0320 according to is_valid criteria. + # If spouse_1 is only a baron, it will invalidate to ep2_wedding.0999 according to is_valid_criteria. + wedding_update_hosting_variable_effect = yes + + scope:activity = { set_activity_host = scope:new_host } + scope:new_host = { + trigger_event = { + id = activity_system.0080 + days = 1 + } + } + } + + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + add = { + value = 1000 + desc = "Wedding functional, always make weddings!" + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 4 + duchy = 4 + kingdom = 4 + empire = 4 + hegemony = 4 + } + + ai_will_select_province = { + value = 0 + add = { + value = 30 + desc = "Base test value" + } + # Buildings + if = { + limit = { has_building = royal_garden_01 } + add = { + value = 30 + desc = "Royal Garden" + } + } + else_if = { + limit = { has_building = royal_garden_02 } + add = { + value = 50 + desc = "Royal Garden" + } + } + else_if = { + limit = { has_building = royal_garden_03 } + add = { + value = 80 + desc = "Royal Garden" + } + } + if = { + limit = { has_building = leisure_palace_01 } + add = { + value = 50 + desc = "Leisure Palace" + } + } + else_if = { + limit = { has_building = leisure_palace_02 } + add = { + value = 80 + desc = "Leisure Palace" + } + } + else_if = { + limit = { has_building = leisure_palace_03 } + add = { + value = 100 + desc = "Leisure Palace" + } + } + else_if = { + limit = { has_building = pleasure_dome } + add = { + value = 100 + desc = "Pleasure Dome" + } + } + if = { + limit = { barony = { is_holy_site_of = scope:host.faith } } + add = { + value = 50 + desc = "Holy Site" + } + } + } + + max_province_icons = 5 + + province_score = { + value = 75 + # Capital + if = { + limit = { + this = scope:host.capital_province + } + add = 75 + } + # Buildings + if = { + limit = { has_building = royal_garden_01 } + add = 50 + } + else_if = { + limit = { has_building = royal_garden_02 } + add = 75 + } + else_if = { + limit = { has_building = royal_garden_03 } + add = 100 + } + if = { + limit = { has_building = leisure_palace_01 } + add = 75 + } + else_if = { + limit = { has_building = leisure_palace_02 } + add = 100 + } + else_if = { + limit = { has_building = leisure_palace_03 } + add = 125 + } + else_if = { + limit = { has_building = pleasure_dome } + add = 125 + } + # Holy Site + if = { + limit = { barony = { is_holy_site_of = scope:host.faith } } + add = 75 + } + } + + province_description = { + triggered_desc = { + trigger = { this = scope:host.capital_province } + desc = province_desc_wedding_capital + } + triggered_desc = { + trigger = { has_building = royal_garden_01 } + desc = province_desc_wedding_gardens + } + triggered_desc = { + trigger = { has_building = royal_garden_02 } + desc = province_desc_wedding_gardens_2 + } + triggered_desc = { + trigger = { has_building = royal_garden_03 } + desc = province_desc_wedding_gardens_3 + } + triggered_desc = { + trigger = { has_building = leisure_palace_01 } + desc = province_desc_wedding_palace + } + triggered_desc = { + trigger = { has_building = leisure_palace_02 } + desc = province_desc_wedding_palace_2 + } + triggered_desc = { + trigger = { has_building = leisure_palace_03 } + desc = province_desc_wedding_palace_3 + } + triggered_desc = { + trigger = { has_building = pleasure_dome } + desc = province_desc_wedding_pleasure_dome + } + triggered_desc = { + trigger = { barony = { is_holy_site_of = scope:host.faith } } + desc = province_desc_wedding_holy_site + } + } + + ################### + # PARAMETERS + ################### + + activity_group_type = grand + + max_guest_arrival_delay_time = { months = 8 } + + province_filter = domicile_domain + ai_province_filter = capital + + cost = { + gold = { + add = { + add = { + value = root.base_wedding_cost + desc = WEDDING_BASE_COST + } + add = { + value = root.base_wedding_cost + multiply = activity_cost_scale_by_era + subtract = root.base_wedding_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + root.dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = root.base_wedding_cost + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + # Some people get one free. + if = { + limit = { + root = { + factor_zero_if_entitled_to_freebie_activity_trigger = yes + } + } + multiply = { + value = 0 + desc = ep2_activities_legacy_5_name + } + } + } + } + } + + ui_predicted_cost = { + # All costs are balanced on County/Early Era starting point + gold = { + # Base Cost + add = { + value = root.base_wedding_cost + desc = WEDDING_BASE_COST + # Scale by Era + multiply = { + value = activity_cost_scale_by_era + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + root.dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + # OPTIONS + add = { # Entertainment + add = { # Calculate the average of the three option costs + value = 0 + add = 20 # Bad Option Cost + add = 60 # Normal Option Cost + add = 180 # Good Option Cost + # Divide by the total number of option levels so we get an average option cost + divide = 3 + # Scale option costs by era + multiply = activity_cost_scale_by_era + } + if = { + limit = { + root.dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + add = { # Food + value = { # Calculate the average of the three option costs + value = 0 + add = 20 # Bad Option Cost + add = 60 # Normal Option Cost + add = 180 # Good Option Cost + # Scale option costs by era + multiply = activity_cost_scale_by_era + # Divide by the total number of option levels so we get an average option cost + divide = 3 + } + if = { + limit = { + root.dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + add = { # Decoration + value = { # Calculate the average of the three option costs + value = 0 + add = 40 # Bad Option Cost + add = 120 # Normal Option Cost + add = 360 # Good Option Cost + # Scale option costs by era + multiply = activity_cost_scale_by_era + # Divide by the total number of option levels so we get an average option cost + divide = 3 + } + if = { + limit = { + root.dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + if = { + limit = { + confederation ?= { has_cohesion_level_parameter = any_member_activity_cost_reduced } + } + multiply = { + value = 0.9 + desc = CB_COHESION_PARAMETER_DISCOUNT + } + } + # Make it a multiple of 5 (rounded up) + divide = 5 + ceiling = yes + multiply = 5 + } + } + } + + ################### + # OPTIONS + ################### + + options = { + # Wedding Types + special_type = { + # Regular Wedding + wedding_type_normal = { + default = yes + ai_will_do = { + value = 100 + } + } + # Bloody Wedding + wedding_type_bloody = { + cost = { + gold = { + add = { + add = { + value = root.base_wedding_cost + multiply = 4 + desc = bloody_wedding_activity_cost_desc + } + add = { + value = root.base_wedding_cost + multiply = activity_cost_scale_by_era + subtract = root.base_wedding_cost + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = root.base_wedding_cost + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + if = { + limit = { + root = { is_ai = yes } + } + multiply = 0 + } + } + } + is_shown = {} + + is_valid = { + # Do you have the skill to pull it off? + has_perk = accomplished_forger_perk + custom_tooltip = { + text = wedding_type_murder_valid_tt + NOT = { has_variable = recent_red_wedding_var } #15 years cooldown + } + } + blocked_intents = { murder_attendee_intent woo_attendee_intent diplomatic_intent matchmaking_intent } + + ai_will_do = { + value = 0 + if = { + limit = { + has_trait = torturer + NOT = { has_trait = zealous } + can_make_expensive_purchase_trigger = { PRICE = real_wedding_cost_root_scope } + } + add = 30 + } + if = { + limit = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arbitrary + has_trait = vengeful + } + NOT = { has_trait = zealous } + can_make_expensive_purchase_trigger = { PRICE = real_wedding_cost_root_scope_plus_50 } + } + add = 15 + } + if = { + limit = { + OR = { + has_trait = just + has_trait = honest + has_trait = compassionate + has_trait = generous + has_trait = forgiving + has_trait = calm + has_trait = zealous + } + } + subtract = 50 + } + if = { + limit = { + this = faith.religious_head + NOT = { has_trait = torturer } + faith = { + NOR = { + has_doctrine_parameter = gruesome_festivals_active + has_doctrine_parameter = human_sacrifice_active + } + } + } + add = -100 + } + if = { + limit = { + this = faith.religious_head + NOT = { has_trait = compassionate } + faith = { + OR = { + has_doctrine_parameter = gruesome_festivals_active + has_doctrine_parameter = human_sacrifice_active + } + } + } + add = 50 + } + } + } + } + wedding_option_entertainment = { + wedding_entertainment_bad = { + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + } + cost = { + gold = { + add = { + desc = wedding_entertainment_bad + add = { + value = 20 + desc = wedding_entertainment_bad + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 20 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 20 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_entertainment_normal = { + is_valid = { + } + default = yes + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + } + cost = { + gold = { + add = { + desc = wedding_entertainment_normal + add = { + value = 60 + desc = wedding_entertainment_normal + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal opinion + wedding_normal_option_effect = yes + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 60 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 60 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_entertainment_good = { + is_valid = { + } + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + } + cost = { + gold = { + add = { + desc = wedding_entertainment_good + add = { + value = 180 + desc = wedding_entertainment_good + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal Opinion and Option bonuses + wedding_good_option_effect = yes + scope:host = { + if = { + limit = { + has_trait = lifestyle_reveler + } + add_trait_xp = { + trait = lifestyle_reveler + value = 5 + } + } + else = { + add_trait = lifestyle_reveler + } + } + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 180 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 180 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + } + + wedding_option_food = { + wedding_food_bad = { + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + } + cost = { + gold = { + add = { + desc = wedding_food_bad + add = { + value = 20 + desc = wedding_food_bad + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + subtract = 20 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 20 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 20 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 20 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_food_normal = { + is_valid = { + } + default = yes + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + } + cost = { + gold = { + add = { + desc = wedding_food_normal + add = { + value = 60 + desc = wedding_food_normal + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + subtract = 60 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 60 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal Opinion and Option bonuses + wedding_normal_option_effect = yes + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 60 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 60 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_food_good = { + is_valid = { + + } + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + } + cost = { + gold = { + add = { + desc = wedding_food_good + add = { + value = 180 + desc = wedding_food_good + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + subtract = 180 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 180 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal Opinion and Option bonuses + wedding_good_option_effect = yes + scope:host = { + if = { + limit = { + has_royal_court = yes + has_dlc_feature = royal_court + } + add_character_modifier = { + modifier = wedding_lavish_food_royal_modifier + years = 5 + } + } + else = { + add_character_modifier = { + modifier = wedding_lavish_food_modifier + years = 5 + } + } + } + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 180 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 180 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + } + + wedding_option_decoration = { + wedding_decoration_bad = { + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_cheap_expense_value + } + cost = { + gold = { + add = { + desc = wedding_decoration_bad + add = { + value = 40 + desc = wedding_decoration_bad + } + add = { + value = 40 + multiply = activity_cost_scale_by_era + subtract = 40 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 40 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 40 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 40 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_decoration_normal = { + is_valid = { + } + default = yes + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_middling_expense_value + } + cost = { + gold = { + add = { + desc = wedding_decoration_normal + add = { + value = 120 + desc = wedding_decoration_normal + } + add = { + value = 120 + multiply = activity_cost_scale_by_era + subtract = 120 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 120 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal Opinion and Option bonuses + wedding_normal_option_effect = yes + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 120 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 120 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + + wedding_decoration_good = { + is_valid = { + + } + # desc is only shown in debug AI watch window + ai_will_do = { + value = 0 + # Financial preference. + add = activity_option_likes_heavy_expense_value + } + cost = { + gold = { + add = { + desc = wedding_decoration_good + add = { + value = 360 + desc = wedding_decoration_good + } + add = { + value = 360 + multiply = activity_cost_scale_by_era + subtract = 360 + desc = activity_cost_scale_by_era_desc + } + if = { + limit = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + add = { + value = 360 + multiply = activity_cost_scale_by_era + multiply = ep2_activities_legacy_2_grand_weddings_discount_value + multiply = -1 + desc = ep2_activities_legacy_2_name + } + } + if = { + limit = { + has_perk = journey_planner_perk + } + multiply = { + value = voyager_journey_planner_value + desc = journey_planner_perk_name + } + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + desc = ep2_activities_legacy_5_name + } + } + if = { + limit = { + is_ai = yes + } + multiply = 0 + } + } + } + on_start = { + # Vassal Opinion and Option bonuses + wedding_good_option_effect = yes + scope:host = { + add_prestige = medium_prestige_gain + } + # keep synced with the cost of the option + if = { + limit = { # if you don't get a freebie or a discount, we add the discounted cost + scope:host = { + factor_zero_if_entitled_to_freebie_activity_trigger = no + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_2 } + } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 360 + multiply = scope:host.activity_cost_scale_by_era + multiply = { + value = ep2_activities_legacy_2_grand_weddings_discount_value + desc = ep2_activities_legacy_track + } + } + } + } + else_if = { + limit = { # otherwise, as long as no freebie, we add the full cost + scope:host = { factor_zero_if_entitled_to_freebie_activity_trigger = no } + } + change_variable = { + name = gwedding_refund_pot + add = { + value = 360 + multiply = scope:host.activity_cost_scale_by_era + desc = wedding_entertainment_normal + } + } + } + } + } + } + } + + special_option_category = special_type + + ################### + # PHASES + ################### + + phases = { + + wedding_phase_ceremony = { + is_predefined = yes + + order = 1 + + is_shown = { + always = yes + } + + on_phase_active = { + # Fires for every attendee + if = { #Record whether the couple were already lovers before the ceremony + limit = { + scope:activity.special_guest:spouse_1 = { + any_relation = { + type = lover + this = scope:activity.special_guest:spouse_2 + } + } + } + scope:activity = { + set_variable = { + name = lovers_wedding + value = yes + } + } + } + if = { + limit = { + root = scope:host + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + scope:host = { trigger_event = ep2_wedding.0101 } + } + else = { trigger_event = ep2_wedding.0100 } + # Accolade stuff + if = { + limit = { + this = scope:host + any_active_accolade = { + accolade_parameter = accolade_party_fertility + } + } + add_character_modifier = { + modifier = accolade_charmer_party_modifier + } + } + if = { + limit = { + this = scope:host + any_active_accolade = { + accolade_parameter = accolade_party_fertility_high + } + } + add_character_modifier = { + modifier = accolade_charmer_party_high_modifier + } + } + if = { + limit = { + exists = scope:host.faith.religious_head + scope:host.faith.religious_head = { + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + scope:activity = { + any_attending_character = { + this = scope:host.faith.religious_head + } + } + } + scope:host.faith.religious_head = { save_scope_as = officiant } + } + else_if = { + limit = { + scope:host != scope:activity.special_guest:spouse_1 + } + scope:host = { save_scope_as = officiant } + } + else_if = { + limit = { + exists = scope:host.cp:councillor_court_chaplain + scope:activity = { + any_attending_character = { + this = scope:host.cp:councillor_court_chaplain + } + } + } + scope:host.cp:councillor_court_chaplain = { save_scope_as = officiant } + } + else_if = { + limit = { + NOT = { scope:host.faith = { has_doctrine = doctrine_theocracy_lay_clergy } } + } + if = { + limit = { + NOT = { + scope:activity = { + any_attending_character = { + is_ai = no + } + } + } + any_pool_character = { + province = scope:activity.activity_location + is_physically_able_ai_adult = yes + faith = scope:host.faith + can_be_clergy_due_to_gender_trigger = yes + } + } + random_pool_character = { + province = scope:activity.activity_location + limit = { + is_physically_able_ai_adult = yes + faith = scope:host.faith + can_be_clergy_due_to_gender_trigger = yes + } + save_scope_as = officiant + } + } + else = { + create_character = { + template = priest_character_template + dynasty = none + location = scope:host.location + save_scope_as = officiant + } + } + } + scope:officiant ?= { + add_character_flag = officiant + } + # Fires the conclusion events for every attendee, and advance to next phase, with a delay of 2 months + trigger_event = { + on_action = wedding_ceremony_ending_event_pulse + days = 60 + } + } + + on_weekly_pulse = { + # Fires for every attendee + trigger_event = { on_action = wedding_ceremony_ongoing_event_pulse } + } + + ai_will_do = { + value = 100 + } + } + + wedding_phase_banquet = { + is_predefined = yes + + order = 2 + + on_enter_phase = { + if = { + limit = { this = scope:host } + # No passive state for the toast, just jump right into it + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + on_phase_active = { + # Fires for every attendee + trigger_event = ep2_wedding.0200 + + if = { + limit = { + root = scope:host + } + + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + + if = { #if you have the wedding night kill we progress to that + limit = { + has_variable = bloody_wedding_murder_spouse_var + } + scope:activity = { progress_activity_phase_after = { months = 2 } } + } + + else = { + # MASSACRE event + trigger_event = { + on_action = wedding_bloody_banquet_ongoing_event_pulse + days = 60 + } + } + } + else = { + scope:activity = { progress_activity_phase_after = { months = 2 } } + } + } + } + + on_end = { + if = { + limit = { this = scope:host } + ep3_dynasty_legacy_add_legitimacy_effect = yes + } + } + + on_weekly_pulse = { + # Fires for every attendee + trigger_event = { on_action = wedding_banquet_ongoing_event_pulse } + } + + ai_will_do = { + value = 100 + } + } + + wedding_phase_wnight = { + is_predefined = yes + + order = 3 + + on_enter_phase = { + if = { + limit = { this = scope:host } + # No passive state for the toast, just jump right into it + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + on_phase_active = { + # Fires for every attendee + # Regular Weddings - Murder Wedding won't get this far unless you're trying to kill your own spouse during the wnight + if = { + limit = { + OR = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_normal + } + } + scope:host = { has_variable = bloody_wedding_murder_spouse_var } + } + } + trigger_event = ep2_wedding.0300 + } + if = { + limit = { this = scope:host } + scope:activity = { progress_activity_phase_after = { months = 1 } } + } + } + + on_weekly_pulse = { + # Bloody Wedding only has a murder event, no regular wnight + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + if = { + limit = { + scope:host = scope:activity.special_guest:spouse_1 #if you're the spouse + scope:host = { has_variable = bloody_wedding_murder_spouse_var } #and you've chosen to kill them during the wedding night + } + scope:host = { trigger_event = ep2_wedding.3060 } + } + } + # For a regular wedding + # Fires only for the spouses + if = { + limit = { + OR = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_normal + } + } + scope:host = { has_variable = bloody_wedding_backed_down_var } + } + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + trigger_event = { + on_action = wedding_wnight_spouse_event_pulse + } + } + # Fires for the guests + else_if = { + limit = { + OR = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_normal + } + } + scope:host = { has_variable = bloody_wedding_backed_down_var } + } + } + trigger_event = { on_action = wedding_wnight_ongoing_event_pulse } + } + } + + ai_will_do = { + value = 100 + } + } + } + + ################### + # GUEST HANDLING + ################### + + max_guests = 80 + + guest_invite_rules = { + rules = { + 2 = activity_invite_rule_rivals + 2 = activity_invite_rule_extended_family + 2 = activity_invite_rule_lovers + 2 = activity_invite_rule_potential_lovers + 1 = activity_invite_rule_hof + + # MP + 6 = activity_invite_mp + } + defaults = { + 2 = activity_invite_rule_friends + 2 = activity_invite_rule_potential_friends + 1 = activity_invite_rule_close_family + 1 = activity_invite_rule_tributaries + 2 = activity_invite_rule_vassals + 1 = activity_invite_rule_confederates + 2 = activity_invite_rule_fellow_vassals + 3 = activity_invite_rule_courtiers + 4 = activity_invite_rule_guests + 2 = activity_invite_rule_all_lieges + 1 = activity_invite_spouses_close_family + 2 = activity_invite_spouses_extended_family + 2 = activity_invite_neighbouring_rulers + 1 = activity_invite_rule_landless_adventurers_restricted_range + } + } + + can_be_activity_guest = { + is_adult = yes + OR = { + in_diplomatic_range = scope:host + has_been_promised_grand_wedding = yes + } + } + + host_intents = { + intents = { reduce_stress_intent murder_attendee_intent woo_attendee_intent diplomatic_intent matchmaking_intent spread_legend_intent legitimacy_intent } + default = reduce_stress_intent + } + + guest_intents = { + intents = { reduce_stress_intent murder_attendee_intent woo_attendee_intent diplomatic_intent banquet_mischief_intent spread_legend_intent legitimacy_intent } + default = reduce_stress_intent + } + + guest_join_chance = { + base = 10 + base_activity_modifier = yes + + # Scripted Modifiers + activity_guest_shared_ai_accept_modifier = yes + activity_guest_wedding_ai_accept_modifier = yes + + # Master of Revels Accolade increasing invite acceptance + modifier = { + scope:host = { + any_active_accolade = { + accolade_parameter = acclaimed_knight_feast_wedding_invite_acceptance_bonus + } + } + add = accolade_feast_wedding_invite_acceptance_value + } + } + + special_guests = { + spouse_1 = { + is_required = yes + + # You can only promise a grand wedding to one character, so we can just directly grab them + select_character = { + var:promised_grand_wedding_marriage_countdown = { + save_scope_as = character + } + } + + can_pick = { + is_valid_grand_wedding_special_guest_trigger = { OTHER_SPOUSE = scope:spouse_2 } + OR = { + AND = { + is_male = yes + patrilinear_betrothal = yes + } + AND = { + is_female = yes + matrilinear_betrothal = yes + } + } + } + on_invite = { + if = { + limit = { + is_close_or_extended_family_of = scope:host + this != scope:host + dynasty = scope:host.dynasty + } + add_opinion = { + target = scope:host + modifier = organized_my_wedding_opinion + } + } + } + } + + spouse_2 = { + is_required = yes + + select_character = { + var:promised_grand_wedding_marriage_countdown.betrothed = { + save_scope_as = character + } + } + + can_pick = { + is_valid_grand_wedding_special_guest_trigger = { OTHER_SPOUSE = scope:spouse_1 } + betrothed = { + OR = { + AND = { + is_male = yes + patrilinear_betrothal = yes + } + AND = { + is_female = yes + matrilinear_betrothal = yes + } + } + } + } + on_invite = { + if = { + limit = { + is_close_or_extended_family_of = scope:host + this != scope:host + dynasty = scope:host.dynasty + } + add_opinion = { + target = scope:host + modifier = organized_my_wedding_opinion + } + } + } + } + } + + travel_entourage_selection = { + weight = standard_travel_entourage_additions + max = 10 + invite_rule_order = 3 + } + + ################### + # ACTIVITY-SPECIFIC PULSES + ################### + + pulse_actions = { + entries = { excellent_food hook_trusting_guest dynasty_blessing cultural_acceptance marriage_reflection royal_gift gossip_with_guests contact_network wedding_gift bonding_spouse_family received_flowers admired_venue knight_praised seductive_exchange impressed_courtly_vassal music_performance poetry_performance floral_exhibit spouse_impressed spouse_skill_diplomacy_improves spouse_gives_host_prestige spouse_manages_feast_splendidly spouse_impresses_clergy spouse_gives_hook relation_gains_friend lauded_food children_bonding guest_impressed_by_court_artifact guest_chokes_on_bone guest_brawl friend_lauds_efforts courtly_vassals_appeased spouse_insults_host host_gains_diplo_xp host_gains_steward_xp host_gains_intrigue_xp ridiculed_food guest_tells_fantastic_joke } + chance_of_no_event = 3 + } + + on_start = { + #if = { # Activity count debugging, left in for QA purposes + # limit = { + # debug_only = yes + # } + # if = { + # limit = { + # NOT = { + # exists = global_var:wedding_count + # } + # } + # set_global_variable = { + # name = wedding_count + # value = 1 + # } + # } + # else = { + # change_global_variable = { + # name = wedding_count + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_county } + # NOT = { + # exists = global_var:wedding_c + # } + # } + # set_global_variable = { + # name = wedding_c + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_county } + # } + # change_global_variable = { + # name = wedding_c + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_duchy } + # NOT = { + # exists = global_var:wedding_d + # } + # } + # set_global_variable = { + # name = wedding_d + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_duchy } + # } + # change_global_variable = { + # name = wedding_d + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_kingdom } + # NOT = { + # exists = global_var:wedding_k + # } + # } + # set_global_variable = { + # name = wedding_k + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_kingdom } + # } + # change_global_variable = { + # name = wedding_k + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_empire } + # NOT = { + # exists = global_var:wedding_e + # } + # } + # set_global_variable = { + # name = wedding_e + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host = { highest_held_title_tier = tier_empire } + # } + # change_global_variable = { + # name = wedding_e + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_middle_east } + # NOT = { + # exists = global_var:wedding_world_middle_east + # } + # } + # set_global_variable = { + # name = wedding_world_middle_east + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_middle_east } + # } + # change_global_variable = { + # name = wedding_world_middle_east + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_europe } + # NOT = { + # exists = global_var:wedding_world_europe + # } + # } + # set_global_variable = { + # name = wedding_world_europe + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_europe } + # } + # change_global_variable = { + # name = wedding_world_europe + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_steppe } + # NOT = { + # exists = global_var:wedding_world_steppe + # } + # } + # set_global_variable = { + # name = wedding_world_steppe + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_steppe } + # } + # change_global_variable = { + # name = wedding_world_steppe + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_africa } + # NOT = { + # exists = global_var:wedding_world_africa + # } + # } + # set_global_variable = { + # name = wedding_world_africa + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_africa } + # } + # change_global_variable = { + # name = wedding_world_africa + # add = 1 + # } + # } + # + # if = { + # limit = { + # scope:host.location = { geographical_region = world_india } + # NOT = { + # exists = global_var:wedding_world_india + # } + # } + # set_global_variable = { + # name = wedding_world_india + # value = 1 + # } + # } + # else_if = { + # limit = { + # scope:host.location = { geographical_region = world_india } + # } + # change_global_variable = { + # name = wedding_world_india + # add = 1 + # } + # } + #} + # Keep synced with the wedding Base cost + set_variable = { + name = gwedding_refund_pot + value = scope:host.base_wedding_cost + } + scope:activity = { #we save the spouse_2 as a variable in case we kill them + set_variable = { + name = spouse_2_var + value = special_guest:spouse_2 + } + # we save a countdown to check that no spouse has gotten stuck in odd places - don't ask + set_variable = { + name = activity_travel_countdown + days = 15 + } + } + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + } + scope:host = { + set_variable = { + name = recent_red_wedding_var + years = 15 + } + } + if = { + limit = { + OR = { + scope:activity.special_guest:spouse_2 = scope:host.liege + scope:host.liege = { + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + this != scope:host + is_close_family_or_spouse_of_root_trigger = no + } + } + } + scope:host = { set_variable = murder_feast_liege_var } + } + if = { + limit = { + OR = { + scope:activity.special_guest:spouse_2 = scope:host.faith.religious_head + scope:host.faith.religious_head = { + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + this != scope:host + NOT = { is_close_family_or_spouse_trigger = { CHARACTER = scope:host } } + } + } + } + scope:host = { set_variable = murder_feast_head_of_faith_var } + } + } + #fires hostage reunion event, if hostage giver is also present + every_attending_character = { + limit = { + is_hostage_warden = yes + has_bp2_dlc_trigger = yes + this != scope:host + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + } + + # Effects run when a character enters a travel state + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_enter_travel_state = { + } + + # Effects run when a character enters a passive state after travel + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_enter_passive_state = { + + } + + # Effects run during the activity event pulse for characters in the passive state + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_passive_state_pulse = { + + } + + # Effects run when entering an active phase of the activity + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_enter_active_state = { + surveyor_no_stone_unturned_perk_effect = yes + } + + # Effects run during the activity event pulse for characters in the active state + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_active_state_pulse = { + # add active state events here + # maybe some way to check if this is the first active state? + } + + # Effects run when the activity completes after its last phase + # root = character in this phase + # scope:activity = the activity + # scope:host = host of the activity + on_complete = { + # Run conclusion stuff here + scope:host = { + save_scope_as = host + } + scope:activity = { + activity_location = { + save_scope_as = wedding_venue + } + special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + } + # Remove the wedding reward for Bloody Weddings + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + activity_location.county = { + has_county_modifier = ruler_married_here_county_modifier + } + } + } + scope:activity.activity_location.county = { + remove_county_modifier = ruler_married_here_county_modifier + } + } + # Clean up for murder host / guests + if = { + limit = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + scope:host = { + #You haven't failed/backed down + NOR = { + has_variable = bloody_wedding_backed_down_var + has_variable = bloody_murder_fail + } + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + if = { + limit = { + this = scope:host + } + # For the murderous host + scope:host = { + trigger_event = ep2_wedding.0301 #this triggers event ep2_wedding.0955 + disburse_murder_wedding_host_rewards = yes + } + } + else = { + # For the survivors - realize you're in a Red Wedding + scope:activity = { + every_attending_character = { + limit = { + this != scope:host + } + trigger_event = ep2_wedding.0302 #includes special loc for spouse_1 if not host + } + } + } + } + # Fires for every attendee + # Accolade stuff + if = { + limit = { + this = scope:host + has_character_modifier = accolade_charmer_party_modifier + } + remove_character_modifier = accolade_charmer_party_modifier + } + if = { + limit = { + this = scope:host + has_character_modifier = accolade_charmer_party_high_modifier + } + remove_character_modifier = accolade_charmer_party_high_modifier + } + + # Rewards for Bloody Weddings given out in event ep2_wedding.0955 + + # Rewards for Normal Weddings + if = { + limit = { + OR = { + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_normal + } + } + scope:host = { has_variable = bloody_wedding_backed_down_var } #you've backed down from a Red Wedding + } + } + if = { + limit = { + root = scope:host + } + root = { disburse_wedding_activity_rewards = yes } + if = { + limit = { + scope:host = scope:spouse_1 + } + root = { disburse_wedding_spouse_host_activity_rewards = yes } + scope:spouse_2 = { disburse_wedding_spouse_activity_rewards = yes } + } + else_if = { + limit = { + scope:host = scope:spouse_2 + } + root = { disburse_wedding_spouse_host_activity_rewards = yes } + scope:spouse_1 = { disburse_wedding_spouse_activity_rewards = yes } + } + # if the host is not a spouse, we disburse the regular spouse rewards to both spouses + else_if = { + limit = { + root = scope:host + NOR = { + scope:host = scope:spouse_1 + scope:host = scope:spouse_2 + } + } + scope:spouse_1 = { disburse_wedding_spouse_activity_rewards = yes } + scope:spouse_2 = { disburse_wedding_spouse_activity_rewards = yes } + } + # Conclusion notification event for the host + trigger_event = ep2_wedding.0950 + } + else_if = { + limit = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + root != scope:host + } + # Conclusion notification event for the spouses + # The spouses' rewards are handed out by the host to ensure they are given just once to each + trigger_event = ep2_wedding.0960 + } + else = { + # Conclusion notification event for the guests + # The guests' rewards are handed out by the host (inside the host's disburse effect) to ensure they are given just once to each + trigger_event = ep2_wedding.0970 + } + } + 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 + } + + # Dynasty Legacies + host_has_taken_freebie_activity_effect = yes + + # Achievement tracking. + if = { + limit = { + this = scope:host + } + scope:host = { + ## A.E.I.O.U & Me + if = { + limit = { + exists = global_var:started_a_e_i_o_u_and_me_achievement + exists = dynasty + } + dynasty = { + if = { + limit = { + NOT = { has_variable = a_e_i_o_u_and_me_achievement_grand_wedding_tally } + } + set_variable = { + name = a_e_i_o_u_and_me_achievement_grand_wedding_tally + value = 1 + } + } + else = { + change_variable = { + name = a_e_i_o_u_and_me_achievement_grand_wedding_tally + add = 1 + } + } + } + } + ## Black Dinner + if = { + limit = { + exists = global_var:started_black_dinner_achievement + is_ai = no + scope:activity = { + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + NOR = { + has_variable = bloody_murder_fail + has_variable = bloody_wedding_backed_down_var + } + } + set_global_variable = { + name = finished_black_dinner_achievement + value = yes + } + } + } + } + # Free the officiant! + if = { + limit = { exists = scope:officiant } + scope:officiant = { + if = { + limit = { has_character_flag = need_priest_outfit } + remove_character_flag = need_priest_outfit + } + if = { + limit = { has_character_flag = officiant } + remove_character_flag = officiant + } + } + } + } + + ### Graphics + + map_entity = { + trigger = { + activity_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_wedding_01_entity" + } + + map_entity = { + trigger = { + activity_location.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_indian_wedding_01_entity" + } + + map_entity = "building_western_wedding_01_entity" + + # Travel + background = { # Bridge + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + is_riverside_province = yes + geographical_region = world_europe + OR = { + terrain = farmlands + terrain = plains + terrain = mountains + terrain = hills + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_bridge.dds" + environment = "environment_travel_bridge" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #Rice Fields - If we have Paddy fields AND/or terraced hills + #This goes before other terrain since it can override in many different terrains if built + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + OR = { + terrain = terraced_hills + has_building_or_higher = paddy_fields_01 + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_rice_fields.dds" + environment = "environment_tgp_rice_fields" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_rice_fields" + } + + background = { #Farmlands - East Asia + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + culture = { has_graphical_east_asia_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_farm_asia.dds" + environment = "environment_tgp_farm_asia" + ambience = "event:/DLC/EP4/SFX/Events/Event_Backgrounds/tgp_farm_asia" + } + + background = { # Farmland, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + environment = "environment_travel_farmlands" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { # Farmland, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + terrain = farmlands + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/farms.dds" + environment = "environment_event_farms" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #Desert, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_desert_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_desert.dds" + environment = "environment_travel_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + background = { #Desert, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_desert_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/desert.dds" + environment = "environment_event_bp1_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #forest snowy + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location ?= { hunt_snowy_forest_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_hunt_snowy_forest.dds" + environment = "environment_hunt_snowy_forest" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #forest_pine + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_forest_pine_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + environment = "environment_event_forest_pine" + ambience = "event:/SFX/Events/Backgrounds/coniferous_forest_day" + } + + background = { #forest + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_forest_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/forest.dds" + environment = "environment_event_forest" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #mountains, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + environment = "environment_travel_mountain_settlement" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + background = { #mountains, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_mountains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/mountains.dds" + environment = "environment_event_mountains" + ambience = "event:/SFX/Events/Backgrounds/mountains_day" + } + + background = { #steppe, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_steppe.dds" + environment = "environment_travel_steppe_settlement" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + background = { #steppe, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_steppe_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/steppe.dds" + environment = "environment_event_steppe" + ambience = "event:/SFX/Events/Backgrounds/steppe_day" + } + + background = { #drylands (formerly desert) + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_drylands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/drylands.dds" + environment = "environment_event_desert" + ambience = "event:/SFX/Events/Backgrounds/desert_day" + } + + background = { #wetlands + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_wetlands_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_wetlands.dds" + environment = "environment_event_bp1_wetlands" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #jungle + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_wilderness_jungle_trigger = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + environment = "environment_event_bp1_jungle" + ambience = "event:/SFX/Events/Backgrounds/deciduous_forest_day" + } + + background = { #plains, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_plains_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #plains, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_plains_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + environment = "environment_event_bp1_plains" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #hills, settled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_hills_trigger = yes + exists = province_owner + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + environment = "environment_travel_hills_settlement" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + background = { #hills, unsettled + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + graphical_hills_trigger = yes + NOT = { exists = province_owner } + } + } + texture = "gfx/interface/illustrations/event_scenes/bp1_hills.dds" + environment = "environment_event_bp1_hills" + ambience = "event:/SFX/Events/Backgrounds/fields_farms_day" + } + + background = { #sea + trigger = { + scope:activity = { is_current_phase_active = no } + OR = { + scope:host.location != scope:activity.activity_location + AND = { + exists = scope:activity.special_guest:spouse_2.location + NOT = { + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + AND = { + exists = scope:activity.special_guest:spouse_1.location + NOT = { + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + } + } + } + scope:host.location = { + is_sea_province = yes + } + } + texture = "gfx/interface/illustrations/event_scenes/fp1_ocean.dds" + environment = "environment_event_fp1_ocean" + ambience = "event:/DLC/FP1/SFX/Events/event_ocean_longship" + } + # End Travel + background = { #Indian + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_india_culture_group_trigger = yes } + steppe_building_gfx_use_indian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_wedding_ceremony_indian.dds" + environment = "environment_indian_wedding" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Weddings/ep2_event_grand_wedding" + music = "weddingindia_cue" + } + background = { #East Asia + trigger = { + activity_location ?= { + OR = { + culture ?= { has_graphical_east_asia_culture_group_trigger = yes } + steppe_building_gfx_use_east_asian_trigger = yes + } + } + } + texture = "gfx/interface/illustrations/event_scenes/tgp_wedding_ceremony_asia.dds" + environment = "environment_tgp_wedding_ceremony_asia" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Weddings/ep2_event_grand_wedding" + } + background = { #MENA (also steppes and African ) + trigger = { + OR = { + activity_location.culture = { has_graphical_iranian_culture_group_trigger = yes } + activity_location.culture = { has_graphical_mena_culture_group_trigger = yes } + activity_location.culture = { has_graphical_steppe_culture_group_trigger = yes } + activity_location.culture = { has_graphical_african_culture_group_trigger = yes } + } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_wedding_ceremony_mena.dds" + environment = "environment_mena_wedding" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Weddings/ep2_event_grand_wedding" + music = "weddingmena_cue" + } + background = { # Western - Fallback + texture = "gfx/interface/illustrations/event_scenes/ep2_wedding_ceremony_western.dds" + environment = "environment_western_wedding" + ambience = "event:/DLC/EP2/SFX/Events/Grand_Activities/Weddings/ep2_event_grand_wedding" + music = "weddingwest_cue" + } + background = { # Bloody Wedding + trigger = { + scope:activity.var:spouse_2_var ?= { + is_alive = no + } + } + texture = "gfx/interface/illustrations/event_scenes/feast.dds" + environment = "environment_event_feast" + ambience = "event:/SFX/Events/Backgrounds/feasthall" + music = "murderfest_cue" + } + + window_characters = { + + guest = { + camera = camera_event_right + + effect = { + if = { + limit = { + OR = { + scope:activity = { is_current_phase_active = yes } + AND = { + scope:host.location = scope:activity.activity_location + OR = { + scope:host = scope:activity.special_guest:spouse_1 + scope:host = scope:activity.special_guest:spouse_2 + } + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + } + if = { + limit = { + any_attending_character = { + count >= 2 + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + OR = { + is_parent_of = scope:activity.special_guest:spouse_1 + is_parent_of = scope:activity.special_guest:spouse_2 + AND = { + exists = scope:activity.special_guest:spouse_2.court_owner + this = scope:activity.special_guest:spouse_2.court_owner + } + AND = { + exists = scope:activity.special_guest:spouse_1.court_owner + this = scope:activity.special_guest:spouse_1.court_owner + } + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + OR = { + is_parent_of = scope:activity.special_guest:spouse_1 + is_parent_of = scope:activity.special_guest:spouse_2 + AND = { + exists = scope:activity.special_guest:spouse_2.court_owner + this = scope:activity.special_guest:spouse_2.court_owner + } + AND = { + exists = scope:activity.special_guest:spouse_1.court_owner + this = scope:activity.special_guest:spouse_1.court_owner + } + } + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { toast wedding_happy_cry wedding_drunk } + } + #Fallback + animation = toast + } + } + + host = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + AND = { + scope:activity = { is_current_phase_active = yes } + scope:host.location = scope:activity.activity_location + } + scope:host.location = { is_sea_province = yes } + } + NOR = { + scope:host = scope:activity.special_guest:spouse_1 + scope:host = scope:activity.special_guest:spouse_2 + } + } + scope:host = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { survey } + } + animation = admiration + } + } + + travel_host = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:activity = { is_current_phase_active = no } + NOR = { + scope:host.location = scope:activity.activity_location + scope:host.location = { is_sea_province = yes } + } + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + officiant = { + camera = camera_event_right + + effect = { + if = { + limit = { + OR = { + scope:activity = { is_current_phase_active = yes } + AND = { + scope:host.location = scope:activity.activity_location + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + has_character_flag = officiant + } + } + + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + has_character_flag = officiant + } + add_to_list = characters + } + } + } + + scripted_animation = { + animation = wedding_priest + } + } + + spouse_1 = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + scope:activity = { is_current_phase_active = yes } + special_guest:spouse_1.location = scope:activity.activity_location + special_guest:spouse_1.location = { is_sea_province = yes } + } + special_guest:spouse_1 = { is_alive = yes } + } + special_guest:spouse_1 = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { + special_guest:spouse_2 = { is_alive = yes } + OR = { + special_guest:spouse_2.location = scope:activity.activity_location + scope:activity = { is_current_phase_active = yes } + } + } + animation = reception_groom_left + } + animation = idle + } + } + + travel_spouse_1 = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:activity = { is_current_phase_active = no } + NOR = { + special_guest:spouse_1.location = scope:activity.activity_location + special_guest:spouse_1.location = { is_sea_province = yes } + } + special_guest:spouse_1 = { is_alive = yes } + } + special_guest:spouse_1 = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + spouse_2 = { + camera = camera_event_center + + effect = { + if = { + limit = { + OR = { + scope:activity = { is_current_phase_active = yes } + special_guest:spouse_2.location = scope:activity.activity_location + special_guest:spouse_2.location = { is_sea_province = yes } + } + special_guest:spouse_2 = { is_alive = yes } + } + special_guest:spouse_2 = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { + scope:character.location = { is_sea_province = yes } + } + animation = { idle } + } + triggered_animation = { + trigger = { + special_guest:spouse_1 = { is_alive = yes } + OR = { + special_guest:spouse_1.location = scope:activity.activity_location + scope:activity = { is_current_phase_active = yes } + } + } + animation = reception_bride_right + } + animation = idle + } + } + + travel_spouse_2 = { + camera = camera_event_horse_left + + effect = { + if = { + limit = { + scope:activity = { is_current_phase_active = no } + NOR = { + special_guest:spouse_2 = { is_alive = no } + special_guest:spouse_2.location = scope:activity.activity_location + special_guest:spouse_2.location = { is_sea_province = yes } + } + } + special_guest:spouse_2 = { + add_to_list = characters + } + } + } + scripted_animation = { + triggered_animation = { + trigger = { scope:character = { has_trait = impatient } } + animation = { jockey_gallop } + } + animation = jockey_walk + } + } + + guest = { + camera = camera_event_left + + effect = { + if = { + limit = { + OR = { + scope:activity = { is_current_phase_active = yes } + AND = { + scope:host.location = scope:activity.activity_location + scope:activity.special_guest:spouse_1.location ?= scope:activity.activity_location + scope:activity.special_guest:spouse_2.location ?= scope:activity.activity_location + } + } + } + + if = { + limit = { + any_attending_character = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + OR = { + is_parent_of = scope:activity.special_guest:spouse_1 + is_parent_of = scope:activity.special_guest:spouse_2 + AND = { + exists = scope:activity.special_guest:spouse_2.court_owner + this = scope:activity.special_guest:spouse_2.court_owner + } + AND = { + exists = scope:activity.special_guest:spouse_1.court_owner + this = scope:activity.special_guest:spouse_1.court_owner + } + } + } + } + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + OR = { + is_parent_of = scope:activity.special_guest:spouse_1 + is_parent_of = scope:activity.special_guest:spouse_2 + AND = { + exists = scope:activity.special_guest:spouse_2.court_owner + this = scope:activity.special_guest:spouse_2.court_owner + } + AND = { + exists = scope:activity.special_guest:spouse_1.court_owner + this = scope:activity.special_guest:spouse_1.court_owner + } + } + } + add_to_list = characters + } + } + else = { + every_attending_character = { + limit = { + location = scope:activity.activity_location + NOR = { + this = scope:host + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + add_to_list = characters + } + } + } + } + + scripted_animation = { + triggered_animation = { + trigger = { + always = yes + } + animation = { toast wedding_happy_cry wedding_drunk } + } + #Fallback + animation = toast + } + } + } +} diff --git a/common/buildings/00_standard_economy_buildings.txt b/common/buildings/00_standard_economy_buildings.txt new file mode 100644 index 00000000..1efa950f --- /dev/null +++ b/common/buildings/00_standard_economy_buildings.txt @@ -0,0 +1,10612 @@ +############################## +# Standard Economy Buildings # +############################## + +# Tradeports - Normal Tax, Development +# Cattle Pastures - Poor Tax, Normal Levy, Supply Limit +# Hunting Grounds - Poor Tax, Small Levy, Defensive Advantage +# Orchards - Normal Tax, Small Levy, Development +# Farm Estates - Massive Tax +# Cereal Fields - Large Tax, Mixed Bonuses +# Logging Camps - Normal Tax, Normal Build Speed +# Peat Quarries - Normal Tax, Poor Build Speed +# Hill Farms - Normal Tax, Defensive Advantage +# Elephant Pens - Normal Tax, Elephant Cavalry +# Plantations - Normal Tax +# Quarries - Poor Tax, Poor Build Speed +# Caravanserai - Late Game Building - Massive Tax, Defender Advantage, Dev Growth % and flat value, MaA maintenance and Merc hire cost +# Windmills - Late Game Building - Massive Tax, Supply Limit, Holding Taxes, Dev Growth % and flat value +# Watermills - Late Game Building - Massive Tax, Supply Limit, Building and Holding construction cost reduction, Holding Taxes, Dev Growth % and flat value +# Qanats - Cultural Building - Dev Growth % and flat value, Supply Limit, Travel bonus +# Murex Farms - Mediterranean Building - Influence, Dev Growth % and flat value, Tax +# Waterworks - is in India, Southeast Asia, or China, prov is county captain and terrain is NOT mountains or desert mountains + +### caravanserai + +caravanserai_01 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + + trigger_if = { + limit = { + culture = { has_cultural_parameter = second_caravanserai } + } + custom_tooltip = { + text = has_two_caravanserai_in_county + county = { + any_county_province = { + count < 2 + has_building_or_higher = caravanserai_01 + } + } + } + } + trigger_else = { + custom_tooltip = { + text = not_allowed_second_caravanserai + county = { + any_county_province = { + count < 1 + has_building_or_higher = caravanserai_01 + } + } + } + } + } + + is_enabled = { + trigger_if = { + limit = { + NOR = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + culture = { + has_cultural_parameter = second_caravanserai + } + } + } + is_county_capital = yes + } + trigger_else_if = { + limit = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + NOT = { + culture = { + has_cultural_parameter = second_caravanserai + } + } + } + OR = { + is_county_capital = yes + AND = { + NOR = { + has_building_or_higher = watermills_01 + has_building_or_higher = windmills_01 + } + has_building_or_higher = city_01 + } + } + } + trigger_else_if = { + limit = { + culture = { + has_cultural_parameter = second_caravanserai + } + NOT = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + } + } + OR = { + is_county_capital = yes + AND = { + county = { + any_county_province = { + count <= 2 + has_building_or_higher = caravanserai_01 + } + } + } + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + culture = { + has_cultural_parameter = second_caravanserai + } + OR = { + is_county_capital = yes + AND = { + NOR = { + has_building_or_higher = watermills_01 + has_building_or_higher = windmills_01 + } + has_building_or_higher = city_01 + } + AND = { + county = { + any_county_province = { + count <= 2 + has_building_or_higher = caravanserai_01 + } + } + } + } + + } + } + show_disabled = yes + + can_construct = { + } + + cost_gold = expensive_building_tier_1_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_1 + defender_holding_advantage = normal_building_advantage_tier_1 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_1 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_1 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_1 + development_growth = normal_building_development_growth_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_02 + + type_icon = "icon_building_caravanserai.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + add = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + modifier = { + factor = 0 + building_farm_estates_requirement_terrain = yes + NOT = { + has_building_or_higher = farm_estates_01 + } + } + modifier = { + factor = 0 + building_cereal_fields_requirement_terrain = yes + NOT = { + has_building_or_higher = cereal_fields_01 + } + } + } +} + +caravanserai_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct = { + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_2_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_2 + defender_holding_advantage = normal_building_advantage_tier_2 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_2 + development_growth = normal_building_development_growth_tier_2 + travel_danger = -2 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_2 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_03 + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +caravanserai_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_3_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_3 + defender_holding_advantage = normal_building_advantage_tier_3 + hostile_raid_time = 0.2 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_3 + development_growth = normal_building_development_growth_tier_3 + travel_danger = -3 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_3 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_04 + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +caravanserai_04 = { + construction_time = slow_construction_time + effect_desc = caravanserai_effects_desc + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_4_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_4 + defender_holding_advantage = normal_building_advantage_tier_4 + hostile_raid_time = 0.4 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_4 + development_growth = normal_building_development_growth_tier_4 + travel_danger = -4 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_4 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_05 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +caravanserai_05 = { + construction_time = slow_construction_time + effect_desc = caravanserai_effects_desc + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_5_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_5 + defender_holding_advantage = normal_building_advantage_tier_5 + hostile_raid_time = 0.6 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_5 + development_growth = normal_building_development_growth_tier_5 + travel_danger = -5 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_5 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_06 + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +caravanserai_06 = { + construction_time = slow_construction_time + effect_desc = caravanserai_effects_desc + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_6_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_6 + defender_holding_advantage = normal_building_advantage_tier_6 + hostile_raid_time = 0.8 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_6 + development_growth = normal_building_development_growth_tier_6 + travel_danger = -6 + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_6 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_6 + #small artifact quality bonus if TIT-40761 gets implemented + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_07 + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +caravanserai_07 = { + construction_time = slow_construction_time + effect_desc = caravanserai_effects_desc + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_7_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_7 + defender_holding_advantage = normal_building_advantage_tier_7 + hostile_raid_time = 1 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_7 + development_growth = normal_building_development_growth_tier_7 + travel_danger = -7 + #small artifact quality bonus if TIT-40761 gets implemented + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_7 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = caravanserai_08 + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +caravanserai_08 = { + construction_time = slow_construction_time + effect_desc = caravanserai_effects_desc + + can_construct_potential = { + building_caravanserai_requirement_terrain = yes + } + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_8_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_8 + defender_holding_advantage = normal_building_advantage_tier_8 + hostile_raid_time = 1.2 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_8 + development_growth = normal_building_development_growth_tier_8 + travel_danger = -8 + #small artifact quality bonus if TIT-40761 gets implemented + } + + character_modifier = { + men_at_arms_maintenance = normal_building_maa_maintenance_tier_8 + mercenary_hire_cost_mult = normal_building_maa_maintenance_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### watermills + +watermills_01 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_watermills_requirement_terrain = yes + AND = { + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = watermills_windmills_cities + } + } + } + is_county_capital = yes + } + trigger_else = { + culture = { + has_cultural_parameter = watermills_windmills_cities + } + OR = { + is_county_capital = yes + AND = { + NOR = { + has_building_or_higher = windmills_01 + has_building_or_higher = caravanserai_01 + } + has_building_or_higher = city_01 + } + + } + } + } + show_disabled = yes + + can_construct = { + trigger_if = { + limit = { + has_holding_type = city_holding + is_county_capital = no + culture = { + has_cultural_parameter = watermills_windmills_cities + } + } + has_building_or_higher = city_01 + NOR = { + has_building_or_higher = windmills_01 + has_building_or_higher = caravanserai_01 + } + } + trigger_else = { + building_requirement_castle_city_church = { LEVEL = 01 } + is_county_capital = yes + } + OR = { + culture = { # Standard unlock from innovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Cultural Tradition + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + } + + cost_gold = expensive_building_tier_1_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_1 + supply_limit_mult = 0.1 + holding_build_gold_cost = -0.05 + build_gold_cost = -0.05 + } + + county_modifier = { + development_growth = good_building_development_growth_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_02 + + type_icon = "icon_building_watermills.dds" + + ai_value = { + base = 20 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + + modifier = { + factor = 10 + has_building_or_higher = windmills_01 + } + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + } +} + +watermills_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_watermills_requirement_terrain = yes + AND = { + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct = { + + + + + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + trigger_else = { + OR = { + culture = { # Standard unlock from innovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Cultural Tradition + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_2_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_2 + supply_limit_mult = 0.2 + holding_build_gold_cost = -0.10 + build_gold_cost = -0.10 + } + + county_modifier = { + development_growth = good_building_development_growth_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_03 + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +watermills_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_watermills_requirement_terrain = yes + AND = { + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + scope:holder.culture = { + has_innovation = innovation_windmills + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_else = { + OR = { + culture = { # Standard unlock from innovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Cultural Tradition + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_3_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_3 + supply_limit_mult = 0.3 + holding_build_gold_cost = -0.14 + build_gold_cost = -0.14 + } + + county_modifier = { + development_growth = good_building_development_growth_tier_3 + development_growth_factor = normal_building_development_growth_factor_tier_1 + tax_mult = normal_building_tax_mult_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_04 + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +watermills_04 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_watermills_requirement_terrain = yes + AND = { + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + scope:holder.culture = { + has_innovation = innovation_windmills + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_else = { + OR = { + culture = { # Standard unlock from innovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Cultural Tradition + has_building_or_higher = logging_camps_04 + culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_4_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_4 + supply_limit_mult = 0.4 + holding_build_gold_cost = -0.18 + build_gold_cost = -0.18 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_2 + development_growth = good_building_development_growth_tier_4 + tax_mult = normal_building_tax_mult_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_05 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +watermills_05 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_watermills_requirement_terrain = yes + } + can_construct = { + scope:holder.culture = { + has_innovation = innovation_cranes + } + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_5_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_5 + supply_limit_mult = 0.5 + holding_build_gold_cost = -0.22 + build_gold_cost = -0.22 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_3 + development_growth = good_building_development_growth_tier_5 + tax_mult = normal_building_tax_mult_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_06 + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +watermills_06 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_watermills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_6_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_6 + supply_limit_mult = 0.6 + holding_build_gold_cost = -0.24 + build_gold_cost = -0.24 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_4 + development_growth = good_building_development_growth_tier_6 + tax_mult = normal_building_tax_mult_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_07 + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +watermills_07 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_watermills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_7_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_7 + supply_limit_mult = 0.7 + holding_build_gold_cost = -0.26 + build_gold_cost = -0.26 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_5 + development_growth = good_building_development_growth_tier_7 + tax_mult = normal_building_tax_mult_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watermills_08 + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +watermills_08 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_watermills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_8_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_8 + supply_limit_mult = 0.8 + holding_build_gold_cost = -0.30 + build_gold_cost = -0.30 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_6 + development_growth = good_building_development_growth_tier_8 + tax_mult = normal_building_tax_mult_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### Windmills + +windmills_01 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_windmills_requirement_terrain = yes + AND = { + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + } + } + is_county_capital = yes + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = watermills_windmills_cities + } + OR = { + is_county_capital = yes + AND = { + NOR = { + has_building_or_higher = watermills_01 + has_building_or_higher = caravanserai_01 + } + has_building_or_higher = city_01 + } + + } + } + } + show_disabled = yes + + can_construct = { + trigger_if = { + limit = { + has_holding_type = city_holding + } + has_building_or_higher = city_01 + culture = { + has_cultural_parameter = watermills_windmills_cities + } + NOR = { + has_building_or_higher = watermills_01 + has_building_or_higher = caravanserai_01 + } + } + trigger_else_if = { + limit = { + OR = { + has_holding_type = castle_holding + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + is_county_capital = yes + } + trigger_else = { + always = no + } + OR = { + culture = { # Standard unlock from inovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Culture trad + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + + cost_gold = expensive_building_tier_1_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_1 + tax_mult = good_building_tax_mult_tier_1 + supply_limit_mult = 0.1 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_1 + development_growth = good_building_development_growth_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_02 + + type_icon = "icon_building_windmills.dds" + + ai_value = { + base = 20 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + + modifier = { + factor = 10 + has_building_or_higher = watermills_01 + } + modifier = { + factor = 2 + is_coastal = yes + } + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + } +} + +windmills_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_windmills_requirement_terrain = yes + AND = { + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + trigger_else = { + OR = { + culture = { # Standard unlock from inovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Culture trad + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_2_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_2 + tax_mult = good_building_tax_mult_tier_2 + supply_limit_mult = 0.2 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_2 + development_growth = good_building_development_growth_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_03 + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +windmills_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_windmills_requirement_terrain = yes + AND = { + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + trigger_else = { + OR = { + culture = { # Standard unlock from inovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Culture trad + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_3_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_3 + tax_mult = good_building_tax_mult_tier_3 + supply_limit_mult = 0.3 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_3 + development_growth = good_building_development_growth_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_04 + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +windmills_04 = { + construction_time = slow_construction_time + + can_construct_potential = { + OR = { + building_windmills_requirement_terrain = yes + AND = { + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_else = { + OR = { + culture = { # Standard unlock from inovation (High medieval) + has_innovation = innovation_windmills + } + culture = { # Unlock from culture trad early but still need the previous Civic economic building inovation (Early medieval) + has_cultural_parameter = next_level_w_mills + has_innovation = innovation_manorialism + } + AND = { # Unlock from Culture trad + has_building_or_higher = hill_farms_04 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_4_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_4 + tax_mult = good_building_tax_mult_tier_4 + supply_limit_mult = 0.4 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_4 + development_growth = good_building_development_growth_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_05 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +windmills_05 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_windmills_requirement_terrain = yes + } + can_construct = { + scope:holder.culture = { + has_innovation = innovation_windmills + } + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_5_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_5 + tax_mult = good_building_tax_mult_tier_5 + supply_limit_mult = 0.5 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_5 + development_growth = good_building_development_growth_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_06 + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +windmills_06 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_windmills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_6_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_6 + tax_mult = good_building_tax_mult_tier_6 + supply_limit_mult = 0.6 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_6 + development_growth = good_building_development_growth_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_07 + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +windmills_07 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_windmills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_7_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_7 + tax_mult = good_building_tax_mult_tier_7 + supply_limit_mult = 0.7 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_7 + development_growth = good_building_development_growth_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = windmills_08 + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +windmills_08 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_windmills_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = next_level_w_mills + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_windmills + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = expensive_building_tier_8_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_8 + tax_mult = good_building_tax_mult_tier_8 + supply_limit_mult = 0.8 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_8 + development_growth = good_building_development_growth_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + + + + +# Qanats + +qanats_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + is_county_capital = yes + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_1 + supply_limit = normal_building_supply_limit_tier_1 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_1 + development_growth = good_building_development_growth_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = qanats_02 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 20 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_2 + supply_limit = normal_building_supply_limit_tier_2 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_2 + development_growth = good_building_development_growth_tier_2 + travel_danger = -2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = qanats_03 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_3 + supply_limit = normal_building_supply_limit_tier_3 + build_speed = normal_building_build_speed_tier_3 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_3 + development_growth = good_building_development_growth_tier_3 + travel_danger = -3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = qanats_04 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_4 + supply_limit = normal_building_supply_limit_tier_4 + build_speed = normal_building_build_speed_tier_4 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_4 + development_growth = good_building_development_growth_tier_4 + travel_danger = -4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = qanats_05 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_5 + supply_limit = normal_building_supply_limit_tier_5 + build_speed = normal_building_build_speed_tier_5 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_5 + development_growth = good_building_development_growth_tier_5 + travel_danger = -5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + effect_desc = unlocks_cereal_fields_and_orchards + + next_building = qanats_06 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_6 + supply_limit = normal_building_supply_limit_tier_6 + build_speed = normal_building_build_speed_tier_6 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_6 + development_growth = good_building_development_growth_tier_6 + travel_danger = -6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + effect_desc = unlocks_cereal_fields_and_orchards + + next_building = qanats_07 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_7 + supply_limit = normal_building_supply_limit_tier_7 + build_speed = normal_building_build_speed_tier_7 + } + + character_modifier = { + negate_health_penalty_add = 0.1 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_7 + development_growth = good_building_development_growth_tier_7 + travel_danger = -7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + effect_desc = unlocks_cereal_fields_and_orchards + + next_building = qanats_08 + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +qanats_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + can_construct = { + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_8 + supply_limit = normal_building_supply_limit_tier_8 + build_speed = normal_building_build_speed_tier_8 + } + + character_modifier = { + negate_health_penalty_add = 0.2 + } + + county_modifier = { + development_growth_factor = good_building_development_growth_factor_tier_8 + development_growth = good_building_development_growth_tier_8 + travel_danger = -8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + effect_desc = unlocks_cereal_fields_and_orchards + + + type_icon = "icon_building_qanats.dds" + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + } +} + +# Murex Farms + +murex_farm_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_1 + development_growth = normal_building_development_growth_tier_1 + } + + character_modifier = { + monthly_influence = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_02 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 14 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + modifier = { + factor = 2 + scope:holder = { + government_has_flag = government_is_administrative + } + } + } +} + +murex_farm_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_2 + development_growth = normal_building_development_growth_tier_2 + } + + character_modifier = { + monthly_influence = 0.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_03 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 9 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_3 + development_growth = normal_building_development_growth_tier_3 + } + + character_modifier = { + monthly_influence = 0.6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_04 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 8 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_4 + development_growth = normal_building_development_growth_tier_4 + } + + character_modifier = { + monthly_influence = 1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_05 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 7 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_5 + development_growth = normal_building_development_growth_tier_5 + } + + character_modifier = { + monthly_influence = 1.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_06 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 6 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_6 + development_growth = normal_building_development_growth_tier_6 + } + + character_modifier = { + monthly_influence = 1.8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_07 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 5 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_7 + development_growth = normal_building_development_growth_tier_7 + } + + character_modifier = { + monthly_influence = 2.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = murex_farm_08 + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 4 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +murex_farm_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_8 + development_growth = normal_building_development_growth_tier_8 + } + + character_modifier = { + monthly_influence = 3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + type_icon = "icon_building_murex_farms.dds" + + ai_value = { + base = 3 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +### paddy_fields + +paddy_fields_01 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = good_building_tax_tier_1 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.02 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.02 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_1 + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_02 + + type_icon = "building_rice.dds" + + ai_value = { + base = 15 # paddy fields should take priority when possible + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_paddy_fields_improvement_from_culture_modifier = yes # Only on the level 1 to secure having pasture when the AI is from an appropriate culture + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + modifier = { + factor = 2 + scope:holder.culture = { has_innovation = innovation_champa_rice } + } + modifier = { + factor = 0 + scope:holder.culture = { has_innovation = innovation_champa_rice } # this also allows farm estates to be built in rice fields + NOT = { + has_building_or_higher = farm_estates_01 + } + } + modifier = { + factor = 0 + building_orchards_requirement_terrain = yes + NOT = { + has_building_or_higher = orchards_01 + } + } + } +} + +paddy_fields_02 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = good_building_tax_tier_2 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.04 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.04 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_1 + levy_size = innovation_champa_rice_levy_size_value_1 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_2 + stationed_maa_toughness_mult = normal_maa_toughness_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +paddy_fields_03 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = good_building_tax_tier_3 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.06 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.06 + } + + county_modifier = { + supply_limit = 400 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_3 + stationed_maa_toughness_mult = normal_maa_toughness_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +paddy_fields_04 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = good_building_tax_tier_4 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.08 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.08 + } + + county_modifier = { + supply_limit = 400 + development_growth_factor = 0.05 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_2 + levy_size = innovation_champa_rice_levy_size_value_2 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_2 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_4 + stationed_maa_toughness_mult = normal_maa_toughness_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +paddy_fields_05 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = good_building_tax_tier_5 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.12 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.12 + } + + county_modifier = { + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_5 + stationed_maa_toughness_mult = normal_maa_toughness_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +paddy_fields_06 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = good_building_tax_tier_6 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.16 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.16 + } + + county_modifier = { + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + church_holding_build_gold_cost = -0.05 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_3 + levy_size = innovation_champa_rice_levy_size_value_3 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_3 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_6 + stationed_maa_toughness_mult = normal_maa_toughness_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +paddy_fields_07 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + scope:holder.culture = { + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = good_building_tax_tier_7 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.18 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.18 + } + + county_modifier = { + levy_reinforcement_rate = 0.05 + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + city_holding_build_gold_cost = -0.05 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_7 + stationed_maa_toughness_mult = normal_maa_toughness_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = paddy_fields_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +paddy_fields_08 = { + construction_time = standard_construction_time + effect_desc = paddy_fields_effect_desc + + can_construct_potential = { + building_paddy_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = rice_cultivators_next_level_paddy_fields + } + scope:holder.culture = { + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = good_building_tax_tier_8 + } + province_terrain_modifier = { + terrain = terraced_hills + development_growth_factor = 0.20 + } + province_terrain_modifier = { + terrain = floodplains + development_growth_factor = 0.20 + } + + county_modifier = { + levy_reinforcement_rate = 0.05 + supply_limit = 1600 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + city_holding_build_gold_cost = -0.05 + } + + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = terraced_hills + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = floodplains + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + province_terrain_modifier = { + parameter = champa_rice_building_bonuses + terrain = wetlands + tax_mult = innovation_champa_rice_tax_mult_value_4 + levy_size = innovation_champa_rice_levy_size_value_4 + development_growth_factor = innovation_champa_rice_development_growth_factor_value_4 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_8 + stationed_maa_toughness_mult = normal_maa_toughness_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +# Spice plantations + +spice_plantation_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_1_cost + + character_modifier = { + monthly_prestige = 0.03 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_02 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 12 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + modifier = { + factor = 2 + scope:holder = { + government_has_flag = government_is_administrative + } + } + } +} + +spice_plantation_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_2_cost + + character_modifier = { + monthly_prestige = 0.06 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_03 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 9 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_3_cost + + character_modifier = { + monthly_prestige = 0.09 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_04 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 8 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_4_cost + + character_modifier = { + monthly_prestige = 0.12 + legitimacy_gain_mult = 0.01 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_05 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 7 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_5_cost + + character_modifier = { + monthly_prestige = 0.15 + legitimacy_gain_mult = 0.02 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_06 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 6 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_6_cost + + character_modifier = { + monthly_prestige = 0.18 + legitimacy_gain_mult = 0.03 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1.8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_07 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 5 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_7_cost + + character_modifier = { + monthly_prestige = 0.21 + legitimacy_gain_mult = 0.04 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 2.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = spice_plantation_08 + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 4 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +spice_plantation_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_spice_plantation_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_8_cost + + character_modifier = { + monthly_prestige = 0.24 + legitimacy_gain_mult = 0.05 + } + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + type_icon = "icon_building_spice_plantation.dds" + + ai_value = { + base = 3 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +# Waterworks +# building_waterworks_requirement_terrain = is in India, Southeast Asia, or China, prov is county captain and terrain is NOT mountains or desert mountains + +waterworks_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + supply_limit_mult = 0.1 + tax_mult = low_building_tax_mult_tier_1 + levy_size = 0.02 + epidemic_resistance = 2 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.01 + development_growth_factor = normal_building_development_growth_factor_tier_1 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_1 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_02 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + scope:holder.capital_province = this + } + modifier = { + add = 2 + scope:holder = { + government_has_flag = government_is_administrative # infrastucture, babeyyy + } + } + modifier = { + factor = 0 + num_buildings < 5 + } + modifier = { + factor = 0 + NOR = { + has_building_or_higher = farm_estates_01 + has_building_or_higher = orchards_01 + has_building_or_higher = cereal_fields_01 + has_building_or_higher = paddy_fields_01 + num_buildings >= 8 + } + } + } +} + +waterworks_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + supply_limit_mult = 0.2 + tax_mult = low_building_tax_mult_tier_2 + levy_size = 0.04 + epidemic_resistance = 4 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.02 + development_growth_factor = normal_building_development_growth_factor_tier_2 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_2 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_03 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 9 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + supply_limit_mult = 0.3 + tax_mult = low_building_tax_mult_tier_3 + levy_size = 0.06 + epidemic_resistance = 6 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.03 + development_growth_factor = normal_building_development_growth_factor_tier_3 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_3 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 0.6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_04 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 8 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 02 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + supply_limit_mult = 0.4 + tax_mult = low_building_tax_mult_tier_4 + levy_size = 0.08 + epidemic_resistance = 8 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.04 + development_growth_factor = normal_building_development_growth_factor_tier_4 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_4 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_05 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 7 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + supply_limit_mult = 0.5 + tax_mult = low_building_tax_mult_tier_5 + levy_size = 0.1 + epidemic_resistance = 10 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.05 + development_growth_factor = normal_building_development_growth_factor_tier_5 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_5 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_06 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 6 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 03 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + supply_limit_mult = 0.6 + tax_mult = low_building_tax_mult_tier_6 + levy_size = 0.12 + epidemic_resistance = 12 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.06 + development_growth_factor = normal_building_development_growth_factor_tier_6 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_6 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 1.8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_07 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 5 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + supply_limit_mult = 0.7 + tax_mult = low_building_tax_mult_tier_7 + levy_size = 0.14 + epidemic_resistance = 14 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.07 + development_growth_factor = normal_building_development_growth_factor_tier_7 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_7 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 2.3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = waterworks_08 + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 4 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +waterworks_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_waterworks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 04 } + } + + is_enabled = { + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + county = { NOT = { has_county_modifier = backwater_county_modifier } } + } + + can_construct = { + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + supply_limit_mult = 1 + tax_mult = low_building_tax_mult_tier_8 + levy_size = 0.16 + epidemic_resistance = 16 + } + + county_culture_modifier = { + parameter = waterworks_additional_bonuses + build_gold_cost = -0.08 + development_growth_factor = normal_building_development_growth_factor_tier_8 + } + + county_modifier = { + development_growth_factor = normal_building_development_growth_factor_tier_8 + } + + character_government_modifier = { + parameter = government_has_influence + monthly_influence = 3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + type_icon = "icon_building_waterworks.dds" + + ai_value = { + base = 3 + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +### Trade Port + +common_tradeport_01 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + trigger_if = { # Sometimes tribals can into botes + limit = { + NOT = { + culture = { + has_cultural_parameter = trade_ports_enabled_for_tribals + } + } + } + + building_requirement_castle_city_church = { LEVEL = 01 } + } + trigger_else = { + OR = { + has_building_or_higher = tribe_01 + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + } + + can_construct_showing_failures_only = { + # building_requirement_tribal = no + + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + } + county_modifier = { + development_growth_factor = 0.05 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.1 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.02 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_02 + + type_icon = "icon_building_tradeport.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + + modifier = { + add = 5 + culture = { + has_cultural_parameter = trade_ports_enabled_for_tribals + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = trade_ports_stationed_maa_bonus + } + } + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + modifier = { + factor = 0 + building_farm_estates_requirement_terrain = yes + NOT = { + has_building_or_higher = farm_estates_01 + } + } + modifier = { + factor = 0 + building_orchards_requirement_terrain = yes + NOT = { + has_building_or_higher = orchards_01 + } + } + + } +} + +common_tradeport_02 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + + + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = trade_ports_enabled_for_tribals + } + } + + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + trigger_else = { + OR = { + has_building_or_higher = tribe_01 + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_crop_rotation + } + } + trigger_else = { + culture = { + has_cultural_parameter = next_level_trade_ports + + } + } + } + + can_construct_showing_failures_only = { + # building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + } + county_modifier = { + development_growth_factor = 0.1 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.1 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.04 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_03 + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +common_tradeport_03 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_else = { + culture = { + has_innovation = innovation_crop_rotation + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + is_enabled = { + building_requirement_tribal = no + } + + can_construct_showing_failures_only = { + # building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + } + county_modifier = { + development_growth_factor = 0.15 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.15 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.06 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_04 + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +common_tradeport_04 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_else = { + culture = { + has_innovation = innovation_crop_rotation + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + } + county_modifier = { + development_growth_factor = 0.2 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.15 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.08 + } + character_culture_modifier = { + parameter = trade_ports_give_levies + men_at_arms_limit = 1 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_05 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +common_tradeport_05 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_else = { + culture = { + has_innovation = innovation_manorialism + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + } + county_modifier = { + development_growth_factor = 0.25 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.2 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.1 + } + character_culture_modifier = { + parameter = trade_ports_give_levies + men_at_arms_limit = 1 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_06 + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +common_tradeport_06 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_else = { + culture = { + has_innovation = innovation_manorialism + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + } + county_modifier = { + development_growth_factor = 0.3 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.2 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.12 + } + character_culture_modifier = { + parameter = trade_ports_give_levies + men_at_arms_limit = 2 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_07 + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +common_tradeport_07 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_cranes + } + building_requirement_castle_city_church = { LEVEL = 04 } + } + trigger_else = { + culture = { + has_innovation = innovation_guilds + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + } + county_modifier = { + development_growth_factor = 0.35 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.25 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.14 + } + character_culture_modifier = { + parameter = trade_ports_give_levies + men_at_arms_limit = 2 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = common_tradeport_08 + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +common_tradeport_08 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_common_tradeport_requirement_terrain = yes + } + can_construct = { + trigger_if = { + limit = { + NOT = { + culture = { + has_cultural_parameter = next_level_trade_ports + } + } + } + culture = { + has_innovation = innovation_cranes + } + building_requirement_castle_city_church = { LEVEL = 04 } + } + trigger_else = { + culture = { + has_innovation = innovation_guilds + } + culture = { + has_cultural_parameter = next_level_trade_ports + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + } + county_modifier = { + development_growth_factor = 0.4 + } + + county_culture_modifier = { + parameter = trade_ports_give_control_growth + monthly_county_control_growth_add = 0.25 + } + province_culture_modifier = { + parameter = trade_ports_give_levies + levy_size = 0.16 + } + character_culture_modifier = { + parameter = trade_ports_give_levies + men_at_arms_limit = 3 + } + province_culture_modifier = { + parameter = trade_ports_stationed_maa_bonus + stationed_maa_toughness_mult = normal_maa_toughness_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### Pastures + +pastures_01 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + show_disabled = yes + + cost_gold = normal_building_tier_1_cost + + levy = small_building_levy_tier_1 + province_modifier = { + monthly_income = normal_building_tax_tier_1 + supply_limit = normal_building_supply_limit_tier_1 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.01 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_1 + tax_mult = 0.01 + levy_size = 0.01 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.01 + levy_size = 0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_02 + + type_icon = "icon_building_pastures.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_pasture_improvement_from_culture_modifier = yes # Only on the level 1 to secure having pasture when the AI is from an appropriate culture + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 0 + building_farm_estates_requirement_terrain = yes + NOT = { + has_building_or_higher = farm_estates_01 + } + } + modifier = { + factor = 0 + building_orchards_requirement_terrain = yes + NOT = { + has_building_or_higher = orchards_01 + } + } + modifier = { + factor = 4 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + } +} + +pastures_02 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + levy = small_building_levy_tier_2 + province_modifier = { + monthly_income = normal_building_tax_tier_2 + supply_limit = normal_building_supply_limit_tier_2 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.02 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_2 + tax_mult = 0.01 + levy_size = 0.01 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.01 + levy_size = 0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +pastures_03 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + levy = small_building_levy_tier_3 + province_modifier = { + monthly_income = normal_building_tax_tier_3 + supply_limit = normal_building_supply_limit_tier_3 + levy_reinforcement_rate = 0.1 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.03 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_3 + tax_mult = 0.02 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +pastures_04 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + levy = small_building_levy_tier_4 + province_modifier = { + monthly_income = normal_building_tax_tier_4 + supply_limit = normal_building_supply_limit_tier_4 + levy_reinforcement_rate = 0.1 + } + county_modifier = { + development_growth_factor = 0.02 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.04 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_4 + tax_mult = 0.02 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +pastures_05 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + levy = small_building_levy_tier_5 + province_modifier = { + monthly_income = normal_building_tax_tier_5 + supply_limit = normal_building_supply_limit_tier_5 + levy_reinforcement_rate = 0.1 + garrison_size = 0.05 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.05 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_5 + tax_mult = 0.03 + levy_size = 0.03 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + levy_size = 0.03 + } + county_modifier = { + development_growth_factor = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +pastures_06 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + levy = small_building_levy_tier_6 + province_modifier = { + monthly_income = normal_building_tax_tier_6 + supply_limit = normal_building_supply_limit_tier_6 + levy_reinforcement_rate = 0.1 + garrison_size = 0.05 + } + county_modifier = { + development_growth_factor = 0.02 + county_opinion_add = 2 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.06 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_6 + tax_mult = 0.03 + levy_size = 0.03 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + levy_size = 0.03 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +pastures_07 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + levy = small_building_levy_tier_7 + province_modifier = { + monthly_income = normal_building_tax_tier_7 + supply_limit = normal_building_supply_limit_tier_7 + levy_reinforcement_rate = 0.1 + garrison_size = 0.05 + } + county_modifier = { + development_growth_factor = 0.02 + county_opinion_add = 2 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.07 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_7 + tax_mult = 0.04 + levy_size = 0.04 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + levy_size = 0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = pastures_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +pastures_08 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_pastures_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + levy = small_building_levy_tier_8 + province_modifier = { + monthly_income = normal_building_tax_tier_8 + supply_limit = normal_building_supply_limit_tier_8 + levy_reinforcement_rate = 0.15 + garrison_size = 0.05 + } + county_modifier = { + development_growth_factor = 0.02 + county_opinion_add = 2 + } + character_culture_modifier = { + parameter = pastures_building_bonuses + light_cavalry_maintenance_mult = -0.08 + } + province_culture_modifier = { + parameter = pastures_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_8 + tax_mult = 0.04 + levy_size = 0.04 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + levy_size = 0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### hunting_grounds + +hunting_grounds_01 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_1_cost + + levy = poor_building_levy_tier_1 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_1 + monthly_income = poor_building_tax_tier_1 + hostile_raid_time = 0.1 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.01 + archers_recruitment_cost_mult = -0.01 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_1 + stationed_archers_toughness_mult = low_maa_toughness_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_02 + + type_icon = "icon_building_hunting_grounds.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_hunting_grounds_improvement_from_culture_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 0 + building_cereal_fields_requirement_terrain = yes + NOT = { + has_building_or_higher = cereal_fields_01 + } + } + modifier = { + factor = 0 + scope:holder = { + government_has_flag = government_is_republic + } + NOT = { + has_building_or_higher = guild_halls_01 + } + } + } +} + +hunting_grounds_02 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_2_cost + + levy = poor_building_levy_tier_2 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_2 + monthly_income = poor_building_tax_tier_2 + hostile_raid_time = 0.2 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.02 + archers_recruitment_cost_mult = -0.02 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_2 + stationed_archers_toughness_mult = low_maa_toughness_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +hunting_grounds_03 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_3_cost + + levy = poor_building_levy_tier_3 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_3 + monthly_income = poor_building_tax_tier_3 + hostile_raid_time = 0.3 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.02 + archers_recruitment_cost_mult = -0.02 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_3 + stationed_archers_toughness_mult = low_maa_toughness_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hunting_grounds_04 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_4_cost + + levy = poor_building_levy_tier_4 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_4 + monthly_income = poor_building_tax_tier_4 + hostile_raid_time = 0.4 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.03 + archers_recruitment_cost_mult = -0.03 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_4 + stationed_archers_toughness_mult = low_maa_toughness_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hunting_grounds_05 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_5_cost + + levy = poor_building_levy_tier_5 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_5 + monthly_income = poor_building_tax_tier_5 + hostile_raid_time = 0.5 + } + + character_modifier = { + men_at_arms_maintenance = -0.01 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.03 + archers_recruitment_cost_mult = -0.03 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_5 + stationed_archers_toughness_mult = low_maa_toughness_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hunting_grounds_06 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_6_cost + + levy = poor_building_levy_tier_6 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_6 + monthly_income = poor_building_tax_tier_6 + hostile_raid_time = 0.6 + } + + character_modifier = { + men_at_arms_maintenance = -0.01 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.03 + archers_recruitment_cost_mult = -0.03 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_6 + stationed_archers_toughness_mult = low_maa_toughness_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hunting_grounds_07 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_7_cost + + levy = poor_building_levy_tier_7 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_7 + monthly_income = poor_building_tax_tier_7 + hostile_raid_time = 0.7 + } + + character_modifier = { + men_at_arms_maintenance = -0.01 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.04 + archers_recruitment_cost_mult = -0.04 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_7 + stationed_archers_toughness_mult = low_maa_toughness_tier_7 + } + + county_modifier = { + development_growth_factor = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hunting_grounds_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hunting_grounds_08 = { + construction_time = quick_construction_time + effect_desc = hunting_grounds_desc + + can_construct_potential = { + building_hunting_grounds_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder.culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + culture = { + NOT = { + has_cultural_parameter = vegetarian_building_ban + } + } + } + + show_disabled = yes + + cost_gold = cheap_building_tier_8_cost + + levy = poor_building_levy_tier_8 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_8 + monthly_income = poor_building_tax_tier_8 + hostile_raid_time = 0.8 + } + + character_modifier = { + men_at_arms_maintenance = -0.01 + } + + character_culture_modifier = { + parameter = hunting_archery_building_bonuses + archers_maintenance_mult = -0.04 + archers_recruitment_cost_mult = -0.04 + } + + province_culture_modifier = { + parameter = hunting_archery_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_8 + stationed_archers_toughness_mult = low_maa_toughness_tier_8 + } + + county_modifier = { + development_growth_factor = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### orchards + +orchards_01 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_1_cost + + levy = small_building_levy_tier_1 + province_modifier = { + monthly_income = normal_building_tax_tier_1 + } + county_modifier = { + development_growth_factor = 0.05 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_02 + + type_icon = "icon_building_orchards.dds" + + ai_value = { + base = 15 # Significantly higher than normal, they're just that good + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_orchard_improvement_from_culture_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + modifier = { + factor = 2 + culture = { + has_cultural_parameter = vegetarian_fruit_orchard_allowed + } + } + } +} + +orchards_02 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + levy = small_building_levy_tier_2 + province_modifier = { + monthly_income = normal_building_tax_tier_2 + levy_reinforcement_rate = 0.1 + } + county_modifier = { + development_growth_factor = 0.1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +orchards_03 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + levy = small_building_levy_tier_3 + province_modifier = { + monthly_income = normal_building_tax_tier_3 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.15 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + supply_limit_mult = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +orchards_04 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + levy = small_building_levy_tier_4 + province_modifier = { + monthly_income = normal_building_tax_tier_4 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.2 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + supply_limit_mult = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +orchards_05 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + levy = small_building_levy_tier_5 + province_modifier = { + monthly_income = normal_building_tax_tier_5 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.25 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.05 + supply_limit_mult = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +orchards_06 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + levy = small_building_levy_tier_6 + province_modifier = { + monthly_income = normal_building_tax_tier_6 + supply_limit = 1000 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.3 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.06 + supply_limit_mult = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +orchards_07 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + levy = small_building_levy_tier_7 + province_modifier = { + monthly_income = normal_building_tax_tier_7 + supply_limit = 1000 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.35 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.07 + supply_limit_mult = 0.1 + } + character_modifier = { + monthly_prestige = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = orchards_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +orchards_08 = { + construction_time = standard_construction_time + effect_desc = orchards_effect_desc + + can_construct_potential = { + building_orchards_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + levy = small_building_levy_tier_8 + province_modifier = { + monthly_income = normal_building_tax_tier_8 + supply_limit = 1000 + levy_reinforcement_rate = 0.1 + supply_limit_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.4 + levy_size = 0.02 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.08 + supply_limit_mult = 0.1 + } + character_modifier = { + monthly_prestige = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### farm estates + +farm_estates_01 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + AND = { + building_farm_estates_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { has_innovation = innovation_champa_rice } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + } + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_02 + + type_icon = "icon_building_farm_estates.dds" + + ai_value = { + base = 15 # Significantly higher than normal, they're just that good + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_farm_estate_improvement_from_culture_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + } +} + +farm_estates_02 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + AND = { + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + building_farm_estates_requirement_terrain = yes + } + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { has_innovation = innovation_champa_rice } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_2 + supply_limit_mult = 0.15 + supply_limit = 500 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +farm_estates_03 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + farm_estates_3_4_trigger = yes + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_3 + supply_limit_mult = 0.15 + supply_limit = 500 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + } + + county_modifier = { + development_growth_factor = 0.02 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +farm_estates_04 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + farm_estates_3_4_trigger = yes + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_4 + supply_limit_mult = 0.15 + supply_limit = 1000 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.05 + } + + county_modifier = { + development_growth_factor = 0.02 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +farm_estates_05 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { + has_innovation = innovation_champa_rice + } + } + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + terrain = farmlands + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_5 + supply_limit_mult = 0.15 + levy_size = 0.05 + supply_limit = 1000 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.06 + } + + county_modifier = { + development_growth_factor = 0.02 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 10 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +farm_estates_06 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { + has_innovation = innovation_champa_rice + } + } + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + terrain = farmlands + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_6 + supply_limit_mult = 0.15 + levy_size = 0.05 + supply_limit = 1000 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.06 + } + + county_modifier = { + development_growth_factor = 0.05 + tax_mult = 0.01 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 12 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +farm_estates_07 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { + has_innovation = innovation_champa_rice + } + } + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + terrain = farmlands + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_7 + supply_limit_mult = 0.15 + levy_size = 0.05 + supply_limit = 1000 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.07 + } + + county_modifier = { + development_growth_factor = 0.05 + tax_mult = 0.01 + monthly_county_control_growth_add = 0.2 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 14 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = farm_estates_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +farm_estates_08 = { + construction_time = slow_construction_time + effect_desc = farm_estates_effect_desc + + can_construct_potential = { + OR = { + building_farm_estates_requirement_terrain = yes + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { + has_innovation = innovation_champa_rice + } + } + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + OR = { + terrain = farmlands + building_paddy_fields_requirement_terrain = yes + } + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = excellent_building_tax_tier_8 + supply_limit_mult = 0.15 + levy_size = 0.05 + supply_limit = 1000 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.08 + } + county_modifier = { + development_growth_factor = 0.05 + tax_mult = 0.02 + monthly_county_control_growth_add = 0.2 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 16 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### cereal_fields + +cereal_fields_01 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = good_building_tax_tier_1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + } + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_1 + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_02 + + type_icon = "icon_building_cereal_fields.dds" + + ai_value = { + base = 12 # A little bit higher than normal, they're just that good + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_cereal_fields_improvement_from_culture_modifier = yes # Only on the level 1 to secure having pasture when the AI is from an appropriate culture + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + add = 6 + county = { + has_county_modifier = fertile_desert_mountains_modifier + } + } + modifier = { + factor = 2 + AND = { + building_watermills_requirement_terrain = yes + building_windmills_requirement_terrain = yes + } + } + modifier = { + factor = 0 + building_farm_estates_requirement_terrain = yes + NOT = { + has_building_or_higher = farm_estates_01 + } + } + modifier = { + factor = 0 + building_orchards_requirement_terrain = yes + NOT = { + has_building_or_higher = orchards_01 + } + } + } +} + +cereal_fields_02 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = good_building_tax_tier_2 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + } + + county_modifier = { + tax_mult = 0.01 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_2 + stationed_maa_toughness_mult = normal_maa_toughness_tier_2 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +cereal_fields_03 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_crop_rotation + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = good_building_tax_tier_3 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + } + + county_modifier = { + tax_mult = 0.01 + supply_limit = 400 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_3 + stationed_maa_toughness_mult = normal_maa_toughness_tier_3 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +cereal_fields_04 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_crop_rotation + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = good_building_tax_tier_4 + } + + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.05 + } + + county_modifier = { + tax_mult = 0.01 + supply_limit = 400 + development_growth_factor = 0.05 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_4 + stationed_maa_toughness_mult = normal_maa_toughness_tier_4 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +cereal_fields_05 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = good_building_tax_tier_5 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.06 + } + + county_modifier = { + tax_mult = 0.01 + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_5 + stationed_maa_toughness_mult = normal_maa_toughness_tier_5 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 10 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +cereal_fields_06 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = good_building_tax_tier_6 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.07 + } + + county_modifier = { + tax_mult = 0.01 + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + church_holding_build_gold_cost = -0.05 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_6 + stationed_maa_toughness_mult = normal_maa_toughness_tier_6 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 12 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +cereal_fields_07 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = good_building_tax_tier_7 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.08 + } + + county_modifier = { + levy_reinforcement_rate = 0.05 + tax_mult = 0.01 + supply_limit = 400 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + church_holding_build_gold_cost = -0.05 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_7 + stationed_maa_toughness_mult = normal_maa_toughness_tier_7 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 14 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = cereal_fields_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +cereal_fields_08 = { + construction_time = standard_construction_time + effect_desc = cereal_fields_effect_desc + + can_construct_potential = { + building_cereal_fields_requirement_terrain = yes + } + + can_construct = { + trigger_if = { + limit = { + NOT = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + } + } + } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + trigger_else = { + scope:holder.culture = { + has_cultural_parameter = vegetarian_next_level_cereal_fields + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = good_building_tax_tier_8 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.09 + } + + county_modifier = { + levy_reinforcement_rate = 0.05 + tax_mult = 0.02 + supply_limit = 1600 + development_growth_factor = 0.05 + supply_limit_mult = 0.05 + church_holding_build_gold_cost = -0.05 + } + + province_culture_modifier = { + parameter = collective_lands_farms_bonuses + stationed_maa_damage_mult = normal_maa_damage_tier_8 + stationed_maa_toughness_mult = normal_maa_toughness_tier_8 + } + + province_culture_modifier = { + parameter = brewery_farming_bonus + county_opinion_add = 16 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### logging_camps + +logging_camps_01 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + build_speed = good_building_build_speed_tier_1 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_1 + stationed_skirmishers_damage_mult = low_maa_damage_tier_1 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.02 + build_gold_cost = -0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_02 + + type_icon = "icon_building_logging_camps.dds" + + ai_value = { + base = 12 # A little bit higher than normal, they're very handy for further development + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_logging_camp_improvement_from_culture_modifier = yes + modifier = { + factor = 0 + scope:holder = { + government_has_flag = government_is_republic + } + NOT = { + has_building_or_higher = guild_halls_01 + } + } + modifier = { + factor = 4 + scope:holder.culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } +} + +logging_camps_02 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + build_speed = good_building_build_speed_tier_2 + } + county_modifier = { + church_holding_build_gold_cost = -0.05 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_2 + stationed_skirmishers_damage_mult = low_maa_damage_tier_2 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.04 + build_gold_cost = -0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + modifier = { + factor = 4 + scope:holder.culture = { + has_cultural_parameter = watermills_forestries_unlock + } + } + } +} + +logging_camps_03 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + build_speed = good_building_build_speed_tier_3 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_3 + stationed_skirmishers_damage_mult = low_maa_damage_tier_3 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.06 + build_gold_cost = -0.03 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +logging_camps_04 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + build_speed = good_building_build_speed_tier_4 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + supply_limit = 300 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_4 + stationed_skirmishers_damage_mult = low_maa_damage_tier_4 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.08 + build_gold_cost = -0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +logging_camps_05 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + build_speed = good_building_build_speed_tier_5 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + supply_limit = 300 + tax_mult = 0.01 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_5 + stationed_skirmishers_damage_mult = low_maa_damage_tier_5 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.1 + build_gold_cost = -0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +logging_camps_06 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + build_speed = good_building_build_speed_tier_6 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + supply_limit = 600 + tax_mult = 0.01 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_6 + stationed_skirmishers_damage_mult = low_maa_damage_tier_6 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.12 + build_gold_cost = -0.06 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +logging_camps_07 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + build_speed = good_building_build_speed_tier_7 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + supply_limit = 600 + tax_mult = 0.02 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_7 + stationed_skirmishers_damage_mult = low_maa_damage_tier_7 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.14 + build_gold_cost = -0.07 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = logging_camps_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +logging_camps_08 = { + construction_time = standard_construction_time + effect_desc = logging_camps_desc + + can_construct_potential = { + building_logging_camps_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + build_speed = good_building_build_speed_tier_8 + } + + character_modifier = { + army_maintenance_mult = -0.01 + } + + county_modifier = { + church_holding_build_gold_cost = -0.05 + supply_limit = 600 + tax_mult = 0.02 + development_growth_factor = 0.02 + } + province_culture_modifier = { + parameter = logging_camps_building_bonuses + stationed_archers_damage_mult = low_maa_damage_tier_8 + stationed_skirmishers_damage_mult = low_maa_damage_tier_8 + } + county_culture_modifier = { + parameter = logging_camps_building_bonuses + build_speed = -0.16 + build_gold_cost = -0.08 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### peat_quarries + +peat_quarries_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + build_speed = normal_building_build_speed_tier_1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.02 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.02 + build_gold_cost = -0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_02 + + type_icon = "icon_building_peat_quarries.dds" + + ai_value = { + base = 12 # A little bit higher than normal, they're very handy for further development + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_peat_quarries_improvement_from_culture_modifier = yes + } +} + +peat_quarries_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + build_speed = normal_building_build_speed_tier_2 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.03 + } + + county_modifier = { + build_gold_cost = -0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.04 + build_gold_cost = -0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +peat_quarries_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + build_speed = normal_building_build_speed_tier_3 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.04 + } + + county_modifier = { + build_gold_cost = -0.05 + supply_limit = 200 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.06 + build_gold_cost = -0.03 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +peat_quarries_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + build_speed = normal_building_build_speed_tier_4 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.05 + } + + county_modifier = { + build_gold_cost = -0.05 + supply_limit = 200 + supply_limit_mult = 0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.08 + build_gold_cost = -0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +peat_quarries_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + build_speed = normal_building_build_speed_tier_5 + hostile_raid_time = 0.1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.06 + } + + county_modifier = { + build_gold_cost = -0.05 + supply_limit = 200 + supply_limit_mult = 0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.10 + build_gold_cost = -0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +peat_quarries_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + build_speed = normal_building_build_speed_tier_6 + hostile_raid_time = 0.1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.07 + } + + county_modifier = { + build_gold_cost = -0.05 + supply_limit = 200 + supply_limit_mult = 0.05 + development_growth_factor = 0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.12 + build_gold_cost = -0.06 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +peat_quarries_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + build_speed = normal_building_build_speed_tier_7 + hostile_raid_time = 0.1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.08 + } + + county_modifier = { + build_gold_cost = -0.1 + supply_limit = 200 + supply_limit_mult = 0.05 + development_growth_factor = 0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.14 + build_gold_cost = -0.07 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = peat_quarries_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +peat_quarries_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_peat_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + build_speed = normal_building_build_speed_tier_8 + hostile_raid_time = 0.1 + } + province_terrain_modifier = { + parameter = coastal_agriculture_building_bonuses + is_coastal = yes + tax_mult = 0.09 + } + + county_modifier = { + build_gold_cost = -0.1 + supply_limit = 600 + supply_limit_mult = 0.05 + development_growth_factor = 0.05 + } + county_culture_modifier = { + parameter = peat_quarries_building_bonuses + build_speed = -0.16 + build_gold_cost = -0.08 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### hill_farms + +hill_farms_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.01 + counter_efficiency = 0.01 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_1 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_02 + + type_icon = "icon_building_hill_farms.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_hill_farms_improvement_from_culture_modifier = yes + modifier = { + factor = 0 + scope:holder = { + government_has_flag = government_is_republic + } + NOT = { + has_building_or_higher = guild_halls_01 + } + } + modifier = { + factor = 4 + culture = { + has_cultural_parameter = windmills_hill_farms_unlock + } + } + } +} + +hill_farms_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + defender_holding_advantage = 1 + stationed_skirmishers_toughness_mult = 0.02 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.02 + counter_efficiency = 0.02 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_2 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.01 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +hill_farms_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + defender_holding_advantage = 1 + stationed_skirmishers_toughness_mult = 0.02 + } + + county_modifier = { + supply_limit = 300 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.03 + counter_efficiency = 0.03 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_3 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hill_farms_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + defender_holding_advantage = 2 + stationed_skirmishers_toughness_mult = 0.04 + } + + county_modifier = { + supply_limit = 300 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.04 + counter_efficiency = 0.04 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_4 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hill_farms_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + defender_holding_advantage = 2 + stationed_skirmishers_toughness_mult = 0.04 + } + + county_modifier = { + supply_limit = 300 + supply_limit_mult = 0.02 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.05 + counter_efficiency = 0.05 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_5 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.03 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hill_farms_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + defender_holding_advantage = 2 + stationed_skirmishers_toughness_mult = 0.04 + } + + county_modifier = { + supply_limit = 300 + supply_limit_mult = 0.02 + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.06 + counter_efficiency = 0.06 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_6 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.03 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hill_farms_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + defender_holding_advantage = 2 + stationed_skirmishers_toughness_mult = 0.04 + } + + county_modifier = { + supply_limit = 600 + supply_limit_mult = 0.02 + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.07 + counter_efficiency = 0.07 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_7 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_farms_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +hill_farms_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_hill_farms_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + defender_holding_advantage = 2 + stationed_skirmishers_toughness_mult = 0.04 + } + + county_modifier = { + supply_limit = 600 + supply_limit_mult = 0.02 + development_growth_factor = 0.1 + } + character_culture_modifier = { + parameter = hill_farms_building_bonuses + knight_effectiveness_mult = 0.08 + counter_efficiency = 0.08 + } + province_culture_modifier = { + parameter = hill_farms_building_bonuses + defender_holding_advantage = normal_building_advantage_tier_8 + } + county_culture_modifier = { + parameter = hill_farms_building_bonuses + levy_size = 0.04 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### elephant_pens + +elephant_pens_01 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_1_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_1 + build_speed = good_building_build_speed_tier_1 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_1 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_1 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_1 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.01 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_02 + + type_icon = "icon_building_elephant_pens.dds" + + ai_value = { + base = 12 # A little bit higher than normal, they're very handy for further development + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + } +} + +elephant_pens_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_2_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_2 + build_speed = good_building_build_speed_tier_2 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_2 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_2 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_2 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.02 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +elephant_pens_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_3_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_3 + build_speed = good_building_build_speed_tier_3 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_3 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_3 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_3 + } + county_modifier = { + build_gold_cost = -0.02 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.03 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.15 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +elephant_pens_04 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_4_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_4 + build_speed = good_building_build_speed_tier_4 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_4 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_4 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_4 + } + county_modifier = { + build_gold_cost = -0.02 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.04 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.20 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +elephant_pens_05 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_5_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_5 + build_speed = good_building_build_speed_tier_5 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_5 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_5 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_5 + } + county_modifier = { + build_gold_cost = -0.02 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.05 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.25 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +elephant_pens_06 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_6_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_6 + build_speed = good_building_build_speed_tier_6 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_6 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_6 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_6 + } + county_modifier = { + build_gold_cost = -0.02 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.06 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.30 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +elephant_pens_07 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_7_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_7 + build_speed = good_building_build_speed_tier_7 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_7 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_7 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_7 + } + county_modifier = { + build_gold_cost = -0.02 + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.07 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.35 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = elephant_pens_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +elephant_pens_08 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_elephant_pens_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = normal_building_tier_8_cost + + province_modifier = { + monthly_income = normal_building_tax_tier_8 + build_speed = good_building_build_speed_tier_8 + stationed_elephant_cavalry_damage_mult = high_maa_damage_tier_8 + stationed_elephant_cavalry_toughness_mult = high_maa_toughness_tier_8 + } + character_modifier = { + knight_effectiveness_mult = high_knight_effectiveness_mult_tier_8 + } + county_modifier = { + build_gold_cost = -0.02 + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = elephant_pens_building_bonuses + elephant_cavalry_maintenance_mult = -0.08 + } + county_culture_modifier = { + parameter = elephant_pens_building_bonuses + development_growth_factor = 0.40 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### plantations + +plantations_01 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_1 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.01 + camel_cavalry_maintenance_mult = -0.01 + light_cavalry_recruitment_cost_mult = -0.01 + camel_cavalry_recruitment_cost_mult = -0.01 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_02 + + type_icon = "icon_building_plantations.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_plantations_improvement_from_culture_modifier = yes + modifier = { + factor = 0 + building_orchards_requirement_terrain = yes + NOT = { + has_building_or_higher = orchards_01 + } + } + modifier = { + factor = 0 + building_pastures_requirement_terrain = yes + NOT = { + has_building_or_higher = pastures_01 + } + } + modifier = { + factor = 0 + building_cereal_fields_requirement_terrain = yes + NOT = { + has_building_or_higher = cereal_fields_01 + } + } + modifier = { + factor = 0 + has_building_or_higher = city_01 + NOT = { + has_building_or_higher = guild_halls_01 + } + } + } +} + +plantations_02 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_2 + tax_mult = 0.01 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.02 + camel_cavalry_maintenance_mult = -0.02 + light_cavalry_recruitment_cost_mult = -0.02 + camel_cavalry_recruitment_cost_mult = -0.02 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +plantations_03 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_3 + tax_mult = 0.01 + stationed_light_cavalry_toughness_mult = 0.02 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.03 + camel_cavalry_maintenance_mult = -0.03 + light_cavalry_recruitment_cost_mult = -0.03 + camel_cavalry_recruitment_cost_mult = -0.03 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +plantations_04 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_4 + tax_mult = 0.02 + stationed_light_cavalry_toughness_mult = 0.02 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.04 + camel_cavalry_maintenance_mult = -0.04 + light_cavalry_recruitment_cost_mult = -0.04 + camel_cavalry_recruitment_cost_mult = -0.04 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +plantations_05 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_5 + tax_mult = 0.02 + supply_limit = 200 + stationed_light_cavalry_toughness_mult = 0.02 + } + county_modifier = { + development_growth_factor = 0.02 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.05 + camel_cavalry_maintenance_mult = -0.05 + light_cavalry_recruitment_cost_mult = -0.05 + camel_cavalry_recruitment_cost_mult = -0.05 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +plantations_06 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_6 + tax_mult = 0.02 + supply_limit = 400 + stationed_light_cavalry_toughness_mult = 0.02 + } + county_modifier = { + development_growth_factor = 0.02 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.06 + camel_cavalry_maintenance_mult = -0.06 + light_cavalry_recruitment_cost_mult = -0.06 + camel_cavalry_recruitment_cost_mult = -0.06 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +plantations_07 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_7 + tax_mult = 0.02 + supply_limit = 400 + stationed_light_cavalry_toughness_mult = 0.02 + } + county_modifier = { + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.07 + camel_cavalry_maintenance_mult = -0.07 + light_cavalry_recruitment_cost_mult = -0.07 + camel_cavalry_recruitment_cost_mult = -0.07 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = plantations_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +plantations_08 = { + construction_time = quick_construction_time + effect_desc = plantations_effect_desc + + can_construct_potential = { + building_plantations_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_8 + tax_mult = 0.02 + supply_limit = 600 + stationed_light_cavalry_toughness_mult = 0.02 + } + county_modifier = { + development_growth_factor = 0.05 + } + character_culture_modifier = { + parameter = plantations_building_bonuses + light_cavalry_maintenance_mult = -0.08 + camel_cavalry_maintenance_mult = -0.08 + light_cavalry_recruitment_cost_mult = -0.08 + camel_cavalry_recruitment_cost_mult = -0.08 + } + province_culture_modifier = { + parameter = plantations_building_bonuses + monthly_income = poor_building_extra_tax_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### quarries + +quarries_01 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_1 + build_speed = good_building_build_speed_tier_1 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.01 + pikemen_maintenance_mult = -0.01 + heavy_cavalry_maintenance_mult = -0.01 + men_at_arms_recruitment_cost = -0.01 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.01 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_02 + + type_icon = "icon_building_quarries.dds" + + ai_value = { + base = 12 # A little bit higher than normal, they're very handy for further development + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_quarries_improvement_from_culture_modifier = yes + modifier = { + factor = 0 + scope:holder = { + government_has_flag = government_is_republic + } + NOT = { + has_building_or_higher = guild_halls_01 + } + } + } +} + +quarries_02 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_crop_rotation + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_2 + build_speed = good_building_build_speed_tier_2 + } + character_modifier = { + men_at_arms_maintenance = -0.01 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.02 + pikemen_maintenance_mult = -0.02 + heavy_cavalry_maintenance_mult = -0.02 + men_at_arms_recruitment_cost = -0.02 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.02 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +quarries_03 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_3 + build_speed = good_building_build_speed_tier_3 + } + county_modifier = { + development_growth_factor = 0.02 + } + character_modifier = { + men_at_arms_maintenance = -0.01 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.03 + pikemen_maintenance_mult = -0.03 + heavy_cavalry_maintenance_mult = -0.03 + men_at_arms_recruitment_cost = -0.03 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.03 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +quarries_04 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_4 + build_speed = good_building_build_speed_tier_4 + } + county_modifier = { + development_growth_factor = 0.02 + build_gold_cost = -0.05 + } + character_modifier = { + men_at_arms_maintenance = -0.01 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.04 + pikemen_maintenance_mult = -0.04 + heavy_cavalry_maintenance_mult = -0.04 + men_at_arms_recruitment_cost = -0.04 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.04 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_4 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +quarries_05 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_5 + build_speed = good_building_build_speed_tier_5 + } + county_modifier = { + development_growth_factor = 0.02 + build_gold_cost = -0.05 + } + character_modifier = { + men_at_arms_maintenance = -0.02 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.05 + pikemen_maintenance_mult = -0.05 + heavy_cavalry_maintenance_mult = -0.05 + men_at_arms_recruitment_cost = -0.05 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.05 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_5 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +quarries_06 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_guilds + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_6 + build_speed = good_building_build_speed_tier_6 + } + county_modifier = { + development_growth_factor = 0.02 + build_gold_cost = -0.05 + garrison_size = 0.1 + } + character_modifier = { + men_at_arms_maintenance = -0.02 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.06 + pikemen_maintenance_mult = -0.06 + heavy_cavalry_maintenance_mult = -0.06 + men_at_arms_recruitment_cost = -0.06 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.06 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_6 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +quarries_07 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_7 + build_speed = good_building_build_speed_tier_7 + stationed_heavy_infantry_toughness_mult = 0.02 + stationed_pikemen_toughness_mult = 0.02 + } + county_modifier = { + development_growth_factor = 0.02 + build_gold_cost = -0.05 + garrison_size = 0.1 + } + character_modifier = { + men_at_arms_maintenance = -0.02 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.07 + pikemen_maintenance_mult = -0.07 + heavy_cavalry_maintenance_mult = -0.07 + men_at_arms_recruitment_cost = -0.07 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.07 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_7 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = quarries_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +quarries_08 = { + construction_time = quick_construction_time + + can_construct_potential = { + building_quarries_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + province_modifier = { + monthly_income = poor_building_tax_tier_8 + build_speed = good_building_build_speed_tier_8 + stationed_heavy_infantry_toughness_mult = 0.04 + stationed_pikemen_toughness_mult = 0.04 + stationed_heavy_cavalry_toughness_mult = 0.08 + } + county_modifier = { + development_growth_factor = 0.02 + build_gold_cost = -0.05 + garrison_size = 0.1 + } + character_modifier = { + men_at_arms_maintenance = -0.02 + } + character_culture_modifier = { + parameter = quarries_building_bonuses + heavy_infantry_maintenance_mult = -0.08 + pikemen_maintenance_mult = -0.08 + heavy_cavalry_maintenance_mult = -0.08 + men_at_arms_recruitment_cost = -0.08 + } + county_culture_modifier = { + parameter = quarries_building_bonuses + levy_size = 0.08 + } + province_culture_modifier = { + parameter = ancient_miners_quarries_building_bonuses + monthly_income = poor_building_tax_tier_8 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + } +} diff --git a/common/buildings/00_standard_fortification_buildings.txt b/common/buildings/00_standard_fortification_buildings.txt new file mode 100644 index 00000000..5466fdb1 --- /dev/null +++ b/common/buildings/00_standard_fortification_buildings.txt @@ -0,0 +1,1805 @@ +#################################### +# Standard Fortification Buildings # +#################################### + +# Ramparts - Archers, Skirmishers +# Curtain Walls - Heavy Cavalry, Economy +# Watchtowers - Heavy Infantry, Light Cavalry +# Hill Forts - Pikemen, Skirmishers + +### ramparts + +ramparts_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + levy = normal_building_levy_tier_1 + max_garrison = normal_building_max_garrison_tier_1 + province_modifier = { + fort_level = normal_building_fort_level_tier_1 + stationed_archers_damage_mult = low_maa_damage_tier_1 + stationed_skirmishers_damage_mult = low_maa_damage_tier_1 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_02 + + type_icon = "icon_building_ramparts.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { + factor = 5 + free_building_slots <= 3 + scope:holder.capital_province = this + } + modifier = { + factor = 5 + free_building_slots <= 2 + } + modifier = { + factor = 5 + free_building_slots <= 1 + } + culture_likely_to_fortify_modifier = yes + } +} + +ramparts_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_motte + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + levy = normal_building_levy_tier_2 + max_garrison = normal_building_max_garrison_tier_2 + province_modifier = { + fort_level = normal_building_fort_level_tier_2 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_2 + stationed_skirmishers_damage_mult = low_maa_damage_tier_2 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_2 + travel_danger = -2 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_03 + + ai_value = { + base = 9 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +ramparts_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + levy = normal_building_levy_tier_3 + max_garrison = normal_building_max_garrison_tier_3 + province_modifier = { + fort_level = normal_building_fort_level_tier_3 + defender_holding_advantage = normal_building_advantage_tier_1 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_3 + stationed_skirmishers_damage_mult = low_maa_damage_tier_3 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_3 + travel_danger = -3 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_04 + + ai_value = { + base = 8 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +ramparts_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + levy = normal_building_levy_tier_4 + max_garrison = normal_building_max_garrison_tier_4 + province_modifier = { + fort_level = normal_building_fort_level_tier_4 + defender_holding_advantage = normal_building_advantage_tier_1 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_4 + stationed_skirmishers_damage_mult = low_maa_damage_tier_4 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_4 + travel_danger = -4 + } + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_05 + + ai_value = { + base = 7 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +ramparts_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + levy = normal_building_levy_tier_5 + max_garrison = normal_building_max_garrison_tier_5 + province_modifier = { + fort_level = normal_building_fort_level_tier_5 + defender_holding_advantage = normal_building_advantage_tier_1 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_5 + stationed_skirmishers_damage_mult = low_maa_damage_tier_5 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_5 + travel_danger = -5 + } + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_06 + + ai_value = { + base = 6 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +ramparts_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + levy = normal_building_levy_tier_6 + max_garrison = normal_building_max_garrison_tier_6 + province_modifier = { + fort_level = normal_building_fort_level_tier_6 + defender_holding_advantage = normal_building_advantage_tier_2 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_6 + stationed_skirmishers_damage_mult = low_maa_damage_tier_6 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_6 + travel_danger = -6 + } + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_07 + + ai_value = { + base = 5 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +ramparts_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + levy = normal_building_levy_tier_7 + max_garrison = normal_building_max_garrison_tier_7 + province_modifier = { + fort_level = normal_building_fort_level_tier_7 + defender_holding_advantage = normal_building_advantage_tier_2 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_7 + stationed_skirmishers_damage_mult = low_maa_damage_tier_7 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_7 + travel_danger = -7 + } + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = ramparts_08 + + ai_value = { + base = 4 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +ramparts_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_ramparts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + levy = normal_building_levy_tier_8 + max_garrison = normal_building_max_garrison_tier_8 + province_modifier = { + fort_level = normal_building_fort_level_tier_8 + defender_holding_advantage = normal_building_advantage_tier_2 + tax_mult = 0.02 + stationed_archers_damage_mult = low_maa_damage_tier_8 + stationed_skirmishers_damage_mult = low_maa_damage_tier_8 + stationed_skirmishers_toughness_mult = normal_maa_toughness_tier_8 + travel_danger = -8 + } + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +### curtain_walls + +curtain_walls_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + max_garrison = normal_building_max_garrison_tier_1 + province_modifier = { + monthly_income = poor_building_tax_tier_1 + fort_level = normal_building_fort_level_tier_1 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_1 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_02 + + type_icon = "icon_building_curtain_walls.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { + factor = 5 + free_building_slots <= 3 + scope:holder.capital_province = this + } + modifier = { + factor = 5 + free_building_slots <= 2 + } + modifier = { + factor = 5 + free_building_slots <= 1 + } + } +} + +curtain_walls_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_motte + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + max_garrison = normal_building_max_garrison_tier_2 + province_modifier = { + monthly_income = poor_building_tax_tier_2 + fort_level = normal_building_fort_level_tier_2 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_2 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_2 + travel_danger = -2 + } + + county_modifier = { + supply_limit = 300 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_03 + + ai_value = { + base = 9 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +curtain_walls_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + max_garrison = normal_building_max_garrison_tier_3 + province_modifier = { + monthly_income = poor_building_tax_tier_3 + fort_level = normal_building_fort_level_tier_3 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_3 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_3 + travel_danger = -3 + } + + county_modifier = { + supply_limit = 300 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_04 + + ai_value = { + base = 8 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +curtain_walls_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + max_garrison = normal_building_max_garrison_tier_4 + province_modifier = { + monthly_income = poor_building_tax_tier_4 + fort_level = normal_building_fort_level_tier_4 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_4 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_4 + travel_danger = -4 + } + + county_modifier = { + supply_limit = 300 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_05 + + ai_value = { + base = 7 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +curtain_walls_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + max_garrison = normal_building_max_garrison_tier_5 + province_modifier = { + monthly_income = poor_building_tax_tier_5 + fort_level = normal_building_fort_level_tier_5 + defender_holding_advantage = normal_building_advantage_tier_2 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_5 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_5 + travel_danger = -5 + } + + county_modifier = { + supply_limit = 300 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_06 + + ai_value = { + base = 6 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +curtain_walls_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + max_garrison = normal_building_max_garrison_tier_6 + province_modifier = { + monthly_income = poor_building_tax_tier_6 + fort_level = normal_building_fort_level_tier_6 + defender_holding_advantage = normal_building_advantage_tier_2 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_6 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_6 + travel_danger = -6 + } + + county_modifier = { + supply_limit = 300 + supply_limit_mult = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_07 + + ai_value = { + base = 5 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +curtain_walls_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + max_garrison = normal_building_max_garrison_tier_7 + province_modifier = { + monthly_income = poor_building_tax_tier_7 + fort_level = normal_building_fort_level_tier_7 + defender_holding_advantage = normal_building_advantage_tier_2 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_7 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_7 + travel_danger = -7 + } + + county_modifier = { + supply_limit = 300 + supply_limit_mult = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = curtain_walls_08 + + ai_value = { + base = 4 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +curtain_walls_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + building_curtain_walls_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + max_garrison = normal_building_max_garrison_tier_8 + province_modifier = { + monthly_income = poor_building_tax_tier_8 + fort_level = normal_building_fort_level_tier_8 + defender_holding_advantage = normal_building_advantage_tier_2 + stationed_heavy_cavalry_damage_mult = low_maa_damage_tier_8 + stationed_heavy_cavalry_toughness_mult = low_maa_toughness_tier_8 + travel_danger = -8 + } + + county_modifier = { + supply_limit = 300 + supply_limit_mult = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + ai_economical_building_preference_modifier = yes + } +} + +### watchtowers + +watchtowers_01 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + max_garrison = normal_building_max_garrison_tier_1 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_1 + fort_level = normal_building_fort_level_tier_1 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_1 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_1 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_1 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_02 + + type_icon = "icon_building_watchtowers.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { + factor = 5 + free_building_slots <= 3 + scope:holder.capital_province = this + } + modifier = { + factor = 5 + free_building_slots <= 2 + } + modifier = { + factor = 5 + free_building_slots <= 1 + } + } +} + +watchtowers_02 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_motte + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + max_garrison = normal_building_max_garrison_tier_2 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_2 + fort_level = normal_building_fort_level_tier_2 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_2 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_2 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_2 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_2 + travel_danger = -2 + } + + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_03 + + ai_value = { + base = 9 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +watchtowers_03 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + max_garrison = normal_building_max_garrison_tier_3 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_3 + fort_level = normal_building_fort_level_tier_3 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_3 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_3 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_3 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_3 + travel_danger = -3 + } + + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_04 + + ai_value = { + base = 8 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +watchtowers_04 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + max_garrison = normal_building_max_garrison_tier_4 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_4 + fort_level = normal_building_fort_level_tier_4 + supply_limit = 300 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_4 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_4 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_4 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_4 + travel_danger = -4 + } + + county_modifier = { + hostile_raid_time = 0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_05 + + ai_value = { + base = 7 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +watchtowers_05 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + max_garrison = normal_building_max_garrison_tier_5 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_5 + fort_level = normal_building_fort_level_tier_5 + supply_limit = 300 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_5 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_5 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_5 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_5 + travel_danger = -5 + epidemic_resistance = 5 + } + + county_modifier = { + hostile_raid_time = 0.15 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_06 + + ai_value = { + base = 6 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +watchtowers_06 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + max_garrison = normal_building_max_garrison_tier_6 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_6 + fort_level = normal_building_fort_level_tier_6 + supply_limit = 300 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_6 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_6 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_6 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_6 + travel_danger = -6 + epidemic_resistance = 8 + } + + county_modifier = { + hostile_raid_time = 0.15 + supply_limit_mult = 0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_07 + + ai_value = { + base = 5 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +watchtowers_07 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + max_garrison = normal_building_max_garrison_tier_7 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_7 + fort_level = normal_building_fort_level_tier_7 + supply_limit = 600 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_7 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_7 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_7 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_7 + travel_danger = -7 + epidemic_resistance = 10 + } + + county_modifier = { + hostile_raid_time = 0.15 + supply_limit_mult = 0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = watchtowers_08 + + ai_value = { + base = 4 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +watchtowers_08 = { + construction_time = standard_construction_time + effect_desc = watchtowers_desc + + can_construct_potential = { + building_watchtowers_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + max_garrison = normal_building_max_garrison_tier_8 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_8 + fort_level = normal_building_fort_level_tier_8 + supply_limit = 600 + stationed_heavy_infantry_damage_mult = low_maa_damage_tier_8 + stationed_heavy_infantry_toughness_mult = low_maa_toughness_tier_8 + stationed_light_cavalry_damage_mult = low_maa_damage_tier_8 + stationed_light_cavalry_toughness_mult = low_maa_toughness_tier_8 + travel_danger = -8 + epidemic_resistance = 12 + } + + county_modifier = { + hostile_raid_time = 0.2 + supply_limit_mult = 0.05 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + modifier = { + add = 1 + scope:holder = { + culture = { + has_cultural_parameter = ai_more_likely_to_fortify + } + } + } + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +### hill_forts + +hill_forts_01 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_1_cost + + max_garrison = good_building_max_garrison_tier_1 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_1 + fort_level = good_building_fort_level_tier_1 + stationed_skirmishers_damage_mult = low_maa_damage_tier_1 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_1 + stationed_pikemen_damage_mult = low_maa_damage_tier_1 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_1 + travel_danger = -1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_02 + + type_icon = "icon_building_hill_forts.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { + factor = 5 + free_building_slots <= 3 + scope:holder.capital_province = this + } + modifier = { + factor = 5 + free_building_slots <= 2 + } + modifier = { + factor = 5 + free_building_slots <= 1 + } + } +} + +hill_forts_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:holder.culture = { + has_innovation = innovation_motte + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_2_cost + + max_garrison = good_building_max_garrison_tier_2 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_2 + fort_level = good_building_fort_level_tier_2 + stationed_skirmishers_damage_mult = low_maa_damage_tier_2 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_2 + stationed_pikemen_damage_mult = low_maa_damage_tier_2 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_2 + travel_danger = -2 + } + county_modifier = { + monthly_county_control_growth_factor = 0.1 + monthly_county_control_decline_factor = -0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_03 + + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +hill_forts_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_3_cost + + max_garrison = good_building_max_garrison_tier_3 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_3 + fort_level = good_building_fort_level_tier_3 + stationed_skirmishers_damage_mult = low_maa_damage_tier_3 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_3 + stationed_pikemen_damage_mult = low_maa_damage_tier_3 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_3 + travel_danger = -3 + } + county_modifier = { + monthly_county_control_growth_factor = 0.1 + monthly_county_control_decline_factor = -0.1 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_04 + + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +hill_forts_04 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_battlements + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_4_cost + + max_garrison = good_building_max_garrison_tier_4 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_4 + fort_level = good_building_fort_level_tier_4 + stationed_skirmishers_damage_mult = low_maa_damage_tier_4 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_4 + stationed_pikemen_damage_mult = low_maa_damage_tier_4 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_4 + travel_danger = -4 + } + county_modifier = { + monthly_county_control_growth_factor = 0.1 + monthly_county_control_decline_factor = -0.1 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_05 + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +hill_forts_05 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_5_cost + + max_garrison = good_building_max_garrison_tier_5 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_5 + fort_level = good_building_fort_level_tier_5 + stationed_skirmishers_damage_mult = low_maa_damage_tier_5 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_5 + stationed_pikemen_damage_mult = low_maa_damage_tier_5 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_5 + travel_danger = -5 + } + county_modifier = { + monthly_county_control_growth_factor = 0.15 + monthly_county_control_decline_factor = -0.15 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_06 + + ai_value = { + base = 6 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +hill_forts_06 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:holder.culture = { + has_innovation = innovation_hoardings + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_6_cost + + max_garrison = good_building_max_garrison_tier_6 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_6 + fort_level = good_building_fort_level_tier_6 + stationed_skirmishers_damage_mult = low_maa_damage_tier_6 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_6 + stationed_pikemen_damage_mult = low_maa_damage_tier_6 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_6 + travel_danger = -6 + } + county_modifier = { + monthly_county_control_growth_factor = 0.15 + monthly_county_control_decline_factor = -0.15 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_07 + + ai_value = { + base = 5 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +hill_forts_07 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_7_cost + + max_garrison = good_building_max_garrison_tier_7 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_7 + fort_level = good_building_fort_level_tier_7 + stationed_skirmishers_damage_mult = low_maa_damage_tier_7 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_7 + stationed_pikemen_damage_mult = low_maa_damage_tier_7 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_7 + travel_danger = -7 + } + county_modifier = { + monthly_county_control_growth_factor = 0.15 + monthly_county_control_decline_factor = -0.15 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + next_building = hill_forts_08 + + ai_value = { + base = 4 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} + +hill_forts_08 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_hill_forts_requirement_terrain = yes + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:holder.culture = { + has_innovation = innovation_machicolations + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + cost_gold = cheap_building_tier_8_cost + + max_garrison = good_building_max_garrison_tier_8 + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_8 + fort_level = good_building_fort_level_tier_8 + stationed_skirmishers_damage_mult = low_maa_damage_tier_8 + stationed_skirmishers_toughness_mult = low_maa_toughness_tier_8 + stationed_pikemen_damage_mult = low_maa_damage_tier_8 + stationed_pikemen_toughness_mult = low_maa_toughness_tier_8 + travel_danger = -8 + } + county_modifier = { + monthly_county_control_growth_factor = 0.2 + monthly_county_control_decline_factor = -0.2 + levy_size = 0.02 + } + + on_complete = { + #Mandala Creator Aspect + creator_mandala_built_regular_building_piety_effect = yes + } + + ai_value = { + base = 3 + ai_general_building_modifier = yes + directive_to_fortify_modifier = yes + } +} diff --git a/common/character_interactions/00_character_interactions.txt b/common/character_interactions/00_character_interactions.txt new file mode 100644 index 00000000..85a81400 --- /dev/null +++ b/common/character_interactions/00_character_interactions.txt @@ -0,0 +1,2696 @@ +# Add general actions here, if any. + +offer_vassalization_interaction = { + category = interaction_category_vassal + icon = icon_vassal + + desc = offer_vassalization_interaction_desc + + ai_targets = { + ai_recipients = neighboring_rulers + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + is_shown = { + scope:actor = { + is_landed = yes + } + scope:recipient = { + this != scope:actor + is_playable_character = yes + OR = { + AND = { + top_liege = this + is_tributary = no + } + is_tributary_of_suzerain_or_above = scope:actor + } + trigger_if = { + limit = { + scope:actor = { + NOT = { government_has_flag = government_is_mandala } + } + } + highest_held_title_tier < scope:actor.highest_held_title_tier + } + NOR = { + government_has_flag = cannot_be_vassal_or_liege + government_has_flag = government_is_herder + } + } + # Temujin cannot make Jamukha his subject once he leaves him + NOT = { + scope:actor = { + has_variable = had_mpo_temujin_flavor_0010 + var:had_mpo_temujin_flavor_0010 ?= scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + trigger_if = { + limit = { is_confederation_member = yes } + exists = house.house_confederation + } + trigger_if = { + limit = { + has_title = title:h_china + } + situation:dynastic_cycle ?= { + NOT = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + trigger_if = { + limit = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + scope:recipient = { + custom_tooltip = { + text = recipient_is_not_celestial_desc + government_has_flag = government_is_celestial + } + } + } + } + } + } + scope:recipient = { + is_at_war = no + is_confederation_member = no + + custom_description = { + text = was_recently_granted_independence + NOT = { + has_opinion_modifier = { + modifier = granted_independence_opinion + target = scope:actor + } + } + } + trigger_if = { + limit = { is_tributary = yes } + custom_tooltip = { + text = was_recently_granted_independence + scope:recipient.suzerain = scope:actor + } + } + trigger_if = { + limit = { + scope:actor = { government_has_flag = government_is_mandala } + } + highest_held_title_tier < scope:actor.highest_held_title_tier + } + } + } + + greeting = positive + notification_text = OFFER_VASSALIZATION_INTERACTION_NOTIFICATION + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + piety = { + value = 0 + scope:actor = { + if = { + limit = { government_has_flag = government_is_mandala } + add = medium_piety_value + } + } + } + } + + ai_min_reply_days = 5 + ai_max_reply_days = 10 + + ai_accept = { + base = -50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + # Military power difference modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Ageism modifier vs kids. + # Ruler Legitimacy modifier. + # Claimant modifier. + # FP3 Piety Level modifier. + + # OPINION SCALES + # Dread + # Compare Opinion modifier. + + #ALL these modifiers are also used in impress_intent_vassalization_acceptance_value, keep them synced + + # PERKS + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = true_ruler_value + } + modifier = { # Education 5 boost + desc = offer_vassalization_education_diplomacy_5_tt + trigger = { + scope:actor = { has_trait_with_flag = offer_vassalisation_25 } + } + add = 25 + } + + # EVENTS - temporary bonuses gained by events + modifier = { + desc = event_bonus_to_vassal_accept_tt + trigger = { + scope:actor = { has_character_modifier = event_bonus_to_vassal_accept } + } + add = 20 + } + + + # STRUGGLES - bonus gained by successful Sway scheme during the Persian Struggle + modifier = { + desc = fp3_persian_struggle_previously_swayed_tt + trigger = { + scope:recipient = { + has_opinion_modifier = { + modifier = scheme_sway_and_compelled_to_submit_opinion + target = scope:actor + } + } + } + add = 20 + } + + modifier = { #Rekindler of Iran + desc = fp3_rekindler_of_iran_modifier_reason + trigger = { + AND = { + scope:actor = { dynasty ?={ has_dynasty_modifier = fp3_rekindler_of_iran_modifier } } + scope:recipient = { culture = { has_cultural_pillar = heritage_iranian } } + } + } + add = 20 + } + + # OBEDIENCE + modifier = { + desc = obedient_interaction_reason + trigger = { + is_obedient_to = scope:actor + } + add = 20 + } + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOR = { + has_same_culture_as = scope:recipient + government_has_flag = government_is_nomadic # Nomads do not care about Culture + has_trait = nomadic_philosophy + } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + modifier = { #Has no Available Vassal Limit + desc = offer_vassalization_interaction_aibehavior_vassal_limit_tt + trigger = { + scope:actor = { + vassal_limit_available < 1 + } + } + add = { + value = -1000 + } + } + + + # MAIN + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -40 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -40 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -40 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + faith != scope:actor.faith + NOT = { + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -20 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -20 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -20 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + faith != scope:actor.faith + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #I am a King! Or Emperor! + desc = offer_vassalization_interaction_aibehavior_hightier_tt + trigger = { + NAND = { + scope:actor = { + government_has_flag = government_is_celestial + highest_held_title_tier >= tier_hegemony + } + scope:recipient = { + government_has_flag = government_is_celestial + } + } + scope:recipient = { highest_held_title_tier >= tier_kingdom } + } + add = { + value = -50 + if = { + limit = { + scope:recipient = { + OR = { + government_has_flag = government_is_republic + government_has_flag = government_is_theocracy + } + } + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 10 + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 20 + } + add = -100 + } + if = { + limit = { + scope:recipient = { highest_held_title_tier = tier_empire } + } + multiply = 1.5 # We bump this up for emperors + } + } + } + modifier = { #We just fought against each other. + desc = offer_vassalization_interaction_aibehavior_recent_war_tt + trigger = { + scope:recipient = { + any_truce_holder = { + this = scope:actor + } + } + # Ensure the truce wasn't purchased and is indeed from a war + scope:actor = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:recipient } + } + } + scope:recipient = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:actor } + } + } + } + add = -50 + } + modifier = { #I fought an independence war against you. + desc = offer_vassalization_interaction_aibehavior_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor + } + } + add = -200 + } + modifier = { # I am Tribal and you are not + desc = interaction_tribal_vs_nontribal + trigger = { + scope:recipient = { + government_has_flag = government_is_tribal + } + scope:actor = { + NOT = { government_has_flag = government_is_tribal } + } + } + add = -20 + } + modifier = { # You are Tribal and I am not + desc = interaction_nontribal_vs_tribal + trigger = { + scope:actor = { + government_has_flag = government_is_tribal + } + scope:recipient = { + NOT = { government_has_flag = government_is_tribal } + } + } + add = -20 + } + modifier = { # I am Nomadic and you are Nomadic + desc = interaction_is_nomadic + trigger = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + scope:actor = { + government_has_flag = government_is_nomadic + } + } + add = -50 + } + modifier = { # I am Nomadic and you are not + desc = interaction_nomadic_vs_nonnomadic + trigger = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + scope:actor = { + NOT = { government_has_flag = government_is_nomadic } + } + } + add = -75 + } + modifier = { # You are Nomadic and I am not + desc = interaction_nonnomadic_vs_nomadic + trigger = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } + } + add = -75 + } + modifier = { # Isolationist tradition + desc = isolationist_reason + trigger = { + scope:actor.culture != scope:recipient.culture + scope:recipient.culture = { + has_cultural_tradition = tradition_isolationist + } + } + add = -20 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -100 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + OR = { + NOT = { government_has_flag = government_is_celestial } + scope:recipient = { + NOT = { government_has_flag = government_is_celestial } + } + } + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 10 + } + modifier = { #Wide difference in rank (Celestial to Celestial) + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + government_has_flag = government_is_celestial + tier_difference = { + target = scope:recipient + value > 1 + } + } + scope:recipient = { + government_has_flag = government_is_celestial + } + } + add = { + value = 20 + multiply = { + value = scope:actor.highest_held_title_tier + subtract = scope:recipient.highest_held_title_tier + } + } + } + modifier = { # Is a Hegemon + desc = offer_vassalization_interaction_aibehavior_hegemony_tt + trigger = { + scope:actor = { highest_held_title_tier = tier_hegemony } + } + add = 10 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 20 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 20 + } + modifier = { #Is not the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_not_rightfulliegetitleholder_tt + trigger = { + NOT = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + } + add = -20 + } + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_neighboring_top_liege_realm_owner = { + this != scope:actor + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 20 + } + modifier = { #Distant Realm — Overseas Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + character_is_realm_neighbor = scope:recipient + NOT = { #Ibiza should want to be a vassal of Mallorca, etc. + character_is_land_realm_neighbor = scope:recipient + scope:actor = { is_rightful_liege_of = scope:recipient } + } + } + } + add = -100 + } + modifier = { #Distant Realm — No Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 200000 } } + } + add = -250 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -500 + } + modifier = { #Military Strength + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.current_military_strength min = 1 } + } + multiply = 20 + ceiling = yes + } + } + modifier = { #Vassal opinion + desc = offer_vassalization_interaction_aibehavior_vassal_opinion_tt + trigger = { + scope:actor = { number_of_powerful_vassals >= 1 } + } + + add = { + value = 0 + scope:actor = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 5 + } + } + + divide = 5 + } + } + + # MINOR + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 10 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 20 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 10 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 20 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -100 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -1000 + } + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 5 + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Iberian Struggle, less likely for outsiders to vassalize inside + add = -35 + desc = iberian_struggle_reason_reason + trigger = { + scope:actor = { + NOT = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + scope:recipient = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + modifier = { #Illegitimacy modifier. + desc = offer_vassalization_interaction_aibehavior_illegitimate_tt + trigger = { + scope:actor = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -10 + } + + modifier = { #Claimant modifier. + desc = offer_vassalization_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -20 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -20 + } + + modifier = { # Paranoid + desc = INTERACTION_PARANOID + trigger = { + scope:recipient = { + has_trait = paranoid + } + } + add = -20 + } + + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -20 + } + + modifier = { # Fickle + desc = INTERACTION_FICKLE + trigger = { + scope:recipient = { + has_trait = fickle + } + } + add = -10 + } + + modifier = { # Stubborn + desc = INTERACTION_STUBBORN + trigger = { + scope:recipient = { + has_trait = stubborn + } + } + add = -10 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 5 + } + + modifier = { # Content + desc = INTERACTION_CONTENT + trigger = { + scope:recipient = { + has_trait = content + } + } + add = 5 + } + + modifier = { # FP3 modifier. + desc = GENERIC_YOUR_PIETY_LEVEL_MODIFIER + trigger = { scope:actor = { any_character_struggle = { has_struggle_phase_parameter = piety_level_affects_vassalage_acceptance } } } + add = { + value = { + value = scope:actor.piety_level + subtract = low_piety_level + } + multiply = 10 + } + } + + # OPINION INFLUENCE + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + opinion_modifier = { #Compare Opinion modifier - Clans care more about opinion + trigger = { + scope:actor = { + government_has_flag = government_is_clan + } + scope:recipient = { + government_has_flag = government_is_clan + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.7 + } + opinion_modifier = { #Compare Opinion modifier. + trigger = { + NOT = { + scope:actor = { government_has_flag = government_is_mandala } #Has their own Opinion modifier + } + OR = { + scope:actor = { + NOT = { government_has_flag = government_is_clan } + } + scope:recipient = { + NOT = { government_has_flag = government_is_clan } + } + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # CONTRACT OPTIONS + modifier = { + add = 60 + scope:recipient = { government_has_flag = government_is_feudal } + scope:religious_exemption = yes + desc = CONTRACT_RELIGIOUS_EXEMPTION_REASON + } + modifier = { + add = 30 + scope:recipient = { government_has_flag = government_is_clan } + scope:religious_exemption_clan = yes + desc = CONTRACT_RELIGIOUS_EXEMPTION_REASON + } + modifier = { + add = 30 + scope:recipient = { government_has_flag = government_is_feudal } + scope:low_obligations = yes + desc = CONTRACT_LOW_TAXES_REASON + } + modifier = { + add = -40 + scope:recipient = { government_has_flag = government_is_feudal } + scope:high_obligations = yes + desc = CONTRACT_HIGH_TAXES_REASON + } + + # INSPECTION BONUSES + modifier = { + desc = "INSPECTION_REASON" + add = 5 + scope:recipient = { + has_variable_list = lesser_inspection_bonus + is_target_in_variable_list = { + name = lesser_inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON" + add = 10 + scope:recipient = { + has_variable_list = inspection_bonus + is_target_in_variable_list = { + name = inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD" + add = 10 + scope:recipient = { + has_variable_list = inspection_reward + is_target_in_variable_list = { + name = inspection_reward + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD_FOCUSED" + add = 10 + scope:actor = { has_character_modifier = inspection_reward_focused_vassal_acceptance } + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -25 + scope:actor = { + has_legitimacy_flag = reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -50 + scope:actor = { + has_legitimacy_flag = very_reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -75 + scope:actor = { + has_legitimacy_flag = massively_reduced_vassalization_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 25 + scope:actor = { + has_legitimacy_flag = increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 50 + scope:actor = { + has_legitimacy_flag = very_increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 75 + scope:actor = { + has_legitimacy_flag = extra_increased_vassalization_acceptance + } + } + + # INFLUENCE + modifier = { + add = 25 + scope:influence_send_option = yes + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + #HISTORICALLY ADMIN PEOPLES WANT TO BE ADMIN + modifier = { + add = 30 + scope:actor = { + government_has_flag = government_is_administrative + } + scope:recipient = { + culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { + this = culture:greek + } + this = culture:han + any_parent_culture_or_above = { + this = culture:han + } + } + } + } + + desc = "HISTORICAL_ADMIN_REASON" + } + + modifier = { # AI-only weights, keep the pope from vassalizing too fast + trigger = { + exists = faith:catholic.religious_head + faith:catholic.religious_head = scope:actor + scope:actor = { is_ai = yes } + } + add = -50 + } + + modifier = { + scope:actor = { + has_variable = severed_head_vassalization + var:severed_head_vassalization = { + this = scope:recipient + } + } + add = 200 + desc = COWED_BY_SEVERED_HEAD_MODIFIER + } + + #ALL these modifiers are also used in impress_intent_vassalization_acceptance_value, keep them synced + + #Mandala + #Mandala Tributaries should not want to be vassals + modifier = { + scope:recipient = { is_tributary_of = scope:actor } + scope:actor = { government_has_flag = government_is_mandala } + add = -35 + desc = is_tributary_of_me_mandala + } + + modifier = { + scope:recipient = { government_has_flag = government_is_mandala } + scope:actor = { government_has_flag = government_is_mandala } + add = -25 + desc = is_mandala_government + } + + #Your Radiance + modifier = { + scope:actor = { has_mandala_capital_trigger = yes } + add = scope:actor.mandala_radiance_value + desc = actor_positive_mandala_radiance + } + + #Tributary Realm Size + subject_realm_size_lose_weight_modifier = { + DEVARAJA = scope:actor + SUBJECT = scope:recipient + } + + #Do they like you? + opinion_modifier = { + trigger = { + scope:actor = { government_has_flag = government_is_mandala } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + } + } + + # Low starting obligations + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_feudal + } + } + flag = low_obligations + localization = low_obligations + } + + # Medium starting obligations + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_feudal + } + } + flag = normal_obligations # If selected then scope:flag_name will be set to yes + localization = normal_obligations # Loc_key for option label + starts_enabled = { always = yes } # Trigger for whether this should be on when the window opens. If not defined, defaults to off + + } + + # High starting obligations + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_feudal + } + } + flag = high_obligations # If selected then scope:flag_name will be set to yes + localization = high_obligations # Loc_key for option label + } + + # Low starting obligations + religious exemption + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_feudal + } + } + is_valid = { + scope:recipient.faith != scope:actor.faith + } + flag = religious_exemption + localization = religious_exemption + } + + # Religious exemption, for clans + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_clan + } + } + is_valid = { + scope:recipient.faith != scope:actor.faith + } + flag = religious_exemption_clan + localization = religious_exemption + } + + # Nothing, for clans + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_clan + } + } + is_valid = { + always = yes + } + flag = no_exemption_clan + localization = no_exemption + } + + send_option = { # EP3 Influence + is_shown = { + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + scope:actor = { influence >= medium_influence_value } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = yes + + on_accept = { + offer_vassalization_interaction_effect = yes + scope:actor = { + trigger_event = char_interaction.0001 + + ## Remove bonus, it's been used + if = { + limit = { has_character_modifier = event_bonus_to_vassal_accept } + remove_character_modifier = event_bonus_to_vassal_accept + } + + if = { # FP3 + limit = { any_character_struggle = { has_struggle_phase_parameter = offer_vassalization_removes_disloyalty } } + scope:recipient = { remove_trait = disloyal } + } + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0002 + } + } + + ai_potential = { + is_adult = yes + top_liege = this + highest_held_title_tier > tier_county + vassal_limit_available > 1 + } + + ai_will_do = { + base = 100 + + # AI prefers to receive higher obligations from their vassals when possible. + modifier = { + factor = 3 + scope:normal_obligations = yes + } + + modifier = { + factor = 4 + scope:high_obligations = yes + } + + # Cynical rulers are happy to offer religious protection to potential vassals, but only when it makes them accept a vassalization offer they would otherwise refuse. + # Zealous rulers become increasingly reluctant to offer religious protection, as they want to enforce religious homogeneity in their realm. + modifier = { + add = { + value = ai_zeal + multiply = -2 + max = 1 + } + scope:religious_exemption = yes + } + + + modifier = { # If the recipient is a player, do not bother sending + factor = 0 + scope:recipient = { + is_ai = no + } + } + } +} + +offer_fealty_interaction = { + category = interaction_category_vassal + icon = icon_liege + + desc = offer_fealty_interaction_desc + + is_shown = { + scope:recipient = { + this != scope:actor + is_landed = yes + top_liege = this # Target has to be independent + } + scope:actor.highest_held_title_tier < scope:recipient.highest_held_title_tier + scope:actor = { + OR = { + is_landed = yes + AND = { + government_has_flag = government_is_landless_minority + scope:recipient = { + any_held_title = { + title_tier = county + any_county_province = { + this = scope:actor.domicile.domicile_location + } + } + } + } + } + top_liege = this # You have to be independent - This check exists to prevent a lot of edge-cases where you can change liege + NOT = { government_has_flag = cannot_be_vassal_or_liege } + is_confederation_member = no + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_imprisoned = no + is_at_war = no + } + scope:recipient = { + custom_description = { + text = "offer_fealty_neighboring_condition" + subject = scope:recipient + OR = { + any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:actor } + any_held_title = { + is_de_jure_liege_or_above_target = scope:actor.capital_barony + } + } + } + #making sure that if this gov types got land you won't be able to swear fealty to them + NOR = { + government_has_flag = government_is_landless_adventurer + government_has_flag = government_is_holy_order + government_has_flag = government_is_mercenary + } + } + } + + greeting = positive + notification_text = OFFER_FEALTY_INTERACTION_NOTIFICATION + + ai_min_reply_days = 5 + ai_max_reply_days = 10 + + ai_accept = { + base = 50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Claimant modifier. + + # OPINION SCALES + # Personality modifier. + # Compare Opinion modifier. + + modifier = { # Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:recipient.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -25 + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + } + add = -25 + } + } + } + + modifier = { # I am a King! + desc = offer_fealty_interaction_aibehavior_hightier_tt + trigger = { + scope:actor = { + highest_held_title_tier >= tier_kingdom + } + } + add = -10 + } + modifier = { # Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 20 + } + modifier = { # They are my Rightful Liege + desc = offer_vassalization_interaction_aibehavior_rightfulvassaltitleholder_tt + trigger = { + scope:recipient = { is_rightful_liege_of = scope:actor } + } + add = 25 + } + modifier = { # Distant Realm. + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:recipient } + } + } + scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value < 200000 } } + } + add = -15 + } + modifier = { # Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:actor = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:recipient } + } + } + trigger_if = { + limit = { + exists = scope:recipient.suzerain + scope:recipient.suzerain != scope:actor + } + } + scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value >= 200000 } } + } + add = -25 + } + + # MINOR + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -10 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -100 + } + modifier = { # Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 10 + } + + modifier = { # Cultural Acceptance + add = -5 + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value < 50 } + } + } + } + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Claimant modifier. + desc = offer_vassalization_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -15 + } + + # PERSONALITY + ai_value_modifier = { + ai_greed = 0.75 + min = 0 + } + + # OPINION INFLUENCE + opinion_modifier = { # Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + } + + # CONTRACT OPTIONS + modifier = { + add = { + value = -10 + if = { + limit = { scope:recipient = { has_trait = zealous } } + add = -30 + } + else_if = { + limit = { scope:recipient = { has_trait = cynical } } + add = 30 + } + } + scope:actor = { government_has_flag = government_is_feudal } + scope:religious_taxation = yes + desc = CONTRACT_RELIGIOUS_TAXATION_REASON + } + modifier = { + add = -40 + scope:actor = { government_has_flag = government_is_feudal } + scope:low_obligations = yes + desc = CONTRACT_LOW_TAXES_REASON + } + modifier = { + add = 40 + scope:actor = { government_has_flag = government_is_feudal } + scope:high_obligations = yes + desc = CONTRACT_HIGH_TAXES_REASON + } + modifier = { + add = { + value = -10 + if = { + limit = { scope:recipient = { has_trait = zealous } } + add = -30 + } + else_if = { + limit = { scope:recipient = { has_trait = cynical } } + add = 30 + } + } + scope:actor = { government_has_flag = government_is_clan } + scope:religious_exemption_clan = yes + desc = CONTRACT_RELIGIOUS_EXEMPTION_REASON + } + # EP3 + modifier = { # cowed from an emperor's impressive visit + add = 10 + desc = cowed_from_visit_interaction_reason + trigger = { + scope:actor = { + has_character_flag = cowed_increased_vassalization_acceptance + } + } + } + #Confederation wants same-culture rulers + modifier = { + add = 100 + desc = CONFEDERATION_CULTURE_REASON + scope:recipient = { + is_confederation_member = yes + culture = { + this = scope:actor.culture + } + } + } + + #Greatest of Khans and Mongol Emperor would prefer submission with tribute + modifier = { + add = -150 + desc = GOK_PREFER_SUBMISSION + scope:recipient = { + highest_held_title_tier >= tier_empire + any_owned_story = { + OR = { + story_type = story_mongol_invasion + story_type = story_greatest_of_khans + } + } + } + } + } + + # Low starting obligations + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_feudal + } + } + flag = low_obligations + localization = low_obligations + } + + # Medium starting obligations + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_feudal + } + } + flag = normal_obligations + localization = normal_obligations + starts_enabled = { always = yes } + + } + + # High starting obligations + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_feudal + } + } + flag = high_obligations + localization = high_obligations + } + + # Medium-high starting obligations + religious protection + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_feudal + } + } + is_valid = { + scope:recipient.faith != scope:actor.faith + } + flag = religious_taxation + localization = religious_taxation + } + + # Religious exemption, for clans + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_clan + } + } + is_valid = { + scope:recipient.faith != scope:actor.faith + } + flag = religious_exemption_clan + localization = religious_exemption + } + + # Nothing, for clans + send_option = { + is_shown = { + scope:actor = { + government_has_flag = government_is_clan + } + } + is_valid = { + always = yes + } + flag = no_exemption_clan + localization = no_exemption + } + + send_options_exclusive = yes + + on_accept = { + offer_fealty_interaction_effect = yes + + scope:actor = { + trigger_event = char_interaction.0010 + if = { + limit = { + government_has_flag = government_is_administrative + scope:recipient = { NOT = { government_has_flag = government_is_administrative } } + } + custom_tooltip = will_change_from_administrative_tt + custom_tooltip = will_lose_administrative_government_type_tt + } + if = { + limit = { + scope:recipient = { + is_confederation_member = yes + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + every_vassal_or_below = { + limit = { + highest_held_title_tier >= tier_county + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + } + } + + add_character_flag = { + flag = new_confederate + years = 3 + } + every_vassal_or_below = { + limit = { + highest_held_title_tier >= tier_county + } + add_character_flag = { + flag = new_confederate + years = 3 + } + } + } + + # If you have a suzerain, they will get a lower opinion of you for not paying tribute anymore + suzerain ?= { + if = { + limit = { + this != scope:actor + this != scope:recipient + } + add_opinion = { + modifier = tributary_ceased_payments_opinion + target = scope:actor + } + } + } + } + scope:recipient = { + if = { + limit = { + has_imprisonment_reason = scope:actor + } + consume_imprisonment_reasons = scope:actor + } + if = { + limit = { + has_revoke_title_reason = scope:actor + } + consume_revoke_title_reason = scope:actor + } + if = { + limit = { + has_banish_reason = scope:actor + } + consume_banish_reasons = scope:actor + } + if = { + limit = { + has_execute_reason = scope:actor + } + consume_execute_reasons = scope:actor + } + } + } + + on_intermediary_accept = { + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0011 + } + } +} + +force_vote_in_succession_election_interaction = { + category = interaction_category_uncategorized + hidden = yes + special_interaction = force_vote_in_succession_election + icon = scroll_scales + + greeting = positive + notification_text = FORCE_VOTE_INTERACTION_NOTIFICATION + force_notification = yes + + desc = force_vote_in_succession_election_interaction_desc + + auto_accept = yes + + is_valid_showing_failures_only = { + custom_description = { + text = must_have_usable_hook_blocker + subject = scope:actor + object = scope:recipient + + scope:actor = { + has_usable_hook = scope:recipient + } + } + } + + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + on_accept = { + scope:actor = { + send_interface_message = { + type = event_title_good + title = force_vote_in_succession_election_interaction + right_icon = scope:recipient + + show_as_tooltip = { + scope:actor = { + use_hook = scope:recipient + custom_tooltip = msg_force_vote_in_succession_election_message + } + } + } + hidden_effect = { + use_hook = scope:recipient + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_voted.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +set_primary_spouse_interaction = { + category = interaction_category_diplomacy + desc = set_primary_spouse_interaction_desc + icon = icon_marriage + + auto_accept = yes + + is_shown = { + scope:actor = { + is_spouse_of = scope:recipient + } + scope:actor.primary_spouse != scope:recipient + } + is_valid_showing_failures_only = { + scope:recipient = { + NOT = { + has_trait = incapable + } + } + } + + on_accept = { + scope:actor.primary_spouse = { + if = { + limit = { + has_opinion_modifier = { + target = scope:actor + modifier = spouse_made_primary_opinion + } + } + remove_opinion = { + modifier = spouse_made_primary_opinion + target = scope:actor + } + } + add_opinion = { + target = scope:actor + modifier = spouse_made_secondary_opinion + } + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_bad + title = set_primary_spouse_interaction_toast + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = set_primary_spouse_interaction_toast_removed + } + } + } + scope:actor = { + if = { + limit = { + scope:actor.primary_spouse = { + is_lowborn = no + } + scope:recipient = { + is_lowborn = yes + } + } + add_legitimacy = { + value = medium_legitimacy_loss + multiply = scope:actor.primary_title.tier + } + every_vassal_or_below = { + limit = { has_vassal_stance = courtly } + custom = every_courtly_vassal + add_opinion = { + modifier = married_lowborn_opinion + target = scope:actor + opinion = -50 + } + } + every_vassal_or_below = { + limit = { has_vassal_stance = glory_hound } + custom = every_glory_hound_vassal + add_opinion = { + modifier = married_lowborn_opinion + target = scope:actor + opinion = -30 + } + } + } + set_primary_spouse = scope:recipient + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = set_primary_spouse_interaction_toast + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = set_primary_spouse_interaction_toast_changed + } + } + } + scope:recipient = { + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = set_primary_spouse_interaction_toast + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = set_primary_spouse_interaction_toast_added + } + } + + if = { + limit = { + has_opinion_modifier = { + target = scope:actor + modifier = spouse_made_secondary_opinion + } + } + remove_opinion = { + modifier = spouse_made_secondary_opinion + target = scope:actor + } + } + add_opinion = { + target = scope:actor + modifier = spouse_made_primary_opinion + } + } + } + + ai_targets = { + ai_recipients = spouses + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 72 + kingdom = 72 + empire = 72 + hegemony = 72 + } + + ai_potential = { + any_spouse = { + count >= 2 + } + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:recipient = { + is_lowborn = no + sum_of_all_skills_value > scope:actor.primary_spouse.sum_of_all_skills_value + } + scope:actor = { + NOR = { + has_relation_friend = scope:actor.primary_spouse + has_relation_lover = scope:actor.primary_spouse + } + } + } + } +} + +grant_independence_interaction = { + category = interaction_category_vassal + force_notification = yes + greeting = positive + notification_text = GRANT_INDEPENDENCE_INTERACTION_NOTIFICATION + icon = independence + interface_priority = 120 + + desc = grant_independence_interaction_desc + + is_shown = { + scope:actor = { + trigger_if = { + limit = { is_confederation_member = yes } + exists = house.house_confederation + } + } + scope:recipient = { + is_vassal_of = scope:actor + OR = { + is_landed = yes + AND = { + government_has_flag = government_is_landless_minority + } + } + } + scope:recipient != scope:actor + } + + is_valid_showing_failures_only = { + NOT = { scope:actor = { is_at_war_with = scope:recipient } } + scope:actor = { + top_liege = this + NOT = { + is_at_war = yes + } + } + custom_description = { + text = is_at_war_with_another_vassal + object = scope:recipient + NOT = { + scope:actor = { + any_vassal_or_below = { + is_at_war_with = scope:recipient + } + } + } + } + custom_description = { + text = is_de_jure_vassal_check + object = scope:recipient + + trigger_if = { # Admin rulers can grant tribal vassals independence regardless of de jure + limit = { + scope:actor = { government_has_flag = government_is_administrative } + scope:recipient = { government_has_flag = government_is_tribal } + } + # Always possible + } + trigger_else = { + NOT = { #Cannot be used against de jure vassals + scope:recipient.primary_title = { + any_this_title_or_de_jure_above = { + holder = scope:actor + } + } + } + } + + } + custom_tooltip = { + text = can_only_remove_diarch_by_elevating_them.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + tgp_blocked_action_against_tenno_trigger = { + ACTOR = scope:actor + TARGET = scope:recipient + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = grant_vassal_independence_interaction_toast + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = grant_vassal_independence_interaction_toast_desc + + # Struggle Parameter + if = { + limit = { + exists = dynasty + NOT = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:recipient.primary_title + } + } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = granting_independence_to_non_dejure_gives_renown + } + } + dynasty = { + add_dynasty_prestige = medium_dynasty_prestige_value + } + } + } + } + } + + scope:recipient = { + #Send notifications + if = { + limit = { + any_liege_or_above = { + is_ai = no + this != scope:actor + } + } + every_liege_or_above = { + limit = { + is_ai = no + this != scope:actor + } + trigger_event = vassal_interaction.0023 + } + } + if = { + limit = { + any_liege_or_above = { + any_vassal = { + is_ai = no + NOR = { + this = scope:recipient + this = scope:actor + } + } + } + } + every_liege_or_above = { + limit = { + any_vassal = { + is_ai = no + NOR = { + this = scope:recipient + this = scope:actor + } + } + } + every_vassal = { + limit = { + is_ai = no + this != scope:recipient + } + trigger_event = { + id = vassal_interaction.0022 + days = 3 + } + } + } + } + + add_opinion = { + target = scope:actor + modifier = granted_independence_opinion + } + + add_truce_both_ways = { + character = scope:actor + days = 3650 + name = TRUCE_GRANT_INDEPENDENCE + } + + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = yes + } + becomes_independent = { + change = scope:change + } + + resolve_title_and_vassal_change = scope:change + } + + # Struggle Catalysts. + scope:actor = { + if = { + limit = { + catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + CHAR1 = scope:actor + CHAR2 = scope:recipient + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + character = scope:actor + } + } + } + + if = { + limit = { + NOT = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:recipient.primary_title + } + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_independence_from_non_dejure_vassal + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_independence_from_non_dejure_vassal + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_independence_from_non_dejure_vassal + character = scope:actor + } + } + } + } + + # Grant independence to non de_jure + + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_grant_independence.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_will_do = { + base = 0 #The AI should never do this! + + # Except in the context of Struggle + modifier = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + NOT = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:recipient.primary_title + } + } + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_independence_from_non_dejure_vassal + } + has_character_flag = agenda_towards_escalation + } + } + add = -50 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_independence_from_non_dejure_vassal + } + } + } + add = 100 + } + } + } + + # Unity modifiers + evaluate_action_decreasing_house_unity = { + VALUE = 10 + } + } +} + +expose_secret_interaction = { + interface_priority = 120 + common_interaction = no + category = interaction_category_hostile + interface = blackmail + icon = secret + + desc = expose_secret_interaction_desc + + is_shown = { + scope:recipient = { + any_secret = { + is_known_by = scope:actor + } + this != scope:actor + age > 10 + } + } + + is_valid_showing_failures_only = { + } + + on_accept = { + scope:actor = { + if = { + limit = { + is_landless_adventurer = yes + has_perk = court_of_shadows_perk + } + add_prestige = { + value = 100 + multiply = { + value = scope:recipient.highest_held_title_tier + add = 1 + } + min = 50 + } + } + if = { + limit = { + exists = scope:target + } + scope:target = { + expose_secret = scope:actor + } + } + else = { + every_known_secret = { + limit = { + secret_owner = scope:recipient + } + expose_secret = scope:actor + } + } + if = { + limit = { + has_title = title:e_minister_of_justice + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = other_rulers } + } + OR = { + scope:recipient = { + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = other_rulers } + } + } + scope:target.secret_target = { + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = other_rulers } + } + } + } + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + if = { + limit = { + government_has_flag = government_has_influence + } + change_influence = { + value = minor_influence_gain + multiply = scope:recipient.highest_held_title_tier + } + } + situation:dynastic_cycle = { + if = { + limit = { + situation_top_has_catalyst = catalyst_minister_exposed_secret + } + trigger_situation_catalyst = { + catalyst = catalyst_minister_exposed_secret + character = scope:actor + } + } + } + } + + stress_impact = { + honest = minor_stress_impact_loss + just = minor_stress_impact_loss + shy = miniscule_stress_impact_gain + } + } + + scope:recipient = { + stress_impact = { + honest = minor_stress_impact_loss + just = minor_stress_impact_loss + deceitful = minor_stress_impact_gain + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_secret_exposure.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = yes + + ai_will_do = { + base = 0 + + # Struggle + modifier = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + is_important_or_vip_struggle_character = yes + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_important + } + has_character_flag = agenda_towards_escalation + } + } + add = 200 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_important + } + } + } + add = -100 + } + } + } + modifier = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + has_trait = fp3_struggle_supporter + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_supporter + } + has_trait = fp3_struggle_detractor + } + } + add = 200 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_supporter + } + } + } + add = -100 + } + } + } + modifier = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + has_trait = fp3_struggle_detractor + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_detractor + } + has_trait = fp3_struggle_supporter + } + } + add = 200 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_reveal_secret_detractor + } + } + } + add = -100 + } + } + } + + # Unity modifiers + evaluate_action_decreasing_house_unity = { + VALUE = 100 + } + } +} diff --git a/common/character_interactions/00_culture_interactions.txt b/common/character_interactions/00_culture_interactions.txt new file mode 100644 index 00000000..c71c6e77 --- /dev/null +++ b/common/character_interactions/00_culture_interactions.txt @@ -0,0 +1,388 @@ +# Interaction used to convert people when you hybridize or diverge culture +# Note that it will only be applied to vassals of the parent culture(s) +# Acceptance is checked *before* culture conversion happens so that it'll be correct in the UI +# This has the culture traits available in the traits list: +# modifier = { +# add = 10 +# desc = TEST +# culture_pillar:ethos_bellicose = { is_in_list = traits } +# } + +request_culture_conversion_interaction = { + category = interaction_category_religion + special_interaction = request_culture_conversion_interaction + popup_on_receive = yes + + desc = ask_for_conversion_interaction_desc + + hidden = yes + + is_shown = { + scope:actor.culture != scope:recipient.culture + scope:recipient.liege = scope:actor + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + is_valid_showing_failures_only = { + } + + ai_accept = { + base = -10 + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + } + + modifier = { + desc = ASK_FOR_CONVERSION_SAME_CULTURE_PRESTIGE_LEVEL + add = { + value = 10 + multiply = scope:actor.prestige_level + } + scope:actor.prestige_level > 0 + scope:recipient.culture = scope:actor.culture + } + + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_DIPLOMACY + add = { + value = scope:actor.diplomacy + subtract = scope:recipient.diplomacy + multiply = 5 + } + } + + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_IS_CYNICAL + add = 30 + scope:recipient = { + has_trait = cynical + } + } + + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_IS_STUBBORN + add = -30 + scope:recipient = { + has_trait = stubborn + } + } + + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + new_culture_created_vassal_conversion_effect = { + CONVERTEE = scope:recipient + CONVERTER = scope:actor + CULTURE = scope:actor.culture + } + } +} + +ai_cultural_hybridization_interaction = { + + hidden = yes + + auto_accept = yes + + ai_potential = { + has_dlc_feature = hybridize_culture + OR = { + top_liege = this + highest_held_title_tier >= tier_kingdom + } + sub_realm_size >= 4 + is_physically_able_adult = yes + is_at_war = no + NOT = { + has_game_rule = none_hybrid_culture_ai_frequency + } + } + + is_shown = { + scope:actor = { + is_ai = yes + } + } + + has_valid_target = { + exists = scope:target + } + + ai_set_target = { + scope:actor = { + if = { + limit = { + any_sub_realm_county = { + culture != scope:actor.culture + culture = { + cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value } + scope:actor = { + can_hybridize = prev + } + } + } + } + every_sub_realm_county = { + limit = { + culture != scope:actor.culture + culture = { + cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value } + scope:actor = { + can_hybridize = prev + } + } + } + culture = { + add_to_list = culture_list + } + } + + ordered_in_list = { + list = culture_list + limit = { culture_realm_size >= 3 } + order_by = culture_realm_size + + save_scope_as = target + } + } + } + } + + on_accept = { + # Global cooldowns for the lower frequency game rule settings + if = { + limit = { + has_game_rule = less_common_hybrid_culture_ai_frequency + } + set_global_variable = { name = has_ai_hybrid_event_cooldown value = yes days = 3650 } + } + scope:actor = { + create_hybrid_culture_with_side_effects = scope:target + } + } + + ai_targets = { + ai_recipients = self + } + + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_will_do = { + base = 100 + + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + + modifier = { + factor = 0.2 + has_game_rule = less_common_hybrid_culture_ai_frequency + } + + modifier = { + factor = 0 + exists = global_var:has_ai_hybrid_event_cooldown + } + + modifier = { + factor = 0 + culture = { + has_cultural_parameter = harder_to_hybridize + } + } + + modifier = { # The AI should only want to hybridize if they're the second ruler of their culture for their primary title + factor = 0 + OR = { + NOT = { + exists = primary_title.previous_holder + } + AND = { + exists = primary_title.previous_holder + primary_title.previous_holder.culture != scope:actor.culture + } + } + } + + modifier = { # The AI doesn't want to hybridize if their culture is more than X% bigger than the targeted culture within the same realm (unless it's in the capital, and the capital is the De Jure capital of the primary title) + factor = 0 + scope:actor.culture.culture_realm_size > scope:target.culture_realm_size_larger_30_percent + NAND = { + scope:actor.primary_title.title_capital_county = scope:actor.capital_county + scope:actor.capital_county.culture = scope:target + } + } + + modifier = { # Do not hybridize if 30% or more of your vassals of the relevant culture/s dislike you + factor = 0 + scope:actor = { + any_vassal = { + percent >= 0.3 + OR = { + culture = scope:actor.culture + culture = scope:target + } + highest_held_title_tier >= tier_county + opinion = { + target = scope:actor + value <= 0 + } + } + } + } + + modifier = { # The AI does not want to create multiple hybrids from the same cultures + factor = 0 + any_in_global_list = { + variable = hybrid_cultures + any_parent_culture = { this = scope:target } + any_parent_culture = { this = scope:actor.culture } + } + } + + # Loose requirements + modifier = { # The AI does not want to create a hybrid with a hybrid culture that has the same roots + factor = 0 + has_game_rule = very_relaxed_hybrid_culture_ai_restrictions + scope:target = { is_hybrid_culture = yes } + scope:actor.culture = { + is_hybrid_culture = yes + any_parent_culture = { + save_temporary_scope_as = parent_culture_check + scope:target = { + any_parent_culture = { + this = scope:parent_culture_check + } + } + } + } + } + + modifier = { # The AI does not want to create a hybrid with a hybrid culture (unless a historical hybrid) + factor = 0 + has_game_rule = relaxed_hybrid_culture_ai_restrictions + scope:target = { + is_hybrid_culture = yes + culture_is_not_historical_hybrid_trigger = yes + } + scope:actor.culture = { + is_hybrid_culture = yes + culture_is_not_historical_hybrid_trigger = yes + } + } + + modifier = { # The AI does not want to create a hybrid with a hybrid culture or if the target is a hybrid (unless a historical hybrid) + factor = 0 + has_game_rule = default_hybrid_culture_ai_restrictions + OR = { + scope:target = { + is_hybrid_culture = yes + culture_is_not_historical_hybrid_trigger = yes + } + scope:actor.culture = { + is_hybrid_culture = yes + culture_is_not_historical_hybrid_trigger = yes + } + } + } + + modifier = { # The AI does not want to create a hybrid with a hybrid culture that their culture is a parent of, or share heritage of + factor = 0 + scope:target = { + is_hybrid_culture = yes + any_parent_culture = { + OR = { + this = scope:actor.culture + has_same_culture_heritage = scope:actor.culture + } + } + } + } + + modifier = { # The AI does not want to create a hybrid if their culture is a hybrid of the target culture, or share heritage of + factor = 0 + scope:actor.culture = { + is_hybrid_culture = yes + any_parent_culture = { + OR = { + this = scope:target + has_same_culture_heritage = scope:target + } + } + } + } + + modifier = { # Avoid hybridizing if your realm is of a significant size and elective, we don't want the HRE Emperor to hybdridize in ugly ways... + factor = 0 + primary_title = { + has_order_of_succession = election + tier >= tier_kingdom + } + realm_size >= 50 + any_vassal = { + highest_held_title_tier >= tier_county + culture != scope:actor.culture + } + } + + modifier = { # Theocrats such as the Pope shouldn't hybridize; they have an influx of different cultures, it's just weird + factor = 0 + government_has_flag = government_is_theocracy + } + + modifier = { # Block for Scots and Gaelic specifically + factor = 0 + scope:actor.culture = { + OR = { + this = culture:scottish + this = culture:gaelic + } + } + scope:target = { + OR = { + this = culture:scottish + this = culture:gaelic + } + } + } + + # Note: As we're checking if we can hybridize with a culture *right now*, a suboptimal culture might be checked. A buffer of 10 acceptance is used by the AI to alleviate this. + } +} diff --git a/common/character_interactions/00_marriage_interactions.txt b/common/character_interactions/00_marriage_interactions.txt new file mode 100644 index 00000000..a27e8af3 --- /dev/null +++ b/common/character_interactions/00_marriage_interactions.txt @@ -0,0 +1,5531 @@ + + +### +# SPECIAL NOTE +# +# When evaluating whether or not the AI can send this interaction to the +# player, the AI will use the ai_accept value and send a proposal to the +# player IF AND ONLY IF the player, as an AI actor, would have positive +# ai_accept value. This is a special case for this specific interaction, +# and is being calculated specifically in code. +# +arrange_marriage_interaction = { + icon = icon_marriage + category = interaction_category_diplomacy + common_interaction = yes + filter_tags = { ceremonial_liege } + + override_background = { reference = relaxing_room } + + special_interaction = arrange_marriage_interaction + interface = marriage + use_diplomatic_range = { + trigger_if = { + limit = { exists = scope:secondary_actor.betrothed } + NOT = { + scope:secondary_actor = { + betrothed = scope:secondary_recipient + } + } + } + } + + recipient_recieve_cooldown = { + years = marriage_recieve_proposal_cooldown + } + + ignore_recipient_recieve_cooldown = { + AND = { + is_ai = no + scope:recipient = { is_ai = no } + } + } + + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor = scope:recipient + } + desc = arrange_marriage_interaction_desc_ruler_at_own_court + } + triggered_desc = { + trigger = { + scope:actor = { + can_marry_character_trigger = { + CHARACTER = scope:recipient + } + } + scope:recipient = { is_ruler = yes } + } + desc = arrange_marriage_interaction_desc_both_rulers_can_marry + } + triggered_desc = { + trigger = { + scope:recipient = { + is_ruler = yes + can_marry_trigger = yes + } + } + desc = arrange_marriage_interaction_desc_both_rulers_recipient_only_can_marry + } + triggered_desc = { + trigger = { + scope:recipient = { + is_ruler = yes + } + } + desc = arrange_marriage_interaction_desc_both_rulers_recipient_neither_can_marry + } + triggered_desc = { + trigger = { + scope:actor = { + can_marry_character_trigger = { + CHARACTER = scope:recipient + } + } + } + desc = arrange_marriage_interaction_desc_one_ruler_can_marry + } + desc = arrange_marriage_interaction_desc_recipient_one_ruler_cannot_marry + } + } + + redirect = { + # If the define MARRIAGE_OWNER_IS_MATCHMAKER is set to yes, the actor must end up as the "matchmaker" link for courtiers + scope:actor = { + if = { + limit = { + exists = matchmaker + NOT = { this = matchmaker } + } + save_scope_as = secondary_actor + matchmaker = { + save_scope_as = actor + } + } + if = { + limit = { + is_betrothed = yes + betrothed = scope:recipient + } + + save_scope_as = secondary_actor + } + } + + scope:recipient = { + if = { + limit = { + is_betrothed = yes + betrothed.matchmaker = scope:actor + is_adult = yes + betrothed = { + is_adult = yes + } + } + + save_scope_as = secondary_recipient + matchmaker = { + save_scope_as = recipient + } + betrothed = { + save_scope_as = secondary_actor + } + } + + # marriage interactions are special, and code sets scopes in an unusual way + # secondary recipient must always be set for marriage script, + # but marriage UI only sets primary recipient + # make sure redirect solves this issue + if = { + limit = { + exists = matchmaker + this = matchmaker + NOT = { exists = scope:secondary_recipient } + } + save_scope_as = secondary_recipient + } + if = { + limit = { + exists = matchmaker + NOT = { this = matchmaker } + } + save_scope_as = secondary_recipient + matchmaker = { + save_scope_as = recipient + } + } + } + } + + populate_actor_list = { + scope:actor = { + add_to_list = characters + every_courtier = { + limit = { + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_courtier_away = { + limit = { + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + even_if_dead = yes + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + even_if_dead = yes + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + OR = { + top_liege = scope:actor + house.house_head = scope:actor + dynasty.dynast = scope:actor + } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + OR = { + top_liege = scope:actor + house.house_head = scope:actor + dynasty.dynast = scope:actor + } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + } + } + } + } + } + + populate_recipient_list = { + scope:recipient = { + add_to_list = characters + every_courtier = { + add_to_list = characters + } + every_courtier_away = { + add_to_list = characters + } + every_child = { + limit = { + NOT = { is_in_list = characters } + } + add_to_list = characters + } + } + } + + interface_priority = 60 + + cost = { + prestige = { + value = 0 + if = { + limit = { + exists = scope:actor + exists = scope:recipient + exists = scope:secondary_recipient + exists = scope:secondary_actor + scope:secondary_actor = { is_close_family_of = scope:actor } + scope:recipient = { + OR = { + AND = { + vassal_contract_has_flag = vassal_contract_marriage_favor + is_allied_to = scope:actor + } + NOT = { vassal_contract_has_flag = vassal_contract_marriage_favor} + } + } + } + add = { + scope:actor = { + every_vassal = { + limit = { + vassal_contract_has_flag = vassal_contract_marriage_favor + NOT = { is_allied_to = scope:actor } + NOR = { + this = scope:recipient + this = scope:secondary_recipient + } + } + add = medium_prestige_value + } + } + desc = VASSAL_WITH_MARRIAGE_FAVOR + } + } + } + + piety = { + value = 0 + if = { + limit = { scope:piety_cost_reduction = yes } + add = scope:actor.medium_piety_value + desc = STRUGGLE_MARRIAGE_ACCEPTANCE_USING_PIETY_AS_CURRENCY + } + } + + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + # actor, recipient ... characters arranging the marriage + # secondary_actor, secondary_recipient ... characters that should marry + + is_shown = { + scope:actor = { + OR = { + is_ruler = yes #Can arrange marriages for others + #You're just a courtier? Only use the interaction on characters you can marry + can_marry_character_trigger = { CHARACTER = scope:recipient } + } + } + # Block further marriage proposals for people who have a pending grand wedding + NOR = { + scope:secondary_actor ?= { has_been_promised_grand_wedding = yes } + scope:secondary_recipient ?= { has_been_promised_grand_wedding = yes } + } + #If you're interacting with someone who isn't their own matchmaker, only show the interaction if they can get married. (If someone isn't their own matchmaker, they will be set as secondary_recipient by code and their matchmaker becomes recipient) + trigger_if = { + limit = { + exists = scope:secondary_recipient + scope:secondary_recipient.matchmaker != scope:secondary_recipient + } + scope:secondary_recipient = { + OR = { + marriage_interaction_can_be_picked_trigger = yes #Can marry anyone + AND = { + ready_to_marry_betrothed_trigger = yes + OR = { + betrothed = scope:secondary_actor + trigger_if = { + limit = { exists = betrothed.liege } + betrothed.liege = scope:actor + } + } + } + } + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + } + #allow landless adventurers to marry only within their camp, or with Contact list courtiers (after using request_marriage option in contact_list_request_interaction), or prieviously betrothed characters + trigger_if = { + limit = { + scope:actor = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + trigger_if = { + limit = { + OR = { + scope:actor = { + is_target_in_variable_list = { + name = contact_list_marriage + target = scope:recipient + } + } + scope:recipient = { + is_betrothed = yes + betrothed = { + OR = { + scope:actor = this + scope:secondary_actor ?= this + } + } + } + scope:secondary_recipient ?= { + is_betrothed = yes + betrothed = { + OR = { + scope:actor = this + scope:secondary_actor ?= this + } + } + } + } + } + always = yes + } + trigger_else = { + scope:recipient = scope:actor + } + } + } + + is_valid_showing_failures_only = { + #If we're opening this interaction through the interaction menu (i.e. not all scopes exist yet) + #This was giving double-warnings about a marry-able character existing so it's commented out for now + #custom_description = { + # text = character_to_marry_exists + # object = scope:recipient + # scope:recipient = { + # OR = { + # any_courtier = { + # is_at_home = yes + # marriage_interaction_can_be_picked_trigger= yes + # } + # any_child = { + # marriage_interaction_can_be_picked_trigger= yes + # } + # } + # } + #} + trigger_if = { + limit = { + NAND = { + exists = scope:secondary_actor + exists = scope:secondary_recipient + } + } + #There is an available marriage + custom_description = { + text = "basic_can_marry_check_recipient" + subject = scope:actor + object = scope:recipient + scope:recipient = { + OR = { + AND = { + #Recipient can marry + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + AND = { + is_ruler = yes #(Following are only for rulers) + OR = { + any_child = { + matchmaker = scope:actor + OR = { + #Any of recipient's children can marry + AND = { + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + } + } + #Any of recipient's children are ready to marry their betrothed + AND = { + ready_to_marry_betrothed_trigger = yes + betrothed.matchmaker = scope:actor + } + } + } + any_courtier = { + OR = { + #Any of recipient's courtiers can marry + AND = { + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + } + } + #Any of recipient's courtiers are ready to marry their betrothed + AND = { + ready_to_marry_betrothed_trigger = yes + betrothed.matchmaker = scope:actor + } + } + } + } + } + } + } + } + } + #Diplomatic availability & prison + scope:recipient = { + is_imprisoned = no + } + NOT = { + scope:actor = { + is_at_war_with = scope:recipient + } + } + trigger_if = { #(must be here because secondary_recipient can be set at the start) + limit = { + exists = scope:secondary_recipient + scope:secondary_recipient != scope:recipient + } + scope:secondary_recipient = { + is_imprisoned = no + bp2_valid_for_standard_interactions_trigger = yes + } + } + trigger_if = { #(must be here because secondary_recipient can be set at the start) + limit = { + exists = scope:secondary_actor + scope:secondary_actor != scope:actor + } + scope:secondary_actor = { + is_imprisoned = no + bp2_valid_for_standard_interactions_trigger = yes + } + } + # Account for regents being bolshy. + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_actor } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_recipient } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = actor } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = recipient } + } + + # whether a character can be picked for the interaction, interface only (e.g. picking the first character in the marriage interaction) + # in character scope, actor and recipient event targets can be used, but not the secondary characters (because none exist yet) + can_be_picked = { + OR = { + marriage_interaction_can_be_picked_trigger = yes + AND = { + exists = scope:secondary_actor + exists = scope:secondary_recipient + scope:secondary_actor.betrothed = scope:secondary_recipient + } + } + } + + #Is evaluated only after secondary_recipient and secondary_actor are both chosen + has_valid_target_showing_failures_only = { + marriage_interaction_valid_target_trigger = yes #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. + + #Blocks AI from marrying player guests + scope:secondary_recipient = { + trigger_if = { + limit = { + is_pool_guest = yes + host = { + is_ai = no + this != scope:actor + } + } + NOT = { is_pool_guest_of = host } + } + } + + #Blocks most AI's from marrying Evil faiths + trigger_if = { + limit = { + scope:actor = { + is_ai = yes + NOT = { has_trait = cynical } + #AI should honor betrothal even if faiths change + scope:secondary_actor.betrothed != scope:secondary_recipient + } + } + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value < faith_hostility_prevents_marriage_level + } + } + } + + #Blocks AI from marrying single mayors in their area unless they are also mayors + trigger_if = { + limit = { + scope:actor = { + is_ai = yes + NOT = { government_has_flag = government_is_republic } + } + } + NOT = { + scope:recipient = { government_has_flag = government_is_republic } + } + } + + trigger_if = { # Cultural Traditions, for AI + limit = { + scope:actor = { + is_ai = yes + culture = { + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + } + OR = { + scope:actor.culture = scope:recipient.culture + scope:actor.culture = scope:secondary_recipient.culture + } + } + } + + pre_auto_accept = { + if = { + limit = { + NOR = { + scope:recipient = scope:actor + scope:secondary_actor = { has_been_promised_grand_wedding = yes } + scope:secondary_recipient = { has_been_promised_grand_wedding = yes } + } + } + scope:recipient = { + if = { + limit = { scope:secondary_actor.betrothed = scope:secondary_recipient } + send_interface_toast = { + type = msg_betrothal_fulfilled + left_icon = scope:secondary_actor + right_icon = scope:secondary_recipient + } + } + else = { + send_interface_toast = { + type = msg_marriage_forced + left_icon = scope:secondary_actor + right_icon = scope:secondary_recipient + } + } + } + } + } + + on_send = { + if = { + limit = { + scope:grand_wedding_promise = yes + } + scope:actor = { + set_variable = { + name = grand_wedding_promise_pending + days = 10 + } + if = { + limit = { + is_ai = yes + } + remove_short_term_gold = ai_wedding_promise_gold_actor + } + #if = { # Activity count debugging, left in for QA purposes + # limit = { + # NOT = { + # exists = global_var:wedding_promise + # } + # } + # set_global_variable = { + # name = wedding_promise + # value = 1 + # } + #} + #else = { + # change_global_variable = { + # name = wedding_promise + # add = 1 + # } + #} + } + } + } + + on_accept = { + marriage_interaction_on_accept_effect = yes + scope:actor = { + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:actor.domicile.medium_herd_value + } + } + if = { + limit = { + has_variable = grand_wedding_promise_pending + } + remove_variable = grand_wedding_promise_pending + } + if = { + limit = { + is_target_in_variable_list = { + name = contact_list_marriage + target = scope:recipient + } + } + remove_list_variable = { + name = contact_list_marriage + target = scope:recipient + } + } + } + } + + on_decline = { + scope:actor = { + if = { + limit = { this != scope:recipient } + trigger_event = marriage_interaction.0011 + } + if = { + limit = { + has_variable = grand_wedding_promise_pending + } + remove_variable = grand_wedding_promise_pending + } + } + scope:secondary_actor = { + add_character_flag = { + flag = player_declined_marriage + years = 5 + } + } + } + + auto_accept = { + marriage_interaction_auto_accept_trigger = yes #Strong hook conditions + } + + ai_accept = { + base = 0 + + marriage_ai_accept_modifier = yes + } + + # If you want the AI to set these options then it needs to be hooked into the code as well + send_option = { + flag = grand_wedding_promise + localization = GRAND_WEDDING_PROMISE + + is_shown = { + scope:actor = { #Can organize a Grand Wedding + highest_held_title_tier > tier_barony + is_landed_or_landless_administrative = yes + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + # DLC locked + has_dlc_feature = tours_and_tournaments + has_dlc_feature = advanced_activities + } + } + + current_description = { + desc = "GRAND_WEDDING_PROMISE_INFO" + } + + is_valid = { + scope:actor = { + gold >= real_wedding_cost_actor_scope + is_available = yes + custom_tooltip = { + text = grand_wedding_already_promised_tt + NOR = { + AND = { + has_variable = promised_grand_wedding_marriage_countdown + var:promised_grand_wedding_marriage_countdown = { is_alive = yes } + } + has_variable = grand_wedding_promise_pending + } + } + } + trigger_if = { + limit = { + exists = scope:secondary_actor + } + custom_tooltip = { + text = grand_wedding_only_dominant_side + trigger_if = { + limit = { + scope:secondary_actor ?= { + is_female = yes + } + } + OR = { + scope:secondary_actor ?= { matrilinear_betrothal = yes } + scope:matrilineal = yes + } + } + trigger_else = { + NOR = { + scope:secondary_actor ?= { matrilinear_betrothal = yes } + scope:matrilineal = yes + } + } + } + custom_tooltip = { + text = grand_wedding_only_family + scope:secondary_actor ?= { + is_close_or_extended_family_of = scope:actor + } + } + # Cannot promise grand weddings with regents due to regency and travel limitations + custom_tooltip = { + text = grand_wedding_secondary_regent + NOT = { + scope:secondary_actor.liege = { + diarch = scope:secondary_actor + has_active_diarchy = yes + } + } + } + } + # Safety check because players shouldn't be spouse_2 + trigger_if = { + limit = { + has_multiple_players = yes + } + custom_tooltip = { + text = grand_wedding_mp_ai + trigger_if = { + limit = { + OR = { + scope:actor = { is_ai = no } + scope:secondary_actor ?= { is_ai = no } + } + } + scope:secondary_recipient ?= { + is_ai = yes + } + } + } + } + trigger_if = { + limit = { + exists = scope:secondary_recipient.liege + scope:secondary_recipient.liege = { + diarch = scope:secondary_recipient + has_active_diarchy = yes + } + } + # Cannot promise grand weddings with regents due to regency and travel limitations + custom_tooltip = { + text = grand_wedding_secondary_regent + NOT = { + scope:secondary_recipient.liege = { + diarch = scope:secondary_recipient + has_active_diarchy = yes + } + } + } + } + } + } + + send_option = { + flag = matrilineal + localization = MATRILINEAL_OFFER + is_shown = { + OR = { + NOT = { exists = scope:secondary_actor } + NOT = { exists = scope:secondary_recipient } + scope:secondary_actor = { sex_opposite_of = scope:secondary_recipient } + } + } + current_description = { + triggered_desc = { + trigger = { + exists = scope:secondary_actor + scope:secondary_actor = { + betrothed = scope:secondary_recipient + matrilinear_betrothal = yes + } + } + desc = "MATRILINEAL_OFFER_BETROTHAL_INFO" + } + } + is_valid = { + custom_tooltip = { # TGP TENNO EXCEPTION + text = tgp_blocked_ceremonial_house_matrilineal_marriage_trigger + NOT = { + scope:secondary_actor.top_liege.primary_title.var:administrative_ui_special_title.holder ?= { + scope:recipient ?= this + NOR = { + faith = { has_doctrine = doctrine_gender_female_dominated } + AND = { + scope:secondary_recipient ?= { is_female = yes } + faith = { has_doctrine = doctrine_gender_equal } + } + } + } + } + } + } + can_be_changed = { + trigger_if = { + limit = { + exists = scope:secondary_actor + } + OR = { + NOT = { + exists = scope:secondary_recipient + } + scope:secondary_actor = { + betrothed != scope:secondary_recipient + } + } + } + } + starts_enabled = { + trigger_if = { + limit = { + exists = scope:secondary_actor + scope:secondary_actor = { + betrothed = scope:secondary_recipient + } + } + scope:secondary_actor = { + matrilinear_betrothal = yes + } + } + trigger_else_if = { + limit = { + exists = scope:secondary_actor + scope:actor = scope:secondary_actor + scope:actor = { + is_female = yes + is_ai = no + } + } + always = yes + } + trigger_else = { + scope:actor = { + OR = { + faith = { + has_doctrine = doctrine_gender_female_dominated + } + AND = { + this = scope:recipient + exists = scope:secondary_recipient + scope:secondary_recipient = { + is_female = yes + } + faith = { has_doctrine = doctrine_gender_equal } + } + AND = { + exists = scope:secondary_actor + scope:actor = scope:secondary_actor + is_female = yes + is_ai = no + } + } + } + } + } + } + + send_option = { + is_shown = { + scope:secondary_actor = { + betrothed != scope:secondary_recipient + } + } + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = MARRIAGE_HOOK + } + + send_option = { # FP3 + is_shown = { + scope:actor = { + any_character_struggle = { + is_struggle_type = persian_struggle + has_struggle_phase_parameter = can_trade_piety_for_marriage_acceptance + } + } + } + is_valid = { + scope:actor = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + scope:recipient = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + } + flag = piety_cost_reduction + localization = TRADE_PIETY_FOR_BETTER_AI_ACCEPTANCE + } + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + is_ai = no + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + show_effects_in_notification = no + greeting = positive + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:secondary_actor = { + is_adult = yes + } + scope:secondary_recipient = { + is_adult = yes + } + NOR = { + scope:secondary_actor = { has_been_promised_grand_wedding = yes } + scope:secondary_recipient = { has_been_promised_grand_wedding = yes } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + } + desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + } + desc = MARRIAGE_NOTIFICATION_MATRI + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + } + desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL + } + desc = MARRIAGE_NOTIFICATION + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + } + desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + } + desc = BETROTHAL_NOTIFICATION_MATRI + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + } + desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL + } + desc = BETROTHAL_NOTIFICATION + } + } + } + } +} + +#This interaction is referenced in code! If it's renamed you have to ping a coder +marry_off_interaction = { + icon = icon_marriage + category = interaction_category_diplomacy + common_interaction = yes + + desc = marry_off_interaction_desc + + send_name = marry_off_send + needs_recipient_to_open = no + special_interaction = arrange_marriage_interaction + interface = marriage + redirect = { + if = { + limit = { + exists = scope:secondary_actor + } + scope:recipient = { + save_scope_as = secondary_recipient + matchmaker = { + save_scope_as = recipient + } + } + + } + else = { + scope:recipient = { + save_scope_as = secondary_actor + } + clear_saved_scope = recipient + } + } + + populate_recipient_list = { + #populate only with your courtiers or children/grandchildren if you are a landless adventurer + if = { + limit = { + scope:actor = { + has_government = landless_adventurer_government + } + } + scope:secondary_actor = { + if = { + limit = { + scope:actor != this + } + add_to_list = characters + } + every_courtier = { + limit = { + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_courtier_away = { + limit = { + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + even_if_dead = yes + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + even_if_dead = yes + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + every_child = { + if = { + limit = { + is_alive = yes + NOT = { is_in_list = characters } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + add_to_list = characters + } + } + } + } + } + } + #otherwise, populate with anyone eligible + else = { + scope:secondary_actor = { + every_opposite_sex_spouse_candidate = { add_to_list = characters } + if = { + limit = { allowed_to_marry_same_sex_trigger = yes } + every_same_sex_spouse_candidate = { + limit = { + scope:secondary_actor != this + } + add_to_list = characters + } + } + } + # Cleanup list if insular culture + if = { + limit = { + scope:secondary_actor.culture = { has_cultural_parameter = reduced_marriage_acceptance_distant_realms } + } + every_in_list = { + list = characters + limit = { + NOT = { top_liege.culture = scope:secondary_actor.top_liege.culture } + } + remove_from_list = characters + } + } + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { + exists = scope:actor + exists = scope:recipient + exists = scope:secondary_recipient + exists = scope:secondary_actor + scope:secondary_actor = { is_close_family_of = scope:actor } + scope:recipient = { + OR = { + AND = { + vassal_contract_has_flag = vassal_contract_marriage_favor + is_allied_to = scope:actor + } + NOT = { vassal_contract_has_flag = vassal_contract_marriage_favor} + } + } + } + add = { + scope:actor = { + every_vassal = { + limit = { + vassal_contract_has_flag = vassal_contract_marriage_favor + NOT = { is_allied_to = scope:actor } + NOR = { + this = scope:recipient + this = scope:secondary_recipient + } + } + add = medium_prestige_value + } + } + desc = VASSAL_WITH_MARRIAGE_FAVOR + } + } + } + + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + interface_priority = 60 + + # actor, recipient ... characters arranging the marriage + # secondary_actor, secondary_recipient ... characters that should marry + + is_shown = { + # Enable only for yourself if you're a landless adventurer + trigger_if = { + limit = { + scope:actor = { + has_government = landless_adventurer_government + } + } + scope:secondary_actor = { + scope:actor = this + } + } + scope:secondary_actor = { + #Is this someone I can marry off? + OR = { + is_courtier_of = scope:actor + AND = { + is_child_of = scope:actor + target_is_liege_or_above = scope:actor + } + scope:actor = this + } + #They can be married + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + # Block further marriage proposals for people who have a pending grand wedding + NOR = { + scope:secondary_actor ?= { has_been_promised_grand_wedding = yes } + scope:secondary_recipient ?= { has_been_promised_grand_wedding = yes } + } + } + + is_valid_showing_failures_only = { + #Diplomatic availability & prison + scope:secondary_actor = { + is_imprisoned = no + bp2_valid_for_standard_interactions_trigger = yes + } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_actor } + trigger_if = { + limit = { + scope:secondary_actor != scope:secondary_recipient + } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_recipient } + } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = actor } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = recipient } + } + + has_valid_target_showing_failures_only = { + marriage_interaction_valid_target_trigger = yes #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. + + #Diplomatic availability & prison (located here because these will never be set at the start) + scope:recipient = { + is_imprisoned = no + } + NOT = { + scope:actor = { + is_at_war_with = scope:recipient + } + } + trigger_if = { + limit = { scope:recipient != scope:secondary_recipient } + scope:secondary_recipient = { + is_imprisoned = no + bp2_valid_for_standard_interactions_trigger = yes + } + } + #secondary_actor is checked above because they are always available + + #Blocks AI from marrying player guests + scope:secondary_recipient = { + trigger_if = { + limit = { + is_pool_guest = yes + host = { + is_ai = no + this != scope:actor + } + } + NOT = { is_pool_guest_of = host } + } + } + } + + on_send = { + if = { + limit = { + scope:grand_wedding_promise = yes + } + scope:actor = { + set_variable = { + name = grand_wedding_promise_pending + days = 10 + } + if = { + limit = { + is_ai = yes + } + remove_short_term_gold = ai_wedding_promise_gold_actor + } + #if = { # Activity count debugging, left in for QA purposes + # limit = { + # NOT = { + # exists = global_var:wedding_promise + # } + # } + # set_global_variable = { + # name = wedding_promise + # value = 1 + # } + #} + #else = { + # change_global_variable = { + # name = wedding_promise + # add = 1 + # } + #} + } + } + } + + on_accept = { + marriage_interaction_on_accept_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_marry_off.desc + REVERSE_NON_HOUSE_TARGET = no + } + + scope:actor = { + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:actor.domicile.medium_herd_value + } + } + if = { + limit = { + has_variable = grand_wedding_promise_pending + } + remove_variable = grand_wedding_promise_pending + } + } + } + + on_decline = { + scope:actor = { + if = { + limit = { this != scope:recipient } + trigger_event = marriage_interaction.0011 + } + if = { + limit = { + has_variable = grand_wedding_promise_pending + } + remove_variable = grand_wedding_promise_pending + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_marry_off_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = { + marriage_interaction_auto_accept_trigger = yes #Strong hook conditions + } + + ai_accept = { + base = 0 # Should be 0 for all interactions + + marriage_ai_accept_modifier = yes + + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + } + + send_option = { + flag = grand_wedding_promise + localization = GRAND_WEDDING_PROMISE + + is_shown = { + scope:actor = { #Can organize a Grand Wedding + highest_held_title_tier > tier_barony + is_landed_or_landless_administrative = yes + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + # DLC locked + has_dlc_feature = tours_and_tournaments + has_dlc_feature = advanced_activities + } + } + + current_description = { + desc = "GRAND_WEDDING_PROMISE_INFO" + } + + is_valid = { + scope:actor = { + gold >= real_wedding_cost_actor_scope + is_available = yes + custom_tooltip = { + text = grand_wedding_already_promised_tt + NOR = { + AND = { + has_variable = promised_grand_wedding_marriage_countdown + var:promised_grand_wedding_marriage_countdown = { is_alive = yes } + } + has_variable = grand_wedding_promise_pending + } + } + } + custom_tooltip = { + text = grand_wedding_only_dominant_side + trigger_if = { + limit = { + scope:secondary_actor ?= { + is_female = yes + } + } + OR = { + scope:secondary_actor ?= { matrilinear_betrothal = yes } + scope:matrilineal = yes + } + } + trigger_else = { + NOR = { + scope:secondary_actor ?= { matrilinear_betrothal = yes } + scope:matrilineal = yes + } + } + } + custom_tooltip = { + text = grand_wedding_only_family + scope:secondary_actor ?= { + is_close_or_extended_family_of = scope:actor + } + } + } + } + + send_option = { + flag = matrilineal + localization = "MATRILINEAL_OFFER" + starts_enabled = { + scope:actor = { + OR = { + faith = { + has_doctrine = doctrine_gender_female_dominated + } + AND = { + scope:secondary_actor = { is_female = yes } + faith = { has_doctrine = doctrine_gender_equal } + } + AND = { + exists = scope:secondary_actor + scope:actor = scope:secondary_actor + is_female = yes + is_ai = no + } + } + } + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = MARRIAGE_HOOK + } + #This option cannot be linked with the hook icon, because recipient isn't known in the right-click menu + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + is_ai = no + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + show_effects_in_notification = no + greeting = positive + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:secondary_actor = { + is_adult = yes + } + scope:secondary_recipient = { + is_adult = yes + } + NOR = { + scope:secondary_actor = { has_been_promised_grand_wedding = yes } + scope:secondary_recipient = { has_been_promised_grand_wedding = yes } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + } + desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + } + desc = MARRIAGE_NOTIFICATION_MATRI + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + } + desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_recipient = scope:recipient + } + desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL + } + desc = MARRIAGE_NOTIFICATION + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_actor = scope:actor + } + desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL_MATRI + } + triggered_desc = { + trigger = { + scope:matrilineal = yes + } + desc = BETROTHAL_NOTIFICATION_MATRI + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_actor = scope:actor + } + desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL + } + triggered_desc = { + trigger = { + scope:secondary_recipient = scope:recipient + } + desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL + } + desc = BETROTHAL_NOTIFICATION + } + } + } + } +} + +break_betrothal_interaction = { + category = interaction_category_diplomacy + special_interaction = break_betrothal_interaction + use_diplomatic_range = no + icon = icon_marriage + interface_priority = 30 + + is_shown = { + OR = { + #Betrothed to betrothed + scope:actor.betrothed = scope:recipient + + #Actor breaking recipient's betrothal with their courtier/vassal child + scope:actor = { + any_courtier = { + is_ai = yes + is_betrothed = yes + betrothed = { this = scope:recipient } + OR = { + is_playable_character = no + any_parent = { this = scope:actor } + } + } + } + + #Actor breaking the betrothal of their courtier/vassal child + scope:recipient = { + is_ai = yes + is_betrothed = yes + OR = { + AND = { + is_playable_character = no + liege = scope:actor + } + AND = { + is_child_of = scope:actor + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + OR = { + is_playable_character = no + target_is_liege_or_above = scope:actor + } + } + } + betrothed = { always = yes } + } + + #Break recipient's betrothal with actor's vassal child/courtier + scope:recipient = { + is_betrothed = yes + betrothed = { + is_ai = yes + OR = { + AND = { + is_child_of = scope:actor + target_is_liege_or_above = scope:actor + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + } + AND = { + is_playable_character = no + liege = scope:actor + } + } + } + } + + #Actor breaking their betrothal to recipient's courtier/vassal child + AND = { + scope:actor = { is_betrothed = yes } + scope:recipient = { + OR = { + #Check for courtiers + any_courtier = { + is_betrothed = yes + betrothed = scope:actor + liege = scope:recipient + } + #Check for vassal children + any_child = { + is_betrothed = yes + betrothed = scope:actor + OR = { + is_playable_character = no + target_is_liege_or_above = scope:recipient + } + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + } + } + } + } + } + } + + is_valid = { + + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + # Recipient is the betrothed + custom_description = { + text = break_betrothal_hook_used + object = scope:recipient + trigger_if = { + limit = { + exists = scope:recipient.betrothed + OR = { + scope:recipient.betrothed = scope:actor + scope:recipient.betrothed = { + is_ai = yes + OR = { + AND = { + is_child_of = scope:actor + target_is_liege_or_above = scope:actor + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + } + AND = { + is_playable_character = no + liege = scope:actor + } + } + } + } + exists = scope:recipient.var:hook_used_for_betrothal + } + scope:recipient.var:hook_used_for_betrothal = { + this != scope:recipient.betrothed + } + } + } + + custom_description = { + text = break_betrothal_hook_used + object = scope:recipient + trigger_if = { + limit = { + exists = scope:recipient.betrothed + OR = { + scope:recipient = scope:actor + scope:recipient = { + is_ai = yes + OR = { + AND = { + is_child_of = scope:actor + target_is_liege_or_above = scope:actor + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + } + AND = { + is_playable_character = no + liege = scope:actor + } + } + } + } + exists = scope:recipient.betrothed.var:hook_used_for_betrothal + } + scope:recipient.betrothed.var:hook_used_for_betrothal = { + this != scope:recipient + } + } + } + + # Secondary Recipient is the betrothed + custom_description = { + text = break_betrothal_hook_used + object = scope:recipient + trigger_if = { + limit = { + scope:recipient = { + OR = { + #Check for courtiers + any_courtier = { + is_betrothed = yes + betrothed = scope:actor + liege = scope:recipient + exists = var:hook_used_for_betrothal + var:hook_used_for_betrothal = { + this = scope:actor + } + } + #Check for vassal children + any_child = { + is_betrothed = yes + betrothed = scope:actor + OR = { + is_playable_character = no + target_is_liege_or_above = scope:recipient + } + NOT = { + matchmaker = { + is_parent_of = prev + this != scope:actor + } + } + exists = var:hook_used_for_betrothal + var:hook_used_for_betrothal = { + this = scope:actor + } + } + } + } + } + always = no + } + } + + # Secondary Actor and Recipient were promised a Grand Wedding, and the Activity has already been organized and is ongoing + custom_description = { + text = break_betrothal_gwedding_ongoing + trigger_if = { + limit = { + OR = { + scope:recipient = { has_been_promised_grand_wedding = yes } + scope:recipient.betrothed = { has_been_promised_grand_wedding = yes } + } + } + NOR = { + scope:recipient.involved_activity ?= { + has_activity_type = activity_wedding + OR = { + special_guest:spouse_1 ?= scope:recipient + special_guest:spouse_2 ?= scope:recipient + special_guest:spouse_1 ?= scope:recipient.betrothed + special_guest:spouse_2 ?= scope:recipient.betrothed + } + } + scope:recipient.betrothed.involved_activity ?= { + has_activity_type = activity_wedding + OR = { + special_guest:spouse_1 ?= scope:recipient + special_guest:spouse_2 ?= scope:recipient + special_guest:spouse_1 ?= scope:recipient.betrothed + special_guest:spouse_2 ?= scope:recipient.betrothed + } + } + } + } + } + } + + on_accept = { + #Identifies the "injured party" + scope:recipient = { + if = { + limit = { matchmaker = scope:actor } + betrothed = { save_scope_as = rejected_betrothed } + save_scope_as = rejecting_betrothed + } + else_if = { + limit = { + OR = { + #Check for courtiers + any_courtier = { + is_betrothed = yes + is_ai = yes + betrothed = scope:actor + liege = scope:recipient + } + #Check for vassal children + any_child = { + is_betrothed = yes + is_ai = yes + betrothed = scope:actor + target_is_liege_or_above = scope:recipient + } + } + } + scope:actor.betrothed = { + save_scope_as = rejected_betrothed + } + scope:actor = { + save_scope_as = rejecting_betrothed + } + } + + else = { + save_scope_as = rejected_betrothed + betrothed = { save_scope_as = rejecting_betrothed } + } + } + + # If it was a Grand Wedding, find the host + scope:rejecting_betrothed.var:promised_grand_wedding_by ?= { + save_scope_as = promising_host + } + + scope:recipient = { trigger_event = marriage_interaction.0020 } + + #Tooltip for betrothal breakage + show_as_tooltip = { + scope:rejected_betrothed = { + break_betrothal = scope:rejecting_betrothed + } + } + + #Figures out if the liege of rejected_betrothed cares + scope:rejected_betrothed = { + if = { + limit = { #The liege matter when assigning prestige/opinion hits + matchmaker = { + this != scope:rejected_betrothed + is_close_or_extended_family_of = scope:rejected_betrothed + } + } + + matchmaker = { save_scope_as = rejected_betrothal_owner } + } + + else = { #The liege doesn't matter, only the betrothed + save_scope_as = rejected_betrothal_owner + } + } + + if = { + limit = { #Only if you had no reason to break the betrothal + scope:rejected_betrothed = { is_eunuch_trigger = no } + scope:rejecting_betrothed = { is_eunuch_trigger = no } + NOR = { + scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejected_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejecting_betrothed + } + scope:rejecting_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejected_betrothed + } + # Prestige loss for Grand Weddings is handled below in the specific effect + scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } + scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } + } + } + #Prestige penalty + if = { + limit = { + OR = { + scope:rejected_betrothed = { highest_held_title_tier = tier_empire } + scope:rejected_betrothal_owner = { highest_held_title_tier = tier_empire } + } + #Only applied for relevant characters + OR = { + scope:rejected_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:rejecting_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:actor = { + yields_alliance = { + candidate = scope:rejecting_betrothed + target = scope:rejected_betrothal_owner + target_candidate = scope:rejected_betrothed + } + } + } + } + scope:actor = { add_prestige = massive_prestige_loss } + } + + else_if = { + limit = { + OR = { + scope:rejected_betrothed = { highest_held_title_tier = tier_kingdom } + scope:rejected_betrothal_owner = { highest_held_title_tier = tier_kingdom } + } + #Only applied for relevant characters + OR = { + scope:rejected_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:rejecting_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:actor = { + yields_alliance = { + candidate = scope:rejecting_betrothed + target = scope:rejected_betrothal_owner + target_candidate = scope:rejected_betrothed + } + } + } + } + scope:actor = { add_prestige = major_prestige_loss } + } + + else_if = { + limit = { + OR = { + scope:rejected_betrothed = { highest_held_title_tier = tier_duchy } + scope:rejected_betrothal_owner = { highest_held_title_tier = tier_duchy } + } + #Only applied for relevant characters + OR = { + scope:rejected_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:rejecting_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:actor = { + yields_alliance = { + candidate = scope:rejecting_betrothed + target = scope:rejected_betrothal_owner + target_candidate = scope:rejected_betrothed + } + } + } + } + scope:actor = { add_prestige = medium_prestige_loss } + } + + else_if = { + limit = { + OR = { + scope:rejected_betrothed = { highest_held_title_tier = tier_county } + scope:rejected_betrothal_owner = { highest_held_title_tier = tier_county } + } + #Only applied for relevant characters + OR = { + scope:rejected_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:rejecting_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:actor = { + yields_alliance = { + candidate = scope:rejecting_betrothed + target = scope:rejected_betrothal_owner + target_candidate = scope:rejected_betrothed + } + } + } + } + scope:actor = { add_prestige = minor_prestige_loss } + } + + else_if = { + limit = { + OR = { + scope:rejected_betrothed = { highest_held_title_tier = tier_barony } + scope:rejected_betrothal_owner = { highest_held_title_tier = tier_barony } + } + #Only applied for relevant characters + OR = { + scope:rejected_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:rejecting_betrothed = { + OR = { + is_close_family_of = scope:actor + AND = { + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + } + } + } + scope:actor = { + yields_alliance = { + candidate = scope:rejecting_betrothed + target = scope:rejected_betrothal_owner + target_candidate = scope:rejected_betrothed + } + } + } + } + scope:actor = { add_prestige = miniscule_prestige_loss } + } + } + + ############################################ + # EP2 - Breaking a Grand Wedding Betrothal # + ############################################ + if = { + limit = { + # There is no forced reason for breaking the betrothal + scope:rejected_betrothed = { is_eunuch_trigger = no } + scope:rejecting_betrothed = { is_eunuch_trigger = no } + NOR = { + scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejected_betrothed + } + scope:rejected_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejecting_betrothed + } + } + # A Grand Wedding was promised + OR = { + scope:rejecting_betrothed = { + has_been_promised_grand_wedding = yes + } + scope:rejected_betrothed = { + has_been_promised_grand_wedding = yes + } + } + } + scope:actor = { break_grand_wedding_betrothal_effect = yes } + scope:rejected_betrothed = { trigger_event = marriage_interaction.0001 } + } + + ###################################### + # Opinion hits & notification events # + ###################################### + #Personal opinion hit for the rejected_betrothed + else_if = { + limit = { scope:rejected_betrothed != scope:actor } + scope:rejected_betrothed = { + if = { + limit = { + is_eunuch_trigger = no + scope:rejecting_betrothed = { is_eunuch_trigger = no } + NOR = { + has_trait_with_flag = can_not_marry + scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejected_betrothed + } + AND = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejecting_betrothed + } + } + } + show_as_tooltip = { + add_opinion = { + target = scope:actor + modifier = broke_betrothal_opinion + } + } + } + + hidden_effect = { trigger_event = marriage_interaction.0001 } + } + } + else = { + hidden_effect = { + scope:rejecting_betrothed = { + break_betrothal = scope:rejected_betrothed + } + } + } + + #Personal opinion hit for the rejected_betrothal_owner + if = { + limit = { + NOR = { + scope:rejected_betrothed = { + this = scope:rejected_betrothal_owner + } + scope:actor = { + this = scope:rejected_betrothal_owner + } + scope:actor = { + this = scope:rejected_betrothed + } + } + } + scope:rejected_betrothal_owner = { + if = { + limit = { + scope:rejected_betrothed = { is_eunuch_trigger = no } + scope:rejecting_betrothed = { is_eunuch_trigger = no } + NOR = { + scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejected_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejecting_betrothed + } + scope:rejecting_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejected_betrothed + } + } + } + if = { + limit = { + NOR = { + scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } + scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } + } + } + show_as_tooltip = { + add_opinion = { + target = scope:actor + modifier = broke_betrothal_opinion + } + } + } + } + + hidden_effect = { trigger_event = marriage_interaction.0001 } + } + } + + if = { + limit = { + scope:rejected_betrothed = { is_eunuch_trigger = no } + scope:rejecting_betrothed = { is_eunuch_trigger = no } + NOR = { + scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } + scope:rejected_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejecting_betrothed + } + scope:rejecting_betrothed = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:rejected_betrothed + } + } + } + #Opinion hit for close relatives of the rejected_betrothed (that are not rejected_betrothed_owner) + if = { + limit = { + scope:rejected_betrothed != scope:actor + scope:rejected_betrothed = { + any_close_or_extended_family_member = { + this != scope:rejected_betrothal_owner + count >= 1 + } + } + } + if = { + limit = { + OR = { + scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } + scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } + } + } + scope:rejected_betrothed = { + every_close_or_extended_family_member = { + limit = { + this != scope:rejected_betrothal_owner + } + custom = all_family_members + + add_opinion = { + target = scope:actor + modifier = broke_betrothal_grand_wedding_opinion + opinion = -50 + } + } + } + } + else = { + scope:rejected_betrothed = { + every_close_or_extended_family_member = { + limit = { + this != scope:rejected_betrothal_owner + } + custom = all_family_members + add_opinion = { + target = scope:actor + modifier = broke_betrothal_opinion + } + } + } + } + } + + #Opinion hit for close relatives of the rejecting_betrothed (that are not also close relatives to rejected_betrothed) + if = { + limit = { + NOR = { + scope:rejecting_betrothed = scope:actor + scope:rejected_betrothed = scope:actor + } + scope:rejecting_betrothed = { + any_close_or_extended_family_member = { + NOR = { + is_close_or_extended_family_of = scope:rejected_betrothed + this = scope:rejected_betrothal_owner + this = scope:rejected_betrothed + } + count >= 1 + } + } + } + if = { + limit = { + OR = { + scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } + scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } + } + } + scope:rejecting_betrothed = { + every_close_or_extended_family_member = { + limit = { + NOR = { + this = scope:rejected_betrothal_owner + is_close_or_extended_family_of = scope:rejected_betrothed + this = scope:rejected_betrothed + } + } + custom = all_family_members + + add_opinion = { + target = scope:actor + modifier = broke_betrothal_grand_wedding_opinion + opinion = -50 + } + } + } + } + else = { + scope:rejecting_betrothed = { + every_close_or_extended_family_member = { + limit = { + NOR = { + is_close_or_extended_family_of = scope:rejected_betrothed + this = scope:rejected_betrothal_owner + this = scope:rejected_betrothed + } + } + custom = all_family_members + add_opinion = { + target = scope:actor + modifier = broke_betrothal_opinion + } + } + } + } + } + } + + scope:actor = { + # Was the marriage of relevence to the player? + if = { + limit = { + scope:rejecting_betrothed = { + is_player_heir_of = scope:actor + } + } + hidden_effect = { + send_interface_toast = { + type = msg_break_betrothal_player_heir + title = msg_break_betrothal + left_icon = scope:rejecting_betrothed + right_icon = scope:rejected_betrothed + custom_tooltip = break_betrothal_hook_toast_desc + } + } + } + else_if = { + limit = { + scope:actor != scope:rejecting_betrothed + } + hidden_effect = { + send_interface_message = { + type = msg_break_betrothal + title = msg_break_betrothal + left_icon = scope:rejecting_betrothed + right_icon = scope:rejected_betrothed + custom_tooltip = break_betrothal_hook_toast_desc + } + } + } + + #Was the marriage promised to a vassal? + if = { + limit = { + exists = var:promised_to_marry_1 + var:promised_to_marry_1 = { + this = scope:rejected_betrothed + any_parent = { + is_vassal_of = scope:actor + } + } + exists = var:promised_to_marry_2 + var:promised_to_marry_2 = { + this = scope:rejecting_betrothed + is_close_family_of = scope:actor + } + } + remove_variable = promised_to_marry_1 + remove_variable = promised_to_marry_2 + trigger_event = clan.1002 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_betrothal_breakage.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = yes +} + +# Stripped down version of make_concubine_interaction for the AI +# Avoids redirection logic and recipient list building to improve performance +ai_make_concubine_interaction = { + hidden = yes + + ai_targets = { + ai_recipients = prisoners + } + ai_targets = { + ai_recipients = courtiers + max = 10 + } + ai_target_quick_trigger = { + adult = yes + owner_attracted = yes # Not optimal, but saves a lot of performance + } + ai_frequency_by_tier = { + barony = 0 + county = 60 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 3 + } + + ai_potential = { + is_playable_character = yes + is_adult = yes + fertility > 0 + allowed_more_concubines = yes + NOR = { + has_trait = chaste + has_trait = celibate + has_sexuality = asexual + } + } + + is_shown = { + make_concubine_is_shown_trigger = yes + } + + is_valid_showing_failures_only = { + make_concubine_is_valid_trigger = yes + } + + auto_accept = yes + + ai_will_do = { + base = 0 + + modifier = { # Basic Filtering + add = 100 + scope:actor = { + number_of_concubines < number_of_desired_concubines + } + scope:recipient = { + can_have_children_with = { CHARACTER = scope:actor } # Only if you can have kids since this is about fertility and genetic traits + fertility > 0.2 + is_young_character = yes + } + } + + modifier = { + add = 100 + scope:recipient = { + is_imprisoned_by = scope:actor + can_have_children_with = { CHARACTER = scope:actor } # Only if you can have kids since this is about fertility and genetic traits + OR = { + is_lowborn = no + num_of_good_genetic_traits > 0 + } + fertility > 0.1 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + + modifier = { + add = 100 + scope:actor = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = scope:recipient + is_attracted_to_gender_of = scope:recipient + OR = { #If they're not in need of kids, or someone who they can have kids with + any_child = { + count >= 2 + } + any_consort = { + can_have_children_with = { CHARACTER = scope:actor } + fertility > 0.1 + } + } + } + } + + modifier = { #Even if you're allowed to take same-sex concubines we don't want the AI to do so without a good reason if they're not attracted to the person + add = -200 + scope:actor = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = scope:recipient + NOT = { is_attracted_to_gender_of = scope:recipient } + } + } + + modifier = { # If they don't have a batch of kids and opposite sex consorts to handle that situation + add = -200 + scope:actor = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = scope:recipient + NOT = { + any_child = { + count >= 2 + } + } + NOT = { + any_consort = { + can_have_children_with = { CHARACTER = scope:actor } + fertility > 0.1 + } + } + } + } + + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + + modifier = { # Incest Filtering: Hard NO! + factor = 0 + scope:actor = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } + NOR = { + accepts_incest_with_trigger = { CHARACTER = scope:recipient } + sexually_liberal_trigger = yes + AND = { + primary_heir ?= { dynasty != root.dynasty } + NOT = { + primary_title = { + any_title_heir = { dynasty = root.dynasty } + } + } + } + } + } + } + + modifier = { # Incest Filtering: Not likely, but keep the door open... + factor = 0.2 + scope:actor = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } + OR = { + accepts_incest_with_trigger = { CHARACTER = scope:recipient } + sexually_liberal_trigger = yes + AND = { + primary_heir ?= { dynasty != root.dynasty } + NOT = { + primary_title = { + any_title_heir = { dynasty = root.dynasty } + } + } + } + } + } + } + + modifier = { # Less likely if married to a player and the target is the player heir + factor = 0.4 + scope:actor = { + any_spouse = { + is_ai = no + scope:recipient = { + OR = { + is_primary_heir_of = prev + is_heir_of = prev + } + } + } + } + } + } + + on_accept = { + scope:actor = { + save_scope_as = secondary_actor + } + scope:recipient = { + save_scope_as = secondary_recipient + } + concubine_on_accept_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_concubinage.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +make_concubine_interaction = { + category = interaction_category_diplomacy + icon = concubine_icon + + desc = make_concubine_interaction_desc + + interface = concubine_list + + redirect = { + # The UI will open to the already filled left and right first if we don't tell it we've got both sides filled + scope:actor = { + save_scope_as = secondary_actor + } + scope:recipient = { + save_scope_as = secondary_recipient + } + } + + populate_recipient_list = { + scope:actor = { + every_courtier = { + limit = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + add_to_list = characters + } + every_prisoner = { + limit = { + NOT = { is_in_list = characters } + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + add_to_list = characters + } + } + } + + is_shown = { + make_concubine_is_shown_trigger = yes + } + + is_valid_showing_failures_only = { + make_concubine_is_valid_trigger = yes + } + + auto_accept = yes + + on_accept = { + concubine_on_accept_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_concubinage.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +find_concubine = { + category = interaction_category_diplomacy + icon = concubine_icon + + desc = find_concubine_desc + + interface = concubine_list + + needs_recipient_to_open = no + + redirect = { + scope:actor = { # The UI will open to the already filled left first if we don't tell it we've got "our side" actor which is always ourselves + save_scope_as = secondary_actor + } + if = { + limit = { + # This is needed for the UI to function properly. Initially UI opens with player as both actor and recipient + # After UI opens with empty recipient, player can click on a candidate + # When candidate is selected both primary and secondary recipient must be set for the interaction to work + scope:actor != scope:recipient + } + scope:recipient = { + save_scope_as = secondary_recipient + } + } + } + + populate_recipient_list = { + scope:actor = { + every_courtier = { + limit = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + add_to_list = characters + } + every_prisoner = { + limit = { + NOT = { is_in_list = characters } + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + add_to_list = characters + } + } + } + + is_shown = { + scope:actor = { + allowed_concubines = yes + is_adult = yes + trigger_if = { #So that we show the recipient list, but can also only use this on ourselves, we have to do this check in the beginning + limit = { + NOT = { exists = scope:secondary_recipient } + } + scope:actor = scope:recipient + } + } + trigger_if = { + limit = { + scope:actor != scope:recipient + } + scope:actor = { + trigger_if = { + limit = { + allowed_to_marry_same_sex_trigger = no + } + sex_opposite_of = scope:recipient + } + NOT = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } } + } + scope:recipient = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + is_adult = yes + OR = { + is_imprisoned_by = scope:actor + is_courtier_of = scope:actor + } + } + } + } + + is_valid_showing_failures_only = { + custom_description = { + text = take_concubine_allowed_more + object = scope:recipient + scope:actor = { + allowed_more_concubines = yes + } + } + custom_description = { + text = take_concubine_available_character_opp + object = scope:actor + scope:actor = { + OR = { + any_courtier = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + any_prisoner = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + } + } + } + trigger_if = { + limit = { + scope:actor != scope:recipient + } + scope:recipient = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + } + } + } + + can_be_picked = { + is_adult = yes + } + + auto_accept = yes + + ai_will_do = { + base = 0 + } + + on_accept = { + concubine_on_accept_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_concubinage.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +offer_concubine = { + category = interaction_category_diplomacy + icon = concubine_icon + + desc = offer_concubine_desc + + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = suzerain + ai_recipients = liege + max = 5 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + greeting = positive + notification_text = OFFER_CONCUBINE_NOTIFICATION + + #interface = concubine_list + + populate_recipient_list = { + scope:actor = { + every_courtier = { + limit = { + can_be_offered_as_concubine_to_character_trigger = { + GIVER = scope:actor + CHARACTER = scope:recipient + } + } + add_to_list = characters + } + every_prisoner = { + limit = { + NOT = { is_in_list = characters } + can_be_offered_as_concubine_to_character_trigger = { + GIVER = scope:actor + CHARACTER = scope:recipient + } + } + add_to_list = characters + } + } + } + + is_shown = { + scope:actor != scope:recipient + scope:actor = { + OR = { + culture = { has_cultural_tradition = tradition_concubines } + faith = { has_doctrine = doctrine_concubines } + } + } + scope:recipient = { + NOT = { government_has_flag = government_is_herder } + allowed_concubines = yes + is_adult = yes + } + } + + is_valid_showing_failures_only = { + custom_description = { + text = take_concubine_available_character_opp + object = scope:recipient + scope:actor = { + OR = { + any_courtier = { + can_be_offered_as_concubine_to_character_trigger = { + GIVER = scope:actor + CHARACTER = scope:recipient + } + } + any_prisoner = { + can_be_offered_as_concubine_to_character_trigger = { + GIVER = scope:actor + CHARACTER = scope:recipient + } + } + } + } + } + custom_description = { + text = take_concubine_allowed_more + object = scope:recipient + scope:recipient = { + allowed_more_concubines = yes + } + } + + trigger_if = { #Landless adventurers check range + limit = { + scope:actor = { + is_landless_adventurer = yes + } + } + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + } + + can_be_picked = { + is_adult = yes + } + + can_send = { + custom_description = { + text = character_unavailable_to_be_offered_as_concubine + object = scope:secondary_recipient + scope:secondary_recipient = { + can_be_offered_as_concubine_to_character_trigger = { + GIVER = scope:actor + CHARACTER = scope:recipient + } + } + } + } + + auto_accept = no + + ai_accept = { + base = 50 + + modifier = { + add = { + value = 50 + multiply = scope:secondary_recipient.num_of_good_genetic_traits + } + scope:secondary_recipient = { + num_of_good_genetic_traits > 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + desc = AI_POSITIVE_TRAIT_REASON + } + + modifier = { + add = { + value = 50 + } + scope:secondary_recipient = { + is_lowborn = no + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + desc = AI_DYNASTY_PRESTIGE_REASON_NOBLE + } + + modifier = { + add = { + value = -50 + multiply = scope:secondary_recipient.num_of_bad_genetic_traits + } + scope:secondary_recipient = { + num_of_bad_genetic_traits > 0 + + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + desc = AI_NEGATIVE_TRAIT_REASON + } + + modifier = { + add = { + value = -50 + } + scope:secondary_recipient = { + is_lowborn = yes + num_of_good_genetic_traits = 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + desc = AI_DYNASTY_PRESTIGE_REASON_LOWBORN_NO_POSITIVE_TRAIT + } + + opinion_modifier = { # Opinion of you + who = scope:recipient + opinion_target = scope:actor + multiplier = 1.0 + desc = AI_OPINION_REASON + } + + opinion_modifier = { # Opinion of concubine + who = scope:recipient + opinion_target = scope:secondary_recipient + multiplier = 0.25 + desc = AI_OPINION_REASON + } + + compare_modifier = { # Recipient is reluctant to marry old women (procreation is a key factor) + trigger = { + scope:secondary_recipient = { + is_young_character = no + is_female = yes + } + } + target = scope:secondary_recipient + value = age + multiplier = -5.0 + step = 1 + offset = -29 + desc = MARRY_AGE + } + + modifier = { # A Recipient is unwilling to take a same-sex concubine if their faith doesn't support it + add = -1000 + + scope:recipient = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:secondary_recipient + } + desc = SAME_SEX_MARRIAGE_FAITH_REASON_RECIPIENT + } + + modifier = { # Unwilling if they don't have a batch of kids and opposite sex consorts to handle that situation + add = -200 + scope:recipient = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = scope:secondary_recipient + trigger_if = { + limit = { + NOT = { + any_consort = { + can_have_children_with = { CHARACTER = scope:recipient } + fertility > 0.1 + } + } + } + any_child = { is_player_heir_of = root } + } + trigger_else = { + always = no + } + } + desc = AI_NO_FERTILITY_REASON + } + + modifier = { + add = 50 + scope:recipient = { + is_attracted_to_gender_of = scope:secondary_recipient + } + desc = AI_ATTRACTION_REASON + } + + modifier = { # A Recipient is more likely to agree if you're their liege + add = 40 + scope:actor = { is_landed = yes } + scope:recipient = { + is_landed = yes + target_is_liege_or_above = scope:actor + } + desc = LIEGE_REASON + } + + #More/Less likely based on difference in rank between actor and recipient + modifier = { + add = 20 + scope:actor = { + tier_difference = { + target = scope:recipient + value = 1 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = 30 + scope:actor = { + tier_difference = { + target = scope:recipient + value = 2 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = 40 + scope:actor = { + tier_difference = { + target = scope:recipient + value = 3 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = 50 + scope:actor = { + tier_difference = { + target = scope:recipient + value = 4 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = 60 + scope:actor = { + tier_difference = { + target = scope:recipient + value = 5 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = -20 + scope:actor = { + tier_difference = { + target = scope:recipient + value = -1 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = -30 + scope:actor = { + tier_difference = { + target = scope:recipient + value = -2 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = -40 + scope:actor = { + tier_difference = { + target = scope:recipient + value = -3 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = -50 + scope:actor = { + tier_difference = { + target = scope:recipient + value = -4 + } + } + desc = AI_RANK_DIFF + } + modifier = { + add = -60 + scope:actor = { + tier_difference = { + target = scope:recipient + value = -5 + } + } + desc = AI_RANK_DIFF + } + + modifier = { + add = intimidated_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + NOT = { target_is_liege_or_above = scope:actor } + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + NOT = { target_is_liege_or_above = scope:actor } + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { + add = -250 + scope:secondary_recipient = { + has_std_trigger = yes + } + desc = AI_STD_REASON + } + modifier = { + add = -250 + scope:secondary_recipient = { + has_trait_with_flag = epidemic_disease + } + desc = AI_CONTAGIOUS_REASON + } + modifier = { + add = -5000 + scope:secondary_recipient = { + fertility <= 0 + } + desc = AI_FERTILITY_REASON + } + modifier = { + scope:hook = yes + add = 500 + scope:actor = { NOT = { has_strong_hook = scope:recipient } } + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:hook = yes + add = 1000 + scope:actor = { has_strong_hook = scope:recipient } + desc = SCHEME_STRONG_HOOK_USED + } + + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + } + + ai_potential = { + is_adult = yes + NOT = { has_trait = incapable } + is_at_war = no + NOR = { + has_trait = greedy + ai_greed > very_high_positive_ai_value + } + OR = { + culture = { has_cultural_tradition = tradition_concubines } + faith = { has_doctrine = doctrine_concubines } + } + } + + ai_will_do = { + base = 0 + + modifier = { # Basic Filtering + add = 100 + scope:recipient = { + number_of_concubines < number_of_desired_concubines + } + scope:secondary_recipient = { + trigger_if = { + limit = { + allowed_to_marry_same_sex_trigger = no + } + sex_opposite_of = scope:recipient + } + fertility > 0.2 + is_young_character = yes + NOR = { + is_councillor_of = scope:actor + is_of_major_interest_trigger = { + CHARACTER = scope:actor + } + is_concubine_of = scope:actor + } + } + } + + modifier = { # If secondary_recipient is close to actor, a good character, or if actor should take them as concubine + add = -100 + scope:secondary_recipient = { + is_of_minor_interest_trigger = { + CHARACTER = scope:actor + } + AND = { + can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } + scope:actor = { number_of_concubines < number_of_desired_concubines } + } + } + } + + modifier = { # If secondary_recipient could be an agent... + add = 25 + scope:actor = { + any_scheme = { + scheme_target_character ?= scope:recipient + save_temporary_scope_as = scheme_check + } + } + scope:secondary_recipient = { + char_can_fit_into_scheme_trigger = { SCHEME = scope:scheme_check } + } + } + + modifier = { # More likely if it's a neighboring ruler that you want to like you + add = 50 + scope:recipient = { + any_neighboring_top_liege_realm_owner = { this = scope:actor } + max_military_strength > scope:actor.max_military_strength + } + } + + modifier = { # More likely if it's your friend and it's a nice concubine + add = 50 + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + } + scope:secondary_recipient = { + fertility > 0.2 + is_young_character = yes + OR = { + has_trait = lustful + num_of_good_genetic_traits > 0 + } + } + } + + modifier = { #Even if they're allowed to take same-sex concubines we don't want the AI to suggest it without a good reason if they're not attracted to the person + add = -200 + scope:recipient = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = scope:secondary_recipient + NOT = { is_attracted_to_gender_of = scope:secondary_recipient } + } + } + + # Unity modifiers + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + + modifier = { # No if it's a same-sex concubinage and actor isn't accepting of it + factor = 0 + scope:actor = { + allowed_to_marry_same_sex_trigger = no + scope:recipient = { sex_same_as = scope:secondary_recipient } + } + } + + modifier = { # No if it's a same-sex concubinage and recipient isn't accepting of it + factor = 0 + scope:recipient = { + allowed_to_marry_same_sex_trigger = no + sex_same_as = scope:secondary_recipient + } + } + + modifier = { # Age considerations + factor = 0 + scope:recipient = { + OR = { + age >= scope:secondary_actor.age_plus_10 + age <= scope:secondary_actor.age_minus_10 + scope:secondary_actor.age >= 30 # Concubines are meant to be young... + } + } + } + + modifier = { # Incest Filtering: Hard NO! + factor = 0 + scope:recipient = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } + NOR = { + accepts_incest_with_trigger = { CHARACTER = scope:secondary_recipient } + sexually_liberal_trigger = yes + } + } + } + + modifier = { # Incest Filtering: Not likely, but keep the door open... + factor = 0.2 + scope:recipient = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } + OR = { + accepts_incest_with_trigger = { CHARACTER = scope:secondary_recipient } + sexually_liberal_trigger = yes + } + } + } + + modifier = { # Faith considerations + factor = 0 + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + NOR = { + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + } + } + } + + on_send = { + scope:secondary_recipient = { # to block the same character from being offered twice + add_character_flag = { + flag = has_been_offered_as_concubine + days = 5 + } + } + } + + on_accept = { + concubine_offer_on_accept_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_concubinage_offer.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = msg_concubine_offer_rejected_title + right_icon = scope:recipient + left_icon = scope:secondary_recipient + custom_tooltip = msg_concubine_offer_rejected + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_concubinage_offer_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + send_options_exclusive = no + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" +} + +dismiss_concubine_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = concubine_icon + + is_shown = { + scope:recipient = { + is_concubine_of = scope:actor + } + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + stress_impact = { + compassionate = minor_stress_impact_gain + } + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = msg_concubine_dismissed_title + right_icon = scope:recipient + remove_concubine = scope:recipient + } + } + } + + scope:recipient = { + # No point in sending a notification since the player can't be an unlanded concubine in any case + # trigger_event = marriage_interaction.0050 + + # Being thrown aside is humiliating, even if you didn't want to be a concubine in the first place. + add_opinion = { + modifier = set_me_aside_opinion + target = scope:actor + } + if = { + limit = { scope:actor = { has_relation_lover = scope:recipient } } + lover_breakup_effect = { + BREAKER = scope:actor + LOVER = scope:recipient + } + } + + # Figure out where we should go now that we're no longer a concubine. + if = { + limit = { + is_councillor_of = scope:actor + } + # Then they should remain in court + } + else_if = { #Dismiss to relevant court, or to pool + limit = { + any_close_family_member = { + is_landed_or_landless_administrative = yes + } + } + random_close_family_member = { + limit = { + is_child_of = scope:recipient + is_landed_or_landless_administrative = yes + } + alternative_limit = { + is_parent_of = scope:recipient + is_landed_or_landless_administrative = yes + } + alternative_limit = { + is_landed_or_landless_administrative = yes + } + add_courtier = scope:recipient + } + } + else = { + move_to_pool = yes + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_concubinage_dismissal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +divorce_character_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = icon_marriage + + desc = divorce_character_interaction_desc + cost = { piety = divorce_cost } + + is_shown = { + scope:actor.faith = { + # We are not required to seek approval of a spiritual HoF + NAND = { + has_doctrine = doctrine_divorce_approval + has_doctrine = doctrine_spiritual_head + exists = religious_head + } + # We are not required to seek approval of a house head + NAND = { + has_doctrine = doctrine_divorce_approval + exists = scope:actor.house + exists = scope:actor.house.house_head + scope:actor = { is_house_head = no } + } + } + scope:recipient = { + is_spouse_of = scope:actor + is_concubine = no # Can set aside Concubines at any time + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + NOT = { + scope:actor.culture = { + has_cultural_parameter = cannot_divorce + } + } + text = CULTURE_FORBIDS_DIVORCE + } + NOT = { + scope:actor.faith = { + has_doctrine = doctrine_divorce_disallowed + } + } + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + divorce_effect = { + DIVORCER = scope:actor + DIVORCEE = scope:recipient + } + if = { + limit = { + allowed_concubines = yes + } + custom_tooltip = divorce_cannot_concubine_ex_wife + } + } + scope:recipient = { + trigger_event = marriage_interaction.0030 + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_divorce.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ai_targets = { + ai_recipients = spouses + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_potential = { + is_ruler = yes + } + + ai_will_do = { + base = 0 + + modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile + add = 100 + scope:actor = { + fertility > 0.1 + NOT = { + any_child = { + is_heir_of = scope:actor + } + } + } + scope:recipient = { + is_ai = yes + fertility < 0.1 + } + } + + modifier = { # The AI will divorce if they're in a same-sex marriage and their faith changes its stance on the topic + add = 100 + scope:actor = { + sex_same_as = scope:recipient + allowed_to_marry_same_sex_trigger = no + } + } + } +} + +divorce_character_house_head_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = icon_marriage + + cost = { + piety = divorce_cost + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_recipient + } + if = { + limit = { + exists = scope:actor.house.house_head + } + scope:actor.house.house_head = { + save_scope_as = recipient + } + } + } + + greeting = positive + notification_text = ASK_FOR_DIVORCE_NOTIFICATION + + is_shown = { + exists = scope:actor.house.house_head + scope:actor != scope:actor.house.house_head # no need to ask yourself + scope:actor.faith = { + has_doctrine = doctrine_divorce_approval + } + NAND = { + exists = scope:actor.faith.religious_head + scope:actor.faith = { + has_doctrine = doctrine_spiritual_head + } + } + scope:secondary_recipient = { + is_spouse_of = scope:actor + is_concubine = no # Can set aside Concubines at any time + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + NOT = { + scope:actor.culture = { + has_cultural_parameter = cannot_divorce + } + } + text = CULTURE_FORBIDS_DIVORCE + } + NOT = { + scope:secondary_recipient = { has_strong_hook = scope:actor } + } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + ai_accept = { + base = 0 # Should be 0 for all interactions + + divorce_character_ai_accept_modifier = yes + + modifier = { # Infertility + add = 20 + desc = DIVORCE_INFERTILE + scope:actor = { + fertility > 0.1 + } + scope:secondary_recipient = { + fertility < 0.1 + is_eunuch_trigger = no + NOT = { + any_child = { + is_child_of = scope:actor + } + } + } + } + + modifier = { # Negative for having given you children + add = -50 + desc = DIVORCE_GIVEN_CHILDREN + scope:secondary_recipient = { + any_child = { + count >= 3 + is_child_of = scope:actor + dynasty ?= scope:actor.dynasty + + } + } + } + + modifier = { # They are of the same dynasty as the House Head + trigger = { scope:recipient != scope:secondary_recipient } + add = -10 + desc = THEY_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + exists = dynasty + NOR = { + is_cousin_of = scope:secondary_recipient + is_close_or_extended_family_of = scope:secondary_recipient + } + dynasty = scope:secondary_recipient.dynasty + NOR = { + house = scope:secondary_recipient.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + AND = { + exists = scope:actor.dynasty + scope:recipient.dynasty = scope:actor.dynasty + } + } + } + } + + modifier = { # They are of the same house as the House Head + trigger = { scope:recipient != scope:secondary_recipient } + add = -20 + desc = THEY_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + NOR = { + is_cousin_of = scope:secondary_recipient + is_close_or_extended_family_of = scope:secondary_recipient + } + house = scope:secondary_recipient.house + NOR = { + house = scope:actor.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:actor.house + } + } + } + + modifier = { # They are close kin to the House Head + trigger = { scope:recipient != scope:secondary_recipient } + add = -35 + desc = THEY_ARE_MY_CLOSE_KIN + scope:recipient = { + OR = { + is_cousin_of = scope:secondary_recipient + is_close_or_extended_family_of = scope:secondary_recipient + } + } + } + + modifier = { + add = intimidated_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + NOT = { target_is_liege_or_above = scope:actor } + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + NOT = { target_is_liege_or_above = scope:actor } + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + modifier = { # You're in a same-sex marriage and your faith doesn't allow it + add = 100 + desc = SAME_SEX_MARRIAGE_FAITH_REASON_ACTOR + scope:actor.faith = scope:recipient.faith + scope:actor = { + sex_same_as = scope:secondary_recipient + allowed_to_marry_same_sex_trigger = no + } + } + + modifier = { # You're in a same-sex marriage and their faith doesn't allow it + add = 100 + desc = SAME_SEX_MARRIAGE_FAITH_REASON + scope:secondary_recipient.faith = scope:recipient.faith + scope:secondary_recipient = { + sex_same_as = scope:actor + allowed_to_marry_same_sex_trigger = no + } + } + + # Unity modifiers + evaluate_action_decreasing_house_unity = { + VALUE = 100 + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:divorce_hook = yes + } + } + + send_option = { + is_shown = { + scope:actor != scope:recipient + } + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = divorce_hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + if = { + limit = { always = scope:divorce_hook } + scope:actor = { + if = { + limit = { + has_usable_hook = scope:recipient + } + use_hook = scope:recipient + } + } + } + if = { + limit = { + scope:actor = scope:actor.house.house_head + } + scope:actor = { + divorce_effect = { + DIVORCER = scope:actor + DIVORCEE = scope:secondary_recipient + } + } + } + else = { + show_as_tooltip = { + scope:actor = { + divorce_effect = { + DIVORCER = scope:actor + DIVORCEE = scope:secondary_recipient + } + } + } + scope:actor = { + trigger_event = religious_interaction.2 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_divorce_grant.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = divorce_character_rel_head_interaction_decline_notification + right_icon = scope:actor.house.house_head + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_divorce_grant_refusal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ai_targets = { + ai_recipients = spouses + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_potential = { + is_ruler = yes + } + + ai_will_do = { + base = 0 + + modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile + add = 100 + scope:actor = { + fertility > 0.1 + NOT = { + any_child = { + is_heir_of = scope:actor + } + } + } + scope:secondary_recipient = { + is_ai = yes + fertility < 0.1 + } + } + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:divorce_hook = yes + add = -1 + } + + modifier = { # You're in a same-sex marriage and your faith doesn't allow it + add = 100 + scope:actor = { + sex_same_as = scope:secondary_recipient + allowed_to_marry_same_sex_trigger = no + } + } + } +} + +divorce_character_rel_head_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = icon_marriage + + cost = { + piety = divorce_cost + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_recipient + } + + if = { + limit = { + exists = scope:actor.faith.religious_head + } + scope:actor.faith.religious_head = { + save_scope_as = recipient + } + } + } + + greeting = positive + notification_text = ASK_FOR_DIVORCE_NOTIFICATION + + is_shown = { + exists = scope:actor.faith.religious_head + scope:actor.faith = { + has_doctrine = doctrine_spiritual_head + has_doctrine = doctrine_divorce_approval + } + scope:secondary_recipient = { + is_spouse_of = scope:actor + is_concubine = no # Can set aside Concubines at any time + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { has_trait = excommunicated } + } + custom_tooltip = { + NOT = { + scope:actor.culture = { + has_cultural_parameter = cannot_divorce + } + } + text = CULTURE_FORBIDS_DIVORCE + } + NOT = { + scope:secondary_recipient = { has_strong_hook = scope:actor } + } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:recipient + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + ai_accept = { + base = 0 # Should be 0 for all interactions + + divorce_character_ai_accept_modifier = yes + + modifier = { # Divine Family is part of the faith + add = -100 + desc = DIVORCE_INCESTUOUS + + scope:actor = { + is_close_or_extended_family_of = scope:secondary_recipient + faith = { has_doctrine = tenet_divine_marriage } + } + } + + modifier = { # More likely if the marriage is incestuous, unless Divine Family is part of the faith + add = 100 + desc = DIVORCE_INCESTUOUS + + scope:actor = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } + } + } + + modifier = { # They are of the same dynasty as the Head of Faith + add = -5 + desc = THEY_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + exists = dynasty + exists = scope:secondary_recipient.dynasty + dynasty = scope:secondary_recipient.dynasty + NOR = { + house = scope:secondary_recipient.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:actor.dynasty + } + } + } + + modifier = { # You are of the same dynasty as the Head of Faith + add = 5 + desc = YOU_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + exists = dynasty + exists = scope:actor.dynasty + dynasty = scope:actor.dynasty + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:secondary_recipient.dynasty + } + } + } + + modifier = { # They are of the same house as the Head of Faith + add = -10 + desc = THEY_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + exists = house + exists = scope:secondary_recipient.house + house = scope:secondary_recipient.house + NOR = { + house = scope:actor.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:actor.house + } + } + } + + modifier = { # You are of the same house as the Head of Faith + add = 10 + desc = YOU_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + exists = house + exists = scope:actor.house + house = scope:actor.house + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:secondary_recipient.house + } + } + } + + modifier = { # Related to the Head of Faith + add = 25 + desc = YOU_ARE_MY_RELATIVE + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + } + NOT = { is_child_of = scope:actor } + } + } + + modifier = { # Parent of the Head of Faith + add = 50 + desc = PARENTS #YOU_ARE_MY_PARENT + scope:recipient = { + is_child_of = scope:actor + } + } + + modifier = { + add = { + add = 10 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = I_AM_VIRTUOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:secondary_recipient.num_virtuous_traits + } + scope:secondary_recipient.num_virtuous_traits > 0 + desc = THEY_ARE_VIRTUOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = I_AM_SINFUL + } + + modifier = { + add = { + add = 10 + multiply = scope:secondary_recipient.num_sinful_traits + } + scope:secondary_recipient.num_sinful_traits > 0 + desc = THEY_ARE_SINFUL + } + + modifier = { # You're in a same-sex marriage and your faith doesn't allow it + add = 100 + desc = SAME_SEX_MARRIAGE_FAITH_REASON_ACTOR + scope:actor.faith = scope:recipient.faith + scope:actor = { + sex_same_as = scope:secondary_recipient + allowed_to_marry_same_sex_trigger = no + } + } + + modifier = { # You're in a same-sex marriage and their faith doesn't allow it + add = 100 + desc = SAME_SEX_MARRIAGE_FAITH_REASON + scope:secondary_recipient.faith = scope:recipient.faith + scope:secondary_recipient = { + sex_same_as = scope:actor + allowed_to_marry_same_sex_trigger = no + } + } + + modifier = { # You have denounced them as impotent (ep2_wedding.1061) + add = 30 + desc = THEY_ARE_ACCUSED_IMPOTENCY + scope:secondary_recipient = { + has_character_modifier = wedding_accused_impotency_modifier + } + } + # Unity modifiers + evaluate_action_decreasing_house_unity = { + VALUE = 100 + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:divorce_hook = yes + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = divorce_hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + if = { + limit = { always = scope:divorce_hook } + scope:actor = { + if = { + limit = { + has_usable_hook = scope:recipient + } + use_hook = scope:recipient + } + } + } + show_as_tooltip = { + scope:actor = { + divorce_effect = { + DIVORCER = scope:actor + DIVORCEE = scope:secondary_recipient + } + } + } + scope:actor = { + trigger_event = religious_interaction.1 + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_alliance.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = divorce_character_rel_head_interaction_decline_notification + + right_icon = scope:actor.faith.religious_head + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_alliance.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ai_targets = { + ai_recipients = spouses + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_potential = { + is_ruler = yes + } + + ai_will_do = { + base = 0 + + modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile + add = 100 + scope:actor = { + fertility > 0.1 + NOT = { + any_child = { + is_heir_of = scope:actor + } + } + } + scope:secondary_recipient = { + is_ai = yes + fertility < 0.1 + } + } + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:divorce_hook = yes + add = -1 + } + + modifier = { # You're in a same-sex marriage and your faith doesn't allow it + add = 100 + scope:actor = { + sex_same_as = scope:secondary_recipient + allowed_to_marry_same_sex_trigger = no + } + } + } +} + +divorce_character_dynast_request_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = icon_dynasty + + desc = divorce_character_dynast_request_interaction_desc + + cost = { + piety = divorce_cost + renown = scope:actor.dynasty.minor_dynasty_prestige_value + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_actor + } + + if = { + limit = { + exists = scope:recipient.primary_spouse + } + scope:recipient.primary_spouse = { + save_scope_as = recipient + } + } + } + + is_shown = { + scope:secondary_actor != scope:actor + scope:secondary_actor.dynasty.dynast = scope:actor + + scope:actor.faith = { + # We are not required to seek approval of a spiritual HoF + NAND = { + has_doctrine = doctrine_divorce_approval + has_doctrine = doctrine_spiritual_head + exists = religious_head + } + } + OR = { + AND = { + scope:actor.faith != scope:secondary_actor.faith + # They are not required to seek approval of a spiritual HoF of the Dynasty Member + scope:secondary_actor.faith = { + NOT = { + has_doctrine = doctrine_divorce_approval + } + } + } + scope:actor.faith = scope:secondary_actor.faith + } + + scope:recipient = { + is_spouse_of = scope:secondary_actor + is_concubine = no # Can set aside Concubines at any time + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + NOT = { + scope:actor.culture = { + has_cultural_parameter = cannot_divorce + } + } + text = CULTURE_FORBIDS_DIVORCE + } + NOT = { + scope:actor.faith = { + has_doctrine = doctrine_divorce_disallowed + } + } + scope:actor.dynasty = { + dynasty_prestige >= minor_dynasty_prestige_value + } + + NOT = { + scope:secondary_actor.faith = { + has_doctrine = doctrine_divorce_disallowed + } + } + scope:secondary_actor = { NOT = { has_strong_hook = scope:actor } } + trigger_if = { + limit = { + scope:secondary_actor = { + NOR = { + is_child_of = scope:actor + is_grandchild_of = scope:actor + is_great_grandchild_of = scope:actor + } + } + } + custom_description = { + scope:secondary_actor.top_liege = scope:actor.top_liege + text = "same_realm_as" + } + } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = divorce_character_dynast_request_interaction_title + custom_tooltip = divorce_character_dynast_request_interaction_desc + + left_icon = scope:secondary_actor + right_icon = scope:recipient + } + } + + + scope:secondary_actor = { + divorce_effect = { + DIVORCER = scope:secondary_actor + DIVORCEE = scope:recipient + } + + add_opinion = { + modifier = forced_divorce_opinion + target = scope:actor + } + } + if = { + limit = { + scope:recipient != scope:actor + } + scope:recipient = { + trigger_event = marriage_interaction.0030 + + add_opinion = { + modifier = forced_divorce_opinion + target = scope:actor + } + } + } + } + + # AI + ai_targets = { + ai_recipients = dynasty + max = 10 + } + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 72 + kingdom = 72 + empire = 72 + hegemony = 72 + } + + ai_potential = { + is_ruler = yes + } + + ai_will_do = { + base = 0 + + modifier = { # The AI wants to force a divorce if their heir is not from their dynasty and current marriage within the dynasty are not promising + add = 100 + scope:secondary_actor = { + fertility > 0.1 + } + scope:recipient = { + is_ai = yes + fertility < 0.1 + } + exists = scope:actor.primary_heir + exists = scope:actor.primary_heir.dynasty + scope:actor.primary_heir.dynasty != this.dynasty + } + + #Players should not be targeted + modifier = { + add = -1000 + OR = { + scope:secondary_actor = { is_ai = no } + scope:recipient = { is_ai = no } + } + } + } +} + +divorce_character_dynast_request_rel_head_interaction = { + category = interaction_category_diplomacy + use_diplomatic_range = no + icon = icon_dynasty + + cost = { + piety = divorce_cost + renown = scope:actor.dynasty.minor_dynasty_prestige_value + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_actor + } + + if = { + limit = { + exists = scope:recipient.primary_spouse + } + scope:recipient.primary_spouse = { + save_scope_as = secondary_recipient + } + } + + if = { + limit = { + exists = scope:actor.faith.religious_head + } + scope:actor.faith.religious_head = { + save_scope_as = recipient + } + } + } + + greeting = positive + notification_text = ASK_FOR_DIVORCE_NOTIFICATION + + is_shown = { + scope:secondary_actor != scope:actor + scope:secondary_actor.dynasty.dynast = scope:actor + NOT = { + scope:secondary_actor = { is_spouse_of = scope:actor } + } + + exists = scope:secondary_recipient + + scope:actor.faith = scope:secondary_actor.faith + exists = scope:actor.faith.religious_head + scope:actor.faith = { + has_doctrine = doctrine_spiritual_head + has_doctrine = doctrine_divorce_approval + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + NOT = { + scope:actor.culture = { + has_cultural_parameter = cannot_divorce + } + } + text = CULTURE_FORBIDS_DIVORCE + } + scope:actor.dynasty = { + dynasty_prestige >= minor_dynasty_prestige_value + } + + scope:secondary_actor = { NOT = { has_strong_hook = scope:actor } } + trigger_if = { + limit = { + scope:secondary_actor = { + NOR = { + is_child_of = scope:actor + is_grandchild_of = scope:actor + is_great_grandchild_of = scope:actor + } + } + } + custom_description = { + scope:secondary_actor.top_liege = scope:actor.top_liege + text = "same_realm_as" + } + } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } + } + + ai_accept = { + base = 0 # Should be 0 for all interactions + + divorce_character_ai_accept_modifier = yes + + modifier = { # Divine Family is part of the faith + add = -100 + desc = DIVORCE_INCESTUOUS + + scope:secondary_actor = { + is_close_or_extended_family_of = scope:secondary_recipient + faith = { has_doctrine = tenet_divine_marriage } + } + } + + modifier = { # More likely if the marriage is incestuous, unless Divine Family is part of the faith + add = 100 + desc = DIVORCE_INCESTUOUS + + scope:secondary_actor = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } + } + } + + modifier = { # You are of the same dynasty as the Head of Faith + add = 5 + desc = YOU_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + dynasty = scope:actor.dynasty + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:secondary_recipient.dynasty + } + } + } + + + modifier = { # You are of the same house as the Head of Faith + add = 10 + desc = YOU_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + house = scope:actor.house + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:secondary_recipient.house + } + } + } + + modifier = { # Related to the Head of Faith + add = 25 + desc = YOU_ARE_MY_RELATIVE + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + } + NOT = { is_child_of = scope:actor } + } + } + + modifier = { # Parent of the Head of Faith + add = 50 + desc = PARENTS #YOU_ARE_MY_PARENT + scope:recipient = { + is_child_of = scope:actor + } + } + + modifier = { + add = { + add = 10 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = I_AM_VIRTUOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:secondary_recipient.num_virtuous_traits + } + scope:secondary_recipient.num_virtuous_traits > 0 + desc = THEY_ARE_VIRTUOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = I_AM_SINFUL + } + + modifier = { + add = { + add = 10 + multiply = scope:secondary_recipient.num_sinful_traits + } + scope:secondary_recipient.num_sinful_traits > 0 + desc = THEY_ARE_SINFUL + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:divorce_hook = yes + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = divorce_hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + if = { + limit = { always = scope:divorce_hook } + scope:actor = { + if = { + limit = { + has_usable_hook = scope:recipient + } + use_hook = scope:recipient + } + } + } + scope:actor = { + trigger_event = religious_interaction.6 + } + + scope:secondary_actor = { + divorce_effect = { + DIVORCER = scope:secondary_actor + DIVORCEE = scope:secondary_recipient + } + add_opinion = { + modifier = forced_divorce_opinion + target = scope:actor + } + } + + scope:secondary_recipient = { + add_opinion = { + modifier = forced_divorce_opinion + target = scope:actor + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = divorce_character_dynast_request_rel_head_interaction_decline_notification + + right_icon = scope:actor.faith.religious_head + } + } + } + + # AI + ai_targets = { + ai_recipients = dynasty + max = 10 + } + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 72 + kingdom = 72 + empire = 72 + hegemony = 72 + } + + ai_potential = { + is_ruler = yes + } + + ai_will_do = { + base = 0 + + modifier = { # The AI wants to force a divorce if their heir is not from their dynasty and current marriage within the dynasty are not promising + add = 100 + scope:secondary_actor = { + fertility > 0.1 + } + scope:secondary_recipient = { + is_ai = yes + fertility < 0.1 + } + exists = scope:actor.primary_heir + exists = scope:actor.primary_heir.dynasty + scope:actor.primary_heir.dynasty != this.dynasty + } + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:divorce_hook = yes + add = -1 + } + + #Players should not be targeted + modifier = { + add = -1000 + OR = { + scope:secondary_actor = { is_ai = no } + scope:secondary_recipient = { is_ai = no } + } + } + } +} + +elope_interaction = { + icon = icon_scheme_elope + category = interaction_category_friendly + + scheme = elope + + desc = elope_interaction_desc + + notification_text = elope_interaction_notification + + ai_targets = { + ai_recipients = realm_characters + chance = 0.25 + } + + ai_target_quick_trigger = { + adult = yes + attracted_to_owner = yes + owner_attracted = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_recipient + } + } + + is_shown = { + scope:actor = { + OR = { + has_relation_lover = scope:recipient + has_relation_soulmate = scope:recipient + AND = { + has_government = landless_adventurer_government + has_perk = accomplished_forger_perk + } + } + } + scope:recipient = { + is_adult = yes + is_courtier = yes + NOR = { + is_courtier_of = scope:actor + is_consort_of = scope:actor + } + could_marry_character_trigger = { CHARACTER = scope:actor } + } + } + + + is_valid_showing_failures_only = { + scope:actor = { + can_start_scheme = { + type = elope + target_character = scope:recipient + } + } + + trigger_if = { #For landless adventurers we check range. + limit = { + scope:actor = { + is_landless_adventurer = yes + } + } + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + } + + + ai_accept = { + base = 0 + + elopment_ai_accept_modifier = yes + } + + ai_potential = { + is_adult = yes + OR = { + any_relation = { type = lover } + any_relation = { type = soulmate } + } + NOR = { + has_trait = celibate + scheme_generic_ai_blocker_trigger = yes + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 3 + + on_accept = { + scope:actor = { + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + } + show_as_tooltip = { + elope_success_effect = { + TARGET = scope:recipient + OWNER = scope:actor + } + } + } + hidden_effect = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = elope_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + begin_scheme_basic_effect = { + SCHEME_TYPE = elope + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + } + + show_as_tooltip = { + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + } + } + } + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = elope_interaction_decline_toast + left_icon = scope:recipient + } + } + } + + ai_will_do = { + base = 100 + } +} diff --git a/common/character_interactions/00_religious_interactions.txt b/common/character_interactions/00_religious_interactions.txt new file mode 100644 index 00000000..f401cd66 --- /dev/null +++ b/common/character_interactions/00_religious_interactions.txt @@ -0,0 +1,7706 @@ +# Interaction used to convert people when you reform or create a faith +ask_for_conversion_interaction = { + category = interaction_category_religion + special_interaction = request_conversion_interaction + popup_on_receive = yes + + desc = compel_conversion_interaction_desc + + hidden = yes + + is_shown = { + scope:actor.faith != scope:recipient.faith + scope:recipient.liege = scope:actor + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + is_valid_showing_failures_only = { + valid_ask_for_conversion_conditions_trigger = yes + } + + ai_accept = { + base = 0 + religion_demand_conversion_default_modifier = yes + + # We add a few extra modifiers if you have a state faith, to make the initial conversion rate more immersive and plausible + modifier = { + scope:actor = { + government_allows = state_faith + + # If you fulfill a minimum amount of the below triggers, we consider that you hold enough sway within the realm to make it easier for others to abandon the state faith + calc_true_if = { + amount >= 4 + + diplomacy >= excellent_skill_level + learning >= excellent_skill_level + has_trait = august # You finished the August lifestyle tree + has_trait = theologian # You finished the Theologian lifestyle tree + AND = { + top_liege = this + legitimacy_level >= 4 + } + influence_level >= 3 + house = { + OR = { + is_dominant_family = yes + is_powerful_family = yes + } + } + } + } + add = { + value = 50 + if = { + limit = { + scope:actor.influence_level = 5 + } + add = 50 + } + else_if = { + limit = { + scope:actor.influence_level >= 4 + } + add = 25 + } + if = { + limit = { + scope:actor = { + top_liege = this + legitimacy_level >= 5 + } + } + add = 50 + } + } + desc = STATE_FAITH_CREATE_FAITH_REASON + } + modifier = { # If you have the prophet perk, let's increase acceptance equal to half your diplomacy and learning + scope:actor = { + government_allows = state_faith + has_perk = prophet_perk + } + add = { value = scope:actor.learning add = scope:actor.diplomacy multiply = 0.5 } + desc = HAS_PERK_PROPHET_REASON + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + new_faith_created_conversion_effect = yes + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + # If character is converting to the state faith, we add influence + state_faith_conversion_add_piety_effect = yes + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = ask_for_conversion_decline_notification + right_icon = scope:recipient + } + } + + # If we're a clan this interaction affects unity + refuse_faith_conversion_add_clan_unity_effect = yes + + state_faith_refuse_conversion_add_piety_effect = yes + } + + #Use hook + send_option = { + is_valid = { + always = no # Only here to ensure that religion_demand_conversion_default_modifier doesn't error + } + flag = hook + localization = SCHEME_HOOK + } + send_options_exclusive = no +} + +ask_for_conversion_courtier_interaction = { + category = interaction_category_religion + icon = religious + + special_interaction = request_conversion_interaction + ai_maybe = yes + can_send_despite_rejection = yes + + desc = { + desc = ask_for_conversion_interaction_desc + triggered_desc = { + trigger = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + scope:recipient = { + target_is_liege_or_above = scope:actor + } + } + desc = demand_conversion_vassal_ruler_is_crime + } + } + + ai_targets = { + ai_recipients = courtiers + chance = 0.25 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + is_shown = { + scope:actor.faith != scope:recipient.faith + scope:recipient = { is_courtier_of = scope:actor } + scope:recipient = { is_ruler = no } + scope:recipient = { is_imprisoned = no } + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + cooldown_against_recipient = { years = 15 } + + is_valid_showing_failures_only = { + valid_demand_conversion_conditions_trigger = yes + } + + ai_accept = { + base = 0 + # Increase base chance + modifier = { + add = 50 + desc = EDUCATE_CHILD_ACTOR_IS_MY_LIEGE + } + religion_demand_conversion_default_modifier = yes + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + NOT = { scope:recipient = { has_character_flag = ai_will_not_convert } } + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + demand_conversion_interaction_effect = yes + hidden_effect = { + scope:actor = { + send_interface_message = { + type = event_religious_good + title = ask_for_conversion_courtier_interaction.tt + left_icon = scope:recipient + scope:recipient = { + show_as_tooltip = { demand_conversion_interaction_effect = yes } + } + } + } + } + if = { + limit = { scope:hook = yes } + scope:actor = { + if = { + limit = { + has_usable_hook = scope:recipient + } + use_hook = scope:recipient + } + } + scope:recipient = { + # trigger_event = char_interaction.0180 + trigger_event = false_conversion.0900 + save_scope_value_as = { + name = forcibly_converted + value = yes + } + } + } + if = { + limit = { scope:recipient = { is_imprisoned_by = scope:actor } } + scope:recipient = { release_from_prison = yes } + scope:recipient = { + # trigger_event = char_interaction.0180 + trigger_event = false_conversion.0900 + save_scope_value_as = { + name = forcibly_converted + value = yes + } + } + } + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + # If character is converting to the state faith, we add influence + state_faith_conversion_add_piety_effect = yes + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + } + + on_decline = { + #Negative opinions + scope:recipient = { + if = { + limit = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + scope:recipient = { + target_is_liege_or_above = scope:actor + } + } + reverse_add_opinion = { + target = scope:actor + modifier = illegal_resisted_conversion_opinion + years = 10 + } + } + else = { + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:actor + opinion = -10 + } + } + } + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = ask_for_conversion_decline_notification + left_icon = scope:recipient + } + } + + # If we're a clan this interaction affects unity + refuse_faith_conversion_add_clan_unity_effect = yes + + state_faith_refuse_conversion_add_piety_effect = yes + } + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + send_options_exclusive = no + + + ai_potential = { + is_adult = yes + } + + ai_will_do = { + base = 100 + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:hook = yes + add = -1 + } + + modifier = { # The AI doesn't really want to convert Diasporic culture courtiers + scope:recipient = { + faith.religion = religion:judaism_religion + culture = { + has_cultural_tradition = tradition_diasporic + } + } + factor = 0 + } + + modifier = { # Do not convert Righteous faith subjects, unless disturbingly zealous + factor = 0 + scope:actor = { + ai_zeal < 100 + ai_rationality > -50 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_fully_accepted_level + } + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + has_tolerant_faith_or_culture_trigger = yes + ai_zeal < 100 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + ai_zeal < -10 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + NOR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + has_tolerant_faith_or_culture_trigger = yes + } + ai_zeal < 25 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Rulers with State Faith won't try to convert people with faiths that are astray or better + factor = 0 + scope:actor = { + government_allows = state_faith + primary_title.state_faith ?= { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + } + } +} + +# House head demand conversion +demand_conversion_interaction = { + icon = religious + category = interaction_category_religion + popup_on_receive = yes + pause_on_receive = yes + can_send_despite_rejection = yes + ai_maybe = yes + + notification_text = HOUSE_HEAD_DEMAND_CONVERSION + + is_shown = { + scope:recipient != scope:actor + scope:actor = { + is_house_head = yes + faith != scope:recipient.faith + OR = { + house = scope:recipient.house + AND = { # House Bloc + house.house_confederation ?= { + scope:recipient.house.house_confederation ?= this + has_cohesion_level_parameter = bloc_members_join_leaders_faith + } + } + } + } + NOT = { + scope:recipient = { # Use the vassal-liege interaction instead. + is_ruler = yes + target_is_liege_or_above = scope:actor + } + } + scope:recipient = { # To avoid you converting someone's entire family, and then asking them. Restricting it to landed rulers at least gives them a chance to create their own cadet house. + is_ruler = yes + } + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + cooldown_against_recipient = { years = 15 } + + desc = { + desc = demand_conversion_interaction_desc + triggered_desc = { + trigger = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + scope:recipient = { + target_is_liege_or_above = scope:actor + } + } + desc = demand_conversion_vassal_ruler_is_crime + } + } + + is_valid_showing_failures_only = { + valid_demand_conversion_conditions_trigger = yes + } + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + on_accept = { + demand_conversion_interaction_effect = yes + if = { + limit = { scope:hook = yes } + scope:actor = { + use_hook = scope:recipient + } + scope:recipient = { + # trigger_event = char_interaction.0180 + trigger_event = false_conversion.0900 + save_scope_value_as = { + name = forcibly_converted + value = yes + } + } + } + if = { + limit = { scope:recipient = { is_imprisoned_by = scope:actor } } + scope:recipient = { release_from_prison = yes } + scope:recipient = { + # trigger_event = char_interaction.0180 + trigger_event = false_conversion.0900 + save_scope_value_as = { + name = forcibly_converted + value = yes + } + } + } + else = { + scope:actor = { + trigger_event = char_interaction.0181 + } + } + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + # If character is converting to the state faith, we add influence + state_faith_conversion_add_piety_effect = yes + } + + on_decline = { + scope:recipient = { + execute_decision = create_cadet_branch_decision + show_as_tooltip = { create_cadet_branch = {} } + } + #Negative opinions + scope:recipient = { + if = { + limit = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + scope:recipient = { + target_is_liege_or_above = scope:actor + } + } + add_opinion = { + target = scope:recipient + modifier = illegal_resisted_conversion_opinion + years = 10 + } + } + else = { + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:actor + opinion = -10 + } + } + } + scope:actor = { + trigger_event = char_interaction.0182 + } + + # If we're a clan this interaction affects unity + refuse_faith_conversion_add_clan_unity_effect = yes + + state_faith_refuse_conversion_add_piety_effect = yes + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + #For loc + on_auto_accept = { + scope:recipient = { + save_scope_value_as = { + name = forcibly_converted + value = yes + } + } + } + + ai_accept = { + base = 0 + # Increase base chance + modifier = { + add = 50 + desc = EDUCATE_CHILD_ACTOR_IS_MY_LIEGE + } + modifier = { + add = 100 + NOT = { + scope:recipient = { + can_execute_decision = create_cadet_branch_decision + } + } + desc = ASK_FOR_CONVERSION_CAN_NOT_CREATE_CADET_BRANCH + } + modifier = { + add = -10 + scope:recipient = { + can_execute_decision = create_cadet_branch_decision + } + desc = ASK_FOR_CONVERSION_CAN_CREATE_CADET_BRANCH + } + religion_demand_conversion_default_modifier = yes + } + + can_send_despite_rejection = yes + force_notification = yes + + #Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + send_options_exclusive = no +} + +demand_conversion_vassal_ruler_interaction = { + category = interaction_category_religion + icon = religious + notification_text = LIEGE_DEMAND_CONVERSION + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + ai_accept_negotiation = yes + popup_on_receive = yes + + ai_targets = { + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 24 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + desc = { + desc = ask_for_conversion_interaction_desc + desc = line_break + triggered_desc = { + trigger = { + NOT = { scope:recipient = { is_imprisoned_by = scope:actor } } + } + desc = might_ask_for_something_in_return_warning + } + triggered_desc = { + trigger = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + } + desc = demand_conversion_vassal_ruler_is_crime + } + } + + on_decline_summary = stop_attacker_vassal_war_decline_summary + + is_shown = { + scope:recipient = { + OR = { + target_is_liege_or_above = scope:actor + is_tributary_of = scope:actor + } + faith != scope:actor.faith + is_ai = yes + is_ruler = yes + } + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + cooldown_against_recipient = { years = 15 } + + is_valid_showing_failures_only = { + valid_demand_conversion_conditions_trigger = yes + trigger_if = { + limit = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + } + scope:recipient = { + is_ruler = yes + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + custom_tooltip = { + text = nomads_must_inspire_tt + NOT = { + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + NOT = { scope:recipient = { has_character_flag = ai_will_not_convert } } + } + } + + on_send = { + } + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + on_accept = { + scope:actor = { + trigger_event = religious_interaction.2002 + } + demand_conversion_vassal_ruler_interaction_effect = yes + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + # If character is converting to the state faith, we add influence + state_faith_conversion_add_piety_effect = yes + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + } + + on_decline = { + scope:recipient = { + hidden_effect = { + random_list = { + 80 = { # Conditional acceptance + modifier = { + factor = 0 # Heresiarchs never agree to convert + scope:recipient = { + has_trait = heresiarch + } + } + ai_value_modifier = { + ai_greed = 0.5 + } + random_list = { + 50 = { #They ask for gold + 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 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 + } + } + scope:actor = { + trigger_event = { + id = religious_interaction.2011 + } + } + } + 500 = { #They ask for a favor + trigger = { + exists = scope:recipient.capital_county + NOT = { has_hook = scope:actor } + } + # Direct feudal vassals appreciate favors more (they can improve their contract). + 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 + government_has_flag = government_is_feudal + } + scope:actor = { + trigger_event = { + id = religious_interaction.2012 + } + } + } + } + + } + 20 = { # Full refuse + modifier = { + add = 20 + scope:recipient.demand_conversion_likelihood_calculation < 40 + } + modifier = { + add = 20 + scope:recipient.demand_conversion_likelihood_calculation < 20 + } + modifier = { + add = 50 + scope:recipient.demand_conversion_likelihood_calculation < 0 + } + scope:actor = { + trigger_event = { + id = religious_interaction.2003 + } + } + } + } + } + custom_tooltip = demand_conversion_vassal_ruler_does_not_convert + show_as_tooltip = { + #Negative opinions + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:actor + opinion = -10 + } + scope:actor = { + if = { + limit = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + custom_tooltip = action_can_lawfully_imprison_label + } + } + # If appropriate, give 'em piety. + give_piety_for_clinging_to_state_faith_effect = yes + } + } + + # If we're a clan this interaction affects unity + refuse_faith_conversion_add_clan_unity_effect = yes + } + + ai_potential = { + is_adult = yes + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + send_options_exclusive = no + + ai_will_do = { + base = 100 + + modifier = { # Make sure the AI uses hooks for this as it's % based + scope:hook = yes + add = 1 + } + + modifier = { + factor = 0 + scope:recipient.demand_conversion_likelihood_calculation < 10 + NOT = { + scope:actor = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + } + } + + modifier = { + factor = 0 + scope:recipient.demand_conversion_likelihood_calculation < 70 + scope:actor = { + gold < demand_conversion_bribe_size + } + } + + modifier = { + factor = 0 + scope:recipient.demand_conversion_likelihood_calculation < 90 + scope:actor = { + culture = { + has_cultural_parameter = less_likely_to_force_conversion + } + } + } + + modifier = { # Do not convert Righteous faith subjects, unless disturbingly zealous + factor = 0 + scope:actor = { + ai_zeal < 100 + ai_rationality > -50 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_fully_accepted_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + has_tolerant_faith_or_culture_trigger = yes + ai_zeal < 100 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + ai_zeal < -10 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + NOR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + has_tolerant_faith_or_culture_trigger = yes + } + ai_zeal < 25 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + } + + modifier = { # Rulers with state faith won't try to convert people with faiths that are astray or better + factor = 0 + scope:actor = { + government_allows = state_faith + primary_title.state_faith ?= { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + } + } + ai_accept = { + base = 0 + # Increase base chance + modifier = { + add = 50 + desc = EDUCATE_CHILD_ACTOR_IS_MY_LIEGE + } + religion_demand_conversion_default_modifier = yes + + modifier = { + desc = might_ask_for_something_in_return_warning_line_break + add = 0 + } + } +} + +demand_conversion_player_ruler_interaction = { + category = interaction_category_religion + desc = ask_for_conversion_interaction_desc + notification_text = LIEGE_DEMAND_CONVERSION + popup_on_receive = yes + pause_on_receive = yes + icon = religious + + ai_targets = { + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 120 + kingdom = 120 + empire = 120 + hegemony = 120 + } + + is_shown = { + scope:recipient = { + is_ai = no + target_is_liege_or_above = scope:actor + faith != scope:actor.faith + } + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + cooldown_against_recipient = { years = 15 } + + is_valid_showing_failures_only = { + valid_demand_conversion_conditions_trigger = yes + } + + send_option = { + is_valid = { + scope:actor = { + has_strong_usable_hook = scope:recipient + } + } + flag = demand_conversion_hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_strong_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + + send_options_exclusive = no + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:demand_conversion_hook = yes + } + } + + on_auto_accept = { + demand_conversion_player_ruler_interaction_effect = yes + + scope:actor = { + trigger_event = char_interaction.0190 + } + + scope:recipient = { + save_scope_value_as = { + name = forcibly_converted + value = yes + } + trigger_event = religious_interaction.2021 + } + } + + on_accept = { + # Do conversion + demand_conversion_player_ruler_interaction_effect = yes + scope:actor = { + trigger_event = char_interaction.0190 + } + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + # If character is converting to the state faith, we add influence + state_faith_conversion_add_piety_effect = yes + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + } + + on_decline = { + scope:actor = { + #Crime if relevant + if = { + limit = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + add_opinion = { + target = scope:recipient + modifier = illegal_resisted_conversion_opinion + years = 15 + } + } + else = { + add_opinion = { + target = scope:recipient + modifier = resisted_conversion_opinion + years = 15 + } + } + trigger_event = char_interaction.0191 + } + + # If we're a clan this interaction affects unity + refuse_faith_conversion_add_clan_unity_effect = yes + + state_faith_refuse_conversion_add_piety_effect = yes + } + + ai_potential = { + is_adult = yes + } + + ai_will_do = { + base = 100 + + modifier = { + scope:hook = yes + add = 1 + } + + modifier = { + factor = 0 + scope:recipient.demand_conversion_likelihood_calculation < 10 + } + + modifier = { # Do not convert Righteous faith subjects, unless disturbingly zealous + factor = 0 + scope:actor = { + ai_zeal < 100 + ai_rationality > -50 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_fully_accepted_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + has_tolerant_faith_or_culture_trigger = yes + ai_zeal < 100 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + ai_zeal < -10 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Astray faiths require specific circumstances to demand conversion of + factor = 0 + scope:actor = { + NOR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + has_tolerant_faith_or_culture_trigger = yes + } + ai_zeal < 25 + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + NOT = { # If the subject has one of your holy sites, always try to convert + scope:recipient = { + any_sub_realm_county = { + any_county_province = { + barony = { + is_holy_site_of = scope:actor.faith + } + } + } + } + } + NOT = { + scope:recipient = { + is_close_family_of = scope:actor + } + } + } + + modifier = { # Rulers with state faith won't try to convert people with faiths that are astray or better + factor = 0 + scope:actor = { + government_allows = state_faith + primary_title.state_faith ?= { + faith_hostility_level = { + target = scope:recipient.faith + value <= faith_astray_level + } + } + } + } + } +} + +# Compel Conversion +demand_conversion_minister_rites_interaction = { + category = interaction_category_religion + icon = religious + notification_text = CONVERT_TO_RELIGION + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = no + popup_on_receive = yes + + desc = { + desc = ask_for_conversion_interaction_desc + desc = line_break + desc = demand_conversion_vassal_ruler_is_crime + } + + on_decline_summary = stop_attacker_vassal_war_decline_summary + + is_shown = { + scope:actor = { + is_ai = no + has_title = title:e_minister_of_rites + } + scope:recipient = { + top_liege = scope:actor.top_liege + this != top_liege + faith = { + OR = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + faith_hostility_level = { + target = scope:actor.top_liege.faith + value >= faith_hostile_level + } + } + } + is_ai = yes + is_ruler = yes + } + NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } } + } + + cooldown_against_recipient = { years = 15 } + + is_valid_showing_failures_only = { + valid_demand_conversion_conditions_trigger = yes + } + + on_send = { + } + + cost = { + treasury = { + value = 0 + add = scope:actor.minor_treasury_value + multiply = { + value = scope:recipient.primary_title.tier + } + } + } + + on_accept = { + switch = { + trigger = yes + scope:convert_to_minister_faith = { + scope:actor.faith = { + save_scope_as = conversion_faith + } + } + scope:convert_to_top_liege_faith = { + scope:actor.top_liege.faith = { + save_scope_as = conversion_faith + } + } + scope:convert_to_realm_capital_faith = { + scope:actor.top_liege.capital_county.faith = { + save_scope_as = conversion_faith + } + } + } + scope:actor = { + trigger_event = religious_interaction.2002 + } + demand_conversion_vassal_ruler_interaction_effect = yes + + # If we're a clan this interaction affects unity + accept_faith_conversion_add_clan_unity_effect = yes + + show_as_tooltip = { + scope:actor = { + change_influence = { + value = minor_influence_gain + multiply = scope:recipient.primary_title.tier + } + add_piety = { + value = minor_piety_gain + multiply = scope:recipient.primary_title.tier + } + } + } + } + + on_decline = { + switch = { + trigger = yes + scope:convert_to_minister_faith = { + scope:actor.faith = { + save_scope_as = conversion_faith + } + } + scope:convert_to_top_liege_faith = { + scope:actor.top_liege.faith = { + save_scope_as = conversion_faith + } + } + scope:convert_to_realm_capital_faith = { + scope:actor.top_liege.capital_county.faith = { + save_scope_as = conversion_faith + } + } + } + scope:recipient = { + hidden_effect = { + random_list = { + 80 = { # Conditional acceptance + modifier = { + factor = 0 # Heresiarchs never agree to convert + scope:recipient = { + has_trait = heresiarch + } + } + ai_value_modifier = { + ai_greed = 0.5 + } + random_list = { + 50 = { #They ask for gold + 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 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 + } + } + scope:actor = { + trigger_event = { + id = religious_interaction.2011 + } + } + } + 500 = { #They ask for a favor + trigger = { + exists = scope:recipient.capital_county + NOT = { has_hook = scope:actor } + } + # Direct feudal vassals appreciate favors more (they can improve their contract). + 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 + government_has_flag = government_is_feudal + } + scope:actor = { + trigger_event = { + id = religious_interaction.2012 + } + } + } + } + + } + 20 = { # Full refuse + modifier = { + add = 20 + scope:recipient.demand_conversion_likelihood_calculation < 40 + } + modifier = { + add = 20 + scope:recipient.demand_conversion_likelihood_calculation < 20 + } + modifier = { + add = 50 + scope:recipient.demand_conversion_likelihood_calculation < 0 + } + scope:actor = { + trigger_event = { + id = religious_interaction.2003 + } + } + } + } + } + custom_tooltip = demand_conversion_vassal_ruler_does_not_convert + show_as_tooltip = { + #Negative opinions + add_opinion = { + modifier = compelled_me_to_convert_opinion + target = scope:actor + opinion = -10 + } + scope:actor = { + if = { + limit = { + refusing_conversion_is_crime_trigger = { + CHARACTER = scope:recipient + } + } + custom_tooltip = action_can_lawfully_imprison_label + } + } + # If appropriate, give 'em piety. + give_piety_for_clinging_to_state_faith_effect = yes + } + } + } + + # Use hook + send_option = { + flag = convert_to_minister_faith + localization = MINISTER_FAITH + } + + send_option = { + is_shown = { + scope:actor.top_liege.faith != scope:actor.faith + } + flag = convert_to_top_liege_faith + localization = TOP_LIEGE_FAITH + } + + send_option = { + is_shown = { + scope:actor.top_liege.capital_county.faith = { + NOR = { + this = scope:actor.top_liege.faith + this = scope:actor.faith + } + } + } + flag = convert_to_realm_capital_faith + localization = CAPITAL_FAITH + } + + ai_accept = { + base = 0 + # Increase base chance + modifier = { + add = 50 + desc = ACTOR_IS_MINISTER_OF_RITES + } + modifier = { + add = 25 + trigger = { + scope:actor.top_liege = { + OR = { + has_realm_law = celestial_bureaucracy_0 + has_realm_law = celestial_bureaucracy_1 + } + } + } + desc = IMPRESSED_BY_AUTHORITY + } + modifier = { + add = 50 + trigger = { + scope:actor.top_liege = { + has_realm_law = celestial_bureaucracy_2 + } + } + desc = OVERWHELMED_BY_AUTHORITY + } + modifier = { + add = 75 + trigger = { + scope:actor.top_liege = { + has_realm_law = celestial_bureaucracy_3 + } + } + desc = OVERWHELMED_BY_AUTHORITY + } + modifier = { + add = 25 + trigger = { + scope:actor = { + has_hook = scope:recipient + } + } + desc = HAS_A_HOOK + } + religion_demand_conversion_default_modifier = yes + modifier = { + desc = might_ask_for_something_in_return_warning_line_break + add = 0 + } + } +} + +convert_to_religion_interaction = { + category = interaction_category_religion + icon = religious + + + desc = convert_to_religion_interaction_desc + + notification_text = CONVERT_TO_RELIGION + ignores_pending_interaction_block = yes + + is_shown = { + scope:actor.faith != scope:recipient.faith + scope:actor = { + is_landless_ruler = no + # They're either your liege, your spouse or your tributary + OR = { + target_is_liege_or_above = scope:recipient + any_consort = { + this = scope:recipient + } + is_tributary_of = scope:recipient + } + # And you've never HumSac'd a tolerated HoF. + NAND = { + has_variable_list = humsacd_hofs + is_target_in_variable_list = { + name = humsacd_hofs + target = scope:recipient.faith + } + } + } + NOT = { scope:actor = { government_has_flag = government_is_landless_minority } } + } + + is_valid_showing_failures_only = { + } + + auto_accept = yes + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_send = { + # Show conversion preview - this can be canceled, but it's fine since the conversion is voluntary + ## If we have a valid state faith, we go there. + if = { + limit = { + scope:actor = { + government_allows = state_faith + } + scope:actor.top_liege.primary_title.state_faith ?= scope:recipient.faith + } + decision:adopt_state_faith = { + open_view_data = { + view = decision_detail + player = scope:actor + } + } + } + ## Otherwise, go to the usual place. + else = { + scope:recipient.faith = { + open_view_data = { + view = faith_conversion + player = scope:actor # interaction effects are executed for all clients, make sure to open the window only for the actor + } + } + } + } + + on_accept = { + custom_tooltip = { + text = open_faith_conversion_view_tt + } + } + + ai_accept = { + base = 0 + } + + ai_will_do = { + base = 0 + } +} + +convert_to_religion_adventurer_interaction = { + category = interaction_category_religion + icon = religious + + + desc = convert_to_religion_interaction_desc + + notification_text = CONVERT_TO_RELIGION + ignores_pending_interaction_block = yes + + is_shown = { + scope:actor.faith != scope:recipient.faith + scope:actor = { + has_government = landless_adventurer_government + # They're either your friend or your spouse + OR = { + target_is_liege_or_above = scope:recipient + any_consort = { + this = scope:recipient + } + any_relation = { + type = friend + this = scope:recipient + } + } + # And you've never HumSac'd a tolerated HoF. + NAND = { + has_variable_list = humsacd_hofs + is_target_in_variable_list = { + name = humsacd_hofs + target = scope:recipient.faith + } + } + } + NOT = { scope:actor = { government_has_flag = government_is_landless_minority } } + } + + is_valid_showing_failures_only = { + } + + auto_accept = yes + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + scope:actor = { + hidden_effect = { faith = { save_scope_as = old_faith } } + set_character_faith = scope:recipient.faith + trigger_event = { + on_action = on_faith_conversion + } + } + } + + ai_accept = { + base = 0 + } + + ai_will_do = { + base = 0 + } +} + +convert_at_war_interaction = { + category = interaction_category_religion + icon = religious + + + desc = convert_at_war_interaction_desc + + notification_text = CONVERT_AT_WAR_INTERACTION_NOTIFICATION + + is_shown = { + scope:actor.faith != scope:recipient.faith + scope:actor = { + any_character_war = { + primary_defender = scope:actor + primary_attacker = scope:recipient + using_non_ghw_holy_war_cb_trigger = yes + } + NOR = { + #They're neither your liege nor your spouse (so this isn't shown with convert_to_religion_interaction) + target_is_liege_or_above = scope:recipient + any_spouse = { + this = scope:recipient + } + #They can convert + scope:actor = scope:actor.faith.religious_head + government_has_flag = government_is_holy_order + # And you've never HumSac'd a tolerated HoF. + AND = { + has_variable_list = humsacd_hofs + is_target_in_variable_list = { + name = humsacd_hofs + target = scope:recipient.faith + } + } + } + } + } + + + is_valid_showing_failures_only = { + } + + + ai_accept = { + base = 100 #Ai always says yes + } + + ai_min_reply_days = 1 + ai_max_reply_days = 3 + + cooldown_against_recipient = { years = 10 } + + on_accept = { + scope:actor = { + trigger_event = religious_interaction.2500 + convert_at_war_interaction_effect = yes + } + } + + on_decline = { + scope:actor = { + show_as_tooltip = { + add_piety_level = -1 + stress_impact = { zealous = major_stress_impact_gain } + } + trigger_event = religious_interaction.2501 + } + } + + ai_potential = { + ai_zeal < 100 + faith = { + OR = { + has_doctrine_parameter = unreformed + fervor <= 25 + has_doctrine_parameter = unattractive_for_character_conversions + } + } + } + + ai_targets = { + ai_recipients = primary_war_enemies + } + + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 24 + kingdom = 24 + empire = 24 + hegemony = 24 + } + + ai_will_do = { + base = 0 + + ai_value_modifier = { + who = scope:actor + ai_zeal = -1 + ai_boldness = -0.5 + max = 40 + } + modifier = { + scope:actor = { + any_character_war = { + primary_attacker = scope:recipient + primary_defender = scope:actor + attacker_war_score >= 30 + } + } + add = 5 + } + modifier = { + scope:actor = { + any_character_war = { + primary_attacker = scope:recipient + primary_defender = scope:actor + attacker_war_score >= 50 + } + } + add = 10 + } + modifier = { + scope:actor = { + any_character_war = { + primary_attacker = scope:recipient + primary_defender = scope:actor + attacker_war_score >= 80 + } + } + add = 15 + } + modifier = { + scope:actor.faith = { + fervor < 50 + } + scope:recipient.faith = { + fervor >= 50 + } + add = 5 + } + modifier = { + scope:actor.faith = { + fervor <= 25 + } + scope:recipient.faith = { + fervor >= 50 + } + add = 5 + } + modifier = { + scope:actor.faith = { + fervor <= 25 + } + scope:recipient.faith = { + fervor >= 75 + } + add = 5 + } + modifier = { + scope:actor.faith = { + fervor >= 75 + } + add = -10 + } + modifier = { + scope:actor.faith = { + fervor >= 50 + } + add = -5 + } + modifier = { + scope:recipient.faith = { + fervor <= 25 + } + add = -10 + } + modifier = { + scope:recipient.faith = { + fervor <= 15 + } + add = -20 + } + modifier = { + scope:recipient.faith = { + fervor <= 10 + } + add = -30 + } + modifier = { + scope:recipient.faith.fervor < scope:actor.faith.fervor + factor = 0 + } + modifier = { # Big rulers shouldn't convert arbitrarily + scope:actor = { + highest_held_title_tier >= tier_kingdom + sub_realm_size >= 10 + NOT = { + has_trait = lunatic + } + } + factor = 0 + } + } +} + + +#################### +# Communion tenets # +# by Sean Hughes # +#################### + +seek_indulgences_interaction = { + icon = religious + category = interaction_category_religion + + desc = seek_indulgences_interaction_desc + + notification_text = RELIGIOUS_HEAD_SEEK_INDULGENCES + + is_shown = { + scope:recipient != scope:actor + scope:actor.faith = { + religious_head = scope:recipient + has_doctrine = tenet_communion + } + } + + cooldown = { years = 5 } + + is_valid_showing_failures_only = { + scope:actor = { + trigger_if = { + limit = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_3 GENDER_CHARACTER = scope:actor } + } + gold >= seek_indulgences_major_criminal_trait_value + } + trigger_else_if = { + limit = { + OR = { + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_2 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = witch + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = witch GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = deviant + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = deviant GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = sodomite + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = sodomite GENDER_CHARACTER = scope:actor } + } + } + } + gold >= seek_indulgences_medium_criminal_trait_value + } + trigger_else_if = { + limit = { + OR = { + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_1 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = fornicator GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = scope:actor } + } + } + } + gold >= seek_indulgences_minor_criminal_trait_value + } + trigger_else = { + gold >= seek_indulgences_buy_piety_value + } + custom_description = { + text = "seek_indulgences_excommunicated" + NOT = { has_trait = excommunicated } + } + } + scope:actor = { + custom_description = { + text = "hof_interaction_unreformed_faith" + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + ai_accept = { + base = 50 + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + evaluate_action_increasing_house_unity = { + VALUE = 50 + } + + evaluate_action_decreasing_house_unity = { + VALUE = -100 + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + seek_indulgences_interaction_effect = yes + scope:actor = { + trigger_event = religious_interaction.1010 + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_indulgences_accepted.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + trigger_event = religious_interaction.1011 + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_indulgences_declined.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI will do + + ai_potential = { + short_term_gold >= head_of_faith_gold_value + NOT = { + has_trait = cynical + } + } + + ai_targets = { + ai_recipients = head_of_faith + } + + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_will_do = { + base = -25 + + ai_value_modifier = { # +50 to -50 + who = scope:actor + ai_zeal = 0.5 + } + + modifier = { + add = 50 + scope:actor = { + piety < 0 + } + } + + modifier = { + add = 75 + scope:actor = { + piety_level < 0 + } + } + + modifier = { + add = 50 + scope:actor = { + piety < major_piety_value + short_term_gold >= head_of_faith_gold_value + short_term_gold >= monumental_gold_value + } + } + + modifier = { + add = -25 + scope:actor = { + piety > major_piety_value + piety_level > 0 + } + } + + evaluate_action_increasing_house_unity = { + VALUE = 50 + } + } +} + +declaration_of_repentance_interaction = { + icon = religious + category = interaction_category_religion + + desc = { + desc = declaration_of_repentance_interaction_desc + triggered_desc = { + trigger = { scope:actor = { has_hook = scope:recipient } } + desc = declaration_of_repentance_interaction_desc_hook + } + } + + notification_text = RELIGIOUS_HEAD_DECLARATION_OF_REPENTANCE + + is_shown = { + scope:recipient != scope:actor + scope:actor = { + has_trait = excommunicated + faith = { + religious_head = scope:recipient + has_doctrine = tenet_communion + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + has_character_modifier = recent_excommunication + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = declaration_hook + localization = DECLARATION_OF_REPENTANCE_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:declaration_hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + ai_accept = { + base = 25 + + modifier = { + scope:declaration_hook = yes + add = 20 + desc = SCHEME_WEAK_HOOK_USED + } + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + } + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + modifier = { + add = { + add = 10 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = DECLARATION_OF_REPENTANCE_VIRTUES + } + modifier = { + add = { + add = -10 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = DECLARATION_OF_REPENTANCE_SINS + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_PARAGON + add = 15 + scope:actor = { + has_trait = paragon + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_CONSECRATED_BLOOD + add = 5 + scope:actor = { + has_trait = consecrated_blood + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_UNPLEDGED_GHW + add = -25 + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = unpledged_from_ghw_opinion + } + } + } + modifier = { + add = 20 + scope:recipient = { + is_landed = no + } + OR = { + scope:recipient.liege ?= scope:actor + scope:recipient.top_liege ?= scope:actor + } + desc = I_AM_LIEGE_TOP_LIEGE + } + modifier = { + add = 10 + scope:recipient = { + is_landed = yes + } + OR = { + scope:recipient.liege ?= scope:actor + scope:recipient.top_liege ?= scope:actor + } + desc = I_AM_LIEGE_TOP_LIEGE + } + + evaluate_action_increasing_house_unity = { + VALUE = 50 + } + + evaluate_action_decreasing_house_unity = { + VALUE = -100 + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + declaration_of_repentance_interaction_effect = yes + + scope:actor = { + #Letter event to inform character that their excommunication has been lifted. + trigger_event = { + id = religious_interaction.1024 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_repentance.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + + #Letter event to inform character the pope refused to lift the excommunication. + trigger_event = { + id = religious_interaction.1025 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_repentance_declined.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI will do + + ai_potential = { + has_trait = excommunicated + } + + ai_targets = { + ai_recipients = head_of_faith + } + + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 72 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_will_do = { + base = 100 + } +} + +excommunicate_interaction = { + category = interaction_category_hostile + common_interaction = yes #suppress error + icon = excommunication + + desc = excommunicate_interaction_desc + + is_shown = { + scope:actor = scope:actor.faith.religious_head + scope:actor.faith = { + this = scope:recipient.faith + has_doctrine = tenet_communion + has_doctrine = doctrine_spiritual_head + } + + NOT = { + scope:recipient = { + has_trait = excommunicated + } + } + + NOT = { #Don't do this to yourself + scope:recipient = scope:actor + } + } + + is_valid_showing_failures_only = { + NOR = { + scope:recipient = { + has_character_modifier = excommunication_recently_lifted + } + AND = { + exists = scope:actor.faith.great_holy_war + scope:actor.faith.great_holy_war = { + has_pledged_attacker = scope:recipient + } + } + } + scope:recipient = { + age >= 12 + } + scope:actor = { + piety >= major_piety_value + } + scope:actor = { + custom_description = { + text = "hof_interaction_unreformed_faith" + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + } + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + custom_tooltip = { + text = cannot_take_overt_hostile_actions_against_diarch.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + } + + auto_accept = yes + force_notification = yes + notification_text = religious_interaction.1021 + #answer_accept_key = religious_interaction.1000.strong_negative + + on_accept = { + scope:actor = { + add_piety = major_piety_loss + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = excommunicate_interaction_desc.tt + left_icon = scope:recipient + scope:recipient = { + show_as_tooltip = { add_trait = excommunicated } + } + } + } + } + excommunicate_character = { + REQUESTING_CHARACTER = scope:actor + TARGET_CHARACTER = scope:recipient + } + + scope:recipient = { + hidden_effect = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = scope:actor + has_relation_potential_rival = scope:actor + } + } + set_relation_potential_rival = scope:actor + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_excommunication.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI will do + + ai_potential = { + is_adult = yes + piety >= major_piety_value + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = primary_war_enemies + } + + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_will_do = { + base = 50 + + ai_value_modifier = { # +50 to -50 + who = scope:actor + ai_vengefulness = 0.5 + } + + modifier = { + factor = 0 + scope:recipient = { + NOR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + is_at_war_with = scope:actor + } + } + } + + modifier = { + factor = 0 + scope:recipient = { + involved_activity ?= { + has_activity_type = activity_coronation + activity_host = prev + } + } + } + } +} + +lift_excommunication_interaction = { + category = interaction_category_religion + icon = excommunication + + common_interaction = yes + + desc = lift_excommunication_interaction_desc + + is_shown = { + scope:actor = scope:actor.faith.religious_head + scope:actor.faith = scope:recipient.faith + scope:recipient = { + has_trait = excommunicated + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + is_at_war_with = scope:recipient + } + } + } + + auto_accept = yes + force_notification = yes + notification_text = religious_interaction.1024 + #answer_accept_key = religious_interaction.1024.positive + + on_accept = { + lift_character_excommunication_effect = { + TARGET_CHARACTER = scope:recipient + REQUESTING_CHARACTER = scope:actor + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_excommunication_lifted + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI will do + + ai_potential = { + is_adult = yes + piety >= major_piety_value + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = war_allies + } + + ai_frequency_by_tier = { + barony = 0 + county = 96 + duchy = 72 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_will_do = { + base = 10 + + ai_value_modifier = { # +50 to -50 + who = scope:actor + ai_compassion = 0.5 + } + + modifier = { + factor = 0 + scope:recipient = { + NOR = { + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + is_allied_to = scope:actor + } + } + } + } +} + +request_excommunication_interaction = { + category = interaction_category_hostile + icon = excommunication + interface_priority = 30 + + desc = request_excommunication_interaction_desc + redirect = { + if = { + limit = { + exists = scope:actor.faith.religious_head + } + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:actor.faith.religious_head = { + save_scope_as = recipient + } + } + scope:actor.faith = { + if = { + limit = { exists = religious_head } + religious_head = { + save_scope_as = recipient + } + } + } + } + + notification_text = RELIGIOUS_HEAD_REQUEST_EXCOMMUNICATION + + is_shown = { + exists = scope:actor.faith.religious_head + NOR = { + scope:actor = scope:secondary_recipient + scope:actor.faith.religious_head = scope:actor + scope:actor.faith.religious_head = scope:secondary_recipient + } + scope:actor.faith = { + exists = religious_head + this = scope:secondary_recipient.faith + has_doctrine = tenet_communion + has_doctrine = doctrine_spiritual_head + } + } + + is_valid_showing_failures_only = { + scope:actor = { + piety >= massive_piety_value + } + scope:secondary_recipient = { #Excommunication target + NOT = { has_trait = excommunicated } + age >= 12 + } + scope:actor = { + custom_description = { + text = "hof_interaction_unreformed_faith" + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + NOT = { + is_at_war_with = scope:recipient + } + } + scope:secondary_recipient = { NOT = { has_strong_hook = scope:actor } } + custom_tooltip = { + text = cannot_take_overt_hostile_actions_against_diarch.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = excommunication_hook + localization = EXCOMMUNICATION_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:excommunication_hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + ai_accept = { + base = -50 + + modifier = { + scope:excommunication_hook = yes + add = 50 + desc = SCHEME_WEAK_HOOK_USED + } + opinion_modifier = { + who = scope:actor.faith.religious_head + opinion_target = scope:actor + multiplier = 1 + } + opinion_modifier = { + who = scope:actor.faith.religious_head + opinion_target = scope:secondary_recipient #Excommunication target + multiplier = -1 + min = 0 + } + modifier = { + add = -100 + scope:actor.faith.religious_head = { + opinion = { + value > 0 + target = scope:secondary_recipient #Excommunication target + } + } + desc = EXCOMMUNICATION_OPINION + } + modifier = { + add = { + add = -10 + multiply = scope:secondary_recipient.num_virtuous_traits + } + scope:secondary_recipient.num_virtuous_traits > 0 + desc = EXCOMMUNICATION_VIRTUES + } + modifier = { + add = { + add = 10 + multiply = scope:secondary_recipient.num_sinful_traits + } + scope:secondary_recipient.num_sinful_traits > 0 + desc = EXCOMMUNICATION_SINS + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_PARAGON + add = 15 + scope:actor = { + has_trait = paragon + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_CONSECRATED_BLOOD + add = 5 + scope:actor = { + has_trait = consecrated_blood + } + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + if = { + limit = { + scope:secondary_recipient = { is_alive = yes } + } + if = { + limit = { scope:excommunication_hook = yes } + scope:actor = { + use_hook = scope:recipient + } + } + + scope:actor = { + #Spend piety for the excommunication. + add_piety = massive_piety_loss + + #Letter event to inform character the pope agreed to their request. + trigger_event = { + id = religious_interaction.1022 + } + } + excommunicate_character = { + TARGET_CHARACTER = scope:secondary_recipient + REQUESTING_CHARACTER = scope:actor + } + scope:secondary_recipient = { + #Letter event to inform character that they have been excommunicated. + trigger_event = { + id = religious_interaction.1020 + } + hidden_effect = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = scope:actor + has_relation_potential_rival = scope:actor + } + scope:actor = { is_alive = yes } + } + set_relation_potential_rival = scope:actor + } + } + } + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_request_excommunication.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + } + + on_decline = { + scope:actor = { + #Letter event to inform character the pope refused their request. + trigger_event = { + id = religious_interaction.1023 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_gain + DESC = clan_unity_excommunication_request_denied.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI will do + + ai_potential = { + is_adult = yes + piety >= major_piety_value + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = primary_war_enemies + } + + ai_frequency_by_tier = { + barony = 0 + county = 48 + duchy = 36 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_will_do = { + base = 25 + + ai_value_modifier = { # +50 to -50 + who = scope:actor + ai_vengefulness = 0.5 + } + + modifier = { + factor = 0 + scope:secondary_recipient = { + NOR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + is_at_war_with = scope:actor + } + } + } + } +} + +### End Communion tenets ### + +#Ask to take the vows to join Holy order +#by Linnéa Thimrén & Bianca Savazzi +send_to_holy_order_interaction = { + category = interaction_category_friendly + icon = holy_order + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + #can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + cooldown_against_recipient = { years = 10 } + + desc = send_to_holy_order_interaction_desc + + on_decline_summary = take_vows_decline_summary + + greeting = negative + notification_text = REQUEST_VOWS_NOTIFICATION_TEXT + + is_shown = { + scope:recipient = { + OR = { + is_courtier_of = scope:actor + is_child_of = scope:actor + } + NOR = { + has_trait = devoted + has_trait = order_member + } + } + NOT = { #Not your bishop + scope:actor = { + any_learning_councillor = { this = scope:recipient } + } + } + scope:actor.faith = { + any_faith_holy_order = { #Your faith must have a Holy Order + always = yes + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + is_courtier_of = scope:actor + #Triggers that applies to both Monastery or Holy Order requirements + can_take_religious_vows_trigger = yes + + can_be_warrior_trigger = { ARMY_OWNER = scope:recipient } + custom_description = { + text = TAKE_VOWS_INTERACTION_MARTIAL_EDUCATION + object = scope:recipient + has_education_martial_trigger = yes + } + custom_description = { #At least one Holy Order whose leader you're not a rival of + text = not_rival_leader_check + object = scope:recipient + scope:actor.faith = { + any_faith_holy_order = { + leader = { + NOT = { has_relation_rival = scope:recipient } + } + } + } + } + } + custom_tooltip = { + text = cannot_take_overt_hostile_actions_against_diarch.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + } + + #Use hook + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + cost = { + piety = scope:recipient.ask_to_take_vows_piety_cost + } + + on_send = { + scope:recipient = { + set_variable = { + name = vows_piety_spent + value = ask_to_take_vows_piety_cost + days = 10 + } + } + } + + on_accept = { + scope:actor = { + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + + # Legitimacy loss if you're doing this to your children + if = { + limit = { + scope:recipient = { is_primary_heir_of = scope:actor } + } + add_legitimacy = { + value = minor_legitimacy_loss + multiply = scope:actor.primary_title.tier + } + } + else_if = { + limit = { + scope:recipient = { is_child_of = scope:actor } + } + add_legitimacy = { + value = miniscule_legitimacy_loss + multiply = scope:actor.primary_title.tier + } + } + + trigger_event = holy_order.0001 + show_as_tooltip = { + send_child_to_holy_order_tooltip_effect = yes + scope:recipient = { kick_from_court_interaction_warning_tooltip_effect = yes } + } + } + hidden_effect = { + scope:recipient = { + remove_variable = vows_piety_spent + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_send_to_holy_order.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = asked_me_to_take_vows_opinion + years = 10 + } + } + #Letter event informing the character about the rejection. + scope:actor = { + trigger_event = { + id = religious_interaction.1031 + } + } + + # Refund piety cost + show_as_tooltip = { + scope:actor = { + add_piety_no_experience = { + value = scope:recipient.ask_to_take_vows_piety_cost + } + } + } + hidden_effect = { + if = { + limit = { + scope:recipient = { + has_variable = vows_piety_spent + } + } + scope:actor = { + add_piety_no_experience = { + value = scope:recipient.var:vows_piety_spent + } + } + scope:recipient = { + remove_variable = vows_piety_spent + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_join_holy_order_refusal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = no + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + + modifier = { + scope:hook = yes + add = 50 + desc = SCHEME_WEAK_HOOK_USED + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.25 + desc = AI_SIMPLE_OPINION_REASON + } + modifier = { + add = ai_zeal + ai_zeal < 0 + desc = TAKE_THE_VOWS_SKEPTIC + } + modifier = { + add = { + value = ai_zeal + divide = 2 + } + ai_zeal > 0 + desc = TAKE_THE_VOWS_ZEALOUS + } + modifier = { + add = { + value = ai_zeal + multiply = ai_boldness + divide = 100 + min = 10 + } + ai_zeal > 0 + ai_boldness > 0 + desc = TAKE_THE_VOWS_FIGHT_FOR_FAITH + } + modifier = { + add = { + value = ai_boldness + } + ai_boldness < 0 + desc = TAKE_THE_VOWS_AFRAID_TO_DIE + } + modifier = { + add = { + value = ai_greed + multiply = -1 + } + ai_greed > 0 + desc = TAKE_THE_VOWS_GREED + } + modifier = { + add = 50 + exists = scope:actor.cp:councillor_court_chaplain + scope:recipient = { + OR = { + has_relation_lover = scope:actor.cp:councillor_court_chaplain + has_relation_friend = scope:actor.cp:councillor_court_chaplain + has_secret_relation_lover = scope:actor.cp:councillor_court_chaplain + has_relation_soulmate = scope:actor.cp:councillor_court_chaplain + has_relation_best_friend = scope:actor.cp:councillor_court_chaplain + opinion = { + target = scope:actor.cp:councillor_court_chaplain + value >= very_high_positive_opinion + } + } + } + desc = TAKE_THE_VOWS_INSPIRING_COURT_CHAPLAIN + } + modifier = { + add = 50 + scope:recipient = { + OR = { + any_relation = { + type = friend + is_clergy = yes + } + any_relation = { + type = best_friend + is_clergy = yes + } + any_relation = { + type = lover + is_clergy = yes + } + any_relation = { + type = soulmate + is_clergy = yes + } + any_secret = { + type = secret_lover + secret_target = { + is_clergy = yes + } + } + } + } + desc = TAKE_THE_VOWS_INSPIRING_CLERGY + } + + modifier = { + add = { + add = 20 + multiply = scope:recipient.num_virtuous_traits + } + scope:recipient.num_virtuous_traits > 0 + desc = TAKE_THE_VOWS_VIRTUOUS + } + + modifier = { + add = { + add = -20 + multiply = scope:recipient.num_sinful_traits + } + scope:recipient.num_sinful_traits > 0 + desc = TAKE_THE_VOWS_SINFUL + } + modifier = { # Has fought for the faith before + add = 20 + scope:recipient = { + has_trait = holy_warrior + } + desc = TAKE_THE_VOWS_HOLY_WARRIOR + } + + modifier = { + add = 25 + scope:recipient = { + has_trait = temperate + } + desc = TAKE_THE_VOWS_TEMPERATE + } + + modifier = { + add = 25 + scope:recipient = { + has_trait = content + } + desc = TAKE_THE_VOWS_CONTENT + } + modifier = { + add = 25 + scope:recipient = { + has_trait = humble + } + desc = TAKE_THE_VOWS_HUMBLE + } + + #Negative Personality Modifiers + modifier = { + add = -500 + scope:recipient = { + has_trait = pregnant + } + desc = TAKE_THE_VOWS_PREGNANT + } + modifier = { + add = -500 + scope:recipient = { + has_trait = ambitious + } + desc = TAKE_THE_VOWS_AMBITIOUS + } + + modifier = { + add = -50 + scope:recipient = { + OR = { + is_married = yes + exists = betrothed + } + } + desc = TAKE_THE_VOWS_MARRIED_OR_BETROTHED + } + + modifier = { + add = -150 + scope:recipient = { + is_primary_heir_of = scope:actor + } + desc = TAKE_THE_VOWS_PRIMARY_HEIR + } + + modifier = { + add = -75 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value = 2 + } + } + desc = TAKE_THE_VOWS_SECOND_HEIR + } + + modifier = { + add = -50 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value = 3 + } + } + desc = TAKE_THE_VOWS_THIRD_HEIR + } + + modifier = { + add = -25 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value >= 4 + value <= 10 + } + } + desc = TAKE_THE_VOWS_HEIR + } + + modifier = { + add = -100 + scope:recipient = { + NOT = { is_heir_of = scope:actor } + any_heir_title = { + exists = holder + holder != scope:actor + } + NOT = { + is_primary_heir_of = scope:actor + } + } + desc = TAKE_THE_VOWS_HEIR_TO_OTHER_TITLE + } + + modifier = { + add = -50 + scope:recipient = { + NOT = { is_heir_of = scope:actor } + any_parent = { + any_held_title = { + place_in_line_of_succession = { + target = scope:recipient + value < 5 + } + NOT = { + place_in_line_of_succession = { + target = scope:recipient + value < 2 + } + } + } + } + NOT = { + is_primary_heir_of = scope:actor + } + } + desc = TAKE_THE_VOWS_IN_LINE_TO_OTHER_TITLE + } + + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -50 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -100 + } + + #Dread modifiers + modifier = { + add = intimidated_halved_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_halved_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + } + + # AI will do + + ai_potential = { + is_adult = yes + piety >= major_piety_value + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_targets = { + ai_recipients = courtiers + max = 5 + } + + ai_targets = { + ai_recipients = family + } + + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 72 + kingdom = 24 + empire = 24 + hegemony = 24 + } + + ai_will_do = { + base = 0 + + modifier = { # The AI will always use a Hook + scope:hook = yes + add = 1 + } + + modifier = { # Try to send rivals + add = 100 + scope:actor = { + OR = { + has_relation_rival = scope:recipient + has_relation_nemesis = scope:recipient + } + } + } + + modifier = { # Try to send people who would make poor heirs + add = 50 + scope:recipient = { + OR = { + has_trait = murderer + has_trait = incestuous + has_trait = sodomite + has_trait = cannibal + has_trait = deviant + has_trait = kinslayer + has_trait = adulterer + has_trait = fornicator + has_trait = maimed + has_trait = drunkard + has_trait = hashishiyah + has_trait = flagellant + has_trait = reclusive + num_of_bad_genetic_traits >= 1 + num_sinful_traits >= 2 + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value <= 7 + } + } + } + } + + modifier = { # Try to send people who would make poor heirs + add = 25 + scope:recipient = { + is_adult = yes + calc_true_if = { + amount >= 3 + + diplomacy < 8 + stewardship < 8 + martial < 8 + intrigue < 8 + learning < 8 + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value <= 7 + } + } + } + } + + modifier = { # Sending one of your heirs is almost customary + add = 100 + scope:actor = { + any_child = { + count >= 3 + } + NOT = { + any_child = { + OR = { + has_trait = devoted + has_trait = order_member + } + } + } + } + scope:recipient = { + is_child_of = scope:actor + has_education_martial_trigger = yes + } + } + + modifier = { # Zealous characters generally want to send characters to the Holy Order + add = 50 + scope:actor = { + ai_zeal >= high_positive_ai_value + } + scope:recipient = { + has_education_martial_trigger = yes + } + } + + modifier = { # Greedy characters want to rid their court of potential threats + add = 50 + scope:actor = { + ai_greed >= medium_positive_ai_value + any_child = { } + } + scope:recipient = { + NOT = { + is_child_of = scope:actor + } + any_claim = { + holder ?= scope:actor + } + } + } + + modifier = { # The AI doesn't ask married/betrothed people + factor = 0 + scope:recipient = { + OR = { + exists = betrothed + is_married = yes + } + } + } + + modifier = { # Never ask Primary Heir + factor = 0 + scope:recipient = { + is_primary_heir_of = scope:actor + } + } + + modifier = { # Only care about family + factor = 0 + scope:recipient = { + NOT = { + is_close_or_extended_family_of = scope:actor + } + } + } + } +} + + +#Ask to take the vows for a monastery +#by Linnéa Thimrén & Bianca Savazzi +take_vows_interaction = { + category = interaction_category_vassal + icon = religious + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + #can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + cooldown_against_recipient = { years = 10 } + + desc = take_vows_interaction_desc + + on_decline_summary = take_vows_decline_summary + + greeting = negative + notification_text = REQUEST_VOWS_NOTIFICATION_TEXT + + is_shown = { + scope:recipient = { + is_courtier_of = scope:actor + NOR = { + has_trait = devoted + has_trait = order_member + } + } + NOT = { #Not your bishop + scope:actor = { + any_learning_councillor = { this = scope:recipient } + } + } + scope:actor = { + take_vows_available_trigger = yes # Faith has Monastery order that recipient can be sent to + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + age >= 10 + is_courtier_of = scope:actor + can_take_religious_vows_trigger = yes #Triggers that applies to both Monastery or Holy Order requirements + } + custom_tooltip = { + text = cannot_take_overt_hostile_actions_against_diarch.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + } + + #Use hook + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + cost = { + piety = scope:recipient.ask_to_take_vows_piety_cost + } + + on_send = { + scope:recipient = { + set_variable = { + name = vows_piety_spent + value = ask_to_take_vows_piety_cost + days = 10 + } + } + } + + on_accept = { + scope:actor = { + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + + # Legitimacy loss if you're doing this to your children + if = { + limit = { + scope:recipient = { is_primary_heir_of = scope:actor } + } + add_legitimacy = { + value = minor_legitimacy_loss + multiply = scope:actor.primary_title.tier + } + } + else_if = { + limit = { + scope:recipient = { is_child_of = scope:actor } + has_legitimacy = yes + } + add_legitimacy = { + value = miniscule_legitimacy_loss + multiply = scope:actor.primary_title.tier + } + } + + show_as_tooltip = { + send_child_to_clergy_effect = yes + } + scope:recipient = { + if = { + limit = { + scope:actor.top_liege = { + any_vassal_or_below = { + government_has_flag = government_is_theocracy + primary_title.tier > tier_barony + faith = scope:actor.faith + } + } + } + scope:actor.top_liege = { + random_vassal_or_below = { + limit = { + government_has_flag = government_is_theocracy + primary_title.tier > tier_barony + faith = scope:actor.faith + } + save_scope_as = theocratic_travel_target + } + } + visit_court_of = scope:theocratic_travel_target + } + else_if = { + limit = { + exists = scope:actor.capital_province + } + move_to_pool_at = scope:actor.capital_province + } + kick_from_court_interaction_warning_tooltip_effect = yes + } + trigger_event = holy_order.0002 + if = { + limit = { + exists = cp:councillor_court_chaplain + scope:recipient = { + is_close_family_of = scope:actor + } + } + cp:councillor_court_chaplain = { + add_opinion = { + target = scope:actor + modifier = pious_opinion + opinion = 25 + } + } + } + if = { + limit = { + exists = faith.religious_head + faith.religious_head != scope:actor + scope:recipient = { + is_close_family_of = scope:actor + } + } + faith.religious_head = { + add_opinion = { + target = scope:actor + modifier = pious_opinion + opinion = 10 + } + } + } + if = { + limit = { + house = { + has_house_power_parameter = humility_take_the_vows_bonus + } + } + add_piety_experience = 100 + add_character_modifier = { + modifier = tgp_humility_take_the_vows_bonus_modifier + years = 10 + } + } + } + + hidden_effect = { + scope:recipient = { + remove_variable = vows_piety_spent + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_take_vows.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = asked_me_to_take_vows_opinion + years = 10 + } + } + #Letter event informing the character about the rejection. + scope:actor = { + trigger_event = { + id = religious_interaction.1031 + } + } + + # Refund piety cost + show_as_tooltip = { + scope:actor = { + add_piety_no_experience = { + value = scope:recipient.ask_to_take_vows_piety_cost + } + } + } + # Refund piety cost + hidden_effect = { + if = { + limit = { + scope:recipient = { + has_variable = vows_piety_spent + } + } + scope:actor = { + add_piety_no_experience = { + value = scope:recipient.var:vows_piety_spent + } + } + scope:recipient = { + remove_variable = vows_piety_spent + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_refused_to_take_vows.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = no + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + + modifier = { + scope:hook = yes + add = 50 + desc = SCHEME_WEAK_HOOK_USED + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.25 + desc = AI_SIMPLE_OPINION_REASON + } + modifier = { + add = ai_zeal + ai_zeal < 0 + desc = TAKE_THE_VOWS_SKEPTIC + } + modifier = { + add = { + value = ai_zeal + divide = 2 + } + ai_zeal > 0 + desc = TAKE_THE_VOWS_ZEALOUS + } + modifier = { + add = { + value = ai_greed + multiply = -1 + } + ai_greed > 0 + desc = TAKE_THE_VOWS_GREED + } + modifier = { + add = 50 + scope:recipient = { + age >= 45 + is_visibly_fertile = no + NOT = { + any_heir_title = { + exists = holder + } + } + } + desc = TAKE_THE_VOWS_RETIRE_IN_CHURCH + } + modifier = { + add = 50 + exists = scope:actor.cp:councillor_court_chaplain + scope:recipient = { + OR = { + has_relation_lover = scope:actor.cp:councillor_court_chaplain + has_relation_friend = scope:actor.cp:councillor_court_chaplain + has_secret_relation_lover = scope:actor.cp:councillor_court_chaplain + has_relation_soulmate = scope:actor.cp:councillor_court_chaplain + has_relation_best_friend = scope:actor.cp:councillor_court_chaplain + opinion = { + target = scope:actor.cp:councillor_court_chaplain + value >= very_high_positive_opinion + } + } + } + desc = TAKE_THE_VOWS_INSPIRING_COURT_CHAPLAIN + } + modifier = { + add = 50 + scope:recipient = { + OR = { + any_relation = { + type = friend + is_clergy = yes + } + any_relation = { + type = best_friend + is_clergy = yes + } + any_relation = { + type = lover + is_clergy = yes + } + any_relation = { + type = soulmate + is_clergy = yes + } + any_relation = { + type = crush + is_clergy = yes + } + any_secret = { + type = secret_lover + secret_target = { + is_clergy = yes + } + } + } + } + desc = TAKE_THE_VOWS_INSPIRING_CLERGY + } + modifier = { + add = 50 + scope:recipient = { + has_education_learning_trigger = yes + } + desc = TAKE_THE_VOWS_LEARNING_EDUCATION + } + + modifier = { + add = { + add = 20 + multiply = scope:recipient.num_virtuous_traits + } + scope:recipient.num_virtuous_traits > 0 + desc = TAKE_THE_VOWS_VIRTUOUS + } + + modifier = { + add = { + add = -20 + multiply = scope:recipient.num_sinful_traits + } + scope:recipient.num_sinful_traits > 0 + desc = TAKE_THE_VOWS_SINFUL + } + + #Positive Personality Modifiers + modifier = { # Wants to help people + add = { + value = ai_compassion + divide = 2 + } + scope:recipient = { + ai_compassion > 0 + has_trait = lifestyle_physician + } + desc = TAKE_THE_VOWS_PHYSICIAN_WANTS_TO_HELP + } + modifier = { + add = 1200 + scope:recipient = { + has_trait = reclusive + } + desc = TAKE_THE_VOWS_RECLUSIVE + } + modifier = { + add = 25 + scope:recipient = { + has_trait = curious + } + desc = TAKE_THE_VOWS_CURIOUS + } + modifier = { + add = 50 + scope:recipient = { + has_trait = pensive + } + desc = TAKE_THE_VOWS_PENSIVE + } + modifier = { # Loves books & knowledge! + add = 20 + scope:recipient = { + has_trait = lifestyle_mystic + } + desc = TAKE_THE_VOWS_MYSTIC + } + modifier = { # Loves books & knowledge! + add = 20 + scope:recipient = { + has_trait = scholar + } + desc = TAKE_THE_VOWS_SCHOLAR + } + modifier = { # Loves books & knowledge! + add = 20 + scope:recipient = { + has_trait = theologian + } + desc = TAKE_THE_VOWS_THEOLOGIAN + } + modifier = { # Plants! + add = 20 + scope:recipient = { + has_trait = lifestyle_herbalist + } + desc = TAKE_THE_VOWS_HERBALIST + } + modifier = { + add = 25 + scope:recipient = { + has_trait = temperate + } + desc = TAKE_THE_VOWS_TEMPERATE + } + modifier = { + add = 50 + scope:recipient = { + has_trait = celibate + } + desc = TAKE_THE_VOWS_CELIBATE + } + modifier = { + add = 25 + scope:recipient = { + has_trait = chaste + } + desc = TAKE_THE_VOWS_CHASTE + } + modifier = { + add = 25 + scope:recipient = { + has_trait = content + } + desc = TAKE_THE_VOWS_CONTENT + } + modifier = { + add = 25 + scope:recipient = { + has_trait = humble + } + desc = TAKE_THE_VOWS_HUMBLE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = drunkard + } + desc = TAKE_THE_VOWS_DRUNKARD + } + modifier = { + add = 10 + scope:recipient = { + has_trait = hashishiyah + } + desc = TAKE_THE_VOWS_HASHISHIYAH + } + modifier = { + add = 50 + scope:recipient = { + has_trait = trusting + } + desc = TAKE_THE_VOWS_TRUSTING + } + + #Negative Personality Modifiers + modifier = { + add = -50 + scope:recipient = { + has_trait = rowdy + } + desc = TAKE_THE_VOWS_ROWDY + } + modifier = { + add = -25 + scope:recipient = { + has_trait = bossy + } + desc = TAKE_THE_VOWS_BOSSY + } + modifier = { + add = -20 + scope:recipient = { + has_trait = gluttonous + } + desc = TAKE_THE_VOWS_GLUTTONOUS + } + modifier = { + add = -20 + scope:recipient = { + has_trait = lustful + } + desc = TAKE_THE_VOWS_LUSTFUL + } + modifier = { + add = -500 + scope:recipient = { + has_trait = pregnant + } + desc = TAKE_THE_VOWS_PREGNANT + } + modifier = { + add = -500 + scope:recipient = { + has_trait = ambitious + } + desc = TAKE_THE_VOWS_AMBITIOUS + } + + modifier = { + add = -50 + scope:recipient = { + OR = { + is_married = yes + exists = betrothed + } + } + desc = TAKE_THE_VOWS_MARRIED_OR_BETROTHED + } + + modifier = { + add = -150 + scope:recipient = { + is_primary_heir_of = scope:actor + } + desc = TAKE_THE_VOWS_PRIMARY_HEIR + } + + modifier = { + add = -75 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value = 2 + } + } + desc = TAKE_THE_VOWS_SECOND_HEIR + } + + modifier = { + add = -50 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value = 3 + } + } + desc = TAKE_THE_VOWS_THIRD_HEIR + } + + modifier = { + add = -25 + scope:recipient = { + NOT = { + is_primary_heir_of = scope:actor + } + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value >= 4 + value <= 10 + } + } + desc = TAKE_THE_VOWS_HEIR + } + + modifier = { + add = -100 + scope:recipient = { + NOT = { is_heir_of = scope:actor } + any_heir_title = { + exists = holder + holder != scope:actor + } + NOT = { + is_primary_heir_of = scope:actor + } + } + desc = TAKE_THE_VOWS_HEIR_TO_OTHER_TITLE + } + + modifier = { + add = -50 + scope:recipient = { + NOT = { is_heir_of = scope:actor } + any_parent = { + any_held_title = { + place_in_line_of_succession = { + target = scope:recipient + value < 5 + } + NOT = { + place_in_line_of_succession = { + target = scope:recipient + value < 2 + } + } + } + } + NOT = { + is_primary_heir_of = scope:actor + } + } + desc = TAKE_THE_VOWS_IN_LINE_TO_OTHER_TITLE + } + + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -50 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -100 + } + + #Dread modifiers + modifier = { + add = 25 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = 50 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + # Culture Tradition modifiers + + modifier = { + add = { + value = 25 + if = { + limit = { + scope:recipient = { + is_adult = no + is_child_of = scope:actor + } + } + add = 100 + } + } + scope:actor.culture = { has_cultural_parameter = monastic_expectations } + desc = MONASTIC_EXPECTATIONS_REASON + } + } + + # AI will do + + ai_potential = { + is_adult = yes + piety >= major_piety_value + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_targets = { + ai_recipients = courtiers + max = 5 + } + + ai_targets = { + ai_recipients = children + } + + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 72 + kingdom = 24 + empire = 24 + hegemony = 24 + } + + ai_will_do = { + base = 0 + + modifier = { + add = -50 + scope:actor = { + OR = { + legitimacy_level = 0 + legitimacy_level = 1 + } + } + scope:recipient = { is_primary_heir_of = scope:actor } + } + + modifier = { # The AI will always use a Hook + scope:hook = yes + add = 1 + } + + modifier = { # Try to send rivals + add = 100 + scope:actor = { + OR = { + has_relation_rival = scope:recipient + has_relation_nemesis = scope:recipient + } + } + } + + modifier = { # Try to send people who would make poor heirs + add = 50 + scope:recipient = { + OR = { + has_trait = murderer + has_trait = incestuous + has_trait = sodomite + has_trait = cannibal + has_trait = deviant + has_trait = kinslayer + has_trait = adulterer + has_trait = fornicator + has_trait = maimed + has_trait = drunkard + has_trait = hashishiyah + has_trait = flagellant + has_trait = reclusive + num_of_bad_genetic_traits >= 1 + num_sinful_traits >= 2 + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value <= 7 + } + } + } + } + + modifier = { # Try to send people who would make poor heirs + add = 25 + scope:recipient = { + is_adult = yes + calc_true_if = { + amount >= 3 + + diplomacy < 8 + stewardship < 8 + martial < 8 + intrigue < 8 + learning < 8 + } + scope:actor.primary_title = { + place_in_line_of_succession = { + target = prev + value <= 7 + } + } + } + } + + modifier = { # Sending one of your heirs is almost customary + add = 100 + scope:actor = { + any_child = { + count >= 3 + } + NOT = { + any_child = { + OR = { + has_trait = devoted + has_trait = order_member + } + } + } + } + scope:recipient = { + is_child_of = scope:actor + has_education_learning_trigger = yes + } + } + + modifier = { # Zealous characters generally want to send characters to the clergy + add = 50 + scope:actor = { + ai_zeal >= high_positive_ai_value + } + scope:recipient = { + has_education_learning_trigger = yes + } + } + + modifier = { # Greedy characters want to rid their court of potential threats + add = 50 + scope:actor = { + ai_greed >= medium_positive_ai_value + any_child = { } + } + scope:recipient = { + NOT = { + is_child_of = scope:actor + } + any_claim = { + holder ?= scope:actor + } + } + } + + modifier = { # The AI doesn't ask married/betrothed people + factor = 0 + scope:recipient = { + OR = { + exists = betrothed + is_married = yes + } + } + } + + modifier = { # Never ask Primary Heir + factor = 0 + scope:recipient = { + is_primary_heir_of = scope:actor + } + } + + modifier = { # Only care about family + factor = 0 + scope:recipient = { + NOT = { + is_close_or_extended_family_of = scope:actor + } + } + } + + modifier = { + factor = 0 + scope:recipient.liege ?= { is_ai = no } + } + } +} + +### End Monasticism tenets ### + +######################### +# Temporal Condemnation +# by Petter Vilberg +######################### + +temporal_condemnation_interaction = { + category = interaction_category_religion + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:actor.faith = faith:quranist } + desc = temporal_condemnation_interaction_desc_fasiq + } + desc = temporal_condemnation_interaction_desc + } + } + icon = religious + + is_shown = { + scope:actor != scope:recipient + scope:actor.faith = { + has_doctrine_parameter = temporal_condemnation_enabled + } + scope:recipient = { + liege = scope:actor + } + scope:recipient = { + is_playable_character = yes + } + } + + cooldown = { years = 5 } + + is_valid = { + scope:actor = { + piety >= medium_piety_value + } + custom_description = { + text = temporal_condemnation_learning_requirement + subject = scope:actor + object = scope:recipient + value = religious_legal_pronouncement_learning_requirement + religious_legal_pronouncement_requirements >= 0 + scope:actor = { learning >= 1 } + } + } + + is_valid_showing_failures_only = { + scope:recipient.religion = scope:actor.religion + custom_description = { + text = temporal_condemnation_is_not_sinful + object = scope:recipient + scope:recipient = { + num_sinful_traits = { value > 0 target = scope:actor.faith } + } + } + trigger_if = { + limit = { + scope:recipient.num_sinful_traits > 0 + scope:actor.num_sinful_traits > 0 + } + custom_description = { + text = temporal_condemnation_less_sinful_than_me + object = scope:recipient + scope:actor.num_sinful_traits < scope:recipient.num_sinful_traits + } + } + custom_description = { + text = temporal_condemnation_has_been_condemned + object = scope:recipient + scope:recipient = { + NOT = { + has_character_modifier = temporal_condemnation_modifier + } + } + } + NAND = { + exists = scope:actor.faith.great_holy_war + scope:actor.faith.great_holy_war = { + has_pledged_attacker = scope:recipient + } + } + scope:recipient = { + is_adult = yes + } + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + auto_accept = yes + force_notification = yes + notification_text = temporal_condemnation_interaction.notification + + on_accept = { + scope:actor = { + add_piety = medium_piety_loss + add_opinion = { + target = scope:recipient + modifier = temporal_condemnation_opinion + years = 10 + } + custom_tooltip = temporal_condemnation_revoke_reason + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = temporal_condemnation_interaction.tt + left_icon = scope:recipient + show_as_tooltip = { custom_tooltip = temporal_condemnation_got_revoke_reason } + } + } + stress_impact = { + cynical = minor_stress_impact_gain + } + } + scope:recipient = { + add_character_modifier = { + modifier = temporal_condemnation_modifier + years = 15 + } + add_opinion = { + target = scope:actor + modifier = temporal_condemnation_condemned_me_opinion + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_condemn_sins.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +######################### +# Host Honored Guest +# by Sean Hughes +######################### + +host_honored_guest_interaction = { + icon = religious + category = interaction_category_friendly + + desc = host_honored_guest_interaction_desc + + ai_targets = { + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + cooldown = { years = 1 } + + is_shown = { + scope:recipient != scope:actor + scope:actor = { + is_playable_character = yes + is_adult = yes + faith = { + has_doctrine_parameter = host_honored_guests_active + } + } + } + + is_valid_showing_failures_only = { + # Target faith is Hostile. + custom_description = { + text = host_honored_guest_is_hostile + object = scope:recipient + NOT = { + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value = faith_hostile_level + } + } + } + } + } + # Target faith is Evil. + custom_description = { + text = host_honored_guest_is_evil + object = scope:recipient + NOT = { + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value = faith_evil_level + } + } + } + } + } + # Target is sick + custom_description = { + text = host_honored_guest_is_unwell + object = scope:recipient + scope:recipient = { + is_healthy = yes + } + } + # Target is commanding an army + custom_description = { + text = host_honored_guest_is_commanding + object = scope:recipient + scope:recipient = { + is_commanding_army = no + } + } + # Target is imprisoned + custom_description = { + text = host_honored_guest_is_imprisoned + object = scope:recipient + scope:recipient = { + is_imprisoned = no + } + } + # At war with target + custom_description = { + text = host_honored_guest_is_at_war + object = scope:recipient + scope:recipient = { + NOT = { is_at_war_with = scope:actor } + } + } + # Is my courtier + custom_description = { + text = host_honored_guest_is_my_courtier + object = scope:recipient + scope:recipient = { + NOT = { is_courtier_of = scope:actor } + } + } + } + + auto_accept = yes + force_notification = yes + notification_text = host_honored_guest_interaction.notification + #answer_accept_key = host_honored_guest_interaction.response + + on_accept = { + scope:actor = { + stress_impact = { + cynical = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + } + scope:recipient = { + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = host_honored_guest_interaction_recipient.notification + left_icon = scope:actor + } + } + # Spend piety based on recipient's tier. + if = { + limit = { + highest_held_title_tier <= tier_county + } + scope:actor = { + add_piety = minor_piety_loss + } + } + else_if = { + limit = { + highest_held_title_tier = tier_duchy + } + scope:actor = { + add_piety = medium_piety_loss + } + } + else_if = { + limit = { + highest_held_title_tier = tier_kingdom + } + scope:actor = { + add_piety = major_piety_loss + } + } + else_if = { + limit = { + highest_held_title_tier = tier_empire + } + scope:actor = { + add_piety = massive_piety_loss + } + } + + # Increase opinion of recipient. + add_opinion = { + modifier = pleased_opinion + target = scope:actor + opinion = { + value = 20 + + # Zealous characters more likely to appreciate the religious ceremony (if of your faith) + if = { + limit = { + has_trait = zealous + faith = scope:actor.faith + } + add = 10 + } + # Cynical characters, or characters who do not believe in the hospitality ritual, are less likely to be appreciative. + else_if = { + limit = { + OR = { + has_trait = cynical + NOT = { + faith = { + has_doctrine_parameter = host_honored_guests_active + } + } + } + } + subtract = 10 + } + + # But arrogant characters like it more regardless. + if = { + limit = { + has_trait = arrogant + } + add = 10 + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_gain + DESC = clan_unity_honored_guest.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_potential = { + piety >= major_piety_value + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:recipient = { + OR = { + is_powerful_vassal_of = scope:actor + liege = root + } + opinion = { + target = scope:actor + value = {-15 0 } + } + } + } + + modifier = { + add = 75 + scope:recipient = { + OR = { + is_powerful_vassal_of = scope:actor + liege = root + } + opinion = { + target = scope:actor + value = { 0 20 } + } + } + } + + modifier = { + add = 40 + scope:recipient = { + OR = { + is_powerful_vassal_of = scope:actor + liege = root + } + opinion = { + target = scope:actor + value = { 20 60 } + } + } + } + + modifier = { + add = 10 + scope:recipient = { + OR = { + is_powerful_vassal_of = scope:actor + liege = root + } + opinion = { + target = scope:actor + value = { 60 100 } + } + } + } + } +} + +# Spiritual Head of Faith Actions + +hof_ask_for_gold_interaction = { + icon = icon_gold + category = interaction_category_religion + + desc = hof_ask_for_gold_interaction_desc + + ai_targets = { + ai_recipients = head_of_faith + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 24 + kingdom = 6 + empire = 6 + hegemony = 6 + } + + cooldown_against_recipient = { years = 3 } + + is_shown = { + scope:recipient != scope:actor + scope:actor.faith = { + religious_head = scope:recipient + has_doctrine = doctrine_spiritual_head + } + scope:actor = { + is_playable_character = yes + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + gold >= scope:actor.head_of_faith_gold_value + } + scope:actor = { + piety >= major_piety_value + custom_description = { + text = "hof_ask_for_gold_excommunicated" + NOT = { has_trait = excommunicated } + } + NOT = { + is_at_war_with = scope:recipient + } + } + scope:actor = { + custom_description = { + text = "hof_interaction_unreformed_faith" + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + } + } + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + ai_accept = { + base = -40 + + compare_modifier = { + value = scope:recipient.gold + trigger = { + scope:recipient.gold > 2500 + } + offset = -2500 + multiplier = 0.1 + max = 50 + desc = ASK_FOR_GOLD_OVERFLOWING_COFFERS + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.5 + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Attacking a co-religionist + add = -50 + desc = I_AM_ATTACKING_A_CORELIGIONIST + scope:actor = { + is_at_war = yes + any_character_war = { + primary_attacker = scope:actor + primary_defender.faith = scope:actor.faith + primary_defender = { + NOT = { + has_trait = excommunicated + } + } + } + } + } + + modifier = { # Offensive holy war/excommunication war + add = 30 + desc = I_AM_WAGING_AN_OFFENSIVE_HOLY_OR_EXCOMMUNICATION_WAR + scope:actor = { + is_at_war = yes + any_character_war = { + is_attacker = scope:actor + OR = { + using_non_ghw_holy_war_cb_trigger = yes + using_cb = excommunication_war + } + } + } + } + + modifier = { # Defensive Holy War + add = 50 + desc = I_AM_DEFENDING_AGAINST_A_HOLY_WAR + scope:actor = { + is_at_war = yes + any_character_war = { + is_defender = scope:actor + using_non_ghw_holy_war_cb_trigger = yes + } + } + } + + modifier = { # HoF wants the money for themselves! + add = -20 + desc = THEY_ARE_GREEDY + scope:recipient = { + ai_greed >= high_positive_greed + } + } + + modifier = { # I am rich already + add = -25 + desc = I_AM_RICH + scope:actor = { + gold >= scope:actor.medium_treasury_value + NOT = { + gold >= scope:actor.major_treasury_value + } + } + } + + modifier = { # I am rich already + add = -50 + desc = I_AM_RICH + scope:actor = { + gold >= scope:actor.major_treasury_value + NOT = { + gold >= scope:actor.massive_treasury_value + } + } + } + + modifier = { # I am very rich already + add = -75 + desc = I_AM_RICH + scope:actor = { + gold >= scope:actor.massive_treasury_value + } + } + + modifier = { # I am Adulterer/Fornicator + add = -25 + desc = I_AM_ADULTERER + scope:actor = { + OR = { + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = fornicator GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = scope:actor } + } + } + } + } + + modifier = { # I am a Murderer + add = -50 + desc = I_AM_MURDERER + scope:actor = { + has_trait = murderer + } + } + + modifier = { # I am Incestous + add = -50 + desc = I_AM_INCESTOUS + scope:actor = { + NOT = { scope:recipient = { faith = { has_doctrine = doctrine_consanguinity_unrestricted } } } + has_trait = incestuous + } + } + + modifier = { # I am a Kinslayer + add = -50 + desc = I_AM_A_KINSLAYER + scope:actor = { + OR = { + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_1 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_2 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_3 GENDER_CHARACTER = scope:actor } + } + } + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_SAVIOR + add = 15 + scope:actor = { + has_trait = savior + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_DIVINE_BLOOD + add = 5 + scope:actor = { + has_trait = divine_blood + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_PARAGON + add = 15 + scope:actor = { + has_trait = paragon + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_CONSECRATED_BLOOD + add = 5 + scope:actor = { + has_trait = consecrated_blood + } + } + + modifier = { # You are of the same dynasty as the Head of Faith + add = 5 + desc = YOU_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + dynasty = scope:actor.dynasty + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:secondary_recipient.dynasty + } + } + } + + modifier = { # You are of the same house as the Head of Faith + add = 10 + desc = YOU_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + house = scope:actor.house + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:secondary_recipient.house + } + } + } + + modifier = { # Related to the Head of Faith + add = 10 + desc = YOU_ARE_MY_RELATIVE + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + } + NOT = { is_child_of = scope:actor } + } + } + + modifier = { # Parent of the Head of Faith + add = 25 + desc = YOU_ARE_MY_PARENT + scope:recipient = { + is_child_of = scope:actor + } + } + + modifier = { # Friend of the Head of Faith + add = 25 + desc = WE_ARE_FRIENDS + scope:recipient = { + has_relation_friend = scope:actor + } + } + + modifier = { # Best Friend of the Head of Faith + add = 50 + desc = WE_ARE_BEST_FRIENDS + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + + modifier = { # Lover of the Head of Faith + add = 10 + desc = WE_ARE_LOVERS + scope:recipient = { + has_relation_lover = scope:actor + } + } + + modifier = { # Rival of the Head of Faith + add = -100 + desc = WE_ARE_RIVALS + scope:recipient = { + has_relation_rival = scope:actor + } + } + + modifier = { # Nemesis of the Head of Faith + add = -500 + desc = WE_ARE_NEMESES + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + + modifier = { + add = { + add = 10 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = I_AM_VIRTUOUS + } + + modifier = { + add = { + add = 5 + multiply = scope:actor.piety_level + } + scope:actor.piety_level > 1 + desc = I_AM_PIOUS + } + + modifier = { + add = { + add = 5 + multiply = scope:actor.piety_level + } + scope:actor.piety_level > 2 + scope:actor.gold < 0 + desc = I_AM_PIOUS_AND_BROKE + } + + modifier = { + add = { + add = -10 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = I_AM_SINFUL + } + + modifier = { + add = 25 + scope:influence_send_option = yes + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + modifier = { + add = -25 + desc = BASE_RELUCTANCE + trigger = { + has_game_rule = hard_difficulty + scope:actor = { + is_ai = no + } + } + } + + modifier = { + add = -75 + desc = BASE_RELUCTANCE + trigger = { + has_game_rule = very_hard_difficulty + scope:actor = { + is_ai = no + } + } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + } + } + + send_option = { + is_shown = { + scope:actor != scope:recipient + } + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + hof_ask_for_gold_interaction_effect = yes + + scope:actor = { + trigger_event = religious_interaction.3 + } + } + + on_decline = { + scope:actor = { + trigger_event = religious_interaction.32 + } + } + + ai_potential = { + is_playable_character = yes + piety >= major_piety_value + NOT = { has_trait = excommunicated } + exists = faith.religious_head + } + + ai_will_do = { + base = 0 + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:hook = yes + add = -1 + } + + modifier = { # Counts get a bad 'exchange rate' due to their low income. + highest_held_title_tier < tier_county + scope:recipient.gold < 3000 + add = -50 + } + modifier = { # Dukes are also somewhat reluctant to request gold if not independent. + highest_held_title_tier = tier_duchy + top_liege != this + scope:recipient.gold < 3000 + add = -25 + } + + modifier = { # I am low on money while at war + add = 300 + scope:actor = { + is_at_war = yes + gold < medium_gold_value + } + } + modifier = { # I am in debt + add = 300 + scope:actor = { + gold < 0 + } + } + + modifier = { # Piety to burn, and no reason to keep it. + add = 25 + scope:actor = { + piety > massive_piety_value + NOR = { + has_character_modifier = vow_of_poverty_modifier + has_trait = generous + } + } + } + modifier = { # Or when greedy + add = scope:actor.ai_greed + scope:actor = { + ai_greed > 0 + } + } + + modifier = { # If the Pope has overflowing coffers, it'd be rather impious to NOT ask him to give some to a fellow, poor and struggling christian! + add = 50 + scope:actor = { + piety > major_piety_value + } + scope:recipient.gold >= 3000 + } + + modifier = { + add = 100 + scope:actor = { + ai_has_economical_boom_personality = yes + } + scope:recipient.gold >= 1000 + } + + modifier = { + add = 100 + scope:actor = { + ai_has_warlike_personality = yes + war_chest_gold < war_chest_gold_maximum + } + scope:recipient.gold >= 1000 + } + + modifier = { #That's _my_ piety + add = -100 + scope:actor = { ai_has_builder_or_pious_builder_personality = yes } + } + + modifier = { #Go on! Git! + add = -100 + scope:actor = { government_has_flag = government_is_mandala } + } + } +} + +hof_ask_for_claim_interaction = { + category = interaction_category_diplomacy + icon = religious_claim + interface_priority = 35 + + desc = hof_ask_for_claim_interaction_desc + target_type = title + target_filter = secondary_recipient_domain_titles + redirect = { + if = { + limit = { + exists = scope:actor.faith.religious_head + } + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:actor.faith.religious_head = { + save_scope_as = recipient + } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + tier >= tier_county + is_noble_family_title = no + } + trigger_if = { # Admin can't request claim on other admin titles, only the top liege's primary title is up for grabs + limit = { + scope:secondary_recipient = { + government_allows = administrative + top_liege = this + } + scope:actor = { + government_allows = administrative + } + } + scope:target = { + this = scope:secondary_recipient.primary_title + } + } + } + + is_shown = { + exists = scope:actor.faith.religious_head + scope:actor.faith = scope:secondary_recipient.faith + NOR = { + scope:actor = scope:secondary_recipient + scope:secondary_recipient = scope:recipient + } + exists = scope:actor.faith.religious_head + scope:actor.faith = { + has_doctrine = doctrine_spiritual_head + } + scope:secondary_recipient = { + is_landed_or_landless_administrative = yes + primary_title = { tier >= tier_county } + NOT = { government_has_flag = government_is_holy_order } + } + } + + is_valid_showing_failures_only = { + trigger_if = { # Can't request on titles you already have a pressed claim on + limit = { + exists = scope:target + scope:actor = { + has_strong_claim_on = scope:target + } + } + custom_description = { + text = "hof_ask_for_claim_has_pressed_claim_already" + always = no + } + } + trigger_if = { # Can't request claims on baronies + limit = { + OR = { + scope:recipient.highest_held_title_tier = tier_barony + AND = { + exists = scope:target + scope:target = { + tier = tier_barony + } + } + } + } + custom_description = { + text = "hof_ask_for_claim_no_baronies" + always = no + } + } + trigger_if = { # Can't request claims on theocratic lessees or theocracies (= Prince-Bishops) + limit = { + scope:secondary_recipient = { + government_has_flag = government_is_theocracy + } + } + custom_description = { + text = "hof_ask_for_claim_theocratic_lessee" + always = no + } + } + trigger_if = { # Admin can't request claims on other admin titles + limit = { + scope:secondary_recipient = { + government_allows = administrative + NOT = { top_liege = this } + } + scope:actor = { + government_allows = administrative + } + } + custom_description = { + text = "hof_ask_for_claim_on_admin_titles" + always = no + } + } + scope:actor = { # Variable piety cost depending on tier + trigger_if = { + limit = { + exists = scope:target + } + piety >= claim_piety_value + } + custom_description = { + text = "hof_ask_for_claim_excommunicated" + NOT = { has_trait = excommunicated } + } + NOT = { + is_at_war_with = scope:recipient + } + } + scope:actor = { + custom_description = { + text = "hof_interaction_unreformed_faith" + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + } + scope:secondary_recipient = { NOT = { has_strong_hook = scope:actor } } + # Ceremonial Monarchs cannot do this + scope:actor = { tgp_is_ceremonial_liege_trigger = no } + } + + cost = { + influence = { + value = 0 + if = { + limit = { scope:influence_send_option = yes } + add = scope:actor.medium_influence_value + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + ai_recipients = liege + } + ai_frequency_by_tier = { + barony = 0 + county = 108 + duchy = 36 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_potential = { + is_playable_character = yes + OR = { + ai_greed >= 50 + ai_has_warlike_personality = yes + } + piety >= major_piety_value + NOT = { has_trait = excommunicated } + exists = faith.religious_head + } + + ai_will_do = { + base = 0 + + modifier = { + add = scope:actor.ai_greed + } + + modifier = { + add = scope:target.tier + } + + modifier = { + add = 500 + has_variable = conqueror + NOR = { + has_relation_friend = scope:secondary_recipient + has_relation_lover = scope:secondary_recipient + } + } + + modifier = { + add = -100 + scope:actor = { + OR = { + has_relation_friend = scope:secondary_recipient + has_relation_lover = scope:secondary_recipient + opinion = { + target = scope:secondary_recipient + value >= high_positive_opinion + } + } + } + } + + modifier = { + factor = 0 + NOT = { + scope:target = { + is_neighbor_to_realm = scope:actor + } + } + } + } + + ai_accept = { + base = 0 # Should be 0 for all interactions + + modifier = { + scope:claim_hook ?= yes + add = 100 + desc = SCHEME_WEAK_HOOK_USED + } + + modifier = { + add = -100 + desc = BASE_RELUCTANCE + } + + modifier = { # Very difficult to claim Kingdoms/Empires when already King/Emperor + add = -100 + desc = I_AM_ALREADY_HIGH_TIER + scope:actor.primary_title ?= { + tier >= tier_kingdom + } + scope:target = { + tier >= tier_kingdom + } + } + + modifier = { # Characters with a pressed claim on a kingdom or empire already has a reduced chance of getting a claim on a kingdom or empire + add = -50 + desc = I_ALREADY_HAVE_A_KINGDOM_OR_EMPIRE_CLAIM + scope:actor = { + any_claim = { + pressed = yes + tier >= tier_kingdom + } + } + scope:target = { + tier >= tier_kingdom + } + } + + opinion_modifier = { # More likely if Recipient likes Actor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + modifier = { # Unlikely if recipient likes Secondary Recipient + desc = AI_OPINION_RECIPIENT_REASON + add = { + if = { + limit = { + scope:recipient != scope:secondary_recipient + } + subtract = "scope:recipient.opinion(scope:secondary_recipient)" + } + } + } + + modifier = { # Less likely the lower their tier is compared to you + add = { + add = -10 + if = { + limit = { + scope:actor = { + tier_difference = { + target = scope:secondary_recipient + value >= 2 + } + } + } + add = -10 + } + if = { + limit = { + scope:actor = { + tier_difference = { + target = scope:secondary_recipient + value >= 3 + } + } + } + add = -10 + } + } + desc = THEY_ARE_LOWER_TIER + scope:actor = { + tier_difference = { + target = scope:secondary_recipient + value >= 1 + } + } + } + + modifier = { # Penalty for asking claims on your own vassals + add = -50 + desc = THEY_ARE_YOUR_VASSAL + scope:actor = { + any_vassal_or_below = { + this = scope:secondary_recipient + } + } + } + + modifier = { # Bonus for adults to ask on children + add = 25 + desc = THEY_ARE_A_CHILD + scope:secondary_recipient = { + is_adult = no + } + scope:actor = { + is_adult = yes + } + } + + modifier = { # Penalty for children to ask on adults + add = -25 + desc = I_AM_A_CHILD + scope:secondary_recipient = { + is_adult = yes + } + scope:actor = { + is_adult = no + } + } + + modifier = { # Bonus for men if a woman under male preference + add = 15 + desc = THEY_ARE_FEMALE_WHEN_MALE_IS_PREFERRED + scope:secondary_recipient = { + is_adult = yes + is_female = yes + } + scope:actor = { + is_adult = yes + is_female = no + faith = { + has_doctrine = doctrine_gender_male_dominated + } + } + } + + modifier = { # Bonus for women if a man under female preference + add = 15 + desc = THEY_ARE_MALE_WHEN_FEMALE_IS_PREFERRED + scope:secondary_recipient = { + is_adult = yes + is_female = no + } + scope:actor = { + is_adult = yes + is_female = yes + faith = { + has_doctrine = doctrine_gender_female_dominated + } + } + } + + modifier = { # Penalty for women to ask claims on men under male preference + add = -15 + desc = I_AM_FEMALE_WHEN_MALE_IS_PREFERRED + scope:actor = { + is_adult = yes + is_female = yes + faith = { + has_doctrine = doctrine_gender_male_dominated + } + } + scope:secondary_recipient = { + is_adult = yes + is_female = no + } + } + + modifier = { # Penalty for men to ask claims on women under female preference + add = -15 + desc = I_AM_MALE_WHEN_FEMALE_IS_PREFERRED + scope:actor = { + is_adult = yes + is_female = no + faith = { + has_doctrine = doctrine_gender_female_dominated + } + } + scope:secondary_recipient = { + is_adult = yes + is_female = yes + } + } + + modifier = { # They are Excommunicated + add = 25 + desc = THEY_ARE_EXCOMMUNICATED + scope:secondary_recipient = { + has_trait = excommunicated + } + } + + modifier = { # I am Adulterer/Fornicator + add = -25 + desc = I_AM_ADULTERER + scope:actor = { + OR = { + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = fornicator GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = scope:actor } + } + } + } + } + + modifier = { # They are Adulterer/Fornicator + add = 15 + desc = THEY_ARE_ADULTERER + scope:secondary_recipient = { + OR = { + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = fornicator GENDER_CHARACTER = scope:secondary_recipient } + } + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = scope:secondary_recipient } + } + } + } + } + + modifier = { # I am Incestous + add = -50 + desc = I_AM_INCESTOUS + scope:actor = { + NOT = { scope:recipient = { faith = { has_doctrine = doctrine_consanguinity_unrestricted } } } + has_trait = incestuous + } + } + + modifier = { # I am a Murderer + add = -50 + desc = I_AM_MURDERER + scope:actor = { + has_trait = murderer + } + } + + modifier = { # They are a Murderer + add = 15 + desc = THEY_ARE_MURDERER + scope:secondary_recipient = { + has_trait = murderer + } + } + + modifier = { # They are Incestous + add = 15 + desc = THEY_ARE_INCESTOUS + scope:secondary_recipient = { + NOT = { scope:recipient = { faith = { has_doctrine = doctrine_consanguinity_unrestricted } } } + has_trait = incestuous + } + } + + modifier = { # I am a Kinslayer + add = -50 + desc = I_AM_A_KINSLAYER + scope:actor = { + OR = { + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_1 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_2 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_3 GENDER_CHARACTER = scope:actor } + } + } + } + } + + modifier = { # They are a Kinslayer + add = 15 + desc = THEY_ARE_A_KINSLAYER + scope:secondary_recipient = { + OR = { + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_1 GENDER_CHARACTER = scope:secondary_recipient } + } + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_2 GENDER_CHARACTER = scope:secondary_recipient } + } + AND = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_3 GENDER_CHARACTER = scope:secondary_recipient } + } + } + } + } + + modifier = { # They are of the same dynasty as the Head of Faith + add = -50 + desc = THEY_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + dynasty = scope:secondary_recipient.dynasty + NOR = { + house = scope:secondary_recipient.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:actor.dynasty + } + } + } + + modifier = { # You are of the same dynasty as the Head of Faith + add = 10 + desc = YOU_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + dynasty = scope:actor.dynasty + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:secondary_recipient.dynasty + } + } + } + + modifier = { # They are of the same house as the Head of Faith + add = -50 + desc = THEY_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + house = scope:secondary_recipient.house + NOR = { + house = scope:actor.house + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:actor.house + } + } + } + + modifier = { # You are of the same house as the Head of Faith + add = 10 + desc = YOU_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + house = scope:actor.house + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:secondary_recipient.house + } + } + } + + modifier = { # Related to the Head of Faith + add = 25 + desc = YOU_ARE_MY_RELATIVE + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + } + NOT = { is_child_of = scope:actor } + } + } + + modifier = { # Parent of the Head of Faith + add = 50 + desc = YOU_ARE_MY_PARENT + scope:recipient = { + is_child_of = scope:actor + } + } + + modifier = { # Friend of the Head of Faith + add = 15 + desc = WE_ARE_FRIENDS + scope:recipient = { + has_relation_friend = scope:actor + } + } + + modifier = { # Best Friend of the Head of Faith + add = 20 + desc = WE_ARE_BEST_FRIENDS + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + + modifier = { # Lover of the Head of Faith + add = 10 + desc = WE_ARE_LOVERS + scope:recipient = { + has_relation_lover = scope:actor + } + } + + modifier = { # Rival of the Head of Faith + add = -100 + desc = WE_ARE_RIVALS + scope:recipient = { + has_relation_rival = scope:actor + } + } + + modifier = { # Nemesis of the Head of Faith + add = -500 + desc = WE_ARE_NEMESES + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + + modifier = { + add = { + add = 5 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = I_AM_VIRTUOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:secondary_recipient.num_virtuous_traits + } + scope:secondary_recipient.num_virtuous_traits > 0 + desc = THEY_ARE_VIRTUOUS + } + + modifier = { + add = { + add = -20 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = I_AM_SINFUL + } + + modifier = { + add = { + add = 10 + multiply = scope:secondary_recipient.num_sinful_traits + } + scope:secondary_recipient.num_sinful_traits > 0 + desc = THEY_ARE_SINFUL + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_SAVIOR + add = 15 + scope:actor = { + has_trait = savior + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_DIVINE_BLOOD + add = 5 + scope:actor = { + has_trait = divine_blood + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_PARAGON + add = 15 + scope:actor = { + has_trait = paragon + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_CONSECRATED_BLOOD + add = 5 + scope:actor = { + has_trait = consecrated_blood + } + } + modifier = { + add = 25 + scope:influence_send_option = yes + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:claim_hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + send_option = { # EP3 Influence + is_shown = { # Actor must have a government that uses influence + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + # Actor has enough influence + scope:actor = { influence >= medium_influence_value } + # Both characters are within the same top realm + custom_tooltip = { + text = not_same_realm_tt + scope:recipient.top_liege = scope:actor.top_liege + } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + send_option = { + is_shown = { + scope:actor != scope:recipient + } + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = claim_hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + hof_ask_for_claim_interaction_effect = yes + scope:secondary_recipient = { + trigger_event = religious_interaction.5 + } + scope:actor = { + trigger_event = religious_interaction.4 + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:secondary_recipient + VALUE = minor_unity_loss + DESC = clan_unity_granted_claim.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + scope:actor = { + trigger_event = religious_interaction.42 + } + } +} + +#This interaction is referenced in code! If it's renamed you have to ping a coder +hof_redirect_great_holy_war_interaction = { + hidden = yes + + target_type = title + target_filter = secondary_recipient_de_jure_titles + redirect = { + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:actor.faith.religious_head = { + save_scope_as = recipient + } + } + + auto_accept = yes + + is_shown = { + #exists = scope:actor.faith.religious_head #Called by Autonomous Faiths too. + exists = scope:actor.faith.great_holy_war + scope:actor.faith = { is_hostile_enough_for_holy_war_trigger = { FAITH = scope:secondary_recipient.faith } } + scope:secondary_recipient = { top_liege = this } + NOT = { exists = scope:actor.faith.great_holy_war.ghw_war } + scope:target != scope:actor.faith.great_holy_war.ghw_target_title #Do not show the title already targeted in the list. + } + + can_be_picked_title = { + scope:target.tier = tier_kingdom + scope:target != scope:actor.faith.great_holy_war.ghw_target_title #Do not show the title already targeted in the list. + } + + is_valid_showing_failures_only = { + scope:actor = { piety >= faith.great_holy_war.var:redirect_cost } + scope:actor.faith.great_holy_war = { days_until_ghw_launch >= 100 } #No last minute changes. + } + + has_valid_target_showing_failures_only = { + exists = scope:target + scope:target.tier = tier_kingdom + scope:target != scope:actor.faith.great_holy_war.ghw_target_title #Do not show the title already targeted in the list. + } + + cost = { + piety = scope:actor.faith.great_holy_war.var:redirect_cost + } + + on_accept = { + scope:actor.faith.great_holy_war = { + #Toast for attackers + every_pledged_attacker = { + limit = { + is_ai = no + } + send_interface_toast = { + type = event_toast_effect_good + title = hof_redirected_ghw.0001.desc + left_icon = scope:actor + right_icon = scope:secondary_recipient + } + } + #Event for former defenders. + every_pledged_defender = { + limit = { + is_ai = no + } + add_to_temporary_list = former_defenders + } + } + scope:actor = { + faith.great_holy_war = { + save_scope_as = the_ghw + set_great_holy_war_target = { target_character = scope:secondary_recipient target_title = scope:target } + #Old defenders that are no longer in the area are notified. + every_in_list = { + list = former_defenders + limit = { + is_ai = no + NOT = { + scope:actor.faith.great_holy_war = { has_pledged_defender = prev } + } + } + trigger_event = great_holy_war.0081 + } + #New defenders are notified. + every_pledged_defender = { + limit = { + is_ai = no + } + trigger_event = { id = great_holy_war.0082 } + } + change_variable = { + name = redirect_cost + multiply = 2 + } + set_variable = { + name = last_redirector + value = scope:actor + } + } + hidden_effect = { + scope:actor.faith = { save_scope_as = the_faith } + scope:target = { save_scope_as = target_kingdom } + scope:secondary_recipient = { + save_scope_as = target_character + faith = { save_scope_as = target_faith } + } + every_ruler = { #Defenders Pledge to the Crusade again. (AI only) + limit = { + faith = scope:target_character.faith + is_ai = yes + is_playable_character = yes + highest_held_title_tier >= tier_county + NOT = { + scope:actor.faith.great_holy_war = { has_pledged_defender = prev } + } + } + trigger_event = { id = great_holy_war.0021 days = { 25 150 } } #AI counterpledging. Unlike attackers, defenders should be selected much faster during the preparation phase and then stop. + } + scope:target_character = { + faith = { + every_faith_holy_order = { + trigger_event = { id = great_holy_war.0091 days = { 25 60 } } #Holy order counterpledging + } + } + } + scope:actor.faith.great_holy_war = { #Recalculate Recipient. + faith = { save_scope_as = the_faith } + ghw_target_title = { save_scope_as = target_kingdom } + if = { #If Pope died in the meantime. + limit = { + OR = { + NOT = { + exists = scope:the_faith.great_holy_war.ghw_war_declarer + } + NOT = { + scope:the_faith.great_holy_war.ghw_war_declarer = { is_alive = yes } + } + } + } + scope:the_faith = { ghw_set_new_war_declarer_effect = yes } + } + scope:the_faith.great_holy_war.ghw_war_declarer = { save_scope_as = ghw_sponsor } + #Check and set sponsor if needed. + undirected_ghw_recipient_selection_effect = yes + } + } + } + } + + ai_will_do = { + base = 0 + } +} + +select_ghw_beneficiary_interaction = { + category = interaction_category_religion + icon = religious + + + populate_recipient_list = { + scope:recipient = { + #Any member of your own house. + house = { + every_house_member = { + limit = { + # Cannot select them self as beneficiary + this != scope:recipient + } + add_to_list = characters + } + } + #Any nearby family member who is of your dynasty, even if they're a separate house. + every_close_or_extended_family_member = { + limit = { + dynasty = scope:recipient.dynasty + house != scope:recipient.house + } + add_to_list = characters + } + #And then any landless heads of minor houses in your dynasty. + dynasty = { + every_dynasty_member = { + limit = { + this = this.house.house_head + NOR = { + this.house = scope:recipient.house + any_close_or_extended_family_member = { this = scope:recipient } + } + is_ruler = no + } + add_to_list = characters + } + } + # If you're a laamp, add you too. + if = { + limit = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + add_to_list = characters + } + } + } + + auto_accept = yes + + is_shown = { + exists = scope:actor.faith.great_holy_war + scope:actor = { + exists = faith.great_holy_war + this = scope:recipient + is_pledged_ghw_attacker = yes + } + scope:actor != scope:recipient.faith.great_holy_war.ghw_war_declarer #Not for the Caliph himself. + } + + can_be_picked = { + is_adult = yes + is_ruler = no + faith = scope:actor.faith + custom_tooltip = { + text = ghw_heir_to_a_title + NOT = { + any_heir_title = {} # Not heir to anything + } + } + custom_tooltip = { + text = ghw_married_to_a_ruler + OR = { #Either not married, or not married to a ruler. + is_married = no + NOT = { + any_spouse = { + is_ruler = yes + } + } + } + } + custom_tooltip = { + text = ghw_devoted_to_their_faith + NOR = { # not dedicated to a religious career + has_trait = devoted + has_trait = order_member + } + } + } + + has_valid_target_showing_failures_only = { + scope:secondary_recipient = { + NOR = { + has_trait = excommunicated + has_trait = incapable + has_trait = devoted + has_trait_with_flag = debilitating_illness + custom_description = { + text = "ghw_recipient_must_not_be_realm_priest" + faith = { + has_doctrine = doctrine_theocracy_temporal + } + has_council_position = councillor_court_chaplain + } + } + faith = scope:actor.faith + is_adult = yes + trigger_if = { + limit = { + NOT = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + } + is_ruler = no + } + NOT = { + any_heir_title = {} # Not heir to anything + } + OR = { #Either not married, or not married to a ruler. + is_married = no + NOT = { + any_spouse = { + is_ruler = yes + } + } + } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_neutral + title = select_ghw_beneficiary_interaction_notification + + right_icon = scope:secondary_recipient + + set_beneficiary = scope:secondary_recipient + } + } + } + ai_will_do = { + base = 0 #Assigned directly by event for the AI. + } +} + +sun_trial_interaction = { + interface_priority = 30 + icon = religious + + category = interaction_category_prison + + is_shown = { + scope:actor = { faith = { has_doctrine_parameter = trial_by_sun_active } } + scope:recipient = { + is_imprisoned_by = scope:actor + is_adult = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + has_imprisonment_reason = scope:recipient + } + } + + + on_accept = { + scope:actor = { + save_scope_as = imprisoner + + sun_trial_interaction_piety_effect = yes + } + + scope:recipient = { + save_scope_as = prisoner + show_as_tooltip = { + #Prisoner has a random outcome (toast sent through prisoner's events) + random_list = { + desc = outcome_in_a_few_days + 50 = { #they die without consequences! (must match event religious_interaction.2100) + sun_trial_death_modifier = yes + desc = sun_trial_interaction.success.tt + sun_trial_death_effect = yes + } + 50 = { #they are freed and super cool! (must match event religious_interaction.2100) + sun_trial_survival_modifier = yes + desc = sun_trial_interaction.failure.tt + sun_trial_survival_effect = yes + } + } + } + hidden_effect = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = scope:actor + has_relation_potential_rival = scope:actor + } + } + set_relation_potential_rival = scope:actor + } + } + #Event for outcome + trigger_event = { + id = religious_interaction.2100 + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = major_unity_loss + DESC = clan_unity_sun_trial.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = yes +} + +######################### +# Literalism tenets +# by Ewan Cowhig Croft +######################### + +#Engage in literalist debate. +#by Ewan Cowhig Croft +literalist_debate_interaction = { + icon = religious + category = interaction_category_religion + desc = literalist_debate_interaction_desc + + is_shown = { + scope:actor != scope:recipient + scope:actor.faith = { + has_doctrine_parameter = literalist_debate_enabled + } + scope:recipient = { + is_playable_character = yes + OR = { + liege = scope:actor #You may debate direct vassals. + liege = scope:actor.liege #You may debate vassals with whom you share a liege. + scope:actor.liege = scope:recipient #You may debate your direct liege. + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_available_adult = yes + NOT = { + is_at_war_with = scope:recipient + } + } + scope:recipient = { + faith = scope:actor.faith + is_available_adult = yes + NOT = { has_strong_hook = scope:actor } + } + custom_description = { + text = literalist_debate_interaction_has_been_debated + object = scope:recipient + scope:recipient = { + NOT = { has_character_modifier = used_literalist_debate_modifier } #To prevent back and forth & back-to-back challenges + NOT = { has_character_modifier = literally_debated_modifier } + } + } + custom_description = { + text = literalist_debate_timing + scope:actor = { + NOT = { has_character_modifier = used_literalist_debate_modifier } + } + } + } + + auto_accept = yes + + on_accept = { + hidden_effect = { + scope:actor = { + add_character_modifier = { + modifier = used_literalist_debate_modifier + years = 2 + } + } + scope:recipient = { + trigger_event = { id = religious_interaction.2400 } + add_character_modifier = { + modifier = literally_debated_modifier + years = 10 + } + } + } + custom_tooltip = literalist_debate_interaction.tt_modifiers + scope:actor = { + stress_impact = { + cynical = minor_stress_impact_gain + } + custom_tooltip = literalist_debate_interaction.tt_winnings_actor + } + scope:recipient = { + custom_tooltip = literalist_debate_interaction.tt_winnings_recipient + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_literalist_debate.desc + REVERSE_NON_HOUSE_TARGET = no + } + } +} + +attempt_conversion_of_local_ruler_interaction = { + category = interaction_category_laamp + icon = religious + + ai_maybe = yes + ai_min_reply_days = 1 + ai_max_reply_days = 3 + popup_on_receive = yes + common_interaction = yes + + desc = attempt_conversion_of_local_ruler_interaction_desc + + is_shown = { + scope:actor = { + has_government = landless_adventurer_government + has_perk = prophet_perk + } + scope:recipient = { + faith != scope:actor.faith + is_ai = yes + is_ruler = yes + is_landed = yes + } + } + + is_highlighted = { + scope:actor = { + is_character_interaction_potentially_accepted = { + recipient = scope:recipient + interaction = attempt_conversion_of_local_ruler_interaction + } + } + } + + cooldown_against_recipient = { years = 15 } + + can_send = { + custom_tooltip = { + text = must_be_in_domain_tt + scope:recipient = { + OR = { + capital_province ?= scope:actor.domicile.domicile_location + any_held_title = { + title_tier = county + any_county_province = { + this = scope:actor.domicile.domicile_location + } + } + } + } + } + } + + # Use Stress + send_option = { + flag = piety + localization = USE_PIETY + } + send_option = { + flag = stress + localization = USE_STRESS + } + send_option = { + is_valid = { + scope:actor.intrigue >= scope:recipient.intrigue + } + flag = lie + localization = USE_INTRIGUE + } + send_option = { + is_valid = { + scope:actor.domicile ?= { + provisions >= { + value = 300 + multiply = scope:recipient.highest_held_title_tier + } + } + NOR = { + scope:recipient = { has_trait = arbitrary } + scope:recipient = { has_trait = sadistic } + scope:recipient = { has_trait = callous } + } + } + flag = provisions + localization = USE_PROVISIONS + } + send_option = { + is_valid = { + scope:actor = { + gold >= scope:recipient.medium_gold_value + } + NOR = { + scope:recipient = { has_trait = generous } + scope:recipient = { has_trait = humble } + } + } + flag = gold + localization = USE_GOLD + } + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + send_options_exclusive = no + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + is_valid_showing_failures_only = { + scope:recipient = { + is_available = yes + } + valid_demand_conversion_conditions_trigger = yes + } + + on_send = { + } + + cost = { + piety = { + value = { + add = medium_piety_value + multiply = scope:recipient.highest_held_title_tier + if = { + limit = { + scope:piety = yes + } + multiply = 2 + } + } + } + } + + on_accept = { + scope:actor = { + trigger_event = religious_interaction.2002 + show_as_tooltip = { + if = { + limit = { + has_government = landless_adventurer_government + scope:recipient.highest_held_title_tier >= tier_barony + } + faith = { + change_fervor = { + value = { + add = 1 + multiply = scope:recipient.highest_held_title_tier + } + desc = imperial_capital_sacked_fervor_gain + } + } + add_prestige = { + value = 200 + multiply = scope:recipient.highest_held_title_tier + if = { + limit = { + scope:recipient.highest_held_title_tier >= tier_kingdom + } + multiply = 2 + } + } + } + } + if = { + limit = { + scope:stress = yes + } + add_stress = medium_stress_impact_gain + } + if = { + limit = { + scope:lie = yes + } + stress_impact = { + honest = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + just = minor_stress_impact_gain + } + } + if = { + limit = { + scope:gold = yes + } + pay_short_term_gold = { + target = scope:recipient + gold = scope:recipient.medium_gold_value + } + } + if = { + limit = { + scope:provisions = yes + } + domicile ?= { + change_provisions = { + value = 300 + multiply = scope:recipient.highest_held_title_tier + multiply = -1 + } + } + } + } + demand_conversion_interaction_effect = yes + scope:recipient = { + if = { + limit = { + scope:lie = yes + } + stress_impact = { + base = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + } + custom_tooltip = { + text = will_not_convert_away_tt + add_character_flag = ai_will_not_convert + } + add_opinion = { + modifier = showed_me_the_light_opinion + target = scope:actor + opinion = 40 + } + if = { + limit = { + top_liege != this + liege ?= { + faith != scope:actor.faith + } + } + liege = { + add_opinion = { + modifier = annoyed_opinion + target = scope:actor + opinion = -20 + } + } + } + } + + scope:actor = { + if = { + limit = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = piety_from_converting_involved_rulers + is_secondary_character_involvement_involved_trigger = { + CHAR = scope:recipient + } + } + } + add_piety = medium_piety_gain + } + } + } + + on_decline = { + scope:actor = { + trigger_event = { + id = religious_interaction.2003 + } + if = { + limit = { + scope:stress = yes + } + add_stress = medium_stress_impact_gain + } + if = { + limit = { + scope:lie = yes + } + stress_impact = { + honest = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + just = minor_stress_impact_gain + } + } + if = { + limit = { + scope:gold = yes + } + pay_short_term_gold = { + target = scope:recipient + gold = scope:recipient.medium_gold_value + } + } + if = { + limit = { + scope:provisions = yes + } + domicile ?= { + change_provisions = { + value = 300 + multiply = scope:recipient.highest_held_title_tier + multiply = -1 + } + } + } + } + scope:recipient = { + if = { + limit = { + scope:lie = yes + } + stress_impact = { + base = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + } + show_as_tooltip = { + #Negative opinions + add_opinion = { + modifier = unwanted_religious_conversion_opinion + target = scope:actor + } + if = { + limit = { + top_liege != this + liege ?= { + faith != scope:actor.faith + } + } + liege = { + add_opinion = { + modifier = religious_rebel_opinion + target = scope:actor + } + } + } + } + } + } + + ai_accept = { + base = 0 + modifier = { + desc = SCHEME_WEAK_HOOK_USED + add = 20 + scope:hook = yes + } + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_INTRIGUE + scope:lie = yes + add = { + value = scope:actor.intrigue + subtract = scope:recipient.intrigue + min = 1 + } + } + modifier = { + add = 20 + scope:piety = yes + desc = USING_PIETY + } + modifier = { + add = 20 + scope:stress = yes + desc = USING_STRESS + } + modifier = { + add = 20 + scope:gold = yes + desc = USING_GOLD + } + modifier = { + add = 20 + scope:provisions = yes + desc = USING_PROVISIONS + } + modifier = { + scope:recipient = { + has_trait = trusting + } + add = 20 + desc = DEMAND_SUBMISSION_RECIPIENT_IS_TRUSTING + } + modifier = { + scope:recipient = { + has_relation_lover = scope:actor + } + add = 25 + desc = AI_YOUR_LOVER + } + modifier = { + scope:recipient = { + has_relation_friend = scope:actor + } + add = 25 + desc = AI_YOUR_FRIEND + } + modifier = { + scope:recipient = { + is_child_of = scope:actor + } + add = 50 + desc = AI_YOUR_CHILD + } + modifier = { + add = { + value = scope:actor.piety_level + multiply = 10 + } + scope:actor = { + piety_level > 1 + } + desc = ASK_FOR_CONVERSION_ACTOR_IS_PIOUS + } + modifier = { + add = { + value = scope:recipient.highest_held_title_tier + subtract = 2 + multiply = -25 + if = { + limit = { + scope:recipient.highest_held_title_tier >= tier_duchy + } + multiply = 2 + } + } + scope:recipient.highest_held_title_tier >= tier_duchy + desc = ASK_FOR_CONVERSION_RECIPIENT_TIER + } + modifier = { + add = -25 + scope:recipient = { + top_liege != this + faith = liege.faith + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + desc = ASK_FOR_CONVERSION_RECIPIENT_CRIME + } + modifier = { + add = -50 + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_astray_level + } + faith_hostility_level = { + target = scope:actor.faith + value < faith_hostile_level + } + } + } + desc = ASK_FOR_CONVERSION_RECIPIENT_ASTRAY + } + modifier = { + add = -75 + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + faith_hostility_level = { + target = scope:actor.faith + value < faith_evil_level + } + } + } + desc = ASK_FOR_CONVERSION_RECIPIENT_HOSTILE + } + modifier = { + add = -100 + scope:recipient = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + desc = ASK_FOR_CONVERSION_RECIPIENT_EVIL + } + religion_demand_conversion_default_modifier = yes + } +} + +######################### +# Exaltation of Pain tenet +######################### + +revel_in_pain_interaction = { + icon = religious + category = interaction_category_religion + desc = revel_in_pain_interaction_desc + + use_diplomatic_range = yes + + greeting = positive + notification_text = REVEL_IN_PAIN_INTERACTION_NOTIFICATION + + is_shown = { + NOT = { scope:actor = scope:recipient } + scope:actor = { + faith = { has_doctrine_parameter = self_mutilation_active } + OR = { + has_relation_friend = scope:recipient + has_relation_lover = scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_available = yes + custom_tooltip = { + text = actor_is_severely_injured_tt + NOT = { has_trait = wounded_2 } + } + } + scope:recipient = { + custom_tooltip = { + text = recipient_involved_in_revel_in_pain_recently_tt + NOT = { has_character_flag = involved_in_revel_in_pain_recently } + } + is_adult = yes + NOT = { has_trait = craven } + faith = { has_doctrine_parameter = self_mutilation_active } + NOT = { is_at_war_with = scope:actor } + custom_tooltip = { + text = recipient_is_severely_injured_tt + NOT = { has_trait = wounded_2 } + } + custom_tooltip = { + text = recipient_not_in_the_same_location_tt + location = scope:actor.location + } + is_available = yes + } + } + + auto_accept = { + scope:recipient = { is_ai = yes } + } + + on_accept = { + scope:actor = { + trigger_event = religious_interaction.2600 + show_as_tooltip = { revel_in_pain_effect = yes } + } + scope:recipient = { + if = { + limit = { is_ai = no } + trigger_event = religious_interaction.2600 + show_as_tooltip = { + revel_in_pain_effect = yes + revel_in_pain_opinion_effect = yes + } + } + else = { + revel_in_pain_effect = yes + revel_in_pain_opinion_effect = yes + } + } + } + + on_decline = { + scope:actor = { + trigger_event = religious_interaction.2610 + } + } + + ai_targets = { + ai_recipients = family + ai_recipients = scripted_relations + ai_recipients = vassals + ai_recipients = courtiers + max = 5 + } + + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + ai_potential = { + faith = { has_doctrine_parameter = self_mutilation_active } + is_at_war = no + OR = { + has_trait = zealous + has_trait = sadistic + } + NOR = { + has_trait = craven + has_trait = wounded_1 + has_trait = wounded_2 + } + } + + ai_will_do = { + base = 0 + modifier = { + add = ai_boldness + } + modifier = { + has_trait = flagellant + add = 25 + } + } +} diff --git a/common/character_interactions/02_ep1_interactions.txt b/common/character_interactions/02_ep1_interactions.txt new file mode 100644 index 00000000..a26cdc5f --- /dev/null +++ b/common/character_interactions/02_ep1_interactions.txt @@ -0,0 +1,492 @@ +# Character Interactions for EP1 + +################## +# Fund someone's inspiration +# by Linnéa Thimrén +################## +fund_inspiration_interaction = { + icon = inspiration + interface_priority = 30 + common_interaction = yes + category = interaction_category_vassal + desc = fund_inspiration_interaction_desc + + is_shown = { + scope:recipient = { + is_ruler = no + inspiration ?= { + NOT = { + exists = inspiration_sponsor + } + } + } + scope:actor = { + any_courtier_or_guest = { + this = scope:recipient + } + } + } + + is_highlighted = { + always = yes + } + + is_valid_showing_failures_only = { + scope:recipient = { + is_physically_able = yes + is_ruler = no + trigger_if = { + limit = { + NOT = { is_courtier_of = scope:actor } + } + can_recruit_character_to_court_trigger = { + RECRUITER = scope:actor + RECRUITEE = scope:recipient + } + } + } + scope:actor = { + can_sponsor_inspiration = scope:recipient.inspiration + gold >= scope:recipient.inspiration.base_inspiration_gold_cost + } + } + + on_accept = { + fund_inspiration_effect = yes + + if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = weapon_inspiration } } + custom_description_no_bullet = { text = weapon_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = armor_inspiration } } + custom_description_no_bullet = { text = armor_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = book_inspiration } } + custom_description_no_bullet = { text = book_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = weaver_inspiration } } + custom_description_no_bullet = { text = weaver_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = adventure_inspiration } } + custom_description_no_bullet = { text = adventure_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = artisan_inspiration } } + custom_description_no_bullet = { text = artisan_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = smith_inspiration } } + custom_description_no_bullet = { text = smith_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = alchemy_inspiration } } + custom_description_no_bullet = { text = alchemy_inspiration_cost_tt } + } + else_if = { + limit = { scope:recipient.inspiration = { has_inspiration_type = bow_inspiration } } + custom_description_no_bullet = { text = bow_inspiration_cost_tt } + } + + # Add a flag on AI to have an extra cooldown of 3 years + if = { + limit = { + scope:actor = { + is_ai = yes + NOT = { + gold >= 1000 + } + OR = { + short_term_gold < ai_inspiration_desired_gold_value + ai_greed >= 50 + } + } + } + scope:actor = { + add_character_flag = { + flag = recently_fund_inspiration + years = 3 + } + } + + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_gain + DESC = clan_unity_inspo.desc + REVERSE_NON_HOUSE_TARGET = no + } + + #Mandala Creation Aspect + scope:actor = { + if = { + limit = { government_has_flag = government_is_mandala } + increment_variable_effect = { + VAR = num_commissioned_artifacts + VAL = 1 + } + } + } + } + + auto_accept = { + custom_description = { + text = auto_accept_interaction_ai + object = scope:recipient + scope:recipient = { + is_ai = yes + } + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 10 + empire = 10 + hegemony = 10 + } + + ai_targets = { + ai_recipients = guests + ai_recipients = courtiers + } + + ai_target_quick_trigger = { + adult = yes + } + + ai_potential = { + is_at_war = no + OR = { + has_royal_court = yes + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + gold > ai_inspiration_desired_gold_value + NOT = { has_character_flag = recently_fund_inspiration } + NOT = { has_variable = conqueror } + ai_should_focus_on_building_in_their_capital = no + } + + ai_will_do = { + base = 100 + + modifier = { # Not as likely to fund inspirations if they already have some going (max three for very prestigious courts) + add = { + if = { + limit = { + highest_held_title_tier >= tier_empire + any_sponsored_inspiration = { + count >= 3 + } + } + add = -50 + } + else_if = { + limit = { + highest_held_title_tier >= tier_kingdom + any_sponsored_inspiration = { + count >= 2 + } + } + add = -50 + } + } + } + + # Do not pointlessly fund inspirations you do not need + modifier = { # Weapons + factor = 0 + scope:recipient.inspiration = { + has_inspiration_type = weapon_inspiration + } + OR = { + any_character_artifact = { # Has a fantastic item already + artifact_slot_type = primary_armament + rarity = illustrious + } + AND = { # Have a lot of artifacts already, and the inspired person isn't even very good + scope:recipient = { + weapon_inspiration_average_skill_value < 15 + } + any_character_artifact = { + count >= 2 + artifact_slot_type = primary_armament + } + } + } + } + modifier = { # Armor + factor = 0 + scope:recipient.inspiration = { + has_inspiration_type = armor_inspiration + } + OR = { + any_character_artifact = { # Has a fantastic item already + artifact_slot_type = armor + rarity = illustrious + } + AND = { # Have a lot of artifacts already, and the inspired person isn't even very good + scope:recipient = { + armor_inspiration_average_skill_value < 15 + } + any_character_artifact = { + count >= 2 + artifact_slot_type = armor + } + } + } + } + modifier = { # Warlike AI's only sponsor if they've been at peace for a long time + factor = 0 + ai_has_warlike_personality = yes + days_of_continuous_peace < 1825 # 5 years + } + modifier = { # Cautious AI's only sponsor if they feel safe enough + factor = 0 + ai_has_cautious_personality = yes + war_chest_gold < cautious_ai_minimum_war_chest_gold + } + } +} + +################## +# Indebt Guest +# by Ewan Cowhig Croft +################## + +indebt_guest_interaction = { + icon = icon_hostile + interface_priority = 120 + common_interaction = yes + ai_max_reply_days = 0 + cooldown = { years = 5 } + + category = interaction_category_hostile + ai_maybe = yes + + desc = indebt_guest_interaction_desc + + greeting = negative + pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED + pre_answer_no_key = ANSWER_CANT_SUCCEED + pre_answer_yes_key = ANSWER_WILL_SUCCEED + pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE + + ai_potential = { + # Repeat some is_shown triggers for performance gains. + indebt_guest_interaction_basic_checks_trigger = { ACTOR = this } + } + + is_shown = { + scope:actor != scope:recipient + # Repeat some ai_potential triggers for performance gains. + indebt_guest_interaction_basic_checks_trigger = { ACTOR = scope:actor } + # Scope:recipient must be a guest. + scope:recipient = { is_pool_guest_of = scope:actor } + } + + is_valid_showing_failures_only = { + scope:actor = { is_imprisoned = no } + scope:actor = { is_commanding_army = no } + # Scope:actor can't have a hook of any kind on scope:recipient already. + NOT = { + scope:actor = { has_hook = scope:recipient } + } + # Scope:actor must be able to afford the cost of the decision going wrong. + scope:actor.court_grandeur_current >= indebt_guest_interaction_lost_test_grandeur_cost_value + } + + can_send = { + scope:actor = { + custom_description = { + text = "character_interactions_hostile_actions_disabled_delay" + NOT = { has_character_flag = flag_hostile_actions_disabled_delay } + } + } + } + + on_send = { + scope:actor = { + add_character_flag = { + flag = flag_hostile_actions_disabled_delay + days = 10 + } + } + } + + on_accept = { + scope:actor = { + # On accept, you gain a hook & lose some opinion. + ## Which we only show as a tooltip for now, since it's applied in the event. + show_as_tooltip = { indebt_guest_interaction_accepted_effect = yes } + # Pop the event. + trigger_event = ep1_character_interaction.0001 + # Reminder that you'll have a chance to direct where they go. + custom_tooltip = indebt_guest_interaction.tt.direct_indebted_guest + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_loss + DESC = clan_unity_indebt_guest.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Send a toast. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = indebt_guest_interaction.tt.failure + left_icon = scope:recipient + # On decline, scope:recipient leaves your court... + scope:recipient = { select_and_move_to_pool_effect = yes } + # ... and you lose a bit of extra grandeur for your audacity. + change_current_court_grandeur = indebt_guest_interaction_lost_test_grandeur_cost_value + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_loss + DESC = clan_unity_indebt_guest_failure.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = no + + ai_accept = { + base = 50 + + # Standard intrigue duel. + modifier = { + add = { + value = scope:actor.intrigue + multiply = 2 + } + desc = INDEBT_GUEST_INTRIGUE_ACTOR + } + modifier = { + add = { + value = scope:recipient.intrigue + multiply = -1 + } + desc = INDEBT_GUEST_INTRIGUE_RECIPIENT + } + # Weight it a bit more in your favour for every point of excess CGV you have. + modifier = { + add = scope:actor.current_cgv_above_expected_exact_value + desc = INDEBT_GUEST_CURRENT_CGV_ABOVE_EXPECTED + scope:actor.current_cgv_above_expected_exact_value >= 1 + } + # Some traits may also affect the chances for scope:actor... + modifier = { + add = 10 + scope:actor = { has_trait = schemer } + } + modifier = { + add = 10 + scope:actor = { has_trait = education_intrigue } + } + modifier = { + add = 5 + scope:actor = { has_trait = deceitful } + } + modifier = { + add = 5 + scope:actor = { has_trait = vengeful } + } + modifier = { + add = -10 + scope:actor = { has_trait = honest } + } + modifier = { + add = -5 + scope:actor = { has_trait = forgiving } + } + # ... or else for scope:recipient. + modifier = { + add = -10 + scope:recipient = { has_trait = schemer } + } + modifier = { + add = -5 + scope:recipient = { has_trait = education_intrigue } + } + modifier = { + add = -5 + scope:recipient = { has_trait = deceitful } + } + modifier = { + add = 10 + scope:recipient = { has_trait = honest } + } + } + + # AI + ai_targets = { + ai_recipients = guests + chance = 0.5 + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 10 + empire = 10 + hegemony = 10 + } + + ai_will_do = { + base = -100 + + # This is a silly way for the AI to spend its CGV, so we keep 'em off it most of the time. + # Unless they've got a scheme on the go at their nemesis' court... + modifier = { + add = 100 + scope:actor = { + any_relation = { type = nemesis } + any_scheme = { + count >= 1 + scheme_target_character = { + any_relation = { + type = nemesis + count >= 1 + this = scope:actor + } + } + } + } + } + # ... *and* they're likely to win due to having higher intrigue, but without scope:recipient being too terrible. + modifier = { + add = 25 + indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value + scope:recipient = { intrigue >= high_skill_rating } + } + modifier = { + add = 25 + indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value + scope:recipient = { intrigue >= very_high_skill_rating } + } + modifier = { + add = 50 + indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value + scope:recipient = { intrigue >= extremely_high_skill_rating } + } + } +} diff --git a/common/character_interactions/03_fp2_interactions.txt b/common/character_interactions/03_fp2_interactions.txt new file mode 100644 index 00000000..625f5d38 --- /dev/null +++ b/common/character_interactions/03_fp2_interactions.txt @@ -0,0 +1,5491 @@ +# Character Interactions for FP2 + +################################################## +# Share secrets +# by Maxence Voleau +################################################## +share_known_secrets_interaction = { + icon = secret + category = interaction_category_friendly + common_interaction = yes + + send_name = SEND_PROPOSAL + + interface_priority = 120 + + ai_targets = { + ai_recipients = dynasty + } + + ai_frequency_by_tier = { + barony = 0 + county = 240 + duchy = 180 + kingdom = 180 + empire = 180 + hegemony = 180 + } + + is_shown = { + scope:actor = { + # Standard check + # Has access to the appropriate legacy perk. + dynasty = { has_dynasty_perk = fp2_coterie_legacy_4 } + + # they are from the same house + house = scope:recipient.house + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = share_known_secrets_interaction.tt.no_secrets_to_share + # We try to keep the criteria vague to obfuscate things. + scope:actor = { any_known_secret = { } } # Must have a secret to share + OR = { + scope:actor = { + # At least one secret is unknown from recipient + any_known_secret = { + NOT = { is_known_by = scope:recipient } + } + } + scope:recipient = { + # At least one secret is unknown from actor + any_known_secret = { + NOT = { is_known_by = scope:actor } + } + } + } + } + } + + desc = share_known_secrets_interaction_desc + + on_accept = { + scope:actor = { + if = { + limit = { + scope:recipient = { + any_known_secret = { + count >= 7 + NOT = { is_known_by = scope:actor } + } + } + } + add_prestige = major_prestige_loss + + custom_description = { + text = many_secrets_exchanged + } + } + else_if = { + limit = { + scope:recipient = { + any_known_secret = { + count >= 3 + NOT = { is_known_by = scope:actor } + } + } + } + add_prestige = medium_prestige_loss + custom_description = { + text = several_secrets_exchanged + } + } + else = { + add_prestige = minor_prestige_loss + custom_description = { + text = few_secrets_exchanged + } + } + + # Stress impact + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + } + + scope:recipient = { + if = { + limit = { + scope:actor = { + any_known_secret = { + count >= 7 + NOT = { is_known_by = scope:recipient } + OR = { + NOR = { + secret_owner = scope:recipient + AND = { + exists = secret_target + secret_target = scope:recipient + } + } + scope:recipient = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + } + } + } + add_prestige = major_prestige_loss + + custom_description = { + text = many_secrets_exchanged + } + } + else_if = { + limit = { + scope:actor = { + any_known_secret = { + count >= 3 + NOT = { is_known_by = scope:recipient } + OR = { + NOR = { + secret_owner = scope:actor + AND = { + exists = secret_target + secret_target = scope:actor + } + } + scope:actor = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + } + } + } + add_prestige = medium_prestige_loss + + custom_description = { + text = several_secrets_exchanged + } + } + else = { + add_prestige = minor_prestige_loss + + custom_description = { + text = few_secrets_exchanged + } + } + + # Stress impact + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + } + + hidden_effect = { + scope:recipient = { save_scope_as = END_TARGET } # This should make the loc work 2-ways, as notifs do not update themselves + scope:actor = { + if = { # Recipient has no secrets to share + limit = { + scope:recipient = { + any_known_secret = { + NOT = { is_known_by = scope:actor } + OR = { + NOR = { + secret_owner = scope:recipient + AND = { + exists = secret_target + secret_target = scope:recipient + } + } + scope:recipient = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + count = 0 + } + } + } + send_interface_message = { + type = event_intrigue_bad_with_text + title = share_known_secrets_interaction_outcome_notif_title + desc = share_known_secrets_interaction_recipient_had_no_secrets + left_icon = scope:recipient + } + } + else = { # They had secrets to share + send_interface_message = { + type = event_intrigue_good_with_text + title = share_known_secrets_interaction_outcome_notif_title + desc = share_known_secrets_interaction_desc_intro + left_icon = scope:recipient + + scope:recipient = { + every_known_secret = { + limit = { + NOT = { is_known_by = scope:actor } + OR = { + NOR = { + secret_owner = scope:recipient + AND = { + exists = secret_target + secret_target = scope:recipient + } + } + scope:recipient = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + } + reveal_to = scope:actor + } + } + } + } + } + + scope:actor = { save_scope_as = END_TARGET } + scope:recipient = { + if = { # actor has no secrets to share + limit = { + scope:actor = { + any_known_secret = { + NOT = { is_known_by = scope:recipient } + OR = { + NOR = { + secret_owner = scope:actor + AND = { + exists = secret_target + secret_target = scope:actor + } + } + scope:actor = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + count = 0 + } + } + } + send_interface_message = { + type = event_intrigue_bad_with_text + title = share_known_secrets_interaction_outcome_notif_title + desc = share_known_secrets_interaction_recipient_had_no_secrets + left_icon = scope:actor + } + } + else = { # They had secrets to share + send_interface_message = { + type = event_intrigue_good_with_text + title = share_known_secrets_interaction_outcome_notif_title + desc = share_known_secrets_interaction_desc_intro + left_icon = scope:actor + + scope:actor = { + every_known_secret = { + limit = { + NOT = { is_known_by = scope:recipient } + OR = { + NOR = { + secret_owner = scope:actor + AND = { + exists = secret_target + secret_target = scope:actor + } + } + scope:actor = { + OR = { + has_trait = dull + has_trait = intellect_bad + has_trait = contrite + } + } + } + } + reveal_to = scope:recipient + } + hidden_effect = { add_prestige = major_prestige_loss } + } + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_secret_sharing.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + AND = { + always = scope:hook + scope:actor = { has_strong_hook = scope:recipient } + } + } + } + + send_option = { + is_valid = { + scope:actor = { has_strong_hook = scope:recipient } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_strong_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_potential = { + #Has access to the appropriate cultural parameter. + AND = { + exists = dynasty + dynasty = { has_dynasty_perk = fp2_coterie_legacy_4 } + } + prestige > major_prestige_value + } + + auto_accept = no + + ai_accept = { + # AI should accept by default + base = 10 + + modifier = { + trigger = { + always = scope:hook + } + add = 100 + desc = SCHEME_WEAK_HOOK_USED + } + + modifier = { + trigger = { + has_education_intrigue_trigger = yes + } + add = 20 + desc = INTERACTION_INTRIGUE_EDUCATION + } + + modifier = { + add = -100 + has_trait = honest + desc = INTERACTION_HONEST + } + + modifier = { + add = -50 + has_trait = just + desc = INTERACTION_JUST + } + + modifier = { + add = -50 + has_trait = paranoid + desc = INTERACTION_PARANOID + } + + modifier = { + add = 100 + has_trait = fickle + desc = INTERACTION_FICKLE + } + + modifier = { + add = 100 + has_trait = deceitful + desc = INTERACTION_DECEITFUL + } + + modifier = { + add = 25 + has_trait = ambitious + desc = INTERACTION_AMBITIOUS + } + + } + + ai_will_do = { + base = 100 + } +} + +################################################## +# Propose Best Friendship +# by Ewan Cowhig Croft +################################################## + +# Elevate a friendship to become a *best* friendship. +propose_best_friendship_interaction = { + interface_priority = 30 + icon = icon_personal + category = interaction_category_friendly + common_interaction = yes + desc = propose_best_friendship_interaction_desc + + greeting = positive + notification_text = PROPOSE_BEST_FRIENDSHIP_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { years = 5 } + cooldown_against_recipient = { years = 10 } + + is_shown = { + # Scope:actor needs to have a suitable CulTrad. + scope:actor = { + culture = { has_cultural_parameter = may_propose_best_friendship } + } + # Scope:actor needs to have scope:recipient as a friend. + scope:actor = { has_relation_friend = scope:recipient } + } + + is_valid_showing_failures_only = { + # Both characters must be available adults. + scope:actor = { is_available_adult = yes } + scope:recipient = { is_available_adult = yes } + # We can't do most of the standard checks for can_set_relation_best_friend_trigger, but we do the relevant ones individually. + custom_tooltip = { + text = propose_best_friendship_interaction.tt.already_best_friends + scope:actor = { + NOT = { has_relation_best_friend = scope:recipient } + } + } + trigger_if = { + limit = { + NOT = { + scope:actor = { has_relation_best_friend = scope:recipient } + } + } + custom_tooltip = { + text = propose_best_friendship_interaction.tt.actor_has_best_friend + scope:actor = { num_of_relation_best_friend = 0 } + } + } + trigger_if = { + limit = { + NOT = { + scope:recipient = { has_relation_best_friend = scope:actor } + } + } + custom_tooltip = { + text = propose_best_friendship_interaction.tt.recipient_has_best_friend + scope:recipient = { num_of_relation_best_friend = 0 } + } + } + } + + on_accept = { + # Notifications with most effects. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = propose_best_friendship_interaction.accept.actor.tt + left_icon = scope:recipient + # Become best friends. + show_as_tooltip = { set_relation_best_friend = scope:recipient } + # Gain some strong opinion bonuses as a result. + reverse_add_opinion = { + target = scope:recipient + modifier = friendliness_opinion + opinion = 50 + } + # The hookening. + ## Due to some weird order-of-operations stuff, we enclose this in an if statement. + if = { + limit = { + NOT = { + has_hook_of_type = { + target = scope:recipient + type = ritual_best_friend_hook + } + } + can_add_hook = { + target = scope:recipient + type = ritual_best_friend_hook + } + } + add_hook = { + type = ritual_best_friend_hook + target = scope:recipient + } + } + } + } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = propose_best_friendship_interaction.accept.recipient.tt + left_icon = scope:actor + # Become best friends. + show_as_tooltip = { set_relation_best_friend = scope:actor } + # Gain some strong opinion bonuses as a result. + reverse_add_opinion = { + target = scope:actor + modifier = friendliness_opinion + opinion = 50 + } + # The hookening part #2. + ## Due to some weird order-of-operations stuff, we enclose this in an if statement. + if = { + limit = { + NOT = { + has_hook_of_type = { + target = scope:actor + type = ritual_best_friend_hook + } + } + can_add_hook = { + target = scope:actor + type = ritual_best_friend_hook + } + } + add_hook = { + type = ritual_best_friend_hook + target = scope:actor + } + } + } + } + # Then we apply the actual friendship. + hidden_effect = { + scope:actor = { + if = { + limit = { + NOT = { has_relation_best_friend = scope:recipient } + } + set_relation_best_friend = { reason = best_friend_sworn copy_reason = friend target = scope:recipient } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_oath_of_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = propose_best_friendship_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = medium_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = propose_best_friendship_interaction.decline.recipient.tt + left_icon = scope:actor + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = hurt_opinion + opinion = -50 + } + } + } + } + # And set up a little hidden drama for later... + hidden_effect = { + scope:recipient = { + if = { + limit = { + # We don't use the standard check for this, since they'll already be friends by definition, so the trigger would always return as false. + # Instead, we just check to make sure they're not *already* potential rivals; this can happen regardless, so really we're just setting them up for drama if the friendship ever falters. + NOT = { has_relation_potential_rival = scope:actor } + } + set_relation_potential_rival = scope:actor + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_declined_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions + base = 0 + + fp2_ritual_best_friendship_interactions_ai_accept_modifier = yes + + # People without the appropriate CulTrad don't quite *get* it. + modifier = { + add = -75 + NOT = { + culture = { has_cultural_parameter = may_propose_best_friendship } + } + desc = PROPOSE_BEST_FRIEND_OPINION_LACKING_CULTURAL_PARAMETER + } + } + ## Performance-enhancement + ai_potential = { is_imprisoned = no } + ai_target_quick_trigger = { adult = yes } + ai_targets = { ai_recipients = scripted_relations } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + ai_will_do = { + base = -50 + + fp2_ritual_best_friendship_interactions_ai_chance_modifier = yes + } +} + +################################################## +# Re-Affirmed Best Friendship +# by Ewan Cowhig Croft +################################################## + +# You've already got a best friend, but you feel you should have hooks on each other. +reaffirm_best_friendship_interaction = { + interface_priority = 30 + icon = icon_personal + category = interaction_category_friendly + common_interaction = yes + desc = reaffirm_best_friendship_interaction_desc + + greeting = positive + notification_text = REAFFIRM_BEST_FRIENDSHIP_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { years = 5 } + cooldown_against_recipient = { years = 10 } + + is_shown = { + # Scope:actor needs to have a suitable CulTrad. + scope:actor = { + culture = { has_cultural_parameter = may_propose_best_friendship } + } + # Scope:actor needs to have scope:recipient for their best friend. + scope:actor = { has_relation_best_friend = scope:recipient } + # Either friend lacks a strong hook on the other. + NOR = { + scope:actor = { has_strong_hook = scope:recipient } + scope:recipient = { has_strong_hook = scope:actor } + } + } + + is_valid_showing_failures_only = { + # Both characters must be available adults. + scope:actor = { is_available_adult = yes } + scope:recipient = { is_available_adult = yes } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = reaffirm_best_friendship_interaction.accept.actor.tt + left_icon = scope:recipient + # Pretty happy about the reaffirmation. + reverse_add_opinion = { + target = scope:recipient + modifier = friendliness_opinion + opinion = 25 + } + # The hookening. + if = { + limit = { + NOT = { has_strong_hook = scope:recipient } + } + add_hook = { + type = ritual_best_friend_hook + target = scope:recipient + } + } + } + } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = reaffirm_best_friendship_interaction.accept.recipient.tt + left_icon = scope:actor + # Pretty happy about the reaffirmation. + reverse_add_opinion = { + target = scope:actor + modifier = friendliness_opinion + opinion = 25 + } + # The hookening part #2. + if = { + limit = { + NOT = { has_strong_hook = scope:actor } + } + add_hook = { + type = ritual_best_friend_hook + target = scope:actor + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_friendship_is_magic.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = reaffirm_best_friendship_interaction.decline.actor.tt + left_icon = scope:recipient + # Actual effects handled in scope:recipient's toast. + show_as_tooltip = { remove_relation_best_friend = scope:recipient } + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = reaffirm_best_friendship_interaction.decline.recipient.tt + left_icon = scope:actor + remove_relation_best_friend = scope:actor + } + } + # And set up a little hidden drama for later... + hidden_effect = { + scope:recipient = { + if = { + limit = { + # We don't use the standard check for this, since they'll already be friends by definition, so the trigger would always return as false. + # Instead, we just check to make sure they're not *already* potential rivals; this can happen regardless, so really we're just setting them up for drama if the friendship ever falters. + NOT = { has_relation_potential_rival = scope:actor } + } + set_relation_potential_rival = scope:actor + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_friendship_is_not_magic.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions + base = 0 + + fp2_ritual_best_friendship_interactions_ai_accept_modifier = yes + + # People with the appropriate CulTrad understand that this is essentially required of them. + modifier = { + add = 50 + culture = { has_cultural_parameter = may_propose_best_friendship } + desc = REAFFIRM_BEST_FRIEND_OPINION_HAS_CULTURAL_PARAMETER + } + } + ## Performance-enhancement + ai_potential = { is_imprisoned = no } + ai_target_quick_trigger = { adult = yes } + ai_targets = { ai_recipients = scripted_relations } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + ai_will_do = { + base = -50 + + fp2_ritual_best_friendship_interactions_ai_chance_modifier = yes + } +} + +################################################## +# Synergise Friendship +# by Ewan Cowhig Croft +################################################## + +# Work together with your best friend to gain bonuses! +synergise_friendship_interaction = { + interface_priority = 30 + icon = icon_personal + category = interaction_category_friendly + common_interaction = yes + desc = synergise_friendship_interaction_desc + + greeting = positive + notification_text = SYNERGISE_FRIENDSHIP_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { years = 5 } + cooldown_against_recipient = { years = 10 } + + is_shown = { + # Scope:actor needs to have a suitable CulTrad. + scope:actor = { + culture = { has_cultural_parameter = may_select_friendship_synergy_bonus } + } + # Scope:actor needs to have scope:recipient for their best friend. + scope:actor = { has_relation_best_friend = scope:recipient } + } + + is_valid_showing_failures_only = { + # Both characters must be available adults. + scope:actor = { is_available_adult = yes } + scope:recipient = { is_available_adult = yes } + } + + on_accept = { + # First, we send out some notifications. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = synergise_friendship_interaction.accept.actor.tt + left_icon = scope:recipient + # Pretty happy about the reaffirmation. + reverse_add_opinion = { + target = scope:recipient + modifier = friendliness_opinion + opinion = 10 + } + # Show the bonuses. + ## Hidden effect so that the modifiers don't show twice in the UI. + hidden_effect = { + show_as_tooltip = { synergise_friendship_interaction_actual_effect = yes } + } + } + } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = synergise_friendship_interaction.accept.recipient.tt + left_icon = scope:actor + # Pretty happy about the reaffirmation. + reverse_add_opinion = { + target = scope:actor + modifier = friendliness_opinion + opinion = 10 + } + # Show the bonuses. + ## Hidden effect so that the modifiers don't show twice in the UI. + hidden_effect = { + show_as_tooltip = { synergise_friendship_interaction_actual_effect = yes } + } + } + } + # Then remove any existing synergy modifiers they've got. + scope:actor = { remove_every_best_friend_synergy_bonus_modifier_effect = yes } + scope:recipient = { remove_every_best_friend_synergy_bonus_modifier_effect = yes } + # Finally, calc the actual modifiers received. + synergise_friendship_interaction_actual_effect = yes + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_synergized_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = synergise_friendship_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = minor_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = synergise_friendship_interaction.decline.recipient.tt + left_icon = scope:actor + reverse_add_opinion = { + target = scope:actor + modifier = hurt_opinion + opinion = -20 + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_synergized_friendship_declined.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # Synergy Types + ## Scope:actor's education + send_option = { + flag = synergy_bonus_actor + localization = "SYNERGY_BONUS_ACTOR" + } + ## Scope:recipient's education + send_option = { + flag = synergy_bonus_recipient + is_valid = { + custom_description = { + text = synergise_friendship_interaction_cannot_share_education + NOT = { + characters_have_same_education_group_trigger = { + CHARACTER_1 = scope:actor + CHARACTER_2 = scope:recipient + } + } + } + } + localization = "SYNERGY_BONUS_RECIPIENT" + } + ## Scope:a mix of both educations + send_option = { + flag = synergy_bonus_mixed + localization = "SYNERGY_BONUS_MIXED" + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions + base = 0 + + fp2_ritual_best_friendship_interactions_ai_accept_modifier = yes + } + ## Performance-enhancement + ai_potential = { is_imprisoned = no } + ai_target_quick_trigger = { adult = yes } + ai_targets = { ai_recipients = scripted_relations } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + ai_will_do = { + base = -50 + + fp2_ritual_best_friendship_interactions_ai_chance_modifier = yes + } +} + +################################################## +# Challenge to Chess +# by Ewan Cowhig Croft +################################################## + +# Play someone at a game of chess, perhaps with a small wager. +challenge_to_2p_chess_interaction = { + interface_priority = 30 + icon = icon_gaming + category = interaction_category_friendly + desc = challenge_to_2p_chess_interaction_desc + common_interaction = no + + greeting = positive + notification_text = CHALLENGE_TO_2P_CHESS_INTERACTION_NOTIFICATION + ai_maybe = yes + + cooldown = { years = 1 } + cooldown_against_recipient = { years = 10 } + + is_shown = { + scope:actor = { + # Actor needs to either have a CulTrad or be a fan of board games + OR = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + has_perk = befriend_perk + has_character_modifier = fp3_chess_playing_monkey_modifier #addition from FP3 + } + # Plus be able to start & continue such a game generally. + bg_can_start_board_game_trigger = yes + # ... no, I'm sorry, you can't play yourself at board games. + this != scope:recipient + } + } + + is_valid_showing_failures_only = { + # Both characters must be available (adults or old-enough children) + scope:actor = { + is_available = yes + can_start_board_game_eligibility_checks_trigger = yes + } + scope:recipient = { + is_available = yes + can_start_board_game_eligibility_checks_trigger = yes + } + # Neither of you can be currently engaged in a board game. + scope:recipient = { + custom_description = { + text = fp2_bg_recipient_banned_from_board_games + bg_can_start_board_game_is_scope_banned_checks_trigger = no + } + } + #limit range for landless adventurers + trigger_if = { + limit = { + scope:actor = { + has_government = landless_adventurer_government + } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + } + + on_send = { + # We want to set this up in advance to stop scope:actor from giving away a county for opinion that they've already wagered. + if = { + limit = { always = scope:chess_land } + challenge_to_2p_chess_interaction_lock_in_actor_stake_land_effect = yes + } + # Plus lock in the game type. + challenge_to_2p_chess_interaction_lock_in_game_type_effect = { GAME_TYPE_SETTER = scope:actor } + } + + on_accept = { + # Save gold & land stakes. + if = { + limit = { always = scope:chess_gold } + save_scope_value_as = { + name = bg_stake_gold + value = challenge_to_chess_gold_change_value + } + } + if = { + limit = { always = scope:chess_land } + # We check scope:actor's county in the on_send block to stop them sneakily giving the county away after they've staked it. + show_as_tooltip = { challenge_to_2p_chess_interaction_lock_in_actor_stake_land_effect = yes } + scope:recipient = { + save_temporary_scope_as = ordering_char_temp + ordered_held_title = { + limit = { + bg_stake_land_valid_neighbouring_county_to_trade_trigger = { NEIGHBOUR = scope:actor } + } + order_by = bg_stake_land_evaluate_appropriate_county_ordering_value + save_scope_as = bg_stake_land_recipient + set_variable = wagered_county + } + } + } + # Proceed with general set-up & preamble. + scope:actor = { + # Log scope:actor as having taken the interaction for the purposes of invalidation + add_character_flag = taken_challenge_to_chess_interaction + # Fire the actual first event for scope:actor. + ## Sort some placeholder scopes so the UI doesn't freak out. + show_as_tooltip = { + challenge_to_2p_chess_interaction_lock_in_game_type_effect = { GAME_TYPE_SETTER = scope:actor } + } + ## Pachisi + if = { + limit = { scope:bg_interaction_game_type = flag:pachisi } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = pachisi + LOCALE = random_nice_day + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + ## Hnefatafl + if = { + limit = { scope:bg_interaction_game_type = flag:hnefatafl } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = hnefatafl + LOCALE = random_nice_day + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + ## Tabula + if = { + limit = { scope:bg_interaction_game_type = flag:tabula } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = tabula + LOCALE = random_nice_day + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + ## Go + if = { + limit = { scope:bg_interaction_game_type = flag:go } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = go + LOCALE = sitting_room + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + ## Fidchell + if = { + limit = { scope:bg_interaction_game_type = flag:fidchell } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = fidchell + LOCALE = random_nice_day + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + ## Chess + if = { + limit = { scope:bg_interaction_game_type = flag:chess } + configure_start_board_game_effect = { + BG_INITIATOR = scope:actor + BG_ATTACKER = scope:actor + BG_DEFENDER = scope:recipient + SYSTEM = chess + LOCALE = random_nice_day + OUTPUT_EVENT = perk_interaction.0121 + INVALIDATION_EVENT = board_games.0021 + } + } + } + # Notify that the game will start immediately. + custom_tooltip = challenge_to_2p_chess_interaction.accept.game_commences.tt + # Stakes. + ## Friendlies bet opinion & stress. + if = { + limit = { always = scope:chess_friendly } + show_as_tooltip = { + random_list = { + # You win. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.actor + fp2_bg_stake_friendly_effect = { + VICTOR = scope:actor + LOSER = scope:recipient + } + } + # You lose. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.recipient + fp2_bg_stake_friendly_effect = { + VICTOR = scope:recipient + LOSER = scope:actor + } + } + } + } + } + ## Prestige bets capital. + if = { + limit = { always = scope:chess_prestige } + show_as_tooltip = { + random_list = { + # You win. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.actor + fp2_bg_stake_fame_effect = { + VICTOR = scope:actor + LOSER = scope:recipient + } + } + # You lose. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.recipient + fp2_bg_stake_fame_effect = { + VICTOR = scope:recipient + LOSER = scope:actor + } + } + } + } + } + ## Gold bets capital. + if = { + limit = { always = scope:chess_gold } + show_as_tooltip = { + random_list = { + # You win. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.actor + fp2_bg_stake_fortune_effect = { + VICTOR = scope:actor + LOSER = scope:recipient + } + } + # You lose. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.recipient + fp2_bg_stake_fortune_effect = { + VICTOR = scope:recipient + LOSER = scope:actor + } + } + } + } + } + ## Land bets a neighbouring title. + if = { + limit = { always = scope:chess_land } + show_as_tooltip = { + random_list = { + # You win. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.actor + fp2_bg_stake_titles_effect = { VICTOR = scope:actor } + } + # You lose. + 50 = { + show_chance = no + desc = fp2_bg_interaction.winner.recipient + fp2_bg_stake_titles_effect = { VICTOR = scope:recipient } + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_loss + DESC = clan_unity_shatranj.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor is a little put out. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = challenge_to_2p_chess_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = minor_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = challenge_to_2p_chess_interaction.decline.recipient.tt + left_icon = scope:actor + reverse_add_opinion = { + target = scope:actor + modifier = unfriendly_opinion + opinion = -20 + } + } + } + + # Failsafe: Ensure that all set variables are removed + hidden_effect = { + if = { + limit = { exists = scope:bg_stake_land_recipient } + scope:bg_stake_land_recipient = { remove_variable = wagered_county } + } + if = { + limit = { exists = scope:bg_stake_land_actor } + scope:bg_stake_land_actor = { remove_variable = wagered_county } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = miniscule_unity_loss + DESC = clan_unity_shatranj_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # Wagers + ## A friendly match + send_option = { + flag = chess_friendly + localization = "CHESS_FRIENDLY" + } + ## Bet prestige + send_option = { + flag = chess_prestige + localization = "CHESS_PRESTIGE" + is_valid = { # Children should not be able to gamble with fame, but gold and land are fine + scope:actor = { is_available_adult = yes } + scope:recipient = { is_available_adult = yes } + } + } + ## Bet gold + send_option = { + is_valid = { + custom_tooltip = { + scope:actor = { gold > minor_gold_value } + text = bet_gold_actor_not_enough_gold + } + custom_tooltip = { + scope:recipient = { gold > minor_gold_value } + text = bet_gold_recipient_not_enough_gold + } + } + flag = chess_gold + localization = "CHESS_GOLD" + } + ## Bet land + send_option = { + # Only actual gaming nut cultures will bet something as serious as land. + is_shown = { + scope:actor = { + culture = { has_cultural_parameter = may_wager_land_on_board_games } + } + scope:recipient = { + culture = { has_cultural_parameter = may_wager_land_on_board_games } + } + } + # But you need to have bordering land for it to work. + is_valid = { + custom_tooltip = { + text = challenge_to_2p_chess_interaction.need_bordering_non_capital_domains.tt + scope:actor = { + any_held_title = { + bg_stake_land_valid_neighbouring_county_to_trade_trigger = { NEIGHBOUR = scope:recipient } + } + } + scope:recipient = { + any_held_title = { + bg_stake_land_valid_neighbouring_county_to_trade_trigger = { NEIGHBOUR = scope:actor } + } + } + } + } + flag = chess_land + localization = "CHESS_LAND" + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions + base = 0 + + # Weight up for personality values. + ## Shy characters may not generally be sociable, but they're usually down for board games. + ai_value_modifier = { + who = scope:recipient + trigger = { has_trait = shy } + ai_boldness = { + if = { + limit = { + scope:recipient = { + NOT = { ai_boldness = 0 } + } + } + value = 1 + } + } + ai_sociability = { + if = { + limit = { + scope:recipient = { + NOT = { ai_honor = 0 } + } + } + value = -0.5 + } + } + } + ## Otherwise, calc as normal. + ai_value_modifier = { + who = scope:recipient + trigger = { + NOT = { has_trait = shy } + } + ai_boldness = { + if = { + limit = { + scope:recipient = { + NOT = { ai_boldness = 0 } + } + } + value = 1 + } + } + ai_sociability = { + if = { + limit = { + scope:recipient = { + NOT = { ai_honor = 0 } + } + } + value = 0.5 + } + } + } + # Weight up for opinion. + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + # Weight up for estimated skill. + modifier = { + add = { + add = scope:recipient.martial + add = scope:recipient.intrigue + add = scope:recipient.learning + # + } + desc = BG_OPINION_OWN_SKILL_ASSESSMENT + } + # Specific wager preferences. + ## Friendlies: for folks who want a calm game with nothing more at stake than peace of mind. + modifier = { + add = 20 + always = scope:chess_friendly + # Exempt characters with traits that dislike low stakes. + scope:recipient = { + NOR = { + has_trait = callous + has_trait = greedy + has_trait = arrogant + } + } + desc = BG_OPINION_STAKES_ARE_LOW + } + ### Gregarious loves. + modifier = { + add = 40 + scope:recipient = { has_trait = gregarious } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_GREGARIOUS + } + ### Humble loves. + modifier = { + add = 40 + scope:recipient = { has_trait = humble } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_HUMBLE + } + ### Shy likes. + modifier = { + add = 20 + scope:recipient = { has_trait = shy } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_SHY + } + ### Compassionate likes. + modifier = { + add = 20 + scope:recipient = { has_trait = compassionate } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_COMPASSIONATE + } + ### Callous dislikes. + modifier = { + add = -20 + scope:recipient = { has_trait = callous } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_CALLOUS + } + ### Greedy hates. + modifier = { + add = -40 + scope:recipient = { has_trait = greedy } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_GREEDY + } + ### Arrogant hates. + modifier = { + add = -40 + scope:recipient = { has_trait = arrogant } + always = scope:chess_friendly + desc = BG_OPINION_FRIENDLY_TRAIT_ARROGANT + } + ## Prestige: want a little more drama in your life without breaking the bank? Gamble your reputation! + ### Brave loves. + modifier = { + add = 40 + scope:recipient = { has_trait = brave } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_BRAVE + } + ### Arrogant loves. + modifier = { + add = 40 + scope:recipient = { has_trait = arrogant } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_ARROGANT + } + ### Gregarious likes. + modifier = { + add = 20 + scope:recipient = { has_trait = gregarious } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_GREGARIOUS + } + ### Ambitious likes. + modifier = { + add = 20 + scope:recipient = { has_trait = ambitious } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_AMBITIOUS + } + ### Content dislikes. + modifier = { + add = -20 + scope:recipient = { has_trait = content } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_CONTENT + } + ### Shy dislikes. + modifier = { + add = -20 + scope:recipient = { has_trait = shy } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_SHY + } + ### Humble hates. + modifier = { + add = -40 + scope:recipient = { has_trait = humble } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_HUMBLE + } + ### Craven hates. + modifier = { + add = -40 + scope:recipient = { has_trait = craven } + always = scope:chess_prestige + desc = BG_OPINION_PRESTIGE_TRAIT_CRAVEN + } + ## Gold: what is life without risk? Play it bold or don't play at all! + ### Profligate adores. + modifier = { + add = 60 + scope:recipient = { has_trait = profligate } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_PROFLIGATE + } + ### Greedy loves. + modifier = { + add = 40 + scope:recipient = { has_trait = greedy } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_GREEDY + } + ### Ambitious likes. + modifier = { + add = 20 + scope:recipient = { has_trait = ambitious } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_AMBITIOUS + } + ### Generous likes - I mean, from their perspective, what does the money matter? + modifier = { + add = 20 + scope:recipient = { has_trait = generous } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_GENEROUS + } + ### Lazy likes. + modifier = { + add = 20 + scope:recipient = { has_trait = lazy } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_LAZY + } + ### Diligent hates. + modifier = { + add = -40 + scope:recipient = { has_trait = diligent } + always = scope:chess_gold + desc = BG_OPINION_GOLD_TRAIT_DILIGENT + } + ## Land: you need to stop buying new board games, Jesse. You're way too into them. + ### Profligate adores. + modifier = { + add = 60 + scope:recipient = { has_trait = profligate } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_PROFLIGATE + } + ### Arbitrary loves. + modifier = { + add = 40 + scope:recipient = { has_trait = arbitrary } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_ARBITRARY + } + ### Ambitious likes. + modifier = { + add = 20 + scope:recipient = { has_trait = ambitious } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_AMBITIOUS + } + ### Brave likes. + modifier = { + add = 20 + scope:recipient = { has_trait = brave } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_BRAVE + } + ### Craven dislikes. + modifier = { + add = -20 + scope:recipient = { has_trait = craven } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_CRAVEN + } + ### Content dislikes. + modifier = { + add = -20 + scope:recipient = { has_trait = content } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_CONTENT + } + ### Just loathes - this is *categorically* not how the feudal system, or really any form of loyalty, is supposed to work. + modifier = { + add = -60 + scope:recipient = { has_trait = just } + always = scope:chess_land + desc = BG_OPINION_LAND_TRAIT_JUST + } + ### Greedy deliberately left off; they don't want to risk their own stuff but they *do* want to nab everyone else's. + # Relationships + ## Mildly positive relationships like to play against each other. + modifier = { + add = 20 + scope:recipient = { + has_any_mild_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + desc = BG_OPINION_RELATIONSHIP_GOOD_MILD + } + ## Positive relationships like to play against each other. + modifier = { + add = 40 + scope:recipient = { + has_any_only_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + desc = BG_OPINION_RELATIONSHIP_GOOD_MODERATE + } + ## Really positive relationships love to play against each other. + modifier = { + add = 60 + scope:recipient = { + has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + desc = BG_OPINION_RELATIONSHIP_GOOD_MAJOR + } + ## Negative relationships dislike playing each other... + ### ... either mildly... + modifier = { + add = -20 + scope:recipient = { + has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + NOT = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + } + desc = BG_OPINION_RELATIONSHIP_BAD_MILD + } + ### ... moderately... + modifier = { + add = -40 + scope:recipient = { + has_any_only_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + NOT = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + } + desc = BG_OPINION_RELATIONSHIP_BAD_MODERATE + } + ### ... or majorly... + modifier = { + add = -60 + scope:recipient = { + has_any_worst_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + NOT = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + } + desc = BG_OPINION_RELATIONSHIP_BAD_MAJOR + } + ## ... unless they take their board games far too seriously, in which case, they're always down... + ### ... either mildly... + modifier = { + add = 20 + scope:recipient = { + has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + desc = BG_OPINION_RELATIONSHIP_BAD_SRSGMR_MILD + } + ### ... moderately... + modifier = { + add = 40 + scope:recipient = { + has_any_only_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + desc = BG_OPINION_RELATIONSHIP_BAD_SRSGMR_MODERATE + } + ### ... or majorly. + modifier = { + add = 60 + scope:recipient = { + has_any_worst_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + desc = BG_OPINION_RELATIONSHIP_BAD_SRSGMR_MAJOR + } + # Apply tier differences. + ## King -> Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value >= 4 + } + } + add = 15 + } + ## Duke -> Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value = 3 + } + } + add = 10 + } + ## Count -> Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value = 2 + } + } + add = 5 + } + ## King <- Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value = -2 + } + } + add = -10 + } + ## Duke <- Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value = -3 + } + } + add = -20 + } + ## Count <- Baron. + modifier = { + desc = AI_REFUSAL_RANK_DIFFERENCE + scope:actor = { + tier_difference = { + target = scope:recipient + value <= -4 + } + } + add = -30 + } + } + ## Performance-enhancement + ai_potential = { + OR = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + has_perk = befriend_perk + } + is_imprisoned = no + } + ai_target_quick_trigger = { adult = yes } # AI will only challenge adults + ai_targets = { + ai_recipients = scripted_relations + max = 5 + } + ai_targets = { + ai_recipients = family + max = 10 + } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + max = 10 + } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 360 + duchy = 240 + kingdom = 100 + empire = 100 + hegemony = 100 + } + ai_will_do = { + base = -50 + + # Everyone likes to play boardgames with people they like + opinion_modifier = { + opinion_target = scope:recipient + trigger = { + NOT = { culture = { has_cultural_parameter = may_challenge_to_board_games } } + } + } + + # Boardgame nerds like to challenge people they dislike... + opinion_modifier = { + opinion_target = scope:recipient + trigger = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + opinion = { + target = scope:recipient + value < 0 + } + } + + multiplier = -1 + } + + # ...but they ALSO like to play with people they like + opinion_modifier = { + opinion_target = scope:recipient + trigger = { + culture = { has_cultural_parameter = may_challenge_to_board_games } + opinion = { + target = scope:recipient + value > 0 + } + } + } + + # If you are my rival and my culture likes to play board games, I'll see you as a good opponent. + modifier = { + add = 50 + scope:actor = { + has_relation_rival = scope:recipient + culture = { has_cultural_parameter = may_challenge_to_board_games } + } + } + + # Aaaaand boredom. + modifier = { + add = 10 + scope:actor.days_of_continuous_peace >= 365 + } + modifier = { + add = 10 + scope:actor.days_of_continuous_peace >= 730 + } + modifier = { + add = 10 + scope:actor.days_of_continuous_peace >= 1095 + } + modifier = { + add = 10 + scope:actor.days_of_continuous_peace >= 1460 + } + modifier = { + add = 10 + scope:actor.days_of_continuous_peace >= 1825 + } + # Plus if scope:actor isn't at all interesting to scope:recipient, then tell them to just sit quietly. + modifier = { + factor = 0 + scope:recipient = { + NOR = { + is_of_major_or_minor_interest_trigger = { CHARACTER = scope:actor } + highest_held_title_tier >= tier_duchy + sub_realm_size >= 4 + } + } + } + } +} + +################################################## +# Purchase Truce +# by Ewan Cowhig Croft +################################################## + +# Wars are expensive, so why not purchase a little peace preemptively? +purchase_truce_interaction = { + interface_priority = 30 + category = interaction_category_diplomacy + common_interaction = yes + desc = purchase_truce_interaction_desc + icon = icon_retreat + + greeting = positive + notification_text = PURCHASE_TRUCE_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { years = 5 } + cooldown_against_recipient = { years = 10 } + + is_shown = { + scope:actor != scope:recipient + # Scope:actor needs to either be involved in certain struggle types or else have a specific perk. + scope:actor = { + is_landless_adventurer = no + + # If scope:recipient is a nomad and the actor is not, this is always available; otherwise, + # scope:actor needs to either be involved in certain struggle types or else have a specific perk. + OR = { + AND = { + scope:recipient = { government_has_flag = government_is_nomadic } + NOT = { government_has_flag = government_is_nomadic } + } + fp2_purchase_truce_interaction_soft_requirements_trigger = yes + } + + # if you are not independent you should not be able to purchase truce with other fellow vassals only + trigger_if = { + limit = { top_liege != this } + top_liege = scope:recipient.top_liege + } + } + # Scope:recipient must be landed, and neither over or under scope:actor. + scope:recipient = { + is_playable_character = yes + NOR = { + any_liege_or_above = { this = scope:actor } + any_vassal_or_below = { this = scope:actor } + } + } + } + + is_valid_showing_failures_only = { + # Scope:actor must be an available (adult or child). + scope:actor = { + gold >= pt_sum_small_value + is_available = yes + } + # Scope:recipient must be at least available. + scope:recipient = { is_available = yes } + # Make sure that scope:actor is going into this with a clean, no-recent/active/forbidden hostilities mindset. + scope:actor = { + NOR = { + # Involved characters can't be on opposite sides in an active war. + is_at_war_with = scope:recipient + # Allied characters aren't allowed to do this because it _should_ be redundant. Unless you're planning something. Which you shouldn't announce like that. + is_allied_to = scope:recipient + # And we should just disallow anyone who already has a truce with you, even though I guess you might technically want to replace it. + any_truce_holder = { this = scope:recipient } + } + } + #limit range for landless adventurers + trigger_if = { + limit = { + scope:actor = { + has_government = landless_adventurer_government + } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + } + + on_accept = { + # Notifications with most effects. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = purchase_truce_interaction.accept.actor.tt + left_icon = scope:recipient + show_as_tooltip = { + purchase_truce_interaction_work_out_truce_days_effect = { TARGET = scope:recipient } + } + } + show_as_tooltip = { purchase_truce_interaction_work_out_purchase_cost_effect = yes } + # Outside of the notification, since we'll send a separate one anyway, we want to point out the catalyst activation (if relevant). + show_as_tooltip = { purchase_truce_interaction_activate_catalyst_effect = yes } + } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = purchase_truce_interaction.accept.recipient.tt + left_icon = scope:actor + show_as_tooltip = { + purchase_truce_interaction_work_out_truce_days_effect = { TARGET = scope:actor } + } + } + } + # Then we apply the actual truce. + hidden_effect = { + scope:actor = { + purchase_truce_interaction_work_out_truce_days_effect = { TARGET = scope:recipient } + purchase_truce_interaction_activate_catalyst_effect = yes + # Variable used for checking if we should apply the "Recently Waged War" ai behavior in ai_acceptance modifiers, specifically in the Offer Vassalization interaction + if = { + limit = { always = scope:pt_sum_small } + add_to_bought_truce_list = { + TARGET = scope:recipient + DAYS = purchase_truce_interaction_truce_days_small_value + } + } + else_if = { + limit = { always = scope:pt_sum_large } + add_to_bought_truce_list = { + TARGET = scope:recipient + DAYS = purchase_truce_interaction_truce_days_large_value + } + } + else = { + add_to_bought_truce_list = { + TARGET = scope:recipient + DAYS = purchase_truce_interaction_truce_days_medium_value + } + } + } + purchase_truce_interaction_work_out_purchase_cost_effect = yes + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_purchased_truce.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = purchase_truce_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = minor_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = purchase_truce_interaction.decline.recipient.tt + left_icon = scope:actor + reverse_add_opinion = { + target = scope:actor + modifier = warmonger_opinion + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = minor_unity_loss + DESC = clan_unity_purchased_truce_refusal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # Send Options + ## Small Sum + send_option = { + is_shown = { always = yes } + is_valid = { + scope:actor = { gold >= pt_sum_small_value } + } + flag = pt_sum_small + localization = "PT_SUM_SMALL" + } + ## Medium Sum + send_option = { + is_shown = { + # We use the most expensive of scope:actor or scope:recipient's income, so we check both. + scope:actor = { + can_make_expensive_purchase_trigger = { PRICE = scope:actor.purchase_truce_interaction_medium_sum } + can_make_expensive_purchase_trigger = { PRICE = scope:recipient.purchase_truce_interaction_medium_sum } + } + } + is_valid = { + scope:actor = { gold >= pt_sum_medium_value } + } + flag = pt_sum_medium + starts_enabled = { always = yes } + localization = "PT_SUM_MEDIUM" + } + ## Large Sum + send_option = { + is_shown = { + # We use the most expensive of scope:actor or scope:recipient's income, so we check both. + scope:actor = { + can_make_expensive_purchase_trigger = { PRICE = scope:actor.purchase_truce_interaction_major_sum } + can_make_expensive_purchase_trigger = { PRICE = scope:recipient.purchase_truce_interaction_major_sum } + } + } + is_valid = { + scope:actor = { gold >= pt_sum_large_value } + } + flag = pt_sum_large + localization = "PT_SUM_LARGE" + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions. + base = 0 + + # Struggle + modifier = { + trigger_if = { + limit = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + } + } + trigger_else = { + always = no + } + add = { + value = 0 + if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_sign_truce_outside_war + } + has_character_flag = agenda_towards_escalation + } + } + add = -50 + } + else_if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_sign_truce_outside_war + } + } + } + add = 100 + } + } + desc = AI_STRUGGLE_INTENT + } + + # Factor up or down based on the sum offered. + ## Small. + modifier = { + add = -10 + always = scope:pt_sum_small + desc = PT_AMOUNT_OF_GOLD_OFFERED + } + ## Medium. + modifier = { + add = 25 + always = scope:pt_sum_medium + desc = PT_AMOUNT_OF_GOLD_OFFERED + } + ## Large. + modifier = { + add = 75 + always = scope:pt_sum_large + desc = PT_AMOUNT_OF_GOLD_OFFERED + } + ## Plus a bit of base-line acceptance if the AI's coffers are currently pretty anaemic. + modifier = { + add = 30 + gold <= scope:recipient.yearly_character_income + desc = PT_COULD_USE_SOME_POCKET_MONEY + } + # AI take opinion into account, but reduced so they'll at least occasionally accept from folks they dislike. + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + # Greedy AI like gold. + modifier = { + add = { + value = ai_greed + multiply = 2 + } + ai_greed >= 1 + desc = AI_VALUE_MODIFIER_GREED + } + # Boldness always plays a factor. + modifier = { + add = { + value = ai_boldness + multiply = -0.5 + } + NOT = { ai_boldness = 0 } + desc = AI_VALUE_MODIFIER_BOLDNESS + } + # Ambitious AI like freedom. + modifier = { + add = -50 + has_trait = ambitious + desc = PT_AI_LIKES_FREEDOM_TO_WAR_REASON + } + # AI who are in debt will take whatever windfalls they can. + modifier = { + add = { + value = debt_level + # Our first rank is 0, so we add one to always get a positive number. + add = 1 + multiply = 10 + } + debt_level >= 0 + desc = PT_AI_IS_IN_DEBT + } + # Pacifist AI are happy to avoid war. + modifier = { + add = 25 + faith = { has_doctrine_parameter = pacifist_opinion_active } + desc = PT_AI_IS_PACIFIST_FAITH + } + modifier = { + add = 25 + culture = { has_cultural_parameter = reduced_cost_for_conversion_to_pacifist_faith } + desc = PT_AI_IS_PACIFIST_CULTURE + } + # War likeliness. + ## This is primarily intended to mitigate conquest, invasion, and religious CBs, so we don't account for them. + ## Scope:recipient has some claim to scope:actor's lands. + modifier = { + add = -20 + any_claim = { + count = 1 + exists = holder + holder = scope:actor + } + desc = PT_AI_PERSONALLY_CLAIMS_YOUR_LAND + } + ## Scope:recipient has decent claim to scope:actor's lands. + modifier = { + add = -40 + OR = { + any_claim = { + count >= 2 + exists = holder + holder = scope:actor + } + any_claim = { + count = 1 + exists = holder + holder = scope:actor + save_temporary_scope_as = claim_temp + scope:recipient = { has_strong_claim_on = scope:claim_temp } + } + } + desc = PT_AI_PERSONALLY_CLAIMS_YOUR_LAND + } + ## Scope:recipient has strong claim to scope:actor's lands. + modifier = { + add = -60 + any_claim = { + count >= 2 + exists = holder + holder = scope:actor + save_temporary_scope_as = claim_temp + scope:recipient = { has_strong_claim_on = scope:claim_temp } + } + desc = PT_AI_PERSONALLY_CLAIMS_YOUR_LAND + } + ## Scope:recipient can de jure grab your land. + ### Dukes don't take much. + modifier = { + add = -30 + highest_held_title_tier = tier_duchy + purchase_truce_interaction_recipient_can_de_jure_war_actor_trigger = yes + scope:actor = { + any_sub_realm_county = { + count >= 3 + any_this_title_or_de_jure_above = { holder = scope:actor } + } + } + desc = PT_AI_DE_JURE_CLAIMS_YOUR_LAND + } + ### Kings need a lot more. + modifier = { + add = -30 + highest_held_title_tier = tier_kingdom + purchase_truce_interaction_recipient_can_de_jure_war_actor_trigger = yes + scope:actor = { + any_sub_realm_county = { + count >= 10 + any_this_title_or_de_jure_above = { holder = scope:actor } + } + } + desc = PT_AI_DE_JURE_CLAIMS_YOUR_LAND + } + ### Emperors take quite a bit to get fussed. + modifier = { + add = -30 + highest_held_title_tier = tier_empire + purchase_truce_interaction_recipient_can_de_jure_war_actor_trigger = yes + scope:actor = { + any_sub_realm_county = { + count >= 20 + any_this_title_or_de_jure_above = { holder = scope:actor } + } + } + desc = PT_AI_DE_JURE_CLAIMS_YOUR_LAND + } + # Relative power. + ## Scope:actor has far fewer levies than scope:recipient. + modifier = { + add = -30 + scope:actor.max_military_strength <= scope:recipient.purchase_truce_interaction_recipient_far_weaker_value + desc = PT_AI_RECIPIENT_IS_MUCH_STRONGER + } + ## Scope:actor has fewer levies than scope:recipient. + modifier = { + add = -10 + scope:actor.max_military_strength > scope:recipient.purchase_truce_interaction_recipient_far_weaker_value + scope:actor.max_military_strength <= scope:recipient.purchase_truce_interaction_recipient_somewhat_weaker_value + desc = PT_AI_RECIPIENT_IS_SOMEWHAT_STRONGER + } + ## Scope:actor has roughly equal levies with scope:recipient. + modifier = { + add = 10 + scope:actor.max_military_strength > scope:recipient.purchase_truce_interaction_recipient_somewhat_weaker_value + scope:actor.max_military_strength <= scope:recipient.purchase_truce_interaction_recipient_somewhat_stronger_value + desc = PT_AI_RECIPIENT_IS_ROUGHLY_EQUAL + } + ## Scope:actor has more levies than scope:recipient. + modifier = { + add = 25 + scope:actor.max_military_strength > scope:recipient.purchase_truce_interaction_recipient_somewhat_stronger_value + scope:actor.max_military_strength <= scope:recipient.purchase_truce_interaction_recipient_far_stronger_value + desc = PT_AI_RECIPIENT_IS_SOMEWHAT_WEAKER + } + ## Scope:actor has far more levies than scope:recipient. + modifier = { + add = 50 + scope:actor.max_military_strength > scope:recipient.purchase_truce_interaction_recipient_far_stronger_value + desc = PT_AI_RECIPIENT_IS_MUCH_WEAKER + } + } + ## Performance-enhancement + ai_potential = { + is_playable_character = yes + is_at_war = no + is_imprisoned = no + # Matches the regular minimum triggers. + OR = { + any_character_struggle = { involvement = involved } + has_perk = defensive_measures_perk + } + # Might actually be wurf evaluating the costs. + can_make_expensive_purchase_trigger = { PRICE = purchase_truce_interaction_small_sum } + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + max = 10 + } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_will_do = { + base = 0 + + # Some personalities & traits just don't want to fight. + ## Cravens (who aren't also ambitious). + modifier = { + add = 25 + has_trait = craven + NOT = { has_trait = ambitious } + } + ## Those with chronically low boldness (who aren't also ambitious). + modifier = { + add = 25 + ai_boldness <= very_high_negative_ai_value + NOT = { has_trait = ambitious } + } + ## Pacifists. + modifier = { + add = 25 + faith = { has_doctrine_parameter = pacifist_opinion_active } + } + modifier = { + add = 25 + culture = { has_cultural_parameter = reduced_cost_for_conversion_to_pacifist_faith } + } + ## Wrathful or ambitious characters don't like to bother. + modifier = { + add = -25 + has_trait = ambitious + } + modifier = { + add = -25 + has_trait = wrathful + } + ## Arbitrary characters don't get truces to begin with. + modifier = { + add = -50 + has_trait = arbitrary + } + ## We deliberately avoid warlike faiths *not* doing it; there's plenty of examples of such bought truces amongst these faiths, so we let them keep at it if they match other criteria. + # Various gradients of having money to burn. + ## You've got a goodly amount stashed away. + modifier = { + add = 50 + can_make_expensive_purchase_trigger = { PRICE = purchase_truce_interaction_medium_sum } + } + ## You're somewhat loaded. + modifier = { + add = 50 + can_make_expensive_purchase_trigger = { PRICE = purchase_truce_interaction_major_sum } + } + ## You're absolutely loaded. + modifier = { + add = 50 + can_make_expensive_purchase_trigger = { PRICE = purchase_truce_interaction_massive_sum } + } + # Force checks. + ## Try to buy truces from somewhat stronger realms... + modifier = { + add = 50 + scope:recipient.max_military_strength >= scope:actor.purchase_truce_interaction_recipient_somewhat_stronger_value + } + ## ... and much stronger realms. + modifier = { + add = 50 + scope:recipient.max_military_strength >= scope:actor.purchase_truce_interaction_recipient_far_stronger_value + } + + # Struggle + modifier = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_sign_truce_outside_war + } + has_character_flag = agenda_towards_escalation + } + } + add = -50 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_sign_truce_outside_war + } + } + } + add = 100 + } + } + } + # Finally, calculate factors. + ## Only buy truces from weaker/roughly-equal realms if you're craven have been at war forever. + modifier = { + factor = 0 + max_military_strength <= scope:actor.purchase_truce_interaction_recipient_somewhat_weaker_value + NOR = { + has_trait = craven + days_of_continuous_war <= 3650 + } + } + ## Never buy a truce from someone who actually can't declare war on you. + modifier = { + factor = 0 + scope:recipient = { + NOT = { has_any_cb_on = scope:actor } + } + } + ## Don't buy truces from people who are likely going to be dead soon, or if you yourself will die soon, since they'll be wasted. + modifier = { + factor = 0 + OR = { + health <= poor_health + scope:recipient = { health <= poor_health } + } + } + } +} + +################################################## +# Incite Revolts +# by Maxence Voleau +################################################## Updated for FP3 + +incite_revolts_interaction = { + interface_priority = 30 + category = interaction_category_hostile + common_interaction = yes + desc = incite_revolts_interaction_desc + icon = faction + + greeting = positive + + auto_accept = yes + + cost = { + gold = { + add = { + value = 0 + # Gold spent will provide 10x levies, e.g. 25 provides 250 - not automated yet + if = { + limit = { scope:small_investment_in_revolt = yes } + add = 25 + } + if = { + limit = { scope:medium_investment_in_revolt = yes } + add = 75 + } + if = { + limit = { scope:high_investment_in_revolt = yes } + add = 200 + } + } + } + } + + is_shown = { + scope:recipient != scope:actor + OR = { + scope:actor = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + OR = { + any_claim = { + holder = scope:recipient + } + has_relation_rival = scope:recipient + } + } + # Only available during Opportunity, Hostility and Tension phases + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_incite_revolts_interaction + # Can only target involved + is_secondary_character_involvement_involved_trigger = { CHAR = scope:recipient } + } + } + AND = { + scope:actor = { + has_trait = fp3_struggle_detractor + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + scope:recipient = { + any_character_struggle = { + is_struggle_type = persian_struggle + involvement = involved + } + } + } + scope:actor.domicile ?= { + has_domicile_parameter = can_use_incite_revolts + } + } + } + + is_valid_showing_failures_only = { + custom_description = { + text = at_least_one_county_with_neutral_negative_opinion + scope:recipient = { + any_sub_realm_county = { + count > 0 + holder = scope:recipient + county_opinion < 0 + NOR = { + has_county_modifier = small_investment_in_revolt_modifier + has_county_modifier = medium_investment_in_revolt_modifier + has_county_modifier = high_investment_in_revolt_modifier + } + } + } + } + } + + can_send = { + custom_tooltip = { + text = must_select_an_investment + OR = { + scope:actor = { is_ai = yes } # Temporary until we get a code fix + scope:small_investment_in_revolt = yes + scope:medium_investment_in_revolt = yes + scope:high_investment_in_revolt = yes + } + } + } + + send_options_exclusive = yes + + # Small investment + send_option = { + flag = small_investment_in_revolt + localization = small_investment + } + + # Medium investment + send_option = { + flag = medium_investment_in_revolt + localization = medium_investment + starts_enabled = { always = yes } + } + + # High investment + send_option = { + flag = high_investment_in_revolt + localization = high_investment + } + + on_accept = { + # Select the random county + hidden_effect = { + scope:recipient = { + random_sub_realm_county = { + limit = { + NOR = { + has_county_modifier = small_investment_in_revolt_modifier + has_county_modifier = medium_investment_in_revolt_modifier + has_county_modifier = high_investment_in_revolt_modifier + } + county_opinion < 0 + holder = scope:recipient + } + weight = { + base = 1 + # More likely to finance county of your own Faith or Culture + modifier = { + add = 2 + OR = { + faith = scope:actor.faith + culture = scope:actor.culture + } + } + # More likely to finance county prone to trigger populist factions + modifier = { + add = 5 + NAND = { + faith = scope:recipient.faith + culture = scope:recipient.culture + } + } + # More likely to finance county bordering your Realm + modifier = { + add = 5 + any_neighboring_county = { + holder = scope:actor + } + } + } + save_scope_as = chosen_county + } + } + } + + scope:actor = { + stress_impact = { + just = medium_stress_impact_gain + honest = medium_stress_impact_gain + trusting = medium_stress_impact_gain + greedy = minor_stress_impact_gain + } + if = { + limit = { + scope:actor = { + OR = { + has_relation_rival = scope:recipient + has_relation_nemesis = scope:recipient + } + } + } + stress_impact = { + vengeful = medium_stress_impact_loss + } + } + if = { + limit = { + scope:actor = { + is_vassal_of = scope:recipient + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + } + } + } + + # FP3 Polish (Hugo) + scope:actor = { + duel = { + skill = intrigue + value = scope:recipient.intrigue + + 10 = { # Failure + desc = incite_revolts_interaction_notif_failure + compare_modifier = { + value = scope:duel_value + multiplier = -1.5 + } + show_as_tooltip = { + if = { + limit = { scope:small_investment_in_revolt = yes } + custom_tooltip = apply_small_investment_in_revolt_on_random_county + } + else_if = { + limit = { scope:medium_investment_in_revolt = yes } + custom_tooltip = apply_medium_investment_in_revolt_on_random_county + } + else_if = { + limit = { scope:high_investment_in_revolt = yes } + custom_tooltip = apply_high_investment_in_revolt_on_random_county + } + reverse_add_opinion = { + target = scope:recipient + modifier = angry_opinion + opinion = -50 + } + } + + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_bad + title = incite_revolts_interaction_result.tt + left_icon = scope:chosen_county + right_icon = scope:recipient + + scope:chosen_county = { + if = { + limit = { scope:small_investment_in_revolt = yes } + add_county_modifier = { + modifier = small_investment_in_revolt_modifier + years = 10 + } + } + else_if = { + limit = { scope:medium_investment_in_revolt = yes } + add_county_modifier = { + modifier = medium_investment_in_revolt_modifier + years = 10 + } + } + else_if = { + limit = { scope:high_investment_in_revolt = yes } + add_county_modifier = { + modifier = high_investment_in_revolt_modifier + years = 10 + } + } + } + reverse_add_opinion = { + target = scope:recipient + modifier = angry_opinion + opinion = -50 + } + hidden_effect = { + scope:recipient = { + progress_towards_rival_effect = { + CHARACTER = scope:actor + REASON = fp2_progress_towards_rival_funded_revolt_against_me + OPINION = 0 + } + } + } + } + } + } + 10 = { # Success + desc = incite_revolts_interaction_notif_success + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + } + + show_as_tooltip = { + if = { + limit = { scope:small_investment_in_revolt = yes } + custom_tooltip = apply_small_investment_in_revolt_on_random_county + } + else_if = { + limit = { scope:medium_investment_in_revolt = yes } + custom_tooltip = apply_medium_investment_in_revolt_on_random_county + } + else_if = { + limit = { scope:high_investment_in_revolt = yes } + custom_tooltip = apply_high_investment_in_revolt_on_random_county + } + } + + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = incite_revolts_interaction_result.tt + left_icon = scope:chosen_county + + scope:chosen_county = { + if = { + limit = { scope:small_investment_in_revolt = yes } + add_county_modifier = { + modifier = small_investment_in_revolt_modifier + years = 10 + } + } + else_if = { + limit = { scope:medium_investment_in_revolt = yes } + add_county_modifier = { + modifier = medium_investment_in_revolt_modifier + years = 10 + } + } + else_if = { + limit = { scope:high_investment_in_revolt = yes } + add_county_modifier = { + modifier = high_investment_in_revolt_modifier + years = 10 + } + } + } + } + } + } + } + } + + # for landless adventurers, add the county to a variable list to unlock a unique cb + scope:actor = { + if = { + limit = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_medium_gain + } + add_to_variable_list = { + name = war_supported_counties_list + target = scope:chosen_county + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_forment_revolt.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_potential = { + short_term_gold >= medium_gold_value + OR = { + any_character_struggle = { + has_struggle_phase_parameter = unlocks_incite_revolts_interaction + involvement = involved + OR = { + is_struggle_phase = struggle_iberia_phase_opportunity + is_struggle_phase = struggle_iberia_phase_hostility + } + } + any_character_struggle = { + is_struggle_type = persian_struggle + involvement = involved + } + domicile ?= { + has_domicile_parameter = can_use_incite_revolts + } + } + } + + ai_targets = { + # For the AI, we limit it to neighboring_rulers + ai_recipients = neighboring_rulers + } + + ai_will_do = { + base = -50 # Let's limit it to specific character to avoid pure chaos + + ############### + ## BASE + ############### + + # ai values + modifier = { + ai_vengefulness > 0 + add = ai_vengefulness + } + modifier = { + add = { + value = ai_compassion + multiply = -1 + } + } + + modifier = { + add = { + value = ai_honor + multiply = -1 + } + } + + # intrigue skill points + modifier = { + add = { + value = intrigue + multiply = 3 + } + } + + # diff faith + modifier = { + add = 25 + faith != scope:recipient.faith + } + + # diff culture + modifier = { + add = 25 + + NOT = { + culture = { + OR = { + this = scope:recipient.culture + cultural_acceptance = { target = scope:recipient.culture value >= 90 } + } + } + } + } + + ############### + ## TRAITS + ############### + + # schemer + modifier = { + add = 25 + has_trait = schemer + } + + # intrigue education + modifier = { + add = 25 + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + } + } + + ################ + ## RELATIONSHIP + ################ + + # more likely to do it against rival or nemesis + modifier = { + add = 50 + scope:recipient = { + OR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + } + } + } + + # boost against liege for Ambitious + modifier = { + add = 50 + scope:actor = { + has_trait = ambitious + is_vassal_of = scope:recipient + } + } + + # never target your friends + modifier = { + add = -1000 + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_best_friend = scope:actor + } + } + } + } +} + +################################################## +# Contract Assistance +# by Joe Parkin +################################################## + +contract_assistance_interaction = { + category = interaction_category_diplomacy + interface_priority = 15 + common_interaction = yes + interface = interfere_in_war + special_interaction = interfere_in_war_interaction + popup_on_receive = yes + pause_on_receive = yes + + ai_maybe = yes + desc = contract_assistance_interaction_desc + icon = icon_gold + + greeting = positive + notification_text = contract_assistance_interaction_notification + + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Actor is Involved in Struggle + scope:actor = { + NOT = { government_has_flag = government_is_herder } + OR = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_contract_assistance_interaction + } + culture = { has_cultural_parameter = unlocks_contract_assistance } + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + # Recipient is Involved in Struggle, at war, and not at war with Actor + scope:recipient = { + trigger_if = { + limit = { + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_contract_assistance_interaction + } + } + } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_contract_assistance_interaction + } + } + is_at_war = yes + NOR = { + this = scope:actor + is_at_war_with = scope:actor + } + } + } + + has_valid_target = { + exists = scope:target + } + + has_valid_target_showing_failures_only = { + scope:target = { is_war_leader = scope:recipient } + } + + is_valid_showing_failures_only = { + scope:recipient = { + # Cannot demand gold from allies + NOT = { is_allied_to = scope:actor } + # Cannot rejoin a war you decided to leave + trigger_if = { + limit = { + any_character_war = { + has_variable_list = left_voluntarily + } + } + custom_tooltip = { + text = laamp_war_change_sides_interaction.left_voluntarily + is_target_in_variable_list = { + name = left_voluntarily + target = scope:actor + } + } + } + } + + # Recipient is not in (any) war against your liege(s) + trigger_if = { + limit = { exists = scope:actor.liege } + custom_description = { + text = join_war_interaction_recipient_warring_with_my_liege + subject = scope:recipient + scope:actor = { + NOT = { any_liege_or_above = { is_at_war_with = scope:recipient } } + } + } + } + + # Cannot join wars with raised armies + scope:actor = { + has_raised_armies = no + + trigger_if = { + limit = { + has_government = landless_adventurer_government + } + custom_tooltip = { + text = reinforce_soldiers_any_regiment_tt + maa_regiments_count >= 1 + } + } + } + + # Can only contract one war at a time + custom_tooltip = { + text = contract_assistance_war_already_contracted_tt + scope:actor = { NOT = { has_variable = owed_contract_assistance_war } } + } + + # Adventurers can't join wars in places they're exiled from. + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:recipient.capital_province + LAAMP = scope:actor + } + } + } + + # Sensible restrictions to keep CulTrads from making this OP. + scope:recipient = { + custom_tooltip = { + text = contract_assistance_tier_too_high_tt + OR = { + highest_held_title_tier = tier_county + highest_held_title_tier >= scope:actor.highest_held_title_tier + sub_realm_size >= scope:actor.sub_realm_size + } + } + } + scope:actor = { + NOT = { highest_held_title_tier >= tier_empire } + } + } + + can_be_picked = { + # Recipient is war leader in chosen war + scope:target = { + is_war_leader = scope:recipient + # Cannot contract against allies + trigger_if = { + limit = { + any_war_attacker = { this = scope:recipient } + } + NOT = { + any_war_defender = { is_allied_to = scope:actor } + } + } + trigger_else = { + NOT = { + any_war_attacker = { is_allied_to = scope:actor } + } + } + # not already in target war + custom_description = { + text = join_war_interaction_already_in_target_war + NOR = { + any_war_attacker = { this = scope:actor } + any_war_defender = { this = scope:actor } + } + } + } + # Liege checks + can_join_war_liege_vassal_check_trigger = { WARRIOR = scope:recipient JOINER = scope:actor } + } + + is_highlighted = { + scope:actor = { + has_realm_law = camp_purpose_mercenaries + } + } + on_accept = { + # Add Actor to Recipient's war + scope:target = { + hidden_effect = { set_called_to = scope:actor } + if = { + limit = { is_attacker = scope:recipient } + add_attacker = scope:actor + } + else = { add_defender = scope:actor } + } + # Actor effects + scope:actor = { + save_scope_as = contract_assistance_helper + set_variable = { + name = owed_contract_assistance_war + value = scope:target + } + set_variable = { + name = owed_contract_assistance_contribution + value = offer_assistance_interaction_war_contribution_value + } + set_variable = { + name = owed_contract_assistance_gold + value = scope:recipient.offer_assistance_interaction_gold_value + } + stress_impact = { + craven = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + + # Struggle Catalyst + if = { + limit = { + # Verify if vassal used to be independent + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_join_war_as_assisant + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_join_war_as_assisant + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_join_war_as_assisant + character = scope:actor + } + } + } + } + # Recipient effects + scope:recipient = { + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + custom_tooltip = contract_assistance_interaction_condition_tt + show_as_tooltip = { + pay_short_term_gold = { + target = scope:actor + gold = offer_assistance_interaction_gold_value + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_contract_assistance.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = minor_unity_gain + DESC = clan_unity_contract_assistance_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_accept = { + base = 0 # Reluctant to spend money without good reason + # Recipient already winning war + modifier = { + add = -50 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_winning_trigger = yes } + } + trigger_else = { + any_character_war = { + count = all # So predicted negative modifiers are treated seperately + fp2_struggle_contract_assistance_war_winning_trigger = yes + } + } + desc = OA_AI_WINNING_WAR_REASON + } + # Recipient losing war + modifier = { + add = 50 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_losing_trigger = yes } + } + trigger_else = { + any_character_war = { fp2_struggle_contract_assistance_war_losing_trigger = yes } + } + desc = OA_AI_LOSING_WAR_REASON + } + # Recipient already significantly outnumbers enemy + modifier = { + add = -50 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_outnumbering_trigger = yes } + } + trigger_else = { + any_character_war = { + count = all # So predicted negative modifiers are treated seperately + fp2_struggle_contract_assistance_war_outnumbering_trigger = yes + } + } + desc = OA_AI_OUTNUMBER_ENEMY_REASON + } + # Recipient is outnumbered + modifier = { + add = 50 + trigger_if = { + limit = { exists = scope:target } + scope:target = { + fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = yes + NOT = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + } + trigger_else = { + any_character_war = { + fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = yes + NOT = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + } + desc = OA_AI_OUTNUMBERED_MINOR_REASON + } + # Recipient is very outnumbered + modifier = { + add = 125 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + trigger_else = { + any_character_war = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + desc = OA_AI_OUTNUMBERED_REASON + } + # Recipient has low cash + modifier = { + add = { + value = -50 + if = { + limit = { + gold < 0 + } + add = -100 + } + if = { + limit = { + debt_level >= 2 + } + add = -200 + } + if = { # Very generous or vengeful characters *will* make poor decisions + limit = { + OR = { + ai_greed <= -50 + ai_vengefulness >= 50 + } + } + multiply = 0.5 + } + } + gold < offer_assistance_interaction_gold_value + desc = OA_AI_CANNOT_AFFORD_REASON + } + # Recipient has a lot of cash + modifier = { + add = { + value = 25 + if = { + limit = { + gold >= { + value = offer_assistance_interaction_gold_value + multiply = 2 + } + } + add = 50 + } + if = { + limit = { + gold >= { + value = offer_assistance_interaction_gold_value + multiply = 3 + } + } + add = 50 + } + } + gold >= offer_assistance_interaction_gold_value + desc = OA_AI_EXTRA_GOLD_REASON + } + # Actor's troops would be little help + modifier = { + add = -50 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_insufficient_trigger = yes } + } + trigger_else = { + any_character_war = { + count = all # So predicted negative modifiers are treated seperately + fp2_struggle_contract_assistance_war_insufficient_trigger = yes + } + } + desc = OA_AI_FEW_TROOPS_REASON + } + # Recipient is fighting a defensive war + modifier = { + add = 25 + trigger_if = { + limit = { exists = scope:target } + scope:target.casus_belli.primary_defender = scope:recipient + } + trigger_else = { + scope:recipient = { + any_character_war = { primary_defender = scope:recipient } + } + } + desc = OA_AI_DEFENSIVE_WAR_REASON + } + # Recipient is not interested in help for certain wars + modifier = { + add = -300 + exists = scope:target + scope:target = { + OR = { + using_cb = peasant_war + using_cb = fp2_border_raid + } + } + desc = OA_AI_UNINTERESTED_WAR_REASON + } + modifier = { + add = { + value = scope:actor.martial + multiply = 2 + } + scope:actor = { martial >= 12 } + desc = OA_AI_MARTIAL_REASON + } + modifier = { + add = -50 + scope:actor = { has_character_flag = fp2_contract_assistance_failure } + desc = OA_AI_FAILURE_REASON + } + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.25 + desc = AI_OPINION_REASON + } + + modifier = { + add = { + value = ai_greed + multiply = -0.2 + } + ai_greed <= 0.5 + desc = AI_VALUE_MODIFIER_GREED + } + + modifier = { + add = { + value = ai_boldness + multiply = -0.2 + } + NOT = { ai_boldness = 0 } + desc = AI_VALUE_MODIFIER_BOLDNESS + } + + modifier = { + add = 50 + desc = camp_purpose_mercenaries_reason + scope:actor = { + has_realm_law = camp_purpose_mercenaries + } + } + # Allegiances + # fp2_contracting_ally_modifier = { + # WARMONGER = scope:recipient + # WARJOINER = scope:actor + # } + } + + ai_potential = { + is_imprisoned = no + is_at_war = no + ai_boldness >= -25 + current_military_strength >= 500 + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = neighboring_rulers + } + + ai_set_target = { + scope:recipient = { + ordered_character_war = { #We offer our services for the war where the character is losing the most + limit = { + is_war_leader = prev + NOR = { + any_war_attacker = { this = scope:actor } + any_war_defender = { this = scope:actor } + } + save_temporary_scope_as = target + can_join_war_liege_vassal_check_trigger = { WARRIOR = scope:recipient JOINER = scope:actor } + } + order_by = { + value = 0 + add = { + if = { + limit = { any_war_attacker = { this = scope:recipient } } + subtract = attacker_war_score + } + else = { + subtract = defender_war_score + } + } + } + save_scope_as = target + } + } + } + + ai_targets = { + ai_recipients = peer_vassals + } + # We need a quite high frequency as wars do not last forever + ai_frequency_by_tier = { + barony = 0 + county = 24 + duchy = 24 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_will_do = { + base = 0 + + modifier = { # Increase chance if recipient is losing a war + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_losing_trigger = yes } + } + add = 25 + } + + modifier = { # Increase chance with amount of gold of recipient over interaction cost + factor = offer_assistance_interaction_gold_modifier_value + } + + modifier = { # Increase chance if likes recipient more than enemy + scope:actor = { + save_temporary_opinion_value_as = { + name = contract_assistance_actor_opinion + target = scope:recipient + } + } + trigger_if = { + limit = { exists = scope:target } + scope:target = { + any_war_participant = { + is_leader_in_war = scope:target + this != scope:recipient + reverse_opinion = { + target = scope:actor + value < scope:contract_assistance_actor_opinion + } + } + } + } + add = 25 + } + + modifier = { # Increase chance for family + scope:recipient = { + OR = { + dynasty = scope:actor.dynasty + is_consort_of = scope:actor + } + } + add = 25 + } + + modifier = { # Decrease chance if army is small + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_insufficient_trigger = yes } + } + add = -50 + } + + modifier = { # Increase chance for rivalry + trigger_if = { + limit = { exists = scope:target } + scope:target = { + any_war_participant = { + is_leader_in_war = scope:target + this != scope:recipient + has_relation_rival = scope:actor + } + } + } + add = 25 + } + + # Higher chance to target a human player + modifier = { + scope:recipient = { is_ai = no } + factor = 2 + } + } +} + +################################################## +# Request Contract Assistance +# by Maxence Voleau +################################################## + +request_contract_assistance_interaction = { + category = interaction_category_diplomacy + interface_priority = 15 + common_interaction = yes + interface = call_ally + special_interaction = call_ally_interaction + popup_on_receive = yes + pause_on_receive = yes + + ai_maybe = yes + desc = request_contract_assistance_interaction_desc + icon = icon_gold + + greeting = positive + notification_text = request_contract_assistance_interaction_notification + + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Actor is Involved in Struggle + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_contract_assistance_interaction + } + is_at_war = yes + NOR = { + this = scope:recipient + is_at_war_with = scope:recipient + } + } + # Recipient is Involved in Struggle, at war, and not at war with Actor + scope:recipient = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_contract_assistance_interaction + } + } + } + + has_valid_target = { + exists = scope:target + } + + has_valid_target_showing_failures_only = { + scope:target = { + is_war_leader = scope:actor + + # Cannot contract against allies + trigger_if = { + limit = { + any_war_attacker = { this = scope:recipient } + } + NOT = { + any_war_defender = { is_allied_to = scope:actor } + } + } + trigger_else = { + NOT = { + any_war_attacker = { is_allied_to = scope:actor } + } + } + } + + # Adventurers can't join wars in places they're exiled from. + trigger_if = { + limit = { + scope:actor = { top_liege != this } + } + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:actor.capital_province + LAAMP = scope:recipient + } + } + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + # Cannot demand gold from allies + NOT = { is_allied_to = scope:actor } + } + # Actor is not in (any) war against Recipient's liege(s) + trigger_if = { + limit = { exists = scope:recipient.liege } + custom_description = { + text = join_war_interaction_recipient_warring_with_my_liege + subject = scope:actor + scope:recipient = { + NOT = { + any_liege_or_above = { is_at_war_with = scope:actor } + } + } + } + } + + # Cannot join wars with raised armies + scope:recipient = { has_raised_armies = no } + + # Can only contract one war at a time + custom_tooltip = { + text = contract_assistance_war_already_contracted_tt + scope:recipient = { + NOT = { has_variable = owed_contract_assistance_war } + } + } + } + + can_be_picked = { + # Recipient is war leader in chosen war + scope:target = { + is_war_leader = scope:actor + # not already in target war + custom_description = { + text = join_war_interaction_already_in_target_war + NOR = { + any_war_attacker = { this = scope:recipient } + any_war_defender = { this = scope:recipient } + } + } + } + # Liege checks + can_join_war_liege_vassal_check_trigger = { WARRIOR = scope:actor JOINER = scope:recipient } + } + + on_accept = { + # Add Actor to Recipient's war + scope:target = { + hidden_effect = { set_called_to = scope:recipient } + if = { + limit = { is_attacker = scope:actor } + add_attacker = scope:recipient + } + else = { add_defender = scope:recipient } + } + # Actor effects + scope:recipient = { + save_scope_as = contract_assistance_helper + set_variable = { + name = owed_contract_assistance_war + value = scope:target + } + set_variable = { + name = owed_contract_assistance_contribution + value = offer_assistance_interaction_war_contribution_value + } + set_variable = { + name = owed_contract_assistance_gold + value = offer_assistance_interaction_gold_value + } + stress_impact = { + craven = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + + + # Struggle Catalyst + if = { + limit = { + # Verify if vassal used to be independent + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_join_war_as_assisant + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_join_war_as_assisant + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_join_war_as_assisant + character = scope:recipient + } + } + } + } + # Recipient effects + scope:actor = { + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + custom_tooltip = request_contract_assistance_interaction_condition_tt + show_as_tooltip = { + pay_short_term_gold = { + target = scope:recipient + gold = offer_assistance_interaction_gold_value + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_loss + DESC = clan_unity_request_assistance.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = minor_unity_gain + DESC = clan_unity_request_assistance_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_accept = { + base = 0 # Reluctant to spend money without good reason + + # Recipient has low cash + modifier = { + add = { + value = 25 + if = { + limit = { + gold < 0 + } + add = { + value = 25 + multiply = debt_level + } + } + if = { # Very generous or vengeful characters *will* make poor decisions + limit = { + OR = { + ai_greed <= -50 + ai_vengefulness >= 50 + } + } + multiply = 0.5 + } + } + desc = AI_VALUE_MODIFIER_GREED + } + # Recipient has a lot of cash + modifier = { + add = { + value = -25 + if = { + limit = { + gold >= { + value = offer_assistance_interaction_gold_value + multiply = 2 + } + } + add = -50 + } + if = { + limit = { + gold >= { + value = offer_assistance_interaction_gold_value + multiply = 3 + } + } + add = -50 + } + } + gold >= offer_assistance_interaction_gold_value + desc = OA_AI_EXTRA_GOLD_REASON + } + # Recipient is not interested in help for certain wars + modifier = { + add = -500 + exists = scope:target + scope:target = { + OR = { + using_cb = peasant_war + using_cb = fp2_border_raid + } + } + desc = OA_AI_UNINTERESTED_WAR_REASON + } + modifier = { + add = { + value = scope:actor.martial + multiply = 2 + } + scope:actor = { martial >= 12 } + desc = OA_AI_MARTIAL_REASON + } + modifier = { + add = -50 + scope:recipient = { has_character_flag = fp2_contract_assistance_failure } + desc = OA_AI_FAILURE_REASON + } + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.25 + desc = AI_OPINION_REASON + } + + modifier = { + add = { + value = ai_greed + multiply = 0.2 + } + ai_greed <= 0.5 + desc = AI_VALUE_MODIFIER_GREED + } + + modifier = { + add = { + value = ai_boldness + multiply = 0.2 + } + NOT = { ai_boldness = 0 } + desc = AI_VALUE_MODIFIER_BOLDNESS + } + + # Allegiances + fp2_contracting_ally_modifier = { + WARMONGER = scope:actor + WARJOINER = scope:recipient + } + } + + ai_potential = { + # the AI cannot use it for now so let's block it + is_imprisoned = no + is_at_war = no + gold >= ai_war_chest_desired_gold_value + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = neighboring_rulers + } + + ai_set_target = { + scope:actor = { + ordered_character_war = { #We offer our services for the war where the character is losing the most + limit = { + is_war_leader = prev + NOR = { + any_war_attacker = { this = scope:recipient } + any_war_defender = { this = scope:recipient } + } + save_temporary_scope_as = target + can_join_war_liege_vassal_check_trigger = { WARRIOR = scope:actor JOINER = scope:recipient } + } + order_by = { + value = 0 + add = { + if = { + limit = { any_war_attacker = { this = scope:actor } } + subtract = attacker_war_score + } + else = { + subtract = defender_war_score + } + } + } + save_scope_as = target + } + } + } + + ai_targets = { + ai_recipients = peer_vassals + } + ai_frequency_by_tier = { + barony = 0 + county = 48 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 0 + } + + ai_will_do = { + base = 0 + + modifier = { # AI is losing the war + trigger_if = { + limit = { exists = scope:target } + scope:target = { + trigger_if = { + limit = { + scope:actor = { is_attacker_in_war = prev } + } + defender_war_score >= offer_assistance_interaction_already_losing_value + } + trigger_else = { attacker_war_score >= offer_assistance_interaction_already_losing_value } + } + } + add = 15 + } + + modifier = { # Increase chance for asking family + scope:recipient = { + OR = { + dynasty = scope:actor.dynasty + is_consort_of = scope:actor + } + } + factor = 2 + } + + modifier = { # Decrease chance if army is small + trigger_if = { + limit = { exists = scope:target } + scope:target = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + scope:actor.max_military_strength < war_defender_total_strength_tenth_value + } + trigger_else = { scope:actor.max_military_strength < war_attacker_total_strength_tenth_value } + } + } + add = -50 + } + + modifier = { # Increase chance for rivalry + trigger_if = { + limit = { exists = scope:target } + scope:target = { + any_war_participant = { + is_leader_in_war = scope:target + this != scope:actor + has_relation_rival = scope:recipient + } + } + } + add = 25 + } + + modifier = { # AI is extremely rich + short_term_gold >= ai_war_chest_desired_gold_value + add = 50 + } + } +} + +################################################## +# Enforce Truce +# by Joe Parkin +################################################## + +enforce_truce_interaction = { + category = interaction_category_diplomacy + interface_priority = 30 + common_interaction = yes + interface = interfere_in_war + special_interaction = interfere_in_war_interaction + popup_on_receive = yes + desc = enforce_truce_interaction_desc + icon = icon_retreat + + greeting = positive + notification_text = enforce_truce_interaction_notification + + cooldown = { years = 5 } + + is_shown = { + OR = { + # During the Struggle + AND = { + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_enforce_truces_interaction + + } + primary_title.tier >= tier_duchy + } + scope:recipient = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_enforce_truces_interaction + + } + tier_difference = { + target = scope:actor + value <= 0 + } + } + } + # Comrpomise ending + AND = { + scope:actor = { + primary_title.tier >= tier_duchy + exists = house + house = { + has_house_modifier = fp2_struggle_compromise_house_reward_modifier + } + } + scope:recipient = { # Primary title in Iberia + exists = house + house = { + has_house_modifier = fp2_struggle_compromise_house_reward_modifier + } + tier_difference = { + target = scope:actor + value <= 0 + } + } + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + is_at_war = yes + trigger_if = { + limit = { + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_enforce_truces_interaction + is_secondary_character_involvement_involved_trigger = { CHAR = scope:recipient } + } + } + } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_enforce_truces_interaction + } + } + trigger_else = { + exists = house + house = { + has_house_modifier = fp2_struggle_compromise_house_reward_modifier + } + } + + custom_tooltip = { + text = fp2_enforce_truce_liege_or_independent_tt + OR = { + top_liege = this + top_liege = scope:actor.top_liege + any_character_war = { + primary_attacker = { + NOR = { + this = scope:recipient + this = scope:actor + } + OR = { + top_liege = this + top_liege = scope:actor.top_liege + } + } + } + any_character_war = { + primary_defender = { + NOR = { + this = scope:recipient + this = scope:actor + } + OR = { + top_liege = this + top_liege = scope:actor.top_liege + } + } + } + } + } + } + } + + can_be_picked = { + # Recipient is war leader in chosen war + exists = scope:target + scope:target = { + is_war_leader = scope:recipient + is_civil_war = no + NOT = { using_cb = fp2_border_raid } + trigger_if = { + limit = { + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + } + trigger_if = { + limit = { primary_attacker = scope:recipient } + primary_defender = { fp2_struggle_enforce_truce_war_leader_trigger = yes } + } + trigger_else = { + primary_attacker = { fp2_struggle_enforce_truce_war_leader_trigger = yes } + } + } + trigger_else = { + scope:recipient = { + capital_county.title_province = { geographical_region = world_europe_west_iberia } + } + } + + } + } + + on_accept = { + # End war and apply opinion/stress + if = { + limit = { exists = scope:target } + scope:target = { + primary_attacker = { save_scope_as = truce_1 } + primary_defender = { save_scope_as = truce_2 } + } + show_as_tooltip = { + scope:truce_1 = { add_prestige = minor_prestige_loss } + scope:truce_2 = { add_prestige = minor_prestige_loss } + } + scope:actor = { + fp2_enforce_truce_opinion_effect = yes + # Best format for interaction interface + show_as_tooltip = { + scope:truce_1 = { + add_truce_one_way = { + character = scope:truce_2 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + } + scope:truce_2 = { + add_truce_one_way = { + character = scope:truce_1 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + } + } + custom_tooltip = fp2_enforce_truce_peacemaker_tt + hidden_effect = { + add_truce_one_way = { + character = scope:target.primary_attacker + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + add_truce_one_way = { + character = scope:target.primary_defender + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + # Best format for toast + send_interface_message = { + type = event_truce_neutral + title = enforce_truce_interaction_actor_toast + left_icon = scope:truce_1 + right_icon = scope:truce_2 + show_as_tooltip = { fp2_enforce_truce_opinion_effect = yes } + custom_tooltip = fp2_enforce_truce_other_tt + custom_tooltip = fp2_enforce_truce_peacemaker_tt + } + } + } + hidden_effect = { + scope:truce_1 = { + send_interface_message = { + type = event_truce_neutral + title = enforce_truce_interaction_toast + left_icon = scope:actor + right_icon = scope:truce_2 + add_prestige = minor_prestige_loss + show_as_tooltip = { + scope:target = { end_war = white_peace } + add_truce_both_ways = { + character = scope:truce_2 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + scope:actor = { + add_truce_one_way = { + character = scope:truce_1 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + } + } + stress_impact = { + wrathful = minor_stress_impact_gain + brave = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + } + scope:truce_2 = { + send_interface_message = { + type = event_truce_neutral + title = enforce_truce_interaction_toast + left_icon = scope:actor + right_icon = scope:truce_1 + add_prestige = minor_prestige_loss + show_as_tooltip = { + scope:target = { end_war = white_peace } + add_truce_both_ways = { + character = scope:truce_1 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + scope:actor = { + add_truce_one_way = { + character = scope:truce_2 + years = fp2_enforce_truce_duration_value + name = TRUCE_ENFORCE_TRUCE + } + } + } + stress_impact = { + wrathful = minor_stress_impact_gain + brave = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + } + } + scope:target = { end_war = white_peace } + if = { + limit = { + scope:actor = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_truce_was_enforced + CHAR = scope:target + } + } + } + } + every_character_struggle = { + involvement = involved + activate_struggle_catalyst = { + catalyst = catalyst_truce_was_enforced + character = scope:actor + } + } + + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_enforce_truce.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = medium_unity_loss + DESC = clan_unity_enforce_truce_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_accept = { + base = -50 # Reluctant to end war without reason + # Recipient only just begun + modifier = { + add = -25 + trigger_if = { + limit = { exists = scope:target } + scope:target.war_days < 180 + } + trigger_else = { always = no } + desc = ET_AI_WAR_NEW_REASON + } + # Recipient drags on + modifier = { + add = 25 + trigger_if = { + limit = { exists = scope:target } + scope:target.war_days > 1095 + } + trigger_else = { always = no } + desc = ET_AI_WAR_OLD_REASON + } + # Recipient is defender + modifier = { + add = 25 + trigger_if = { + limit = { exists = scope:target } + scope:recipient = scope:target.primary_defender + } + trigger_else = { always = no } + desc = OA_AI_DEFENSIVE_WAR_REASON + } + # Recipient drags on + modifier = { + add = 25 + scope:recipient = { is_allied_to = scope:actor } + desc = ET_AI_ALLY_REASON + } + # Recipient is vassal + modifier = { + add = 25 + scope:recipient = { target_is_liege_or_above = scope:actor } + desc = ET_AI_LIEGE_REASON + } + # Recipient is losing + modifier = { + add = 25 + trigger_if = { + limit = { exists = scope:target } + trigger_if = { + limit = { scope:recipient = scope:target.primary_defender } + scope:target = { attacker_war_score >= fp2_enforce_truce_war_score_value } + } + trigger_else = { + scope:target = { defender_war_score >= fp2_enforce_truce_war_score_value } + } + } + trigger_else = { always = no } + desc = OA_AI_LOSING_WAR_REASON + } + # Recipient is very outnumbered + modifier = { + add = 25 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + trigger_else = { + any_character_war = { fp2_struggle_contract_assistance_war_outnumbered_trigger = yes } + } + desc = OA_AI_OUTNUMBERED_REASON + } + # Recipient is very outnumbered + modifier = { + add = -25 + trigger_if = { + limit = { exists = scope:target } + scope:target = { fp2_struggle_contract_assistance_war_outnumbering_trigger = yes } + } + trigger_else = { + any_character_war = { fp2_struggle_contract_assistance_war_outnumbering_trigger = yes } + } + desc = OA_AI_OUTNUMBER_ENEMY_REASON + } + # Actor cannot enforce truce + modifier = { + add = -50 + trigger_if = { + limit = { exists = scope:target } + OR = { + scope:target.war_attacker_total_strength_halved_value > scope:actor.max_military_strength + scope:target.war_defender_total_strength_halved_value > scope:actor.max_military_strength + } + } + trigger_else = { always = no } + desc = ET_AI_SMALL_ARMY_REASON + } + # Recipient holy war + modifier = { + add = -25 + trigger_if = { + limit = { exists = scope:target } + scope:recipient = { + NOT = { has_trait = cynical } + } + scope:target = { + OR = { + using_cb = minor_religious_war + using_cb = religious_war + using_cb = major_religious_war + } + } + } + trigger_else = { always = no } + desc = ET_AI_HOLY_WAR_REASON + } + # Actor is religious head + modifier = { + add = 25 + scope:recipient.faith.religious_head = scope:actor + desc = ET_AI_HOF_REASON + } + # Dynasty head + modifier = { + add = 50 + scope:recipient.dynasty.dynast = scope:actor + desc = ET_AI_DYNAST_REASON + } + # House head + modifier = { + add = 25 + scope:recipient.dynasty.dynast != scope:actor + scope:recipient.house.house_head = scope:actor + desc = ET_AI_HOUSE_HEAD_REASON + } + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + # Honor factor + ai_value_modifier = { + ai_boldness = -0.5 + max = 0 + } + } + + ai_potential = { + is_imprisoned = no + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + max = 15 + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 24 + empire = 24 + hegemony = 24 + } +} + +################################################## +# Bargain Fealty +# by Joe Parkin +################################################## + +bargain_fealty_interaction = { + category = interaction_category_diplomacy + desc = bargain_fealty_interaction_desc + interface_priority = 60 + interface = call_ally + special_interaction = call_ally_interaction + popup_on_receive = yes + pause_on_receive = yes + + icon = icon_vassal + greeting = positive + notification_text = bargain_fealty_interaction_notification + + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Actor is Involved in Struggle + scope:actor = { + any_character_struggle = { + involvement = involved + struggle_can_access_unlocks_bargain_fealty_interaction_trigger = yes + } + top_liege = this + is_at_war = yes + any_character_war = { + is_war_leader = prev + primary_defender = prev + } + trigger_if = { + limit = { + scope:recipient = { + is_landless_ruler = no + } + } + tier_difference = { + target = scope:recipient + value <= -1 + } + } + trigger_else = { + tier_difference = { + target = scope:recipient + value <= -2 + } + } + } + # Recipient is not at war with Actor + scope:recipient = { + any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:actor } + primary_title = { is_mercenary_company = no } + NOR = { + this = scope:actor + is_at_war_with = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_bargain_fealty_interaction + } + } + } + + can_be_picked = { + # Actor is war leader in chosen war + exists = scope:target + scope:target = { + is_war_leader = scope:actor + primary_defender = scope:actor + custom_tooltip = { + text = bargain_fealty_border_raid_tt + NOT = { using_cb = fp2_border_raid } + } + custom_tooltip = { + text = bargain_fealty_struggle_clash_tt + NOT = { using_cb = county_struggle_cb } + } + } + # Actor is not involved in a war involving Recipient + joiner_not_already_in_another_war_with_any_target_war_participants_trigger = { + WARRIOR = scope:actor + JOINER = scope:recipient + } + } + + on_accept = { + if = { + limit = { exists = scope:target } + # Add Recipient to Actor's war + scope:target = { + hidden_effect = { set_called_to = scope:recipient } + if = { + limit = { is_attacker = scope:actor } + add_attacker = scope:recipient + } + else = { add_defender = scope:recipient } + } + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + } + scope:actor = { + change_liege = { + liege = scope:recipient + change = scope:change + } + resolve_title_and_vassal_change = scope:change + } + # Actor effects + scope:actor = { + stress_impact = { + arrogant = medium_stress_impact_gain + craven = medium_stress_impact_gain + } + } + # Recipient effects + scope:recipient = { + stress_impact = { + greedy = medium_stress_impact_gain + craven = medium_stress_impact_gain + } + } + } + else = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_neutral + title = war_ended_before_response + left_icon = scope:recipient + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_bargained_fealty.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = minor_unity_loss + DESC = clan_unity_bargain_fealty_refusal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + ai_accept = { + base = 25 + # Recipient would be very outnumbered + modifier = { + add = -75 + exists = scope:target + scope:target = { fp2_bargain_fealty_war_outnumbered_trigger = yes } + desc = BF_AI_OUTNUMBERED_REASON + } + # Actor is same culture as recipient + modifier = { + add = -10 + scope:actor.culture != scope:recipient.culture + desc = BF_AI_DIFFERENT_CULTURE_REASON + } + # Actor is same faith as recipient + modifier = { + add = -15 + scope:actor.faith != scope:recipient.faith + desc = BF_AI_DIFFERENT_FAITH_REASON + } + # Actor is de jure vassal of recipient + modifier = { + add = 25 + scope:actor = { + any_held_title = { target_is_de_jure_liege_or_above = scope:recipient.primary_title } + } + desc = BF_AI_DE_JURE_REASON + } + # Actor is de jure vassal of recipient + modifier = { + add = 25 + scope:actor.dynasty = scope:recipient.dynasty + desc = BF_AI_SAME_DYNASTY_REASON + } + # Too big to be vassal + modifier = { + add = -50 + scope:actor.realm_size >= fp2_bargain_fealty_half_realm_size_value + desc = BF_AI_TOO_LARGE_REASON + } + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + ai_value_modifier = { + ai_boldness = 1 + max = 0 + } + + ai_value_modifier = { + ai_greed = 1 + max = 0 + } + + modifier = { + add = { + value = ai_greed + multiply = 2 + } + ai_greed >= 1 + desc = AI_VALUE_MODIFIER_GREED + } + + modifier = { + add = { + value = ai_boldness + multiply = 2 + } + NOT = { ai_boldness = 0 } + desc = AI_VALUE_MODIFIER_BOLDNESS + } + } + ai_will_do = { + base = 5 + modifier = { + add = 20 + any_character_war = { + is_war_leader = prev + primary_defender = prev + NOR = { + using_cb = fp2_border_raid + using_cb = county_struggle_cb + } + casus_belli = { + any_target_title = { holder = scope:actor } + } + } + } + modifier = { + factor = 2 + any_character_war = { + is_war_leader = prev + primary_defender = prev + NOR = { + using_cb = fp2_border_raid + using_cb = county_struggle_cb + } + war_defender_total_strength_value < war_attacker_total_strength_halved_value + } + } + } + ai_potential = { is_imprisoned = no } + ai_target_quick_trigger = { adult = yes } + ai_targets = { ai_recipients = neighboring_rulers } + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } +} + +################################################## +# Invite Foreign Ruler to Feast / Hunt +# by Maxence Voleau +################################################## + +invite_foreign_ruler_to = { + interface_priority = 30 + category = interaction_category_diplomacy + common_interaction = yes + desc = invite_foreign_ruler_to_desc + icon = activity_feast + greeting = positive + notification_text = INVITE_FOREIGN_RULER_TO_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { years = 1 } + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Interaction deprecated by new activity planning system + always = no + + scope:actor != scope:recipient + # Scope:actor needs to either be involved in certain struggle types or else have a specific perk. + scope:actor = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle +} + } + # Scope:recipient must be landed, and neither over or under scope:actor. + scope:recipient = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + } + is_playable_character = yes + NOR = { + any_liege_or_above = { this = scope:actor } + any_vassal_or_below = { this = scope:actor } + } + } + } + + is_valid_showing_failures_only = { + # Scope:actor must be an available adult. + scope:actor = { is_available_adult = yes } + # Scope:recipient must be at least available. + scope:recipient = { is_available_adult = yes } + # Make sure that scope:actor is going into this with a clean, no-recent/active/forbidden hostilities mindset. + scope:actor = { + NOT = { + is_at_war_with = scope:recipient + # Involved characters can't be on opposite sides in an active war. + } + } + + # Verify that you can start one of the decision + # interaction deprecated by new activity planning system + # custom_description = { + # text = no_activity_available + # scope:actor = { + # OR = { + # can_execute_decision = start_hunt_decision + # can_execute_decision = host_feast_decision + # } + # } + # } + } + + on_accept = { + # Notifications with most effects. + if = { + limit = { scope:invite_to_hunt = yes } + scope:actor = { + set_variable = { + name = special_guest + value = scope:recipient + } + show_as_tooltip = { + remove_short_term_gold = hunt_activity_base_cost + } + send_interface_toast = { + type = event_toast_effect_good + title = invited_to_hunt.accept.actor.tt + left_icon = scope:recipient + progress_towards_friend_effect = { + REASON = friend_invited_to_hunt + CHARACTER = scope:recipient + OPINION = 0 + } + custom_tooltip = invite_foreign_ruler_to.hunt.tooltip + # interaction deprecated by new activity planning system + #execute_decision = start_hunt_decision + } + } + scope:recipient = { + send_interface_toast = { + title = invited_to_hunt.accept.recipient.tt + left_icon = scope:actor + } + } + } + else_if = { + limit = { scope:invite_to_feast = yes } + scope:actor = { + set_variable = { + name = special_guest + value = scope:recipient + } + show_as_tooltip = { + remove_short_term_gold = feast_activity_cost + } + send_interface_toast = { + type = event_toast_effect_good + title = invited_to_feast.accept.actor.tt + left_icon = scope:recipient + progress_towards_friend_effect = { + REASON = friend_invited_to_feast + CHARACTER = scope:recipient + OPINION = 0 + } + custom_tooltip = invite_foreign_ruler_to.feast.tooltip + # interaction deprecated by new activity planning system + #execute_decision = host_feast_decision + } + } + scope:recipient = { + send_interface_toast = { + title = invited_to_feast.accept.recipient.tt + left_icon = scope:actor + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_feast_invite.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = invite_foreign_ruler_to.decline.actor.tt + left_icon = scope:recipient + add_prestige = medium_prestige_loss + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = invite_foreign_ruler_to.decline.recipient.tt + left_icon = scope:actor + reverse_add_opinion = { + target = scope:actor + modifier = refusal_opinion + opinion = -50 + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:recipient + TARGET = scope:actor + VALUE = minor_unity_loss + DESC = clan_unity_feast_invite_decline.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # Send Options + ## Invite to Hunt + send_option = { + is_valid = { + scope:actor = { + # interaction deprecated by new activity planning system? + #can_execute_decision = start_hunt_decision + } + # as an AI, don't invite human players to Hunt as we are lacking interesting content + trigger_if = { + limit = { scope:actor = { is_ai = yes } } + scope:recipient = { is_ai = yes } + } + } + flag = invite_to_hunt + starts_enabled = { always = yes } + localization = "INVITE_TO_HUNT" + } + ## Invite to Feast + send_option = { + is_valid = { + scope:actor = { + # interaction deprecated by new activity planning system + #can_execute_decision = host_feast_decision + } + } + flag = invite_to_feast + starts_enabled = { always = yes } + localization = "INVITE_TO_FEAST" + } + # AI + ## Standard Acceptance stuff + ai_accept = { + # Try to make it 0 for most interactions. + base = 0 + + # more likely if lower rank than actor + modifier = { + add = 20 + scope:actor.primary_title.tier > primary_title.tier + desc = RANK_DIFFERENCE_REASON + } + + # less likely if that's the opposite + modifier = { + add = -20 + scope:actor.primary_title.tier < primary_title.tier + desc = RANK_DIFFERENCE_REASON + } + + # AI take opinion into account + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + # sociability plays a lot as well + ai_value_modifier = { + ai_sociability = 1 + } + + # is rival or nemesis + modifier = { + add = -50 + has_relation_rival = scope:actor + desc = WE_ARE_RIVALS + } + + modifier = { + add = -100 + has_relation_nemesis = scope:actor + desc = WE_ARE_NEMESES + } + + + # is friend + modifier = { + add = 25 + has_relation_friend = scope:actor + desc = WE_ARE_FRIENDS + } + + + # is best friend + modifier = { + add = 50 + has_relation_best_friend = scope:actor + desc = WE_ARE_BEST_FRIENDS + } + + modifier = { + add = 100 + OR = { + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + } + desc = WE_ARE_LOVERS + } + + # hunters love to hunt + modifier = { + add = 25 + scope:invite_to_hunt = yes + has_trait = lifestyle_hunter + desc = AI_RELEVANT_TRAITS + } + + # reveler loves feasts + modifier = { + add = 25 + scope:invite_to_feast = yes + has_trait = lifestyle_reveler + desc = AI_RELEVANT_TRAITS + } + + # Struggle agenda + modifier = { + desc = AI_STRUGGLE_INTENT + scope:invite_to_feast = yes + scope:recipient = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + } + } + NAND = { + scope:actor.faith = scope:recipient.faith + scope:actor.culture = scope:recipient.culture + } + add = { + value = 0 + if = { + limit = { + scope:actor = { + has_character_flag = agenda_towards_deescalation + } + } + add = 100 + } + else_if = { + limit = { + scope:actor = { + has_character_flag = agenda_towards_escalation + } + } + add = -100 + } + } + } + } + ### Performance-enhancement + #ai_potential = { + # is_playable_character = yes + # is_available_at_peace_ai_adult = yes + # is_imprisoned = no + # # Matches the regular minimum triggers. + # any_character_struggle = { involvement = involved } + # short_term_gold > standard_activity_cost + #} + # + #ai_target_quick_trigger = { adult = yes } + #ai_targets = { + # ai_recipients = neighboring_rulers + # ai_recipients = peer_vassals + # max = 10 + #} + ### Frequency + #ai_frequency = 60 + #ai_will_do = { + # base = 0 + # + # # sociability plays a lot as well + # ai_value_modifier = { + # ai_sociability = 1 + # } + # + # # hunters love to hunt + # modifier = { + # add = 25 + # scope:invite_to_hunt = yes + # has_trait = lifestyle_hunter + # } + # + # # small boost if no firends + # modifier = { + # add = 25 + # num_of_relation_friend = 0 + # } + # # reveler loves feasts + # modifier = { + # add = 25 + # scope:invite_to_feast = yes + # has_trait = lifestyle_reveler + # } + # + # # From Hunt decision + # ai_value_modifier = { + # ai_energy = 1 + # ai_greed = -0.5 + # ai_compassion = -0.5 + # } + # + # modifier = { + # add = 10 + # scope:invite_to_hunt = yes + # has_trait_rank = { + # trait = education_martial + # rank > 0 + # } + # } + # modifier = { + # add = 10 + # scope:invite_to_hunt = yes + # has_trait_rank = { + # trait = education_martial + # rank > 2 + # } + # } + # + # modifier = { + # scope:invite_to_hunt = yes + # add = 35 + # stress > low_stress + # } + # + # # Struggle agenda + # modifier = { + # scope:recipient = { + # any_character_struggle = { + # involvement = involved + # } + # } + # scope:actor = { + # any_character_struggle = { + # involvement = involved + # } + # } + # NAND = { + # scope:actor.faith = scope:recipient.faith + # scope:actor.culture = scope:recipient.culture + # } + # add = { + # value = 0 + # if = { + # limit = { + # scope:actor = { + # any_character_struggle = { + # phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + # + # } + # has_character_flag = agenda_towards_escalation + # } + # } + # add = -100 + # } + # else_if = { + # limit = { + # scope:actor = { + # any_character_struggle = { + # phase_has_catalyst = catalyst_invite_diff_faith_culture_to_feast + # } + # } + # } + # add = 100 + # } + # } + # } + #} +} diff --git a/common/character_interactions/06_ep3_laamp_interactions.txt b/common/character_interactions/06_ep3_laamp_interactions.txt new file mode 100644 index 00000000..5446f642 --- /dev/null +++ b/common/character_interactions/06_ep3_laamp_interactions.txt @@ -0,0 +1,7965 @@ +################## +# Purchase Land +# by Joe Parkin +################## + +purchase_land_interaction = { + category = interaction_category_laamp + interface_priority = 30 + icon = purchase_land_interaction + + desc = purchase_land_interaction_desc + target_type = title + target_filter = recipient_de_jure_titles + + cooldown_against_recipient = { years = 10 } + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:recipient = { top_liege != this } + scope:target = { + trigger_if = { + limit = { tier = tier_duchy } + scope:recipient.highest_held_title_tier = tier_duchy + } + trigger_else = { scope:recipient.highest_held_title_tier = tier_county } + } + } + desc = PURCHASE_LAND_PROPOSAL_FELLOW_VASSAL + } + triggered_desc = { + trigger = { + scope:target = { + trigger_if = { + limit = { tier = tier_duchy } + scope:recipient.highest_held_title_tier >= tier_kingdom + } + trigger_else = { scope:recipient.highest_held_title_tier >= tier_duchy } + } + } + desc = PURCHASE_LAND_PROPOSAL_LIEGE + } + desc = PURCHASE_LAND_PROPOSAL + } + } + + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + send_options_exclusive = no + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + scope:recipient = { + is_landed = yes + # Need to own the land/cannot directly buy a governorship (procure estate first) + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_japan_feudal + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + } + } + scope:recipient != scope:actor + } + + has_valid_target = { + custom_tooltip = { #prevent unwanted trigger tooltip + text = blank_line + scope:target ?= { + is_title_created = yes + holder = { + is_ai = yes + this = scope:recipient + } + OR = { #flatten the selection + tier = tier_duchy + tier = tier_county + } + NOR = { + this = scope:recipient.capital_county + this = scope:recipient.capital_county.duchy + } + } + } + } + + send_option = { + flag = offer_gold + localization = purchase_land_interaction_offer_gold + current_description = purchase_land_interaction_offer_gold_desc + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { + flag = offer_hook + is_valid = { + NOT = { + scope:recipient = { + has_usable_hook = scope:actor + } + } + } + localization = purchase_land_interaction_offer_hook + current_description = purchase_land_interaction_offer_hook_desc + } + + send_option = { + flag = vassal_obligation + is_shown = { + scope:recipient = { + government_has_flag = government_is_feudal + } + } + localization = purchase_land_interaction_offer_obligations + current_description = purchase_land_interaction_offer_obligations_desc + } + + can_be_picked_title = { + custom_tooltip = { + text = purchase_land_tier_tt + scope:target = { + tier >= tier_county + tier <= tier_duchy + } + } + custom_tooltip = { + text = purchase_land_capital_tt + scope:target != scope:recipient.capital_county + } + custom_tooltip = { + text = purchase_land_primary_tt + scope:target != scope:recipient.primary_title + } + custom_tooltip = { + text = purchase_land_duchy_tt + scope:target = { + trigger_if = { + limit = { tier = tier_duchy } + scope:actor = { + prestige_level >= 3 + } + } + } + } + trigger_if = { + limit = { exists = scope:target.holder } + scope:target.holder = scope:recipient + } + } + + is_valid_showing_failures_only = { + scope:actor = { top_liege = this } + scope:actor = { + prestige_level >= 2 + } + scope:actor = { + NOT = { + has_trait = gallowsbait + } + } + scope:actor = { + NOT = { + has_trait = gallivanter + } + } + scope:recipient = { is_at_war = no } + trigger_if = { # Can't purchase Baronies + limit = { + scope:target ?= { tier = tier_barony } + } + custom_description = { + text = purchase_land_barony_tt + always = no + } + } + trigger_if = { # Can't purchase Kingdoms or Empires + limit = { + scope:target ?= { tier >= tier_kingdom } + } + custom_description = { + text = purchase_land_kingdom_tt + always = no + } + } + trigger_if = { # Can't purchase HoF titles + limit = { + scope:target ?= { is_head_of_faith = yes } + } + custom_description = { + text = purchase_land_religious_tt + always = no + } + } + trigger_if = { # Can't purchase nf titles + limit = { + scope:target ?= { is_noble_family_title = yes } + } + custom_description = { + text = purchase_land_noble_family_tt + always = no + } + } + trigger_if = { # Can't purchase laamp titles + limit = { + scope:target ?= { has_variable = adventurer_creation_reason } + } + custom_description = { + text = purchase_land_landless_adventurer_tt + always = no + } + } + trigger_if = { + limit = { + scope:recipient = { + any_held_county = { count < 2 } + } + } + custom_description = { + text = purchase_land_minimum_county_tt + object = scope:recipient + always = no + } + } + scope:recipient = { + NOT = { has_strong_hook = scope:actor } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + # Adventurers can't join wars in places they're exiled from. + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:recipient.capital_province + LAAMP = scope:actor + } + } + } + } + + cost = { + gold = { + if = { + limit = { scope:target.tier = tier_county } + add = purchase_land_county_cost_value + } + else = { + add = purchase_land_duchy_cost_value + scope:target = { + every_de_jure_county = { + limit = { ep3_purchase_land_valid_county_trigger = yes } + add = purchase_land_county_cost_value + } + } + } + if = { + limit = { scope:offer_gold = yes } + multiply = 2 + } + } + } + + on_accept = { + scope:actor = { save_scope_as = adventurer } + scope:target = { + add_to_list = purchased_titles + if = { + limit = { tier = tier_duchy } + every_de_jure_county = { + limit = { ep3_purchase_land_valid_county_trigger = yes } + add_to_list = purchased_titles + } + } + } + ordered_in_list = { + list = purchased_titles + order_by = tier + save_scope_as = new_primary_title + } + save_scope_value_as = { + name = purchase_land_cost + value = { + every_in_list = { + list = purchased_titles + if = { + limit = { tier = tier_county } + add = purchase_land_county_cost_value + } + else_if = { + limit = { tier = tier_duchy } + add = purchase_land_duchy_cost_value + } + } + if = { + limit = { + scope:actor = { has_variable = ep3_grace_to_the_family_var } + } + multiply = 0.5 + } + if = { + limit = { + scope:offer_gold = yes + } + multiply = 2 + } + } + } + save_scope_value_as = { + name = purchase_land_legitimacy_cost + value = { + value = 0 + if = { + limit = { + scope:target.holder != scope:recipient + } + every_in_list = { + list = purchased_titles + if = { + limit = { tier = tier_county } + add = minor_legitimacy_loss + } + else = { add = medium_legitimacy_loss } + } + } + } + } + show_as_tooltip = { purchase_land_interaction_shortened_effect = yes } + if = { + limit = { always = scope:hook } + scope:actor = { use_hook = scope:recipient } + } + scope:actor = { trigger_event = ep3_laamps.0100 } + } + + on_decline = { + scope:actor = { + save_scope_as = adventurer + trigger_event = ep3_laamps.0102 + } + } + + ai_targets = { + ai_recipients = domicile_location_top_ruler + ai_recipients = contacts + } + + ai_targets = { + ai_recipients = domicile_location_neighboring_top_realm_vassals + ai_recipients = domicile_location_top_realm_vassals + ai_recipients = domicile_location_neighboring_top_rulers + max = 20 + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 60 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + modifier = { # Num of counties/duchy + add = { + value = 0 + scope:target = { + if = { + limit = { tier = tier_county } + add = -30 + } + else = { + add = -60 + every_de_jure_county = { + limit = { ep3_purchase_land_valid_county_trigger = yes } + add = -30 + } + } + } + } + desc = PURCHASE_LAND_NUM_TITLES_REASON + } + modifier = { # Too close to capital + add = -50 + desc = PURCHASE_LAND_DE_JURE_DUCHY_REASON + scope:target.duchy = scope:recipient.capital_county.duchy + } + modifier = { # Province value + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = scope:target.development_level + scope:target = { + every_county_province = { add = num_buildings } + } + } + else = { + scope:target = { + every_de_jure_county = { + limit = { ep3_purchase_land_valid_county_trigger = yes } + add = development_level + every_county_province = { add = num_buildings } + } + } + } + multiply = -2 + } + #add = 1 + desc = PURCHASE_LAND_VALUE_REASON + } + modifier = { # Land is foreign + add = 10 + desc = PURCHASE_LAND_FOREIGN_COUNTY_CULTURE_REASON + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = 10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_purchase_land_valid_county_trigger = yes + culture != scope:recipient.culture + } + add = 10 + } + } + } + max = 30 + } + desc = PURCHASE_LAND_FOREIGN_CULTURE_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.culture != scope:recipient.culture + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + culture != scope:recipient.culture + } + } + } + } + modifier = { # Different faith + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = 10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_purchase_land_valid_county_trigger = yes + faith != scope:recipient.faith + } + add = 10 + } + } + } + max = 30 + } + desc = PURCHASE_LAND_DIFFERENT_FAITH_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.faith != scope:recipient.faith + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + faith != scope:recipient.faith + } + } + } + } + modifier = { # My culture's lands + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -40 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_purchase_land_valid_county_trigger = yes + culture != scope:recipient.culture + } + add = -40 + } + } + } + if = { + limit = { scope:acceptance != 0 } + divide = scope:acceptance + } + multiply = 2 + min = -200 + } + desc = PURCHASE_LAND_MY_CULTURE_REASON + scope:actor.culture != scope:recipient.culture + trigger_if = { + limit = { + scope:target.tier = tier_county + } + scope:target.culture = scope:recipient.culture + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + culture = scope:recipient.culture + } + } + } + scope:recipient.culture = { + save_temporary_scope_value_as = { + name = acceptance + value = { + value = "cultural_acceptance(scope:actor.culture)" + divide = 25 + ceiling = yes + } + } + } + } + modifier = { # My faith's lands + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -40 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_purchase_land_valid_county_trigger = yes + faith != scope:recipient.faith + } + add = -40 + } + } + } + if = { + limit = { scope:hostility != 0 } + multiply = scope:hostility + } + multiply = 2 + min = -200 + } + desc = PURCHASE_LAND_MY_FAITH_REASON + scope:actor.faith != scope:recipient.faith + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.faith = scope:recipient.faith + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + faith = scope:recipient.faith + } + } + } + scope:recipient.faith = { + save_temporary_scope_value_as = { + name = hostility + value = "faith_hostility_level(scope:actor.faith)" + } + } + } + modifier = { # Too close + add = { + value = 0 + add = scope:distance + divide = scope:recipient.highest_held_title_tier + if = { + limit = { scope:distance <= squared_distance_medium } + multiply = -0.01 + } + else = { multiply = 0.0005 } + min = -25 + max = 50 + } + desc = PURCHASE_LAND_DISTANCE_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target = { save_temporary_scope_as = distance_target } + } + trigger_else = { + scope:target.title_capital_county = { save_temporary_scope_as = distance_target } + } + scope:recipient.capital_county = { + save_temporary_scope_value_as = { + name = distance + value = "squared_distance(scope:distance_target)" + } + } + } + opinion_modifier = { # Opinion Factor of title holder + trigger = { + NOT = { + scope:target.holder ?= scope:recipient + } + } + who = scope:recipient + opinion_target = scope:target.holder + multiplier = -1 + desc = AI_OPINION_REASON + } + modifier = { + add = { + value = scope:actor.prestige_level + multiply = 20 + } + scope:actor.prestige_level >= 4 + desc = PURCHASE_LAND_PRESTIGE_LEVEL_REASON + } + modifier = { + add = 40 + trigger = { + scope:actor.culture != scope:recipient.culture + OR = { + AND = { + scope:target.tier = tier_county + scope:target.culture = scope:recipient.culture + } + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + culture = scope:recipient.culture + } + } + } + } + scope:actor.primary_spouse ?= { + culture = scope:recipient.culture + dynasty ?= { + dynasty_prestige_level >= 2 + } + } + desc = PURCHASE_LAND_MARRIED_TO_CULTURE_NOBLE_REASON + } + modifier = { + add = 40 + trigger = { + scope:actor.faith != scope:recipient.faith + } + scope:actor.primary_spouse ?= { + faith = scope:recipient.faith + dynasty ?= { + dynasty_prestige_level >= 2 + } + } + desc = PURCHASE_LAND_MARRIED_TO_FAITH_NOBLE_REASON + } + modifier = { + add = 80 + scope:actor.primary_spouse ?= { + house ?= scope:recipient.house + } + desc = PURCHASE_LAND_MARRIED_TO_HOUSE_REASON + } + modifier = { + add = 20 + trigger = { + OR = { + AND = { + scope:target.tier = tier_county + scope:target.culture = scope:recipient.culture + } + scope:target = { + any_de_jure_county = { + ep3_purchase_land_valid_county_trigger = yes + culture = scope:recipient.culture + } + } + } + } + scope:actor = { + knows_language_of_culture = scope:recipient.culture + culture != scope:recipient.culture + } + desc = PURCHASE_LAND_SPEAKS_LANGUAGE_REASON + } + modifier = { + add = -40 + scope:actor = { + NOT = { + knows_language_of_culture = scope:recipient.culture + culture = scope:recipient.culture + } + } + desc = PURCHASE_LAND_DOES_NOT_SPEAK_LANGUAGE_REASON + } + modifier = { + add = { + value = 40 + multiply = scope:recipient.debt_level + } + trigger = { + scope:recipient = { + OR = { + debt_level > 0 + treasury_debt_level > 0 + } + } + } + desc = PURCHASE_LAND_IS_IN_DEBT_REASON + } + modifier = { + add = 60 + scope:actor = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + desc = PURCHASE_LAND_RELATIONSHIP_REASON + } + modifier = { + add = 80 + scope:offer_gold = yes + desc = PURCHASE_LAND_DOUBLE_GOLD_REASON + } + modifier = { + add = 160 + scope:hook = yes + desc = YOU_HAVE_HOOK_REASON + } + modifier = { + add = 60 + scope:offer_hook = yes + desc = PURCHASE_LAND_OFFER_HOOK_REASON + } + modifier = { + add = 80 + scope:vassal_obligation = yes + desc = PURCHASE_LAND_OBLIGATIONS_REASON + } + } + + ai_will_do = { + base = -25 + ai_value_modifier = { + ai_boldness = -0.5 + ai_energy = -0.5 + ai_greed = 0.5 + } + modifier = { + gold < 1000 + factor = 0 + } + modifier = { + gold > 2000 + add = 50 + } + } +} + +################## +# Request Invasion Sponsorship +# by Joe Parkin +################## + +request_laamp_invasion_sponsorship_interaction = { + common_interaction = no + category = interaction_category_laamp + interface_priority = 20 + cooldown_against_recipient = { years = 5 } + + greeting = positive + notification_text = REQUEST_LAAMP_INVASION_SPONSORSHIP_PROPOSAL + + answer_accept_key = REQUEST_LAAMP_INVASION_SPONSORSHIP_ACCEPT + answer_reject_key = REQUEST_LAAMP_INVASION_SPONSORSHIP_REJECT + + icon = request_invasion_sponsorship_interaction + desc = request_laamp_invasion_sponsorship_interaction_desc + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + scope:recipient = { is_landed = yes } + scope:recipient != scope:actor + NOT = { scope:actor = { has_realm_law = camp_purpose_legitimists } } + } + + is_valid_showing_failures_only = { + scope:actor = { + top_liege = this + custom_tooltip = { + text = request_laamp_invasion_sponsorship_existing_supporter_tt + NOT = { exists = var:adventurer_invasion_supporter } + } + } + scope:recipient = { + top_liege = this + highest_held_title_tier >= tier_kingdom + custom_tooltip = { + text = request_laamp_invasion_sponsorship_existing_supportee_tt + NOT = { exists = var:adventurer_invasion_supportee } + } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + #You need to be at least Illustrious + scope:actor = { + prestige_level >= 3 + } + } + + populate_recipient_list = { + every_independent_ruler = { + limit = { + highest_held_title_tier >= tier_kingdom + is_landed = yes + in_diplomatic_range = scope:actor + in_diplomatic_range = scope:recipient + NOR = { + is_at_war_with = scope:actor + is_at_war_with = scope:recipient + is_allied_to = scope:actor + is_allied_to = scope:recipient + has_truce = scope:actor + has_truce = scope:recipient + this = scope:actor + this = scope:recipient + } + } + add_to_list = characters + } + } + + send_options_exclusive = no + + send_option = { + flag = request_soldiers + localization = request_laamp_invasion_sponsorship_option_request_soldiers + current_description = request_laamp_invasion_sponsorship_option_request_soldiers_desc + starts_enabled = { always = yes } + } + + send_option = { + flag = join_war + localization = request_laamp_invasion_sponsorship_option_join_war + current_description = request_laamp_invasion_sponsorship_option_join_war_desc + is_valid = { + scope:secondary_recipient ?= { + NOR = { + is_at_war_with = scope:recipient + is_allied_to = scope:recipient + has_truce = scope:recipient + } + } + } + } + + send_option = { + flag = offer_gold + localization = request_laamp_invasion_sponsorship_option_offer_gold + current_description = request_laamp_invasion_sponsorship_option_offer_gold_desc + is_shown = { exists = scope:recipient } + is_valid = { scope:actor.gold >= scope:recipient.request_laamp_invasion_sponsorship_gold_cost } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + cost = { + prestige = { + value = massive_prestige_value + if = { + limit = { scope:join_war = yes } + add = major_prestige_value + } + } + gold = { + if = { + limit = { scope:offer_gold = yes } + value = scope:recipient.request_laamp_invasion_sponsorship_gold_cost + } + } + } + + can_send = { + custom_tooltip = { + text = request_laamp_invasion_sponsorship_minimum_request_tt + OR = { + scope:join_war = yes + scope:request_soldiers = yes + } + } + } + + on_accept = { + scope:actor = { save_scope_as = adventurer } + 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_if = { + limit = { scope:join_war = yes } + custom_tooltip = adventurer_invasion_supporter_join_tt + } + else = { custom_tooltip = request_laamp_invasion_sponsorship_minimum_request_tt } + hidden_effect = { + set_variable = { + name = adventurer_invasion_supportee + value = scope:actor + years = 5 + } + set_variable = { + name = adventurer_invasion_target + value = scope:secondary_recipient + years = 5 + } + if = { + limit = { scope:join_war = yes } + set_variable = { + name = adventurer_invasion_join_war + value = scope:actor + years = 5 + } + } + if = { + limit = { scope:request_soldiers = yes } + set_variable = { + name = adventurer_invasion_request_soldiers + value = scope:actor + years = 5 + } + } + } + } + scope:actor = { + 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 + } + } + } + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + + custom_tooltip = { + text = adventurer_invasion_supporter_victory_tt + set_variable = { + name = adventurer_invasion_supporter + value = scope:recipient + years = 5 + } + set_variable = { + name = adventurer_invasion_target + value = scope:secondary_recipient + years = 5 + } + } + trigger_event = ep3_laamps.0200 + } + } + + on_decline = { + scope:actor = { trigger_event = ep3_laamps.0201 } + } + + use_diplomatic_range = yes + + ai_accept = { + base = -25 + + # Relationships: actor -> recipient / We avoid more relationship checks for balance reasons (and because important decisions tend to care little for relationships) + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + add = -10 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + scope:recipient = { has_relation_nemesis = scope:actor } + add = -100 + } + modifier = { # Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + scope:recipient.dynasty = scope:actor.dynasty + add = 10 + } + + # Compare Opinion modifier + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:secondary_recipient + multiplier = -0.5 + } + + # Relative power (taken from PT interaction) + modifier = { # A lot less levies than scope:secondary_recipient + add = -50 + scope:recipient.max_military_strength <= scope:secondary_recipient.purchase_truce_interaction_recipient_far_weaker_value + scope:join_war = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_MUCH_WEAKER_REASON + } + modifier = { # Few less levies than scope:secondary_recipient + add = -25 + scope:recipient.max_military_strength > scope:secondary_recipient.purchase_truce_interaction_recipient_far_weaker_value + scope:recipient.max_military_strength <= scope:secondary_recipient.purchase_truce_interaction_recipient_somewhat_weaker_value + scope:join_war = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_SOMEWHAT_WEAKER_REASON + } + modifier = { # Roughly equal levies with scope:secondary_recipient + add = -10 + scope:recipient.max_military_strength > scope:secondary_recipient.purchase_truce_interaction_recipient_somewhat_weaker_value + scope:recipient.max_military_strength <= scope:secondary_recipient.purchase_truce_interaction_recipient_somewhat_stronger_value + scope:join_war = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_ROUGHLY_EQUAL_REASON + } + + # AI who are in debt will take whatever windfalls they can. + modifier = { + add = { + value = scope:recipient.debt_level + add = 1 # Our first level is 0, so we add one to always get a positive number. + multiply = 10 + } + scope:offer_gold = yes + scope:recipient.debt_level > 0 + desc = PT_AI_IS_IN_DEBT + } + + # Pacifist AI don't like raiding + modifier = { + add = -25 + scope:recipient.faith = { has_doctrine_parameter = pacifist_opinion_active } + desc = PT_AI_IS_PACIFIST_FAITH + } + modifier = { + add = -25 + scope:recipient.culture = { has_cultural_parameter = reduced_cost_for_conversion_to_pacifist_faith } + desc = PT_AI_IS_PACIFIST_CULTURE + } + + # Small realm + modifier = { + add = -50 + scope:recipient.realm_size < minor_realm_size + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_SMALL_REALM_REASON + } + # Own war + modifier = { + add = -50 + scope:recipient = { is_at_war = yes } + scope:join_war = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_OWN_WAR_REASON + } + + modifier = { # Distance + add = { + value = 0 + add = scope:distance + if = { + limit = { scope:distance >= squared_distance_medium } + add = scope:distance + multiply = -0.00001 + } + min = -100 + } + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_DISTANCE_REASON + scope:recipient = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:secondary_recipient } + } + } + scope:recipient.capital_county = { + save_temporary_scope_value_as = { + name = distance + value = "squared_distance(scope:secondary_recipient.capital_county)" + } + } + } + + modifier = { + add = -30 + scope:recipient.faith = scope:secondary_recipient.faith + desc = I_AM_ATTACKING_A_CORELIGIONIST + } + modifier = { + add = -10 + scope:actor.faith != scope:recipient.faith + desc = DIFFERENT_FAITH + } + modifier = { + add = -200 + scope:recipient.primary_heir ?= scope:secondary_recipient + desc = WONT_FIGHT_HEIR_REASON + } + modifier = { + add = -200 + scope:recipient = { is_consort_of = scope:secondary_recipient } + desc = WONT_FIGHT_SPOUSE_REASON + } + modifier = { + add = -100 + scope:recipient = { + has_relation_friend = scope:secondary_recipient + NOT = { has_relation_best_friend = scope:secondary_recipient } + } + desc = WONT_FIGHT_FRIEND_REASON + } + modifier = { + add = -200 + scope:recipient = { has_relation_best_friend = scope:secondary_recipient } + desc = WONT_FIGHT_BEST_FRIEND_REASON + } + modifier = { + add = -100 + scope:recipient = { + has_relation_lover = scope:secondary_recipient + NOT = { has_relation_soulmate = scope:secondary_recipient } + } + desc = WONT_FIGHT_LOVER_REASON + } + modifier = { + add = -200 + scope:recipient = { has_relation_soulmate = scope:secondary_recipient } + desc = WONT_FIGHT_SOULMATE_REASON + } + modifier = { + add = -200 + scope:recipient = { is_allied_to = scope:secondary_recipient } + desc = WAR_WITH_ALLY_REASON + } + + modifier = { + add = 50 + scope:hook = yes + desc = YOU_HAVE_HOOK_REASON + } + + # Offered proportional gold + modifier = { + add = -25 + scope:request_soldiers = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_REQUEST_SOLDIERS_REASON + } + modifier = { + add = -50 + scope:join_war = yes + desc = REQUEST_LAAMP_INVASION_SPONSORSHIP_JOIN_WAR_REASON + } + modifier = { + add = 35 + scope:offer_gold = yes + desc = GOLD_REASON + } + + # AI value mod + ai_value_modifier = { + ai_greed = 0.5 + ai_boldness = 0.25 + min = 0 + max = 25 + } + } + can_send_despite_rejection = no +} + +################## +# Negotiate Settlement +# by Joe Parkin +################## + +negotiate_settlement_interaction = { + common_interaction = yes + category = interaction_category_diplomacy + icon = negotiate_settlement_interaction + + desc = negotiate_settlement_interaction_desc + target_type = title + target_filter = actor_domain_titles + + cooldown_against_recipient = { years = 5 } + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor = { top_liege != this } + scope:target = { + trigger_if = { + limit = { tier = tier_duchy } + scope:actor.highest_held_title_tier = tier_duchy + } + trigger_else = { scope:actor.highest_held_title_tier = tier_county } + } + } + desc = NEGOTIATE_SETTLEMENT_PROPOSAL_FELLOW_VASSAL + } + triggered_desc = { + trigger = { + scope:target = { + trigger_if = { + limit = { tier = tier_duchy } + scope:actor.highest_held_title_tier >= tier_kingdom + } + trigger_else = { scope:actor.highest_held_title_tier >= tier_duchy } + } + } + desc = NEGOTIATE_SETTLEMENT_PROPOSAL_LIEGE + } + desc = NEGOTIATE_SETTLEMENT_PROPOSAL + } + } + + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { is_landed = yes } + scope:recipient = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + scope:recipient != scope:actor + } + + can_be_picked_title = { + custom_tooltip = { + text = purchase_land_tier_tt + scope:target = { + tier >= tier_county + tier <= tier_duchy + } + } + custom_tooltip = { + text = purchase_land_capital_tt + NOR = { + scope:target = scope:actor.capital_county + scope:target = scope:actor.capital_county.duchy + } + } + custom_tooltip = { + text = purchase_land_primary_tt + scope:target != scope:actor.primary_title + } + custom_tooltip = { + text = negotiate_settlement_title_cant_receive_reason_higher_tier_without_county + scope:target = { + tier = tier_duchy + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + } + } + } + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + scope:recipient = { is_ai = yes } + scope:target.tier < tier_duchy + } + scope:recipient = { + OR = { + current_military_strength < 1000 # You can do better + global_variable_list_size = { + name = laamps_tally + value >= too_many_laamps_value + } + } + OR = { + AND = { + has_character_modifier = ep3_lust_for_land_modifier + ai_greed >= 25 + ai_boldness >= 25 + ai_rationality <= -25 + } + AND = { + has_trait = greedy + ai_rationality <= -50 + } + global_variable_list_size = { + name = laamps_tally + value >= too_many_laamps_value + } + } + } + } + } + + has_valid_target_showing_failures_only = { + trigger_if = { # Can't purchase HoF titles + limit = { + scope:target ?= { is_head_of_faith = yes } + } + custom_description = { + text = negotiate_settlement_religious_tt + always = no + } + } + trigger_if = { # Can't purchase nf titles + limit = { + scope:target ?= { is_noble_family_title = yes } + } + custom_description = { + text = negotiate_settlement_noble_family_tt + always = no + } + } + trigger_if = { # Can't purchase laamp titles + limit = { + scope:target ?= { has_variable = adventurer_creation_reason } + } + custom_description = { + text = negotiate_settlement_landless_adventurer_tt + always = no + } + } + trigger_if = { + limit = { + scope:actor = { government_has_flag = government_is_administrative } + } + scope:target.tier = tier_duchy + } + trigger_else = { + scope:target = { + tier >= tier_county + tier <= tier_duchy + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + custom_tooltip = { + text = negotiate_settlement_target_tt + OR = { + any_character_war = { + is_attacker = scope:recipient + primary_defender = scope:actor + save_temporary_scope_as = war_temp + } + AND = { + exists = scope:recipient.capital_province + scope:recipient.capital_province.county.holder.top_liege = scope:actor.top_liege + } + } + } + } + # Can only settle if not at risk of losing land, outside of war of adventurer + custom_tooltip = { + text = negotiate_settlement_defensive_wars_tt + scope:actor = { + NOT = { + any_character_war = { + any_war_defender = { this = scope:actor } + NOT = { + any_war_attacker = { this = scope:recipient } + } + } + } + } + } + NOT = { + scope:actor = { has_relation_nemesis = scope:recipient } + } + trigger_if = { # Can't purchase Baronies + limit = { + scope:target ?= { tier = tier_barony } + } + custom_description = { + text = negotiate_settlement_barony_tt + always = no + } + } + trigger_if = { # Can't purchase Kingdoms or Empires + limit = { + scope:target ?= { tier >= tier_kingdom } + } + custom_description = { + text = negotiate_settlement_kingdom_tt + always = no + } + } + trigger_if = { + limit = { + scope:actor = { + any_held_county = { count < 2 } + } + } + custom_description = { + text = negotiate_settlement_minimum_county_tt + always = no + } + } + scope:recipient = { + NOT = { has_strong_hook = scope:actor } + } + # Adventurers can't be negotiated back into places they're exiled from. + trigger_if = { + limit = { + scope:actor = { top_liege != this } + } + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:actor.capital_province + LAAMP = scope:recipient + } + } + } + } + # Story blockers. + ## Hereward cannot be exiled by active participants in the Harrying of the North. + disable_interaction_for_hereward_trigger = yes + ## Hasan cannot be exiled by anyone during his story. + disable_interaction_for_hasan_trigger = yes + } + + on_send = { + debug_log = "NEGOTIATE_SETTLEMENT" + debug_log_scopes = yes + } + + on_accept = { + scope:actor = { save_scope_as = adventurer } + scope:target = { + add_to_list = offered_titles + if = { + limit = { tier = tier_duchy } + every_de_jure_county = { + limit = { ep3_negotiate_settlement_valid_county_trigger = yes } + add_to_list = offered_titles + } + } + } + ordered_in_list = { + list = offered_titles + save_scope_as = new_primary_title + } + save_scope_value_as = { + name = negotiate_settlement_legitimacy_cost + value = { + value = 0 + every_in_list = { + list = offered_titles + if = { + limit = { tier = tier_county } + add = -25 + } + else = { add = -50 } + } + multiply = scope:actor.highest_held_title_tier + } + } + show_as_tooltip = { negotiate_settlement_interaction_effect = yes } + scope:actor = { trigger_event = ep3_laamps.0300 } + } + + on_decline = { + scope:actor = { + trigger_event = ep3_laamps.0302 + } + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = spouses + max = 5 + } + ai_targets = { + ai_recipients = top_realm_domicile_owners + ai_recipients = nearby_domicile_owners + max = 5 + } + ai_targets = { + ai_recipients = war_enemies + max = 10 + } + + # Must be fairly common as it can happen during war + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 3 + kingdom = 3 + empire = 3 + hegemony = 3 + } + + ai_potential = { + OR = { + top_liege = this + highest_held_title_tier >= tier_kingdom + } + OR = { + is_at_war = yes + has_trait = craven + has_trait = generous + } + NOT = { + government_has_flag = government_is_nomadic + } + } + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + ai_value_modifier = { + ai_boldness = -0.25 + ai_energy = -0.25 + ai_greed = 0.25 + } + modifier = { # Claims + add = { + value = 0 + if = { + limit = { + scope:recipient = { has_claim_on = scope:target } + } + add = 25 + } + if = { + limit = { scope:target.tier = tier_duchy } + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + save_temporary_scope_as = claim_temp + scope:recipient = { has_claim_on = scope:claim_temp } + } + add = 25 + } + } + } + } + desc = NEGOTIATE_SETTLEMENT_CLAIM_REASON + OR = { + scope:recipient = { has_claim_on = scope:target } + trigger_if = { + limit = { scope:target.tier = tier_duchy } + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + save_temporary_scope_as = county_temp + scope:recipient = { has_claim_on = scope:county_temp } + } + } + } + trigger_else = { always = no } + } + } + modifier = { + add = -300 + scope:recipient = { has_realm_law = camp_purpose_legitimists } + desc = NEGOTIATE_SETTLEMENT_LEGITIMIST_REASON + } + modifier = { # Tier lower than war claim + add = { + value = 0 + scope:recipient = { + every_character_war = { + limit = { + primary_attacker = scope:recipient + primary_defender = scope:actor + casus_belli = { + any_target_title = { tier > scope:target.tier } + } + } + casus_belli = { + every_target_title = { + limit = { tier > scope:target.tier } + add = -25 + } + } + } + } + } + desc = NEGOTIATE_SETTLEMENT_LOWER_THAN_WAR_TARGET_REASON + scope:recipient = { + any_character_war = { + primary_attacker = scope:recipient + primary_defender = scope:actor + casus_belli = { + any_target_title = { tier > scope:target.tier } + } + } + } + } + modifier = { # War Targets + add = { + value = 0 + scope:recipient = { + every_character_war = { + limit = { + primary_attacker = scope:recipient + casus_belli = { + any_target_title = { + OR = { + this = scope:target + de_jure_liege = scope:target + } + } + } + } + casus_belli = { + every_target_title = { + limit = { + OR = { + this = scope:target + de_jure_liege = scope:target + } + } + add = 25 + } + } + } + } + } + desc = NEGOTIATE_SETTLEMENT_WAR_TARGET_REASON + scope:recipient = { + any_character_war = { + primary_attacker = scope:recipient + casus_belli = { + any_target_title = { + OR = { + this = scope:target + de_jure_liege = scope:target + } + } + } + } + } + } + modifier = { # Num of counties/duchy + add = { + value = 0 + scope:target = { + if = { + limit = { tier = tier_county } + add = 25 + } + else = { + add = 50 + every_de_jure_county = { + limit = { ep3_negotiate_settlement_valid_county_trigger = yes } + add = 25 + } + } + } + } + desc = NEGOTIATE_SETTLEMENT_NUM_TITLES_REASON + } + modifier = { # Province value + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = scope:target.development_level + scope:target = { + every_county_province = { add = num_buildings } + } + } + else = { + scope:target = { + every_de_jure_county = { + limit = { ep3_negotiate_settlement_valid_county_trigger = yes } + add = development_level + every_county_province = { add = num_buildings } + } + } + } + } + #add = 1 + desc = NEGOTIATE_SETTLEMENT_VALUE_REASON + } + modifier = { # Land is foreign + add = -10 + desc = NEGOTIATE_SETTLEMENT_FOREIGN_COUNTY_CULTURE_REASON + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + culture != scope:recipient.culture + } + add = -10 + } + } + } + min = -30 + } + desc = NEGOTIATE_SETTLEMENT_FOREIGN_CULTURE_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.culture != scope:recipient.culture + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + culture != scope:recipient.culture + } + } + } + } + modifier = { # Different faith + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:recipient.faith + } + add = -10 + } + } + } + min = -30 + } + desc = NEGOTIATE_SETTLEMENT_DIFFERENT_FAITH_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.faith != scope:recipient.faith + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:recipient.faith + } + } + } + } + modifier = { # Losing/winning as attacker + add = { + value = 0 + scope:recipient = { + ordered_character_war = { + limit = { + OR = { + primary_attacker = scope:actor + primary_defender = scope:actor + } + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + } + order_by = war_days + if = { + limit = { + primary_attacker = scope:actor + primary_defender = scope:recipient + } + add = defender_war_score + } + else = { add = attacker_war_score } + } + } + divide = 4 + } + desc = NEGOTIATE_SETTLEMENT_LOSING_WAR_REASON + scope:recipient = { + any_character_war = { + OR = { + primary_attacker = scope:actor + primary_defender = scope:actor + } + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + trigger_if = { + limit = { + primary_attacker = scope:actor + primary_defender = scope:recipient + } + defender_war_score >= 25 + } + trigger_else = { attacker_war_score >= 25 } + } + } + } + modifier = { # Losing/winning as defender + add = { + value = 0 + scope:recipient = { + ordered_character_war = { + limit = { + OR = { + primary_attacker = scope:actor + primary_defender = scope:actor + } + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + } + order_by = war_days + if = { + limit = { + primary_attacker = scope:actor + primary_defender = scope:recipient + } + add = attacker_war_score + } + else = { add = defender_war_score } + } + } + divide = 4 + } + desc = NEGOTIATE_SETTLEMENT_LOSING_WAR_REASON + scope:recipient = { + any_character_war = { + OR = { + primary_attacker = scope:actor + primary_defender = scope:actor + } + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + trigger_if = { + limit = { + primary_attacker = scope:actor + primary_defender = scope:recipient + } + attacker_war_score >= 25 + } + trigger_else = { defender_war_score >= 25 } + } + } + } + modifier = { # Number of troops at peace, + add = { + add = current_military_strength + multiply = -0.02 + } + desc = laamp_has_soldiers_negotiate_settlement_tt + } + modifier = { + add = -50000 + scope:actor = { is_ai = yes } + NOT = { + scope:target.tier >= tier_duchy + } + scope:recipient = { + NOR = { + current_military_strength < 1000 # You can do better + global_variable_list_size = { + name = laamps_tally + value >= too_many_laamps_value + } + } + NOR = { + AND = { + has_character_modifier = ep3_lust_for_land_modifier + ai_greed >= 25 + ai_boldness >= 25 + ai_rationality <= -25 + } + AND = { + has_trait = greedy + ai_rationality <= -50 + } + global_variable_list_size = { + name = laamps_tally + value >= too_many_laamps_value + } + } + } + } + } + + ai_will_do = { + base = -25 + modifier = { + add = 25 + scope:actor.domain_size > scope:actor.domain_limit + } + opinion_modifier = { + who = scope:actor + opinion_target = scope:recipient + multiplier = 0.25 + } + ai_value_modifier = { + ai_boldness = -0.25 + ai_energy = -0.25 + ai_greed = -0.25 + } + modifier = { # Tier lower than war claim + add = { + value = 0 + scope:recipient = { + every_character_war = { + limit = { + primary_attacker = scope:recipient + primary_defender = scope:actor + casus_belli = { + any_target_title = { tier > scope:target.tier } + } + attacker_war_score >= 50 + } + add = 150 + } + } + } + desc = NEGOTIATE_SETTLEMENT_SAVE_TITLE_REASON + scope:recipient = { + any_character_war = { + primary_attacker = scope:recipient + primary_defender = scope:actor + casus_belli = { + any_target_title = { tier > scope:target.tier } + } + attacker_war_score >= 50 + } + } + } + modifier = { + scope:recipient = { + has_government = landless_adventurer_government + has_realm_law = camp_purpose_legitimists + any_claim = { + OR = { + holder ?= { + OR = { + this = scope:actor + target_is_liege_or_above = scope:actor + } + } + target_is_de_jure_liege_or_above = scope:actor.primary_title + } + } + } + desc = NEGOTIATE_SETTLEMENT_DE_JURE_LEGITIMIST_REASON + add = -150 + } + modifier = { # Defending against a LAAMP + any_character_war = { + primary_defender = scope:actor + any_war_attacker = { + scope:recipient ?= this + has_government = landless_adventurer_government + NOT = { has_realm_law = camp_purpose_legitimists } + # Attacking laamp's troops at least 10% of defender's total troops + current_military_strength > war_defender_total_strength_tenth_value + } + OR = { + attacker_war_score >= 25 + # Attackers outnumber defenders at least 2:1 + war_attacker_total_current_strength_halved_value >= war_defender_total_current_strength_value + } + } + desc = NEGOTIATE_SETTLEMENT_DEFENDING_REASON + add = { + value = 0 + every_character_war = { + limit = { + primary_defender = scope:actor + any_war_attacker = { + scope:recipient ?= this + has_government = landless_adventurer_government + NOT = { has_realm_law = camp_purpose_legitimists } + # Attacking laamp's troops at least 10% of defender's total troops + current_military_strength > war_defender_total_strength_tenth_value + } + } + add = { + value = 25 + add = { + value = attacker_war_score + subtract = 25 + min = 0 + } + if = { + limit = { + exists = primary_attacker + scope:recipient ?= primary_attacker + } + multiply = 2 + } + # Difference in strength of attackers and defenders + multiply = war_attacker_total_current_strength_divided_by_defender_value + } + } + } + } + modifier = { # Attacking a LAAMP + any_character_war = { + primary_attacker = scope:actor + any_war_defender = { + scope:recipient ?= this + has_government = landless_adventurer_government + # Defending laamp's troops at least 10% of attacker's total troops + current_military_strength > war_attacker_total_strength_tenth_value + } + OR = { + defender_war_score >= 25 + # Defenders outnumber attackers at least 2:1 + war_defender_total_current_strength_halved_value >= war_attacker_total_current_strength_value + } + } + desc = NEGOTIATE_SETTLEMENT_ATTACKING_REASON + add = { + value = 0 + every_character_war = { + limit = { + primary_attacker = scope:actor + any_war_defender = { + scope:recipient ?= this + has_government = landless_adventurer_government + # Defending laamp's troops at least 10% of attacker's total troops + current_military_strength > war_attacker_total_strength_tenth_value + } + } + add = { + value = 25 + add = { + value = defender_war_score + subtract = 25 + min = 0 + } + # Difference in strength of defenders and attackers + multiply = war_defender_total_current_strength_divided_by_attacker_value + } + } + } + } + modifier = { # Potential war target of a LAAMP + scope:recipient ?= { + ep3_adventurer_might_attack_target_trigger = { TARGET = scope:actor } + trigger_if = { + limit = { + NOT = { is_at_war_with = scope:actor } + } + ep3_laamp_diplo_range_trigger = { + TARGET = scope:actor + LAAMP = scope:recipient + } + } + } + desc = NEGOTIATE_SETTLEMENT_POTENTIAL_WAR_TARGET_REASON + add = { + value = 25 + multiply = recipient_strength_divided_by_actors_value + # Scale of threat + scope:recipient = { + if = { + limit = { + can_declare_war = { + casus_belli = ep3_laamp_adventurer_duchy_invasion + defender = scope:actor + } + } + multiply = 1.25 + } + if = { + limit = { + can_declare_war = { + casus_belli = ep3_laamp_adventurer_kingdom_invasion + defender = scope:actor + } + } + multiply = 1.5 + } + if = { + limit = { + can_declare_war = { + casus_belli = ep3_laamp_adventurer_empire_invasion + defender = scope:actor + } + } + multiply = 2 + } + } + scope:actor = { + # Worried about ongoing wars + if = { + limit = { + any_character_war = { + primary_defender = scope:actor + # Only care if attackers are really a threat + war_attacker_total_current_strength_value > war_defender_total_current_strength_halved_value + } + } + multiply = 2 + } + # Already at war + if = { + limit = { is_at_war_with = scope:recipient } + multiply = 0.5 + } + } + } + } + modifier = { # Potential faction claimant + exists = scope:recipient + scope:actor = { + any_targeting_faction = { + special_character ?= scope:recipient + faction_power >= faction_power_threshold + } + } + desc = NEGOTIATE_SETTLEMENT_CLAIMANT_REASON + add = { + value = 0 + every_targeting_faction = { + limit = { + special_character ?= scope:recipient + faction_power >= faction_power_threshold + } + add = 25 + } + } + } + modifier = { # Give claims to laamps + scope:target ?= { + any_claimant = { scope:recipient ?= this } + } + desc = NEGOTIATE_SETTLEMENT_CLAIM_REASON + add = { + value = 25 + if = { + limit = { + scope:target.tier = tier_county + } + subtract = scope:target.development_level + } + if = { + limit = { + scope:target.tier > tier_county + } + subtract = scope:target.title_capital_county.development_level + } + } + } + # Essentially the inverse of Purchase Land + modifier = { # Land is foreign + add = 10 + desc = NEGOTIATE_SETTLEMENT_FOREIGN_COUNTY_CULTURE_REASON + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = 10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + culture != scope:recipient.culture + } + add = 10 + } + } + } + max = 30 + } + desc = NEGOTIATE_SETTLEMENT_FOREIGN_CULTURE_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.culture != scope:actor.culture + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + culture != scope:actor.culture + } + } + } + } + modifier = { # Different faith + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = 10 + } + else = { + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:actor.faith + } + add = 10 + } + } + } + max = 30 + } + desc = NEGOTIATE_SETTLEMENT_DIFFERENT_FAITH_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.faith != scope:actor.faith + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:actor.faith + } + } + } + } + modifier = { # My culture's lands + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -15 + } + else = { + add = -15 + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:actor.faith + } + add = -15 + } + } + } + if = { + limit = { scope:acceptance != 0 } + divide = scope:acceptance + } + min = -50 + } + desc = NEGOTIATE_SETTLEMENT_MY_CULTURE_REASON + scope:actor.culture != scope:recipient.culture + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.culture = scope:actor.culture + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + culture = scope:actor.culture + } + } + } + scope:actor.culture = { + save_temporary_scope_value_as = { + name = acceptance + value = { + value = "cultural_acceptance(scope:recipient.culture)" + divide = 25 + ceiling = yes + } + } + } + } + modifier = { # My faith's lands + add = { + value = 0 + if = { + limit = { scope:target.tier = tier_county } + add = -15 + } + else = { + add = -15 + scope:target = { + every_de_jure_county = { + limit = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith != scope:actor.faith + } + add = -15 + } + } + } + if = { + limit = { scope:hostility != 0 } + multiply = scope:hostility + } + min = -50 + } + desc = NEGOTIATE_SETTLEMENT_MY_FAITH_REASON + scope:actor.faith != scope:recipient.faith + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target.faith = scope:actor.faith + } + trigger_else = { + scope:target = { + any_de_jure_county = { + ep3_negotiate_settlement_valid_county_trigger = yes + faith = scope:actor.faith + } + } + } + scope:actor.faith = { + save_temporary_scope_value_as = { + name = hostility + value = "faith_hostility_level(scope:recipient.faith)" + } + } + } + modifier = { # Too close + add = { + value = 0 + add = scope:distance + divide = scope:actor.highest_held_title_tier + if = { + limit = { scope:distance <= squared_distance_medium } + multiply = -0.01 + } + else = { multiply = 0.0005 } + min = -25 + max = 50 + } + desc = NEGOTIATE_LAND_DISTANCE_REASON + trigger_if = { + limit = { scope:target.tier = tier_county } + scope:target = { save_temporary_scope_as = distance_target } + } + trigger_else = { + scope:target.title_capital_county = { save_temporary_scope_as = distance_target } + } + scope:actor.capital_county = { + save_temporary_scope_value_as = { + name = distance + value = "squared_distance(scope:distance_target)" + } + } + } + } +} + +################## +# Trade Oath +# by Joe Parkin +################## + +trade_oath_interaction = { + icon = hook_icon + category = interaction_category_laamp + interface_priority = 10 + + desc = trade_oath_interaction_desc + + is_shown = { + scope:actor = { + domicile ?= { has_domicile_parameter = camp_unlock_trade_oath_interaction } + NOT = { has_strong_hook = scope:recipient } + } + scope:recipient = { + is_courtier_of = scope:actor + NOR = { + has_hook = scope:actor + is_close_family_of = scope:actor + is_spouse_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_at_war = no + is_imprisoned = no + } + scope:recipient.location = scope:actor.location + } + + cost = { prestige = 250 } + + on_accept = { + show_as_tooltip = { + scope:actor = { + add_hook = { + type = loyalty_hook + target = scope:recipient + } + } + scope:recipient = { + add_hook = { + type = follower_oath_hook + target = scope:actor + } + } + } + scope:actor = { trigger_event = ep3_laamps.1011 } + } + + ai_accept = { + base = -75 + + opinion_modifier = { opinion_target = scope:actor } + + # Traits. + ## Loyal + modifier = { + add = 30 + has_trait = loyal + } + ## Disloyal + modifier = { + add = -30 + has_trait = disloyal + } + ## Arbitrary + modifier = { + add = -20 + has_trait = arbitrary + } + ## Just + modifier = { + add = 20 + has_trait = just + } + ## Fickle + modifier = { + add = -10 + has_trait = fickle + } + ## Stubborn + modifier = { + add = 20 + has_trait = stubborn + } + ## Deceitful + modifier = { + add = -5 + has_trait = deceitful + } + ## Honest + modifier = { + add = 5 + has_trait = honest + } + } + ai_potential = { + has_realm_law = camp_purpose_legitimists + } + # Always do it if you get the chance. + ai_will_do = { base = 1000 } + + ai_targets = { ai_recipients = courtiers } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 0 + empire = 0 + hegemony = 0 + } + auto_accept = yes +} + +################## +# Pawn Gear +# by Joe Parkin +################## + +pawn_gear_interaction = { + icon = artisan_inspiration + category = interaction_category_laamp + interface_priority = 10 + common_interaction = yes + desc = pawn_gear_interaction_desc + + target_type = artifact + target_filter = actor_artifacts + + is_shown = { + scope:actor = { + domicile ?= { has_domicile_parameter = camp_unlocks_pawn_gear_interaction } + this = scope:recipient + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_at_war = no + is_imprisoned = no + has_any_artifact = yes + trigger_if = { + limit = { is_ai = no } + custom_description = { + text = "any_unequipped_artifact_tt" + any_character_artifact = { is_equipped = no } + } + } + } + } + + can_be_picked_artifact = { + trigger_if = { + limit = { + scope:actor = { is_ai = no } + } + scope:target = { is_equipped = no } + } + scope:actor = { + any_character_artifact = { this = scope:target } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = pawn_gear_interaction_notification + left_icon = scope:actor + add_short_term_gold = artifact_wealth_quality_average_value + destroy_artifact = scope:target + } + } + } + + auto_accept = yes +} + +################## +# Complete the Contract +# by Arkadiusz Majewski +# Needed for the action_can_complete_task_contract and to be able to end contracts if you cancelled the initial travel planner +################## + +complete_task_contract_interaction = { + category = interaction_category_laamp + interface_priority = 120 + common_interaction = yes + icon = icon_contract_escort + use_diplomatic_range = no + + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + any_character_active_contract = { + OR = { + ep3_transport_contract_trigger = yes + has_task_contract_type = laamp_help_increase_control_contract + } + OR = { + task_contract_employer ?= scope:recipient + task_contract_destination.province_owner ?= scope:recipient + task_contract_target ?= scope:recipient + var:task_contract_object ?= scope:recipient + } + } + } + } + + is_valid_showing_failures_only = { + } + + is_highlighted = { + always = yes + } + + send_option = { + flag = without_domicile + } + + send_option = { + flag = with_domicile + } + + on_accept = { + scope:actor = { + random_character_active_contract = { + limit = { + OR = { + ep3_transport_contract_trigger = yes + has_task_contract_type = laamp_help_increase_control_contract + } + #check for any contract that has the recipient as any relevant character to it (employer, target, target destination owner, escortee) + OR = { + task_contract_employer ?= scope:recipient + task_contract_destination.province_owner ?= scope:recipient + task_contract_target ?= scope:recipient + var:task_contract_object ?= scope:recipient + } + } + save_scope_as = task_contract + } + #set all the scopes + if = { + limit = { + exists = scope:task_contract.var:task_contract_employer + } + scope:task_contract.var:task_contract_employer ?= { + save_scope_as = task_contract_employer + } + } + if = { + limit = { + scope:task_contract = { + has_task_contract_type = laamp_help_increase_control_contract + } + } + scope:task_contract.var:task_contract_councillor_liege ?= { + save_scope_as = task_contract_councillor_liege + } + } + if = { + limit = { + exists = scope:task_contract.var:task_contract_destination + } + scope:task_contract.var:task_contract_destination = { + save_scope_as = task_contract_destination + } + } + if = { + limit = { + exists = scope:task_contract.var:task_contract_target + } + scope:task_contract.var:task_contract_target ?= { + save_scope_as = task_contract_target + } + } + 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 + } + } + #show a nice tooltip with which contract, who you are taking and where are you going info + scope:task_contract = { + switch = { + trigger = has_task_contract_type + laamp_transport_vip = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_vip } + } + laamp_transport_ward = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_ward } + } + laamp_transport_explorer = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_explorer } + } + laamp_transport_artifact = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_artifact } + } + laamp_transport_gold = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_gold } + } + laamp_transport_animal = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_animal } + } + laamp_construction_contract = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_construction } + } + laamp_help_increase_control_contract = { + scope:actor = { custom_tooltip = ep3_contract_event.0001.tt_increase_control } + } + } + } + #trigger the travel planner + switch = { + trigger = yes + scope:with_domicile = { + start_travel_plan = { + destination = scope:task_contract_destination + travel_with_domicile = yes + return_trip = no + on_arrival_destinations = all + } + custom_tooltip = ep3_contract_event.0001.with_domicile.tt + } + scope:without_domicile = { + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_destinations = all + } + } + } + } + } + + auto_accept = yes +} + +################## +# Make a Request +# by Arkadiusz Majewski +# As a LAAMP you can ask characters on your contact list for something +################## + +contact_list_request_interaction = { # make a request, make_a_request + category = interaction_category_laamp + interface_priority = 110 + icon = icon_scheme_befriend + desc = contact_list_request_interaction_desc + common_interaction = yes + + popup_on_receive = yes + pause_on_receive = yes + + ai_min_reply_days = 0 + ai_max_reply_days = 0 + + cooldown_against_recipient = { months = 8 } + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + scope:actor != scope:recipient + } + is_valid_showing_failures_only = { + scope:recipient = { + is_adult = yes + is_imprisoned = no + NOR = { + is_at_war_with = scope:actor + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + has_opinion_modifier = { + target = scope:actor + modifier = released_from_prison + } + has_opinion_modifier = { + target = scope:actor + modifier = eviction_ignored_opinion + } + house_has_feud_relation_with_trigger = { TARGET = scope:actor } + } + } + scope:actor = { + NOT = { has_truce = scope:recipient } + } + scope:recipient = { + trigger_if = { + limit = { + NOR = { + is_contact_of = scope:actor + is_close_or_extended_family_of = scope:actor + is_consort_of = scope:actor + AND = { + OR = { + capital_province ?= scope:actor.domicile.domicile_location + any_held_title = { + title_tier = county + any_county_province = { + this = scope:actor.domicile.domicile_location + } + } + } + scope:actor = { has_perk = embassies_perk } + } + } + } + is_contact_of = scope:actor + } + } + scope:recipient = { + custom_tooltip = { + text = RULER_DESIGNER_ACHIEVEMENTS_NOT_AVAILABLE + OR = { + is_landed = yes + gold > 20 + AND = { + is_landed_or_landless_administrative = yes + scope:actor.maa_regiments_count < scope:actor.maa_regiments_max_count + } + AND = { + #Recipient can marry the actor + can_marry_character_trigger = { CHARACTER = scope:actor } + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + } + } + } + } + is_highlighted = { + scope:actor = { + is_character_interaction_potentially_accepted = { + recipient = scope:recipient + interaction = contact_list_request_interaction + } + } + } + can_send = { + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + #request provisions + send_option = { + flag = request_provisions + is_valid = { + scope:recipient = { + is_landed = yes + } + } + } + #request gold + send_option = { + flag = request_gold + is_valid = { + custom_tooltip = { + scope:recipient.gold > 20 + text = contact_list_request_interaction.request_gold_recipient_not_enough_gold + } + } + } + #request men-at-arms regiment + send_option = { + flag = request_maa + is_valid = { + scope:recipient = { + is_landed_or_landless_administrative = yes + } + custom_tooltip = { + scope:actor.maa_regiments_count < scope:actor.maa_regiments_max_count + text = contact_list_request_interaction.request_maa_actor_too_many_regiments + } + } + } + #request a knight + send_option = { + flag = request_knights + is_shown = { + scope:recipient = { is_ai = yes } + } + is_valid = { + custom_tooltip = { + scope:recipient = { + any_knight = { + is_landed = no + count > 1 + } + } + text = contact_list_request_interaction.request_knights_recipient_not_enough_knights + } + } + } + #request to arrange a marriage + send_option = { + flag = request_marriage + is_valid = { + #There is an available marriage, copied from 00_marriage_interactions is_valid_showing_failures_only + custom_description = { + text = "basic_can_marry_check_recipient" + subject = scope:actor + object = scope:recipient + scope:recipient = { + OR = { + AND = { + #Recipient can marry the actor + can_marry_character_trigger = { CHARACTER = scope:actor } + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + can_marry_character_trigger = { CHARACTER = scope:actor } + } + } + AND = { + is_ruler = yes #(Following are only for rulers) + OR = { + any_child = { + matchmaker = scope:actor + OR = { + #Any of recipient's children can marry + AND = { + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + } + } + #Any of recipient's children are ready to marry their betrothed + AND = { + ready_to_marry_betrothed_trigger = yes + betrothed.matchmaker = scope:actor + } + } + } + any_courtier = { + OR = { + #Any of recipient's courtiers can marry + AND = { + can_marry_trigger = yes + #To account for a person marrying their concubines + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = scope:actor + } + } + #Any of recipient's courtiers are ready to marry their betrothed + AND = { + ready_to_marry_betrothed_trigger = yes + betrothed.matchmaker = scope:actor + } + } + } + } + } + } + } + } + } + } + #request new contract + send_option = { + flag = request_contract + is_shown = { + scope:recipient = { is_ai = yes } + } + is_valid = { + custom_tooltip = { + text = contact_list_request_interaction.create_contracts.already_has_contract + scope:actor = { + any_character_task_contract = { + count = all + task_contract_employer != scope:recipient + } + is_ai = no + } + } + custom_description = { + text = contact_list_request_interaction_create_contracts + object = scope:recipient + scope:actor = { + OR = { + can_create_task_contract = { + type_name = laamp_raid_contract + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_join_war_contract + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_steal_artifact_contract + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_construction_contract + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_treasure_hunting_contract + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_vip + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_artifact + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_gold + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_ward + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_explorer + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_transport_animal + employer = scope:recipient + } + can_create_task_contract = { + type_name = laamp_join_faction_contract + employer = scope:recipient + } + } + } + } + } + } + #request feast + send_option = { + flag = request_feast + is_shown = { + scope:actor = { + has_perk = inspiring_rule_perk + } + scope:recipient = { + is_landed_or_landless_administrative = yes + capital_province ?= { + squared_distance = { + target = scope:actor.capital_province + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } + } + scope:recipient = { is_ai = yes } + } + is_valid = { + scope:recipient = { + highest_held_title_tier > tier_barony + is_at_war = no + is_available_adult = yes + } + scope:actor = { + custom_tooltip = { + text = ACTIVITY_SUMMARY_COOLDOWN_HEADER + NOT = { has_character_flag = laamp_recently_requested_feast } + } + } + } + } + #request tournament + send_option = { + flag = request_tournament + is_shown = { + has_ep2_dlc_trigger = yes + scope:actor = { + has_perk = stalwart_leader_perk + } + scope:recipient = { + is_landed = yes + NOT = { has_variable = conqueror } + capital_province ?= { + squared_distance = { + target = scope:actor.capital_province + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } + } + scope:recipient = { is_ai = yes } + } + is_valid = { + scope:recipient = { + highest_held_title_tier > tier_barony + is_at_war = no + is_available_adult = yes + } + scope:actor = { + custom_tooltip = { + text = contact_list_request_interaction.request_tournament_cooldown + NOT = { has_character_flag = laamp_recently_requested_tourney } + } + } + } + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + cost = { + prestige = { + add = 100 + # Upgrade for tier. + multiply = { + value = scope:recipient.highest_held_title_tier + # Discount barons. + add = -1 + } + # Upgrade for the more egregious requests. + ## Marriage. + if = { + limit = { scope:request_marriage = yes } + multiply = 1.5 + } + ## Activities. + ### Tournament. + if = { + limit = { scope:request_tournament = yes } + multiply = 2 + } + ### Feast. + if = { + limit = { scope:request_feast = yes } + multiply = 1.25 + } + min = 100 + } + } + + on_accept = { + scope:actor = { + switch = { + trigger = yes + scope:request_tournament ?= { + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion_special + target = scope:actor + opinion = -50 + } + custom_tooltip = contact_list_request_interaction.request_tournament + } + hidden_effect = { + scope:recipient = { + add_character_flag = { + flag = tournament_ai_override + } + ai_attempt_to_host_activity = activity_tournament + } + scope:actor = { + add_character_flag = { + flag = laamp_recently_requested_tourney + days = 3650 + } + } + } + } + scope:request_feast ?= { + scope:actor = { custom_tooltip = contact_list_request_interaction.request_feast_honor } + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -30 + } + custom_tooltip = contact_list_request_interaction.request_feast + } + hidden_effect = { + scope:recipient = { + add_character_flag = { + flag = feast_ai_override + } + ai_attempt_to_host_activity = activity_feast + } + scope:actor = { + add_character_flag = { + flag = laamp_recently_requested_feast + days = 1875 + } + } + } + } + scope:request_provisions ?= { + save_scope_value_as = { + name = provisions_to_add_value + value = { + if = { + limit = { scope:recipient.highest_held_title_tier >= tier_empire } + add = monumental_provisions_gain + } + else_if = { + limit = { scope:recipient.highest_held_title_tier >= tier_kingdom } + add = massive_provisions_gain + } + else_if = { + limit = { scope:recipient.highest_held_title_tier >= tier_duchy } + add = major_provisions_gain + } + else_if = { + limit = { scope:recipient.highest_held_title_tier >= tier_county } + add = medium_provisions_gain + } + else = { add = minor_provisions_gain } + } + } + if = { + limit = { + scope:actor.domicile.max_provisions < { + value = { + value = scope:provisions_to_add_value + add = scope:actor.domicile.provisions + } + } + } + save_scope_value_as = { + name = gained_provisions_value + value = { + value = scope:actor.domicile.max_provisions + subtract = scope:actor.domicile.provisions + } + } + save_scope_value_as = { + name = provisions_overflow_value + value = { + value = scope:provisions_to_add_value + subtract = scope:gained_provisions_value + } + } + save_scope_value_as = { + name = provisions_transformed_to_gold_value + value = { + value = scope:provisions_overflow_value + multiply = 0.05 + } + } + } + else = { + save_scope_value_as = { + name = gained_provisions_value + value = scope:provisions_to_add_value + } + } + send_interface_toast = { + type = event_toast_effect_good + title = contact_list_request_interaction.request_provisions_tt + left_icon = scope:actor + right_icon = scope:recipient + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion_special + target = scope:actor + opinion = -20 + } + if = { + limit = { + exists = capital_county + } + hidden_effect = { + capital_county = { + add_county_modifier = { + modifier = ep3_gave_out_provisions + years = 3 + } + #save it for loc in custom tooltip + save_scope_as = capital_county + } + } + custom_tooltip = contact_list_request_interaction.capital_county_modifier + } + } + scope:actor = { + custom_tooltip = contact_list_request_interaction.gained_provisions_value + hidden_effect = { + domicile = { + change_provisions = scope:gained_provisions_value + } + } + if = { + limit = { + exists = scope:provisions_transformed_to_gold_value + } + custom_tooltip = { + text = overflowing_provisions_to_gold.tt + add_gold = scope:provisions_transformed_to_gold_value + } + } + } + } + } + scope:request_gold ?= { + save_scope_value_as = { + name = requested_gold_value + value = { + value = scope:recipient.gold + divide = 4 + multiply = { + value = scope:recipient.ai_greed + divide = -300 + add = 1 + } + if = { + limit = { + scope:recipient = { + has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + } + multiply = 1.5 + } + else_if = { + limit = { + scope:recipient = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + } + multiply = 1.25 + } + max = { + scope:recipient.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + value = 250 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + value = 200 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + value = 150 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_tribal + } + value = 100 + } + else = { + value = 50 + } + } + } + floor = yes + min = 5 + } + } + send_interface_toast = { + type = event_toast_effect_good + title = contact_list_request_interaction.request_gold_tt + left_icon = scope:actor + right_icon = scope:recipient + scope:actor = { + show_as_tooltip = { + add_gold = scope:requested_gold_value + } + } + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = scope:requested_gold_value + } + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -40 + } + } + } + } + scope:request_maa ?= { + custom_tooltip = contact_list_request_interaction.request_maa + hidden_effect = { + ep3_pick_random_maa_regiment_effect = { + OWNER = scope:recipient + INCLUDE_BASIC_MAA = no + INCLUDE_SIEGE_MAA = no + } + send_interface_toast = { + type = event_toast_effect_good + title = contact_list_request_interaction.request_maa_tt + left_icon = scope:actor + right_icon = scope:recipient + ep3_create_random_maa_regiment_effect = { + OWNER = scope:actor + SIZE = 1 + } + } + } + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -40 + } + } + } + scope:request_knights ?= { + scope:actor = { + custom_tooltip = contact_list_request_interaction.request_knights + trigger_event = ep3_interactions_events.0101 + } + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -30 + } + } + } + scope:request_marriage ?= { + scope:actor = { + custom_tooltip = contact_list_request_interaction.request_marriage + custom_tooltip = contact_list_request_interaction.request_marriage.marriagable_women + custom_tooltip = contact_list_request_interaction.request_marriage.marriagable_men + custom_tooltip = contact_list_request_interaction.request_marriage.warning + if = { + limit = { is_ai = no } + open_interaction_window = { + interaction = arrange_marriage_interaction + actor = scope:actor + recipient = scope:recipient + } + } + add_to_variable_list = { + name = contact_list_marriage + target = scope:recipient + } + } + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -50 + } + } + } + scope:request_contract ?= { + scope:actor = { + custom_tooltip = contact_list_request_interaction.request_contract + hidden_effect = { + random_list = { + #laamp_raid_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_raid_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_mercenaries + } + create_task_contract = { + task_contract_type = laamp_raid_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_raid_contract + value = yes + } + } + #laamp_join_war_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_join_war_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_mercenaries + } + create_task_contract = { + task_contract_type = laamp_join_war_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_join_war_contract + value = yes + } + } + #laamp_steal_artifact_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_steal_artifact_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_brigands + } + create_task_contract = { + task_contract_type = laamp_steal_artifact_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_steal_artifact_contract + value = yes + } + } + #laamp_construction_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_construction_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_scholars + } + create_task_contract = { + task_contract_type = laamp_construction_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_construction_contract + value = yes + } + } + #laamp_treasure_hunting_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_treasure_hunting_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_explorers + } + } + create_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_treasure_hunting_contract + value = yes + } + } + #laamp_transport_vip + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_vip + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_explorers + } + create_task_contract = { + task_contract_type = laamp_transport_vip + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_vip + value = yes + } + } + #laamp_transport_artifact + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_artifact + employer = scope:recipient + } + } + modifier = { + add = 10 + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_explorers + } + } + create_task_contract = { + task_contract_type = laamp_transport_artifact + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_artifact + value = yes + } + } + #laamp_transport_gold + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_gold + employer = scope:recipient + } + } + modifier = { + add = 10 + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_explorers + } + } + create_task_contract = { + task_contract_type = laamp_transport_gold + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_gold + value = yes + } + } + #laamp_transport_ward + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_ward + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_explorers + } + create_task_contract = { + task_contract_type = laamp_transport_ward + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_ward + value = yes + } + } + #laamp_transport_explorer + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_explorer + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_explorers + } + create_task_contract = { + task_contract_type = laamp_transport_explorer + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_explorer + value = yes + } + } + #laamp_transport_animal + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_animal + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_explorers + } + create_task_contract = { + task_contract_type = laamp_transport_animal + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_transport_animal + value = yes + } + } + #laamp_join_faction_contract + 1 = { + trigger = { + can_create_task_contract = { + type_name = laamp_join_faction_contract + employer = scope:recipient + } + } + modifier = { + add = 10 + has_realm_law = camp_purpose_mercenaries + } + create_task_contract = { + task_contract_type = laamp_join_faction_contract + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + save_scope_as = new_contract + } + save_scope_value_as = { + name = create_laamp_join_faction_contract + value = yes + } + } + } + scope:new_contract = { + open_view_data = { + view = task_contract + player = scope:actor + } + } + } + } + scope:recipient = { + add_opinion = { + modifier = laamp_used_contact_opinion + target = scope:actor + opinion = -5 + } + show_as_tooltip = { + custom_description_no_bullet = { text = contact_list_request_interaction_possible_outcomes } + if = { + limit = { + scope:create_laamp_raid_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_raid_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_join_war_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_join_war_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_construction_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_construction_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_steal_artifact_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_steal_artifact_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_treasure_hunting_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_vip ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_vip + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_artifact ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_artifact + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_gold ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_gold + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_ward ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_ward + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_explorer ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_explorer + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_transport_animal ?= yes + } + create_task_contract = { + task_contract_type = laamp_transport_animal + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + if = { + limit = { + scope:create_laamp_join_faction_contract ?= yes + } + create_task_contract = { + task_contract_type = laamp_join_faction_contract + location = scope:recipient.location + task_contract_employer = scope:recipient + task_contract_tier = scope:recipient.task_contract_tier_value + } + } + } + } + } + } + if = { + limit = { + has_usable_hook = scope:recipient + scope:recipient = { is_ai = yes } + } + use_hook = scope:recipient + custom_tooltip = contact_list_request_interaction.tt.hook_auto_used + } + } + scope:recipient = { + add_prestige = { + value = scope:actor.prestige_level + multiply = 100 + } + } + } + + can_send_despite_rejection = no + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 3 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_targets = { ai_recipients = contacts } + ai_targets = { ai_recipients = hooked_characters } + auto_accept = { + scope:actor = { has_usable_hook = scope:recipient } + scope:recipient = { is_ai = yes } + } + ai_potential = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + ai_accept = { + base = 0 + + modifier = { + add = -50 + scope:recipient = { + NOR = { + is_contact_of = scope:actor + is_close_or_extended_family_of = scope:actor + is_consort_of = scope:actor + } + } + desc = contact_list_request_interaction.no_contact + } + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + + modifier = { + add = -50 + scope:recipient = { + has_opinion_modifier = { + modifier = laamp_used_contact_opinion + target = scope:actor + } + } + desc = contact_list_request_interaction.repeated_request + } + + ai_value_modifier = { + ai_compassion = -0.5 + ai_greed = -0.5 + min = -50 + max = 50 + } + + modifier = { + add = 30 + desc = contact_list_request_interaction.request_gold.contract + scope:request_contract ?= yes + } + + modifier = { + add = -30 + desc = contact_list_request_interaction.request_gold.poor_recipient + scope:request_gold ?= yes + scope:recipient = { + gold < major_gold_value + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.request_gold.stewardship + OR = { + scope:request_provisions ?= yes + scope:request_gold ?= yes + } + scope:recipient = { + has_trait = education_stewardship + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.request_gold.martial + OR = { + scope:request_maa ?= yes + scope:request_knights ?= yes + } + scope:recipient = { + has_trait = education_martial + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.request.defensive_negotiations_perk + OR = { + scope:request_maa ?= yes + scope:request_knights ?= yes + } + scope:actor = { + has_perk = defensive_negotiations_perk + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.relevant_focus + scope:request_marriage ?= yes + scope:recipient = { + OR = { + has_focus = diplomacy_family_focus + has_focus = intrigue_temptation_focus + has_focus = martial_chivalry_focus + } + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.relevant_focus + OR = { + scope:request_maa ?= yes + scope:request_knights ?= yes + } + scope:recipient = { + OR = { + has_focus = martial_strategy_focus + has_focus = martial_chivalry_focus + has_focus = martial_authority_focus + } + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.request_knights.plenty + scope:request_knights ?= yes + scope:recipient = { + number_of_knights > 6 + } + } + + modifier = { + add = -25 + desc = contact_list_request_interaction.request_knights.little + scope:request_knights ?= yes + scope:recipient = { + number_of_knights <= 6 + } + } + + modifier = { + add = -25 + desc = contact_list_request_interaction.powerful + scope:request_maa ?= yes + scope:actor = { + max_military_strength >= 400 + max_military_strength < 800 + } + } + + modifier = { + add = -50 + desc = contact_list_request_interaction.very_powerful + scope:request_maa ?= yes + scope:actor.max_military_strength >= 800 + } + + modifier = { + add = -30 + desc = contact_list_request_interaction.stronger_than_me + scope:request_maa ?= yes + scope:actor.max_military_strength > scope:recipient.max_military_strength + } + + modifier = { + add = -25 + desc = contact_list_request_interaction.traveler + scope:request_provisions ?= yes + scope:recipient = { + has_trait = lifestyle_traveler + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.adventurer + scope:recipient = { + has_trait = adventurer + } + } + + modifier = { + add = 25 + desc = contact_list_request_interaction.adventurer_follower + scope:recipient = { + has_trait = adventurer_follower + } + } + + modifier = { + add = 20 + desc = contact_list_request_interaction.flexible_truces_perk + scope:actor = { + has_perk = flexible_truces_perk + } + } + + # Your level of prestige. + ## Impotent + modifier = { + add = -10 + desc = AI_OPINION_PRESTIGE_LEVEL_DISGRACED + scope:actor.prestige_level = 0 + } + ## Influential + ### Would be zero, so it wouldn't appear. + ## Persuasive + modifier = { + add = 5 + desc = AI_OPINION_PRESTIGE_LEVEL_DISTINGUISHED + scope:actor.prestige_level = 2 + scope:actor = { + NOT = { + has_perk = true_ruler_perk + } + } + } + ## Controlling + modifier = { + add = 10 + desc = AI_OPINION_PRESTIGE_LEVEL_ILLUSTRIOUS + scope:actor.prestige_level = 3 + scope:actor = { + NOT = { + has_perk = true_ruler_perk + } + } + } + ## Authoritative + modifier = { + add = 20 + desc = AI_OPINION_PRESTIGE_LEVEL_EXALTED + scope:actor.prestige_level = 4 + scope:actor = { + NOT = { + has_perk = true_ruler_perk + } + } + } + ## Imperious + modifier = { + add = 30 + desc = AI_OPINION_PRESTIGE_LEVEL_LEGENDARY + scope:actor.prestige_level = 5 + scope:actor = { + NOT = { + has_perk = true_ruler_perk + } + } + } + + ## Persuasive + modifier = { + add = 6 + desc = AI_OPINION_PRESTIGE_LEVEL_DISTINGUISHED + scope:actor.prestige_level = 2 + scope:actor = { has_perk = true_ruler_perk } + } + ## Controlling + modifier = { + add = 12 + desc = AI_OPINION_PRESTIGE_LEVEL_ILLUSTRIOUS + scope:actor.prestige_level = 3 + scope:actor = { has_perk = true_ruler_perk } + } + ## Authoritative + modifier = { + add = 24 + desc = AI_OPINION_PRESTIGE_LEVEL_EXALTED + scope:actor.prestige_level = 4 + scope:actor = { has_perk = true_ruler_perk } + } + ## Imperious + modifier = { + add = 36 + desc = AI_OPINION_PRESTIGE_LEVEL_LEGENDARY + scope:actor.prestige_level = 5 + scope:actor = { has_perk = true_ruler_perk } + } + } + + ai_will_do = { + base = 50 + + # Set up the AI so that they actually know how to use the send_options. + ## Troops, if they don't have gold. + modifier = { + add = 50 + scope:recipient.gold < 50 + scope:request_maa = yes + } + ## Gold is always good. + modifier = { + add = 50 + scope:recipient.gold >= 30 + scope:request_gold = yes + } + ## Feasts are especially attractive for some adventurers. + modifier = { + add = 50 + scope:request_feast = yes + OR = { + prestige <= 500 + has_trait = arrogant + has_trait = gluttonous + has_trait = gregarious + has_trait = drunkard + } + } + ## Provisions are fine, but nothing special for the AI. + modifier = { + add = 5 + scope:request_provisions = yes + scope:actor.domicile.provisions < scope:actor.domicile.max_provisions + } + ## Don't go crazy with tournaments + modifier = { + factor = 0 + scope:request_tournament = yes + } + modifier = { + factor = 0 + NOR = { + scope:request_provisions = yes + scope:request_gold = yes + scope:request_maa = yes + scope:request_knights = yes + scope:request_marriage = yes + scope:request_contract = yes + scope:request_feast = yes + scope:request_tournament = yes + } + } + } +} + +################## +# Seize Realm Scheme +# by Joe Parkin +################## + +seize_realm_interaction = { + icon = icon_scheme_seizure + category = interaction_category_laamp + interface_priority = 10 + + ignores_pending_interaction_block = yes + + scheme = seize_realm + + send_name = START_SCHEME + + is_shown = { + scope:recipient != scope:actor + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + scope:recipient = { + is_landed = yes + highest_held_title_tier >= tier_county + } + } + + is_valid_showing_failures_only = { + scope:actor = { + can_start_scheme = { + type = seize_realm + target_character = scope:recipient + } + } + NOT = { + scope:recipient = { has_strong_hook = scope:actor } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + + desc = { + triggered_desc = { + trigger = { + scope:actor = { + can_start_scheme = { + type = seize_realm + target_character = scope:recipient + } + } + } + desc = scheme_interaction_tt_seize_realm_approved + } + } + + # Scheme Starter Packages + options_heading = schemes.t.agent_packages + send_options_exclusive = yes + ## Balanced agents. + send_option = { + flag = agent_focus_balance + current_description = seize_realm_interaction.tt.agent_focus_balance + } + ## Focused on Success Chance. + send_option = { + flag = agent_focus_success + current_description = seize_realm_interaction.tt.agent_focus_success + } + ## Focused on Speed. + send_option = { + flag = agent_focus_speed + current_description = seize_realm_interaction.tt.agent_focus_speed + } + ## Focused on Secrecy. + send_option = { + flag = agent_focus_secrecy + current_description = seize_realm_interaction.tt.agent_focus_secrecy + } + + on_accept = { + scope:actor = { + stress_impact = { + compassionate = major_stress_impact_gain + honest = medium_stress_impact_gain + just = medium_stress_impact_gain + } + } + scope:actor = { + send_interface_toast = { + title = start_seize_realm_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + # Success. + if = { + limit = { scope:agent_focus_success ?= yes } + begin_scheme_with_agents_effect = { + SCHEME_TYPE = seize_realm + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + # Success. + AGENT_1 = agent_muscle + AGENT_2 = agent_muscle + AGENT_3 = agent_diplomat + # Speed. + AGENT_4 = agent_infiltrator + # Secrecy. + AGENT_5 = agent_lookout + } + } + # Speed. + else_if = { + limit = { scope:agent_focus_speed ?= yes } + begin_scheme_with_agents_effect = { + SCHEME_TYPE = seize_realm + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + # Speed. + AGENT_1 = agent_infiltrator + AGENT_2 = agent_footpad + AGENT_3 = agent_planner + # Success. + AGENT_4 = agent_muscle + # Secrecy. + AGENT_5 = agent_lookout + } + } + # Secrecy. + else_if = { + limit = { scope:agent_focus_secrecy ?= yes } + begin_scheme_with_agents_effect = { + SCHEME_TYPE = seize_realm + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + # Secrecy. + AGENT_1 = agent_lookout + AGENT_2 = agent_decoy + AGENT_3 = agent_decoy + # Success. + AGENT_4 = agent_muscle + # Speed. + AGENT_5 = agent_infiltrator + } + } + # Balanced. + else = { + begin_scheme_with_agents_effect = { + SCHEME_TYPE = seize_realm + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + # Success. + AGENT_1 = agent_muscle + AGENT_2 = agent_muscle + # Speed. + AGENT_3 = agent_infiltrator + AGENT_4 = agent_planner + # Secrecy. + AGENT_5 = agent_lookout + } + } + + show_as_tooltip = { + stress_impact = { + honest = medium_stress_impact_gain + just = medium_stress_impact_gain + } + } + } + } + custom_tooltip = seize_realm_warning + } + + auto_accept = yes +} + +################## +# Reinforce Soldiers +# by Joe Parkin +################## + +reinforce_soldiers_interaction = { + icon = owner_in_debt + category = interaction_category_laamp + interface_priority = 10 + common_interaction = yes + desc = reinforce_soldiers_interaction_desc + cooldown = { months = 6 } + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + government_allows = conditional_maa_refill + NOT = { government_has_flag = government_is_nomadic } + } + scope:recipient = scope:actor + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = reinforce_soldiers_any_regiment_tt + scope:actor.maa_regiments_count >= 1 + } + custom_tooltip = { + text = reinforce_soldiers_unfull_regiment_tt + scope:actor = { + any_maa_regiment = { maa_regiments_valid_for_cheap_reinforcement_trigger = yes } + } + } + custom_tooltip = { + text = SUPPLY_LOSS_AT_SEA + scope:actor = { any_laamp_portion_at_sea_trigger = no } + } + } + + send_options_exclusive = yes + + send_option = { + flag = skill + localization = reinforce_soldiers_option_skill + current_description = reinforce_soldiers_option_skill_desc + } + + send_option = { + flag = prestige + localization = reinforce_soldiers_option_prestige + current_description = reinforce_soldiers_option_prestige_desc + } + + send_option = { + flag = piety + localization = reinforce_soldiers_option_piety + current_description = reinforce_soldiers_option_piety_desc + is_valid = { + custom_tooltip = { + text = reinforce_soldiers_option_piety_tt + scope:actor.domicile.domicile_location.county ?= { + OR = { + holder ?= { government_has_flag = government_is_theocracy } + any_county_province = { + barony = { + is_under_holy_order_lease = yes + lessee.faith = scope:actor.faith + } + } + } + } + } + } + } + + send_option = { + flag = dread + localization = reinforce_soldiers_option_dread + current_description = reinforce_soldiers_option_dread_desc + is_valid = { + custom_tooltip = { + text = reinforce_soldiers_option_dread_tt + OR = { + scope:actor.dread >= reinforce_soldiers_dread_cost_value + scope:actor = { + has_character_modifier = ep3_friend_to_old_soldiers_modifier + } + } + } + } + } + + on_accept = { + scope:actor = { + switch = { + trigger = yes + scope:prestige = { + if = { + limit = { + is_ai = no + } + add_prestige = { + value = { + value = -75 + if = { + limit = { + scope:actor.domicile.domicile_location.county.holder ?= { government_has_flag = government_is_tribal } + } + add = 25 + } + multiply = reinforce_soldiers_reinforcable_regiments_value + } + } + } + reinforce_soldiers_regiment_effect = yes + } + scope:piety = { + add_piety = { + value = { + value = minor_piety_loss + multiply = reinforce_soldiers_reinforcable_regiments_value + } + } + reinforce_soldiers_regiment_effect = yes + } + scope:skill = { + duel = { + skills = { diplomacy prowess } + value = high_skill_rating + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 2 + } + desc = reinforce_soldiers_skill_success + send_interface_toast = { + type = event_toast_effect_good + title = reinforce_soldiers_skill_success + reinforce_soldiers_regiment_effect = yes + } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 2 + } + desc = reinforce_soldiers_skill_failure + send_interface_toast = { + type = event_toast_effect_bad + title = reinforce_soldiers_skill_failure + if = { + limit = { + is_ai = no + } + add_prestige = -100 + } + } + } + } + } + scope:dread = { + random_list = { + 1 = { + modifier = { + add = { + value = scope:actor.dread + multiply = 2 + } + } + desc = reinforce_soldiers_skill_success + send_interface_toast = { + type = event_toast_effect_good + title = reinforce_soldiers_skill_success + reinforce_soldiers_regiment_effect = yes + } + } + 100 = { + min = 25 + modifier = { + add = { + value = 0 + subtract = scope:actor.dread + } + } + desc = reinforce_soldiers_skill_failure + send_interface_toast = { + type = event_toast_effect_bad + title = reinforce_soldiers_skill_failure + if = { + limit = { + is_ai = no + } + add_prestige = minor_prestige_loss + } + } + } + } + add_dread = { + value = reinforce_soldiers_dread_cost_value + multiply = -1 + } + } + } + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 6 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_targets = { + ai_recipients = self + } + ai_potential = { + government_allows = conditional_maa_refill + any_maa_regiment = { maa_current_troops_count < maa_max_troops_count } + } + + ai_will_do = { + base = 100 + + modifier = { + scope:dread = yes + add = 5 + } + + modifier = { + scope:prestige = yes + add = 3 + } + + modifier = { + scope:piety = yes + add = 2 + } + + modifier = { + scope:skill = yes + add = 1 + } + } +} + +################## +# Hire LAAMP as mercenaries +# by Arkadiusz Majewski +# As a landed ruler hire a LAAMP to join your war +################## + +hire_laamp_mercenaries_interaction = { + category = interaction_category_diplomacy + icon = alliance + desc = hire_laamp_mercenaries_interaction_desc + + greeting = positive + notification_text = hire_laamp_mercenaries_interaction_notification + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 0 + ai_max_reply_days = 0 + + cooldown_against_recipient = { years = 3 } + can_send_despite_rejection = yes + ai_accept_negotiation = yes + send_options_exclusive = no + is_shown = { + has_ep3_dlc_trigger = yes + scope:recipient = { + has_government = landless_adventurer_government + } + scope:actor != scope:recipient + scope:actor = { + trigger_if = { # Avoid calling Adventurers without armies + limit = { + is_ai = yes + } + scope:recipient.current_military_strength >= 100 + } + } + } + is_valid_showing_failures_only = { + scope:recipient = { + is_travelling = no + is_at_war = no + is_imprisoned = no + } + scope:actor = { + custom_tooltip = { + text = MERCENARY_COMPANY_COST_BANKRUPTCY + debt_level <= 1 + } + is_at_war = yes + custom_tooltip = { + text = I_MUST_BE_THE_WAR_LEADER + any_character_war = { + is_war_leader = scope:actor + } + } + NOT = { + is_at_war_with = scope:recipient + } + } + scope:actor = { + NOT = { + any_war_ally = { + count >= 3 + has_government = landless_adventurer_government + } + } + } + scope:actor = { + OR = { + is_ai = no + any_character_war = { + count = all + OR = { + AND = { + primary_attacker = scope:actor + defender_war_score <= 95 + } + AND = { + primary_defender = scope:actor + attacker_war_score <= 95 + } + } + } + } + } + # Adventurers can't join wars in places they're exiled from. + trigger_if = { + limit = { + scope:actor = { top_liege != this } + } + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:actor.capital_province + LAAMP = scope:recipient + } + } + } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + on_accept = { + scope:actor = { + every_character_war = { + add_to_list = actor_wars + } + } + every_in_list = { + list = actor_wars + limit = { + primary_defender = scope:actor + } + add_to_list = join_as_defender + remove_from_list = actor_wars + } + every_in_list = { + list = actor_wars + limit = { + primary_attacker = scope:actor + } + add_to_list = join_as_attacker + remove_from_list = actor_wars + } + + every_in_list = { + list = join_as_attacker + add_attacker = scope:recipient + } + every_in_list = { + list = join_as_defender + add_defender = scope:recipient + } + #list all wars that scope:recipient can't join + every_in_list = { + list = actor_wars + custom = hire_laamp_mercenaries_interaction.not_primary_side + # I swear it was the only way to make the tooltip look nice + every_in_list = { + list = actor_wars + save_temporary_scope_as = war + custom_tooltip = hire_laamp_mercenaries_interaction.war + } + } + scope:actor = { + pay_short_term_gold = { + target = scope:recipient + gold = ep3_hire_laamp_mercs_cost_value + } + add_to_variable_list = { + name = hired_mercenaries + target = scope:recipient + } + custom_tooltip = hire_laamp_mercenaries_interaction.contribution_pay + if = { + limit = { + has_title = title:h_china + situation:dynastic_cycle ?= { + situation_top_has_catalyst = catalyst_hegemon_hired_mercenary + } + } + trigger_situation_catalyst = { + catalyst = catalyst_hegemon_hired_mercenary + character = scope:actor + } + } + } + scope:recipient = { + add_character_flag = joined_as_mercenary + } + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = medium_unity_gain + DESC = clan_unity_alliance.desc + REVERSE_NON_HOUSE_TARGET = no + } + debug_log = "Landed ruler hired a LAAMP to join wars" + debug_log_scopes = yes + #for debug purposes: + #if = { + # limit = { NOT = { exists = global_var:hire_laamp_as_mercs_accepted } } + # set_global_variable = { + # name = hire_laamp_as_mercs_accepted + # value = 0 + # } + #} + #else = { + # change_global_variable = { + # name = hire_laamp_as_mercs_accepted + # add = 1 + # } + #} + } + + on_decline = { + scope:recipient = { + trigger_event = ep3_interactions_events.0111 + custom_tooltip = hire_laamp_mercenaries_interaction.negotiation_offer + } + #for debug purposes: + #if = { + # limit = { NOT = { exists = global_var:hire_laamp_as_mercs_rejected } } + # set_global_variable = { + # name = hire_laamp_as_mercs_rejected + # value = 0 + # } + #} + #else = { + # change_global_variable = { + # name = hire_laamp_as_mercs_rejected + # add = 1 + # } + #} + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_alliance_refusal.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + ai_frequency_by_tier = { + barony = 0 + county = 12 + duchy = 12 + kingdom = 6 + empire = 6 + hegemony = 6 + } + ai_targets = { + ai_recipients = nearby_domicile_owners + } + ai_potential = { + any_character_war = { + is_war_leader = prev + } + war_chest_gold >= quarter_ai_war_chest_gold_maximum + } + ai_accept = { + base = -20 + + modifier = { # merc laamp wants to join + add = 50 + scope:recipient = { + has_realm_law = camp_purpose_mercenaries + } + desc = camp_purpose_mercenaries_reason + } + + modifier = { # don't join many losing wars + save_temporary_scope_value_as = { + name = attacker_war + value = 2 + } + scope:actor = { + any_character_war = { + primary_attacker = scope:actor + attacker_war_score < 0 + save_temporary_scope_value_as = { + name = attacker_war + value = { + value = scope:attacker_war + multiply = attacker_war_score + } + } + } + } + add = scope:attacker_war + desc = attacker_losisng_too_much_reason + } + modifier = { # don't join many losing wars + add = scope:defender_war + save_temporary_scope_value_as = { + name = defender_war + value = 2 + } + scope:actor = { + any_character_war = { + primary_defender = scope:actor + defender_war_score < 0 + save_temporary_scope_value_as = { + name = defender_war + value = { + value = scope:defender_war + multiply = defender_war_score + } + } + } + } + desc = defender_losisng_too_much_reason + } + + modifier = { # Refuse call against Heir + add = -1000 + exists = scope:recipient.player_heir + scope:actor = { + any_character_war = { + OR = { + primary_defender = scope:recipient.player_heir + primary_attacker = scope:recipient.player_heir + } + } + } + desc = WONT_FIGHT_HEIR_REASON + } + + modifier = { # Refuse call against Spouse + add = -1000 + scope:actor = { + any_character_war = { + OR = { + primary_defender = { + is_spouse_of = scope:recipient + } + primary_attacker = { + is_spouse_of = scope:recipient + } + } + } + } + desc = WONT_FIGHT_SPOUSE_REASON + } + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + desc = AI_OPINION_REASON + } + + modifier = { # Tends to join if low on cash + add = 50 + scope:recipient = { + short_term_gold <= minor_gold_value + } + desc = NEEDS_CASH + } + + modifier = { # Tends to join defensive wars + add = 50 + scope:actor = { + any_character_war = { + primary_defender = scope:actor + } + } + desc = DEFENSIVE_WAR_REASON + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + + compare_modifier = { # Likes fighting infidels + trigger = { + scope:recipient.faith = scope:actor.faith + scope:actor = { + any_character_war = { + trigger_if = { + limit = { + primary_defender = scope:actor + } + primary_attacker = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= religious_cb_enabled_hostility_level + } + } + } + } + trigger_else_if = { + limit = { + primary_attacker = scope:actor + } + primary_defender = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= religious_cb_enabled_hostility_level + } + } + } + } + trigger_else = { + always = no + } + } + } + } + target = scope:recipient + value = ai_zeal + desc = "ZEAL_AGAINST_INFIDELS" + min = 0 + multiplier = 0.5 + } + + modifier = { # Reluctant to attack another ally + add = -50 + scope:actor = { + any_character_war = { + primary_defender != scope:actor + primary_defender = { + is_allied_to = scope:recipient + } + } + } + desc = ATTACK_ON_ALLY_REASON + } + + modifier = { # Reluctant to defend against another ally + add = -25 + scope:actor = { + any_character_war = { + primary_attacker != scope:actor + primary_attacker = { + is_allied_to = scope:recipient + } + } + } + desc = WAR_WITH_ALLY_REASON + } + + modifier = { # Reluctant to join wars against religious brethren. + add = -50 + scope:recipient.faith != scope:actor.faith + scope:actor = { + any_character_war = { + OR = { + using_cb = minor_religious_war + using_cb = religious_war + using_cb = major_religious_war + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + OR = { + AND = { + primary_attacker != scope:actor + primary_attacker.faith = scope:recipient.faith + } + AND = { + primary_defender != scope:actor + primary_defender.faith = scope:recipient.faith + } + } + } + } + } + desc = WONT_ATTACK_RELIGIOUS_BRETHREN_REASON + } + + modifier = { # Reluctant to join against Friends + add = -50 + scope:actor = { + any_character_war = { + OR = { + AND = { + primary_attacker != scope:actor + primary_attacker = { + has_relation_friend = scope:recipient + } + } + AND = { + primary_defender != scope:actor + primary_defender = { + has_relation_friend = scope:recipient + } + } + } + } + } + } + + modifier = { # Reluctant to join against Best Friends + add = -100 + scope:actor = { + any_character_war = { + OR = { + AND = { + primary_attacker != scope:actor + primary_attacker = { + has_relation_best_friend = scope:recipient + } + } + AND = { + primary_defender != scope:actor + primary_defender = { + has_relation_best_friend = scope:recipient + } + } + } + } + } + } + modifier = { # Reluctant to join against Lovers + add = -100 + scope:actor = { + any_character_war = { + OR = { + AND = { + primary_attacker != scope:actor + primary_attacker = { + has_relation_lover = scope:recipient + } + } + AND = { + primary_defender != scope:actor + primary_defender = { + has_relation_lover = scope:recipient + } + } + } + } + } + } + modifier = { # Reluctant to join against Soul mate + add = -200 + scope:actor = { + any_character_war = { + OR = { + AND = { + primary_attacker != scope:actor + primary_attacker = { + has_relation_soulmate = scope:recipient + } + } + AND = { + primary_defender != scope:actor + primary_defender = { + has_relation_soulmate = scope:recipient + } + } + } + } + } + } + modifier = { # Refuse call for hostages' safety + any_home_court_hostage = { + warden = { + OR = { + is_at_war_with = scope:actor + any_ally = { is_at_war_with = scope:actor } + } + } + } + add = { + value = 0 + every_home_court_hostage = { + limit = { + warden = { + OR = { + is_at_war_with = scope:actor + any_ally = { is_at_war_with = scope:actor } + } + } + } + subtract = call_to_arms_hostage_value + } + multiply = 0.25 + } + desc = HOSTAGE_ENEMY_CALL_TO_ARMS_REASON + } + + fp3_struggle_resist_allied_wars_modifier = yes + } + + ai_will_do = { + base = 50 + + #don't do it if hired army wouldn't have an impact + modifier = { + scope:actor = { + any_character_war = { + count = all + OR = { + AND = { + primary_attacker = scope:actor + primary_defender.current_military_strength > { + value = scope:recipient.current_military_strength + add = scope:actor.current_military_strength + multiply = 1.5 + } + } + AND = { + primary_defender = scope:actor + primary_attacker.current_military_strength > { + value = scope:recipient.current_military_strength + add = scope:actor.current_military_strength + multiply = 1.5 + } + } + } + } + } + add = -100 + } + + #don't do it if you are stronger than the enemy + modifier = { + scope:actor = { + any_character_war = { + count = all + OR = { + AND = { + primary_attacker = scope:actor + primary_defender.current_military_strength < scope:actor.current_military_strength + } + AND = { + primary_defender = scope:actor + primary_attacker.current_military_strength < scope:actor.current_military_strength + } + } + } + } + add = -200 + } + + #more likely to ask if on contact list + modifier = { + scope:actor = { + is_contact_of = scope:recipient + } + add = 100 + } + + #merc laamp wants to join, so why not asking them more? + modifier = { + scope:recipient = { + has_realm_law = camp_purpose_mercenaries + } + add = 50 + } + + #more likely to ask if losing + modifier = { + scope:actor = { + any_character_war = { + OR = { + AND = { + primary_attacker = scope:actor + defender_war_score > 25 + } + AND = { + primary_defender = scope:actor + attacker_war_score > 25 + } + } + } + } + add = 20 + } + + #don't do it if they betrayed you already in any of your ongoing wars + modifier = { + scope:actor = { + any_character_war = { + OR = { + is_target_in_variable_list = { + name = already_switched_side + target = scope:recipient + } + is_target_in_variable_list = { + name = left_voluntarily + target = scope:recipient + } + } + } + } + add = -1000 + } + + #don't do it if you cannot afford it + modifier = { + scope:actor = { + war_chest_gold < ep3_hire_laamp_mercs_cost_value + } + add = -50 + } + modifier = { + scope:actor = { + gold < ep3_hire_laamp_mercs_cost_value + } + add = -1000 + } + } +} + +################## +# Refill MaA +################## + +refill_maa_interaction = { + icon = icon_soldier_survivor + category = interaction_category_laamp + interface_priority = 20 + common_interaction = yes + desc = refill_maa_interaction_desc + cooldown = { months = 6 } + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + government_allows = conditional_maa_refill + NOT = { government_has_flag = government_is_nomadic } + } + scope:recipient = scope:actor + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = reinforce_soldiers_any_regiment_tt + scope:actor.maa_regiments_count >= 1 + } + custom_tooltip = { + text = reinforce_soldiers_unfull_regiment_tt + scope:actor = { + any_maa_regiment = { maa_regiments_valid_to_refill_trigger = yes } + } + } + custom_tooltip = { + text = SUPPLY_LOSS_AT_SEA + scope:actor = { any_laamp_portion_at_sea_trigger = no } + } + custom_tooltip = { + text = PROCURE_ESTATE_AT_WAR_TT + scope:actor = { + NOT = { + any_army = { + location.county.holder = { + OR = { + is_at_war_with = scope:actor + any_liege_or_above = { is_at_war_with = scope:actor } + } + } + } + } + } + } + } + + send_options_exclusive = yes + + send_option = { + flag = provisions + localization = reinforce_soldiers_option_provisions + current_description = reinforce_soldiers_option_provisions_desc + is_valid = { + scope:actor.domicile.provisions >= 5 + } + } + + send_option = { + flag = gold + localization = reinforce_soldiers_option_gold + current_description = reinforce_soldiers_option_gold_desc + is_valid = { + scope:actor.gold >= 5 + custom_tooltip = { + text = reinforce_soldiers_option_gold_tt + NOT = { + scope:actor.domicile.domicile_location.county.holder ?= { government_has_flag = government_is_tribal } + } + } + } + } + + on_accept = { + scope:actor = { + switch = { + trigger = yes + scope:gold = { + if = { + limit = { gold > replenishable_troops_payed_gold_tt_value } + custom_tooltip = refill_maa_gold_full_tt + } + else = { custom_tooltip = refill_maa_gold_tt } + custom_tooltip = refill_maa_gold_cost_tt + refill_maa_with_gold_effect = yes + } + scope:provisions = { + if = { + limit = { domicile.provisions > replenishable_troops_payed_provisions_tt_value } + custom_tooltip = refill_maa_provisions_full_tt + } + else = { custom_tooltip = refill_maa_provisions_tt } + custom_tooltip = refill_maa_provision_cost_tt + refill_maa_with_provisions_effect = yes + } + } + if = { + limit = { + is_ai = yes + NOR = { + scope:gold = yes + scope:provisions = yes + } + } + refill_maa_with_provisions_effect = yes + } + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 1 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_targets = { + ai_recipients = self + } + ai_potential = { + government_allows = conditional_maa_refill + any_maa_regiment = { maa_current_troops_count < maa_max_troops_count } + } + + ai_will_do = { + base = 100 + modifier = { + factor = 0 + scope:gold = yes + gold <= 500 + } + } +} + +################## +# Evict Adventurer +# by Joe Parkin +################## + +evict_adventurer_interaction = { + common_interaction = yes + category = interaction_category_diplomacy + cooldown_against_recipient = { years = 5 } + greeting = positive + icon = icon_evict_adventurer + desc = evict_adventurer_interaction_desc + + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { is_landed = yes } + scope:recipient != scope:actor + scope:recipient = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + is_landed = no + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_at_war = no + NOR = { + is_spouse_of = scope:recipient + has_relation_friend = scope:recipient + has_relation_lover = scope:recipient + } + } + scope:recipient = { + # Adventurer must be in the subrealm + domicile.domicile_location.county.holder ?= { + OR = { + this = scope:actor + any_liege_or_above = { this ?= scope:actor } + } + } + } + # AI should not against hired adventurers + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:actor = { + opinion = { + target = scope:recipient + value < 25 + } + } + NOT = { + scope:recipient = { + any_character_active_contract = { task_contract_employer = scope:actor } + } + } + } + scope:recipient = { + NOT = { has_strong_hook = scope:actor } + } + # Story blockers. + ## Hereward cannot be exiled by active participants in the Harrying of the North. + disable_interaction_for_hereward_trigger = yes + ## Hasan cannot be exiled by anyone during his story. + disable_interaction_for_hasan_trigger = yes + } + + on_send = { + scope:recipient = { + send_interface_toast = { + type = diplo_contract_scheme_invalidated_message + title = evict_adventurer_interaction.tt.contracts_invalidated.t + right_icon = scope:actor + custom_tooltip = { + text = evict_adventurer_interaction.tt.contracts_invalidated + every_character_task_contract = { + limit = { + task_contract_location.county.holder = { + OR = { + this = scope:actor + any_liege_or_above = { this = scope:actor } + } + } + } + invalidate_contract = yes + } + # We also need to invalidate your active contract, if you've got one, since you need to be travelling. + every_character_active_contract = { invalidate_contract = yes } + } + } + } + } + + on_accept = { + scope:actor = { save_scope_as = expeller } + scope:recipient = { + save_scope_as = adventurer + add_opinion = { + target = scope:actor + modifier = demanded_eviction_opinion + } + custom_tooltip = evict_adventurer_contracts_tt + } + scope:actor = { + custom_description_no_bullet = { + text = evict_adventurer_consequences_tt + object = scope:recipient + subject = scope:actor + } + custom_tooltip = evict_adventurer_casus_belli_tt + show_as_tooltip = { + add_opinion = { + target = scope:recipient + modifier = eviction_ignored_opinion + } + } + } + scope:recipient = { + set_variable = { + name = adventurer_expeller + value = scope:actor + months = 4 + } + trigger_event = { + id = ep3_interactions_events.0500 + days = 1 + } + trigger_event = { + id = ep3_interactions_events.0501 + months = 3 + } + } + } + + on_decline = { + scope:recipient = { + start_war = { + cb = ep3_laamp_apprehend_adventurer_cb + target = scope:actor + } + } + } + + auto_accept = yes + + ai_frequency_by_tier = { + barony = 0 + county = 12 + duchy = 6 + kingdom = 6 + empire = 6 + hegemony = 6 + } + ai_targets = { + ai_recipients = sub_realm_domicile_owners + max = 10 + } + ai_potential = { + is_at_war = no + is_imprisoned = no + NOT = { has_trait = incapable } + } + ai_will_do = { + base = -25 + opinion_modifier = { + who = scope:actor + opinion_target = scope:recipient + multiplier = -0.5 + } + # Independent rulers or kings and over will happily exile claimants. + modifier = { + add = 250 + OR = { + top_liege = this + highest_held_title_tier >= tier_kingdom + } + scope:recipient = { + any_claim = { + tier >= scope:actor.highest_held_title_tier + holder ?= scope:actor + } + } + } + modifier = { + add = 10 + has_opinion_modifier = { + modifier = failed_task_contract_opinion + target = scope:recipient + } + } + modifier = { + add = 30 + has_opinion_modifier = { + modifier = left_war_early + target = scope:recipient + } + } + modifier = { + add = 100 + has_opinion_modifier = { + modifier = switched_sides_in_war + target = scope:recipient + } + } + modifier = { + add = { + if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 100 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 100 + } + } + } + add = 200 + } + else_if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 80 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 80 + } + } + } + add = 150 + } + else_if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 60 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 60 + } + } + } + add = 100 + } + else_if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 40 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 40 + } + } + } + add = 75 + } + else_if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 20 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 20 + } + } + } + add = 50 + } + else_if = { + limit = { + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + value >= 0 + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + value >= 0 + } + } + } + add = 25 + } + } + OR = { + has_opinion_modifier = { + modifier = gallowsbait_scum_opinion + target = scope:recipient + } + has_opinion_modifier = { + modifier = succeeded_criminal_contract_against_me_opinion + target = scope:recipient + } + } + } + # Factors must got at the bottom. + ## Don't evict people we can't beat up. + modifier = { + factor = 0 + scope:actor.current_military_strength < scope:recipient.military_strength_75_percent_value + } + ## Don't evict anyone currently doing a job for us. + modifier = { + factor = 0 + scope:recipient = { + any_character_task_contract = { task_contract_employer = scope:actor } + } + } + ## We _only_ evict if we actually dislike someone. + first_valid = { + # People close to us are more willing to put up with our bullshit. + modifier = { + factor = 0 + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } + opinion = { + target = scope:recipient + value > -30 + } + } + modifier = { + factor = 0 + opinion = { + target = scope:recipient + value > 0 + } + } + } + } +} + +#Become landless admin from laamp +procure_estate_interaction = { + category = interaction_category_laamp + icon = powerful_family_shield + + desc = procure_estate_interaction_desc + + cooldown_against_recipient = { years = 10 } + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:hook = yes + } + desc = PROCURE_ESTATE_HOOK + } + triggered_desc = { + trigger = { + scope:gold_option = yes + } + desc = PROCURE_ESTATE_GOLD + } + triggered_desc = { + trigger = { + scope:piety_option = yes + } + desc = PROCURE_ESTATE_PIETY + } + desc = PROCURE_ESTATE_PRESTIGE + } + desc = PROCURE_ESTATE_PROPOSAL_OUTRO + } + + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 100 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + scope:recipient = { + is_landed = yes + government_allows = noble_families + } + scope:recipient != scope:actor + } + + is_valid_showing_failures_only = { + scope:actor = { + top_liege = this + prestige_level >= 2 + # Only house heads can have Noble Family titles + custom_tooltip = { + text = NOT_IS_HOUSE_HEAD + house.house_head ?= { + OR = { + this = scope:actor + is_ruler = no + } + } + } + } + trigger_if = { # Only a Duke or higher can treat you right + limit = { + scope:recipient = { + highest_held_title_tier < tier_duchy + } + } + custom_description = { + text = procure_estate_low_rank_tt + always = no + } + } + trigger_if = { # Not going to give you a title if you're at war + limit = { + scope:actor = { + is_at_war_with = scope:recipient + } + } + custom_description = { + text = procure_estate_at_war_tt + always = no + } + } + scope:recipient = { + NOT = { has_strong_hook = scope:actor } + } + #Has to be used instead of diplo range checks in laamp to landed interactions + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + scope:recipient = { is_contact_of = scope:actor } + + # Adventurers can't join wars in places they're exiled from. + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:recipient.capital_province + LAAMP = scope:actor + } + } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + } + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + send_option = { + flag = prestige_option + localization = laamp_to_ladmin_prestige_option_desc + } + send_option = { + flag = gold_option + localization = laamp_to_ladmin_gold_option_desc + } + send_option = { + flag = piety_option + localization = laamp_to_ladmin_piety_option_desc + } + + cost = { + gold = { + add = { + value = procure_estate_interaction_cost_base_gold + desc = BASE + } + if = { + limit = { scope:gold_option = yes } + add = { + value = procure_estate_interaction_cost_base_gold + desc = laamp_to_ladmin_gold_option_desc + } + } + } + prestige = { + if = { + limit = { + NOR = { + scope:gold_option = yes + scope:piety_option = yes + scope:hook = yes + } + } + # Base cost + add = { + value = procure_estate_interaction_cost_base_prestige + desc = BASE + } + # Gender modifiers + if = { + limit = { + scope:recipient ?= { + top_liege = { has_realm_law = male_preference_law } + } + scope:actor = { + is_female = yes + } + } + add = { # Increase the base cost + value = { + value = procure_estate_interaction_cost_base_prestige + multiply = 0.25 + } + desc = male_preference_law + } + } + if = { + limit = { + scope:recipient ?= { + top_liege = { has_realm_law = female_preference_law } + } + scope:actor = { + is_male = yes + } + } + add = { # Increase the base cost + value = { + value = procure_estate_interaction_cost_base_prestige + multiply = 0.25 + } + desc = female_preference_law + } + } + #Brigands need to pay more to be legitimized + if = { + limit = { + scope:actor = { + has_realm_law = camp_purpose_brigands + } + } + add = { # Increase the base cost + value = { + value = major_prestige_value + } + desc = camp_purpose_brigands + } + } + } + } + piety = { + if = { + limit = { + scope:piety_option = yes + } + + # Base cost + add = { + value = procure_estate_interaction_cost_base_piety + desc = BASE + } + + # Gender modifiers + if = { + limit = { + scope:recipient ?= { + top_liege = { has_realm_law = male_preference_law } + } + scope:actor = { + is_female = yes + } + } + add = { # Increase the base cost + value = { + value = procure_estate_interaction_cost_base_piety + multiply = 0.25 + } + desc = male_preference_law + } + } + if = { + limit = { + scope:recipient ?= { + top_liege = { has_realm_law = female_preference_law } + } + scope:actor = { + is_male = yes + } + } + add = { # Increase the base cost + value = { + value = procure_estate_interaction_cost_base_piety + multiply = 0.25 + } + desc = female_preference_law + } + } + #Brigands need to pay more to be legitimized + if = { + limit = { + scope:actor = { + has_realm_law = camp_purpose_brigands + } + } + add = { # Increase the base cost + value = { + value = procure_estate_interaction_cost_base_piety + } + desc = camp_purpose_brigands + } + } + } + } + } + + is_highlighted = { + always = yes + } + + on_accept = { + scope:actor = { + save_scope_as = adventurer + procure_estate_interaction_effect = yes + create_character_memory = { + type = procured_estate_memory + participants = { benefactor = scope:recipient } + } + if = { + limit = { + is_ai = no + } + add_achievement_global_variable_effect = { + VARIABLE = started_from_the_bottom_now_were_ere_procure + VALUE = yes + } + } + } + scope:actor = { trigger_event = ep3_interactions_events.0610 } + } + + on_decline = { + scope:actor = { + save_scope_as = adventurer + trigger_event = ep3_interactions_events.0611 + } + } + + ai_targets = { + ai_recipients = contacts + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 60 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + #DIFFERENT FAITH FROM STATE FAITH (if recipient is state faith) + modifier = { + add = -20 + desc = PROCURE_ESTATE_STATE_FAITH_REASON + exists = scope:recipient.top_liege.primary_title.state_faith + scope:actor.faith = { + this != scope:recipient.top_liege.primary_title.state_faith + } + scope:recipient.faith = { + this = scope:recipient.top_liege.primary_title.state_faith + } + NOT = { + scope:piety_option = yes + } + } + #Hey you're actually a local in my capital + modifier = { + add = 10 + desc = PROCURE_ESTATE_SAME_CULTURE_AS_CAPITAL_REASON + scope:recipient.capital_county.culture = { + this = scope:actor.culture + } + } + #Your dynasty is worthless + modifier = { + add = -10 + scope:actor.dynasty = { + dynasty_prestige_level < 2 + } + desc = PROCURE_ESTATE_DYNASTY_PRESTIGE_LEVEL_REASON + } + #Your dynasty is pretty great actually + modifier = { + add = 10 + scope:actor.dynasty = { + dynasty_prestige_level >= 4 + dynasty_prestige_level < 7 + } + desc = PROCURE_ESTATE_DYNASTY_PRESTIGE_LEVEL_REASON + } + #Your dynasty is pretty great actually + modifier = { + add = 20 + scope:actor.dynasty = { + dynasty_prestige_level >= 7 + dynasty_prestige_level < 10 + } + desc = PROCURE_ESTATE_DYNASTY_PRESTIGE_LEVEL_REASON + } + #Your dynasty is pretty great actually + modifier = { + add = 30 + scope:actor.dynasty = { dynasty_prestige_level >= 10 } + desc = PROCURE_ESTATE_DYNASTY_PRESTIGE_LEVEL_REASON + } + #We are not related + modifier = { + add = -15 + desc = PROCURE_ESTATE_SHARED_RELATIVES_REASON + NOR = { + scope:actor.house ?= { + any_house_member = { + is_close_or_extended_family_of = scope:recipient + } + } + scope:actor = { + any_close_or_extended_family_member = { + is_close_or_extended_family_of = scope:recipient + } + } + scope:recipient.house ?= { + any_house_member = { + is_close_or_extended_family_of = scope:actor + } + } + scope:recipient = { + any_spouse = { + is_close_or_extended_family_of = scope:actor + } + } + scope:actor = { + any_spouse = { + is_close_or_extended_family_of = scope:recipient + } + } + scope:actor.dynasty = { + this = scope:recipient.dynasty + } + } + } + #You are criminal scum + modifier = { + add = -50 + desc = PROCURE_ESTATE_BRIGANDS_REASON + scope:actor = { + has_realm_law = camp_purpose_brigands + } + } + #You are an upright legitimist + modifier = { + add = 25 + desc = PROCURE_ESTATE_LEGITIMISTS_REASON + scope:actor = { + has_realm_law = camp_purpose_legitimists + } + } + #You have a criminal background + modifier = { + add = -10 + desc = PROCURE_ESTATE_GALLOWSBAIT_REASON + scope:actor = { + has_trait = gallowsbait + } + } + #You have a criminal background + modifier = { + add = -5 + desc = PROCURE_ESTATE_GALLOWSBAIT_REASON + scope:actor = { + has_trait = gallowsbait + NOR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value < 40 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value < 40 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value < 40 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value < 40 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value < 40 + } + } + } + } + modifier = { + add = -20 + desc = PROCURE_ESTATE_GALLOWSBAIT_REASON + scope:actor = { + has_trait = gallowsbait + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 40 + } + } + NOR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value < 80 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value < 80 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value < 80 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value < 80 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value < 80 + } + } + } + } + modifier = { + add = -50 + desc = PROCURE_ESTATE_GALLOWSBAIT_REASON + scope:actor = { + has_trait = gallowsbait + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 80 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 80 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 80 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 80 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 80 + } + } + } + } + #You have an interesting claim within my realm + modifier = { + add = 5 + desc = PROCURE_ESTATE_CLAIMS_REASON + scope:actor = { + any_claim = { + save_temporary_scope_as = laamp_claim_temp + scope:recipient.top_liege.primary_title = { + is_de_jure_liege_or_above_target = scope:laamp_claim_temp + } + NOT = { + holder ?= scope:recipient + } + } + } + } + #You are a challenger for the empire and I want you indebted to me + modifier = { + add = 20 + desc = PROCURE_ESTATE_IMPERIAL_CLAIMS_REASON + scope:actor = { + any_claim = { + save_temporary_scope_as = laamp_claim_temp + this = scope:recipient.top_liege.primary_title + NOT = { + holder ?= scope:recipient + } + scope:recipient = { + NOR = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:recipient.top_liege } + opinion = { + target = scope:recipient.top_liege + value >= -20 + } + is_allied_to = scope:recipient.top_liege + } + } + } + } + } + #You have a scary claim on one of my titles! + modifier = { + add = -50 + desc = PROCURE_ESTATE_RIVAL_CLAIMANT_REASON + scope:actor = { + any_claim = { + holder ?= scope:recipient + } + } + } + #Needs gold + modifier = { + add = 10 + scope:recipient = { + gold <= minor_gold_value + } + NOT = { + scope:gold_option = yes + } + desc = PROCURE_ESTATE_NEEDS_GOLD_REASON + } + #Needs gold and offering gold + modifier = { + add = 20 + scope:recipient = { + gold <= minor_gold_value + } + scope:gold_option = yes + desc = PROCURE_ESTATE_NEEDS_GOLD_REASON + } + #Needs piety + modifier = { + add = 20 + scope:recipient = { + piety_level <= 0 + } + scope:piety_option = yes + desc = PROCURE_ESTATE_NEEDS_PIETY_REASON + } + + #Needs prestige + modifier = { + add = 20 + scope:recipient = { + prestige_level <= 0 + } + scope:prestige_option = yes + desc = PROCURE_ESTATE_NEEDS_PRESTIGE_REASON + } + } + + ai_will_do = { + base = -25 + ai_value_modifier = { + ai_boldness = -0.5 + ai_energy = -0.5 + ai_greed = 0.5 + ai_rationality = 0.5 + } + modifier = { + gold < 100 + factor = 0 + } + modifier = { + gold > 100 + OR = { + prestige >= massive_prestige_value + piety >= massive_piety_value + gold >= massive_gold_value + } + add = 50 + } + modifier = { + has_hook = scope:recipient + add = 200 + } + } +} + +request_laamp_legitimist_support = { + interface_priority = 50 + common_interaction = yes + category = interaction_category_laamp + cooldown_against_recipient = { years = 5 } + + greeting = positive + + icon = request_invasion_sponsorship_interaction + desc = request_laamp_legitimist_support_interaction_desc + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + has_realm_law = camp_purpose_legitimists + } + scope:recipient = { + is_landed = yes + is_ai = yes + primary_title.tier >= tier_kingdom + } + scope:recipient != scope:actor + } + + is_valid_showing_failures_only = { + NOR = { #so legitimist AI can get lucky. It looks ugly but formats the tooltip correctly + NOT = { + ep3_laamp_diplo_range_trigger = { + TARGET = scope:recipient + LAAMP = scope:actor + } + } + scope:actor = { + is_available_ai_adult = yes + } + } + + + custom_tooltip = { + text = request_laamp_legitimist_have_claim_on_target + scope:actor = { + NOT = { + any_claim = { + OR = { + holder = { + this = scope:recipient + } + holder.top_liege = { + this = scope:recipient + } + } + } + } + } + } + + custom_tooltip = { + text = request_laamp_legitimist_support_already_supporting + scope:recipient = { + NOT = { + has_character_flag = legitimist_supporter + } + } + } + scope:recipient = { + is_at_war = no + is_available_ai_adult = yes + } + + # Adventurers can't join wars in places they're exiled from. + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:recipient.capital_province + LAAMP = scope:actor + } + } + } + } + + send_options_exclusive = no + + cost = { + prestige = { + value = massive_prestige_value + if = { + limit = { + scope:actor.dynasty = scope:recipient.dynasty + } + divide = 2 + } + if = { + limit = { #so legitimist AI can get lucky + scope:actor = { is_ai = yes } + } + divide = 6 + } + } + } + + on_accept = { + scope:actor = { + create_task_contract = { + task_contract_type = laamp_legitimist_support_contract + task_contract_tier = 3 + location = scope:recipient.capital_province + task_contract_employer = scope:recipient + save_temporary_scope_as = legitimist_contract + } + custom_tooltip = laamp_legitimist_support_contract_success + if = { + limit = { + is_ai = yes + } + accept_task_contract = scope:legitimist_contract + } + } + } + + on_decline = { + + } + + use_diplomatic_range = yes + + ai_accept = { + base = -60 + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + modifier = { + add = 40 + scope:actor = { + any_claim = { + tier >= tier_kingdom + holder = { + save_temporary_scope_as = claim_holder + } + } + prestige_level > scope:claim_holder.prestige_level + } + desc = AI_REASON_LEGITIMIST_HIGHER_PRESTIGE + } + modifier = { + add = 60 + scope:actor = { + has_hook = scope:recipient + } + desc = YOU_HAVE_HOOK_REASON + } + modifier = { + add = 10 + scope:actor.dynasty = scope:recipient.dynasty + desc = BF_AI_SAME_DYNASTY_REASON + } + modifier = { + add = 20 + scope:actor.house = scope:recipient.house + desc = IS_SAME_HOUSE_REASON + } + modifier = { + add = 20 + scope:recipient = { has_trait = ambitious } + desc = RECIPIENT_IS_AMBITIOUS + } + modifier = { + add = 10 + scope:recipient = { has_trait = just } + desc = RECIPIENT_IS_JUST + } + modifier = { + add = 10 + scope:recipient = { has_trait = greedy } + desc = RECIPIENT_IS_GREEDY + } + modifier = { + add = 40 #so legitimist AI can get lucky + scope:actor = { is_ai = yes } + } + } + + can_send_despite_rejection = no + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 60 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_targets = { + ai_recipients = domicile_location_neighboring_top_rulers + ai_recipients = contacts + } + ai_potential = { + is_at_war = no + ai_greed <= 25 + } + ai_will_do = { + base = 100 #no downside to ai trying this + } +} + +#travel around the map to look for new contracts +relocate_camp_to_interaction = { + category = interaction_category_laamp + interface_priority = 100 + common_interaction = yes + use_diplomatic_range = no + ignores_pending_interaction_block = yes + icon = icon_contract_escort + desc = relocate_camp_to_interaction_desc + is_shown = { + scope:recipient != scope:actor + scope:actor = { + has_government = landless_adventurer_government + } + scope:recipient = { exists = capital_province } #just to make sure proper scopes will be set up + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = relocate_camp_to_interaction.here + scope:actor.domicile.domicile_location != scope:recipient.capital_province + } + scope:actor = { + is_travelling = no + is_in_army = no + is_imprisoned = no + } + # Adventurers can't join wars in places they're exiled from. + custom_tooltip = { + text = the_wake_1 + NOT = { + is_laamp_exiled_from_province_trigger = { + PROVINCE = scope:recipient.capital_province + LAAMP = scope:actor + } + } + } + } + + on_accept = { + scope:recipient.capital_province = { + save_scope_as = relocation_destination + } + scope:actor = { + show_as_tooltip = { + domicile = { + move_domicile = scope:relocation_destination + } + } + start_travel_plan = { + destination = scope:relocation_destination + 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 + travel_with_domicile = yes + } + } + } + + auto_accept = yes +} + +# +task_contract_train_knight_interaction = { + category = interaction_category_laamp + interface_priority = 120 + common_interaction = yes + icon = icon_combat + + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + has_ep3_dlc_trigger = yes + scope:actor = { + any_character_active_contract = { + task_contract_type = laamp_help_train_commanders_contract + OR = { + task_contract_employer ?= scope:recipient + task_contract_target ?= scope:recipient + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + this = scope:recipient + } + } + } + } + } + + is_valid_showing_failures_only = { + } + + redirect = { + scope:actor = { + random_character_active_contract = { + task_contract_type = laamp_help_train_commanders_contract + limit = { + OR = { + task_contract_employer ?= scope:recipient + task_contract_target ?= scope:recipient + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + this = scope:recipient + } + } + } + save_scope_as = task_contract + } + } + if = { + limit = { + scope:task_contract ?= { + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + this = scope:recipient + } + } + } + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:secondary_recipient.liege = { + save_scope_as = recipient + } + } + if = { + limit = { + scope:task_contract.task_contract_employer ?= scope:recipient + scope:task_contract.task_contract_employer.liege ?= scope:task_contract.task_contract_target + } + + } + } + + populate_recipient_list = { + scope:actor = { + random_character_active_contract = { + task_contract_type = laamp_help_train_commanders_contract + limit = { + OR = { + task_contract_employer ?= scope:recipient + task_contract_target ?= scope:recipient + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + this = scope:recipient + } + } + } + every_in_list = { + variable = knights_to_train + limit = { + is_alive = yes + is_knight = yes + } + add_to_list = characters + } + } + } + } + + is_highlighted = { + always = yes + } + + on_accept = { + scope:actor = { + random_character_active_contract = { + task_contract_type = laamp_help_train_commanders_contract + limit = { + OR = { + task_contract_employer ?= scope:recipient + task_contract_target ?= scope:recipient + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + this = scope:recipient + } + } + } + save_scope_as = task_contract + } + } + scope:secondary_recipient = { + save_scope_as = knight + custom_tooltip = task_contract_train_knight_interaction.tt + } + scope:actor = { + trigger_event = ep3_contract_event.0091 + } + } + + auto_accept = yes + + ai_accept = { + base = 100 + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 0 + empire = 0 + hegemony = 0 + } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = liege + ai_recipients = contacts + } + ai_potential = { + is_at_war = no + } + ai_will_do = { + base = 100 #no downside to ai trying this + } +} + +#landless adventurer are allowed to change allegiances mid-war +laamp_war_change_sides_interaction = { + category = interaction_category_laamp + icon = alliance + desc = laamp_war_change_sides_interaction_desc + common_interaction = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 120 + ai_min_reply_days = 0 + ai_max_reply_days = 0 + + cooldown_against_recipient = { years = 3 } + send_options_exclusive = yes + + is_shown = { + scope:actor = { + is_at_war = yes + has_government = landless_adventurer_government + } + scope:recipient = { + this != scope:actor + any_war_ally = { this = scope:actor } + any_character_war = { + #can't switch/leave wars you lead + NOT = { is_war_leader = scope:actor } + #can't switch/leave Great Holy Wars + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + any_war_participant = { + this = scope:recipient + } + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + trigger_if = { + limit = { + any_character_war = { + has_variable_list = already_switched_side + } + } + custom_tooltip = { + text = laamp_war_change_sides_interaction.already_switched_side + is_target_in_variable_list = { + name = already_switched_side + target = scope:actor + } + } + } + } + } + + populate_recipient_list = { + scope:recipient = { + every_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + #can't switch/leave wars you lead + NOT = { is_war_leader = scope:actor } + #can't switch/leave Great Holy Wars + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + any_war_participant = { + this = scope:recipient + } + } + if = { + limit = { primary_attacker = scope:recipient } + primary_defender = { add_to_list = characters } + } + else = { + primary_attacker = { add_to_list = characters } + } + } + } + } + + on_accept = { + scope:recipient = { + save_scope_as = betrayed_leader + } + scope:secondary_recipient = { + save_scope_as = new_leader + } + scope:actor = { + #ROOT is a 4th crusader and should not be one anymore + frankokratia_remove__war_leader_var_effect = yes + #ROOT is not a 4th crusader and should be one + if = { + limit = { + any_character_war = { + using_cb = crusading_claim_cb + any_war_participant = { + this = scope:recipient + } + any_war_participant = { + any_owned_story = { + type = frankokratia_story + NOT = { + any_in_list = { + variable = frankokratia_leaders + this = scope:actor + } + } + } + } + any_war_defender = { + this = scope:actor + } + } + } + random_character_war = { + limit = { + any_war_participant = { + any_owned_story = { + type = frankokratia_story + NOT = { + any_in_list = { + variable = frankokratia_leaders + this = scope:actor + } + } + } + } + any_war_defender = { + this = scope:actor + } + } + random_war_participant = { + limit = { + any_owned_story = { + type = frankokratia_story + NOT = { + any_in_list = { + variable = frankokratia_leaders + this = scope:actor + } + } + } + } + random_owned_story = { + type = frankokratia_story + limit = { + NOT = { + any_in_list = { + variable = frankokratia_leaders + this = scope:actor + } + } + } + add_to_variable_list = { + name = frankokratia_leaders + target = scope:actor + } + } + } + } + } + random_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + OR = { + primary_attacker = scope:secondary_recipient + primary_defender = scope:secondary_recipient + } + } + save_scope_as = war + } + if = { + limit = { + scope:war = { + using_non_ghw_holy_war_cb_trigger = yes + } + scope:recipient.faith = scope:actor.faith + } + add_piety_level = -1 + } + every_character_active_contract = { + limit = { + var:task_contract_war = scope:war + } + complete_task_contract = failure_standard + } + # Clear Offer Assistance. + if = { + limit = { + has_variable = owed_contract_assistance_war + scope:recipient = { is_participant_in_war = scope:actor.var:owed_contract_assistance_war } + } + remove_variable = owed_contract_assistance_war + remove_variable = owed_contract_assistance_contribution + remove_variable = owed_contract_assistance_gold + } + } + scope:war = { + hidden_effect = { + remove_participant = scope:actor + } + if = { + limit = { + is_defender = scope:secondary_recipient + } + add_defender = scope:actor + } + else = { + add_attacker = scope:actor + } + } + scope:actor = { + every_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + this != scope:war + } + remove_participant = scope:actor + } + } + scope:actor = { + # We deliberately charge you here to let you go into prestige debt; you shouldn't be blocked from switching sides due to a lack of prestige if you're willing to tank the loss. + add_prestige = { + value = -250 + multiply = { + value = scope:recipient.highest_held_title_tier + add = -1 + } + } + if = { + limit = { scope:recipient.highest_held_title_tier >= tier_kingdom } + add_prestige_level = -1 + } + if = { + limit = { + NOT = { has_contact = scope:secondary_recipient } + } + add_contact = scope:secondary_recipient + } + # Break the alliance + if = { + limit = { is_allied_to = scope:recipient } + break_alliance = scope:recipient + } + # And don't forget stress! + stress_impact = { + base = major_stress_impact_gain + disloyal = medium_stress_impact_loss + ambitious = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + loyal = major_stress_impact_gain + } + } + scope:recipient = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:actor } + } + set_relation_potential_rival = scope:actor + } + add_opinion = { + modifier = switched_sides_in_war + target = scope:actor + } + } + scope:secondary_recipient = { + add_opinion = { + modifier = switched_to_my_side + target = scope:actor + } + if = { + limit = { is_ai = yes } + pay_short_term_gold = { + target = scope:actor + gold = major_gold_value + } + } + } + scope:recipient = { + every_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + #can't switch/leave wars you lead + NOT = { is_war_leader = scope:actor } + #can't switch/leave Great Holy Wars + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + any_war_participant = { + this = scope:recipient + } + NOR = { + primary_attacker = scope:secondary_recipient + primary_defender = scope:secondary_recipient + } + } + if = { + limit = { primary_attacker = scope:recipient } + primary_defender = { + add_opinion = { + modifier = left_war_early + opinion = 40 + target = scope:actor + } + } + } + else = { + primary_attacker = { + add_opinion = { + modifier = left_war_early + opinion = 20 + target = scope:actor + } + } + } + } + } + scope:war = { + add_to_variable_list = { + name = already_switched_side + target = scope:actor + } + } + } + + auto_accept = yes + + ai_potential = { + is_at_war = yes + } + + ai_targets = { + ai_recipients = war_allies + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 24 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_will_do = { + base = -25 + #you have to be dishonorable and greedy to do this + ai_value_modifier = { + ai_honor = -0.1 + ai_greed = 0.1 + } + ##check if the recipient is the war leader and do it + #if they are infamous + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:recipient = { + prestige_level < 0 + } + add = 5 + } + #if they are impious + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:recipient = { + piety_level < 0 + } + add = 5 + } + #if they are a criminal + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + has_any_criminal_trait_in_faith_trigger = { + CHARACTER = scope:recipient + FAITH = scope:actor.faith + } + add = 5 + } + #if they wronged you or your family + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:actor = { + has_any_major_revenge_opinion_against_character_trigger = { + CHARACTER = scope:recipient + } + } + add = 5 + } + #if they have good relation with the other side + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + primary_attacker = { + has_any_good_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + AND = { + primary_attacker = scope:recipient + primary_defender = { + has_any_good_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + } + } + add = 5 + } + #don't do it + # if the other side has bad relation with you + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + primary_attacker = { + has_any_bad_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + AND = { + primary_attacker = scope:recipient + primary_defender = { + has_any_bad_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + } + } + add = -1000 + } + # you are winning + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + defender_war_score >= 0 + } + AND = { + primary_attacker = scope:recipient + attacker_war_score >= 0 + } + } + } + add = -1000 + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = -0.1 + desc = AI_OPINION_REASON + } + } +} + +#landless adventurer are allowed to leave the war outright +laamp_leave_war_interaction = { + category = interaction_category_laamp + icon = alliance + desc = laamp_leave_war_interaction_desc + common_interaction = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 120 + ai_min_reply_days = 0 + ai_max_reply_days = 0 + + cooldown_against_recipient = { years = 3 } + send_options_exclusive = yes + + is_shown = { + scope:actor = { + is_at_war = yes + has_government = landless_adventurer_government + } + scope:recipient = { + this != scope:actor + any_war_ally = { this = scope:actor } + any_character_war = { + is_participant = scope:recipient + #can't leave wars you lead + NOT = { is_war_leader = scope:actor } + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + any_character_war = { + is_participant = scope:recipient + #can't leave wars you lead + NOT = { is_war_leader = scope:actor } + #can't leave Great Holy Wars + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + } + } + scope:recipient = { + trigger_if = { + limit = { + any_character_war = { + has_variable_list = already_switched_side + } + } + custom_tooltip = { + text = laamp_war_change_sides_interaction.already_switched_side + is_target_in_variable_list = { + name = already_switched_side + target = scope:actor + } + } + } + } + } + + on_accept = { + scope:recipient = { + save_scope_as = betrayed_leader + } + scope:secondary_recipient = { + save_scope_as = new_leader + } + scope:actor = { + #ROOT is a 4th crusader and should not be one anymore + frankokratia_remove__war_leader_var_effect = yes + every_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + #can't switch/leave wars you lead + NOT = { is_war_leader = scope:actor } + #can't switch/leave Great Holy Wars + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + any_war_participant = { + this = scope:recipient + } + } + remove_participant = scope:actor + if = { + limit = { primary_defender = scope:recipient } + primary_attacker = { + add_opinion = { + modifier = left_war_early + opinion = 30 + target = scope:actor + } + } + } + else = { + primary_defender = { + add_opinion = { + modifier = left_war_early + opinion = 30 + target = scope:actor + } + } + } + add_to_variable_list = { + name = left_voluntarily + target = scope:actor + } + } + if = { + limit = { + scope:war = { + using_non_ghw_holy_war_cb_trigger = yes + } + } + add_piety_level = -1 + } + save_scope_value_as = { + name = task_contract_reward + value = flag:failure_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + every_character_active_contract = { + limit = { var:task_contract_war = scope:war } + task_contract_employer = { save_scope_as = task_contract_employer } + invalidate_contract = yes + } + if = { + limit = { + NOT = { + exists = scope:task_contract_employer + } + } + scope:recipient = { + save_scope_as = task_contract_employer + } + } + trigger_event = ep3_contract_event.0013 + # We deliberately charge you here to let you go into prestige debt; you shouldn't be blocked from switching sides due to a lack of prestige if you're willing to tank the loss. + add_prestige = { + value = -200 + multiply = { + value = scope:recipient.highest_held_title_tier + add = -1 + } + } + if = { + limit = { scope:recipient.highest_held_title_tier >= tier_kingdom } + add_prestige_level = -1 + } + # Break the alliance + if = { + limit = { is_allied_to = scope:recipient } + break_alliance = scope:recipient + } + # And don't forget stress! + stress_impact = { + base = major_stress_impact_gain + disloyal = medium_stress_impact_loss + ambitious = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + loyal = major_stress_impact_gain + } + # Clear Offer Assistance. + if = { + limit = { + has_variable = owed_contract_assistance_war + scope:recipient = { is_participant_in_war = scope:actor.var:owed_contract_assistance_war } + } + remove_variable = owed_contract_assistance_war + remove_variable = owed_contract_assistance_contribution + remove_variable = owed_contract_assistance_gold + } + } + scope:recipient = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:actor } + } + set_relation_potential_rival = scope:actor + } + add_opinion = { + modifier = left_war_early + target = scope:actor + } + } + } + + auto_accept = yes + + ai_potential = { + is_at_war = yes + } + + ai_targets = { + ai_recipients = war_allies + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 24 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_will_do = { + base = -25 + #you have to be dishonorable and lazy to do this + ai_value_modifier = { + ai_honor = -0.1 + ai_energy = -0.1 + } + ##check if the recipient is the war leader and do it + #if they are infamous + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:recipient = { + prestige_level < 0 + } + add = 5 + } + #if they are impious + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:recipient = { + piety_level < 0 + } + add = 5 + } + #if they are a criminal + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + has_any_criminal_trait_in_faith_trigger = { + CHARACTER = scope:recipient + FAITH = scope:actor.faith + } + add = 5 + } + #if they wronged you or your family + modifier = { + any_character_war = { + is_war_leader = scope:recipient + } + scope:actor = { + has_any_major_revenge_opinion_against_character_trigger = { + CHARACTER = scope:recipient + } + } + add = 5 + } + #if they have good relation with the other side + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + primary_attacker = { + has_any_good_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + AND = { + primary_attacker = scope:recipient + primary_defender = { + has_any_good_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + } + } + add = 5 + } + #don't do it + # if the other side has bad relation with you + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + primary_attacker = { + has_any_bad_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + AND = { + primary_attacker = scope:recipient + primary_defender = { + has_any_bad_relationship_with_character_trigger = { + CHARACTER = scope:actor + } + } + } + } + } + add = -1000 + } + # you are winning + modifier = { + any_character_war = { + OR = { + AND = { + primary_defender = scope:recipient + defender_war_score >= 0 + } + AND = { + primary_attacker = scope:recipient + attacker_war_score >= 0 + } + } + } + add = -1000 + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = -0.1 + desc = AI_OPINION_REASON + } + } +} diff --git a/common/character_interactions/09_mpo_interactions.txt b/common/character_interactions/09_mpo_interactions.txt new file mode 100644 index 00000000..b47bf025 --- /dev/null +++ b/common/character_interactions/09_mpo_interactions.txt @@ -0,0 +1,11274 @@ +offer_confederation_interaction = { + category = interaction_category_diplomacy + icon = offer_confederation_interaction + + desc = offer_confederation_interaction_desc + + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + } + ai_frequency_by_tier = { + barony = 0 + county = 8 + duchy = 8 + kingdom = 0 + empire = 0 + hegemony = 0 + } + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + cooldown_against_recipient = { years = 3 } + + is_shown = { + scope:actor = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + is_playable_character = yes + OR = { + is_independent_ruler = yes + confederation ?= { is_house_based = no } + } + } + scope:recipient = { + is_playable_character = yes + is_independent_ruler = yes + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + NOT = { this = scope:actor } + } + } + + is_valid_showing_failures_only = { + trigger_if = { + limit = { + scope:actor = { is_confederation_member = no } + } + custom_tooltip = { + text = forming_confederation_tt + scope:actor = { + has_character_flag = forming_confederation + } + } + } + scope:actor = { + is_imprisoned = no + } + scope:recipient = { + valid_confederation_member_trigger = { CHARACTER = scope:actor } + is_imprisoned = no + is_at_war = no + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { scope:prestige_send_option = yes } + add = scope:actor.minor_prestige_value + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + greeting = positive + notification_text = OFFER_CONFEDERATION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + # Military power difference modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Ageism modifier vs kids. + # Ruler Legitimacy modifier. + # Claimant modifier. + # FP3 Piety Level modifier. + + # OPINION SCALES + # Dread + # Compare Opinion modifier. + + #WHEN UPDATING ANYTHING HERE, PLEASE DO THE SAME (BUT INVERTED) IN LEAVE CONFEDERATION DECISION + + # PERKS + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = true_ruler_value + } + modifier = { # Education 5 boost + desc = offer_vassalization_education_diplomacy_5_tt + trigger = { + scope:actor = { has_trait_with_flag = offer_vassalisation_25 } + } + add = 25 + } + + # EVENTS - temporary bonuses gained by events + modifier = { + desc = event_bonus_to_vassal_accept_tt + trigger = { + scope:actor = { has_character_modifier = event_bonus_to_vassal_accept } + } + add = 20 + } + + + # STRUGGLES - bonus gained by successful Sway scheme during the Persian Struggle + modifier = { + desc = fp3_persian_struggle_previously_swayed_tt + trigger = { + scope:recipient = { + has_opinion_modifier = { + modifier = scheme_sway_and_compelled_to_submit_opinion + target = scope:actor + } + } + } + add = 20 + } + + modifier = { + desc = fp3_rekindler_of_iran_modifier_reason + trigger = { + AND = { + scope:actor = { dynasty ?={ has_dynasty_modifier = fp3_rekindler_of_iran_modifier } } + scope:recipient = { culture = { has_cultural_pillar = heritage_iranian } } + } + } + add = 20 + } + + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + # MAIN + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = { + value = -30 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -30 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -30 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -15 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -15 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -15 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #We just fought against each other. + desc = offer_vassalization_interaction_aibehavior_recent_war_tt + trigger = { + scope:recipient = { + any_truce_holder = { + this = scope:actor + } + } + # Ensure the truce wasn't purchased and is indeed from a war + scope:actor = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:recipient } + } + } + } + add = -40 + } + modifier = { #I fought an independence war against you. + desc = offer_confederation_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor.top_liege + } + } + add = -100 + } + modifier = { # Isolationist tradition + desc = isolationist_reason + trigger = { + NOT = { + scope:actor.culture = scope:recipient.culture + } + scope:recipient.culture = { + has_cultural_tradition = tradition_isolationist + } + } + add = -50 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -30 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 10 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 50 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 20 + } + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + NOT = { + this = scope:actor + } + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 40 + } + modifier = { #No adjacency + desc = offer_vassalization_interaction_aibehavior_unconnectedrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 100000 } } + } + add = -25 + } + modifier = { #Distant Realm + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 100000 } } + } + add = -100 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -175 + } + #Relative power + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.top_liege.current_military_strength min = 1 } + } + multiply = 5 + ceiling = yes + min = -100 + } + } + #Powerful vassal opinion of you + modifier = { + desc = offer_confederation_offerer_vassal_opinion_tt + trigger = { + scope:actor.top_liege = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor.top_liege = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor.top_liege + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 5 + } + } + divide = 10 + } + } + + # Legitimacy + modifier = { + desc = "LOW_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = very_reduced_tributarization_acceptance + } + add = -20 + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = reduced_tributarization_acceptance + } + add = -10 + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = increased_tributarization_acceptance + } + add = 10 + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = very_increased_tributarization_acceptance + } + add = 20 + } + + # MINOR + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 25 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 25 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -1000 + } + + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_confederation_tt + trigger = { + scope:actor.confederation ?= { + any_confederation_member = { + NOT = { this = scope:actor } + has_relation_rival = scope:recipient + NOT = { has_relation_nemesis = scope:recipient } + } + } + } + add = -100 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_confederation_tt + trigger = { + scope:actor.confederation ?= { + any_confederation_member = { + NOT = { this = scope:actor } + has_relation_nemesis = scope:recipient + } + } + } + add = -500 + } + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + exists = scope:actor.dynasty + exists = scope:recipient.dynasty + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + modifier = { #Same House modifier. + desc = offer_vassalization_interaction_aibehavior_house_tt + trigger = { + exists = scope:actor.house + exists = scope:recipient.house + scope:recipient = { + house = scope:actor.house + } + } + add = 50 + } + + modifier = { # Same language + add = 20 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Iberian Struggle, less likely for outsiders to vassalize inside + add = -35 + desc = iberian_struggle_reason_reason + trigger = { + scope:actor = { + NOT = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + scope:recipient = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + modifier = { #Illegitimacy modifier. + desc = confederation_offerer_illegitimate_tt + trigger = { + scope:actor.top_liege = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -20 + } + + modifier = { #Claimant modifier. + desc = confederation_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.top_liege.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -20 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -25 + } + + modifier = { # Paranoid + desc = INTERACTION_PARANOID + trigger = { + scope:recipient = { + has_trait = paranoid + } + } + add = -25 + } + + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -25 + } + + modifier = { # Fickle + desc = INTERACTION_FICKLE + trigger = { + scope:recipient = { + has_trait = fickle + } + } + add = -15 + } + + modifier = { # Stubborn + desc = INTERACTION_STUBBORN + trigger = { + scope:recipient = { + has_trait = stubborn + } + } + add = -15 + } + + modifier = { # Greedy + desc = INTERACTION_GREEDY + trigger = { + scope:recipient = { + has_trait = greedy + } + } + add = -15 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 15 + } + + modifier = { # Content + desc = INTERACTION_CONTENT + trigger = { + scope:recipient = { + has_trait = content + } + } + add = 15 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 25 + } + + modifier = { # FP3 modifier. + desc = GENERIC_YOUR_PIETY_LEVEL_MODIFIER + trigger = { scope:actor = { any_character_struggle = { has_struggle_phase_parameter = piety_level_affects_vassalage_acceptance } } } + add = { + value = { + value = scope:actor.piety_level + subtract = low_piety_level + } + multiply = 10 + } + } + + # OPINION INFLUENCE + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + opinion_modifier = { #Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor.top_liege = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.top_liege.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor.top_liege = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_confederation_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -25 + scope:actor = { + has_legitimacy_flag = very_reduced_confederation_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 15 + scope:actor = { + has_legitimacy_flag = increased_confederation_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 40 + scope:actor = { + has_legitimacy_flag = very_increased_confederation_acceptance + } + } + + # HERD + modifier = { + add = 40 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PRESTIGE + modifier = { + add = 40 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + #CULTURE + modifier = { + add = 50 + scope:actor = { + culture = scope:recipient.culture + } + desc = "SAME_CULTURE_REASON" + } + modifier = { + add = -20 + NOT = { + scope:actor = { + culture = scope:recipient.culture + } + } + scope:actor = { + NOR = { + culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + scope:recipient.culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:recipient.culture + } + } + } + desc = "DIFFERENT_CULTURE_REASON" + } + + #Conquerors have no interest in this + modifier = { + scope:recipient = { + has_trait = conqueror + } + add = -1000 + } + modifier = { + scope:recipient = { + has_trait = greatest_of_khans + } + add = -1000 + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = LEGEND_HOOK_USED + } + + #No neighbor scaring them + modifier = { + add = -30 + desc = NO_FRIGHTENING_NEIGHBOR_REASON + scope:actor.culture = { + NOT = { + has_cultural_parameter = forming_confederations_is_easier + } + } + scope:recipient.culture = { + NOT = { + has_cultural_parameter = forming_confederations_is_easier + } + } + NOT = { + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + } + + #Neighbor is TERRIFYING them + modifier = { + add = 30 + desc = TERRIFYING_NEIGHBOR_REASON + scope:recipient = { + save_temporary_scope_as = confederate + any_land_neighboring_realm_with_tributaries_owner = { + top_suzerain ?= { + is_confederation_member = no + NOR = { + this = scope:actor + this = scope:actor.top_liege + } + confederation_worthy_foe_strength_ratio_value <= 0.25 + NOT = { is_allied_to = scope:recipient } + OR = { + highest_held_title_tier >= tier_kingdom + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + has_trait = conqueror + has_trait = greatest_of_khans + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + } + } + } + } + } + + #You have too many confederates + #For duchy + modifier = { + add = duchy_confederation_vassals_value + desc = TOO_MANY_CONFEDERATION_VASSALS_REASON + scope:actor.confederation ?= { + any_confederation_member = { + count >= 6 + highest_held_title_tier >= tier_county + } + } + } + + #Another confederation of recipient's culture exists + modifier = { + add = -100 + desc = ANOTHER_CULTURE_CONFEDERATION_REASON + NOT = { + scope:actor.culture = { + this = scope:recipient.culture + } + } + any_confederation = { + NOT = { + this = scope:actor.confederation + } + has_variable = confederation_culture + var:confederation_culture = scope:actor.culture + } + } + + #Forcing them to join war + modifier = { + add = -100 + desc = FORCED_TO_JOIN_WAR_REASON + scope:actor = { + is_at_war_as_defender = yes + any_character_war = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + } + } + + #You will be taking over their war + modifier = { + add = 100 + desc = TAKING_OVER_DEFENSIVE_WAR_REASON + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + defender_war_score >= 0 + } + } + } + modifier = { + add = 200 + desc = TAKING_OVER_DEFENSIVE_WAR_REASON + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 0 + } + } + } + + #Culture is into/not into confederation + modifier = { + add = 10 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_stoic + has_cultural_pillar = ethos_communal + } + } + } + modifier = { + add = 20 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_egalitarian + } + } + } + modifier = { + add = -10 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_bureaucratic + } + } + } + + modifier = { # Herder + add = 50 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + modifier = { + add = -20 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_3 + } + } + } + modifier = { + add = -50 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_4 + } + } + } + modifier = { + add = -100 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_5 + } + } + } + modifier = { + add = -20 + desc = TRIBAL_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = tribal_authority_2 + } + } + } + modifier = { + add = -50 + desc = TRIBAL_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = tribal_authority_3 + } + } + } + modifier = { + desc = "BARANGAY_TRADITION_REASON" + trigger = { + scope:recipient.culture = { + has_cultural_parameter = invite_to_confederation_extra_reasons + } + } + add = 20 + } + modifier = { #left your confederation + add = -50 + desc = LEFT_YOUR_CONFEDERATION_REASON + exists = scope:actor.confederation + scope:recipient = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:actor.confederation + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + if = { + #checking that the delay hasn't made the character invalid + limit = { + scope:recipient = { + is_playable_character = yes + } + } + scope:actor = { + if = { + limit = { has_character_flag = forming_confederation } + remove_character_flag = forming_confederation + # MPO ACHIEVEMENT Con-Fed-Up + if = { + limit = { is_ai = no } + add_achievement_global_variable_effect = { + VARIABLE = mpo_confedup_achievement_unlocked + VALUE = yes + } + } + } + } + if = { + limit = { + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + } + } + } + scope:recipient = { + every_character_war = { + limit = { + is_war_leader = scope:recipient + is_defender = scope:recipient + } + add_to_list = recipient_wars + } + } + every_in_list = { + list = recipient_wars + save_scope_as = recipient_war + primary_attacker = { + save_scope_as = attacker + } + add_defender = scope:actor + hidden_effect = { + scope:actor.confederation ?= { + every_confederation_member = { + limit = { + NOR = { + is_attacker_in_war = scope:recipient_war + is_defender_in_war = scope:recipient_war + is_at_war_with = scope:recipient + is_allied_to = scope:attacker + is_imprisoned_by = scope:recipient + is_at_war_with = scope:recipient + } + } + scope:recipient_war = { add_defender = prev } + } + } + } + } + if = { + limit = { + scope:actor.confederation ?= { + any_confederation_member = { + NOR = { + is_attacker_in_war = scope:recipient_war + is_defender_in_war = scope:recipient_war + this = scope:actor + is_at_war_with = scope:recipient + is_allied_to = scope:attacker + is_imprisoned_by = scope:recipient + is_at_war_with = scope:recipient + } + } + } + } + scope:actor = { + custom_tooltip = confederates_joining_recipient_war_tt + } + } + } + scope:actor = { + save_scope_as = confederation_offerer + } + scope:recipient = { + save_scope_as = confederation_accepter + } + #Confederation doesn't exist yet + if = { + limit = { + scope:actor = { + is_confederation_member = no + } + } + scope:actor = { + custom_tooltip = create_confederation_tt + custom_tooltip = confederation_defensive_wars_tt + custom_tooltip = unlock_leave_confederation_interaction_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + scope:recipient = { + offer_confederation_accepter_effect = yes + } + } + #Confederation already exists + else = { + scope:actor.confederation = { + save_scope_as = confederation + } + show_as_tooltip = { + #If actor is top liege and offering vassaldom + scope:recipient = { + offer_confederation_accepter_effect = yes + } + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + scope:recipient = { + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + scope:recipient = { + custom_tooltip = confederation_raiding_attacking_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_restrictions_warning_tt + } + else = { + custom_tooltip = confederation_restrictions_tribe_warning_tt + } + } + } + scope:recipient = { + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_migrating_leaving_warning_tt + } + } + scope:actor = { + #Event distributor event + trigger_event = mpo_interactions_events.0001 + } + if = { + limit = { + scope:actor = { + is_at_war_as_defender = yes + any_character_war = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + } + } + scope:actor = { + every_character_war = { + limit = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + add_defender = scope:recipient + } + #Lose legitimacy unless you're taking on a war too + if = { + limit = { + NOT = { + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_attacker = { + scope:actor = { + has_truce = prev + } + } + } + } + } + } + } + add_legitimacy = medium_legitimacy_loss + custom_tooltip = confederation_legitimacy_loss_war_tt + } + } + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + #Stop spamming players with this + if = { + limit = { + exists = scope:actor.confederation + scope:recipient = { + is_ai = no + } + } + scope:recipient = { + set_variable = { + name = refused_confederation + value = scope:actor.confederation + years = 3 + } + } + } + scope:actor = { + #letter response + trigger_event = mpo_interactions_events.0004 + } + } + + ai_potential = { + age >= 6 + OR = { + AND = { + is_independent_ruler = yes + highest_held_title_tier < tier_kingdom + has_character_flag = forming_confederation + } + is_confederation_member = yes + } + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + + ai_will_do = { + base = 50 + + modifier = { + add = 25 + scope:actor = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:actor } + } + } + modifier = { + add = 25 + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + modifier = { + add = -25 + scope:recipient = { + is_at_war = yes + } + } + modifier = { + factor = 0 + OR = { + #Will only throw the confederation into a war + scope:recipient = { + is_at_war = yes + NOR = { + any_character_war = { primary_defender = scope:recipient } + culture = scope:actor.culture + scope:actor.confederation ?= { + any_confederation_member = { + count >= 4 + highest_held_title_tier >= tier_county + } + } + reverse_opinion = { + target = scope:actor + value >= 30 + } + } + } + AND = { + exists = scope:actor.confederation + scope:recipient = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:actor.confederation + } + } + } + #Recipient hasn't been asked to join this confederation already + scope:recipient = { + has_variable = refused_confederation + exists = scope:actor.confederation + var:refused_confederation = { + this = scope:actor.confederation + } + } + } + } + } +} + +promote_divergent_or_hybrid_culture_interaction = { + category = interaction_category_diplomacy + icon = icon_culture + + desc = promote_divergent_or_hybrid_culture_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + max = 10 + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 12 + } + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + is_shown = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + domicile_culture = scope:actor.culture + } + scope:actor.culture ?= { + OR = { + is_hybrid_culture = yes + is_divergent_culture = yes + } + } + scope:recipient = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_culture != scope:actor.culture + } + trigger_else = { + culture != scope:actor.culture + } + OR = { + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_or_below_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + NOR = { + is_imprisoned_by = scope:actor + has_strong_hook = scope:actor + is_at_war_with = scope:actor + } + } + custom_tooltip = { + text = not_a_nomad_or_herder_tt + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + trigger_if = { + limit = { + exists = scope:recipient.domicile + } + custom_tooltip = { + text = not_a_parent_culture_of_domicile_tt + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:recipient.domicile.domicile_culture + } + } + } + } + trigger_else = { + custom_tooltip = { + text = not_a_parent_culture_tt + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + } + } + } + + greeting = positive + notification_text = PROMOTE_DIVERGENT_CULTURE_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = AI_OPINION_REASON + } + + modifier = { + add = 20 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_3 + } + } + } + + modifier = { + add = 50 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_4 + } + } + } + + modifier = { + add = 100 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_5 + } + } + } + + # HERD + modifier = { + add = 60 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PRESTIGE + modifier = { + add = 60 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = LEGEND_HOOK_USED + } + + modifier = { # Herder + add = 100 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = promote_culture_accepted_tt + left_icon = scope:recipient + scope:recipient = { + if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + custom_tooltip = { + text = family_and_lands_convert_domicile_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.domicile.domicile_culture + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + culture = scope:recipient.domicile.domicile_culture + } + add_to_list = spouses_and_family_to_convert + } + domicile = { + set_domicile_culture = scope:actor.culture + } + } + } + else = { + custom_tooltip = { + text = family_and_lands_convert_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.culture + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + culture = scope:recipient.culture + } + add_to_list = spouses_and_family_to_convert + } + } + } + if = { + limit = { + culture != scope:actor.culture + } + set_culture = scope:actor.culture + } + hidden_effect = { + every_in_list = { + list = counties_to_convert + set_county_culture = scope:actor.culture + } + every_in_list = { + list = spouses_and_family_to_convert + set_culture = scope:actor.culture + } + } + add_opinion = { + modifier = respect_opinion + opinion = 10 + target = scope:actor + } + } + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:actor = { + add_prestige = scope:actor.minor_prestige_loss + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + if = { + limit = { + scope:hook = yes + } + use_hook = scope:recipient + } + } + } + + on_decline = { + scope:actor = { + } + } + + ai_potential = { + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_duchy + } + + ai_will_do = { + base = 100 + + modifier = { + add = -1 + scope:hook ?= yes + } + + modifier = { + factor = 0 + OR = { + scope:herd_send_option ?= yes + scope:prestige_send_option ?= yes + } + } + } +} + +inspire_conversion_interaction = { + category = interaction_category_religion + icon = government_type_nomad + + desc = inspire_conversion_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + max = 10 + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 6 + empire = 6 + hegemony = 6 + } + cooldown_against_recipient = { years = 5 } + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + is_shown = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + } + scope:recipient = { + OR = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_faith != scope:actor.domicile.domicile_faith + } + faith != scope:actor.domicile.domicile_faith + faith != scope:actor.faith # Tooltip reasons + } + OR = { + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_or_below_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + NOR = { + is_imprisoned_by = scope:actor + has_strong_hook = scope:actor + is_at_war_with = scope:actor + } + } + custom_description = { + text = "is_head_of_religion" + subject = scope:recipient + NOT = { scope:recipient.faith.religious_head = scope:recipient } + } + custom_description = { + text = "is_protected_via_contract" + subject = scope:recipient + NAND = { # Vassal Contract forbids meddling by liege + exists = scope:recipient.liege + scope:recipient.liege = scope:actor + scope:recipient = { + is_ruler = yes + vassal_contract_has_flag = religiously_protected + } + } + } + custom_tooltip = { + text = you_are_not_of_your_domicile_faith_tt + scope:recipient = { + OR = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_faith != scope:actor.domicile.domicile_faith + } + faith != scope:actor.domicile.domicile_faith + } + } + } + custom_tooltip = { + text = not_a_nomad_or_herder_tt + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + } + + greeting = positive + notification_text = INSPIRE_CONVERSION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_IS_ZEALOUS + add = -100 + scope:recipient = { + has_trait = zealous + } + } + + modifier = { + desc = INSPIRE_UNREFORMED_FAITH + add = -50 + scope:actor.faith = { has_doctrine_parameter = unreformed } + } + + modifier = { + add = 50 + desc = ZEALOUS_PROSELYTIZER_REASON + trigger = { + scope:actor = { + has_perk = zealous_proselytizer_perk + } + } + } + + modifier = { + add = 20 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_3 + } + } + } + + modifier = { + add = 50 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_4 + } + } + } + + modifier = { + add = 100 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_5 + } + } + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = AI_OPINION_REASON + } + + # HERD + modifier = { + add = 60 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PIETY + modifier = { + add = 60 + scope:piety_send_option = yes + desc = PIETY_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = LEGEND_HOOK_USED + } + + modifier = { # Herder + add = 100 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Piety + is_shown = { + always = yes + } + is_valid = { + scope:actor = { piety >= medium_piety_value } + } + flag = piety_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE_ICON + } + + send_options_exclusive = no + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = inspire_conversion_accepted_tt + left_icon = scope:recipient + scope:recipient = { + if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + custom_tooltip = { + text = family_and_lands_inspire_domicile_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.domicile.domicile_culture + faith != scope:actor.domicile.domicile_faith + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + faith != scope:actor.domicile.domicile_faith + } + add_to_list = spouses_and_family_to_convert + } + domicile = { + if = { + limit = { + domicile_faith != scope:actor.domicile.domicile_faith + } + set_domicile_faith = scope:actor.domicile.domicile_faith + } + } + } + } + else = { + custom_tooltip = { + text = family_and_lands_inspire_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.culture + faith != scope:actor.domicile.domicile_faith + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + faith != scope:actor.domicile.domicile_faith + } + add_to_list = spouses_and_family_to_convert + } + } + } + if = { + limit = { + faith != scope:actor.domicile.domicile_faith + } + set_character_faith = scope:actor.domicile.domicile_faith + } + hidden_effect = { + every_in_list = { + list = counties_to_convert + set_county_faith = scope:actor.domicile.domicile_faith + } + every_in_list = { + list = spouses_and_family_to_convert + set_character_faith = scope:actor.domicile.domicile_faith + } + } + if = { # If you have the Religious Icon perk they become obedient + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + has_perk = religious_icon_perk + } + scope:recipient = { + obedience_target = scope:actor + is_obedient = no + } + } + scope:recipient = { + add_opinion = { + modifier = obedience_opinion + target = scope:actor + } + } + } + else = { + add_opinion = { + modifier = respect_opinion + opinion = 10 + target = scope:actor + } + } + } + } + if = { + limit = { + scope:piety_send_option = yes + } + scope:actor = { + add_piety = scope:actor.medium_piety_loss + } + scope:recipient = { + add_piety = scope:actor.medium_piety_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + scope:actor = { + } + } + + ai_potential = { + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_duchy + NOR = { + any_owned_story = { + OR = { + story_type = story_mongol_invasion + story_type = story_greatest_of_khans + + } + } + mpo_has_gok_mongol_empire_trigger = yes + } + } + + ai_will_do = { + base = 100 + + modifier = { + add = -1 + scope:hook ?= yes + } + + modifier = { + add = -1 + scope:piety_send_option ?= yes + } + + modifier = { + factor = 0 + scope:herd_send_option ?= yes + } + } +} + +# Used by AI code +migration_interaction = { + interface_priority = 120 + common_interaction = yes + use_diplomatic_range = no + category = interaction_debug_main + icon = herd_interaction + hidden = yes + + # Keep AI reply at minimum - don't change default values + # ai_min_reply_days = 0 + # ai_max_reply_days = 0 + + can_send_despite_rejection = yes + + interface = migration + special_interaction = migration + + cost = { + # Free + } + + desc = migration_interaction_desc + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + highest_held_title_tier >= tier_county + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_imprisoned = no + is_independent_ruler = yes + is_travelling = no + custom_tooltip = { + text = no_primary_wars_tt + NOT = { + any_character_war = { + OR = { + primary_attacker = { this = scope:actor } + primary_defender = { this = scope:actor } + } + } + } + } + custom_tooltip = { + text = must_have_migration_situation_tt + any_character_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + NOR = { + exists = involved_activity + has_truce = scope:recipient + } + } + scope:recipient = { + is_ruler = yes + NOT = { is_allied_to = scope:actor } + } + } + + # can_be_picked_title is unused for migration_interaction and controlled by code + # can_be_picked_title = {} + + on_accept = { + scope:actor = { + if = { + limit = { + is_ai = yes + } + set_variable = { + name = migration_cooldown + years = migration_cooldown_value + } + } + # We add a variable in case you're migrating into a Tributary, for special event Options + if = { + limit = { + scope:recipient = { + is_tributary = yes + NOT = { is_tributary_of_suzerain_or_above = scope:actor } # They're not your Tributary + } + trigger_if = { + limit = { exists = scope:actor.overlord } + scope:recipient.overlord != scope:actor.overlord # You're not subjects of the same ruler already + } + } + set_variable = { + name = migrating_into_tributary_var + value = scope:recipient.overlord + } + } + if = { + limit = { + is_confederation_member = yes + } + confederation = { + save_scope_as = confederation_left + } + confederation_migration_notification_effect = yes + confederation = { + remove_confederation_member = scope:actor + } + } + # Pay what you need to pay first + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + if = { + limit = { scope:gold_cost = yes } + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value + } + } + if = { + limit = { scope:herd_cost = yes } + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + if = { + limit = { + exists = scope:target_title + } + set_variable = { + name = migration_title + value = scope:target_title + } + } + + # Save your old lands + save_scope_as = old_holder + capital_county = { save_scope_as = old_capital_county } + every_held_title = { + limit = { + tier = tier_county + exists = duchy + culture = scope:actor.domicile.domicile_culture + } + add_to_list = old_held_titles + } + + # Make a new culture appear in the lands you left behind, as you're bringing _your_ people with you + # Delay the creation so that Herders have spawned + trigger_event = { + id = mpo_misc.0001 + delayed = yes + } + + # Let's migrate! + # If there's a Drought, your people get a morale boost + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_migration_morale_boost + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + } + custom_tooltip = { + text = mpo_the_great_steppe_migration_morale_boost_effect_tt + every_courtier_or_guest = { + add_opinion = { + target = prev + modifier = drought_migration_opinion + } + } + } + } + + if = { + limit = { + exists = scope:target_title + } + custom_tooltip = mpo_steppe_migration_migrate_to_tt + custom_tooltip = mpo_steppe_migration_lose_land_tt + every_vassal = { + limit = { + OR = { + is_ai = no + NOT = { is_obedient_to = scope:actor } + } + } + hidden_effect = { + break_subject_contract_and_establish_tributary_effect = { + SUZERAIN = scope:actor + TRIBUTARY = this + } + } + custom_tooltip = mpo_steppe_migration_lose_vassal_tt + } + } + # Obedient vassals follow their liege + every_vassal = { + limit = { + exists = scope:target_title + is_obedient_to = scope:actor + is_ai = yes + } + save_scope_as = current_vassal + custom_tooltip = mpo_steppe_migration_keep_vassal_tt + hidden_effect = { + start_travel_plan = { + destination = scope:target_title.title_capital_county.title_province + return_trip = no + travel_with_domicile = yes + } + migration_set_obedient_vassal_effect = yes + } + } + # Player and non obedient vassals get turned into Tributaries instead + every_vassal = { + limit = { + exists = scope:target_title + OR = { + NOT = { is_obedient_to = scope:actor } + is_ai = no + } + } + break_subject_contract_and_establish_tributary_effect = { SUZERAIN = scope:actor TRIBUTARY = prev } + } + # Migration travel is handled by code + } + } + + on_decline = { + # We add a variable in case you're migrating into a Tributary, for special event Options + if = { + limit = { + scope:recipient = { + is_tributary = yes + suzerain != scope:actor # They're not your tributary + } + trigger_if = { + limit = { exists = scope:actor.overlord } + scope:recipient.overlord != scope:actor.overlord # You're not subjects of the same ruler already + } + } + scope:actor = { + set_variable = { + name = migrating_into_tributary_war_var + value = scope:recipient.overlord + } + } + } + # Migration wars are handled by code + scope:actor = { + if = { + limit = { + is_confederation_member = yes + } + confederation_migration_notification_effect = yes + confederation = { + remove_confederation_member = scope:actor + } + } + every_vassal = { + limit = { + exists = scope:target_title + is_obedient_to = scope:actor + is_ai = yes + } + save_scope_as = current_vassal + hidden_effect = { + migration_set_obedient_vassal_effect = yes + } + } + } + } + + # Use gold + send_option = { + flag = gold_cost + is_valid = { + scope:actor.gold >= scope:actor.medium_gold_value + } + localization = TRADE_GOLD_FOR_BETTER_MIGRATION_AI_ACCEPTANCE + } + + # Use Herd + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + scope:actor = { + domicile ?= { herd >= medium_herd_value } + } + } + flag = herd_cost + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_accept = { + base = 0 + modifier = { + add = { + value = -95 + if = { #Non-Nomads should try to keep their lands + limit = { + scope:recipient = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = -405 + } + } + desc = MIGRATION_INTERACTION_BASE_ACCEPTANCE + } + modifier = { # Easier for AI to migrate peacefully since they can't send Herd/Gold + add = 50 + trigger = { + scope:recipient = { is_ai = yes } + scope:actor = { is_ai = yes } + } + desc = MIGRATION_INTERACTION_ACCEPTANCE_AI + } + modifier = { # Herders move away immediately + trigger = { + scope:recipient = { government_has_flag = government_is_herder } + } + add = 150 + desc = MIGRATION_INTERACTION_HERDER + } + modifier = { # Dukes don't really want to move + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_3 + } + } + add = -20 + desc = MIGRATION_INTERACTION_HIGH_DOMINANCE + } + modifier = { # Kingdoms/Empires don't want to move + trigger = { + scope:recipient = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + add = -100 + desc = MIGRATION_INTERACTION_HIGH_DOMINANCE + } + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + # Are you using Gold? + modifier = { + trigger = { + scope:gold_cost ?= yes + } + add = 25 + desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT + } + # Are you using Herd? + modifier = { + trigger = { + scope:herd_cost ?= yes + } + add = 25 + desc = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_TT + } + # Is there a Drought? + modifier = { + add = 15 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_migration_acceptance_boost + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = MIGRATION_INTERACTION_DROUGHT_ACCEPTANCE + } + # Recipient traits + modifier = { + add = 15 + scope:recipient = { + has_trait = craven + } + desc = MIGRATION_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 15 + scope:recipient = { + has_trait = content + } + desc = MIGRATION_INTERACTION_CONTENT_ACCEPTANCE + } + # Recipient's opinion + opinion_modifier = { + trigger = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = MIGRATION_INTERACTION_OPINION_ACCEPTANCE + } + opinion_modifier = { + trigger = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.5 + desc = MIGRATION_INTERACTION_OPINION_ACCEPTANCE + } + # Recipient's relation to you + modifier = { + scope:recipient = { + has_relation_friend = scope:actor + } + add = { + value = 25 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_FRIEND_ACCEPTANCE + } + modifier = { + scope:recipient = { + has_relation_blood_brother = scope:actor + } + add = { + value = 50 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_BLOOD_BROTHERS_ACCEPTANCE + } + # Obedience + modifier = { + scope:recipient = { + is_obedient_to = scope:actor + } + add = { + value = 50 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + # Relative Prestige + modifier = { + add = 10 + prestige_level >= scope:recipient.prestige_level + desc = MIGRATION_INTERACTION_PRESTIGE_ACCEPTANCE + } + # Relative Prowess + modifier = { + add = 10 + prowess >= scope:recipient.prowess + desc = MIGRATION_INTERACTION_PROWESS_ACCEPTANCE + } + # Relative Herd + modifier = { + trigger_if = { + exists = scope:recipient.domicile # Herders won't have a domicile + } + add = 25 + domicile.herd >= scope:recipient.domicile.herd + desc = MIGRATION_INTERACTION_HERD_ACCEPTANCE + } + # Gurkhan + modifier = { + add = -1000 + exists = situation:the_great_steppe + scope:recipient = { + this = situation:the_great_steppe.situation_top_herd + } + desc = MIGRATION_INTERACTION_GURKHAN_ACCEPTANCE + } + modifier = { + add = 50 + trigger_if = { + exists = situation:the_great_steppe + } + scope:actor = { + this = situation:the_great_steppe.situation_top_herd + } + desc = MIGRATION_INTERACTION_GURKHAN_ACTOR_ACCEPTANCE + } + # Dread + modifier = { + add = intimidated_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + # Events + modifier = { + add = 5 + scope:actor = { has_character_modifier = mpo_elder_flock_migrate_modifier } + desc = MIGRATION_INTERACTION_ELDER_FLOCK_ACCEPTANCE + } + + #Confederations refuse to be intimidated and don't want to leave + modifier = { + add = -300 + desc = CONFEDERATION_MEMBER_REASON + scope:recipient = { + is_confederation_member = yes + } + } + # High-tier Ruler + modifier = { + add = -500 + exists = scope:recipient.primary_title + scope:recipient.primary_title.tier >= tier_kingdom + desc = MIGRATION_INTERACTION_KING_ACCEPTANCE + } + + # Recently settled nomads don't want to accept + modifier = { + add = -1000 + desc = JUST_SETTLED_REASON + scope:recipient = { + is_tributary = yes + NOT = { government_has_flag = government_is_herder } + capital_county = { + title_held_years < 3 + } + } + } + } + + ai_instant_response = yes + + # Available scopes and values + # + # scope:actor - migrating ruler + # scope:recipient - ruler who decides if migration is peaceful or hostile + # scope:target - main migration target - can be of any tier + # + # Additional scopes provided from code + # + # scope:domain - County or duchy that migrating ruler aims to get as their new domain. + # Can be the same as scope:target, if county of duchy-level migration + # + # scope:domain_fertility - Total current fertility of scope:domain - what actor is going to receive + # scope:target_fertility - Total current fertility of main migration target + # + # scope:defenders - Script list of all rulers who will be part of migration war if declined. + # It includes all rulers who are going to lose land - holder of main migration target and all rulers + # who has land in scope:domain + # + # scope:defender_power - combined max military power of all members in scope:defenders. + # It's power - i.e. scaled by regiments attack and toughness + # + ai_will_do = { + base = 0 + + # More likely to migrate to people you don't like + opinion_modifier = { + opinion_target = scope:recipient + multiplier = -0.25 + } + + # Bold, energetic characters are more likely to migrate + ai_value_modifier = { + ai_boldness = 0.25 + ai_energy = 0.25 + } + + # We substract your Fertility + modifier = { + add = { + value = scope:actor.current_domain_fertility + multiply = -1 + } + } + + # And we add the target realm's Fertility + modifier = { + add = scope:domain_fertility + } + + # Less likely to migrate into players + modifier = { + add = -25 + scope:recipient = { is_ai = no } + } + + # Can you win this war? + modifier = { + scope:actor.current_military_strength >= scope:defender_power + add = 25 + } + modifier = { + scope:actor.current_military_strength <= scope:defender_power + add = -75 + } + + # You're moving from a bad season to a good one + modifier = { + has_bad_season_nomadic_capital_character_trigger = { CHARACTER = scope:actor } + has_good_season_nomadic_capital_character_trigger = { CHARACTER = scope:recipient } + add = 10 + } + + # There's a very bad season in your area + modifier = { + scope:actor = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = scope:actor.capital_county + } + } + } + add = 100 + } + + # You are landless and your herd is starving + modifier = { + scope:actor = { + is_landed = no + } + add = 50 + } + + # The recipient is a Herder + modifier = { + scope:recipient = { government_has_flag = government_is_herder } + add = 10 + } + + # The recipient is a Steppe Admin + modifier = { + scope:recipient = { government_has_flag = government_is_steppe_admin } + add = -25 + } + + # You have a hook on the recipient + modifier = { + scope:actor = { + has_usable_hook = scope:recipient + } + add = 25 + } + + # More likely to migrate with Low Dominance + modifier = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + add = 10 + } + modifier = { + exists = scope:target + scope:actor = { + scope:target.tier >= tier_kingdom + primary_title.tier < tier_kingdom + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = 100 + } + modifier = { + exists = scope:target + scope:actor = { + scope:target.tier >= tier_empire + primary_title.tier < tier_empire + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = 100 + } + modifier = { + scope:actor = { + primary_title.tier >= tier_kingdom + has_realm_law = nomadic_authority_3 + } + add = -90 + } + modifier = { + scope:actor = { + primary_title.tier >= tier_empire + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = -90 + } + + #You're in a confederation... you don't want to go anywhere + modifier = { + scope:actor = { + is_confederation_member = yes + has_character_flag = new_confederate + } + add = -100 + } + modifier = { + scope:actor = { + is_confederation_member = yes + NOT = { has_character_flag = new_confederate } + } + add = -30 + } + #The recipient is bordering your confederation (so you can rejoin) + modifier = { + scope:actor = { + is_confederation_member = yes + } + scope:recipient = { + highest_held_title_tier <= tier_duchy + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + is_member_of_confederation = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + } + } + add = 30 + } + + # Don't migrate somewhere where there's a disease or Havsaran Zud + modifier = { + factor = 0 + scope:domain = { + OR = { + AND = { + tier = tier_county + any_county_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + AND = { + tier = tier_county + any_county_province = { + any_province_epidemic = { + } + } + } + } + } + } + # Don't migrate into a domain that contains a vassal player + modifier = { + scope:domain = { + any_in_de_facto_hierarchy = { + holder ?= { + is_ai = no + is_independent_ruler = no + } + } + } + factor = 0 + } + # Avoid bad wars + modifier = { + factor = 0.01 + scope:defender_power >= scope:actor.current_military_strength + } + # Don't be suicidal + modifier = { + factor = 0 + scope:defender_power >= scope:actor.twice_current_military_strength + } + modifier = { + factor = 0 + scope:recipient.current_military_strength > scope:actor.current_military_strength + } + modifier = { + factor = 0 + scope:defender_power >= 10 + scope:actor.current_military_strength <= 500 + } + # Do not downgrade your title + modifier = { + factor = 0 + exists = scope:target + scope:target.tier < scope:actor.primary_title.tier + } + # Tributaries want to stick close to their suzerain + modifier = { + factor = 0 + scope:actor = { + is_tributary = yes + } + scope:domain = { + NOR = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + AND = { + tier = tier_county + any_neighboring_county = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + OR = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + any_neighboring_county = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + } + } + } + } + } + } + # Small AI nomads should only migrate to same-culture areas or right next to them, as everything else looks really bad. + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + has_realm_law = nomadic_authority_1 + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + } + } + } + } + } + # Slightly bigger nomads are also allowed to migrate into non-nomadic lands + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + has_realm_law = nomadic_authority_2 + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + } + # Big nomads move more freely, and the small ones will follow because they'll spread their culture there! + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + NOR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + capital_county = { + any_county_situation_sub_region = { + NOR = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + sub_region_current_phase = situation_steppe_severe_drought_season + sub_region_current_phase = situation_steppe_cold_zud_season + sub_region_current_phase = situation_steppe_white_zud_season + } + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + } + } +} + +# PAIZA +mpo_interaction_grant_paiza = { + category = interaction_category_diplomacy + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_grant_paiza_desc + + ai_frequency_by_tier = { + barony = 0 + county = 24 + duchy = 24 + kingdom = 8 + empire = 8 + hegemony = 8 + } + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + has_character_flag = established_paiza_system + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + OR = { + is_vassal_of = scope:actor + is_tributary_of = scope:actor + is_courtier_of = scope:actor + } + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + is_at_war_with = scope:recipient + } + is_independent_ruler = yes + custom_tooltip = { + text = mpo_character_interaction_gurkhan + is_gurkhan = yes + } + custom_tooltip = { + text = mpo_character_interaction_established_paiza_system + has_character_flag = established_paiza_system + } + } + scope:recipient = { + custom_tooltip = { + text = mpo_character_interaction_obedient + NOT = { is_obedient_to = scope:actor } + } + NOT = { + any_character_artifact = { + scope:recipient = { can_benefit_from_artifact = prev } + scope:artifact.var:paiza_patron ?= { is_gurkhan = yes } + scope:artifact.var:paiza_patron ?= scope:actor + } + } + } + } + + cost = { + prestige = major_prestige_value + gold = 25 + } + + on_accept = { + make_obedient_recipient_to_actor_effect = yes + scope:recipient = { + mpo_create_paiza_artifact_effect = { + PATRON = scope:actor + GRANTEE = scope:recipient + } + custom_tooltip = mpo_establish_paiza_system_decision.paiza_abuse_authority_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.leverage_khan_authority_unlocked + } + scope:actor = { + switch = { + trigger = scope:recipient.primary_title.tier + tier_empire = { + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + tier_kingdom = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + } + tier_duchy = { + add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain } + } + tier_county = { + add_legitimacy_effect = { LEGITIMACY = miniscule_legitimacy_gain } + } + } + } + } + + ai_targets = { + ai_recipients = vassals + ai_recipients = tributaries + } + + + ai_accept = { + base = -20 + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + } + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { + add = 40 + scope:recipient = { + ai_honor < 0 + ai_greed > 0 + } + desc = will_abuse_paiza_reason + } + } + + ai_will_do = { + base = 10 + + modifier = { + factor = 10 + scope:recipient = { + is_ai = no + OR = { + is_vassal_of = scope:actor + is_tributary_of = scope:actor + } + } + } + + modifier = { + factor = 10 + scope:recipient = { + NOT = { + is_obedient_to = root + } + OR = { + is_powerful_vassal = yes + is_kurultai_trigger = yes + } + } + } + } +} + +mpo_interaction_ask_for_paiza = { + category = interaction_category_diplomacy + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_ask_for_paiza_desc + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 12 + kingdom = 12 + empire = 0 + hegemony = 0 + } + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + has_character_flag = established_paiza_system + } + scope:actor = { + OR = { + government_has_flag = government_is_nomadic + top_liege = scope:recipient + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:recipient = { + is_independent_ruler = yes + is_gurkhan = yes + } + scope:actor = { + custom_tooltip = { + text = already_received_a_paiza + NOT = { + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + var:paiza_patron ?= scope:recipient + } + } + } + } + } + + send_options_exclusive = no + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= scope:recipient.domicile.massive_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + on_accept = { + scope:actor = { + make_obedient_recipient_to_actor_effect = yes + send_interface_toast = { + type = event_toast_effect_good + title = mpo_decisions_events.paiza_granted + mpo_create_paiza_artifact_effect = { + PATRON = scope:recipient + GRANTEE = scope:actor + } + left_icon = scope:recipient + right_icon = scope:created_paiza + } + custom_tooltip = mpo_establish_paiza_system_decision.paiza_abuse_authority_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.leverage_khan_authority_unlocked + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:recipient.domicile.massive_herd_value + } + } + if = { + limit = { + scope:hook = yes + } + use_hook = scope:recipient + } + } + scope:recipient = { + switch = { + trigger = scope:actor.primary_title.tier + tier_empire = { + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + tier_kingdom = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + } + tier_duchy = { + add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain } + } + tier_county = { + add_legitimacy_effect = { LEGITIMACY = miniscule_legitimacy_gain } + } + } + add_character_flag = { + flag = paiza_recently_granted + years = 2 + } + } + } + + on_decline = { + scope:recipient = { + add_character_flag = { + flag = paiza_recently_granted + years = 4 + } + } + } + + ai_accept = { + base = -60 + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { + add = 40 + scope:actor = { + NOT = { + is_obedient_to = root + } + OR = { + is_powerful_vassal = yes + is_kurultai_trigger = yes + } + } + desc = AI_NOT_OBEDIENT_REVERSE_REASON + } + modifier = { + add = -20 + scope:actor = { + is_obedient_to = scope:recipient + } + desc = AI_OBEDIENT_REVERSE_REASON + } + modifier = { + scope:recipient = { + has_relation_blood_brother = scope:actor + } + add = 100 + desc = MIGRATION_INTERACTION_BLOOD_BROTHERS_ACCEPTANCE + } + + modifier = { + trigger = { + scope:hook ?= yes + } + add = 60 + desc = LEGEND_HOOK_USED + } + + modifier = { + add = 20 + trigger = { + scope:herd_send_option ?= yes + } + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.4 + } + } + + ai_potential = { + is_adult = yes + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:recipient = { + has_relation_blood_brother = scope:actor + } + } + + modifier = { + add = { + value = scope:actor.ai_greed + multiply = 0.1 + } + scope:actor = { + ai_greed > 0 + } + } + + modifier = { + add = { + value = scope:actor.primary_title.tier + subtract = scope:recipient.primary_title.tier + multiply = 10 + max = 0 + } + } + + modifier = { + add = { + value = scope:actor.ai_honor + multiply = 0.1 + } + scope:actor = { + ai_honor > 0 + } + } + + ai_value_modifier = { + ai_boldness = -0.4 + ai_honor = 0.1 + ai_greed = 0.1 + ai_energy = -0.2 + } + + modifier = { + factor = 0 + scope:recipient = { + has_character_flag = paiza_recently_granted + } + } + } + + ai_targets = { + ai_recipients = liege + ai_recipients = suzerain + } +} + +mpo_interaction_leverage_khan_authority = { + category = interaction_category_hostile + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_leverage_khan_authority_desc + + ai_frequency_by_tier = { + barony = 0 + county = 24 + duchy = 8 + kingdom = 8 + empire = 8 + hegemony = 8 + } + popup_on_receive = yes + pause_on_receive = yes + + cooldown = { months = 6 } + + cooldown_against_recipient = { years = 10 } + + is_shown = { + scope:actor = { + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + has_variable = paiza_patron + OR = { + scope:recipient.top_liege = var:paiza_patron + scope:recipient = { + is_independent_ruler = yes + primary_title.tier < scope:actor.primary_title.tier + government_has_flag = government_is_nomadic + } + scope:recipient = { + liege = { + OR = { + government_has_flag = government_is_nomadic + scope:recipient.top_liege = prev.var:paiza_patron + } + } + } + } + } + NOT = { + has_character_flag = established_paiza_system + } + } + scope:recipient = { + is_ai = yes + is_gurkhan = no + age >= 12 + NOT = { + has_character_flag = established_paiza_system + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + custom_tooltip = { + text = mpo_abuse_authority_paiza_decision.no_more_paiza_abuse + NOT = { has_character_flag = no_more_paiza_abuse } + } + custom_tooltip = { + text = mpo_abuse_authority_paiza_decision.paiza_patron_not_topdog + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron ?= { + is_gurkhan = yes + } + } + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + ai_accept = { + base = -60 + modifier = { + add = 10 + has_trait = craven + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = arrogant + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = brave + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = paranoid + desc = BLACKMAIL_INTERACTION_PARANOID_ACCEPTANCE + } + modifier = { + add = { + value = scope:recipient.intrigue + multiply = -2 + } + desc = INDEBT_GUEST_INTRIGUE_RECIPIENT + } + modifier = { + add = { + value = scope:actor.intrigue + } + desc = INDEBT_GUEST_INTRIGUE_ACTOR + } + modifier = { + add = { + value = scope:actor.dread + divide = 2 + } + scope:actor.dread >= 2 + desc = offer_vassalization_interaction_aibehavior_dreaded_tt + } + opinion_modifier = { + opinion_target = situation:the_great_steppe.situation_top_herd + who = scope:recipient + multiplier = 0.4 + } + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.2 + } + } + + ai_will_do = { + base = -40 + modifier = { + add = 40 + domicile ?= { herd <= twenty_percent_herd_value } + } + modifier = { + add = 10 + domicile ?= { herd <= sixty_percent_herd_value } + } + modifier = { + add = 10 + domicile ?= { herd <= eighty_percent_herd_value } + } + modifier = { + add = 10 + has_trait = greedy + } + modifier = { + add = 10 + has_trait = wrathful + } + modifier = { + add = 10 + has_trait = ambitious + } + modifier = { + add = -10 + var:paiza_patron ?= { + domicile ?= { has_domicile_parameter = nomad_yurt_paiza_abuse_less_likely_lvl_1 } + } + } + modifier = { + add = -20 + var:paiza_patron ?= { + domicile ?= { has_domicile_parameter = nomad_yurt_paiza_abuse_less_likely_lvl_2 } + } + } + modifier = { + add = -35 + var:paiza_patron ?= { + domicile ?= { has_domicile_parameter = nomad_yurt_paiza_abuse_less_likely_lvl_3 } + } + } + } + + ai_targets = { + ai_recipients = peer_vassals + } + + on_accept = { + scope:actor = { + send_interface_toast = { + left_icon = scope:recipient + right_icon = situation:the_great_steppe.situation_top_herd + title = mpo_interaction_leverage_khan_authority + make_obedient_recipient_to_actor_effect = yes + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = current_gold_value + divide = 2 + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + pay_herd = { + target = scope:actor + value = { + value = domicile.herd + multiply = 0.5 + } + } + } + } + if = { + limit = { + scope:recipient = { + OR = { + is_landed = yes + } + } + } + add_prestige = medium_prestige_value + } + else = { + add_prestige = minor_prestige_value + } + } + + if = { + limit = { + government_has_flag = government_is_nomadic + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + pay_herd = { + target = scope:actor + value = { + value = domicile.herd + multiply = 0.5 + } + } + } + } + + scope:actor = { + random_character_artifact = { + limit = { + scope:actor = { can_benefit_from_artifact = prev } + has_variable = paiza_patron + } + var:paiza_patron = { + scope:actor = { + mpo_paiza_abuse_counter_effect = { + PAIZA_PATRON = prev + PAIZA_ABUSER = scope:actor + } + } + } + } + } + } +} + +# Interrogate +# Used in the Ill-Advised event chain - nomad_events.0001 - 0099 +interrogate_interaction = { + category = interaction_category_hostile + icon = icon_scheme_challenge_status + common_interaction = no + + auto_accept = yes + + desc = interrogate_interaction_desc + + is_shown = { + scope:actor = { has_variable = can_interrogate_var } + scope:recipient = { + is_target_in_variable_list = { + name = valid_to_interrogate_var + target = scope:actor + } + } + # And Achmach is still around + scope:actor = { + any_courtier_or_guest = { + has_variable = achmach_loyalty + } + } + } + + cooldown_against_recipient = { years = 10 } + + on_accept = { + scope:actor = { + custom_tooltip = interrogate_interaction_tt + trigger_event = nomad_events.0006 + } + scope:recipient = { + custom_tooltip = interrogate_interaction_recipient_tt + } + } + + ai_will_do = { + base = 100 + } +} + +# Steal Herd +steal_herd_interaction = { + icon = icon_scheme_steal_herd + interface_priority = 90 + common_interaction = yes + category = interaction_category_hostile + + send_name = START_SCHEME + + scheme = steal_herd + ignores_pending_interaction_block = yes + + is_shown = { + NOT = { scope:recipient = scope:actor } + scope:actor = { + is_landed = yes + is_adult = yes + is_imprisoned = no + government_has_flag = government_is_nomadic + in_diplomatic_range = scope:recipient + trigger_if = { + limit = { + is_ai = yes + } + NOR = { + is_tributary_of_suzerain_or_above = scope:recipient + is_vassal_or_below_of = scope:recipient + scope:recipient = { + is_ai = no + any_targeting_scheme = { + scheme_type = steal_herd + } + } + } + } + } + scope:recipient = { + is_landed = yes + is_adult = yes + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_county + } + } + + is_valid_showing_failures_only = { + scope:actor = { + can_start_scheme = { + type = steal_herd + target_character = scope:recipient + } + } + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + trigger_if = { + limit = { scope:actor = { has_variable = no_scheming_allowed_var } } + custom_tooltip = { + text = no_scheming_allowed_var_tt + scope:actor.var:no_scheming_allowed_var != scope:recipient + } + } + } + + desc = { + triggered_desc = { + trigger = { + scope:actor = { + can_start_scheme = { + type = steal_herd + target_character = scope:recipient + } + } + } + desc = scheme_interaction_tt_steal_herd_approved + } + } + + on_accept = { + scope:actor = { + stress_impact = { + compassionate = minor_stress_impact_gain + honest = minor_stress_impact_gain + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + } + send_interface_toast = { + type = event_toast_effect_neutral + title = steal_herd_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + begin_scheme_basic_effect = { + SCHEME_TYPE = steal_herd + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + } + + if = { + limit = { + domicile ?= { herd >= ninety_percent_herd_value } + } + custom_tooltip = steal_herd_interaction_tt.warning + } + scope:new_scheme ?= { + if = { + limit = { + scope:steal_herd_low ?= yes + } + set_variable = steal_herd_low + } + else_if = { + limit = { + scope:steal_herd_normal ?= yes + } + set_variable = steal_herd_normal + } + else_if = { + limit = { + scope:steal_herd_high ?= yes + } + set_variable = steal_herd_high + } + } + } + } + } + + ai_potential = { + prestige >= medium_prestige_value # In case they fail + trigger_if = { + limit = { + NOT = { + domicile ?= { + has_domicile_building_or_higher = steal_herd_yurt_01 + } + } + } + ai_honor <= 50 + } + NOR = { + scheme_generic_ai_blocker_trigger = yes + primary_title = { + is_mercenary_company = yes + } + } + } + + auto_accept = yes + + ai_will_do = { + base = -30 + + modifier = { + add = 20 + domicile ?= { herd <= twenty_percent_herd_value } + } + + modifier = { + add = 20 + domicile ?= { herd <= sixty_percent_herd_value } + } + + modifier = { + add = { + value = intrigue + multiply = 3 + } + } + + modifier = { + add = { + value = ai_greed + multiply = -1 + } + } + modifier = { + add = { + value = ai_honor + multiply = -0.25 + } + } + modifier = { + scope:actor = { + has_trait = schemer + } + add = 60 + } + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = 60 + } + modifier = { + scope:actor = { + has_relation_nemesis = scope:recipient + } + add = 150 + } + modifier = { + scope:actor = { + opinion = { + target = scope:recipient + value >= low_positive_opinion + } + ai_greed <= high_positive_ai_value + } + factor = 0 + } + modifier = { + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + is_obedient_to = scope:actor + } + } + factor = 0 + } + start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + } + + # Options + options_heading = schemes.t.herd_amount + send_options_exclusive = yes + ## Steal a little herd + send_option = { + flag = steal_herd_low + current_description = steal_herd_interaction.tt.low + } + ## Steal a moderate amount of herd + send_option = { + flag = steal_herd_normal + current_description = steal_herd_interaction.tt.normal + } + ## Steal a lot of herd + send_option = { + flag = steal_herd_high + current_description = steal_herd_interaction.tt.high + } + + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } +} + +mpo_ask_for_herd_interaction = { + category = interaction_category_hostile + icon = demand_herd + desc = mpo_ask_for_herd_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency_by_tier = { + barony = 0 + county = 92 + duchy = 12 + kingdom = 8 + empire = 8 + hegemony = 8 + } + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + is_ai = yes + } + NOT = { + scope:actor = { + has_variable = had_mpo_temujin_flavor_0020 + var:had_mpo_temujin_flavor_0020 ?= scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + is_imprisoned = yes + } + } + scope:recipient = { + NOR = { + is_imprisoned = yes + is_at_war = yes + is_a_faction_member = yes + custom_description = { + text = ask_for_herd_not_enough_herd + domicile.herd < scope:recipient.domicile.ask_for_herd_base_value + government_has_flag = government_is_nomadic + } + } + } + } + + ai_potential = { + primary_title.tier >= tier_duchy + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { + is_valid = { + scope:recipient.domicile ?= { + herd > ask_for_herd_double_value + } + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = more_herd + localization = ASK_FOR_HERD_MORE_HERD + } + + send_options_exclusive = no + + ai_accept = { + base = -100 + modifier = { + trigger = { + scope:more_herd ?= yes + } + add = -100 + desc = ASK_FOR_HERD_MORE_HERD_REASON + } + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = MIGRATION_HOOK_USED + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 4 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + desc = AI_OPINION_REASON + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + add = 20 + scope:actor.domicile.herd < scope:actor.domicile.ask_for_herd_double_value + } + } + + cooldown_against_recipient = { years = 6 } + + ai_targets = { + ai_recipients = vassals + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = ask_for_herd_toast + left_icon = scope:recipient + scope:recipient = { + # How much Herd are you getting? + if = { + limit = { + scope:more_herd ?= yes + } + if = { + limit = { + scope:actor = { has_variable = nomad_events_0210_herd_var } + } + pay_herd = { + target = scope:actor + value = { + value = scope:recipient.domicile.ask_for_herd_double_value + multiply = 2 + } + } + } + else = { + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_double_value + } + } + } + else = { + if = { + limit = { + scope:actor = { has_variable = nomad_events_0210_herd_var } + } + pay_herd = { + target = scope:actor + value = { + value = scope:recipient.domicile.ask_for_herd_base_value + multiply = 2 + } + } + } + else = { + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_base_value + } + } + } + # Extra Herd during the Abundant Grazing season + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_demand_herd_higher_rate + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + } + custom_tooltip = { + text = ask_for_herd_abundant_grazing_tt + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_half_value + } + } + } + # Now opinion maluses + if = { + limit = { + scope:more_herd ?= yes + } + if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 2 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -20 + } + } + else_if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 1 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -40 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -60 + } + } + } + else = { + if = { + limit = { #herders cannot give you more herd + scope:recipient = { + government_has_flag = government_is_herder + } + } + scope:actor = { + domicile ?= { change_herd = major_herd_gain } + add_legitimacy = minor_legitimacy_loss + } + scope:recipient.primary_title = { + custom_tooltip = ask_for_herd_herder_recipient_tt + add_county_modifier = { + modifier = ask_for_herd_county_depleted_modifier + years = 12 + } + } + } + else = { + if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 2 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -10 + } + } + else_if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 1 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -40 + } + } + } + } + } + } + } + } +} + +### Demand Obedience +mpo_demand_obedience_interaction = { + category = interaction_category_vassal + icon = demand_obedience + desc = mpo_demand_obedience_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency_by_tier = { + barony = 0 + county = 24 + duchy = 4 + kingdom = 4 + empire = 4 + hegemony = 4 + } + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_allows = obedience + } + scope:recipient = { + is_ai = yes + obedience_target ?= scope:actor + is_obedient = no + } + } + + is_valid_showing_failures_only = { + scope:actor = { + age >= 16 + is_physically_able = yes + NOT = { + is_at_war_with = scope:recipient + } + } + scope:actor = { dread >= medium_dread_value } + } + + cost = { prestige = minor_prestige_value } + + ai_potential = { + government_allows = obedience + primary_title.tier >= tier_duchy + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_options_exclusive = no + + ai_accept = { + base = -50 + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + modifier = { + add = 10 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = meritocratic_bureaucracy_1 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 20 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = meritocratic_bureaucracy_2 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 50 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = meritocratic_bureaucracy_3 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 100 + scope:actor = { has_realm_law = nomadic_authority_5 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = -20 + scope:actor = { legitimacy_level = 1 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 10 + scope:actor = { legitimacy_level = 3 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 25 + scope:actor = { legitimacy_level = 4 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 50 + scope:actor = { legitimacy_level = 5 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 4 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + modifier = { + add = -20 + scope:recipient = { + has_trait = brave + } + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = arrogant + } + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = disloyal + } + desc = DEMAND_OBEDIENCE_INTERACTION_DISLOYAL_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = craven + } + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = content + } + desc = DEMAND_OBEDIENCE_INTERACTION_CONTENT_ACCEPTANCE + } + modifier = { + add = 25 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_easier_obedience + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_ZUD_ACCEPTANCE + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { dread >= major_dread_value } + add = 25 + } + modifier = { + scope:actor = { + any_councillor = { + is_kurultai_trigger = yes + NOT = { is_obedient_to = prev } + } + } + add = 25 + } + } + + cooldown_against_recipient = { years = 10 } + + ai_targets = { + ai_recipients = vassals + ai_recipients = courtiers + ai_recipients = tributaries + chance = 0.25 + } + + ai_targets = { # They will try to get a Stable Succession + ai_recipients = councillors + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_demand_obedience_interaction_toast + left_icon = scope:recipient + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = obedience_opinion + } + } + # Belligerent Vassal Opinion + if = { + limit = { + any_vassal = { has_vassal_stance = belligerent } + } + every_vassal = { + limit = { has_vassal_stance = belligerent } + custom = every_belligerent_vassal + add_opinion = { + modifier = impressed_opinion + target = scope:actor + opinion = 15 + } + } + } + } + } + } +} + +################## +# Refill MaA +################## + +refill_maa_nomad_interaction = { + icon = icon_soldier_survivor + category = interaction_debug_main + interface_priority = 20 + common_interaction = yes + desc = refill_maa_nomad_interaction_desc + cooldown = { months = 6 } + hidden = yes + + is_shown = { + has_mpo_dlc_trigger = yes + scope:actor = { + is_nomad = yes + government_allows = conditional_maa_refill + } + scope:recipient = scope:actor + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = reinforce_soldiers_any_regiment_tt + scope:actor.maa_regiments_count >= 1 + } + custom_tooltip = { + text = reinforce_soldiers_unfull_regiment_tt + scope:actor = { + any_maa_regiment = { maa_regiments_valid_to_refill_trigger = yes } + } + } + custom_tooltip = { + text = SUPPLY_LOSS_AT_SEA + scope:actor = { any_laamp_portion_at_sea_trigger = no } + } + custom_tooltip = { + text = REFILL_MAA_AT_WAR_TT + scope:actor = { + NOT = { + any_army = { + location.county.holder = { + OR = { + is_at_war_with = scope:actor + any_liege_or_above = { is_at_war_with = scope:actor } + } + } + } + } + } + } + } + + send_options_exclusive = yes + + send_option = { + flag = herd + localization = reinforce_soldiers_option_herd + is_valid = { + scope:actor.domicile.herd >= 5 + } + } + + send_option = { + flag = gold + localization = reinforce_soldiers_option_gold + is_valid = { + scope:actor.gold >= 5 + } + } + + on_accept = { + scope:actor = { + switch = { + trigger = yes + scope:gold = { + if = { + limit = { gold > replenishable_troops_payed_gold_tt_value } + custom_tooltip = refill_maa_gold_full_tt + } + else = { custom_tooltip = refill_maa_gold_tt } + custom_tooltip = refill_maa_gold_cost_tt + refill_maa_with_gold_effect = yes + } + scope:herd = { + if = { + limit = { domicile.herd > replenishable_troops_payed_herd_tt_value } + custom_tooltip = refill_maa_herd_full_tt + } + else = { custom_tooltip = refill_maa_herd_tt } + custom_tooltip = refill_maa_herd_cost_tt + refill_maa_with_herd_effect = yes + } + } + if = { + limit = { + is_ai = yes + NOR = { + scope:gold = yes + scope:herd = yes + } + } + refill_maa_with_herd_effect = yes + } + custom_tooltip = martial_skill_discount_tt + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 3 + duchy = 1 + kingdom = 1 + empire = 1 + hegemony = 1 + } + ai_targets = { + ai_recipients = self + } + ai_potential = { + is_nomad = yes + government_allows = conditional_maa_refill + any_maa_regiment = { maa_current_troops_count < maa_max_troops_count } + } + + ai_will_do = { + base = 100 + } +} + +### Commander Trait interaction for guardians +# actor = guardian +# recipient = ward/hostage +# This has to be update every time a new Commander trait is added to the game, otherwise you won't be able to pass it down +influence_child_commander_interaction = { + category = interaction_category_friendly + common_interaction = yes + interface_priority = 60 + icon = child + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED + pre_answer_no_key = ANSWER_CANT_SUCCEED + pre_answer_yes_key = ANSWER_WILL_SUCCEED + pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE + + desc = influence_child_commander_interaction_desc + + is_shown = { #any ai ward/hostage + has_mpo_dlc_trigger = yes + scope:recipient = { + is_ai = yes + is_adult = no + OR = { + scope:actor = { has_relation_ward = scope:recipient } + is_hostage_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { #be old enough to fight and don't have any commander traits yet + age >= 10 + number_of_commander_traits <= 1 + #checking all trait individually through the set scope in order to catch if all of your traits are either the same or opposite + trigger_if = { + limit = { + scope:actor = { + number_of_commander_traits > 0 + } + } + custom_description = { + text = influence_child_commander_interaction_all_same_traits + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { NOT = { has_trait = logistician } } + } + scope:military_engineer = { + scope:recipient = { NOT = { has_trait = military_engineer } } + } + scope:aggressive_attacker = { + scope:recipient = { NOT = { has_trait = aggressive_attacker } } + } + scope:unyielding_defender = { + scope:recipient = { NOT = { has_trait = unyielding_defender } } + } + scope:forder = { + scope:recipient = { NOT = { has_trait = forder } } + } + scope:flexible_leader = { + scope:recipient = { NOT = { has_trait = flexible_leader } } + } + scope:desert_warrior = { + scope:recipient = { NOT = { has_trait = desert_warrior } } + } + scope:jungle_stalker = { + scope:recipient = { NOT = { has_trait = jungle_stalker } } + } + scope:reaver = { + scope:recipient = { NOT = { has_trait = reaver } } + } + scope:reckless = { + scope:recipient = { NOT = { has_trait = reckless } } + } + scope:holy_warrior = { + scope:recipient = { NOT = { has_trait = holy_warrior } } + } + scope:open_terrain_expert = { + scope:recipient = { NOT = { has_trait = open_terrain_expert } } + } + scope:rough_terrain_expert = { + scope:recipient = { NOT = { has_trait = rough_terrain_expert } } + } + scope:forest_fighter = { + scope:recipient = { NOT = { has_trait = forest_fighter } } + } + scope:cautious_leader = { + scope:recipient = { NOT = { has_trait = cautious_leader } } + } + scope:organizer = { + scope:recipient = { NOT = { has_trait = organizer } } + } + scope:winter_soldier = { + scope:recipient = { NOT = { has_trait = winter_soldier } } + } + } + } + } + is_physically_able = yes + } + scope:actor = { + is_adult = yes + number_of_commander_traits >= 1 + is_imprisoned = no + is_physically_able = yes + } + } + + cooldown_against_recipient = { years = 3 } + + can_send = { + } + #each option is shown if the actor has the corresponding trait and valid if recipient don't have it yet or don't have an opposite trait + send_option = { + is_shown = { + scope:actor = { has_trait = logistician } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = logistician + trait:logistician = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = logistician + localization = trait_logistician + } + send_option = { + is_shown = { + scope:actor = { has_trait = military_engineer } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = military_engineer + trait:military_engineer = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = military_engineer + localization = trait_military_engineer + } + send_option = { + is_shown = { + scope:actor = { has_trait = aggressive_attacker } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = aggressive_attacker + trait:aggressive_attacker = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = aggressive_attacker + localization = trait_aggressive_attacker + } + send_option = { + is_shown = { + scope:actor = { has_trait = unyielding_defender } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = unyielding_defender + trait:unyielding_defender = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = unyielding_defender + localization = trait_unyielding_defender + } + send_option = { + is_shown = { + scope:actor = { has_trait = forder } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = forder + trait:forder = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = forder + localization = trait_forder + } + send_option = { + is_shown = { + scope:actor = { has_trait = flexible_leader } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = flexible_leader + trait:flexible_leader = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = flexible_leader + localization = trait_flexible_leader + } + send_option = { + is_shown = { + scope:actor = { has_trait = desert_warrior } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = desert_warrior + trait:desert_warrior = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = desert_warrior + localization = trait_desert_warrior + } + send_option = { + is_shown = { + scope:actor = { has_trait = jungle_stalker } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = jungle_stalker + trait:jungle_stalker = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = jungle_stalker + localization = trait_jungle_stalker + } + send_option = { + is_shown = { + scope:actor = { has_trait = reaver } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = reaver + trait:reaver = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = reaver + localization = trait_reaver + } + send_option = { + is_shown = { + scope:actor = { has_trait = reckless } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = reckless + trait:reckless = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = reckless + localization = trait_reckless + } + send_option = { + is_shown = { + scope:actor = { has_trait = holy_warrior } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = holy_warrior + trait:holy_warrior = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = holy_warrior + localization = trait_holy_warrior + } + send_option = { + is_shown = { + scope:actor = { has_trait = open_terrain_expert } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = open_terrain_expert + trait:open_terrain_expert = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = open_terrain_expert + localization = trait_open_terrain_expert + } + send_option = { + is_shown = { + scope:actor = { has_trait = rough_terrain_expert } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = rough_terrain_expert + trait:rough_terrain_expert = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = rough_terrain_expert + localization = trait_rough_terrain_expert + } + send_option = { + is_shown = { + scope:actor = { has_trait = forest_fighter } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = forest_fighter + trait:forest_fighter = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = forest_fighter + localization = trait_forest_fighter + } + send_option = { + is_shown = { + scope:actor = { has_trait = cautious_leader } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = cautious_leader + trait:cautious_leader = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = cautious_leader + localization = trait_cautious_leader + } + send_option = { + is_shown = { + scope:actor = { has_trait = organizer } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = organizer + trait:organizer = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = organizer + localization = trait_organizer + } + send_option = { + is_shown = { + scope:actor = { has_trait = winter_soldier } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = winter_soldier + trait:winter_soldier = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = winter_soldier + localization = trait_winter_soldier + } + + send_options_exclusive = yes + + on_send = { + switch = {#save which trait was chosen as scope:target_trait + trigger = yes + scope:logistician = { + trait:logistician = { save_scope_as = target_trait } + } + scope:military_engineer = { + trait:military_engineer = { save_scope_as = target_trait } + } + scope:aggressive_attacker = { + trait:aggressive_attacker = { save_scope_as = target_trait } + } + scope:unyielding_defender = { + trait:unyielding_defender = { save_scope_as = target_trait } + } + scope:forder = { + trait:forder = { save_scope_as = target_trait } + } + scope:flexible_leader = { + trait:flexible_leader = { save_scope_as = target_trait } + } + scope:desert_warrior = { + trait:desert_warrior = { save_scope_as = target_trait } + } + scope:jungle_stalker = { + trait:jungle_stalker = { save_scope_as = target_trait } + } + scope:reaver = { + trait:reaver = { save_scope_as = target_trait } + } + scope:reckless = { + trait:reckless = { save_scope_as = target_trait } + } + scope:holy_warrior = { + trait:holy_warrior = { save_scope_as = target_trait } + } + scope:open_terrain_expert = { + trait:open_terrain_expert = { save_scope_as = target_trait } + } + scope:rough_terrain_expert = { + trait:rough_terrain_expert = { save_scope_as = target_trait } + } + scope:forest_fighter = { + trait:forest_fighter = { save_scope_as = target_trait } + } + scope:cautious_leader = { + trait:cautious_leader = { save_scope_as = target_trait } + } + scope:organizer = { + trait:organizer = { save_scope_as = target_trait } + } + scope:winter_soldier = { + trait:winter_soldier = { save_scope_as = target_trait } + } + fallback = { + scope:actor = { + random_character_trait = { + limit = { has_trait_category = commander } + save_scope_as = target_trait + } + } + } + } + } + + on_accept = { + scope:actor = { + # Trait you're trying to make your ward gained is saved as scope:target_trait + trigger_event = mpo_interactions_events.0101 + show_as_tooltip = { + add_stress = minor_stress_gain + add_opinion = { + target = scope:recipient + modifier = pleased_opinion + opinion = 20 + } + } + } + scope:recipient = { + show_as_tooltip = { + switch = {#save which trait was chosen as scope:target_trait + trigger = yes + scope:logistician = { + trait:logistician = { save_scope_as = target_trait } + } + scope:military_engineer = { + trait:military_engineer = { save_scope_as = target_trait } + } + scope:aggressive_attacker = { + trait:aggressive_attacker = { save_scope_as = target_trait } + } + scope:unyielding_defender = { + trait:unyielding_defender = { save_scope_as = target_trait } + } + scope:forder = { + trait:forder = { save_scope_as = target_trait } + } + scope:flexible_leader = { + trait:flexible_leader = { save_scope_as = target_trait } + } + scope:desert_warrior = { + trait:desert_warrior = { save_scope_as = target_trait } + } + scope:jungle_stalker = { + trait:jungle_stalker = { save_scope_as = target_trait } + } + scope:reaver = { + trait:reaver = { save_scope_as = target_trait } + } + scope:reckless = { + trait:reckless = { save_scope_as = target_trait } + } + scope:holy_warrior = { + trait:holy_warrior = { save_scope_as = target_trait } + } + scope:open_terrain_expert = { + trait:open_terrain_expert = { save_scope_as = target_trait } + } + scope:rough_terrain_expert = { + trait:rough_terrain_expert = { save_scope_as = target_trait } + } + scope:forest_fighter = { + trait:forest_fighter = { save_scope_as = target_trait } + } + scope:cautious_leader = { + trait:cautious_leader = { save_scope_as = target_trait } + } + scope:organizer = { + trait:organizer = { save_scope_as = target_trait } + } + scope:winter_soldier = { + trait:winter_soldier = { save_scope_as = target_trait } + } + } + if = { + limit = { exists = scope:target_trait } + add_trait = scope:target_trait + } + add_opinion = { + target = scope:actor + modifier = admiration_opinion + opinion = 20 + } + } + } + } + + on_decline = { + scope:actor = { + # Trait you're trying to make your ward gained is saved as scope:target_trait + trigger_event = mpo_interactions_events.0102 + show_as_tooltip = { + add_stress = medium_stress_gain + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + } + } + scope:recipient = { + show_as_tooltip = { + add_opinion = { + target = scope:actor + modifier = confused_opinion + opinion = -20 + } + } + } + } + + auto_accept = no + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + + modifier = { # Perk boost + desc = influence_children_groomed_to_rule_perk_tt + trigger = { + scope:actor = { has_perk = groomed_to_rule_perk } + } + add = groomed_to_rule_value + } + + modifier = { #more likely if you already have something in common + add = { + value = 5 + if = { + limit = { + number_of_personality_traits_in_common = { + target = scope:recipient + value = 2 + } + } + multiply = 2 + } + else_if = { + limit = { + number_of_personality_traits_in_common = { + target = scope:recipient + value = 3 + } + } + multiply = 3 + } + } + number_of_personality_traits_in_common = { + target = scope:recipient + value >= 1 + } + desc = we_are_alike_tt + } + + modifier = { #less likely if you already have opposite traits + add = { + value = -5 + if = { + limit = { + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value = 2 + } + } + } + multiply = 2 + } + else_if = { + limit = { + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value = 3 + } + } + } + multiply = 3 + } + } + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value >= 1 + } + } + desc = we_are_NOT_alike_tt + } + + modifier = { #adding your knowledge + add = { + value = scope:actor.martial + multiply = 0.5 + } + desc = HAS_MARTIAL_SKILL_REASON + } + + modifier = { #adding your fighting skills + add = { + value = scope:actor.prowess + multiply = 0.5 + } + desc = HAS_PROWESS_SKILL_REASON + } + + modifier = { #more likely with a Wet Nurse employed + exists = scope:actor.court_position:champion_court_position + add = 10 + desc = HAS_CHAMPION_REASON + } + + modifier = { #more likely if chosen trait is compatible with recipients childhood personality + add = 15 + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { + OR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:military_engineer = { + scope:recipient = { + OR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:aggressive_attacker = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:unyielding_defender = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:forder = { + scope:recipient = { + OR = { + has_trait = rowdy + has_trait = curious + } + } + } + scope:flexible_leader = { + scope:recipient = { + OR = { + has_trait = charming + has_trait = curious + } + } + } + scope:desert_warrior = { + scope:recipient = { + has_trait = rowdy + } + } + scope:jungle_stalker = { + scope:recipient = { + has_trait = rowdy + } + } + scope:reaver = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:reckless = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:holy_warrior = { + scope:recipient = { + has_trait = pensive + } + } + scope:open_terrain_expert = { + scope:recipient = { + has_trait = rowdy + } + } + scope:rough_terrain_expert = { + scope:recipient = { + has_trait = rowdy + } + } + scope:forest_fighter = { + scope:recipient = { + has_trait = rowdy + } + } + scope:cautious_leader = { + scope:recipient = { + has_trait = pensive + } + } + scope:organizer = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = charming + } + } + } + scope:winter_soldier = { + scope:recipient = { + has_trait = rowdy + } + } + } + desc = has_compatible_personality_tt + } + + modifier = { #less likely if chosen trait is incompatible with recipients childhood personality + add = -15 + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { + NOR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:military_engineer = { + scope:recipient = { + NOR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:aggressive_attacker = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:unyielding_defender = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:forder = { + scope:recipient = { + NOR = { + has_trait = rowdy + has_trait = curious + } + } + } + scope:flexible_leader = { + scope:recipient = { + NOR = { + has_trait = charming + has_trait = curious + } + } + } + scope:desert_warrior = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:jungle_stalker = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:reaver = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:reckless = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:holy_warrior = { + scope:recipient = { + NOT = { has_trait = pensive } + } + } + scope:open_terrain_expert = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:rough_terrain_expert = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:forest_fighter = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:cautious_leader = { + scope:recipient = { + NOT = { has_trait = pensive } + } + } + scope:organizer = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = charming + } + } + } + scope:winter_soldier = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + } + desc = has_incompatible_personality_tt + } + + modifier = { #more likely if actor is afraid of you + add = intimidated_halved_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { #more likely if actor is afraid of you + add = cowed_halved_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { #less likely if recipient already has a commander trait + add = -50 + scope:recipient = { + number_of_commander_traits >= 1 + } + desc = has_commander_traits_already + } + } + + # AI + ai_potential = { + any_relation = { + type = ward + count >= 1 + } + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 12 + } + ai_targets = { + ai_recipients = courtiers + } + ai_will_do = { + base = -100 + modifier = { # If the recipient is a player, do not bother sending + factor = 0 + scope:recipient = { + is_ai = no + } + } + modifier = { + add = ai_honor + } + modifier = { + add = ai_energy + } + modifier = { + add = ai_sociability + } + modifier = { + add = ai_boldness + } + } +} + +mpo_make_blood_brother = { + category = interaction_category_diplomacy + icon = blood_brother + desc = make_blood_brother_desc + common_interaction = yes + can_send_despite_rejection = yes + interface_priority = 60 + + greeting = positive + notification_text = MAKE_BLOOD_BROTHER_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { months = 1 } + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Scope:actor needs to have a suitable CulTrad. + scope:actor = { + mpo_valid_for_blood_brotherhood_trigger = yes + NOT = { var:had_mpo_temujin_flavor_0020 ?= scope:recipient } + } + scope:recipient = { + mpo_valid_for_blood_brotherhood_trigger = yes + NOT = { + this = scope:actor + } + } + } + + is_valid_showing_failures_only = { + mpo_can_be_blood_brothers_trigger = { CHARACTER_1 = scope:actor CHARACTER_2 = scope:recipient } + # Both characters must be available + scope:actor = { + is_imprisoned = no + is_incapable = no + } + scope:recipient = { + is_imprisoned = no + is_incapable = no + } + } + #Mutual enemy that you oppose together + send_option = { + flag = common_enemy + is_valid = { + custom_description = { + text = blood_brother_common_enemy_trigger + mpo_blood_brother_common_enemy_trigger = yes + } + } + localization = BLOOD_BROTHER_COMMON_ENEMY + } + #Shared memories + send_option = { + flag = memories_together + is_valid = { + custom_description = { + text = blood_brother_memory_trigger + scope:actor = { + any_memory = { + has_memory_participant = scope:recipient + mpo_blood_brother_reason_memory_trigger = yes + } + } + } + } + localization = BLOOD_BROTHER_MEMORIES + } + + #Fought together in a war + send_option = { + flag = war_allies + is_valid = { + custom_description = { + text = blood_brother_former_war_allies_trigger + scope:actor = { + has_variable_list = former_war_allies + any_in_list = { + variable = former_war_allies + this = scope:recipient + } + } + } + } + localization = BLOOD_BROTHER_WAR_ALLIES + } + + # Normal + send_option = { + is_shown = { + always = no + } + is_valid = { + always = yes + } + flag = normal + localization = BLOOD_BROTHER_NORMAL + starts_enabled = { always = yes } + } + + cost = { + piety = minor_piety_value + } + + send_options_exclusive = no + + on_accept = { + # Notifications with most effects. + scope:actor = { + # Become blood brothers + #Tooltip effect because it happens later/in the blood brother on action + show_as_tooltip = { + set_relation_blood_brother = scope:recipient + } + custom_tooltip = blood_brother_alliance_actor_alliance_tt + custom_tooltip = blood_brother_actor_gains_hook_tt + if = { + limit = { + scope:recipient = { + mpo_blood_brother_august_trigger = { OTHER_BROTHER = scope:actor } + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_august_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_august_modifier_tt + } + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_warrior_trigger = { OTHER_BROTHER = scope:actor } + } + } + custom_tooltip = blood_brother_warrior_modifier_tt + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_clever_trigger = yes + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_clever_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_clever_modifier_tt + } + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_loving_trigger = yes + } + } + custom_tooltip = blood_brother_loving_modifier_tt + } + if = { + limit = { + always = scope:common_enemy + } + custom_tooltip = blood_brother_foe_modifier_tt + } + } + scope:recipient = { + # Become blood brothers + #Tooltip effect because it happens later/in the blood brother on action + + show_as_tooltip = { set_relation_blood_brother = scope:actor } + custom_tooltip = blood_brother_alliance_recipient_alliance_tt + custom_tooltip = blood_brother_recipient_gains_hook_tt + if = { + limit = { + scope:actor = { + mpo_blood_brother_august_trigger = { OTHER_BROTHER = scope:recipient } + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_august_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_august_modifier_tt + } + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_warrior_trigger = { OTHER_BROTHER = scope:recipient } + } + } + custom_tooltip = blood_brother_warrior_modifier_tt + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_clever_trigger = yes + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_clever_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_clever_modifier_tt + } + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_loving_trigger = yes + } + } + custom_tooltip = blood_brother_loving_modifier_tt + } + if = { + limit = { + always = scope:common_enemy + } + custom_tooltip = blood_brother_foe_modifier_tt + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_oath_of_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + if = { + limit = { + always = scope:common_enemy + } + scope:actor = { + make_blood_brother_save_common_enemy_effect = yes + } + } + #Fire events for each char, resetting scopes to be appropriate in each + hidden_effect = { + scope:recipient = { + save_scope_as = blood_bro + } + scope:actor = { + set_relation_blood_brother = { + reason = sworn_blood_brother + target = scope:recipient + } + trigger_event = mpo_interactions_events.0006 + } + clear_saved_scope = blood_bro + scope:actor = { + save_scope_as = blood_bro + } + scope:recipient = { + trigger_event = mpo_interactions_events.0006 + } + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = make_blood_brother_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = minor_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = make_blood_brother_interaction.decline.recipient.tt + left_icon = scope:actor + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = hurt_opinion + opinion = -20 + } + } + } + } + # And set up a little hidden drama for later... + hidden_effect = { + scope:recipient = { + if = { + limit = { + # We don't use the standard check for this, since they'll already be friends by definition, so the trigger would always return as false. + # Instead, we just check to make sure they're not *already* potential rivals; this can happen regardless, so really we're just setting them up for drama if the friendship ever falters. + NOT = { has_relation_potential_rival = scope:actor } + } + random = { + chance = 20 + set_relation_potential_rival = scope:actor + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_declined_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + base = -50 + + mpo_blood_brother_interactions_ai_accept_modifier = yes + + # Common foe send option + # Are you offering confederation leadership? + modifier = { + trigger = { + scope:common_enemy ?= yes + } + add = 75 + desc = BLOOD_BROTHER_COMMON_ENEMY_VALUE + } + # Memories send option + modifier = { + trigger = { + scope:memories_together ?= yes + } + add = 50 + desc = BLOOD_BROTHER_MEMORIES_VALUE + } + # Former war allies send option + modifier = { + trigger = { + scope:war_allies ?= yes + } + add = 30 + desc = BLOOD_BROTHER_WAR_ALLIES_VALUE + } + } + ## Performance-enhancement + ai_potential = { + is_imprisoned = no + is_at_war = no + has_blood_brother = no + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = liege + ai_recipients = scripted_relations + } + ai_targets = { + ai_recipients = peer_vassals + max = 10 + } + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + max = 15 + } + ## Frequency + ai_frequency_by_tier = { + barony = 0 + county = 96 + duchy = 48 + kingdom = 12 + empire = 12 + hegemony = 12 + } + ai_will_do = { + base = -50 + + #Dishonorable characters don't want to be bound like this + modifier = { + scope:recipient = { + ai_honor <= medium_negative_ai_value + } + add = -40 + } + modifier = { + scope:recipient = { + ai_sociability <= medium_negative_ai_value + } + add = -20 + } + + #This will mostly just annoy players, unless AI is worthy and has a good reason + modifier = { + scope:recipient = { + is_ai = no + } + NOT = { + scope:actor = { + is_landed = yes + OR = { + has_relation_friend = scope:recipient + has_relation_soulmate = scope:recipient + is_allied_to = scope:recipient + } + } + } + add = -100 + } + modifier = { + add = 25 + any_ally = { + count < 1 + } + } + modifier = { + add = 75 + any_ally = { + count < 2 + } + scope:recipient = { # Don't propose alliances to tiny insignificant rulers just because + OR = { + current_military_strength >= scope:actor.eighty_percent_of_current_military_strength + primary_title.tier >= scope:actor.primary_title.tier + AND = { + primary_title.tier >= tier_duchy + scope:actor.primary_title.tier < tier_empire + } + } + } + } + + modifier = { + add = 25 + scope:actor = { + mpo_blood_brother_common_enemy_trigger = yes + } + } + modifier = { + add = 25 + scope:actor = { + scope:actor = { + any_memory = { + has_memory_participant = scope:recipient + mpo_blood_brother_reason_memory_trigger = yes + } + } + } + } + modifier = { + add = 10 + scope:actor = { + has_variable_list = former_war_allies + any_in_list = { + variable = former_war_allies + this = scope:recipient + } + } + } + + mpo_blood_brother_interactions_ai_accept_modifier = yes + + modifier = { # The AI shouldn't propose to their Lieges + factor = 0.5 + is_liege_or_above_of = scope:recipient + } + modifier = { # The AI shouldn't propose to their Vassals unless Clan + factor = 0.5 + scope:actor = { + NOT = { government_has_flag = government_is_clan } + } + scope:recipient = { + is_vassal_of = scope:actor + } + } + modifier = { + factor = 0 + scope:recipient = { + has_character_modifier = broke_blood_brotherhood_modifier + } + } + + # Jamukha offers Temujin via Event + modifier = { + trigger = { + scope:actor = { this = character:mpo_mongol_1 } + scope:recipient = { this = character:125501 } + } + factor = 0 + } + } +} + + +################################ +# Feudalize Nomadic Holding +################################ +feudalize_nomadic_holding_interaction = { + category = interaction_category_uncategorized + hidden = yes + special_interaction = feudalize_holding + + desc = feudalize_holding_interaction_desc + + target_type = title + target_filter = actor_domain_titles + + auto_accept = yes + + is_shown = { + scope:actor = { + this = scope:recipient + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + + can_be_picked_title = { + scope:target = { + holder = scope:actor + is_capital_barony = no # we'll use the county in that case + trigger_if = { + limit = { tier <= tier_county } + title_province = { + has_holding_type = nomad_holding + } + } + trigger_else = { + custom_description = { + text = "feudalize_nomadic_holding_interaction_title_not_county_or_below" + always = no + } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + trigger_if = { + limit = { tier <= tier_county } + title_province = { + barony_controller = scope:actor + has_ongoing_construction = no + } + } + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + scope:actor = { + if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + } + add = { + value = 50 + desc = BASE + } + } + else = { + add = { + value = feudalize_holding_interaction_cost + desc = BASE + } + if = { + limit = { # More expensive for admin to make barbarians civilized... + government_has_flag = government_is_administrative + } + add = { + value = feudalize_holding_interaction_cost + multiply = 0.25 + desc = has_admin_government + } + if = { + limit = { # Admin get a bonus for high bureaucracy levels + OR = { + has_realm_law = imperial_bureaucracy_2 + has_realm_law = imperial_bureaucracy_3 + } + } + subtract = { + value = feudalize_holding_interaction_cost + multiply = { + value = 0.1 + if = { + limit = { + has_realm_law = imperial_bureaucracy_3 + } + add = 0.15 + } + } + desc = imperial_bureaucracy + } + } + } + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + scope:actor = { + add = { + value = feudalize_holding_interaction_cost + desc = BASE + } + if = { + limit = { # More expensive for admin to make barbarians civilized... + government_has_flag = government_is_administrative + } + add = { + value = feudalize_holding_interaction_cost + multiply = 0.25 + desc = has_admin_government + } + if = { + limit = { # Admin get a bonus for high bureaucracy levels + OR = { + has_realm_law = imperial_bureaucracy_2 + has_realm_law = imperial_bureaucracy_3 + } + } + subtract = { + value = feudalize_holding_interaction_cost + multiply = { + value = 0.1 + if = { + limit = { + has_realm_law = imperial_bureaucracy_3 + } + add = 0.15 + } + } + desc = imperial_bureaucracy + } + } + } + } + } + } + prestige = { + scope:actor = { + if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + scope:target.county.culture = scope:actor.culture + } + add = { + value = 50 + desc = BASE + } + } + else_if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + add = { + value = 100 + desc = BASE + } + } + else_if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + } + add = { + value = 300 + desc = BASE + } + } + } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = feudalize_holding_interaction_notification + + right_icon = scope:actor + + if = { + limit = { + exists = scope:target.title_province + NOT = { government_has_flag = government_is_tribal } + } + scope:target.title_province = { + set_holding_type = castle_holding + } + } + + if = { + limit = { + exists = scope:target.title_province + government_has_flag = government_is_tribal + } + scope:target.title_province = { + set_holding_type = tribal_holding + } + } + if = { + limit = { + scope:target.county.culture = scope:actor.culture + } + } + else_if = { + limit = { + OR = { + government_has_flag = government_is_tribal + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + } + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 5 + } + } + } + else = { + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 30 + } + } + } + } + } + } + + ai_will_do = { + base = 1500 + } +} + +################################ +# Feudalize Herder Holding +################################ +feudalize_herder_holding_interaction = { + category = interaction_category_uncategorized + hidden = yes + special_interaction = feudalize_holding + + desc = feudalize_holding_interaction_desc + + target_type = title + target_filter = actor_domain_titles + + auto_accept = yes + + is_shown = { + scope:actor = { + this = scope:recipient + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + + can_be_picked_title = { + scope:target = { + holder = scope:actor + is_capital_barony = no # we'll use the county in that case + trigger_if = { + limit = { tier <= tier_county } + title_province = { + has_holding_type = herder_holding + } + } + trigger_else = { + custom_description = { + text = "feudalize_herder_holding_interaction_title_not_county_or_below" + always = no + } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + trigger_if = { + limit = { tier <= tier_county } + title_province = { + barony_controller = scope:actor + has_ongoing_construction = no + } + } + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + has_treasury = no + } + scope:actor = { + if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + } + add = { + value = 50 + desc = BASE + } + } + else = { + add = { + value = feudalize_holding_interaction_cost + desc = BASE + } + if = { + limit = { # More expensive for admin to make barbarians civilized... + government_has_flag = government_is_administrative + } + add = { + value = feudalize_holding_interaction_cost + multiply = 0.25 + desc = has_admin_government + } + if = { + limit = { # Admin get a bonus for high bureaucracy levels + OR = { + has_realm_law = imperial_bureaucracy_2 + has_realm_law = imperial_bureaucracy_3 + } + } + subtract = { + value = feudalize_holding_interaction_cost + multiply = { + value = 0.1 + if = { + limit = { + has_realm_law = imperial_bureaucracy_3 + } + add = 0.15 + } + } + desc = imperial_bureaucracy + } + } + } + } + } + } + } + treasury = { + value = 0 + if = { + limit = { + has_treasury = yes + } + scope:actor = { + add = { + value = feudalize_holding_interaction_cost + desc = BASE + } + if = { + limit = { # More expensive for admin to make barbarians civilized... + government_has_flag = government_is_administrative + } + add = { + value = feudalize_holding_interaction_cost + multiply = 0.25 + desc = has_admin_government + } + if = { + limit = { # Admin get a bonus for high bureaucracy levels + OR = { + has_realm_law = imperial_bureaucracy_2 + has_realm_law = imperial_bureaucracy_3 + } + } + subtract = { + value = feudalize_holding_interaction_cost + multiply = { + value = 0.1 + if = { + limit = { + has_realm_law = imperial_bureaucracy_3 + } + add = 0.15 + } + } + desc = imperial_bureaucracy + } + } + } + } + } + } + prestige = { + scope:actor = { + if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + scope:target.county.culture = scope:actor.culture + } + add = { + value = 50 + desc = BASE + } + } + else_if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + add = { + value = 100 + desc = BASE + } + } + else_if = { + limit = { # Less expensive for tribals + government_has_flag = government_is_tribal + } + add = { + value = 300 + desc = BASE + } + } + } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = feudalize_holding_interaction_notification + + right_icon = scope:actor + + if = { + limit = { + exists = scope:target.title_province + NOT = { government_has_flag = government_is_tribal } + } + scope:target.title_province = { + set_holding_type = castle_holding + } + } + + if = { + limit = { + exists = scope:target.title_province + government_has_flag = government_is_tribal + } + scope:target.title_province = { + set_holding_type = tribal_holding + } + } + if = { + limit = { + scope:target.county.culture = scope:actor.culture + } + } + else_if = { + limit = { + OR = { + government_has_flag = government_is_tribal + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + } + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 5 + } + } + } + else = { + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 30 + } + } + } + } + } + } + + ai_will_do = { + base = 1500 + } +} + +mpo_retrieve_land_from_herder_interaction = { + category = interaction_category_diplomacy + common_interaction = yes + notification_text = REVOKE_TITLE_PROPOSAL + interface_priority = 100 + icon = mpo_retrieve_land_from_herder_interaction + desc = mpo_retrieve_land_from_herder_interaction_desc + + special_interaction = revoke_title_interaction + interface = revoke_title + target_type = title + target_filter = recipient_domain_titles + ai_maybe = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + # actor character giving the titles + # recipient character receiving the titles + + is_shown = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_imprisoned = no + prestige >= minor_prestige_value + trigger_if = { + limit = { is_landed = yes } + custom_tooltip = { + text = mpo_retrieve_land_from_herder_interaction_neighbour_tt + any_sub_realm_county = { + any_neighboring_county = { + holder = { + this = scope:recipient + } + } + } + } + } + trigger_else = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + domicile.domicile_location.county.holder ?= scope:recipient + } + } + scope:recipient = { + custom_tooltip = { + text = mpo_retrieve_land_from_herder_independent_tt + OR = { + AND = { + is_independent_ruler = yes + is_tributary = no + } + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_of = scope:actor + } + } + custom_tooltip = { + text = mpo_retrieve_land_migration_tt + capital_county = { is_migration_target = no } + } + } + } + + can_be_picked_title = { + scope:target = { + title_revocation_standard_can_pick_title_trigger = yes + } + } + + has_valid_target = { + scope:target = { + is_landless_type_title = no + NOT = { is_noble_family_title = yes } + NOT = { is_nomad_title = yes } + } + } + + #Use hook -- Has to stay so the UI doesn't break + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_auto_accept = { + scope:recipient = { + trigger_event = char_interaction.0200 + } + } + + on_accept = { + scope:recipient = { + if = { + limit = { + is_tributary = yes + NOT = { + is_tributary_of = scope:actor + } + } + suzerain = { + add_opinion = { + target = scope:actor + modifier = upset_opinion + opinion = -25 + } + } + } + } + save_scope_value_as = { + name = revoke_title_interaction + value = yes + } + scope:recipient = { + capital_county = { + change_county_control = -25 + } + } + scope:actor = { + add_prestige = minor_prestige_loss + trigger_event = char_interaction.0199 + } + + + scope:actor = { + if = { + limit = { has_character_flag = flag_hostile_actions_disabled_delay } + remove_character_flag = flag_hostile_actions_disabled_delay + } + if = { + limit = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + demand_pastureland_adventurer_interaction_effect = yes + } + else = { + revoke_title_interaction_effect = yes + } + } + } + + auto_accept = { + scope:actor = { is_landed = yes } + } + + # AI + ai_targets = { + ai_recipients = tributaries + ai_recipients = top_realm_domicile_owners + } + ai_targets = { + ai_recipients = neighboring_rulers + max = 5 + } + ai_frequency_by_tier = { + barony = 0 + county = 12 + duchy = 4 + kingdom = 4 + empire = 4 + hegemony = 4 + } + + ai_potential = { + domain_size < domain_limit + primary_title.tier >= tier_county + } + + ai_accept = { + base = 0 + modifier = { + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + add = -50 + desc = YOU_ARE_AN_ADVENTURER_REASON + } + modifier = { + exists = scope:actor.suzerain + add = -25 + desc = ADVENTURER_SUZERAIN_REASON + } + modifier = { + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } + add = { + value = scope:actor.military_power + divide = 100 + } + desc = ADVENTURER_MILITARY_POWER_REASON + } + } + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { + government_has_flag = government_is_nomadic + current_domain_fertility <= bad_county_fertility_level + } + add = 100 + } + modifier = { + scope:actor = { + NOT = { government_has_flag = government_is_nomadic } + short_term_gold >= massive_gold_value + NOR = { + has_trait = humble + has_trait = content + } + } + add = 25 + } + } +} + +mpo_vassal_to_tributary_interaction = { + category = interaction_category_vassal + icon = become_tributary_interaction + common_interaction = yes + + desc = mpo_vassal_to_tributary_interaction_desc + + #ai_frequency = 0 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + is_ai = no + is_vassal_of = scope:recipient + government_has_flag = government_is_nomadic + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + is_imprisoned = no + } + scope:actor = { + is_imprisoned = no + NOR = { + is_at_war_with = scope:recipient + exists = involved_activity + is_travelling = yes + } + } + } + + is_highlighted = { + always = yes + } + + # Start with higher taxes + send_option = { + flag = high_obligations + localization = VASSAL_TO_TRIBUTARY_HIGHER_OBLIGATIONS + } + + #Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + scope:actor = { + show_as_tooltip = { + break_subject_contract_and_establish_tributary_effect = { SUZERAIN = scope:recipient TRIBUTARY = scope:actor } + } + } + scope:actor = { + trigger_event = mpo_interactions_events.0010 + } + } + + on_decline = { + scope:actor = { + #Letter response, they get a bit pissed + trigger_event = mpo_interactions_events.0011 + } + } + + ai_accept = { + base = 0 + + modifier = { + add = -50 + desc = BASE_RELUCTANCE + } + + # Do they like you? + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + # If you're friends + modifier = { + add = 50 + scope:recipient = { + has_relation_friend = scope:actor + } + desc = AI_FRIEND_REASON + } + + # If you're lovers + modifier = { + add = 50 + scope:recipient = { + has_relation_lover = scope:actor + } + desc = AI_YOUR_LOVER + } + + # You're using a hook + modifier = { + add = 100 + desc = SCHEME_WEAK_HOOK_USED + scope:hook = yes + } + + # You promised higher taxes + modifier = { + add = 25 + desc = AI_HIGHER_OBLIGATIONS_REASON + scope:high_obligations = yes + } + + # Are they Nomadic + modifier = { + add = 25 + desc = game_concept_nomadic_government + scope:recipient = { government_has_flag = government_is_nomadic } + } + } + + #ai_will_do = { + # base = 0 + #} + # + #ai_targets = { + # ai_recipients = suzerain + #} +} + +mpo_gift_herd_interaction = { + icon = herd_interaction + category = interaction_category_friendly + common_interaction = yes + interface_priority = 65 + desc = mpo_gift_herd_interaction_desc + + greeting = positive + notification_text = SEND_GIFT_HERD_PROPOSAL + + answer_accept_key = SEND_GIFT_HERD_ACCEPT + answer_reject_key = SEND_GIFT_HERD_REJECT + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = liege + ai_recipients = suzerain + ai_recipients = head_of_faith + } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + max = 10 + } + ai_targets = { + ai_recipients = vassals + max = 10 + } + ai_targets = { + ai_recipients = tributaries + max = 10 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 0 + } + + is_shown = { + NOT = { + scope:recipient = scope:actor + } + scope:actor = { government_has_flag = government_is_nomadic } + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + + is_valid_showing_failures_only = { + scope:actor.domicile.herd >= herd_gift_value + } + + on_auto_accept = { + scope:recipient = { + trigger_event = mpo_interactions_events.0020 + } + } + + on_accept = { + scope:recipient = { + # Verify that they could become friend + if = { + limit = { + NAND = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_best_friend = scope:actor + } + } + gifting_leads_towards_friendship_effect = yes + } + } + + scope:actor = { + # Warning for multiple gifts + if = { + limit = { + is_ai = no + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + custom_tooltip = ALREADY_SENT_GIFT_HERD_WARNING + } + + send_interface_message = { + type = event_gold_neutral + title = gift_interaction_notification + right_icon = scope:recipient + pay_herd = { + target = scope:recipient + value = domicile.herd_gift_value + } + stress_impact = { + greedy = medium_stress_impact_gain + } + if = { + limit = { + scope:recipient = { + NOT = { + is_heir_of = scope:actor + } + } + } + stress_impact = { + generous = medium_stress_impact_loss + } + } + + #FP3 Tenet Communal Possessions Perk - piety gain for gift giving. + if = { + limit = { + scope:actor = { + faith = { + has_doctrine_parameter = piety_from_gifts_active + } + } + } + scope:actor = { + add_piety = minor_piety_gain + } + } + + # Let's apply the opinion modifier last, as to apply everything else correctly first + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = sent_herd_opinion + opinion = sent_herd_opinion_value + } + } + } + } + } + + ai_accept = { + base = 0 + modifier = { + add = 100 + desc = HERD_REASON + } + } + + ai_potential = { + is_available_at_peace_ai_adult = yes + ai_greed < medium_positive_ai_value + domicile.herd >= { + value = major_herd_value_static + multiply = 3 + } + NOT = { has_variable = conqueror } + ai_should_focus_on_building_in_their_capital = no + } + + auto_accept = { + custom_description = { + text = auto_accept_interaction_ai + object = scope:recipient + scope:recipient = { + is_ai = yes + } + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 1 + + ai_will_do = { + base = 100 + + modifier = { # Do not send double-gifts + factor = 0 + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + + modifier = { # Special Blood Brother weight + add = 100 + scope:actor = { + has_relation_blood_brother = scope:recipient + domicile.herd >= { # Do not lose all your Herd for this + value = herd_gift_value + multiply = 2 + } + } + } + + modifier = { + add = 100 + scope:recipient = { + is_tributary_of = scope:actor + OR = { + ai_greed <= -50 + is_obedient_to = scope:actor + opinion = { + target = scope:actor + value >= 50 + } + } + } + } + + modifier = { # Basic Filtering + factor = 0 + scope:recipient = { + NOR = { + AND = { # Bankrupt lovers, friends and a bankrupt liege should be considered + OR = { + scope:actor = { + any_liege_or_above = { + this = scope:recipient + } + } + has_secret_relation_lover = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + domicile.herd < minor_herd_value_static + } + AND = { # Generous characters will give gifts to their friends/lovers + OR = { + has_secret_relation_lover = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + scope:actor = { + OR = { + ai_greed <= high_negative_ai_value + AND = { + ai_greed < 0 + culture = { + has_cultural_parameter = gives_more_gifts + } + } + } + } + } + AND = { # Characters with the Generous Cultural Tradition will give gifts to more people + is_ruler = yes + OR = { + is_allied_to = scope:actor + is_close_or_extended_family_of = scope:actor + } + scope:actor = { + ai_greed < 0 + culture = { + has_cultural_parameter = gives_more_gifts + } + } + } + AND = { # Characters with the loyal trait more likely to give gifts to friends/lieges + OR = { + scope:actor.liege ?= this + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + is_allied_to = scope:actor + is_close_or_extended_family_of = scope:actor + } + scope:actor = { + ai_greed <= 0 + has_trait = loyal + } + } + AND = { # Powerful vassals should be considered + is_powerful_vassal_of = scope:actor + opinion = { + target = scope:actor + value < 0 + } + NOT ={ + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + AND = { # Factioneering vassals should be considered + is_vassal_of = scope:actor + is_a_faction_member = yes + NOT ={ + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + AND = { # Realm Priests should be considered + scope:actor = { + faith = { has_doctrine = doctrine_theocracy_temporal } + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = scope:recipient + } + opinion = { + target = scope:actor + value <= 25 + } + NOT = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + } + } + } + + modifier = { + factor = 0.1 + scope:recipient = { + opinion = { + target = scope:actor + value < 0 + } + NAND = { + is_vassal_of = scope:actor + scope:actor = { + ai_rationality > 50 + } + } + } + } + + modifier = { + factor = 0.1 + scope:recipient = { + has_relation_rival = scope:actor + } + } + } +} + +mpo_offer_submission_or_ruin = { + category = interaction_category_vassal + icon = invasion + popup_on_receive = yes + pause_on_receive = yes + ai_maybe = yes + + desc = mpo_offer_submission_or_ruin_desc + + ai_targets = { + ai_recipients = neighboring_rulers + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 0 + empire = 3 + hegemony = 3 + } + interface_priority = 300 + common_interaction = yes + force_notification = yes + + is_shown = { + scope:actor = { + OR = { + mpo_has_gok_mongol_empire_trigger = yes + has_trait = greatest_of_khans + } + mpo_offer_submission_or_ruin_shown_actor_trigger = yes + } + scope:recipient = { + mpo_offer_submission_or_ruin_shown_recipient_trigger = yes + } + + } + + is_valid_showing_failures_only = { + scope:actor = { + mpo_offer_submission_or_ruin_valid_actor_trigger = yes + } + scope:recipient = { + mpo_offer_submission_or_ruin_valid_recipient_trigger = yes + } + } + + is_highlighted = { + always = yes + } + + greeting = positive + notification_text = OFFER_SUBMISSION_OR_RUIN_INTERACTION_NOTIFICATION + + can_send_despite_rejection = yes + + ai_min_reply_days = 3 + ai_max_reply_days = 5 + + ai_accept = { + base = -50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + # Military power difference modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Ageism modifier vs kids. + # Ruler Legitimacy modifier. + # Claimant modifier. + # FP3 Piety Level modifier. + + # OPINION SCALES + # Dread + # Compare Opinion modifier. + + #CONFEDERATION + modifier = { + desc = CONFEDERATION_MEMBER_REASON + scope:recipient = { + is_confederation_member = yes + } + add = -500 + } + + #HERDER + modifier = { + scope:recipient = { government_has_flag = government_is_herder } + add = 10000 + desc = HERDER_REASON + } + + #TRIBUTARY + modifier = { + desc = KING_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + suzerain = { + highest_held_title_tier >= tier_kingdom + } + } + add = -50 + } + modifier = { + desc = STRONG_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + suzerain = { + sub_realm_size >= 20 + } + } + add = -100 + } + modifier = { + desc = STRONG_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + scope:recipient.suzerain = { + current_military_strength >= scope:actor.current_military_strength + } + } + add = -300 + } + modifier = { + desc = ALREADY_TRIBUTARY_REASON + scope:recipient = { + is_tributary_of_suzerain_or_above = scope:actor + } + add = 30 + } + + # PERKS + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = 30 + } + modifier = { # Education 5 boost + desc = offer_vassalization_education_diplomacy_5_tt + trigger = { + scope:actor = { has_trait_with_flag = offer_vassalisation_25 } + } + add = 25 + } + + # EVENTS - temporary bonuses gained by events + modifier = { + desc = event_bonus_to_vassal_accept_tt + trigger = { + scope:actor = { has_character_modifier = event_bonus_to_vassal_accept } + } + add = 20 + } + + + # STRUGGLES - bonus gained by successful Sway scheme during the Persian Struggle + modifier = { + desc = fp3_persian_struggle_previously_swayed_tt + trigger = { + scope:recipient = { + has_opinion_modifier = { + modifier = scheme_sway_and_compelled_to_submit_opinion + target = scope:actor + } + } + } + add = 20 + } + + modifier = { + desc = fp3_rekindler_of_iran_modifier_reason + trigger = { + AND = { + scope:actor = { dynasty ?={ has_dynasty_modifier = fp3_rekindler_of_iran_modifier } } + scope:recipient = { culture = { has_cultural_pillar = heritage_iranian } } + } + } + add = 20 + } + + # OBEDIENCE + modifier = { + desc = obedient_interaction_reason + trigger = { + is_obedient_to = scope:actor + } + add = 100 + } + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOR = { + has_same_culture_as = scope:recipient + government_has_flag = government_is_nomadic # Nomads do not care about Culture + has_trait = nomadic_philosophy + } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + # MAIN + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -40 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -40 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -40 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOT = { + faith = scope:actor.faith + } + NOT = { + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -20 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -20 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -20 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOT = { + faith = scope:actor.faith + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #I am a King! + desc = offer_vassalization_interaction_aibehavior_hightier_tt + trigger = { + scope:recipient = { highest_held_title_tier = tier_kingdom } + } + add = { + value = -50 + if = { + limit = { + scope:recipient = { + OR = { + government_has_flag = government_is_republic + government_has_flag = government_is_theocracy + } + } + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 5 + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 10 + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 20 + } + add = -100 + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add = -10000 + } + } + } + modifier = { #I am an Emperor!!! + desc = offer_vassalization_interaction_aibehavior_hightier_tt + trigger = { + scope:recipient = { highest_held_title_tier >= tier_empire } + } + add = { + value = -200 + if = { + limit = { + scope:recipient = { + OR = { + government_has_flag = government_is_republic + government_has_flag = government_is_theocracy + } + } + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 10 + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 20 + } + add = -200 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 40 + } + add = -200 + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add = -10000 + } + } + } + modifier = { #I fought an independence war against you. + desc = offer_vassalization_interaction_aibehavior_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor + } + } + add = -300 + } + modifier = { # We are both nomadic + desc = interaction_nonnomad_vs_nomad + trigger = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + add = 25 + } + modifier = { # Isolationist tradition + desc = isolationist_reason + trigger = { + NOT = { + scope:actor.culture = scope:recipient.culture + } + scope:recipient.culture = { + has_cultural_tradition = tradition_isolationist + } + } + add = -25 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -100 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 2 + } + } + } + add = 40 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 25 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 50 + } + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_neighboring_top_liege_realm_owner = { + NOT = { + this = scope:actor + } + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 50 + } + modifier = { #Distant Realm — Overseas Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + character_is_realm_neighbor = scope:recipient + NOT = { #Ibiza should want to be a vassal of Mallorca, etc. + character_is_land_realm_neighbor = scope:recipient + scope:actor = { is_rightful_liege_of = scope:recipient } + } + } + } + add = -50 + } + modifier = { #Distant Realm — No Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 200000 } } + } + add = -100 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -200 + } + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt_submission_or_ruin + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.current_military_strength min = 1 } + } + multiply = 100 + ceiling = yes + } + } + modifier = { + desc = offer_vassalization_interaction_aibehavior_vassal_opinion_tt + trigger = { + scope:actor = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 10 + } + } + + divide = 10 + } + } + + # MINOR + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 20 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 20 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -2000 + } + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Iberian Struggle, less likely for outsiders to vassalize inside + add = -35 + desc = iberian_struggle_reason_reason + trigger = { + scope:actor = { + NOT = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + scope:recipient = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + modifier = { #Illegitimacy modifier. + desc = offer_vassalization_interaction_aibehavior_illegitimate_tt + trigger = { + scope:actor = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -10 + } + + modifier = { #Claimant modifier. + desc = offer_vassalization_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -50 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -30 + } + modifier = { # Brave + desc = INTERACTION_BRAVE + trigger = { + scope:recipient = { + has_trait = brave + } + } + add = -30 + } + modifier = { # wrathful + desc = INTERACTION_WRATHFUL + trigger = { + scope:recipient = { + has_trait = wrathful + } + } + add = -40 + } + modifier = { # vengeful + desc = INTERACTION_VENGEFUL + trigger = { + scope:recipient = { + has_trait = vengeful + } + } + add = -20 + } + modifier = { # peasant leader + desc = INTERACTION_PEASANT_LEADER + trigger = { + scope:recipient = { + has_trait = peasant_leader + } + } + add = -40 + } + modifier = { # populist leader + desc = INTERACTION_POPULIST_LEADER + trigger = { + scope:recipient = { + has_trait = populist_leader + } + } + add = -100 + } + modifier = { #martial leader + desc = INTERACTION_MARTIAL_EDUCATION + trigger = { + scope:recipient = { + OR = { + has_education_martial_trigger = yes + has_martial_lifestyle_trait_trigger = yes + } + } + } + add = -10 + } + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -60 + } + + modifier = { # Fickle + desc = INTERACTION_FICKLE + trigger = { + scope:recipient = { + has_trait = fickle + } + } + add = -10 + } + + modifier = { # Stubborn + desc = INTERACTION_STUBBORN + trigger = { + scope:recipient = { + has_trait = stubborn + } + } + add = -180 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 20 + } + + modifier = { # Humble + desc = INTERACTION_HUMBLE + trigger = { + scope:recipient = { + has_trait = humble + } + } + add = 20 + } + + modifier = { # Content + desc = INTERACTION_CONTENT + trigger = { + scope:recipient = { + has_trait = content + } + } + add = 20 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 100 + } + + modifier = { # FP3 modifier. + desc = GENERIC_YOUR_PIETY_LEVEL_MODIFIER + trigger = { scope:actor = { any_character_struggle = { has_struggle_phase_parameter = piety_level_affects_vassalage_acceptance } } } + add = { + value = { + value = scope:actor.piety_level + subtract = low_piety_level + } + multiply = 10 + } + } + + # OPINION INFLUENCE + modifier = { + add = intimidated_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + opinion_modifier = { #Compare Opinion modifier - Clans care more about opinion + trigger = { + scope:actor = { + government_has_flag = government_is_clan + } + scope:recipient = { + government_has_flag = government_is_clan + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.7 + } + opinion_modifier = { #Compare Opinion modifier. + trigger = { + OR = { + scope:actor = { + NOT = { government_has_flag = government_is_clan } + } + scope:recipient = { + NOT = { government_has_flag = government_is_clan } + } + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # CONTRACT OPTIONS + modifier = { + add = 20 + scope:actor = { + faith = { + has_doctrine = doctrine_pluralism_pluralistic + } + } + scope:recipient = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + desc = CONTRACT_RELIGIOUS_EXEMPTION_REASON + } + modifier = { + add = 30 + scope:low_obligations = yes + desc = CONTRACT_MERCIFUL_KHAN_REASON + } + modifier = { + add = -10 + scope:send_siege_weapons = yes + desc = CONTRACT_SEND_SIEGE_WEAPONS_REASON + } + modifier = { + add = -50 + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + scope:send_tribute = yes + desc = CONTRACT_SEND_TRIBUTE_REASON + } + + # INSPECTION BONUSES + modifier = { + desc = "INSPECTION_REASON" + add = 5 + scope:recipient = { + has_variable_list = lesser_inspection_bonus + is_target_in_variable_list = { + name = lesser_inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON" + add = 10 + scope:recipient = { + has_variable_list = inspection_bonus + is_target_in_variable_list = { + name = inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD" + add = 10 + scope:recipient = { + has_variable_list = inspection_reward + is_target_in_variable_list = { + name = inspection_reward + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD_FOCUSED" + add = 10 + scope:actor = { has_character_modifier = inspection_reward_focused_vassal_acceptance } + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -20 + scope:actor = { + has_legitimacy_flag = very_reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -50 + scope:actor = { + has_legitimacy_flag = massively_reduced_vassalization_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 25 + scope:actor = { + has_legitimacy_flag = increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 50 + scope:actor = { + has_legitimacy_flag = very_increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 75 + scope:actor = { + has_legitimacy_flag = extra_increased_vassalization_acceptance + } + } + + # INFLUENCE + modifier = { + add = 25 + scope:influence_send_option = yes + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + #HISTORICALLY ADMIN PEOPLES WANT TO BE ADMIN + modifier = { + add = 30 + scope:actor = { + government_has_flag = government_is_administrative + } + scope:recipient = { + culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { + this = culture:greek + } + this = culture:han + any_parent_culture_or_above = { + this = culture:han + } + } + } + } + + desc = "HISTORICAL_ADMIN_REASON" + } + + modifier = { # AI-only weights, keep the pope from vassalizing too fast + trigger = { + exists = faith:catholic.religious_head + faith:catholic.religious_head = scope:actor + scope:actor = { is_ai = yes } + } + add = -50 + } + + modifier = { + trigger = { + scope:actor = { + has_variable = severed_head_vassalization + var:severed_head_vassalization = { + this = scope:recipient + } + } + } + add = 200 + desc = COWED_BY_SEVERED_HEAD_MODIFIER + } + + modifier = { #You're distracted by another war + desc = IS_AT_WAR_REASON + trigger = { + scope:actor = { + is_at_war = yes + } + } + add = -20 + } + modifier = { #You're distracted by multiple wars + desc = HAS_MULTIPLE_WARS_REASON + trigger = { + scope:actor = { + any_character_war = { + count >= 2 + exists = this + } + } + } + add = { + value = 0 + scope:actor = { + every_character_war = { + add = -15 + } + } + } + } + modifier = { #You have waged terrifying wars of devastation... + desc = WAGED_KHANS_TERROR_WARS_REASON + trigger = { + scope:actor = { + has_variable = gok_terror_war_value + } + } + add = scope:actor.var:gok_terror_war_value + } + #Swift initial spread with nomads for mongol invasion + modifier = { + scope:actor = { + is_ai = yes + realm_size < 50 + any_owned_story = { + story_type = story_mongol_invasion + } + } + scope:recipient = { + is_ai = yes + government_has_flag = government_is_nomadic + realm_size < 10 + highest_held_title_tier < tier_kingdom + } + add = 100 + } + modifier = { # Pacing needed for AI genghis + trigger = { + scope:actor = { + is_ai = yes + } + scope:recipient = { + is_ai = yes + ai_boldness >= 0 + OR = { + realm_size > 10 + is_confederation_member = yes + } + } + #During genghis' initial expanding in Mongolia, nomads are exempt from this malus + NAND = { + scope:recipient = { + government_has_flag = government_is_nomadic + highest_held_title_tier < tier_kingdom + } + scope:actor = { + realm_size < 100 + any_owned_story = { + story_type = story_mongol_invasion + } + } + } + } + add = -1000 + } + } + + # Low starting obligations + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = low_obligations + localization = lenient_obligations + } + + #Normal obligations for normies + send_option = { + is_shown = { + scope:recipient = { + OR = { + highest_held_title_tier < tier_duchy + government_has_flag = government_is_herder + } + } + } + starts_enabled = { always = yes } + flag = normal_obligations + localization = gok_normal_obligations + } + #Demand army + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + highest_held_title_tier >= tier_duchy + } + } + flag = send_army + localization = send_army + starts_enabled = { + scope:recipient = { + mpo_gok_auto_cultural_maa_trigger = yes + highest_held_title_tier >= tier_duchy + } + } + } + #Demand siege weapons + send_option = { + is_shown = { + scope:recipient = { + NOR = { + government_has_flag = government_is_herder + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + highest_held_title_tier >= tier_duchy + } + } + flag = send_siege_weapons + localization = send_siege_weapons + starts_enabled = { + scope:recipient = { + mpo_gok_auto_cultural_maa_trigger = no + highest_held_title_tier >= tier_duchy + } + } + } + + #Demand immediate tribute + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = send_tribute + localization = send_tribute + } + + send_option = { # EP3 Influence + is_shown = { + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + scope:actor = { influence >= medium_influence_value } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = yes + + on_accept = { + scope:actor = { + save_scope_as = gok + } + mpo_gok_offer_submission_effect = yes + + scope:recipient = { + add_character_flag = { + flag = accepted_gok_submission + years = 3 + } + } + + scope:actor = { + #If recipient isn't a big deal, fire a hidden event that just creates a feed notification (to minimize khan clicking) + if = { + limit = { + scope:recipient = { + NOR = { + highest_held_title_tier >= tier_kingdom + sub_realm_size >= 10 + } + } + } + trigger_event = mpo_greatest_of_khans.0020 + } + else = { + trigger_event = mpo_greatest_of_khans.0021 + } + + ## Remove bonus, it's been used + if = { + limit = { has_character_modifier = event_bonus_to_vassal_accept } + remove_character_modifier = event_bonus_to_vassal_accept + } + + if = { # FP3 + limit = { any_character_struggle = { has_struggle_phase_parameter = offer_vassalization_removes_disloyalty } } + scope:recipient = { remove_trait = disloyal } + } + } + } + + on_decline = { + scope:recipient = { + save_scope_as = gok_victim + if = { + limit = { + is_tributary_of = scope:actor + } + end_tributary = yes + } + } + scope:actor = { + show_as_tooltip = { + mpo_gok_offer_submission_refusal_effect = yes + } + + trigger_event = mpo_greatest_of_khans.0022 + } + } + + ai_potential = { + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + is_independent_ruler = yes + #Not defending or losing an attacking war + NOT = { + any_character_war = { + OR = { + AND = { + any_war_attacker = { + this = root + } + attacker_war_score < 0 + } + any_war_defender = { + this = root + } + } + } + } + #Already engaged in three wars + any_character_war = { + count >= 3 + exists = this + } + } + + ai_will_do = { + base = 100 + + # AI prefers to receive higher obligations from their vassals when possible. + modifier = { + factor = 2 + scope:low_obligations = yes + } + + modifier = { + factor = 3 + scope:normal_obligations = yes + } + + modifier = { + factor = 4 + scope:send_army = yes + } + modifier = { + factor = 4 + scope:send_siege_weapons = yes + } + modifier = { + factor = 5 + scope:send_tribute = yes + } + modifier = { + factor = 3 + scope:recipient = { + sub_realm_size < 3 + } + } + + #really want to get of little realms we encircle + modifier = { + factor = 10 + scope:recipient = { + realm_size <= 20 + NOT = { + any_neighboring_top_liege_realm_owner = { + NOT = { + this = scope:actor + } + } + } + } + } + #Would rather just destroy someone they hate or distrust + modifier = { + factor = 0 + OR = { + has_relation_rival = scope:recipient + opinion = { + target = scope:recipient + value <= -90 + } + scope:recipient = { + has_trait = disloyal + } + scope:recipient = { + has_trait = conqueror + } + scope:recipient = { + has_trait = ambitious + } + scope:recipient = { + ai_greed >= medium_positive_ai_value + ai_honor <= medium_negative_ai_value + } + } + } + #Should only attack China when very strong + modifier = { + factor = 0.1 + scope:recipient = { + primary_title = title:h_china + current_military_strength > scope:actor.half_current_military_strength + } + } + modifier = { + factor = 0 + scope:recipient = { + current_military_strength > 0 + scope:actor.current_military_strength > 0 + current_military_strength > scope:actor.current_military_strength + } + } + } +} + +### Negotiate Obedience +mpo_negotiate_obedience_interaction = { + category = interaction_category_vassal + icon = demand_obedience + desc = mpo_negotiate_obedience_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency_by_tier = { + barony = 0 + county = 24 + duchy = 6 + kingdom = 6 + empire = 6 + hegemony = 6 + } + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_allows = obedience + } + scope:recipient = { + is_ai = yes + obedience_target ?= scope:actor + is_obedient = no + } + } + + cost = { + prestige = { + value = medium_prestige_value + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = meritocratic_bureaucracy_1 + } + } + } + multiply = 1.25 + } + else_if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = meritocratic_bureaucracy_2 + } + } + } + multiply = 1.5 + } + else_if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = meritocratic_bureaucracy_3 + } + } + } + multiply = 1.75 + } + else_if = { + limit = { + scope:actor = { has_realm_law = nomadic_authority_5 } + } + multiply = 2 + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_imprisoned = no + NOT = { + is_at_war_with = scope:recipient + } + } + trigger_if = { + limit = { + scope:recipient = { is_landed = yes is_independent_ruler = no } + } + scope:recipient = { is_vassal_or_below_of = scope:actor } + } + trigger_else_if = { + limit = { + scope:recipient = { is_independent_ruler = yes } + } + scope:actor = { + custom_tooltip = { + text = mpo_interaction_not_neighbouring_tt + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:recipient + } + } + } + } + trigger_else = {} + } + + ai_potential = { + government_allows = obedience + primary_title.tier >= tier_duchy + prestige >= major_prestige_value + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { + is_valid = { + scope:actor = { + gold >= medium_gold_value + } + } + flag = gold + localization = OFFER_GOLD_FOR_BETTER_AI_ACCEPTANCE + } + + send_option = { + is_valid = { + scope:actor = { + trigger_if = { + limit = { government_has_flag = government_is_nomadic } + domicile ?= { + herd >= medium_herd_value + } + } + trigger_else = { + government_has_flag = government_is_nomadic + } + } + } + flag = herd + localization = OFFER_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + ai_accept = { + base = -95 + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + modifier = { + trigger = { + scope:gold ?= yes + } + add = 100 + desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT + } + modifier = { + trigger = { + scope:herd ?= yes + } + add = 100 + desc = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_TT + } + modifier = { + add = 5 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = meritocratic_bureaucracy_1 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 10 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = meritocratic_bureaucracy_2 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 20 + scope:actor = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = meritocratic_bureaucracy_3 + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 100 + scope:actor = { has_realm_law = nomadic_authority_5 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = -30 + scope:actor = { legitimacy_level = 1 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = -20 + scope:actor = { legitimacy_level = 2 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 5 + scope:actor = { legitimacy_level = 3 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 15 + scope:actor = { legitimacy_level = 4 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 30 + scope:actor = { legitimacy_level = 5 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 2 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + modifier = { + add = { + value = ai_greed + multiply = -1 + divide = 2 + } + ai_greed > 0 + desc = ARTIFACT_GREED_REASON + } + modifier = { + add = { + value = ai_honor + divide = 4 + } + NOT = { ai_honor = 0 } + desc = ARTIFACT_HONOR_REASON + } + modifier = { + add = -20 + scope:recipient = { + has_trait = brave + } + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = arrogant + } + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = 25 + scope:recipient = { + has_trait = trusting + } + desc = BLACKMAIL_INTERACTION_TRUSTING_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = disloyal + } + desc = DEMAND_OBEDIENCE_INTERACTION_DISLOYAL_ACCEPTANCE + } + modifier = { + add = -500 + scope:actor = { government_has_flag = government_is_nomadic } + scope:recipient = { + exists = domicile + domicile.herd >= 100 + domicile.herd > scope:actor.domicile.herd + } + desc = DEMAND_OBEDIENCE_INTERACTION_HERD_ACCEPTANCE + } + modifier = { + add = -500 + scope:recipient = { + current_military_strength >= 100 + current_military_strength > scope:actor.current_military_strength + } + desc = DEMAND_OBEDIENCE_INTERACTION_MILITARY_MIGHT_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = craven + } + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = content + } + desc = DEMAND_OBEDIENCE_INTERACTION_CONTENT_ACCEPTANCE + } + modifier = { + add = 25 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_easier_obedience + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_ZUD_ACCEPTANCE + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + scope:herd ?= yes + add = -1 + } + modifier = { + scope:gold ?= yes + add = -1 + } + modifier = { + scope:hook ?= yes + add = -1 + } + modifier = { + scope:recipient = { + is_kurultai_trigger = yes + } + add = 100 + } + } + + cooldown_against_recipient = { years = 10 } + + ai_targets = { # They will try to get a Stable Succession + ai_recipients = councillors + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_demand_obedience_interaction_toast + left_icon = scope:recipient + # Pay what you need to pay first + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value + } + } + if = { + limit = { scope:herd = yes } + if = { + limit = { exists = scope:recipient.domicile } + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + else = { # For a nice tooltip + show_as_tooltip = { + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + hidden_effect = { domicile = { change_herd = medium_herd_loss } } + } + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = obedience_opinion + } + } + } + } + } +} + +join_confederation_interaction = { + category = interaction_category_diplomacy + icon = offer_confederation_interaction + + desc = join_confederation_interaction_desc + + #ai_targets = { + # ai_recipients = neighboring_rulers_including_tributary_borders + #} + #ai_frequency = 0 + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + cooldown_against_recipient = { years = 3 } + + is_shown = { + scope:actor = { + is_playable_character = yes + is_independent_ruler = yes + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_tribal + } + highest_held_title_tier <= tier_duchy + is_landed = yes + is_confederation_member = no + } + scope:recipient.confederation ?= { is_house_based = no } + } + + is_valid_showing_failures_only = { + scope:actor = { + valid_confederation_member_trigger = { CHARACTER = scope:recipient } + is_imprisoned = no + is_at_war = no + NOR = { + has_trait = conqueror + has_trait = greatest_of_khans + } + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { scope:prestige_send_option = yes } + add = scope:actor.minor_prestige_value + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + greeting = positive + notification_text = OFFER_CONFEDERATION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = { + value = -30 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -30 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -30 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -15 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -15 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -15 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #We just fought against each other. + desc = offer_vassalization_interaction_aibehavior_recent_war_tt + trigger = { + scope:recipient = { + any_truce_holder = { + this = scope:actor + } + } + # Ensure the truce wasn't purchased and is indeed from a war + scope:actor = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:recipient } + } + } + } + add = -40 + } + modifier = { #You fought an independence war against me + desc = offer_confederation_independence_war_reverse_tt + trigger = { + scope:actor = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:recipient.top_liege + } + } + add = -100 + } + modifier = { #I fought an independence war against you. + desc = offer_confederation_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor.top_liege + } + } + add = -50 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -30 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 10 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 50 + } + modifier = { # Is the Rightful Liege of actor + desc = offer_vassalization_interaction_aibehavior_rightfulvassaltitleholder_tt + trigger = { + scope:recipient = { is_rightful_liege_of = scope:actor } + } + add = -75 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 20 + } + modifier = { #No adjacency + desc = offer_vassalization_interaction_aibehavior_unconnectedrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 100000 } } + } + add = -25 + } + modifier = { #Distant Realm + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 100000 } } + } + add = -50 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -125 + } + #Relative power + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.top_liege.current_military_strength min = 1 } + } + multiply = 5 + ceiling = yes + min = -100 + } + } + + #Powerful vassal opinion of you + modifier = { + desc = offer_confederation_offerer_vassal_opinion_tt + trigger = { + scope:actor.top_liege = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor.top_liege = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor.top_liege + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 5 + } + } + + divide = 10 + } + } + + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 25 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 25 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -1000 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_confederation_tt + trigger = { + scope:recipient.confederation ?= { + any_confederation_member = { + NOT = { this = scope:recipient } + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + } + add = -100 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_confederation_tt + trigger = { + scope:recipient.confederation ?= { + any_confederation_member = { + NOT = { this = scope:recipient } + has_relation_nemesis = scope:actor + } + } + } + add = -500 + } + + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + exists = scope:actor.dynasty + exists = scope:recipient.dynasty + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + + modifier = { #Same House modifier. + desc = offer_vassalization_interaction_aibehavior_house_tt + trigger = { + exists = scope:actor.house + exists = scope:recipient.house + scope:recipient = { + house = scope:actor.house + } + } + add = 50 + } + + modifier = { # Same language + add = 20 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + + modifier = { #Illegitimacy modifier. + desc = confederation_offerer_illegitimate_tt + trigger = { + scope:actor.top_liege = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -20 + } + + modifier = { #Claimant modifier. + desc = confederation_interaction_aibehavior_claimant_tt + trigger = { + scope:actor = { + any_held_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + } + add = -50 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -25 + } + + modifier = { # Paranoid + desc = INTERACTION_PARANOID + trigger = { + scope:recipient = { + has_trait = paranoid + } + } + add = -25 + } + + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -25 + } + + modifier = { # Greedy + desc = INTERACTION_GREEDY + trigger = { + scope:recipient = { + has_trait = greedy + } + } + add = -15 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 15 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 25 + } + + opinion_modifier = { #Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor.top_liege = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.top_liege.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor.top_liege = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_confederation_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -25 + scope:actor = { + has_legitimacy_flag = very_reduced_confederation_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 15 + scope:actor = { + has_legitimacy_flag = increased_confederation_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 40 + scope:actor = { + has_legitimacy_flag = very_increased_confederation_acceptance + } + } + + modifier = { + add = 50 + scope:actor = { + culture = scope:recipient.culture + } + desc = "SAME_CULTURE_REASON" + } + modifier = { + add = -20 + NOT = { + scope:actor = { + culture = scope:recipient.culture + } + } + scope:actor = { + NOR = { + culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + scope:recipient.culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:recipient.culture + } + } + } + desc = "DIFFERENT_CULTURE_REASON" + } + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = LEGEND_HOOK_USED + } + # PRESTIGE + modifier = { + add = 40 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + # HERD + modifier = { + add = 40 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + modifier = { + add = 20 + desc = join_confederation_neighboring_foe_tt + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + #No neighbor scaring them + modifier = { + add = -30 + desc = NO_FRIGHTENING_NEIGHBOR_REASON + NOT = { + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + } + #Neighbor is TERRIFYING them + modifier = { + add = 50 + desc = TERRIFYING_NEIGHBOR_REASON + scope:recipient = { + save_temporary_scope_as = confederate + any_land_neighboring_realm_with_tributaries_owner = { + top_suzerain ?= { + NOR = { + this = scope:actor + this = scope:actor.top_liege + } + confederation_worthy_foe_strength_ratio_value <= 0.25 + NOT = { is_allied_to = scope:recipient } + OR = { + highest_held_title_tier >= tier_kingdom + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + has_trait = conqueror + has_trait = greatest_of_khans + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + } + } + } + } + } + modifier = { + add = 100 + desc = JOINING_CONFEDERATION_WAR_REASON + scope:recipient.confederation ?= { + any_confederation_member = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = prev + is_defender = prev + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + } + } + } + } + + modifier = { + add = -100 + desc = join_confederation_abandoned_confederation_tt + scope:actor = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:recipient.confederation + } + } + } + modifier = { + add = -100 + desc = join_confederation_abandoned_confederation_tt + scope:actor = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:recipient.confederation + } + } + } + modifier = { + add = duchy_confederation_vassals_value_recipient + desc = TOO_MANY_CONFEDERATION_VASSALS_REASON + scope:recipient.confederation ?= { + any_confederation_member = { + count >= 6 + highest_held_title_tier >= tier_county + } + } + } + + modifier = { + add = 50 + desc = join_confederation_loyal_tt + scope:actor = { + has_trait = loyal + } + } + modifier = { + add = -50 + desc = join_confederation_disloyal_tt + scope:actor = { + has_trait = disloyal + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + if = { + #checking that the delay hasn't made the character invalid + limit = { + scope:recipient = { + is_playable_character = yes + } + } + if = { + limit = { + scope:actor = { + has_character_flag = forming_confederation + } + } + scope:actor = { remove_character_flag = forming_confederation } + } + scope:recipient.confederation ?= { + every_confederation_member = { + limit = { is_at_war_as_defender = yes } + every_character_war = { + limit = { + is_war_leader = prev + is_defender = prev + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + } + add_to_list = recipient_wars + } + } + } + every_in_list = { + list = recipient_wars + save_scope_as = recipient_war + primary_attacker = { + save_scope_as = attacker + } + add_defender = scope:actor + } + scope:recipient = { + save_scope_as = confederation_offerer + } + scope:actor = { + save_scope_as = confederation_accepter + } + scope:recipient.confederation = { + save_scope_as = confederation + } + show_as_tooltip = { + #If actor is top liege and offering vassaldom + scope:actor = { + custom_tooltip = join_confederation_recipient_tt + custom_tooltip = confederation_defensive_wars_tt + custom_tooltip = unlock_leave_confederation_interaction_tt + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + scope:actor = { + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + if = { + limit = { + scope:actor = { + is_ai = no + } + } + scope:actor = { + custom_tooltip = confederation_raiding_attacking_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_restrictions_warning_tt + } + else = { + custom_tooltip = confederation_restrictions_tribe_warning_tt + } + } + } + scope:actor = { + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_migrating_leaving_warning_tt + } + } + scope:actor = { + #Event distributor event + trigger_event = mpo_interactions_events.0030 + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + scope:actor = { + #So that the right desc is used + save_scope_as = asking_to_join + #letter response + trigger_event = mpo_interactions_events.0004 + } + } + + #ai_potential = { + # #AI rely on the offer interaction, not this one + # always = no + #} + # + #ai_will_do = { + # base = 0 + #} +} diff --git a/common/court_positions/types/00_camp_officers.txt b/common/court_positions/types/00_camp_officers.txt new file mode 100644 index 00000000..2830113a --- /dev/null +++ b/common/court_positions/types/00_camp_officers.txt @@ -0,0 +1,7131 @@ +@minspec_skill_rating = decent_skill_rating +@base_position_score = 500 +@base_candidate_score = 500 + +# Have a look at _court_positions.info for documentation + +# CAMP OFFICERS +# Second +# Quartermaster +# Armorer +# Chief Forager +# Master Thief +# Head Porter +# Head Groom +# Huntperson +# Kennelperson +# Chief Engineer +# Witness +# Person-person_haggler +# Camp Cook +# Master Bard +# Stooge +# Master of Arms +# Light Cav. Captain +# Camelry Captain +# Elephantry Captain +# Heavy Cav. Captain +# Horse Arch. Captain +# Archer Captain +# Heavy Inf. Captain +# Light Inf. Captain +# Pike Captain +# Master of Spoils +# Camp Priest + +# Regular Camp Officers ### ( Sort Order 49 - 0 ) +second_camp_officer = { + sort_order = 49 + max_available_positions = 1 + skill = diplomacy + + court_position_asset = { + animation = stressed_teacher + background = "gfx/interface/illustrations/event_scenes/ep3_camp_arid_terrain.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { has_perk = local_arbitration_perk } + } + add = { + value = 15 + desc = court_position_local_arbitration_perk_boon + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = diplomacy + multiply = 1.5 + max = 60 + desc = court_position_skill_diplomacy + } + add = { + value = martial + multiply = 0.75 + max = 60 + desc = court_position_skill_martial + } + add = { + value = stewardship + multiply = 0.75 + max = 60 + desc = court_position_skill_stewardship + } + add = { + value = intrigue + multiply = 0.75 + max = 60 + desc = court_position_skill_intrigue + } + add = { + value = learning + multiply = 0.75 + max = 60 + desc = court_position_skill_learning + } + add = { + value = prowess + multiply = 0.75 + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = sadistic + } + add = 10 + desc = court_position_sadistic_trait + } + if = { + limit = { + has_trait = callous + } + add = 10 + desc = court_position_callous_trait + } + if = { + limit = { + has_trait = overseer + } + add = 20 + desc = court_position_overseer_trait + } + if = { + limit = { + has_trait = loyal + } + add = 15 + desc = court_position_loyal_trait + } + if = { + limit = { + has_trait = craven + } + add = -20 + desc = court_position_craven_trait + } + if = { + limit = { + has_trait = fickle + } + add = -20 + desc = court_position_fickle_trait + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = second_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_second_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = second + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = second_camp_officer + any_court_position_holder = { + type = second_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + diplomacy = 1 + martial = 1 + stewardship = 1 + intrigue = 1 + learning = 1 + prowess = 1 + } + poor = { + diplomacy = 1 + martial = 1 + stewardship = 1 + intrigue = 1 + learning = 1 + prowess = 1 + } + average = { + diplomacy = 2 + martial = 2 + stewardship = 2 + intrigue = 2 + learning = 2 + prowess = 2 + } + good = { + diplomacy = 3 + martial = 3 + stewardship = 3 + intrigue = 3 + learning = 3 + prowess = 3 + } + excellent = { + diplomacy = 5 + martial = 5 + stewardship = 5 + intrigue = 5 + learning = 5 + prowess = 5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + second_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + second_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + second_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = second_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +quartermaster_camp_officer = { + sort_order = 48 + max_available_positions = 1 + skill = stewardship + + court_position_asset = { + animation = writing + background = "gfx/interface/illustrations/event_scenes/ep3_military_tent.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 10 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { has_perk = local_inspection_perk } + } + add = { + value = 10 + desc = court_position_local_inspection_perk_boon + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = stewardship + multiply = 2.5 + max = 60 + desc = court_position_skill_stewardship + } + if = { + limit = { + has_trait = generous + } + add = { + value = -20 + desc = court_position_generous_trait + } + } + if = { + limit = { + has_trait = logistician + } + add = { + value = 20 + desc = court_position_logistician_trait + } + } + if = { + limit = { + has_trait = greedy + } + add = { + value = 10 + desc = court_position_greedy_trait + } + } + if = { + limit = { + has_trait = avaricious + } + add = { + value = 20 + desc = court_position_avaricious_trait + } + } + if = { + limit = { + has_trait = administrator + } + add = { + value = 20 + desc = court_position_administrator_trait + } + } + if = { + limit = { + has_trait = profligate + } + add = -50 + desc = court_position_profligate_trait + } + if = { + limit = { + has_trait = improvident + } + add = -50 + desc = court_position_improvident_trait + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + OR = { + custom_tooltip = { + text = quartermaster_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_quartermaster_officer } + } + has_perk = local_inspection_perk + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = quartermaster + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = quartermaster_camp_officer + any_court_position_holder = { + type = quartermaster_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + supply_capacity_mult = 0.1 + provisions_loss_mult = -0.1 + } + poor = { + supply_capacity_mult = 0.15 + provisions_loss_mult = -0.15 + } + average = { + supply_capacity_mult = 0.25 + provisions_loss_mult = -0.25 + } + good = { + supply_capacity_mult = 0.3 + provisions_loss_mult = -0.3 + } + excellent = { + supply_capacity_mult = 0.5 + provisions_loss_mult = -0.5 + } + } + + #custom_employer_modifier_description = quartermaster_camp_officer_employer_custom_effect_description + base_employer_court_modifier = { + supply_capacity_mult = 0.2 + provisions_capacity_add = 500 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + quartermaster_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + quartermaster_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + quartermaster_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = quartermaster_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +armorer_camp_officer = { + sort_order = 47 + max_available_positions = 1 + skill = stewardship + + court_position_asset = { + animation = throne_room_one_handed_passive_3 + background = "gfx/interface/illustrations/event_scenes/ep3_military_tent.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = stewardship + multiply = 2.5 + max = 60 + desc = court_position_skill_stewardship + } + add = { + value = learning + multiply = 2 + max = 60 + desc = court_position_skill_learning + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = armorer_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_armorer_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = armorer + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = armorer_camp_officer + any_court_position_holder = { + type = armorer_camp_officer + exists = dynasty + house = prev.house + } + } + desc = inner_circle_salary_mod + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + maa_toughness_mult = 0.02 + } + poor = { + maa_toughness_mult = 0.05 + } + average = { + maa_toughness_mult = 0.2 + } + good = { + maa_toughness_mult = 0.3 + } + excellent = { + maa_toughness_mult = 0.5 + } + } + + base_employer_court_modifier = { + maa_toughness_mult = 0.1 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + armorer_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + armorer_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + armorer_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = armorer_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +chief_forager_camp_officer = { + sort_order = 46 + max_available_positions = 1 + skill = learning + + court_position_asset = { + animation = survey_staff + background = "gfx/interface/illustrations/event_scenes/forest_pine.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + add = { + value = learning + multiply = 2.5 + max = 50 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = lifestyle_herbalist + } + add = { + value = 5 + desc = court_position_herbalist_trait + } + } + if = { + limit = { + has_trait = lifestyle_hunter + } + add = { + value = 5 + desc = court_position_hunter_1_trait + } + } + if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 75 + } + } + add = { + value = 40 + desc = court_position_traveler_trait_experienced + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 75 + } + } + add = { + value = 40 + desc = court_position_traveler_trait_experienced_danger + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + } + add = { + value = 30 + desc = court_position_traveler_trait_experienced + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + } + add = { + value = 30 + desc = court_position_traveler_trait_experienced_danger + } + } + else_if = { + limit = { + has_trait = lifestyle_traveler + } + add = { + value = 20 + desc = court_position_traveler_trait + } + } + if = { + limit = { + has_character_modifier = ep2_beastmaster_modifier + } + add = { + value = 30 + desc = court_position_beastmaster_modifier + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = chief_forager_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_chief_forager_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = chief_forager + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = chief_forager_camp_officer + any_court_position_holder = { + type = chief_forager_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + supply_duration = 0.1 + provisions_gain_mult = 0.1 + } + poor = { + supply_duration = 0.15 + provisions_gain_mult = 0.15 + } + average = { + supply_duration = 0.25 + provisions_gain_mult = 0.25 + } + good = { + supply_duration = 0.4 + provisions_gain_mult = 0.4 + } + excellent = { + supply_duration = 0.66 + provisions_gain_mult = 0.66 + } + } + + custom_employer_modifier_description = chief_forager_camp_officer_employer_custom_effect_description + + base_employer_court_modifier = { + supply_duration = 0.2 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + chief_forager_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + chief_forager_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + chief_forager_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = chief_forager_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_position_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +master_thief_camp_officer = { + sort_order = 45 + max_available_positions = 1 + skill = intrigue + + court_position_asset = { + animation = hunting_knife_start + background = "gfx/interface/illustrations/event_scenes/ep3_campfire.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = intrigue + multiply = 2.5 + max = 60 + desc = court_position_skill_intrigue + } + add = { + value = prowess + multiply = 2 + max = 50 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = schemer + } + add = { + value = 20 + desc = court_position_schemer_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = 10 + desc = court_position_deceitful_trait + } + } + if = { + limit = { + has_trait = honest + } + add = { + value = -20 + desc = court_position_honest_trait + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = master_thief_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_master_thief_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = master_thief + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = master_thief_camp_officer + any_court_position_holder = { + type = master_thief_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + owned_scheme_secrecy_add = 3 + } + poor = { + owned_scheme_secrecy_add = 6 + } + average = { + owned_scheme_secrecy_add = 10 + } + good = { + owned_scheme_secrecy_add = 15 + } + excellent = { + owned_scheme_secrecy_add = 25 + } + } + + #unlocking Steal Artifact interaction, see start_stealing_back_artifact in 00_artifact_interactions.txt + custom_employer_modifier_description = master_thief_camp_officer_employer_custom_effect_description + + base_employer_court_modifier = { + domicile_monthly_gold_add = 0.25 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + master_thief_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + master_thief_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + master_thief_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = master_thief_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +head_porter_camp_officer = { + sort_order = 44 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = hero_flex + background = "gfx/interface/illustrations/event_scenes/ep2_village_festival_western.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { has_perk = local_inspection_perk } + } + add = { + value = 10 + desc = court_position_local_inspection_perk_boon + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = stewardship + max = 60 + desc = court_position_skill_stewardship + } + if = { + limit = { + has_trait = logistician + } + add = 15 + desc = court_position_logistician_trait + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + OR = { + custom_tooltip = { + text = head_porter_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_head_porter_officer } + } + has_perk = local_inspection_perk + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = head_porter + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = head_porter_camp_officer + any_court_position_holder = { + type = head_porter_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + supply_capacity_add = 5 + provisions_loss_mult = -0.02 + } + poor = { + supply_capacity_add = 15 + provisions_loss_mult = -0.04 + } + average = { + supply_capacity_add = 25 + provisions_loss_mult = -0.08 + } + good = { + supply_capacity_add = 35 + provisions_loss_mult = -0.16 + + } + excellent = { + supply_capacity_add = 50 + provisions_loss_mult = -0.32 + } + } + + base_employer_court_modifier = { + provisions_capacity_add = 500 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + head_porter_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + head_porter_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + head_porter_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = head_porter_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +head_groom_camp_officer = { + sort_order = 43 + max_available_positions = 1 + skill = stewardship + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/steppe.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = learning + multiply = 1 + max = 50 + desc = court_position_skill_learning + } + add = { + value = stewardship + multiply = 1.3 + max = 50 + desc = court_position_skill_stewardship + } + + # SPEED + add = { + value = travel_leader_speed + multiply = 1.8 + subtract = 10 + max = 50 + min = 0 + desc = court_position_speed + } + + # SAFETY + add = { + value = travel_leader_safety + multiply = 1.8 + subtract = 10 + max = 50 + min = 0 + desc = court_position_safety + } + + # POSITIVES + if = { + limit = { + has_trait = brave + } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { + has_trait = lifestyle_herbalist + } + add = { + value = 5 + desc = court_position_herbalist_trait + } + } + if = { + limit = { + has_trait = lifestyle_hunter + } + add = { + value = 5 + desc = court_position_hunter_1_trait + } + } + if = { + limit = { + has_trait = diligent + } + add = { + value = 5 + desc = court_position_diligent_trait + } + } + if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 75 + } + } + add = { + value = 40 + desc = court_position_traveler_trait_experienced + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 75 + } + } + add = { + value = 40 + desc = court_position_traveler_trait_experienced_danger + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + } + add = { + value = 30 + desc = court_position_traveler_trait_experienced + } + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + } + add = { + value = 30 + desc = court_position_traveler_trait_experienced_danger + } + } + else_if = { + limit = { + has_trait = lifestyle_traveler + } + add = { + value = 20 + desc = court_position_traveler_trait + } + } + if = { + limit = { + has_character_modifier = ep2_beastmaster_modifier + } + add = { + value = 30 + desc = court_position_beastmaster_modifier + } + } + + # NEGATIVES + if = { + limit = { + has_trait = craven + } + add = { + value = -20 + desc = court_position_craven_trait + } + } + if = { + limit = { + has_trait = lazy + } + add = { + value = -10 + desc = court_position_lazy_trait + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = head_groom_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_head_groom_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = head_groom + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = head_groom_camp_officer + any_court_position_holder = { + type = head_groom_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + character_travel_speed = 5 + } + poor = { + character_travel_speed = 5 + movement_speed = 0.1 + } + average = { + character_travel_speed = 10 + movement_speed = 0.15 + } + good = { + character_travel_speed = 10 + movement_speed = 0.2 + } + excellent = { + character_travel_speed = 15 + movement_speed = 0.25 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + head_groom_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + head_groom_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + head_groom_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = head_groom_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_position_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +huntperson_camp_officer = { + sort_order = 42 + max_available_positions = 1 + skill = prowess + + court_position_asset = { + animation = hunting_carcass_start + background = "gfx/interface/illustrations/event_scenes/forest.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = prowess + multiply = 2 + max = 50 + desc = court_position_skill_prowess + } + add = { + value = learning + multiply = 1.5 + max = 50 + desc = court_position_skill_learning + } + if = { + limit = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 } + } + add = { + value = 40 + desc = court_position_hunter_3_trait + } + } + else_if = { + limit = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 50 } + } + add = { + value = 30 + desc = court_position_hunter_2_trait + } + } + else_if = { + limit = { has_trait = lifestyle_hunter } + add = { + value = 20 + desc = court_position_hunter_1_trait + } + } + if = { + limit = { has_trait = brave } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { has_trait = craven } + add = { + value = -10 + desc = court_position_craven_trait + } + } + if = { + limit = { + has_character_modifier = ep2_beastmaster_modifier + } + add = { + value = 10 + desc = court_position_beastmaster_modifier + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = huntperson_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_huntperson_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = huntperson + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = huntperson_camp_officer + any_court_position_holder = { + type = huntperson_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + archers_damage_mult = 0.02 + } + poor = { + archers_damage_mult = 0.05 + } + average = { + archers_damage_mult = 0.2 + } + good = { + archers_damage_mult = 0.3 + } + excellent = { + archers_damage_mult = 0.5 + } + } + + #Improves Martial Education outcomes - see huntperson_camp_officer_education_boost_effect in 00_education_effects + custom_employer_modifier_description = huntperson_camp_officer_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + hills_provisions_use_mult = -0.15 + mountains_provisions_use_mult = -0.15 + jungle_provisions_use_mult = -0.15 + forest_provisions_use_mult = -0.15 + taiga_provisions_use_mult = -0.15 + wetlands_provisions_use_mult = -0.15 + floodplains_provisions_use_mult = -0.15 + drylands_provisions_use_mult = -0.15 + } + + on_court_position_received = { + huntperson_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + huntperson_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + huntperson_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = huntperson_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +kennelperson_camp_officer = { + sort_order = 41 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = schadenfreude + background = "gfx/interface/illustrations/event_scenes/ep2_dog_kennels.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + multiply = 1.5 + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + OR = { + has_character_flag = dog_person + any_owned_story = { type = story_cycle_pet_dog } + has_character_modifier = dog_story_modifier + } + } + add = 20 + } + if = { + limit = { + OR = { + has_character_flag = cat_person + any_owned_story = { type = story_cycle_pet_cat } + has_character_modifier = cat_story_modifier + } + } + add = -20 + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = kennelperson_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_kennelperson_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = kennelperson + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = kennelperson_camp_officer + any_court_position_holder = { + type = kennelperson_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + knight_effectiveness_mult = 0.05 + } + poor = { + knight_effectiveness_mult = 0.1 + } + average = { + knight_effectiveness_mult = 0.15 + } + good = { + knight_effectiveness_mult = 0.2 + } + excellent = { + knight_effectiveness_mult = 0.33 + } + } + + #unlocking Toss to Dogs execution method, see execute_prisoner_interaction in 00_prison_interactions.txt + custom_employer_modifier_description = kennelperson_camp_officer_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + kennelperson_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + kennelperson_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + kennelperson_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = kennelperson_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +chief_engineer_camp_officer = { + sort_order = 40 + max_available_positions = 1 + skill = learning + + court_position_asset = { + animation = page_flipping + background = "gfx/interface/illustrations/event_scenes/genericcamp.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = learning + multiply = 2.5 + max = 60 + desc = court_position_skill_learning + } + add = { + value = martial + multiply = 1.5 + max = 60 + desc = court_position_skill_martial + } + if = { + limit = { + has_trait = strategist + } + add = 15 + } + if = { + limit = { + has_perk = engineered_for_destruction_perk + } + add = 15 + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = chief_engineer_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_chief_engineer_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = chief_engineer + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = chief_engineer_camp_officer + any_court_position_holder = { + type = chief_engineer_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + maa_siege_value_mult = 0.1 + siege_morale_loss = 0.1 + } + poor = { + maa_siege_value_mult = 0.15 + siege_morale_loss = 0.15 + } + average = { + maa_siege_value_mult = 0.25 + siege_morale_loss = 0.2 + } + good = { + maa_siege_value_mult = 0.4 + siege_morale_loss = 0.25 + } + excellent = { + maa_siege_value_mult = 0.66 + siege_morale_loss = 0.33 + } + } + + #custom_employer_modifier_description = chief_engineer_camp_officer_employer_custom_effect_description + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + chief_engineer_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + chief_engineer_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + chief_engineer_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = chief_engineer_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +witness_camp_officer = { + sort_order = 39 + max_available_positions = 1 + skill = diplomacy + + court_position_asset = { + animation = wedding_objection_start + background = "gfx/interface/illustrations/event_scenes/ep2_feast_steppe.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = diplomacy + multiply = 2.5 + max = 60 + desc = court_position_skill_diplomacy + } + if = { + limit = { + has_trait = diplomat + } + add = 20 + desc = court_position_diplomat_trait + } + if = { + limit = { + has_trait = trusting + } + add = 10 + desc = court_position_trusting_trait + } + if = { + limit = { + has_trait = loyal + } + add = 10 + desc = court_position_loyal_trait + } + if = { + limit = { + has_trait = gregarious + } + add = 10 + desc = court_position_gregarious_trait + } + if = { + limit = { + has_trait = humble + } + add = 10 + desc = court_position_humble_trait + } + if = { + limit = { + has_trait = flagellant + } + add = 20 + desc = court_position_flagellant_trait + } + if = { + limit = { + has_trait = arrogant + } + add = -20 + desc = court_position_arrogant_trait + } + if = { + limit = { + has_trait = shy + } + add = -20 + desc = court_position_shy_trait + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = witness_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_witness_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = witness + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = witness_camp_officer + any_court_position_holder = { + type = witness_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + monthly_prestige = 0.05 + } + poor = { + monthly_prestige = 0.1 + } + average = { + monthly_prestige = 0.2 + } + good = { + monthly_prestige = 0.4 + } + excellent = { + monthly_prestige = 1 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + witness_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + witness_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + witness_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = witness_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +person_haggler_camp_officer = { + sort_order = 38 + max_available_positions = 1 + skill = diplomacy + + court_position_asset = { + animation = wedding_objection_start + background = "gfx/interface/illustrations/event_scenes/fp1_tribal_prison.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = diplomacy + multiply = 1.5 + max = 60 + desc = court_position_skill_diplomacy + } + add = { + value = intrigue + multiply = 0.5 + max = 60 + desc = court_position_skill_intrigue + } + add = { + value = stewardship + multiply = 0.5 + max = 60 + desc = court_position_skill_stewardship + } + add = { + value = prowess + multiply = 0.5 + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = 10 + desc = court_position_deceitful_trait + } + } + if = { + limit = { + has_trait = gregarious + } + add = { + value = 10 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = patient + } + add = { + value = 10 + desc = court_position_patient_trait + } + } + if = { + limit = { + has_trait = honest + } + add = { + value = -20 + desc = court_position_honest_trait + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = person_haggler_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_person_haggler_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = person_haggler + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = person_haggler_camp_officer + any_court_position_holder = { + type = person_haggler_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + + } + poor = { + + } + average = { + + } + good = { + + } + excellent = { + + } + } + + custom_employer_modifier_description = person_haggler_camp_officer_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + person_haggler_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + person_haggler_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + person_haggler_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = person_haggler_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +camp_cook_camp_officer = { + sort_order = 37 + max_available_positions = 1 + skill = intrigue + + court_position_asset = { + animation = drink + background = "gfx/interface/illustrations/event_scenes/ep3_campfire.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = intrigue + multiply = 2.5 + max = 60 + desc = court_position_skill_intrigue + } + if = { + limit = { + has_trait = gluttonous + } + add = { + value = 25 + desc = court_position_gluttonous_trait + } + } + if = { + limit = { + has_trait = comfort_eater + } + add = { + value = 15 + desc = court_position_comfort_eater_trait + } + } + if = { + limit = { + has_trait = lifestyle_herbalist + } + add = { + value = 15 + desc = court_position_herbalist_trait + } + } + if = { + limit = { + has_trait = lifestyle_reveler + } + add = { + value = 20 + desc = court_position_reveler_trait + } + } + if = { + limit = { + has_trait = inappetetic + } + add = { + value = -50 + desc = court_position_inappetetic_trait + } + } + if = { + limit = { + culture = { has_cultural_parameter = characters_are_better_food_tasters } + } + add = { + value = 20 + desc = court_position_tradition_culinary_art + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = camp_cook_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_camp_cook_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = camp_cook + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = camp_cook_camp_officer + any_court_position_holder = { + type = camp_cook_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + enemy_hostile_scheme_success_chance_add = -3 + } + poor = { + enemy_hostile_scheme_success_chance_add = -5 + } + average = { + enemy_hostile_scheme_success_chance_add = -8 + } + good = { + enemy_hostile_scheme_success_chance_add = -12 + } + excellent = { + enemy_hostile_scheme_success_chance_add = -20 + } + } + + base_employer_court_modifier = { + enemy_hostile_scheme_success_chance_add = -5 + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + camp_cook_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + camp_cook_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + camp_cook_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = camp_cook_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +master_bard_camp_officer = { + sort_order = 36 + max_available_positions = 1 + skill = diplomacy + + court_position_asset = { + animation = lute_active + background = "gfx/interface/illustrations/event_scenes/ep3_adventurer_background.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = diplomacy + multiply = 2.5 + max = 60 + desc = court_position_skill_diplomacy + } + add = { + value = learning + multiply = 1 + max = 50 + desc = court_position_skill_learning + } + add = court_position_aptitude_high_penalty_value + add = court_position_aptitude_low_penalty_value + if = { + limit = { + has_trait = gregarious + } + add = { + value = 15 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = lifestyle_poet + } + add = { + value = 30 + desc = court_position_poet_trait + } + } + if = { + limit = { + has_trait = shy + } + add = { + value = -10 + desc = court_position_shy_trait + } + } + if = { + limit = { + has_trait = lifestyle_reveler + } + add = { + value = 20 + desc = court_position_reveler_trait + } + } + if = { + limit = { + has_trait = seducer + } + add = { + value = 20 + desc = court_position_seducer_trait + } + } + if = { #Cultural Tradition that improves the aptitude of characters of that culture + limit = { + culture = { has_cultural_parameter = characters_are_better_court_musicians } + } + add = { + value = 20 + desc = court_position_tradition_music_theory + } + } + if = { #Cultural Tradition that improves the aptitude of characters of that culture + limit = { + culture = { has_cultural_parameter = characters_are_better_court_poets } + } + add = { + value = 20 + desc = court_position_tradition_poetry + } + } + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = master_bard_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_master_bard_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = master_bard + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = master_bard_camp_officer + any_court_position_holder = { + type = master_bard_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + monthly_prestige = 0.05 + } + poor = { + monthly_prestige = 0.1 + } + average = { + monthly_prestige = 0.2 + } + good = { + monthly_prestige = 0.25 + } + excellent = { + monthly_prestige = 0.3 + } + } + + custom_employer_modifier_description = master_bard_camp_officer_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + master_bard_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + master_bard_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + master_bard_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = master_bard_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +stooge_camp_officer = { + sort_order = 35 + max_available_positions = 1 + skill = learning + + court_position_asset = { + animation = anger + background = "gfx/interface/illustrations/event_scenes/bp1_bonfire.dds" + } + + opinion = { + value = -5 + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = { + value = 100 + desc = BASE + } + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = learning + multiply = -2 + max = 100 + desc = court_position_skill_learning + } + add = { + value = sum_of_all_skills_value + multiply = -1 + max = 100 + desc = court_position_skill_all + } + if = { + limit = { + employer ?= { domicile ?= { has_domicile_parameter = camp_improves_stooge_officer } } + } + multiply = { + value = 1.25 + desc = court_position_improved_by_camp_fire_capering_fools + } + } + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = stooge + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = stooge_camp_officer + any_court_position_holder = { + type = stooge_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + custom_employer_modifier_description = stooge_employer_custom_effect_description + + modifier = { + monthly_prestige = -0.25 + } + + on_court_position_received = { + stooge_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + stooge_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + stooge_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = stooge_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +master_of_arms_camp_officer = { + sort_order = 34 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = marshal_random_weapon + background = "gfx/interface/illustrations/event_scenes/ep3_military_tent.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = overseer + } + add = { + value = 20 + desc = court_position_overseer_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = master_of_arms_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_master_of_arms_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = master_of_arms + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = master_of_arms_camp_officer + any_court_position_holder = { + type = master_of_arms_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + maa_toughness_mult = 0.01 + maa_damage_mult = 0.02 + } + poor = { + maa_toughness_mult = 0.025 + maa_damage_mult = 0.05 + } + average = { + maa_toughness_mult = 0.1 + maa_damage_mult = 0.2 + } + good = { + maa_toughness_mult = 0.15 + maa_damage_mult = 0.3 + } + excellent = { + maa_toughness_mult = 0.2 + maa_damage_mult = 0.4 + } + } + + custom_employer_modifier_description = master_of_arms_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + master_of_arms_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + master_of_arms_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + master_of_arms_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = master_of_arms_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +light_cavalry_captain_camp_officer = { + sort_order = 33 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/bp1_plains.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = light_cavalry_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_light_cavalry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = light_cavalry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = light_cavalry_captain_camp_officer + any_court_position_holder = { + type = light_cavalry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + light_cavalry_damage_mult = 0.05 + light_cavalry_pursuit_mult = 0.05 + } + poor = { + light_cavalry_damage_mult = 0.1 + light_cavalry_pursuit_mult = 0.1 + + } + average = { + light_cavalry_damage_mult = 0.3 + light_cavalry_pursuit_mult = 0.3 + + } + good = { + light_cavalry_damage_mult = 0.4 + light_cavalry_pursuit_mult = 0.4 + + } + excellent = { + light_cavalry_damage_mult = 0.5 + light_cavalry_pursuit_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + search_for_courtier = { + + } + + on_court_position_received = { + light_cavalry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + light_cavalry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + light_cavalry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = light_cavalry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +camelry_captain_camp_officer = { + sort_order = 32 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/bp1_desert.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = camelry_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_camelry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = camelry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = camelry_captain_camp_officer + any_court_position_holder = { + type = camelry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + camel_cavalry_damage_mult = 0.05 + camel_cavalry_pursuit_mult = 0.05 + } + poor = { + camel_cavalry_damage_mult = 0.1 + camel_cavalry_pursuit_mult = 0.1 + + } + average = { + camel_cavalry_damage_mult = 0.3 + camel_cavalry_pursuit_mult = 0.3 + + } + good = { + camel_cavalry_damage_mult = 0.4 + camel_cavalry_pursuit_mult = 0.4 + + } + excellent = { + camel_cavalry_damage_mult = 0.5 + camel_cavalry_pursuit_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + camelry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + camelry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + camelry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = camelry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +elephantry_captain_camp_officer = { + sort_order = 31 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/bp1_jungle.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = elephantry_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_elephantry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = elephantry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = elephantry_captain_camp_officer + any_court_position_holder = { + type = elephantry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + elephant_cavalry_damage_mult = 0.05 + elephant_cavalry_pursuit_mult = 0.05 + elephant_cavalry_toughness_mult = 0.025 + } + poor = { + elephant_cavalry_damage_mult = 0.1 + elephant_cavalry_pursuit_mult = 0.1 + elephant_cavalry_toughness_mult = 0.05 + + } + average = { + elephant_cavalry_damage_mult = 0.15 + elephant_cavalry_pursuit_mult = 0.15 + elephant_cavalry_toughness_mult = 0.075 + + } + good = { + elephant_cavalry_damage_mult = 0.2 + elephant_cavalry_pursuit_mult = 0.2 + elephant_cavalry_toughness_mult = 0.1 + + } + excellent = { + elephant_cavalry_damage_mult = 0.25 + elephant_cavalry_pursuit_mult = 0.25 + elephant_cavalry_toughness_mult = 0.125 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + elephantry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + elephantry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + elephantry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = elephantry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +heavy_cavalry_captain_camp_officer = { + sort_order = 30 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/battlefield.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = heavy_cavalry_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_heavy_cavalry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = heavy_cavalry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = heavy_cavalry_captain_camp_officer + any_court_position_holder = { + type = heavy_cavalry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + heavy_cavalry_damage_mult = 0.05 + heavy_cavalry_pursuit_mult = 0.05 + } + poor = { + heavy_cavalry_damage_mult = 0.1 + heavy_cavalry_pursuit_mult = 0.1 + + } + average = { + heavy_cavalry_damage_mult = 0.3 + heavy_cavalry_pursuit_mult = 0.3 + + } + good = { + heavy_cavalry_damage_mult = 0.4 + heavy_cavalry_pursuit_mult = 0.4 + + } + excellent = { + heavy_cavalry_damage_mult = 0.5 + heavy_cavalry_pursuit_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + heavy_cavalry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + heavy_cavalry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + heavy_cavalry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = heavy_cavalry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +horse_archer_captain_camp_officer = { + sort_order = 29 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = hunting_shortbow_aim_arrow_default + background = "gfx/interface/illustrations/event_scenes/steppe.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = horse_archer_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_horse_archer_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = horse_archer_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = horse_archer_captain_camp_officer + any_court_position_holder = { + type = horse_archer_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + archer_cavalry_damage_mult = 0.05 + archer_cavalry_pursuit_mult = 0.05 + } + poor = { + archer_cavalry_damage_mult = 0.1 + archer_cavalry_pursuit_mult = 0.1 + + } + average = { + archer_cavalry_damage_mult = 0.3 + archer_cavalry_pursuit_mult = 0.3 + + } + good = { + archer_cavalry_damage_mult = 0.4 + archer_cavalry_pursuit_mult = 0.4 + + } + excellent = { + archer_cavalry_damage_mult = 0.5 + archer_cavalry_pursuit_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + horse_archer_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + horse_archer_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + horse_archer_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = horse_archer_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +archer_captain_camp_officer = { + sort_order = 28 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = bow_idle + background = "gfx/interface/illustrations/event_scenes/ep2_travel_hills.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = archer_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_archer_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = archer_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = archer_captain_camp_officer + any_court_position_holder = { + type = archer_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + archers_damage_mult = 0.05 + archers_screen_mult = 0.05 + } + poor = { + archers_damage_mult = 0.1 + archers_screen_mult = 0.1 + + } + average = { + archers_damage_mult = 0.3 + archers_screen_mult = 0.3 + + } + good = { + archers_damage_mult = 0.4 + archers_screen_mult = 0.4 + + } + excellent = { + archers_damage_mult = 0.5 + archers_screen_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + archer_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + archer_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + archer_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = archer_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +heavy_infantry_captain_camp_officer = { + sort_order = 27 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = marshal_shield + background = "gfx/interface/illustrations/event_scenes/ep2_travel_farm.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = heavy_infantry_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_heavy_infantry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = heavy_infantry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = heavy_infantry_captain_camp_officer + any_court_position_holder = { + type = heavy_infantry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + heavy_infantry_damage_mult = 0.05 + heavy_infantry_screen_mult = 0.05 + } + poor = { + heavy_infantry_damage_mult = 0.1 + heavy_infantry_screen_mult = 0.1 + + } + average = { + heavy_infantry_damage_mult = 0.3 + heavy_infantry_screen_mult = 0.3 + + } + good = { + heavy_infantry_damage_mult = 0.4 + heavy_infantry_screen_mult = 0.4 + + } + excellent = { + heavy_infantry_damage_mult = 0.5 + heavy_infantry_screen_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + heavy_infantry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + heavy_infantry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + heavy_infantry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = heavy_infantry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +light_infantry_captain_camp_officer = { + sort_order = 26 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_one_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/drylands.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = light_infantry_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_light_infantry_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = light_infantry_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = light_infantry_captain_camp_officer + any_court_position_holder = { + type = light_infantry_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + skirmishers_damage_mult = 0.05 + skirmishers_screen_mult = 0.05 + } + poor = { + skirmishers_damage_mult = 0.1 + skirmishers_screen_mult = 0.1 + + } + average = { + skirmishers_damage_mult = 0.3 + skirmishers_screen_mult = 0.3 + + } + good = { + skirmishers_damage_mult = 0.4 + skirmishers_screen_mult = 0.4 + + } + excellent = { + skirmishers_damage_mult = 0.5 + skirmishers_screen_mult = 0.5 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + light_infantry_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + light_infantry_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + light_infantry_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = light_infantry_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +pike_captain_camp_officer = { + sort_order = 25 + max_available_positions = 1 + skill = martial + + court_position_asset = { + animation = throne_room_two_handed_passive_1 + background = "gfx/interface/illustrations/event_scenes/ep2_travel_mountains.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = martial + multiply = 2.5 + max = 60 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 60 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = strategist + } + add = { + value = 20 + desc = court_position_strategist_trait + } + } + if = { + limit = { + any_character_trait = { + has_trait_category = commander + } + } + add = { + value = 10 + desc = court_position_commander_traits + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = pike_captain_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_pike_captain_officer } + } + } + + is_shown_character = { + scope:employee = { + can_be_combatant_based_on_gender_trigger = { + ARMY_OWNER = this + } + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = pike_captain + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = pike_captain_camp_officer + any_court_position_holder = { + type = pike_captain_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + pikemen_damage_mult = 0.05 + pikemen_toughness_mult = 0.025 + } + poor = { + pikemen_damage_mult = 0.1 + pikemen_toughness_mult = 0.05 + + } + average = { + pikemen_damage_mult = 0.3 + pikemen_toughness_mult = 0.15 + + } + good = { + pikemen_damage_mult = 0.4 + pikemen_toughness_mult = 0.2 + + } + excellent = { + pikemen_damage_mult = 0.5 + pikemen_toughness_mult = 0.25 + } + } + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + pike_captain_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + pike_captain_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + pike_captain_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = pike_captain_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +master_of_spoils_camp_officer = { + sort_order = 24 + max_available_positions = 1 + skill = stewardship + + court_position_asset = { + animation = bribing + background = "gfx/interface/illustrations/event_scenes/ep3_camp_arid_terrain.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = stewardship + multiply = 2 + max = 60 + desc = court_position_skill_stewardship + } + add = { + value = intrigue + max = 60 + desc = court_position_skill_intrigue + } + add = { + value = martial + max = 60 + desc = court_position_skill_martial + } + if = { + limit = { + has_trait = greedy + } + add = { + value = 10 + desc = court_position_greedy_trait + } + } + if = { + limit = { + has_trait = reaver + } + add = 15 + desc = court_position_reaver_trait + } + if = { + limit = { + has_trait = avaricious + } + add = 15 + desc = court_position_avaricious_trait + } + if = { + limit = { + has_trait = profligate + } + add = -50 + desc = court_position_profligate_trait + } + if = { + limit = { + has_trait = improvident + } + add = -50 + desc = court_position_improvident_trait + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + custom_tooltip = { + text = master_of_spoils_captain_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_master_of_spoils_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = master_of_spoils + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = master_of_spoils_camp_officer + any_court_position_holder = { + type = master_of_spoils_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + + #increase chance of stealing an artifact after a siege, see siege_events.txt event siege.0031 + #increase gold/prestige/piety gain after battle, see battle_winner_gold_gain in 01_dynamic_values.txt + custom_employer_modifier_description = master_of_spoils_camp_officer_employer_custom_effect_description + + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + master_of_spoils_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + master_of_spoils_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + master_of_spoils_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = master_of_spoils_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +laureate_camp_officer = { + sort_order = 23 + max_available_positions = 1 + skill = diplomacy + + court_position_asset = { + animation = debating + background = "gfx/interface/illustrations/event_scenes/ep2_village_festival_western.dds" + } + + opinion = { + value = high_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = diplomacy + multiply = 2 + max = 60 + desc = court_position_skill_diplomacy + } + add = { + value = learning + max = 60 + desc = court_position_skill_learning + } + add = { + value = intrigue + max = 60 + desc = court_position_skill_intrigue + } + if = { + limit = { + has_trait = lifestyle_poet + } + add = { + value = 50 + desc = court_position_poet_trait + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + has_trait = violet_poet + } + + is_shown_character = { + scope:employee = { + is_incapable = no + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = laureate + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = laureate_camp_officer + any_court_position_holder = { + type = laureate_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + custom_employer_modifier_description = laureate_camp_officer_employer_custom_effect_description + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + monthly_prestige_gain_mult = 0.05 + monthly_dynasty_prestige_mult = 0.01 + } + poor = { + monthly_prestige_gain_mult = 0.1 + monthly_dynasty_prestige_mult = 0.02 + } + average = { + diplomacy = 1 + monthly_prestige_gain_mult = 0.15 + monthly_dynasty_prestige_mult = 0.03 + } + good = { + diplomacy = 2 + monthly_prestige_gain_mult = 0.2 + monthly_dynasty_prestige_mult = 0.04 + } + excellent = { + diplomacy = 3 + monthly_prestige_gain_mult = 0.25 + monthly_dynasty_prestige_mult = 0.05 + } + } + modifier = { + monthly_prestige = 0.1 + } + + on_court_position_received = { + laureate_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + laureate_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + laureate_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = laureate_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + +# Camp Priest +camp_priest_camp_officer = { + sort_order = 22 + max_available_positions = 1 + skill = learning + + court_position_asset = { + animation = prayer + background = "gfx/interface/illustrations/event_scenes/ep3_relaxing_tent.dds" + } + + opinion = { + value = regular_camp_officer_opinion + } + + # How high the aptitude has to be to reach the 5 different modifier levels + aptitude_level_breakpoints = { 20 40 60 80 } + + # How good is this character in this position? root scope is the holder of the court position + aptitude = { + value = 0 + if = { + limit = { + employer ?= { has_perk = soon_forgiven_perk } + } + add = { + value = 10 + desc = court_position_soon_forgiven_perk + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = friend } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_friend + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + any_relation = { type = lover } + } + add = { + value = 5 + desc = court_position_positions_of_power_perk_lover + } + } + if = { + limit = { + employer ?= { + has_government = landless_adventurer_government + has_perk = positions_of_power_perk + } + is_married = yes + } + add = { + value = 10 + desc = court_position_positions_of_power_perk_marriage + } + } + if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_best_friend = prev + } + } + add = { + value = 30 + desc = court_position_best_friend + } + } + else_if = { + limit = { + employer ?= { + has_perk = likable_perk + has_relation_friend = prev + } + } + add = { + value = 15 + desc = court_position_friend + } + } + add = { + value = learning + multiply = 4 + max = 65 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = theologian + } + add = { + value = 20 + desc = court_position_theologian_trait + } + } + if = { + limit = { has_trait = scholar } + add = { + value = 15 + desc = court_position_scholar_trait + } + } + if = { + limit = { has_trait = lifestyle_mystic } + add = { + value = 15 + desc = court_position_mystic_1_trait + } + } + add = court_position_aptitude_high_penalty_value + } + + is_shown = { + has_ep3_dlc_trigger = yes + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + } + + valid_position = { + custom_tooltip = { + text = landless_government_tt + government_has_flag = government_is_landless_adventurer + } + custom_tooltip = { + text = camp_priest_camp_officer_parameter_tt + domicile ?= { has_domicile_parameter = camp_unlocks_camp_priest_officer } + } + } + + is_shown_character = { + scope:employee = { + is_incapable = no + faith = scope:liege.faith + can_be_clergy_due_to_gender_trigger = yes + } + } + + valid_character = { + valid_camp_officer_trigger = { + OFFICER = camp_priest + } + } + + revoke_cost = { + prestige = { + value = minor_court_position_prestige_revoke_cost + + # Set to 0 with Dynasty Perk Inner Circle + if = { + limit = { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + + employs_court_position = camp_priest_camp_officer + any_court_position_holder = { + type = camp_priest_camp_officer + exists = dynasty + house = prev.house + } + } + multiply = 0 + } + } + } + + salary = { + #officers have no salary + } + + # These modifiers are employed based on what level the aptitude reaches (levels are defined as breakpoints) + scaling_employer_modifiers = { + terrible = { + monthly_piety_gain_mult = 0.02 + } + poor = { + monthly_piety_gain_mult = 0.05 + } + average = { + monthly_piety_gain_mult = 0.075 + learning = 1 + } + good = { + monthly_piety_gain_mult = 0.1 + learning = 2 + } + excellent = { + monthly_piety_gain_mult = 0.2 + learning = 3 + } + } + + modifier = { + monthly_piety = 0.5 + } + + on_court_position_received = { + camp_priest_camp_officer_title_accepted_effect = yes + } + on_court_position_revoked = { + camp_priest_camp_officer_title_revoked_effect = yes + } + on_court_position_invalidated = { + camp_priest_camp_officer_title_invalidated_effect = yes + } + on_court_position_vacated = { + court_position_vacated_event_effect = { + COURT_POSITION_TYPE = camp_priest_camp_officer + } + } + # Scripted value to determine whether an AI will hire/fire a position or not. Hires over 0, fires under -50. Look in _court_positions.info for more extensive documentation! + ai_position_score = { + value = @base_position_score + } + ai_candidate_score = { + value = @base_candidate_score + add = scope:base_value + add = court_position_candidate_score_base_value + add = court_position_candidate_aptitude_value + } +} + diff --git a/common/customizable_localization/00_government_custom_loc.txt b/common/customizable_localization/00_government_custom_loc.txt index 289d94e1..65c872db 100644 --- a/common/customizable_localization/00_government_custom_loc.txt +++ b/common/customizable_localization/00_government_custom_loc.txt @@ -888,6 +888,26 @@ GetGovernmentIcon = { } localization_key = adventurer_icon_concept } + text = { # Republic + trigger = { + trigger_if = { + limit = { + is_alive = no + } + has_government = landless_minority_government + } + trigger_else = { + trigger_if = { + limit = { is_ruler = yes } + government_has_flag = government_is_landless_minority + } + trigger_else = { + liege ?= { government_has_flag = government_is_landless_minority } + } + } + } + localization_key = minority_community_icon_concept + } text = { # Nomad trigger = { trigger_if = { diff --git a/common/customizable_localization/tgp_custom_loc.txt b/common/customizable_localization/tgp_custom_loc.txt new file mode 100644 index 00000000..b80ee605 --- /dev/null +++ b/common/customizable_localization/tgp_custom_loc.txt @@ -0,0 +1,2039 @@ +#Random Very Small Creature - so small it can reasonably fit inside a boot. +RandomVerySmallCreature = { + type = character + + random_valid = yes + + text = { + localization_key = a_toad + } + + text = { + localization_key = a_snake + } + + text = { + localization_key = a_grasshopper + } + + text = { + localization_key = a_mouse + } + + text = { + localization_key = a_rat + } + + text = { + localization_key = a_mole + } + + text = { + localization_key = a_hedgehog + } + + text = { + localization_key = a_spider + } +} + +#Should the very small creature be able to appear in more than just a boot? +RandomVerySmallCreatureDwelling = { + type = character + + random_valid = yes + + text = { + localization_key = a_boot + } + + text = { + localization_key = a_vase + } + + text = { + localization_key = a_stone_wall + } + + text = { + localization_key = a_crate + } + + text = { + localization_key = a_basket + } + + text = { + localization_key = a_tree_stump + } + + text = { + localization_key = a_plant_pot + } + + text = { + localization_key = a_helmet + } +} + +RandomPeasantGrievance = { + type = character + + random_valid = yes + + text = { + localization_key = pray_for_rain + } + + text = { + localization_key = pray_for_health + } + + text = { + localization_key = pray_for_gold + } + + text = { + localization_key = pray_for_love + } +} + +GetDomicileTypeConcept = { + type = character + + text = { + trigger = { + domicile ?= { is_domicile_type = japanese_manor } + } + localization_key = JAPANESE_MANOR + } + + text = { + trigger = { + domicile ?= { is_domicile_type = minority_community } + } + localization_key = MINORITY_COMMUNITY + } + text = { + trigger = { + NOT = { + domicile ?= { is_domicile_type = japanese_manor } + } + } + localization_key = ESTATE + fallback = yes + } +} + +GetDomicileType = { + type = character + + text = { + trigger = { + domicile ?= { is_domicile_type = japanese_manor } + } + localization_key = game_concept_manor + } + + text = { + trigger = { + domicile ?= { is_domicile_type = minority_community } + } + localization_key = game_concept_minority_community + } + text = { + trigger = { + NOT = { + domicile ?= { is_domicile_type = japanese_manor } + } + } + localization_key = game_concept_estate + fallback = yes + } +} + +GetRaidDomicileType = { + type = character + + text = { + trigger = { + domicile ?= { is_domicile_type = japanese_manor } + } + localization_key = raid_manor + } + + text = { + trigger = { + domicile ?= { is_domicile_type = minority_community } + } + localization_key = raid_minority_community + } + text = { + trigger = { + NOT = { + domicile ?= { is_domicile_type = japanese_manor } + } + } + localization_key = raid_estate + fallback = yes + } +} + +ActivityGetFaileesBothAll = { + type = character + + text = { + trigger = { var:num_exam_family_entrants_failed = 2 } + localization_key = FaileesBoth + } + + text = { + trigger = { var:num_exam_family_entrants_failed > 2 } + localization_key = FaileesAll + } +} + +ActivityGetSuccessfulBothAll = { + type = character + + text = { + trigger = { var:num_exam_family_entrants_passed = 2 } + localization_key = FaileesBoth + } + + text = { + trigger = { var:num_exam_family_entrants_passed > 2 } + localization_key = FaileesAll + } +} + +GetSinMisdeed = { + type = character + + text = { + trigger = { + root.religion = { is_in_family = rf_abrahamic } + } + localization_key = sin_concept + } + + text = { + trigger = { + NOT = { + root.religion = { is_in_family = rf_abrahamic } + } + } + localization_key = misdeed_concept + } +} + +GetSinMisdeedPlural = { + type = character + + parent = GetSinMisdeed + suffix = "_plural" +} + +GetSinfulShameful = { + type = character + + text = { + trigger = { + root.religion = { is_in_family = rf_abrahamic } + } + localization_key = sinful_concept + } + + text = { + trigger = { + NOT = { + root.religion = { is_in_family = rf_abrahamic } + } + } + localization_key = shameful_concept + } +} + +GetPiousBelievers = { + type = character + + text = { + trigger = { + root.religion = { is_in_family = rf_abrahamic } + } + localization_key = pious_concept + } + + text = { + trigger = { + NOT = { + root.religion = { is_in_family = rf_abrahamic } + } + } + localization_key = believers_concept + } +} + + +GetWickedDangerous = { + type = character + + text = { + trigger = { + root.religion = { is_in_family = rf_abrahamic } + } + localization_key = wicked_concept + } + + text = { + trigger = { + NOT = { + root.religion = { is_in_family = rf_abrahamic } + } + } + localization_key = dangerous_concept + } +} + +GetHeathenMiscreant = { + type = character + + text = { + trigger = { + root.religion = { is_in_family = rf_abrahamic } + } + localization_key = heathen_concept + } + + text = { + trigger = { + NOT = { + root.religion = { is_in_family = rf_abrahamic } + } + } + localization_key = miscreant_concept + } +} + +TeachingsAccordingToMovement = { + type = character + + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + OR = { + participant_group_type = hegemon_ruler + participant_group_type = pro_hegemon_movement + } + } + } + localization_key = TeachingsAccordingToMovementProHegemon_Teaching + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = expansion_movement + } + } + localization_key = TeachingsAccordingToMovementExpansion_Teaching + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + } + localization_key = TeachingsAccordingToMovementAdvancement_Teaching + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + localization_key = TeachingsAccordingToMovementConservative_Teaching + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = undecided_movement + } + } + localization_key = TeachingsAccordingToMovementUndecided_Teaching + } + text = { + fallback = yes + localization_key = TeachingsAccordingToMovementFallback_Teaching + } +} + +TeachingResponsesAccordingToMovement = { + type = character + + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + OR = { + participant_group_type = hegemon_ruler + participant_group_type = pro_hegemon_movement + } + } + } + localization_key = TeachingsAccordingToMovementProHegemon_Response + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = expansion_movement + } + } + localization_key = TeachingsAccordingToMovementExpansion_Response + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + } + localization_key = TeachingsAccordingToMovementAdvancement_Response + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + localization_key = TeachingsAccordingToMovementConservative_Response + } + text = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = undecided_movement + } + } + localization_key = TeachingsAccordingToMovementUndecided_Response + } + text = { + fallback = yes + localization_key = TeachingsAccordingToMovementFallback_Response + } +} + +GetRandomHistoryPassage = { + type = character + + random_valid = yes + + text = { + localization_key = five_sons_history + } + text = { + localization_key = hounds_history + } + text = { + localization_key = testamenary_history + } + text = { + localization_key = virtue_history + } + text = { + localization_key = oaths_history + } + text = { + localization_key = councels_history + } + text = { + localization_key = canon_history + } +} + +GetRandomPoetryPassage = { + type = character + + random_valid = yes + + text = { + localization_key = wei_poetry + } + text = { + localization_key = qi_poetry + } + text = { + localization_key = kuai_poetry + } + text = { + localization_key = decade_poetry + } + text = { + localization_key = sheng_poetry + } + text = { + localization_key = praise_poetry + } + text = { + localization_key = sacrificial_poetry + } +} + +GetRandomAncientChinesePoet = { + type = character + + random_valid = yes + + text = { + localization_key = wang_wei # Wang Wei + } + text = { + localization_key = tao_yuanming # Tao Yuanming + } + text = { + localization_key = li_bai # Li Bai + } + text = { + localization_key = du_fu # Du Fu + } + text = { + localization_key = meng_haoran # Meng Haoran + } + text = { + localization_key = liu_zongyuan # Liu Zongyuan + } + text = { + localization_key = bai_juyi # Bai Juyi + } +} + +GetRandomAnnalsPassage = { + type = character + + random_valid = yes + + text = { + localization_key = yin_annals + } + text = { + localization_key = huan_annals + } + text = { + localization_key = zhuang_annals + } + text = { + localization_key = min_annals + } + text = { + localization_key = xi_annals + } + text = { + localization_key = wen_annals + } + text = { + localization_key = xuan_annals + } + text = { + localization_key = cheng_annals + } +} + +GetRandomRitesPassage = { + type = character + + random_valid = yes + + text = { + localization_key = ai_rites + } + text = { + localization_key = implements_rites + } + text = { + localization_key = mourning_rites + } + text = { + localization_key = cap_rites + } + text = { + localization_key = scholar_rites + } + text = { + localization_key = banquet_rites + } + text = { + localization_key = doctrine_rites + } + text = { + localization_key = pattern_rites + } +} + +GetRegionalPoetryExam = { + type = character + + text = { + trigger = { + has_government = celestial_government + } + localization_key = four_part_poetry_china + } + text = { + trigger = { + has_government = meritocratic_government + } + localization_key = four_part_poetry_korea + } +} + +GetArtifactDecayDesc = { + type = artifact + + random_valid = yes + + text = { + trigger = { + OR = { + artifact_type = armor_mail + artifact_type = armor_plate + artifact_type = armor_lamellar + artifact_type = armor_laminar + artifact_type = armor_brigandine + artifact_type = miscellaneous + artifact_type = brooch + artifact_type = brooch_pedestal + artifact_type = necklace + artifact_type = regalia + artifact_type = spear + artifact_type = dagger + artifact_type = sword + artifact_type = mace + artifact_type = goblet + } + } + localization_key = artifact_decay_scratched + } + + text = { + trigger = { + OR = { + artifact_type = dagger + artifact_type = sword + artifact_type = mace + artifact_type = axe + artifact_type = hammer + } + } + localization_key = artifact_decay_dull + } + + text = { + trigger = { + OR = { + artifact_type = book + artifact_type = wall_big + artifact_type = wall_small + } + } + localization_key = artifact_decay_torn + } + + text = { + trigger = { + OR = { + artifact_type = sculpture + artifact_type = throne + artifact_type = miscellaneous + } + } + localization_key = artifact_decay_cracked + } + + text = { + trigger = { + OR = { + artifact_type = sculpture + artifact_type = throne + artifact_type = miscellaneous + artifact_type = brooch + artifact_type = brooch_pedestal + } + } + localization_key = artifact_decay_fracture + } + + text = { + fallback = yes + localization_key = artifact_decay_worn + } +} + +GetExamFocusSkill = { + type = activity + + #Capital Examination + text = { + trigger = { + has_activity_option = { + category = special_type + option = imperial_examination_focus_martial + } + } + localization_key = exam_focus_martial + } + text = { + trigger = { + has_activity_option = { + category = special_type + option = imperial_examination_focus_learning + } + } + localization_key = exam_focus_learning + } + text = { + trigger = { + has_activity_option = { + category = special_type + option = imperial_examination_focus_stewardship + } + } + localization_key = exam_focus_stewardship + } +} + +GetTurbanRebellionColor = { + type = all + text = { + trigger = { + has_global_variable = old_dynastic_color_is_red + } + localization_key = red + } + text = { + trigger = { + has_global_variable = old_dynastic_color_is_green + } + localization_key = green + } + text = { + trigger = { + has_global_variable = old_dynastic_color_is_white + } + localization_key = white + } + text = { + trigger = { + has_global_variable = old_dynastic_color_is_black + } + localization_key = black + } + text = { + trigger = { + has_global_variable = old_dynastic_color_is_yellow + } + localization_key = yellow + } +} + +GetCiPoemName = { + type = character + random_valid = yes + + #If Poem Tune is set we take that, otherwise it is random + #To accomplish this all entries must exist check scope:poem_tune in trigger_if + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:riverside_city + } + } + localization_key = riverside_city + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:green_jade_bowl + } + } + localization_key = green_jade_bowl + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:scent_fills_the_hall + } + } + localization_key = scent_fills_the_hall + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:lady_yu + } + } + localization_key = lady_yu + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:butterflies_love_blossoms + } + } + localization_key = butterflies_love_blossoms + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:plucking_mulberry_leafs + } + } + localization_key = plucking_mulberry_leafs + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:rivertown_man + } + } + localization_key = rivertown_man + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:spring_in_the_han_palace + } + } + localization_key = spring_in_the_han_palace + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:winds_between_pine_trees + } + } + localization_key = winds_between_pine_trees + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:memories_of_the_past_at_red_cliff + } + } + localization_key = memories_of_the_past_at_red_cliff + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:my_wrath_bristles_through_my_helmet + } + } + localization_key = my_wrath_bristles_through_my_helmet + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:thinking_of_the_past_at_beigu_pavilion + } + } + localization_key = thinking_of_the_past_at_beigu_pavilion + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:dream_song + } + } + localization_key = dream_song + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:as_in_a_dream + } + } + localization_key = as_in_a_dream + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:immortal_by_the_river + } + } + localization_key = immortal_by_the_river + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:longing_for_qin_e + } + } + localization_key = longing_for_qin_e + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:new_chrysanthemum_flowers + } + } + localization_key = new_chrysanthemum_flowers + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:poluomen_son + } + } + localization_key = poluomen_son + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:pouring_out_deep_emotions + } + } + localization_key = pouring_out_deep_emotions + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:rain_hits_a_bell + } + } + localization_key = rain_hits_a_bell + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:spring_in_the_tower_of_jade + } + } + localization_key = spring_in_the_tower_of_jade + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:drunk_in_the_fairyland + } + } + localization_key = drunk_in_the_fairyland + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:anxiety_of_a_beauty + } + } + localization_key = anxiety_of_a_beauty + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:writing_of_my_sorrow + } + } + localization_key = writing_of_my_sorrow + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:sad_remembrance + } + } + localization_key = sad_remembrance + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:on_the_advent_of_spring + } + } + localization_key = on_the_advent_of_spring + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:silk_washing_stream + } + } + localization_key = silk_washing_stream + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:at_an_inn_in_xinshi + } + } + localization_key = at_an_inn_in_xinshi + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:on_red_lotus_petals + } + } + localization_key = on_red_lotus_petals + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:pusa_man + } + } + localization_key = pusa_man + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:a_quiet_night + } + } + localization_key = a_quiet_night + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:huanxi_sand + } + } + localization_key = huanxi_sand + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:overlapping_golden_light_of_small_hills + } + } + localization_key = overlapping_golden_light_of_small_hills + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:the_river_is_red + } + } + localization_key = the_river_is_red + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:the_road_is_difficult + } + } + localization_key = the_road_is_difficult + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:phoenix_hairpin + } + } + localization_key = phoenix_hairpin + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:boating_on_tai_lake + } + } + localization_key = boating_on_tai_lake + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:prelude_to_the_water_song + } + } + localization_key = prelude_to_the_water_song + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:rambling_young_man + } + } + localization_key = rambling_young_man + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:king_of_lanling + } + } + localization_key = king_of_lanling + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:washing_creek_sands + } + } + localization_key = washing_creek_sands + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:magnolia_blossoms + } + } + localization_key = magnolia_blossoms + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:petals_falling_in_the_river + } + } + localization_key = petals_falling_in_the_river + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:my_way_passed_ancient_tombs + } + } + localization_key = my_way_passed_ancient_tombs + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:dreaming_of_the_south_side_of_the_river + } + } + localization_key = dreaming_of_the_south_side_of_the_river + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:beautiful_barbarian + } + } + localization_key = beautiful_barbarian + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:missing_the_emperors_hometown + } + } + localization_key = missing_the_emperors_hometown + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:daoist_priestess + } + } + localization_key = daoist_priestess + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:a_bushel_of_pearls + } + } + localization_key = a_bushel_of_pearls + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:bodhisattva_barbarian + } + } + localization_key = bodhisattva_barbarian + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:clear_and_even_music + } + } + localization_key = clear_and_even_music + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:lost_battle + } + } + localization_key = lost_battle + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:beauty_yu + } + } + localization_key = beauty_yu + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:crows_cry_at_night + } + } + localization_key = crows_cry_at_night + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:phoenix_perched_on_the_parasol_tree + } + } + localization_key = phoenix_perched_on_the_parasol_tree + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:imperial_avenue_procession + } + } + localization_key = imperial_avenue_procession + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:rain_hits_a_bell + } + } + localization_key = rain_hits_a_bell + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:divination_song + } + } + localization_key = divination_song + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:attached_to_her_skirt + } + } + localization_key = attached_to_her_skirt + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:partridge_sky + } + } + localization_key = partridge_sky + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:mountain_hawthorn + } + } + localization_key = mountain_hawthorn + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:the_song_of_tangduo + } + } + localization_key = the_song_of_tangduo + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:the_song_of_tangduo + } + } + localization_key = the_song_of_tangduo + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:fragrance_filling_the_hall + } + } + localization_key = fragrance_filling_the_hall + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:the_water_clock_sings_at_night + } + } + localization_key = the_water_clock_sings_at_night + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:butterflies_kiss_flowers + } + } + localization_key = butterflies_kiss_flowers + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poem_tune + } + scope:poem_tune = flag:picking_mulberry + } + } + localization_key = picking_mulberry + } +} + +GetCiPoemTheme = { + type = character + random_valid = yes + + #If Poem Theme is set we take that, otherwise it is random + #To accomplish this all entries must exist check scope:poem_theme in trigger_if + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:love + } + } + localization_key = ci_poem_theme_love + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:nature + } + } + localization_key = ci_poem_theme_nature + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:longing + } + } + localization_key = ci_poem_theme_longing + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:separation + } + } + localization_key = ci_poem_theme_separation + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:sadness_and_pain + } + } + localization_key = ci_poem_theme_sadness_and_pain + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:philosophy + } + } + localization_key = ci_poem_theme_philosophy + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:mythological_events + } + } + localization_key = ci_poem_theme_mythological_events + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:daily_chores + } + } + localization_key = ci_poem_theme_daily_chores + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:poetry_theme + } + scope:poetry_theme = flag:historical_events + } + } + localization_key = ci_poem_theme_historical_events + } +} + +GetCiPoemQuality = { + type = character + random_valid = yes + + #Poem Quality - Should always be set, but the key will work without it + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:weak + } + } + localization_key = ci_poem_description_weak + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:mid + } + } + localization_key = ci_poem_description_mid + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:great + } + } + localization_key = ci_poem_description_great + } +} + +#Prose Description + +GetProseTheme = { + type = character + random_valid = yes + + #If Prose Theme is set we take that, otherwise it is random + #To accomplish this all entries must exist check scope:prose_theme in trigger_if + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:commentary_on_the_four_books + } + } + localization_key = prose_theme_comentary + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:logic + } + } + localization_key = prose_theme_logic + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:critiquing_opponents + } + } + localization_key = prose_theme_critiquing_opponents + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:sentiments + } + } + localization_key = prose_theme_sentiments + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:betterment + } + } + localization_key = prose_theme_betterment + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:human_existance + } + } + localization_key = prose_theme_human_existance + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:prose_theme_lands_ideals + } + } + localization_key = prose_theme_lands_ideals + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:rewriting_history + } + } + localization_key = prose_theme_rewriting_history + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:bio + } + } + localization_key = prose_theme_bio + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:prose_theme + } + scope:prose_theme = flag:emperor + } + } + localization_key = prose_theme_emperor + } +} + +GetProseTopic = { + type = character + random_valid = yes + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:topic + } + scope:topic = flag:prose_philosophy + } + } + localization_key = prose_theme_philosophy + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:topic + } + scope:topic = flag:prose_history + } + } + localization_key = prose_topic_history + } + +} + +GetProseQuality = { + type = character + random_valid = yes + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:weak + } + } + localization_key = prose_quality_weak + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:mid + } + } + localization_key = prose_quality_mid + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:great + } + } + localization_key = prose_quality_great + } +} + +#Monograph Description + + +GetMonographTheme = { + type = character + random_valid = yes + + #If Poem Theme is set we take that, otherwise it is random + #To accomplish this all entries must exist check scope:poem_theme in trigger_if + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:home_duchy + } + } + localization_key = monograph_theme_home_duchy + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:home_kingdom + } + } + localization_key = monograph_theme_home_kingdom + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:home_empire + } + } + localization_key = monograph_theme_home_empire + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:home_hegemony + } + } + localization_key = monograph_theme_home_hegemony + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:point_of_interest + } + } + localization_key = monograph_theme_point_of_interest + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:commentary_on_earlier_works + } + } + localization_key = monograph_theme_commentary_on_earlier_works + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:algebraic_geometry + } + } + localization_key = monograph_theme_algebraic_geometry + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:linear_algebra + } + } + localization_key = monograph_theme_linear_algebra + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:spherical_trigonometry + } + } + localization_key = monograph_theme_spherical_trigonometry + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:computational_studies + } + } + localization_key = monograph_theme_computational_studies + } + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:method_of_solving_simultaneous_congruences + } + } + localization_key = monograph_theme_method_of_solving_simultaneous_congruences + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:magic_squares_magic_circles + } + } + localization_key = monograph_theme_magic_squares_magic_circles + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:monograph_theme + } + scope:monograph_theme = flag:teaching_overview_of_all_mathematical_methods + } + } + localization_key = monograph_theme_teaching_overview_of_all_mathematical_methods + } +} + +GetMonographTopic = { + type = character + random_valid = yes + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:topic + } + scope:topic = flag:monograph_mathematics + } + } + localization_key = monograph_topic_mathematics + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:topic + } + scope:topic = flag:monograph_geography + } + } + localization_key = monograph_topic_geography + } +} + +GetMonographQuality = { + type = character + random_valid = yes + + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:weak + } + } + localization_key = monograph_description_quality_weak + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:mid + } + } + localization_key = monograph_description_quality_mid + } + text = { + trigger = { + trigger_if = { + limit = { + exists = scope:quality_of_artifact + } + scope:quality_of_artifact = flag:great + } + } + localization_key = monograph_description_quality_great + } +} diff --git a/common/decisions/10_culture_conversion_decisions.txt b/common/decisions/10_culture_conversion_decisions.txt new file mode 100644 index 00000000..2ad709f8 --- /dev/null +++ b/common/decisions/10_culture_conversion_decisions.txt @@ -0,0 +1,592 @@ +### Convert to Local Culture ### +convert_to_local_culture_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_realm.dds" + } + desc = convert_to_local_culture_decision_desc + selection_tooltip = convert_to_local_culture_decision_tooltip + + is_shown = { + is_playable_character = yes + primary_title.tier > tier_barony + culture != capital_province.culture + NAND = { + is_ai = yes + OR = { + has_character_flag = converted_culture_this_lifetime + has_character_flag = converted_culture_this_lifetime_ai + } + } + NOT = { government_has_flag = government_is_landless_minority } + } + + is_valid_showing_failures_only = { + is_physically_able_adult = yes + is_at_war = no + custom_description = { + text = can_only_change_culture_once + NOT = { has_character_flag = converted_culture_this_lifetime } + } + } + + cost = { + prestige = { + value = convert_to_local_culture_base_cost + if = { # Cheaper to convert to a hybrid culture made from your culture + limit = { + capital_province.culture = { + any_parent_culture = { + this = root.culture + } + } + } + multiply = 0.5 + } + + # Similarities in culture + if = { + limit = { + capital_province.culture = { + has_same_culture_ethos = root.culture + } + } + multiply = 0.75 + } + if = { + limit = { + capital_province.culture = { + has_same_culture_heritage = root.culture + } + } + multiply = 0.75 + } + if = { + limit = { + capital_province.culture = { + has_same_culture_language = root.culture + } + } + multiply = 0.5 + } + if = { + limit = { + NOT = { + capital_province.culture = { + has_same_culture_martial_tradition = root.culture + } + } + } + multiply = 1.25 + } + if = { + limit = { + culture = { + has_cultural_parameter = expensive_convert_to_local_culture + } + } + multiply = 3 + } + if = { + limit = { + culture = { + has_cultural_parameter = cheaper_convert_to_local_culture + } + } + multiply = 0.25 + } + else_if = { + limit = { + NOT = { + government_has_flag = government_is_nomadic + } + has_trait = nomadic_philosophy + } + multiply = 0.25 + } + # Account for struggle phase. + if = { + limit = { is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = yes } + multiply = 0.25 + } + + # Make sure it's never dumb numbers. + min = 25 + } + } + + effect = { + if = { + limit = { + culture = { + has_cultural_parameter = less_likely_to_culture_convert + } + OR = { + has_trait = compassionate + has_trait = gregarious + has_trait = diligent + has_trait = fickle + has_trait = humble + has_trait = trusting + } + } + add_stress = medium_stress_gain + } + else_if = { + limit = { + culture = { + has_cultural_parameter = less_likely_to_culture_convert + } + } + add_stress = major_stress_gain + } + # Struggle Catalysts + if = { + limit = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_convert_local_culture_faith + is_culture_involved_in_struggle = root.capital_province.culture + } + } + every_character_struggle = { + involvement = involved + activate_struggle_catalyst = { + catalyst = catalyst_convert_local_culture_faith + character = root + } + } + } + + convert_family_culture_and_notify_vassals_effect = { + CONVERTER = root + OLD_CULTURE = root.culture + NEW_CULTURE = capital_province.culture + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_potential = { + is_playable_character = yes + culture != capital_province.culture + is_landless_adventurer = no + } + + ai_will_do = { + base = 3 + + modifier = { # If your liege is the same culture as your capital, better get on with it! This should combat scattered wrong-culture Counts and such. + add = 77 + capital_province.culture = liege.culture + } + + modifier = { # Motivate vassals to assimilate if they are different culture from their liege. If they can't curry their liege's favor, better get the peasants on your side at least... + add = 27 + NOR = { + culture = capital_province.culture + culture = liege.culture + } + } + + # Reduced chance for every vassal who has your old culture + modifier = { + factor = { + value = 1 + every_vassal = { + limit = { + OR = { + highest_held_title_tier = tier_kingdom + highest_held_title_tier = tier_duchy + AND = { + root = { + highest_held_title_tier = tier_duchy + } + primary_title.tier = tier_county + } + } + culture = root.culture + } + add = -0.3 + } + } + } + + modifier = { # This factor 0 is not misplaced; Loyal Subjects should not culture convert unless it's to a hybrid! + factor = 0 + top_liege != this + exists = liege + culture != liege.culture + culture = { + has_cultural_tradition = tradition_loyal_soldiers + } + } + + modifier = { # You're an independent count that has become landed somewhere, as you can't increase acceptance, it's best to assimilate. + add = 200 + top_liege = this + primary_title.tier = tier_county + domain_size <= 3 + culture = { + NOR = { + has_cultural_parameter = easier_to_hybridize # Not for hybrid-loving cultures + has_cultural_parameter = expensive_convert_to_local_culture # Nor staunch traditionalists + } + cultural_acceptance = { target = root.capital_province.culture value < 50 } + } + } + + modifier = { # Do convert to hybrids of your own culture + add = 200 + capital_province.culture = { + is_hybrid_culture = yes + any_parent_culture = { + this = root.culture + } + } + } + + modifier = { # Farewell, norse culture (unless the player is running a norse empire) + add = 200 + OR = { + top_liege = this + AND = { + top_liege != this + NOT = { + any_liege_or_above = { + culture = culture:norse + } + } + } + } + culture = culture:norse + capital_province.culture = { + OR = { + this = culture:swedish + this = culture:norwegian + this = culture:danish + } + } + } + + modifier = { # Iberian Struggle modifiers + any_character_struggle = { + involvement = involved + } + add = { + value = 0 + if = { + limit = { + any_character_struggle = { + phase_has_catalyst = catalyst_convert_local_culture_faith + } + has_character_flag = agenda_towards_escalation + } + add = -300 + } + else_if = { # Slight boost, so players can't exploit landing lots of characters to bump catalyst progress + limit = { + any_character_struggle = { + phase_has_catalyst = catalyst_convert_local_culture_faith + } + } + add = 20 + } + } + } + + modifier = { # If you're the same culture as your liege, and your Capital is in a Duchy with your culture in it, never convert + factor = 0 + top_liege != this + exists = liege + culture = liege.culture + capital_province.duchy = { + any_in_de_jure_hierarchy = { + tier = tier_county + any_county_province = { + culture = root.culture + } + } + } + } + + modifier = { # If your capital borders a province with the correct culture, do not convert + factor = 0 + top_liege != this + exists = liege + culture = liege.culture + capital_province.county = { + any_neighboring_county = { + any_county_province = { + culture = root.culture + } + } + } + } + + modifier = { # If your liege is your parent, do not convert + factor = 0 + top_liege != this + exists = liege + culture = liege.culture + OR = { + liege = root.mother + liege = root.father + } + } + + # Some cultures should not assimilate to certain others + modifier = { + factor = 0 + has_culture = culture:andalusian + capital_province = { + culture = { has_cultural_pillar = heritage_iberian } + } + NOT = { + capital_province = { + culture = { + is_hybrid_culture = yes + any_parent_culture_or_above = { + this = root.culture + } + } + } + } + } + modifier = { + factor = 0 + culture = { has_cultural_pillar = heritage_iberian } + capital_province.culture = culture:andalusian + } + + # Don't overwrite historically scripted developments + modifier = { + factor = 0 + OR = { + has_culture = culture:norman + has_culture = culture:english + } + capital_province.culture = culture:anglo_saxon + } + modifier = { + factor = 0 + has_culture = culture:turkish + capital_province = { + culture = { + OR = { + has_cultural_pillar = heritage_byzantine + has_cultural_pillar = heritage_caucasian + } + } + } + NOT = { + capital_province = { + culture = { + is_hybrid_culture = yes + any_parent_culture_or_above = { + this = root.culture + } + } + } + } + } + modifier = { + factor = 0 + has_culture = culture:turkish + primary_title.tier >= tier_empire + } + modifier = { + factor = 0 + OR = { + has_title = title:k_jerusalem + has_title = title:e_outremer + any_liege_or_above = { + OR = { + has_title = title:k_jerusalem + has_title = title:e_outremer + } + } + } + NOR = { + capital_province = { # Convert to Hybrids of your culture in the Holy Land + culture = { + is_hybrid_culture = yes + any_parent_culture_or_above = { + this = root.culture + } + } + } + AND = { + top_liege != this + exists = liege + capital_province.culture = liege.culture + } + } + } + modifier = { + factor = 0 + has_title = title:e_latin_empire + NOT = { + capital_province = { + culture = { + is_hybrid_culture = yes + any_parent_culture_or_above = { + this = root.culture + } + } + } + } + } + + # Scots needs a bit of help to dominate as it did historically + modifier = { + factor = 0 + has_culture = culture:scottish + capital_province.culture = culture:gaelic + } + + # Pictish should usually disappear + modifier = { + factor = 0 + has_culture = culture:gaelic + capital_province.culture = culture:pictish + } + + # Don't go back on a previous conversion + modifier = { + factor = 0 + has_character_flag = converted_culture_this_lifetime + } + #Some traditions reeeallly don't like doing this + modifier = { + factor = 0.1 + culture = { + OR = { + has_cultural_parameter = less_likely_to_culture_convert + has_cultural_parameter = expensive_convert_to_local_culture + } + } + } + } +} + +### Have the Realm Embrace Local Traditions ### +assimilate_local_traditions_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/fp1_decision_raise_runestone.dds" + } + sort_order = 75 + + desc = assimilate_local_traditions_decision_desc + selection_tooltip = assimilate_local_traditions_decision_tooltip + + is_shown = { + culture = culture:norse + is_landed = yes + primary_title.tier > tier_barony + culture != capital_province.culture + NAND = { + is_ai = yes + OR = { + has_character_flag = converted_culture_this_lifetime + has_character_flag = converted_culture_this_lifetime_ai + } + } + } + + is_valid_showing_failures_only = { + top_liege = this + is_physically_able_adult = yes + is_at_war = no + custom_description = { + text = can_only_change_culture_once + NOT = { has_character_flag = converted_culture_this_lifetime } + } + capital_province = { + NOT = { + geographical_region = world_europe_north + } + } + } + + cost = { + prestige = { + value = 300 + if = { + limit = { + is_ai = yes + capital_province = { + geographical_region = world_europe_east + } + } + multiply = 0 + } + # Account for struggle phase. + if = { + limit = { is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = yes } + multiply = 0.25 + } + + # Make sure it's never dumb numbers. + min = 25 + } + } + + effect = { + norse_assimilate_local_traditions_effect = { + CONVERTER = root + OLD_CULTURE = root.culture + OLD_FAITH = root.faith + NEW_CULTURE = capital_province.culture + NEW_FAITH = capital_province.faith + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 60 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + + ai_potential = { + culture = culture:norse + is_playable_character = yes + culture != capital_province.culture + } + + ai_will_do = { + base = 100 + + # Don't do it too early + modifier = { + factor = 0 + NOT = { + primary_title.title_held_years > 30 + } + } + + # Don't do it if you're zealous + modifier = { + factor = 0 + has_trait = zealous + capital_province.faith != root.faith + } + + # Historical Exceptions + modifier = { + add = 100 + capital_province = { + geographical_region = world_europe_east + } + } + } +} diff --git a/common/decisions/dlc_decisions/ep3_decisions.txt b/common/decisions/dlc_decisions/ep3_decisions.txt index ff09ad82..5853f80f 100644 --- a/common/decisions/dlc_decisions/ep3_decisions.txt +++ b/common/decisions/dlc_decisions/ep3_decisions.txt @@ -3768,7 +3768,7 @@ go_fishing_decision = { is_shown = { #DLC check. has_ep3_dlc_trigger = yes - has_government = landless_adventurer_government + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } } is_valid_showing_failures_only = { diff --git a/common/decisions/dlc_decisions/ep_3/06_ep3_laamp_decisions.txt b/common/decisions/dlc_decisions/ep_3/06_ep3_laamp_decisions.txt new file mode 100644 index 00000000..0d3e8d86 --- /dev/null +++ b/common/decisions/dlc_decisions/ep_3/06_ep3_laamp_decisions.txt @@ -0,0 +1,3275 @@ +@laamp_gallivanter_ai_will_do_bonus_1_value = 10 +@laamp_gallivanter_ai_will_do_bonus_2_value = 30 +@laamp_gallivanter_ai_will_do_bonus_3_value = 50 + +@laamp_gallivanter_ai_will_do_malus_1_value = -10 +@laamp_gallivanter_ai_will_do_malus_2_value = -30 +@laamp_gallivanter_ai_will_do_malus_3_value = -50 + + +############################################# +# Abandom Realm to Become an Adventurer # +# by Joe Parkin # +############################################# + +### Become Adventurer ### +become_landless_adventurer_decision = { + picture = { + trigger = { + government_is_japanese_trigger = yes + } + reference = "gfx/interface/illustrations/decisions/tgp_dominance.dds" + } + picture = { + trigger = { + OR = { + culture = { has_graphical_east_asia_culture_group_trigger = yes } + culture = { has_graphical_india_culture_group_trigger = yes } + } + } + reference = "gfx/interface/illustrations/decisions/tgp_silk_road.dds" + } + picture = { + reference = "gfx/interface/illustrations/decisions/ep3_decision_laamp_neutral_mountain.dds" + } + sort_order = 82 + + ai_check_interval_by_tier = { + barony = 0 + county = 120 + duchy = 120 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + desc = become_landless_adventurer_decision_desc + selection_tooltip = become_landless_adventurer_decision_tooltip + + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + OR = { + ai_can_valid_to_create_laamp_trigger = yes + is_ai = no + } + #Standard filter checks. + OR = { + is_landed = yes + AND = { + is_ai = no + government_allows = administrative + top_liege = this + is_landed = no + } + } + # Relevant cultures/faiths + OR = { + culture = { has_cultural_parameter = unlock_voluntary_laampdom } + faith = { has_doctrine_parameter = unlock_voluntary_laampdom_faith } + has_trait = nomadic_philosophy + has_character_modifier = tgp_gave_up_modifier + AND = { + is_ai = no + government_allows = administrative + top_liege = this + is_landed = no + } + } + save_temporary_scope_as = potential_laamp_temp + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:potential_laamp_temp } # Registered fighting license + } + + is_valid = { + is_valid_for_laampdom = yes + # Is not HOF + custom_tooltip = { + text = become_landless_adventurer_decision_hof_tt + faith.religious_head_title.holder != root + } + # Counts and dukes only + custom_tooltip = { + text = become_landless_adventurer_decision_tier_tt + highest_held_title_tier >= tier_county + highest_held_title_tier <= tier_duchy + } + # Not too big + custom_tooltip = { + text = become_landless_adventurer_decision_domain_size_tt + domain_size <= 3 + } + # Relevant cultures/faiths + trigger_if = { + limit = { + NAND = { + is_ai = no + government_allows = administrative + top_liege = this + is_landed = no + } + } + OR = { + culture = { has_cultural_parameter = unlock_voluntary_laampdom } + faith = { has_doctrine_parameter = unlock_voluntary_laampdom_faith } + has_trait = nomadic_philosophy + custom_tooltip = { + text = nomadic_government_tt + government_has_flag = government_is_nomadic + } + has_character_modifier = tgp_gave_up_modifier + } + } + } + + is_valid_showing_failures_only = { + is_at_war = no + is_alive = yes + is_available_adult = yes + has_contagious_deadly_disease_trigger = no + } + + effect = { + save_scope_as = adventurer + if = { + limit = { + player_heir ?= { + this != root + is_adult = yes + } + } + player_heir = { + save_scope_as = laamp_heir + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_adventurer_decision_title_scope_tt + } + } + else_if = { + limit = { top_liege != this } + liege = { + save_scope_as = laamp_liege + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_adventurer_decision_title_scope_tt + } + } + else = { + custom_tooltip = become_landless_adventurer_decision_title_created_tt + if = { + limit = { + NOT = { exists = scope:laamp_inheritor } + } + hidden_effect_new_object = { + create_character = { + template = laamp_inheritor_template + culture = root.capital_county.culture + faith = root.capital_county.faith + dynasty = generate + location = root.capital_province + after_creation = { + save_scope_as = laamp_inheritor + add_character_flag = new_laamp_inheritor + } + } + } + } + } + create_landless_adventurer_title_tooltip_effect = yes + show_as_tooltip = { + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_voluntary_laamp_character_modifier + years = 5 + } + } + trigger_event = { id = ep3_laamps.0030 } + # Debug tracking + if = { + limit = { + is_ai = yes + debug_only = yes + } + if = { + limit = { exists = global_var:ai_voluntary_laamp_count } + change_global_variable = { + name = ai_voluntary_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_voluntary_laamp_count + value = 1 + } + } + debug_log = "AI became adventurer voluntarily" + debug_log_scopes = yes + } + stress_impact = { + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + } + + ai_potential = { + is_valid_for_laampdom = yes + trigger_if = { # Temujun stays, he needs to become Genghis Khan after all! + limit = { + exists = character:125501 + } + NOT = { this = character:125501 } + } + } + + ai_will_do = { + base = -75 + modifier = { add = ep3_laamp_chance_score_value } + modifier = { # If we don't have this, everyone will leave your realm constantly + add = -45 + culture = { has_cultural_parameter = much_more_likely_to_be_laamps } + } + modifier = { # If we don't have this, everyone will leave your realm constantly + add = -20 + culture = { has_cultural_parameter = more_likely_to_be_laamps } + } + modifier = { + factor = 0 + OR = { + #Stahp it, John de Courcy + this = character:214000 + #No adventurer should want to be one again... right? + has_variable = adventurer_creation_reason + } + } + } +} + +become_landless_minority_decision = { + picture = { + trigger = { + government_is_japanese_trigger = yes + } + reference = "gfx/interface/illustrations/decisions/tgp_dominance.dds" + } + picture = { + trigger = { + OR = { + culture = { has_graphical_east_asia_culture_group_trigger = yes } + culture = { has_graphical_india_culture_group_trigger = yes } + } + } + reference = "gfx/interface/illustrations/decisions/tgp_silk_road.dds" + } + picture = { + reference = "gfx/interface/illustrations/decisions/ep3_decision_laamp_neutral_mountain.dds" + } + sort_order = 82 + + ai_check_interval = 120 + + desc = become_landless_minority_decision_desc + selection_tooltip = become_landless_minority_decision_tooltip + + is_shown = { + culture = { + has_cultural_tradition = tradition_diasporic + } + #DLC check. + has_ep3_dlc_trigger = yes + OR = { + ai_can_valid_to_create_laamp_trigger = yes + AND = { + is_ai = yes + prestige_level >= 2 + } + is_ai = no + } + # Relevant cultures/faiths + save_temporary_scope_as = potential_laamp_temp + } + + is_valid = { + is_valid_for_laampdom = yes + culture = { + has_cultural_tradition = tradition_diasporic + } + OR = { + prestige_level >= 3 + AND = { + is_ai = yes + prestige_level >= 2 + } + } + # Is not HOF + custom_tooltip = { + text = become_landless_adventurer_decision_hof_tt + faith.religious_head_title.holder != root + } + # Counts and dukes only + custom_tooltip = { + text = become_landless_adventurer_decision_tier_tt + highest_held_title_tier <= tier_duchy + } + # Not too big + custom_tooltip = { + text = become_landless_adventurer_decision_domain_size_tt + domain_size <= 3 + } + } + + is_valid_showing_failures_only = { + is_at_war = no + is_alive = yes + is_available_adult = yes + has_contagious_deadly_disease_trigger = no + } + + effect = { + save_scope_as = minority_leader + if = { + limit = { + player_heir ?= { + this != root + is_adult = yes + } + } + player_heir = { + save_scope_as = laamp_heir + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_minority_decision_title_scope_tt + } + } + else_if = { + limit = { top_liege != this } + liege = { + save_scope_as = laamp_liege + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_minority_decision_title_scope_tt + } + } + else = { + custom_tooltip = become_landless_minority_decision_title_created_tt + if = { + limit = { + NOT = { exists = scope:laamp_inheritor } + } + hidden_effect_new_object = { + create_character = { + template = laamp_inheritor_template + culture = root.culture + faith = root.faith + dynasty = generate + location = root.capital_province + after_creation = { + save_scope_as = laamp_inheritor + add_character_flag = new_laamp_inheritor + } + } + } + } + } + create_landless_minority_title_tooltip_effect = yes + show_as_tooltip = { + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_voluntary_laamp_character_modifier + years = 5 + } + } + trigger_event = { id = ep3_laamps.1030 } + # Debug tracking + if = { + limit = { + is_ai = yes + debug_only = yes + } + if = { + limit = { exists = global_var:ai_voluntary_laamp_count } + change_global_variable = { + name = ai_voluntary_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_voluntary_laamp_count + value = 1 + } + } + debug_log = "AI became adventurer voluntarily" + debug_log_scopes = yes + } + stress_impact = { + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + } + + ai_potential = { + is_valid_for_laampdom = yes + trigger_if = { # Temujun stays, he needs to become Genghis Khan after all! + limit = { + exists = character:125501 + } + NOT = { this = character:125501 } + } + } + + ai_will_do = { + base = -75 + modifier = { add = ep3_laamp_chance_score_value } + modifier = { # If we don't have this, everyone will leave your realm constantly + add = -45 + culture = { has_cultural_parameter = much_more_likely_to_be_laamps } + } + modifier = { # If we don't have this, everyone will leave your realm constantly + add = -20 + culture = { has_cultural_parameter = more_likely_to_be_laamps } + } + } +} +############################################# +# Wipe Slate # +# by Joe Parkin & Ewan Cowhig Croft # +############################################# + +### Wipe Slate ### +wipe_slate_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_recruitment.dds" } + desc = wipe_slate_decision_desc + selection_tooltip = wipe_slate_decision_tooltip + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + decision_group_type = adventurer_minor + + cooldown = { years = 1 } + + is_shown = { + # DLC check. + has_ep3_dlc_trigger = yes + # Plus, we must have the actual trait. + has_trait = gallowsbait + } + + cost = { + gold = { + value = 100 + add = { + value = highest_held_title_tier + multiply = 25 + } + } + prestige = { + add = { + value = highest_held_title_tier + multiply = 25 + } + } + piety = { + add = { + value = highest_held_title_tier + multiply = 50 + } + } + } + + is_valid_showing_failures_only = { + # Standard filter checks. + is_available_adult = yes + } + + widget = { + gui = "decision_view_widget_option_list_generic" + controller = decision_option_list_controller + decision_to_second_step_button = "WIPE_SLATE_DECISION_NEXT_STEP_BUTTON" + item = { + value = track_bandit + is_valid = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + localization = wipe_slate_decision_option_bandit + icon = "gfx/interface/icons/trait_level_tracks/bandit.dds" + } + item = { + value = track_trickster + is_valid = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + localization = wipe_slate_decision_option_trickster + icon = "gfx/interface/icons/trait_level_tracks/trickster.dds" + } + item = { + value = track_thief + is_valid = { + has_trait_xp = { + trait = gallowsbait + track = thief + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + localization = wipe_slate_decision_option_thief + icon = "gfx/interface/icons/trait_level_tracks/thief.dds" + } + item = { + value = track_poacher + is_valid = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + localization = wipe_slate_decision_option_poacher + icon = "gfx/interface/icons/trait_level_tracks/poacher.dds" + } + item = { + value = track_marauder + is_valid = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + localization = wipe_slate_decision_option_marauder + icon = "gfx/interface/icons/trait_level_tracks/marauder.dds" + } + item = { + value = trait_gallowsbait + is_valid = { + custom_tooltip = { + text = wipe_slate_decision_option_gallowsbait.tt.must_have_below_max_in_all_values + has_trait_xp = { + trait = gallowsbait + track = bandit + value < wipe_slate_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value < wipe_slate_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = thief + value < wipe_slate_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value < wipe_slate_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value < wipe_slate_min_xp_to_remove_trait_value + } + } + } + localization = wipe_slate_decision_option_gallowsbait + icon = "gfx/interface/icons/traits/gallowsbait.dds" + } + } + + effect = { + save_scope_value_as = { + name = scrubbable + value = { + value = -35 + if = { + limit = { + domicile ?= { has_domicile_parameter = camp_improves_wipe_slate_decision } + } + add = -35 + } + } + } + show_as_tooltip = { + random_list = { + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_bandit + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + add_trait_xp = { + trait = gallowsbait + track = bandit + value = scope:scrubbable + } + } + } + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_trickster + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + add_trait_xp = { + trait = gallowsbait + track = trickster + value = scope:scrubbable + } + } + } + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_thief + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + add_trait_xp = { + trait = gallowsbait + track = thief + value = scope:scrubbable + } + } + } + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_poacher + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + add_trait_xp = { + trait = gallowsbait + track = poacher + value = scope:scrubbable + } + } + } + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_marauder + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + add_trait_xp = { + trait = gallowsbait + track = marauder + value = scope:scrubbable + } + } + } + 100 = { + show_chance = no + desc = wipe_slate_decision.tt.remove_gallowsbait + send_interface_toast = { + title = wipe_slate_decision.tt.slate_wiped + remove_trait = gallowsbait + } + } + } + } + hidden_effect = { + switch = { + trigger = yes + scope:track_bandit = { + add_trait_xp = { + trait = gallowsbait + track = bandit + value = scope:scrubbable + } + } + scope:track_trickster = { + add_trait_xp = { + trait = gallowsbait + track = trickster + value = scope:scrubbable + } + } + scope:track_thief = { + add_trait_xp = { + trait = gallowsbait + track = thief + value = scope:scrubbable + } + } + scope:track_poacher = { + add_trait_xp = { + trait = gallowsbait + track = poacher + value = scope:scrubbable + } + } + scope:track_marauder = { + add_trait_xp = { + trait = gallowsbait + track = marauder + value = scope:scrubbable + } + } + scope:trait_gallowsbait = { remove_trait = gallowsbait } + } + } + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + ai_honor > 0 + ai_compassion >= -25 + ai_rationality >= 0 + gold >= 500 + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Adopt kennel dog # +# by James Beaumont # +############################################# + +adopt_a_kennel_dog = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_pet_dog.dds" } + desc = adopt_a_kennel_dog_desc + selection_tooltip = adopt_a_kennel_dog_tooltip + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + decision_group_type = adventurer_minor + + cooldown = { years = 5 } + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + #Standard filter checks. + domicile ?= { has_domicile_parameter = camp_unlocks_adopt_a_kennel_dog_decision } + NOT = { + any_owned_story = { + type = story_cycle_pet_dog + } + } + } + + is_valid_showing_failures_only = { + is_alive = yes + is_available_adult = yes + has_contagious_deadly_disease_trigger = no + } + + effect = { + show_as_tooltip = { start_dog_story_cycle_effect = yes } + trigger_event = ep3_laamps.8010 + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + # Has enough gold. + short_term_gold >= minor_gold_value + NOR = { + has_trait = lazy + has_trait = callous + } + } + + ai_will_do = { + base = 100 + # You're richer. + modifier = { + add = 50 + faith = { has_doctrine_parameter = gruesome_festivals_active } + short_term_gold >= massive_gold_value + } + modifier = { + add = 50 + faith = { has_doctrine_parameter = gruesome_festivals_active } + short_term_gold >= monumental_gold_value + } + ai_value_modifier = { + ai_compassion = 1.5 + ai_rationality = 1 + } + } +} + +############################################# +# Treasure Hunting Contract # +# by Arkadiusz Majewski # +############################################# +### Search for Treasures ### +treasure_hunting_contract_decision = { + picture = { reference = "gfx/interface/illustrations/army_status/moving.dds" } + desc = treasure_hunting_contract_decision_desc + selection_tooltip = treasure_hunting_contract_decision_tooltip + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + decision_group_type = adventurer_minor + + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + + any_character_active_contract = { + task_contract_type = laamp_treasure_hunting_contract + } + } + + is_valid_showing_failures_only = { + is_available_adult = yes + has_contagious_deadly_disease_trigger = no + } + + is_valid = { + any_character_active_contract = { + task_contract_type = laamp_treasure_hunting_contract + } + } + widget = { + gui = "decision_view_widget_option_list_generic" + controller = decision_option_list_controller + decision_to_second_step_button = "TREASURE_HUNTING_CONTRACT_DECISION_NEXT_STEP_BUTTON" + #cover world regions, have to be the same as in get_adventure_inspiration_start_location + item = { + value = search_europe_north + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe + geographical_region = world_steppe_west + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_europe_north + icon = "gfx/interface/icons/terrain_types/taiga.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_europe_west + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe + geographical_region = world_africa_north + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_europe_west + icon = "gfx/interface/icons/terrain_types/plains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_europe_east + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe + geographical_region = world_steppe_west + geographical_region = world_asia_minor + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_europe_east + icon = "gfx/interface/icons/terrain_types/forest.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_europe_south + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe + geographical_region = world_steppe_west + geographical_region = world_asia_minor + geographical_region = world_africa_north + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_europe_south + icon = "gfx/interface/icons/terrain_types/coastal_sea.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_africa_north + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_europe_west + geographical_region = world_asia_minor + geographical_region = world_middle_east_jerusalem + geographical_region = world_africa + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_africa_north + icon = "gfx/interface/icons/terrain_types/drylands.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_africa_west + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_africa + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_africa_west + icon = "gfx/interface/icons/terrain_types/jungle.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_africa_east + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_asia_minor + geographical_region = world_middle_east_jerusalem + geographical_region = world_middle_east_arabia + geographical_region = world_africa + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_africa_east + icon = "gfx/interface/icons/terrain_types/hills.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_middle_east_jerusalem + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_asia_minor + geographical_region = world_middle_east + geographical_region = world_africa_north + geographical_region = world_africa_east + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_middle_east_jerusalem + icon = "gfx/interface/icons/terrain_types/drylands.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_asia_minor + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_middle_east + geographical_region = world_africa_north + geographical_region = world_africa_east + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_asia_minor + icon = "gfx/interface/icons/terrain_types/hills.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_middle_east_arabia + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_middle_east + geographical_region = world_africa_north + geographical_region = world_africa_east + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_middle_east_arabia + icon = "gfx/interface/icons/terrain_types/desert.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_middle_east_persia + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_middle_east + geographical_region = world_africa_north + geographical_region = world_africa_east + geographical_region = world_india_rajastan + geographical_region = world_steppe_west + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_middle_east_persia + icon = "gfx/interface/icons/terrain_types/desert_mountains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_india_rajastan + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_steppe_west + geographical_region = world_burma + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_india_rajastan + icon = "gfx/interface/icons/terrain_types/desert.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_india_deccan + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_steppe_west + geographical_region = world_burma + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_india_deccan + icon = "gfx/interface/icons/terrain_types/drylands.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_india_bengal + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_steppe_west + geographical_region = world_burma + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_india_bengal + icon = "gfx/interface/icons/terrain_types/jungle.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_burma + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_india + geographical_region = world_tibet + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_burma + icon = "gfx/interface/icons/terrain_types/floodplains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_tibet + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_india + geographical_region = world_steppe + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_tibet + icon = "gfx/interface/icons/terrain_types/mountains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_steppe_tarim + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_india + geographical_region = world_tibet + geographical_region = world_steppe + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_steppe_tarim + icon = "gfx/interface/icons/terrain_types/desert.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_steppe_west + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_india + geographical_region = world_tibet + geographical_region = world_steppe + geographical_region = world_europe_east + geographical_region = world_europe_north + geographical_region = world_asia_minor + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_steppe_west + icon = "gfx/interface/icons/terrain_types/steppe.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_steppe_east + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + OR = { + geographical_region = world_india + geographical_region = world_tibet + geographical_region = world_steppe + geographical_region = world_asia_china + } + } + } + } + localization = treasure_hunting_contract_decision_option_search_steppe_east + icon = "gfx/interface/icons/terrain_types/mountains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_east_asia + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + geographical_region = world_asia_east + } + } + } + localization = treasure_hunting_contract_decision_option_search_east_asia + icon = "gfx/interface/icons/terrain_types/mountains.dds" + ai_chance = { + value = 50 + } + } + item = { + value = search_east_southeast_asia + is_valid = { + custom_description = { + text = treasure_hunting_contract_decision_limit + capital_province = { + geographical_region = world_asia_southeast + } + } + } + localization = treasure_hunting_contract_decision_option_search_east_southeast_asia + icon = "gfx/interface/icons/terrain_types/mountains.dds" + ai_chance = { + value = 50 + } + } + } + + effect = { + switch = { + trigger = yes + scope:search_africa_north = { + set_variable = { + name = adventure_destination + value = flag:africa_north + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_africa_west = { + set_variable = { + name = adventure_destination + value = flag:africa_west + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_africa_east = { + set_variable = { + name = adventure_destination + value = flag:africa_east + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_europe_north = { + set_variable = { + name = adventure_destination + value = flag:europe_north + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_europe_west = { + set_variable = { + name = adventure_destination + value = flag:europe_west + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_europe_east = { + set_variable = { + name = adventure_destination + value = flag:europe_east + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_europe_south = { + set_variable = { + name = adventure_destination + value = flag:europe_south + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_middle_east_jerusalem = { + set_variable = { + name = adventure_destination + value = flag:middle_east_jerusalem + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_middle_east_arabia = { + set_variable = { + name = adventure_destination + value = flag:middle_east_arabia + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_middle_east_persia = { + set_variable = { + name = adventure_destination + value = flag:middle_east_persia + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_india_deccan = { + set_variable = { + name = adventure_destination + value = flag:india_deccan + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_india_bengal = { + set_variable = { + name = adventure_destination + value = flag:india_bengal + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_india_rajastan = { + set_variable = { + name = adventure_destination + value = flag:india_rajastan + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_steppe_west = { + set_variable = { + name = adventure_destination + value = flag:steppe_west + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_steppe_east = { + set_variable = { + name = adventure_destination + value = flag:steppe_east + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_steppe_tarim = { + set_variable = { + name = adventure_destination + value = flag:steppe_tarim + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_asia_minor = { + set_variable = { + name = adventure_destination + value = flag:asia_minor + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_burma = { + set_variable = { + name = adventure_destination + value = flag:burma + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_tibet = { + set_variable = { + name = adventure_destination + value = flag:tibet + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_east_asia = { + set_variable = { + name = adventure_destination + value = flag:east_asia + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + scope:search_east_southeast_asia = { + set_variable = { + name = adventure_destination + value = flag:southeast_asia + } + get_adventure_inspiration_start_location = { + ADVENTURER = root + } + } + } + random_character_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + save_scope_as = task_contract + } + scope:location.county = { + random_county_province = { + save_scope_as = task_contract_destination + } + } + scope:task_contract = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_event = ep3_contract_event.0006 + } + custom_tooltip = treasure_hunting_contract_decision_effect + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Visit Local Settlement # +############################################# + +### Visit [ROOT.Char.Custom('LocalHoldingTypeCapitalized')] ### +visit_local_settlement_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_destiny_goal.dds" } + desc = visit_local_settlement_decision_desc + selection_tooltip = visit_local_settlement_decision_tooltip + sort_order = 200 + decision_group_type = adventurer_minor + + #The cooldown is set separately, if you only entered and left you shouldn't get punished for it + + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + + is_valid_showing_failures_only = { + is_alive = yes + is_available_adult = yes + has_contagious_deadly_disease_trigger = no + root.location = { + has_holding = yes + is_occupied = no + is_raided = no + } + custom_description = { + text = "visit_local_settlement_decision_sieged" + subject = root + root.location = { + NOT = { + any_army_in_location = { + is_army_in_siege = yes + } + } + } + } + custom_description = { + text = "decision_already_visiting_local_settlement" + subject = root + NOT = { has_variable = ep3_laamp_decision_1000_is_visiting } + } + } + + effect = { + if = { + limit = { + root.location = { + OR = { + has_holding = no + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + #The base tooltip + custom_tooltip = visit_local_settlement_tribal_holding_decision_tt + } + else_if = { + limit = { + root.location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + #Add on church holding-specific effects + custom_tooltip = visit_local_settlement_church_holding_decision_tt + } + else_if = { + limit = { + root.location = { has_holding_type = castle_holding } + } + #Add on castle holding-specific effects + custom_tooltip = visit_local_settlement_castle_holding_decision_tt + } + else_if = { + limit = { + root.location = { has_holding_type = city_holding } + } + #Add on castle holding-specific effects + custom_tooltip = visit_local_settlement_city_holding_decision_tt + } + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + trigger_event = ep3_laamp_decision_event.1000 + close_view = { + view = decisions + player = root + } + } + + ai_check_interval = 0 + + ai_potential = { + always = no + } + + ai_will_do = { + base = 0 + } +} + +############################################# +# Visit Local Settlement - Use Treasure Map # +############################################# + +### Excavate Treasure ### +treasure_map_contract_decision = { + picture = { reference = "gfx/interface/illustrations/army_status/moving.dds" } + desc = treasure_map_contract_decision_desc + selection_tooltip = treasure_map_contract_decision_tooltip + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + decision_group_type = adventurer_minor + + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + any_character_active_contract = { task_contract_type = laamp_treasure_map_contract } + any_character_artifact = { has_variable = 1025_treasure_map } + } + + is_valid_showing_failures_only = { + is_available_allow_travelling = yes + custom_description = { + text = "decision_already_excavating_treasure" + subject = root + NOR = { + has_variable = ep3_laamp_decision_1000_is_planning_excavation_trip + has_variable = ep3_laamp_decision_1000_is_excavating + } + } + } + + is_valid = { + any_character_task_contract = { task_contract_type = laamp_treasure_map_contract } + } + + widget = { + gui = "decision_view_widget_option_list_generic" + controller = decision_option_list_controller + decision_to_second_step_button = "TREASURE_MAP_CONTRACT_DECISION_NEXT_STEP_BUTTON" + item = { + value = travel_with_camp + localization = option_travel_with_camp + icon = "gfx/interface/icons/travel/icon_travel_hud_placeholder.dds" + ai_chance = { + value = 50 + } + } + item = { + value = travel_without_camp + localization = option_travel_without_camp + icon = "gfx/interface/icons/trait_level_tracks/travel.dds" + ai_chance = { + value = 50 + } + } + } + + effect = { + random_character_task_contract = { + limit = { has_variable = contract_treasure_location } + save_scope_as = task_contract + } + switch = { + trigger = yes + scope:travel_with_camp = { + start_travel_plan = { + destination = scope:task_contract.var:contract_treasure_location + travel_with_domicile = yes + return_trip = no + on_arrival_event = ep3_contract_event.0044 + on_arrival_destinations = last + } + } + scope:travel_without_camp = { + start_travel_plan = { + destination = scope:task_contract.var:contract_treasure_location + on_arrival_event = ep3_contract_event.0044 + } + } + } + custom_tooltip = treasure_map_contract_decision_effect_tooltip + #Make sure to remove this variable upon completion, invalidation, cancelling travel plan etc + set_variable = ep3_laamp_decision_1000_is_planning_excavation_trip + #To remove the variable for those who go into the travel planner but then decide not to travel to the Excavation Site + trigger_event = { + id = ep3_contract_event.0055 + days = 1 + } + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Reject Inheritance # +# by Ewan Cowhig Croft # +############################################# + +### Reject Inheritance ### +reject_inheritance_decision = { + # Laamp picture. + picture = { + trigger = { has_government = landless_adventurer_government } + reference = "gfx/interface/illustrations/decisions/ep3_decision_laamp_negative.dds" + } + # Everyone else's picture. + picture = { + trigger = { is_landless_adventurer = no } + reference = "gfx/interface/illustrations/decisions/decision_family_tree.dds" + } + desc = reject_inheritance_decision_desc + selection_tooltip = reject_inheritance_decision_tooltip + decision_group_type = adventurer_minor + + is_shown = { + # Only characters that don't want to obtain more titles. + can_access_reject_inheritance_decision_trigger = yes + # Standard filter checks. + is_playable_character = yes + exists = dynasty + # And naturally, you can't do this if you've already got the trait. + NOT = { has_trait = gallivanter } + } + + is_valid = { + # General access. + ## This is in twice (three times, even) so that we can show you _why_ you have access to this decision. + can_access_reject_inheritance_decision_trigger = yes + # Plus, you can't waffle on this. You get one wild phase per character. + NOT = { has_character_flag = has_embraced_responsibilities } + # Must be an heir to something, else this is just free stress loss. + trigger_if = { + limit = { is_landed = yes } + custom_tooltip = { + text = reject_inheritance_decision.tt.is_heir_to_higher_tier_title + any_heir_title = { + count >= 1 + tier >= root.highest_held_title_tier + } + } + } + } + + is_valid_showing_failures_only = { is_available_healthy_adult = yes } + + effect = { + # Sort trait shenanigans. + ## Fake-gain the trait — we do this up here so that it's at the top, but also so that the trait being added doesn't affect the stress block below.. + show_as_tooltip = { add_trait = gallivanter } + ## Next, we just _nuke_ your stress for this one. + stress_impact = { + base = -200 + arrogant = 100 + ambitious = 100 + diligent = 25 + } + ## Finally, actually add the trait. + hidden_effect = { + add_trait = gallivanter + # And flag how long you've had it for for removal purposes. + add_character_flag = { + flag = recently_added_gallivanter + years = 20 + } + } + # Opinion loss. + ## Lose a bunch of opinion with your family, who are not amused. + every_close_or_extended_family_member = { + limit = { would_judge_new_gallivanters_trigger = yes } + custom = custom.every_judgemental_close_or_extended_family_member + add_opinion = { + target = root + modifier = insulted_family_opinion + opinion = -30 + } + } + ## And your spouse(s), assuming they either have kids with you or were expecting to. + every_spouse = { + limit = { + would_judge_new_gallivanters_trigger = yes + OR = { + # They have children with you. + any_child = { + count >= 1 + NOT = { has_trait = disinherited } + any_parent = { this = root } + } + # Or thought they might. + AND = { + # Which means you're compatible for childbirth. + OR = { + AND = { + is_female = yes + age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE + root = { is_male = yes } + } + AND = { + is_male = yes + root = { + is_female = yes + age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE + } + } + } + can_have_children = yes + root = { can_have_children = yes } + } + } + } + add_opinion = { + target = root + modifier = insulted_family_opinion + opinion = -30 + } + } + # Plus make sure we flag this to players. + hidden_effect = { + every_player = { + limit = { + any_heir = { this = root } + } + send_interface_toast = { + type = event_toast_effect_neutral + title = disinherit_interaction_notification + left_icon = root + + root = { + show_as_tooltip = { + custom_tooltip = reject_inheritance_decision.tt.heir_rejects_inheritance + add_trait_force_tooltip = gallivanter + } + } + } + } + } + # Let newbs know that this doesn't rule them out of _all_ land. + custom_tooltip = reject_inheritance_decision.tt.newb_explainer + } + + cost = { prestige = 100 } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + NOR = { + has_realm_law = camp_purpose_legitimists + has_trait = arrogant + has_trait = ambitious + } + can_access_reject_inheritance_decision_trigger = yes + any_heir_title = { } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_will_do = { + # Start the base low so that you need a fair amount of positive reasons to take it. + base = -70 + + # Boost up for various traits. + ## +++ Content. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_3_value + has_trait = content + } + ## +++ Eccentric. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_3_value + has_trait = eccentric + } + ## ++ Lazy. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_2_value + has_trait = lazy + } + ## ++ Fickle. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_2_value + has_trait = fickle + } + ## ++ Humble. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_2_value + has_trait = humble + } + ## + Arbitrary. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_1_value + has_trait = arbitrary + } + ## + Craven. + modifier = { + add = @laamp_gallivanter_ai_will_do_bonus_1_value + has_trait = craven + } + # Hurt somewhat by others. + ## -- Greedy. + modifier = { + add = @laamp_gallivanter_ai_will_do_malus_2_value + has_trait = greedy + } + ## --- Diligent. + modifier = { + add = @laamp_gallivanter_ai_will_do_malus_3_value + has_trait = diligent + } + # Plus stress. + ## Level 1. + modifier = { + add = 25 + stress_level = 1 + } + ## Level 2. + modifier = { + add = 50 + stress_level = 2 + } + ## Level 3. + modifier = { + add = 75 + stress_level >= 3 + } + } +} + +############################################# +# Renounce Vows # +############################################# + +### Renounce Vows ### +renounce_vows_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/ep3_decision_laamp_neutral_mountain.dds" + } + desc = renounce_vows_decision_desc + selection_tooltip = renounce_vows_decision_tooltip + decision_group_type = adventurer_minor + + is_shown = { + has_government = landless_adventurer_government + has_trait = devoted + } + + is_valid = { + has_trait = devoted + } + + effect = { + stress_impact = { + zealous = medium_stress_impact_gain + humble = medium_stress_impact_gain + cynical = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + } + remove_trait = devoted + add_piety_level = -3 + } + + ai_potential = { + has_trait = devoted + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 64 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + NOT = { + any_child = { + count >= 2 + is_physically_able = yes + } + } + } + } +} + +### Embrace Responsibilities ### +embrace_responsibilities_decision = { + # Everyone else's picture. + picture = { reference = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" } + desc = embrace_responsibilities_decision_desc + selection_tooltip = embrace_responsibilities_decision_tooltip + decision_group_type = adventurer_minor + + is_shown = { + # Remove the trait from yourself. + has_trait = gallivanter + # Standard filter checks. + is_playable_character = yes + exists = dynasty + } + + is_valid = { + # We show the trait again so that we're explicit about what this means. + has_trait = gallivanter + NOR = { + # Can't access if you've accessed recently. + custom_tooltip = { + text = embrace_responsibilities_decision.tt.recently_added_gallivanter + has_character_flag = recently_added_gallivanter + } + # And, if you accessed gallivanter again via content somehow, then you can't remove it _again_. + custom_tooltip = { + text = embrace_responsibilities_decision.tt.has_embraced_responsibilities + has_character_flag = has_embraced_responsibilities + } + } + } + + is_valid_showing_failures_only = { is_available_healthy_adult = yes } + + effect = { + # Sort trait shenanigans. + ## Fake-lose the trait — we do this up here so that it's at the top, but also so that the trait being removed doesn't affect the stress block below.. + show_as_tooltip = { remove_trait = gallivanter } + ## Next, stress is quite high from this, unless you're keen for the resumption of responsibilities. + stress_impact = { + base = 100 + diligent = -10 + arrogant = -50 + ambitious = -80 + } + ## Plus make sure we flag this to players. + hidden_effect = { + every_player = { + limit = { + OR = { + # Normal inheritance. + any_close_or_extended_family_member = { this = root } + # House inheritance. + AND = { + has_realm_law = single_heir_dynasty_house + house = root.house + } + } + } + send_interface_toast = { + type = event_toast_effect_neutral + title = restore_inheritance_interaction_notification + left_icon = root + + root = { + show_as_tooltip = { + custom_tooltip = embrace_responsibilities_decision.tt.possible_heir_embraces_inheritance + remove_trait = gallivanter + } + } + } + } + } + ## Finally, actually toss the trait. + hidden_effect = { + remove_trait = gallivanter + # And flag how long you've had it for for removal purposes. + add_character_flag = { + flag = has_embraced_responsibilities + years = 10 + } + } + # Does anyone in our dynasty even have titles for us to care? + if = { + limit = { + dynasty = { + any_dynasty_member = { + is_ruler = yes + OR = { + # Holds an elective title, which will generally make families candidates. + any_held_title = { + # Pre-filter out to higher tiers. + title_tier >= kingdom + # Aaand then check if they're actually elective. + has_title_law_flag = elective_succession_law + } + # Holds house seniority, in which case if we're the same house... + AND = { + has_realm_law = single_heir_dynasty_house + house = root.house + } + # Is an ancestor, which we spoof a smidge. + OR = { + is_parent_of = root + is_grandparent_of = root + is_great_grandparent_of = root + } + } + } + } + } + # Reinheritance can take a bit, unlike disinheritance, so we tell the player not to worry. + custom_tooltip = embrace_responsibilities_decision.tt.effects_delayed + # Opinion loss. + ## Lose a bunch of opinion with your family, who don't appreciate the upset. + ### It'd be very annoying to try to set this up to _only_ grab the family who are below you in succession for each type of succession, largely because succession won't update immediately on removal of the trait, so we just assume you piss off everyone a little. + every_close_or_extended_family_member = { + limit = { + # Excepting direct descendants or partners. + NOR = { + any_ancestor = { this = root } + is_consort_of = root + } + } + custom = custom.every_close_or_extended_family_member + add_opinion = { + target = root + modifier = barging_into_succession_opinion + opinion = -20 + } + } + } + } + + cost = { prestige = 400 } + ai_check_interval = 0 +} + +############################################# +# Reject Election # +# by Ewan Cowhig Croft # +############################################# + +### Change Election Candidacy Status ### +change_election_candidacy_status_decision = { + # Everyone else's picture. + picture = { reference = "gfx/interface/illustrations/decisions/decision_found_kingdom.dds" } + desc = { + first_valid = { + triggered_desc = { + trigger = { has_variable = rejects_electioneering } + desc = change_election_candidacy_status_decision_desc.embrace + } + desc = change_election_candidacy_status_decision_desc.reject + } + } + selection_tooltip = change_election_candidacy_status_decision_tooltip + + is_shown = { + is_ai = no + liege = { + any_held_title = { + title_tier >= kingdom + has_title_law_flag = elective_succession_law + } + } + } + + is_valid = { + custom_tooltip = { + text = change_election_candidacy_status_decision.tt.you_are_an_election_candidate + liege = { + any_held_title = { + title_tier >= kingdom + has_title_law_flag = elective_succession_law + any_election_candidate = { this = root } + } + } + } + } + + cooldown = { years = 20 } + + effect = { + # If we already do not want to be a candidate, then step up. + if = { + limit = { has_variable = rejects_electioneering } + remove_variable = rejects_electioneering + custom_tooltip = change_election_candidacy_status_decision.tt.embraces_candidacy + liege = { + add_opinion = { + target = root + modifier = indecision_opinion + opinion = -25 + } + every_vassal = { + custom = custom.every_co_vassal_not_arrogant_or_ambitious + limit = { + NOR = { + has_trait = arrogant + has_trait = ambitious + } + } + add_opinion = { + target = root + modifier = indecision_opinion + opinion = -25 + } + } + } + } + # Otherwise, we are a candidate that wants not to be, so step down. + else = { + set_variable = { + name = rejects_electioneering + value = yes + } + custom_tooltip = change_election_candidacy_status_decision.tt.renounces_candidacy + liege = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = -25 + } + every_vassal = { + custom = custom.every_co_vassal_not_humble_or_content + limit = { + NOR = { + has_trait = humble + has_trait = content + } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = -25 + } + } + } + } + } + + cost = { prestige = 250 } + ai_check_interval = 0 +} + +############################################# +# Bandit King +############################################# + +### Levy the Outcasts ### +bandit_king_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_levy_outcasts.dds" } + desc = bandit_king_decision_desc + decision_group_type = adventurer + selection_tooltip = bandit_king_decision_tooltip + sort_order = 150 + + is_shown = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + NOT = { has_character_flag = bandit_king_var } + } + + is_valid = { + calc_true_if = { + amount >= 3 + has_trait = ambitious + has_trait = schemer + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 40 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 40 + } + } + } + + effect = { + add_character_flag = bandit_king_var + show_as_tooltip = { become_bandit_king_decision_effect = yes } + custom_tooltip = bandit_king_decision_reward + trigger_event = ep3_laamp_decision_event.1120 + } + + cost = { + gold = 500 + prestige = 2000 + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Gather Provisions +# by Joe Parkin +############################################# + +### Gather Provisions ### +gather_provisions_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/ep3_decision_laamp_neutral_mountain.dds" } + desc = gather_provisions_decision_desc + selection_tooltip = gather_provisions_decision_tooltip + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + sort_order = 200 + cooldown = { years = 3 } + decision_group_type = adventurer_minor + + is_shown = { + #DLC check. + has_ep3_dlc_trigger = yes + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + } + + is_valid_showing_failures_only = { + is_available_allow_travelling = yes + } + + effect = { + custom_tooltip = { + text = gather_provisions_decision_effect_tt + trigger_event = ep3_decisions_event.7000 + } + close_view = { + view = decisions + player = root + } + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + domicile ?= { provisions < max_provisions } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# The Travels of CHAR.Root +# by Krzysztof Lankowski +############################################# + +### The Travels of [ROOT.Char.GetFullNameNoTooltip] ### +seasoned_visitor_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/fp3/fp3_decision_foundation.dds" + } + sort_order = 200 + decision_group_type = adventurer + desc = seasoned_visitor_decision_desc + selection_tooltip = seasoned_visitor_decision_tooltip + + is_shown = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + NOT = { + has_character_flag = had_seasoned_visitor_decision + } + } + + is_valid = { + custom_tooltip = { + text = seasoned_visitor_decision_not_enough_poi + has_variable = poi_visited + var:poi_visited >= 26 #1066 all poi in India. If you change the value here, please also change the value in loc string above + } + calc_true_if = { + amount >= 2 + custom_tooltip = { + text = seasoned_visitor_decision_not_enough_poi_advanced + has_variable = poi_visited + var:poi_visited >= 42 #1066 all poi in two Indias. If you change the value here, please also change the value in loc string above + } + prestige_level >= 4 + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 60 + } + } + } + + is_valid_showing_failures_only = { + NOT = { + has_trait = incapable + } + } + + cost = { + prestige = 1500 + gold = 500 + } + + effect = { + custom_tooltip = { + text = seasoned_visitor_decision_reward_desc + } + hidden_effect = { + trigger_event = ep3_laamp_decision_event.1100 + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# A Catholic Path +# by Krzysztof Lankowski +############################################# + +### The [ROOT.Char.GetFaith.GetAdherentNameNoTooltip] Path — Ascension ### +zealous_missionary_prep_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" + } + sort_order = 200 + decision_group_type = adventurer + desc = zealous_missionary_prep_decision_desc + selection_tooltip = zealous_missionary_prep_decision_tooltip + + is_shown = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + is_adult = yes + NOR = { + has_trait = cynical + has_character_flag = zealous_missionary_prep + } + } + + is_valid = { + calc_true_if = { + amount >= 2 + custom_tooltip = { + text = zealous_missionary_prep_decision_holy_sites_visited_req + has_variable = visited_unique_holy_sites_count + OR = { + var:visited_unique_holy_sites_count >= 2 + is_ai = yes + } + + } + has_trait = theologian + piety_level >= 4 + } + + + custom_tooltip = { + text = zealous_missionary_prep_decision_holy_site + OR = { + AND = { + is_ai = no + location = { + barony = { + is_holy_site_of = root.faith + } + county.faith = root.faith + county.holder.top_liege.faith = root.faith + } + } + AND = { + is_ai = yes + has_trait = zealous + learning > 18 + NOT = { + any_player = { + faith = location.faith + } + } + current_month = 4 # 12 times less ai missionaries getting spawned + } + } + } + } + + is_valid_showing_failures_only = { + NOT = { + has_trait = incapable + } + } + + cost = { + piety = 2500 + } + + effect = { + if = { + limit = { + NOT = { + has_trait = zealous + } + } + add_trait = zealous + add_stress = medium_stress_gain + } + hidden_effect = { + trigger_event = ep3_laamp_decision_event.1101 + add_character_flag = zealous_missionary_prep + } + custom_tooltip = { + text = zealous_missionary_prep_decision_reward_desc + } + if = { + limit = { + any_owned_story = { + story_type = story_hasan + } + } + custom_tooltip = chance_to_advance_to_the_assassins_tt + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + ai_zeal >= 50 + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +### The [ROOT.Char.GetFaith.GetAdherentNameNoTooltip] Path — Prelude ### +zealous_missionary_start_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" + } + sort_order = 400 + decision_group_type = adventurer + desc = zealous_missionary_prep_decision_desc + selection_tooltip = zealous_missionary_prep_decision_tooltip + + is_shown = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + has_character_flag = zealous_missionary_prep + NOR = { + has_character_flag = zealous_missionary_start + is_ai = yes + any_player = { + OR = { + this = location.county.holder + this = location.county.holder.top_liege + } + } + } + } + + is_valid = { + location.county = { hasan_evangelize_province_trigger = yes } + } + + is_valid_showing_failures_only = { + NOT = { + has_trait = incapable + } + } + + effect = { + custom_tooltip = { + text = zealous_missionary_start_decision_reward_desc + } + show_as_tooltip = { + ep3_hasan_advance_radicalism = yes + } + hidden_effect = { + trigger_event = ep3_laamp_decision_event.1102 + } + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + ai_zeal >= 50 + has_character_flag = zealous_missionary_prep + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Become Conqueror +# by Krzysztof Lankowski +############################################# + +### Become a Great Conqueror ### +become_conqueror_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/fp2_decision_struggle_hostility.dds" + } + sort_order = 400 + decision_group_type = adventurer + desc = become_conqueror_decision_desc + selection_tooltip = become_conqueror_decision_tooltip + + is_shown = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + NOR = { + has_game_rule = no_conquerors_frequency + has_character_flag = had_laamp_conq_decision + has_trait = conqueror + } + trigger_if = { + limit = { + is_ai = yes + OR = { + exists = location.county.holder + exists = location.duchy.holder + exists = location.county.holder.top_liege + } + } + NOT = { + any_player = { + OR = { + this = location.county.holder + this = location.duchy.holder + this = location.county.holder.top_liege + } + } + } + } + } + + is_valid = { + calc_true_if = { + amount >= 8 + martial >= 22 + prestige_level >= 5 + AND = { + has_trait = strategist + has_trait = gallant + } + custom_tooltip = { + text = become_conqueror_decision_war_participation + any_memory = { + count >= 20 + OR = { + has_memory_type = offensive_war + has_memory_type = defensive_war + has_memory_type = joined_allys_war + } + } + } + custom_tooltip = { + text = become_conqueror_decision_war_participation_kingdom + any_memory = { + count >= 5 + OR = { + has_memory_type = offensive_war + has_memory_type = defensive_war + has_memory_type = joined_allys_war + } + any_memory_participant = { + primary_title.tier >= tier_kingdom + } + } + } + calc_true_if = { + amount >= 1 + custom_tooltip = { + text = become_conqueror_decision_two_commander_traits + any_character_trait = { + count >= 2 + has_trait_category = commander + } + } + martial >= 28 + } + + custom_tooltip = { + text = become_conqueror_decision_enough_troops + current_military_strength >= 4000 + } + custom_tooltip = { + text = become_conqueror_decision_enough_battle_kills + any_killed_character = { + count >= 12 + } + } + custom_tooltip = { + text = become_conqueror_decision_enough_war_contracts + has_variable = war_contract_tracker + var:war_contract_tracker >= 20 + } + calc_true_if = { + amount >= 1 + custom_tooltip = { + text = become_conqueror_decision_enough_high_level_knights + any_knight = { + count >= 6 + prowess >= 18 + } + } + custom_tooltip = { + text = become_conqueror_decision_enough_mediocre_knights + any_knight = { + count >= 12 + prowess >= 12 + } + } + } + + } + } + + is_valid_showing_failures_only = { + NOT = { + has_trait = incapable + } + } + + cost = { + prestige = 5000 + } + + effect = { + custom_tooltip = become_conqueror_decision_reward + custom_tooltip = become_conqueror_decision_troops + if = { + limit = { has_dlc_feature = legends } + custom_tooltip = become_conqueror_decision_legend_seed + } + trigger_event = ep3_laamp_decision_event.1110 + show_as_tooltip = { + 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 + } + } + } + + } + ai_check_interval = 0 +} + +############################################# +# Found a City +# by Krzysztof Lankowski +############################################# + +### Found a Holding ### +start_city_construction_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/ep3_decision_city.dds" + } + sort_order = 200 + decision_group_type = adventurer + desc = start_city_construction_decision_desc + selection_tooltip = start_city_construction_decision_tooltip + + is_shown = { + has_ep3_dlc_trigger = yes + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + NOT = { has_character_flag = laamp_city_builder } + } + + is_valid = { + custom_tooltip = { + text = start_city_construction_decision_empty_holding + exists = location.county.holder + location = { has_holding = no } + } + culture = { has_innovation = innovation_city_planning } + location.county.holder ?= { + opinion = { + target = root + value >= 10 + } + } + calc_true_if = { + amount >= 3 + gold >= 1000 + piety_level >= 3 + prestige_level >= 3 + has_trait = architect + stewardship >= 18 + } + } + + is_valid_showing_failures_only = { + NOT = { has_trait = incapable } + } + + cost = { + gold = 400 + } + + effect = { + if = { + limit = { + location.county.holder = { government_has_flag = government_is_mandala } + } + show_as_tooltip = { + location = { + begin_create_holding = { type = temple_citadel_holding } + } + } + set_variable = { + name = city_construction_is_temple_citadel + value = location.county + } + } + else = { + show_as_tooltip = { + location = { + begin_create_holding = { type = castle_holding } + } + } + set_variable = { + name = city_construction_is_castle + value = location.county + } + } + custom_tooltip = start_city_construction_decision_more_rewards + trigger_event = ep3_laamp_decision_event.1130 + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + } + + ai_will_do = { + base = 100 + } +} + +############################################# +# Become a Knight Errant +############################################# + +### The $knight_culture_player_no_tooltip$ of the [ROOT.Char.CustomFixedRandom('GetKnightErrantAnimal')|U] ### +knight_errant_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_tale.dds" } + desc = knight_errant_decision_desc + decision_group_type = adventurer + selection_tooltip = knight_errant_decision_tooltip + sort_order = 300 + + is_shown = { + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + NOT = { has_trait = knight_errant } + NOT = { has_variable = knight_errant_decision_var } + } + + is_valid = { + prestige_level >= 4 + custom_tooltip = { + text = camp_purpose_mercenaries_tt + has_realm_law = camp_purpose_mercenaries + } + NOT = { has_trait = gallowsbait } + trigger_if = { + limit = { + has_variable = justicar_contracts_succeeded_counter + } + save_temporary_scope_value_as = { + name = contract_tally + value = var:justicar_contracts_succeeded_counter + } + } + trigger_else = { + save_temporary_scope_value_as = { + name = contract_tally + value = 0 + } + } + custom_tooltip = { + text = knight_errant_decision_tt + has_variable = justicar_contracts_succeeded_counter + var:justicar_contracts_succeeded_counter >= 10 + } + } + + is_valid_showing_failures_only = { + NOR = { + is_available = no + has_trait = infirm + is_incapable = yes + } + } + + cost = { + prestige = 2000 + } + + effect = { + set_variable = knight_errant_decision_var + show_as_tooltip = { + disburse_knight_errant_decision_rewards_effect = yes + } + trigger_event = ep3_decisions_event.5001 + } + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 32 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + ai_potential = { + ai_honor >= 25 + OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } + prestige > 500 + NOT = { has_trait = arrogant } + } + + ai_will_do = { + base = 50 + modifier = { + add = -30 + has_trait = humble + } + } +} + +############################################# +# Butcher Animals # +# by Ewan Cowhig Croft # +############################################# + +### Butcher Animals Decision ### +butcher_animals_decision = { + title = butcher_animals_decision_name + picture = { reference = "gfx/interface/illustrations/decisions/decision_pet_dog.dds" } + desc = butcher_animals_decision_desc + selection_tooltip = butcher_animals_decision_tooltip + decision_group_type = adventurer + + sort_order = 80 + + is_shown = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard filters. + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + # Flavour checks. + ## We deliberately don't show you this most of the time — it should be hidden unless things are absolutely dire. + domicile.provisions <= 500 + } + + is_valid = { + OR = { + # Dogs. + butcher_animals_decision_available_dogs_trigger = yes + # Cats. + butcher_animals_decision_available_cats_trigger = yes + # Horses. + butcher_animals_decision_available_horses_trigger = yes + # Elephants. + butcher_animals_decision_available_elephants_trigger = yes + } + } + + is_valid_showing_failures_only = { + # Standard checks. + is_available_allow_travelling = yes + # Shouldn't be at war. + is_at_war = no + } + + widget = { + gui = "decision_view_widget_option_list_generic" + controller = decision_option_list_controller + decision_to_second_step_button = "BUTCHER_ANIMALS_DECISION_NEXT_STEP_BUTTON" + item = { + value = butcher_dogs + is_valid = { + custom_tooltip = { + text = butcher_animals_decision.tt.you_have_no_dogs + butcher_animals_decision_available_dogs_trigger = yes + } + } + localization = butcher_animals_decision_option_dogs + icon = "gfx/interface/icons/pets/artifact_dog_folded_ears_fox_colored.dds" + } + item = { + value = butcher_cats + is_valid = { + custom_tooltip = { + text = butcher_animals_decision.tt.you_have_no_cats + butcher_animals_decision_available_cats_trigger = yes + } + } + localization = butcher_animals_decision_option_cats + icon = "gfx/interface/icons/pets/artifact_cat_tabby.dds" + } + item = { + value = butcher_horses + is_valid = { + custom_tooltip = { + text = butcher_animals_decision.tt.you_have_no_horses + butcher_animals_decision_available_horses_trigger = yes + } + } + localization = butcher_animals_decision_option_horses + icon = "gfx/interface/icons/regimenttypes/konni.dds" + } + item = { + value = butcher_elephants + is_valid = { + custom_tooltip = { + text = butcher_animals_decision.tt.you_have_no_elephants + butcher_animals_decision_available_elephants_trigger = yes + } + } + localization = butcher_animals_decision_option_elephants + icon = "gfx/interface/icons/regimenttypes/war_elephants.dds" + } + } + + cost = { prestige = medium_prestige_value } + + effect = { + show_as_tooltip = { + random_list = { + 100 = { + show_chance = no + desc = butcher_animals_decision.tt.dogs + custom_tooltip = butcher_animals_decision.tt.provisions_gain.per_dog_mod + custom_tooltip = butcher_animals_decision.tt.provisions_gain.building.dog + custom_tooltip = butcher_animals_decision.tt.cooldown.dogs + } + 100 = { + show_chance = no + desc = butcher_animals_decision.tt.cats + custom_tooltip = butcher_animals_decision.tt.provisions_gain.per_cat_mod + custom_tooltip = butcher_animals_decision.tt.cooldown.cats + } + 100 = { + show_chance = no + desc = butcher_animals_decision.tt.horses + # War horse is niche content, so we don't show it unless it applies. + if = { + limit = { has_character_modifier = horse_story_modifier } + custom_tooltip = butcher_animals_decision.tt.provisions_gain.your_horse_mod + } + custom_tooltip = butcher_animals_decision.tt.provisions_gain.building.horse + custom_tooltip = butcher_animals_decision.tt.cooldown.horses + } + 100 = { + show_chance = no + desc = butcher_animals_decision.tt.elephants + custom_tooltip = butcher_animals_decision.tt.provisions_gain.building.elephant + custom_tooltip = butcher_animals_decision.tt.cooldown.elephants + } + } + } + switch = { + trigger = yes + scope:butcher_dogs = { trigger_event = ep3_laamp_decision_event.1201 } + scope:butcher_cats = { trigger_event = ep3_laamp_decision_event.1202 } + scope:butcher_horses = { trigger_event = ep3_laamp_decision_event.1203 } + scope:butcher_elephants = { trigger_event = ep3_laamp_decision_event.1204 } + } + } + ai_check_interval = 0 +} + +############################################# +# Humiliate the Stooge +############################################# + +### Humiliate the Stooge ### +humiliate_the_stooge_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_prison.dds" } + desc = humiliate_the_stooge_decision_desc + selection_tooltip = humiliate_the_stooge_decision_tooltip + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 24 + kingdom = 0 + empire = 0 + hegemony = 0 + } + sort_order = 150 + decision_group_type = adventurer_minor + + cooldown = { years = 2 } + + ai_potential = { + stress > 0 + } + + is_shown = { + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + } + + is_valid = { + employs_court_position = stooge_camp_officer + } + + is_valid_showing_failures_only = { + NOR = { + is_available = no + has_trait = infirm + is_incapable = yes + } + } + + cost = { + prestige = 20 + } + + effect = { + custom_tooltip = humiliate_the_stooge_decision_rewards + random_courtier = { + limit = { has_court_position = stooge_camp_officer } + save_scope_as = stooge + } + scope:stooge ?= { + humiliate_stooge_counter_effect = yes + } + humiliate_stooge_reward_effect = yes + close_view = { + view = decisions + player = root + } + } + + ai_will_do = { + base = 50 + modifier = { + add = -50 + has_trait = compassionate + } + modifier = { + add = 50 + OR = { + has_trait = callous + has_trait = sadistic + } + } + modifier = { + add = -50 + prestige <= 50 + } + } +} diff --git a/common/defines/00_defines.txt b/common/defines/00_defines.txt index a429576b..deda2994 100644 --- a/common/defines/00_defines.txt +++ b/common/defines/00_defines.txt @@ -43,7 +43,7 @@ NSetup = { # chance that a courtless character is sent to a court as a guest instead of a regular courtier on game start (0..1) COURTLESS_CHARACTER_GUEST_CHANCE = 0 # Random range for number of characters per pool (duchy) generated at the start of the game - GENERATED_POOL_CHARACTERS = { 2 6 } + GENERATED_POOL_CHARACTERS = { 2 9 } # Templates used for the pool character. The weights correspond to the template names at the same index. # The scope of the template is a random ruler whose capital is in that pool. GENERATED_POOL_CHARACTER_TEMPLATES = { @@ -549,6 +549,7 @@ NGovernment = { "holy_order_government" "administrative_government" "landless_adventurer_government" + "landless_minority_government" "nomad_government" "herder_government" "celestial_government" diff --git a/common/domiciles/buildings/00_camp_buildings.txt b/common/domiciles/buildings/00_camp_buildings.txt index e066e7ee..b1831b87 100644 --- a/common/domiciles/buildings/00_camp_buildings.txt +++ b/common/domiciles/buildings/00_camp_buildings.txt @@ -4469,7 +4469,7 @@ proving_grounds_01 = { } proving_grounds_02 = { construction_time = @camp_building_main_slot_construction_duration_t2 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 internal_slots = 2 @@ -4518,7 +4518,7 @@ proving_grounds_02 = { } proving_grounds_03 = { construction_time = @camp_building_main_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_02 internal_slots = 3 @@ -4567,7 +4567,7 @@ proving_grounds_03 = { } proving_grounds_04 = { construction_time = @camp_building_main_slot_construction_duration_t4 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_03 internal_slots = 4 @@ -4619,7 +4619,7 @@ proving_grounds_04 = { } proving_grounds_05 = { construction_time = @camp_building_main_slot_construction_duration_t5 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_04 internal_slots = 5 @@ -4670,7 +4670,7 @@ proving_grounds_05 = { } proving_grounds_06 = { construction_time = @camp_building_main_slot_construction_duration_t6 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_05 internal_slots = 6 @@ -4725,7 +4725,7 @@ proving_grounds_06 = { proving_grounds_horse_run = { # Horse Run slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t2 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_horse_run_domicile_building_gold_cost_value } @@ -4790,7 +4790,7 @@ proving_grounds_horse_run = { # Horse Run proving_grounds_camel_run = { # Camel Run slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t2 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_camel_run_domicile_building_gold_cost_value } @@ -4859,7 +4859,7 @@ proving_grounds_camel_run = { # Camel Run proving_grounds_elephantry_reserve = { # Elephantry Reserve slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_elephantry_reserve_domicile_building_gold_cost_value } @@ -4922,7 +4922,7 @@ proving_grounds_elephantry_reserve = { # Elephantry Reserve proving_grounds_nightly_barding_drills = { # Nightly Barding Drills slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_nightly_barding_drills_domicile_building_gold_cost_value } @@ -4987,7 +4987,7 @@ proving_grounds_nightly_barding_drills = { # Nightly Barding Drills proving_grounds_life_in_the_saddle = { # Life in the Saddle slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_life_in_the_saddle_domicile_building_gold_cost_value } @@ -5065,7 +5065,7 @@ proving_grounds_life_in_the_saddle = { # Life in the Saddle proving_grounds_the_stump = { # The Stump slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_the_stump_domicile_building_gold_cost_value } @@ -5130,7 +5130,7 @@ proving_grounds_the_stump = { # The Stump proving_grounds_personal_bouts = { # Personal Bouts slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_personal_bouts_domicile_building_gold_cost_value } @@ -5196,7 +5196,7 @@ proving_grounds_personal_bouts = { # Personal Bouts proving_grounds_training_circle = { # Training Circle slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_training_circle_domicile_building_gold_cost_value } @@ -5262,7 +5262,7 @@ proving_grounds_training_circle = { # Training Circle proving_grounds_mock_battle_drills = { # Mock Battle Drills slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_mock_battle_drills_domicile_building_gold_cost_value } @@ -5327,7 +5327,7 @@ proving_grounds_mock_battle_drills = { # Mock Battle Drills proving_grounds_lockwagon = { # Lockwagon slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t2 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_lockwagon_domicile_building_gold_cost_value } @@ -5392,7 +5392,7 @@ proving_grounds_lockwagon = { # Lockwagon proving_grounds_martial_study = { # Martial Study slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_martial_study_domicile_building_gold_cost_value } @@ -5454,7 +5454,7 @@ proving_grounds_martial_study = { # Martial Study proving_grounds_the_stick_game = { # The Stick Game slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t1 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_the_stick_game_domicile_building_gold_cost_value } @@ -5514,7 +5514,7 @@ proving_grounds_the_stick_game = { # The Stick Game proving_grounds_bodyguard_drills = { # Bodyguard Drills slot_type = internal construction_time = @camp_building_internal_slot_construction_duration_t3 - allowed_domicile_types = { camp } + allowed_domicile_types = { camp} previous_building = proving_grounds_01 cost = { gold = proving_grounds_bodyguard_drills_domicile_building_gold_cost_value } diff --git a/common/domiciles/buildings/00_estate_buildings.txt b/common/domiciles/buildings/00_estate_buildings.txt index ce30cef1..9b57c94f 100644 --- a/common/domiciles/buildings/00_estate_buildings.txt +++ b/common/domiciles/buildings/00_estate_buildings.txt @@ -425,7 +425,7 @@ estate_main_05 = { ### Diplomacy Upgrade living_quarters_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -462,7 +462,7 @@ living_quarters_01 = { } living_quarters_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = living_quarters_01 @@ -501,7 +501,7 @@ living_quarters_02 = { } living_quarters_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = living_quarters_02 @@ -543,12 +543,12 @@ living_quarters_03 = { } living_quarters_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = living_quarters_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -588,7 +588,7 @@ living_quarters_04 = { ### Martial Upgrade trophy_room_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -620,7 +620,7 @@ trophy_room_01 = { } trophy_room_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = trophy_room_01 @@ -653,7 +653,7 @@ trophy_room_02 = { } trophy_room_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = trophy_room_02 @@ -694,12 +694,12 @@ trophy_room_03 = { } trophy_room_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = trophy_room_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -738,7 +738,7 @@ trophy_room_04 = { ### Stewardship Upgrade office_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -775,7 +775,7 @@ office_01 = { } office_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = office_01 @@ -813,7 +813,7 @@ office_02 = { } office_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = office_02 @@ -856,12 +856,12 @@ office_03 = { } office_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = office_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -902,7 +902,7 @@ office_04 = { ### Intrigue Upgrade servants_quarters_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -935,7 +935,7 @@ servants_quarters_01 = { } servants_quarters_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = servants_quarters_01 @@ -971,7 +971,7 @@ servants_quarters_02 = { } servants_quarters_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = servants_quarters_02 @@ -1012,12 +1012,12 @@ servants_quarters_03 = { } servants_quarters_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = servants_quarters_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -1057,7 +1057,7 @@ servants_quarters_04 = { ### Learning Upgrade library_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -1089,7 +1089,7 @@ library_01 = { } library_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = library_01 @@ -1127,7 +1127,7 @@ library_02 = { # Observatory sub-branch library_observatory_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = library_02 @@ -1168,12 +1168,12 @@ library_observatory_03 = { } library_observatory_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = library_observatory_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -1211,7 +1211,7 @@ library_observatory_04 = { # Education sub-branch library_education_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = library_02 @@ -1252,12 +1252,12 @@ library_education_03 = { } library_education_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = library_education_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -1297,7 +1297,7 @@ library_education_04 = { ### Bath bath_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -1334,7 +1334,7 @@ bath_01 = { } bath_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = bath_01 @@ -1372,7 +1372,7 @@ bath_02 = { } bath_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = bath_02 @@ -1414,12 +1414,12 @@ bath_03 = { } bath_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = bath_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -1458,7 +1458,7 @@ bath_04 = { ### Guest Room guest_room_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -1499,7 +1499,7 @@ guest_room_01 = { } guest_room_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = guest_room_01 @@ -1543,7 +1543,7 @@ guest_room_02 = { } guest_room_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = guest_room_02 @@ -1592,12 +1592,12 @@ guest_room_03 = { } guest_room_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = guest_room_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -1640,7 +1640,7 @@ guest_room_04 = { } guest_room_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = guest_room_04 @@ -1689,7 +1689,7 @@ guest_room_05 = { } guest_room_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = guest_room_05 @@ -1739,7 +1739,7 @@ guest_room_06 = { ### Wine Cellar wine_cellar_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -1781,7 +1781,7 @@ wine_cellar_01 = { } wine_cellar_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = wine_cellar_01 @@ -1823,7 +1823,7 @@ wine_cellar_02 = { } wine_cellar_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = wine_cellar_02 @@ -1867,7 +1867,7 @@ wine_cellar_03 = { ### Courtyard courtyard_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -1903,7 +1903,7 @@ courtyard_01 = { } courtyard_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = courtyard_01 @@ -1940,7 +1940,7 @@ courtyard_02 = { } courtyard_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = courtyard_02 @@ -1981,12 +1981,12 @@ courtyard_03 = { } courtyard_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = courtyard_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -2024,7 +2024,7 @@ courtyard_04 = { ### Prison prison_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -2069,7 +2069,7 @@ prison_01 = { } prison_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = prison_01 @@ -2118,7 +2118,7 @@ prison_02 = { } prison_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = prison_02 @@ -2172,12 +2172,12 @@ prison_03 = { } prison_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = prison_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -2228,7 +2228,7 @@ prison_04 = { ### Reception Hall reception_hall_01 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -2270,7 +2270,7 @@ reception_hall_01 = { reception_hall_02 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = reception_hall_01 @@ -2313,7 +2313,7 @@ reception_hall_02 = { reception_hall_03 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = reception_hall_02 @@ -2357,13 +2357,13 @@ reception_hall_03 = { reception_hall_04 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = reception_hall_03 can_construct = { dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_3 } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -2401,7 +2401,7 @@ reception_hall_04 = { reception_hall_05 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = reception_hall_04 @@ -2446,7 +2446,7 @@ reception_hall_05 = { ### Cabinet of Curiosities cabinet_of_curiosities_01 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -2490,7 +2490,7 @@ cabinet_of_curiosities_01 = { cabinet_of_curiosities_02 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = cabinet_of_curiosities_01 @@ -2544,7 +2544,7 @@ cabinet_of_curiosities_02 = { cabinet_of_curiosities_03 = { construction_time = 1000 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = cabinet_of_curiosities_02 @@ -2601,7 +2601,7 @@ cabinet_of_curiosities_03 = { #Grand Solar grand_solar_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = estate_main_01 @@ -2642,7 +2642,7 @@ grand_solar_01 = { grand_solar_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = grand_solar_01 @@ -2683,7 +2683,7 @@ grand_solar_02 = { grand_solar_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = grand_solar_02 @@ -2726,7 +2726,7 @@ grand_solar_03 = { grand_solar_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } slot_type = internal previous_building = grand_solar_03 @@ -2735,7 +2735,7 @@ grand_solar_04 = { text = unlocked_via_event house.house_head = { has_character_flag = ep3_construct_grand_solar } } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } parameters = { @@ -2778,7 +2778,7 @@ grand_solar_04 = { ### Temple Building temple_small_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } can_construct = { NOT = { @@ -2918,7 +2918,7 @@ temple_small_01 = { } temple_small_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_small_01 cost = { @@ -3053,7 +3053,7 @@ temple_small_02 = { } temple_small_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_small_02 can_construct = { @@ -3194,11 +3194,11 @@ temple_small_03 = { # Crypt sub-branch temple_crypt_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_small_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -3348,7 +3348,7 @@ temple_crypt_04 = { } temple_crypt_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_crypt_04 can_construct = { @@ -3502,7 +3502,7 @@ temple_crypt_05 = { } temple_crypt_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_crypt_05 can_construct = { @@ -3659,11 +3659,11 @@ temple_crypt_06 = { # Temple sub-branch temple_large_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_small_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -3801,7 +3801,7 @@ temple_large_04 = { } temple_large_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_large_04 can_construct = { @@ -3943,7 +3943,7 @@ temple_large_05 = { } temple_large_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_large_05 can_construct = { @@ -4089,12 +4089,12 @@ temple_large_06 = { # Monastery sub-branch temple_monastery_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_small_03 can_construct = { faith = { has_doctrine = tenet_monasticism } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -4234,7 +4234,7 @@ temple_monastery_04 = { } temple_monastery_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_monastery_04 can_construct = { @@ -4379,7 +4379,7 @@ temple_monastery_05 = { } temple_monastery_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = temple_monastery_05 can_construct = { @@ -4526,7 +4526,7 @@ temple_monastery_06 = { ### Barracks barracks_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -4609,7 +4609,7 @@ barracks_01 = { } barracks_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = barracks_01 cost = { @@ -4697,7 +4697,7 @@ barracks_02 = { } barracks_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = barracks_02 can_construct = { @@ -4789,7 +4789,7 @@ barracks_03 = { } barracks_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = barracks_03 can_construct = { @@ -4881,7 +4881,7 @@ barracks_04 = { } barracks_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = barracks_04 can_construct = { @@ -4973,7 +4973,7 @@ barracks_05 = { } barracks_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = barracks_05 can_construct = { @@ -5067,7 +5067,7 @@ barracks_06 = { ### Watchtower watchtower_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -5148,7 +5148,7 @@ watchtower_01 = { } watchtower_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = watchtower_01 cost = { @@ -5232,7 +5232,7 @@ watchtower_02 = { } watchtower_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = watchtower_02 can_construct = { @@ -5320,11 +5320,11 @@ watchtower_03 = { } watchtower_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = watchtower_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -5409,7 +5409,7 @@ watchtower_04 = { } watchtower_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = watchtower_04 can_construct = { @@ -5498,7 +5498,7 @@ watchtower_05 = { } watchtower_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = watchtower_05 can_construct = { @@ -5590,7 +5590,7 @@ watchtower_06 = { ### Guardhouse guardhouse_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -5671,7 +5671,7 @@ guardhouse_01 = { } guardhouse_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = guardhouse_01 cost = { @@ -5754,7 +5754,7 @@ guardhouse_02 = { } guardhouse_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = guardhouse_02 can_construct = { @@ -5843,7 +5843,7 @@ guardhouse_03 = { } guardhouse_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = guardhouse_03 can_construct = { @@ -5934,7 +5934,7 @@ guardhouse_04 = { ### Garden garden_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -6054,7 +6054,7 @@ garden_01 = { } garden_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_01 cost = { @@ -6175,7 +6175,7 @@ garden_02 = { } garden_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_02 cost = { @@ -6298,7 +6298,7 @@ garden_03 = { # Leisure Garden sub-branch garden_leisure_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_03 can_construct = { @@ -6425,7 +6425,7 @@ garden_leisure_04 = { } garden_leisure_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_leisure_04 can_construct = { @@ -6552,7 +6552,7 @@ garden_leisure_05 = { } garden_leisure_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_leisure_05 can_construct = { @@ -6681,7 +6681,7 @@ garden_leisure_06 = { # Fruit Garden sub-branch garden_fruit_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_03 can_construct = { @@ -6807,7 +6807,7 @@ garden_fruit_04 = { } garden_fruit_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_fruit_04 can_construct = { @@ -6933,7 +6933,7 @@ garden_fruit_05 = { } garden_fruit_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = garden_fruit_05 can_construct = { @@ -7060,7 +7060,7 @@ garden_fruit_06 = { ### Stable stable_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -7142,7 +7142,7 @@ stable_01 = { } stable_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_01 cost = { @@ -7229,7 +7229,7 @@ stable_02 = { } stable_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_02 cost = { @@ -7318,11 +7318,11 @@ stable_03 = { # Grand Stable sub-branch stable_grand_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -7403,7 +7403,7 @@ stable_grand_04 = { } stable_grand_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_grand_04 can_construct = { @@ -7489,7 +7489,7 @@ stable_grand_05 = { } stable_grand_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_grand_05 can_construct = { @@ -7577,11 +7577,11 @@ stable_grand_06 = { # Kennel sub-branch stable_kennel_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -7671,7 +7671,7 @@ stable_kennel_04 = { } stable_kennel_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_kennel_04 can_construct = { @@ -7766,7 +7766,7 @@ stable_kennel_05 = { } stable_kennel_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_kennel_05 can_construct = { @@ -7864,12 +7864,12 @@ stable_kennel_06 = { # Charioteer sub-branch (Byzantine unique upgrade) stable_chariot_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_03 can_construct_potential = { culture = { has_cultural_parameter = hosts_chariot_races } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -7948,7 +7948,7 @@ stable_chariot_04 = { } stable_chariot_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_chariot_04 can_construct = { @@ -8033,7 +8033,7 @@ stable_chariot_05 = { } stable_chariot_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = stable_chariot_05 can_construct = { @@ -8120,7 +8120,7 @@ stable_chariot_06 = { ### Workshop workshop_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -8195,7 +8195,7 @@ workshop_01 = { } workshop_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_01 cost = { @@ -8273,7 +8273,7 @@ workshop_02 = { # Carpenter sub-branch workshop_carpenter_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_02 can_construct = { @@ -8357,7 +8357,7 @@ workshop_carpenter_03 = { } workshop_carpenter_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_carpenter_03 can_construct = { @@ -8441,7 +8441,7 @@ workshop_carpenter_04 = { } workshop_carpenter_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_carpenter_04 can_construct = { @@ -8526,7 +8526,7 @@ workshop_carpenter_05 = { } workshop_carpenter_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_carpenter_05 can_construct = { @@ -8613,7 +8613,7 @@ workshop_carpenter_06 = { # Mason sub-branch workshop_mason_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_02 can_construct = { @@ -8695,7 +8695,7 @@ workshop_mason_03 = { } workshop_mason_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_mason_03 can_construct = { @@ -8777,7 +8777,7 @@ workshop_mason_04 = { } workshop_mason_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_mason_04 can_construct = { @@ -8861,7 +8861,7 @@ workshop_mason_05 = { } workshop_mason_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_mason_05 can_construct = { @@ -8947,7 +8947,7 @@ workshop_mason_06 = { # Textile sub-branch workshop_textile_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_02 can_construct = { @@ -9031,7 +9031,7 @@ workshop_textile_03 = { } workshop_textile_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_textile_03 can_construct = { @@ -9115,7 +9115,7 @@ workshop_textile_04 = { } workshop_textile_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_textile_04 can_construct = { @@ -9199,7 +9199,7 @@ workshop_textile_05 = { } workshop_textile_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = workshop_textile_05 can_construct = { @@ -9285,7 +9285,7 @@ workshop_textile_06 = { ### Storage storage_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -9369,7 +9369,7 @@ storage_01 = { } storage_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = storage_01 cost = { @@ -9456,7 +9456,7 @@ storage_02 = { # Warehouse sub-branch storage_warehouse_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = storage_02 can_construct = { @@ -9540,11 +9540,11 @@ storage_warehouse_03 = { } storage_warehouse_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = storage_warehouse_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -9626,7 +9626,7 @@ storage_warehouse_04 = { # Granary sub-branch storage_granary_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = storage_02 can_construct = { @@ -9713,11 +9713,11 @@ storage_granary_03 = { } storage_granary_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = storage_granary_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -9806,7 +9806,7 @@ storage_granary_04 = { ### Market market_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -9894,7 +9894,7 @@ market_01 = { } market_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = market_01 cost = { @@ -9974,7 +9974,7 @@ market_02 = { } market_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = market_02 can_construct = { @@ -10059,7 +10059,7 @@ market_03 = { } market_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = market_03 can_construct = { @@ -10144,7 +10144,7 @@ market_04 = { } market_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = market_04 can_construct = { @@ -10229,7 +10229,7 @@ market_05 = { } market_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = market_05 can_construct = { @@ -10316,7 +10316,7 @@ market_06 = { ### Grazing Lands grazing_land_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -10436,7 +10436,7 @@ grazing_land_01 = { } grazing_land_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_01 cost = { @@ -10557,7 +10557,7 @@ grazing_land_02 = { } grazing_land_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_02 cost = { @@ -10678,11 +10678,11 @@ grazing_land_03 = { } grazing_land_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -10790,7 +10790,7 @@ grazing_land_04 = { } grazing_land_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_04 can_construct = { @@ -10902,7 +10902,7 @@ grazing_land_05 = { } grazing_land_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_05 can_construct = { @@ -11016,12 +11016,12 @@ grazing_land_06 = { # Horse Archer sub-branch horse_pasture_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_03 can_construct = { can_recruit_archer_cavalry_trigger = yes - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -11122,7 +11122,7 @@ horse_pasture_04 = { } horse_pasture_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = horse_pasture_04 can_construct = { @@ -11228,7 +11228,7 @@ horse_pasture_05 = { } horse_pasture_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = horse_pasture_05 can_construct = { @@ -11336,12 +11336,12 @@ horse_pasture_06 = { # Camel sub-branch camel_pasture_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_03 can_construct = { culture ?= { has_innovation = innovation_war_camels } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -11442,7 +11442,7 @@ camel_pasture_04 = { } camel_pasture_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = camel_pasture_04 can_construct = { @@ -11548,7 +11548,7 @@ camel_pasture_05 = { } camel_pasture_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = camel_pasture_05 can_construct = { @@ -11656,12 +11656,12 @@ camel_pasture_06 = { # Elephant sub-branch elephant_pasture_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grazing_land_03 can_construct = { culture ?= { has_innovation = innovation_elephantry } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -11738,7 +11738,7 @@ elephant_pasture_04 = { } elephant_pasture_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = elephant_pasture_04 can_construct = { @@ -11820,7 +11820,7 @@ elephant_pasture_05 = { } elephant_pasture_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = elephant_pasture_05 can_construct = { @@ -11904,7 +11904,7 @@ elephant_pasture_06 = { ### Grain Fields grain_field_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -12037,7 +12037,7 @@ grain_field_01 = { } grain_field_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grain_field_01 cost = { @@ -12160,7 +12160,7 @@ grain_field_02 = { } grain_field_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grain_field_02 can_construct = { @@ -12288,11 +12288,11 @@ grain_field_03 = { } grain_field_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grain_field_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -12416,7 +12416,7 @@ grain_field_04 = { } grain_field_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grain_field_04 can_construct = { @@ -12544,7 +12544,7 @@ grain_field_05 = { } grain_field_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = grain_field_05 can_construct = { @@ -12674,11 +12674,9 @@ grain_field_06 = { ### Rice Fields rice_field_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } - can_construct_potential = { - culture ?= { has_innovation = innovation_champa_rice } - } + cost = { gold = { @@ -12750,7 +12748,7 @@ rice_field_01 = { rice_field_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = rice_field_01 cost = { @@ -12823,7 +12821,7 @@ rice_field_02 = { rice_field_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = rice_field_02 can_construct = { @@ -12900,11 +12898,11 @@ rice_field_03 = { rice_field_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = rice_field_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -12977,7 +12975,7 @@ rice_field_04 = { rice_field_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = rice_field_04 can_construct = { @@ -13054,7 +13052,7 @@ rice_field_05 = { rice_field_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = rice_field_05 can_construct = { @@ -13132,7 +13130,7 @@ rice_field_06 = { ### Vineyard vineyard_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -13244,7 +13242,7 @@ vineyard_01 = { } vineyard_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = vineyard_01 cost = { @@ -13347,7 +13345,7 @@ vineyard_02 = { } vineyard_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = vineyard_02 can_construct = { @@ -13453,7 +13451,7 @@ vineyard_03 = { } vineyard_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = vineyard_03 can_construct = { @@ -13559,7 +13557,7 @@ vineyard_04 = { } vineyard_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = vineyard_04 can_construct = { @@ -13665,7 +13663,7 @@ vineyard_05 = { } vineyard_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = vineyard_05 can_construct = { @@ -13773,7 +13771,7 @@ vineyard_06 = { ### Tea Plantation tea_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } can_construct_potential = { culture ?= { has_innovation = innovation_champa_rice } @@ -13855,7 +13853,7 @@ tea_01 = { } tea_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = tea_01 cost = { @@ -13931,7 +13929,7 @@ tea_02 = { } tea_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = tea_02 can_construct = { @@ -14010,11 +14008,11 @@ tea_03 = { } tea_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = tea_03 can_construct = { - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -14085,7 +14083,7 @@ tea_04 = { } tea_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = tea_04 can_construct = { @@ -14160,7 +14158,7 @@ tea_05 = { } tea_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = tea_05 can_construct = { @@ -14237,7 +14235,7 @@ tea_06 = { ### Olive Plantation olive_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } cost = { gold = { @@ -14346,7 +14344,7 @@ olive_01 = { } olive_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = olive_01 cost = { @@ -14446,7 +14444,7 @@ olive_02 = { } olive_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = olive_02 can_construct = { @@ -14550,7 +14548,7 @@ olive_03 = { } olive_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = olive_03 can_construct = { @@ -14654,7 +14652,7 @@ olive_04 = { } olive_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = olive_04 can_construct = { @@ -14759,7 +14757,7 @@ olive_05 = { } olive_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = olive_05 can_construct = { @@ -14866,7 +14864,7 @@ olive_06 = { ### Silk Production - Byzantine exclusive silk_01 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } can_construct = { custom_tooltip = { @@ -14942,7 +14940,7 @@ silk_01 = { } silk_02 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = silk_01 can_construct = { @@ -15022,7 +15020,7 @@ silk_02 = { } silk_03 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = silk_02 can_construct = { @@ -15103,7 +15101,7 @@ silk_03 = { } silk_04 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = silk_03 can_construct = { @@ -15114,7 +15112,7 @@ silk_04 = { } culture = { has_cultural_parameter = unlocks_silk_buildings_parameter } } - domicile ?= { has_domicile_building_or_higher = estate_main_03 } + domicile ?= { OR = { has_domicile_building_or_higher = estate_main_03 has_domicile_building_or_higher = estate_main_03 } } } cost = { @@ -15185,7 +15183,7 @@ silk_04 = { } silk_05 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = silk_04 can_construct = { @@ -15267,7 +15265,7 @@ silk_05 = { } silk_06 = { construction_time = 730 - allowed_domicile_types = { estate } + allowed_domicile_types = { estate } previous_building = silk_05 can_construct = { diff --git a/common/domiciles/buildings/NEOW_minority_community_buildings.txt b/common/domiciles/buildings/NEOW_minority_community_buildings.txt new file mode 100644 index 00000000..4fe2d8b1 --- /dev/null +++ b/common/domiciles/buildings/NEOW_minority_community_buildings.txt @@ -0,0 +1,10349 @@ + +minority_community_main_01 = { + slot_type = main + internal_slots = 2 + construction_time = 1 + allowed_domicile_types = { minority_community } + + cost = { + gold = estate_external_building_high_cost_tier_2_value + } + + character_modifier = { + domicile_monthly_gold_add = 0.25 + health = 0.5 + domicile_external_slots_capacity_add = 2 + monthly_barter_goods = 1 + } + + + ai_value = { + value = 100 + } + + parameters = { + camp_unlocks_second_officer = yes + camp_unlocks_huntperson_officer = yes + camp_unlocks_chief_forager_officer = yes + } + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_chinese_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } +} + +minority_community_main_02 = { + slot_type = main + internal_slots = 4 + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_community_main_01 + + can_construct = { + culture ?= { has_innovation = innovation_city_planning } + } + + cost = { + gold = estate_external_building_high_cost_tier_3_value + } + + parameters = { + camp_unlocks_second_officer = yes + reduce_success_of_raid_estate = yes + estate_increase_house_member_investment_cap_1 = yes + monthly_barter_goods = 1.2 + } + + character_modifier = { + domicile_monthly_gold_add = 0.25 + domicile_external_slots_capacity_add = 1 + men_at_arms_cap = 1 + enemy_hostile_scheme_phase_duration_add = miniscule_scheme_phase_duration_malus_value + character_travel_safety_mult = 0.02 + provisions_capacity_add = 100 + } + + ai_value = { + value = 100 + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_chinese_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } +} + +minority_community_main_03 = { + slot_type = main + internal_slots = 6 + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_community_main_02 + + can_construct = { + culture ?= { has_innovation = innovation_manorialism } + } + + cost = { + gold = estate_external_building_high_cost_tier_4_value + } + + parameters = { + camp_unlocks_second_officer = yes + reduce_success_of_raid_estate = yes + estate_increase_house_member_investment_cap_2 = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.5 + domicile_monthly_gold_mult = 0.02 + domicile_external_slots_capacity_add = 1 + maa_toughness_mult = 0.05 + enemy_hostile_scheme_phase_duration_add = minor_scheme_phase_duration_malus_value + character_travel_safety_mult = 0.02 + provisions_capacity_add = 150 + monthly_barter_goods = 1.4 + } + + ai_value = { + value = 100 + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_mansion_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_mansion_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_chinese_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_mansion_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_mansion_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_mansion_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_mansion_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_mansion_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_mansion_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } +} + +minority_community_main_04 = { + slot_type = main + internal_slots = 8 + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_community_main_03 + + can_construct = { + culture ?= { has_innovation = innovation_development_03 } + } + + cost = { + gold = estate_external_building_high_cost_tier_5_value + } + + parameters = { + camp_unlocks_second_officer = yes + reduce_success_of_raid_estate = yes + estate_increase_house_member_investment_cap_3 = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.5 + domicile_monthly_gold_mult = 0.03 + domicile_external_slots_capacity_add = 1 + maa_toughness_mult = 0.05 + men_at_arms_cap = 1 + enemy_hostile_scheme_phase_duration_add = medium_scheme_phase_duration_malus_value + character_travel_safety_mult = 0.02 + provisions_capacity_add = 250 + monthly_barter_goods = 1.6 + } + + ai_value = { + value = 100 + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_estate_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_estate_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_chinese_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_estate_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_estate_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_estate_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_estate_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_estate_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_estate_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } +} + +minority_community_main_05 = { + slot_type = main + internal_slots = 10 + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_community_main_04 + + can_construct = { + culture ?= { has_innovation = innovation_cranes } + } + + cost = { + gold = estate_external_building_high_cost_tier_6_value + } + + parameters = { + camp_unlocks_second_officer = yes + reduce_success_of_raid_estate = yes + estate_increase_house_member_investment_cap_4 = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.75 + domicile_monthly_gold_mult = 0.05 + domicile_external_slots_capacity_add = 1 + maa_toughness_mult = 0.1 + men_at_arms_cap = 1 + enemy_hostile_scheme_phase_duration_add = medium_scheme_phase_duration_malus_value + character_travel_safety_mult = 0.04 + provisions_capacity_add = 300 + monthly_barter_goods = 1.8 + } + + ai_value = { + value = 100 + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_grand_estate_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grand_estate_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_chinese_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_grand_estate_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grand_estate_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_grand_estate_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grand_estate_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/minority_community_main.dds" + texture = "gfx/interface/window_domiciles/estate_building_grand_estate_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grand_estate_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_estate_main_building" + } +} +###### + +headmans_croft_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_living_quarters } + multiply = 0.75 + desc = raid_insight_quarters + } + } + } + + character_modifier = { + monthly_diplomacy_lifestyle_xp_gain_mult = 0.05 + personal_scheme_phase_duration_add = -10 + } + + parameters = { + estate_unlock_ingratiate_family_interaction = yes + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_living_quarters.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +headmans_croft_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = headmans_croft_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_living_quarters } + multiply = 0.75 + desc = raid_insight_quarters + } + } + } + + character_modifier = { + monthly_diplomacy_lifestyle_xp_gain_mult = 0.05 + dynasty_house_opinion = 5 + personal_scheme_phase_duration_add = -10 + owned_personal_scheme_success_chance_add = 5 + } + + parameters = { + estate_unlock_ingratiate_family_interaction = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_living_quarters.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +headmans_croft_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = headmans_croft_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_living_quarters } + multiply = 0.75 + desc = raid_insight_quarters + } + } + } + + character_modifier = { + monthly_diplomacy_lifestyle_xp_gain_mult = 0.05 + personal_scheme_phase_duration_add = -10 + owned_personal_scheme_success_chance_add = 5 + } + + parameters = { + estate_unlock_ingratiate_family_interaction = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_living_quarters.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +headmans_croft_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = headmans_croft_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_living_quarters } + multiply = 0.75 + desc = raid_insight_quarters + } + } + } + + character_modifier = { + monthly_diplomacy_lifestyle_xp_gain_mult = 0.05 + dynasty_house_opinion = 5 + personal_scheme_phase_duration_add = -10 + owned_personal_scheme_success_chance_add = 5 + } + + parameters = { + estate_unlock_ingratiate_family_interaction = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_living_quarters.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Martial Upgrade +village_training_yard_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_trophy_room } + multiply = 0.75 + desc = raid_insight_trophy_room + } + } + } + + character_modifier = { + monthly_martial_lifestyle_xp_gain_mult = 0.05 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_trophy.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_training_yard_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_training_yard_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_trophy_room } + multiply = 0.75 + desc = raid_insight_trophy_room + } + } + } + + character_modifier = { + monthly_martial_lifestyle_xp_gain_mult = 0.05 + prowess = 1 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_trophy.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_training_yard_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_training_yard_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_trophy_room } + multiply = 0.75 + desc = raid_insight_trophy_room + } + } + } + + character_modifier = { + monthly_martial_lifestyle_xp_gain_mult = 0.05 + advantage = 3 + prowess = 3 + martial = 1 + } + + parameters = { + village_trophy_room_victory_influence = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_trophy.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_training_yard_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_training_yard_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_trophy_room } + multiply = 0.75 + desc = raid_insight_trophy_room + } + } + } + + character_modifier = { + monthly_martial_lifestyle_xp_gain_mult = 0.05 + advantage = 3 + prowess = 5 + martial = 2 + } + + parameters = { + village_trophy_room_victory_influence = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_trophy.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Stewardship Upgrade +contracts_office_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_office } + multiply = 0.75 + desc = raid_insight_office + } + } + } + + parameters = { + camp_improved_stewardship_contract_rewards = yes + receives_more_escort_contracts = yes + camp_improved_learning_contract_rewards = yes + } + + character_modifier = { + monthly_stewardship_lifestyle_xp_gain_mult = 0.05 + contract_scheme_phase_duration_add = -10 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_office.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +contracts_office_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = contracts_office_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_office } + multiply = 0.75 + desc = raid_insight_office + } + } + } + + parameters = { + camp_improved_stewardship_contract_rewards = yes + receives_more_escort_contracts = yes + camp_improved_learning_contract_rewards = yes + } + + character_modifier = { + monthly_stewardship_lifestyle_xp_gain_mult = 0.05 + contract_scheme_phase_duration_add = -10 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_office.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +contracts_office_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = contracts_office_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_office } + multiply = 0.75 + desc = raid_insight_office + } + } + } + + parameters = { + camp_improved_stewardship_contract_rewards = yes + receives_more_escort_contracts = yes + camp_improved_learning_contract_rewards = yes + } + + character_modifier = { + monthly_stewardship_lifestyle_xp_gain_mult = 0.05 + contract_scheme_phase_duration_add = -10 + stewardship = 1 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_office.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +contracts_office_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = contracts_office_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_office } + multiply = 0.75 + desc = raid_insight_office + } + } + } + + parameters = { + camp_improved_stewardship_contract_rewards = yes + receives_more_escort_contracts = yes + camp_improved_learning_contract_rewards = yes + } + + character_modifier = { + monthly_stewardship_lifestyle_xp_gain_mult = 0.05 + contract_scheme_phase_duration_add = -10 + stewardship = 2 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_office.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Intrigue Upgrade +local_criminal_contacts_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_servants_quarters } + multiply = 0.75 + desc = raid_insight_servants_quarters + } + } + } + + character_modifier = { + monthly_intrigue_lifestyle_xp_gain_mult = 0.05 + hostile_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value + owned_scheme_secrecy_add = 20 + } + parameters = { + camp_improved_criminal_contract_rewards = yes + } + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_servant.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +local_criminal_contacts_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = local_criminal_contacts_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_servants_quarters } + multiply = 0.75 + desc = raid_insight_servants_quarters + } + } + } + + character_modifier = { + monthly_intrigue_lifestyle_xp_gain_mult = 0.05 + hostile_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value + owned_scheme_secrecy_add = 20 + } + parameters = { + camp_improved_criminal_contract_rewards = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_servant.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +local_criminal_contacts_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = local_criminal_contacts_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_servants_quarters } + multiply = 0.75 + desc = raid_insight_servants_quarters + } + } + } + + character_modifier = { + monthly_intrigue_lifestyle_xp_gain_mult = 0.05 + hostile_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value + owned_scheme_secrecy_add = 20 + owned_hostile_scheme_success_chance_add = 5 + } + parameters = { + camp_improved_criminal_contract_rewards = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_servant.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +local_criminal_contacts_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = local_criminal_contacts_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_servants_quarters } + multiply = 0.75 + desc = raid_insight_servants_quarters + } + } + } + + character_modifier = { + monthly_intrigue_lifestyle_xp_gain_mult = 0.05 + hostile_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value + owned_scheme_secrecy_add = 20 + owned_hostile_scheme_success_chance_add = 5 + max_hostile_schemes_add = 1 + } + parameters = { + camp_improved_criminal_contract_rewards = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_servant.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Learning Upgrade +minority_comm_library_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_library } + multiply = 0.75 + desc = raid_insight_library + } + } + } + + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_library.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +minority_comm_library_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_comm_library_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_library } + multiply = 0.75 + desc = raid_insight_library + } + } + } + + parameters = { + estate_increase_physician_aptitude = yes + } + + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_library.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +# Education sub-branch +minority_comm_library_education_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_comm_library_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_library } + multiply = 0.75 + desc = raid_insight_library + } + } + } + + parameters = { + estate_increase_physician_aptitude = yes + estate_reduced_tutor_cost = yes + } + + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + learning = 1 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_tutor.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +minority_comm_library_education_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_comm_library_education_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_library } + multiply = 0.75 + desc = raid_insight_library + } + } + } + + parameters = { + estate_unlock_tier_5_education = yes + estate_increase_physician_aptitude = yes + estate_reduced_tutor_cost = yes + estate_increased_tutor_aptitude = yes + } + + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + learning = 2 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_tutor.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Bath +communal_baths_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_bath } + multiply = 0.75 + desc = raid_insight_bath + } + } + } + + character_modifier = { + negate_health_penalty_add = 0.05 + attraction_opinion = 3 + } + + parameters = { + estate_increase_safe_treatment_success_1 = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bath.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +communal_baths_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = communal_baths_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_bath } + multiply = 0.75 + desc = raid_insight_bath + } + } + } + + character_modifier = { + negate_health_penalty_add = 0.05 + attraction_opinion = 3 + epidemic_resistance = 2 + } + + parameters = { + estate_increase_safe_treatment_success_1 = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bath.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +communal_baths_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = communal_baths_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_bath } + multiply = 0.75 + desc = raid_insight_bath + } + } + } + + character_modifier = { + negate_health_penalty_add = 0.05 + attraction_opinion = 3 + epidemic_resistance = 3 + } + + parameters = { + estate_increase_safe_treatment_success_1 = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bath.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +communal_baths_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = communal_baths_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_bath } + multiply = 0.75 + desc = raid_insight_bath + } + } + } + + character_modifier = { + negate_health_penalty_add = 0.05 + attraction_opinion = 3 + epidemic_resistance = 5 + } + + parameters = { + estate_increase_safe_treatment_success_2 = yes + } + + ai_value = { + value = 3 + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bath.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Guest Room +guest_house_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + courtier_and_guest_opinion = 2 + } + + ai_value = { + value = 8 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +guest_house_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = guest_house_01 + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + } + + parameters = { + increased_success_personal_schemes_1 = yes + } + + ai_value = { + value = 7 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +guest_house_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = guest_house_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + courtier_and_guest_opinion = 2 + } + + parameters = { + increased_success_personal_schemes_1 = yes + } + + ai_value = { + value = 6 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +guest_house_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = guest_house_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + } + + parameters = { + increased_success_personal_schemes_2 = yes + } + + ai_value = { + value = 5 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +guest_house_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = guest_house_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + courtier_and_guest_opinion = 2 + } + + parameters = { + increased_success_personal_schemes_2 = yes + } + + ai_value = { + value = 4 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +guest_house_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = guest_house_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_internal_building_high_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_guest_room } + multiply = 0.75 + desc = raid_insight_guest_room + } + } + } + + character_modifier = { + domicile_monthly_prestige_mult = 0.02 + } + + parameters = { + increased_success_personal_schemes_3 = yes + } + + ai_value = { + value = 3 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_esteemed_hospitality + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_guest.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +### Prison +village_cage_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = minority_community_main_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_prison } + multiply = 0.75 + desc = raid_insight_prison + } + } + } + + character_modifier = { + dread_gain_mult = 0.05 + hostage_income_mult = 0.05 + } + + ai_value = { + value = 7 + if = { + limit = { + scope:owner = { + OR = { + has_trait = vengeful + has_trait = callous + has_trait = sadistic + } + } + } + add = 5 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_prison.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_cage_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_cage_01 + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_prison } + multiply = 0.75 + desc = raid_insight_prison + } + } + } + + parameters = { + estate_torture_grants_influence = yes + } + + character_modifier = { + dread_gain_mult = 0.05 + hostage_income_mult = 0.05 + } + + ai_value = { + value = 6 + if = { + limit = { + scope:owner = { + OR = { + has_trait = vengeful + has_trait = callous + has_trait = sadistic + } + } + } + add = 5 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_prison.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_cage_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_cage_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_prison } + multiply = 0.75 + desc = raid_insight_prison + } + } + } + + parameters = { + estate_torture_grants_influence = yes + } + + character_modifier = { + dread_gain_mult = 0.05 + hostage_income_mult = 0.05 + hostage_renown_mult = 0.05 + } + + ai_value = { + value = 5 + if = { + limit = { + scope:owner = { + OR = { + has_trait = vengeful + has_trait = callous + has_trait = sadistic + } + } + } + add = 5 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_prison.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} +village_cage_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + slot_type = internal + previous_building = village_cage_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_internal_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_prison } + multiply = 0.75 + desc = raid_insight_prison + } + } + } + + parameters = { + estate_torture_grants_influence = yes + } + + character_modifier = { + dread_gain_mult = 0.05 + hostage_income_mult = 0.05 + hostage_renown_mult = 0.05 + } + + ai_value = { + value = 4 + if = { + limit = { + scope:owner = { + OR = { + has_trait = vengeful + has_trait = callous + has_trait = sadistic + } + } + } + add = 5 + } + add = estate_building_ai_modifier_value + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_prison.dds" + texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_villa_byzantine_mask.dds" + } +} + +#################### +#### BUILDINGS ##### +#################### + +### Temple Building +minority_comm_temple_small_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + can_construct = { + NOT = { + government_has_flag = government_is_celestial + } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.05 + stress_loss_mult = 0.05 + } + + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } +} +minority_comm_temple_small_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_comm_temple_small_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.1 + stress_loss_mult = 0.05 + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } +} +minority_comm_temple_small_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_comm_temple_small_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.1 + stress_loss_mult = 0.1 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_shrine.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_temple_small" + } +} + +# Temple sub-branch +minority_comm_temple_large_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_comm_temple_small_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.2 + domicile_monthly_gold_add = 0.3 + clergy_opinion = 5 + } + parameters = { + influence_gain_from_hof_support_4 = yes + reduce_state_faith_cost = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } +} +minority_comm_temple_large_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_comm_temple_large_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.2 + domicile_monthly_gold_add = 0.4 + clergy_opinion = 5 + } + parameters = { + influence_gain_from_hof_support_5 = yes + reduce_state_faith_cost = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } +} +minority_comm_temple_large_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = minority_comm_temple_large_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_temple } + multiply = 0.75 + desc = raid_insight_temple + } + } + } + + character_modifier = { + domicile_monthly_piety_add = 0.3 + domicile_monthly_gold_add = 0.5 + clergy_opinion = 5 + } + + parameters = { + influence_gain_from_hof_support_6 = yes + reduce_state_faith_cost = yes + more_successful_heresies = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_ancestral_shrine_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_ancestral_shrine_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + owner = { + faith.religion = religion:islam_religion + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_islamic.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_islamic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_generic_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_generic_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + trigger = { + owner = { + OR = { + faith.religion = religion:eastern_orthodox_religion + faith.religion = religion:catholic_religion + faith.religion = religion:protestant_religion + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_church.dds" + texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_temple_christian_orthodox_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_minority_comm_temple_largel_" + } +} + + +### Barracks +militia_barracks_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.03 + skirmishers_toughness_mult = 0.01 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} +militia_barracks_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = militia_barracks_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.13 + skirmishers_toughness_mult = 0.11 + heavy_infantry_damage_mult = 0.02 + heavy_infantry_toughness_mult = 0.01 + pikemen_damage_mult = 0.02 + pikemen_toughness_mult = 0.01 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} +militia_barracks_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = militia_barracks_02 + + can_construct = { + estate_can_construct_militia_barracks_03_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.13 + skirmishers_toughness_mult = 0.11 + heavy_infantry_damage_mult = 0.12 + heavy_infantry_toughness_mult = 0.11 + pikemen_damage_mult = 0.12 + pikemen_toughness_mult = 0.11 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} +militia_barracks_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = militia_barracks_03 + + can_construct = { + estate_can_construct_militia_barracks_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.23 + skirmishers_toughness_mult = 0.21 + heavy_infantry_damage_mult = 0.22 + heavy_infantry_toughness_mult = 0.21 + pikemen_damage_mult = 0.22 + pikemen_toughness_mult = 0.21 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} +militia_barracks_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = militia_barracks_04 + + can_construct = { + estate_can_construct_militia_barracks_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.34 + skirmishers_toughness_mult = 0.33 + heavy_infantry_damage_mult = 0.32 + heavy_infantry_toughness_mult = 0.31 + pikemen_damage_mult = 0.32 + pikemen_toughness_mult = 0.31 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} +militia_barracks_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = militia_barracks_05 + + can_construct = { + estate_can_construct_militia_barracks_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_barracks } + multiply = 0.75 + desc = raid_insight_barracks + } + } + } + + character_modifier = { + skirmishers_damage_mult = 0.4 + skirmishers_toughness_mult = 0.4 + heavy_infantry_damage_mult = 0.4 + heavy_infantry_toughness_mult = 0.4 + pikemen_damage_mult = 0.4 + pikemen_toughness_mult = 0.4 + #men_at_arms_maintenance = -0.02 + #men_at_arms_recruitment_cost = -0.02 + } + + parameters = { + reduce_success_of_raid_estate = yes + can_recruit_militia = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_barracks_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_barracks" + } +} + +### Watchtower +village_watch_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + hostile_raid_time = 0.1 + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_1 = yes + } + + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} +village_watch_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_watch_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + archers_damage_mult = 0.02 + archers_toughness_mult = 0.01 + hostile_raid_time = 0.1 + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_1 = yes + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} +village_watch_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_watch_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_2 = yes + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + archers_damage_mult = 0.12 + archers_toughness_mult = 0.11 + hostile_raid_time = 0.1 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} +village_watch_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_watch_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_2 = yes + house_head_can_ask_for_maa = yes + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + archers_damage_mult = 0.12 + archers_toughness_mult = 0.11 + hostile_raid_time = 0.2 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} +village_watch_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_watch_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_3 = yes + house_head_can_ask_for_maa = yes + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + archers_damage_mult = 0.22 + archers_toughness_mult = 0.21 + hostile_raid_time = 0.2 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} +village_watch_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_watch_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_watchtower } + multiply = 0.75 + desc = raid_insight_watchtower + } + } + } + + parameters = { + reduce_success_of_raid_estate = yes + raids_less_likely_to_make_prisoners_3 = yes + estate_unlock_patrol_decision = yes + house_head_can_ask_for_maa = yes + } + + character_modifier = { + monthly_county_control_growth_factor = 0.03 + defender_holding_advantage = 2 + archers_damage_mult = 0.32 + archers_toughness_mult = 0.31 + hostile_raid_time = 0.3 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_barracks.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_watchtower.dds" + texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_watchtower_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_watchtower" + } +} + + +### Garden +communal_gardens_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + stress_loss_mult = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_1 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_garden + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 9 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_parameter = can_recruit_gardeners + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } +} +communal_gardens_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + stress_loss_mult = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.15 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_2 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_garden + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 8 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } +} +communal_gardens_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_02 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + stress_loss_mult = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.2 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_garden + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 7 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden" + } +} + +# Leisure Garden sub-branch +communal_gardens_leisure_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_03 + + can_construct = { + estate_can_construct_communal_gardens_leisure_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + courtier_opinion = 5 + stress_loss_mult = 0.05 + fertility = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.2 + } + + parameters = { + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_leisure + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 6 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } +} +communal_gardens_leisure_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_leisure_04 + + can_construct = { + estate_can_construct_communal_gardens_leisure_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + courtier_opinion = 5 + stress_loss_mult = 0.1 + fertility = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.2 + } + + parameters = { + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_leisure + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 5 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } +} +communal_gardens_leisure_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_leisure_05 + + can_construct = { + estate_can_construct_communal_gardens_leisure_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_prestige_add = 0.1 + courtier_opinion = 5 + stress_loss_mult = 0.1 + fertility = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.2 + } + + parameters = { + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_leisure + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 4 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_leisure_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_leisure" + } +} + +# Fruit Garden sub-branch +communal_gardens_fruit_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_03 + + can_construct = { + estate_can_construct_communal_gardens_fruit_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + development_growth = 0.1 + negate_health_penalty_add = 0.05 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.25 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_fruit + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 6 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } +} +communal_gardens_fruit_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_fruit_04 + + can_construct = { + estate_can_construct_communal_gardens_fruit_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + development_growth = 0.1 + negate_health_penalty_add = 0.1 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.3 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_fruit + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 5 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } +} +communal_gardens_fruit_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = communal_gardens_fruit_05 + + can_construct = { + estate_can_construct_communal_gardens_fruit_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_garden } + multiply = 0.75 + desc = raid_insight_garden + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + development_growth = 0.1 + negate_health_penalty_add = 0.15 + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.35 + } + + parameters = { + minority_comm_contributes_provisions = yes + increased_gardener_aptitude_3 = yes + camp_improves_gather_provisions_decision = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_communal_gardens_fruit + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 4 + if = { + limit = { + scope:owner = { + OR = { + culture ?= { + OR = { + has_cultural_tradition = tradition_gardening + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_sacred_groves + } + } + faith ?= { has_doctrine = tenet_sanctity_of_nature } + } + } + } + add = 10 + } + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_garden_chinese" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_fruit_garden.dds" + texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_garden_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_garden_fruit" + } +} + +### Stable +village_stable_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + character_modifier = { + character_travel_speed = 10 + movement_speed = 0.01 + monthly_barter_goods = 0.1 + } + + ai_value = { + value = 9 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } +} +village_stable_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_01 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + } + + character_modifier = { + character_travel_speed = 12 + movement_speed = 0.01 + monthly_barter_goods = 0.15 + } + + ai_value = { + value = 8 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } +} +village_stable_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_02 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + } + + character_modifier = { + character_travel_speed = 14 + movement_speed = 0.01 + monthly_barter_goods = 0.2 + } + + ai_value = { + value = 7 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_stable" + } +} + +# Grand Stable sub-branch +village_stable_grand_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + } + + character_modifier = { + character_travel_speed = 16 + character_travel_speed_mult = 0.05 + domicile_monthly_prestige_add = 0.2 + movement_speed = 0.01 + monthly_barter_goods = 0.25 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } +} +village_stable_grand_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_grand_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + estate_increase_master_of_horse_aptitude = yes + } + + character_modifier = { + character_travel_speed = 18 + character_travel_speed_mult = 0.1 + domicile_monthly_prestige_add = 0.2 + movement_speed = 0.01 + monthly_barter_goods = 0.3 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } +} +village_stable_grand_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_grand_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + estate_increase_master_of_horse_aptitude = yes + } + + character_modifier = { + character_travel_speed = 20 + character_travel_speed_mult = 0.15 + domicile_monthly_prestige_add = 0.3 + movement_speed = 0.01 + monthly_barter_goods = 0.35 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grand_stable.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_grand" + } +} + +# Kennel sub-branch +village_stable_kennel_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + estate_unlock_adopt_puppy_decision = yes + kennels_more_successful_hunts_1 = yes + } + + character_modifier = { + stress_gain_mult = -0.1 + prowess = 1 + monthly_barter_goods = 0.25 + } + + ai_value = { + value = 6 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } +} +village_stable_kennel_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_kennel_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + estate_unlock_adopt_puppy_decision = yes + estate_cheaper_hunt_cost = yes + kennels_more_successful_hunts_1 = yes + } + + character_modifier = { + stress_gain_mult = -0.1 + diplomacy = 1 + monthly_barter_goods = 0.3 + } + + ai_value = { + value = 5 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } +} +village_stable_kennel_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_stable_kennel_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_stable } + multiply = 0.75 + desc = raid_insight_stable + } + } + } + + parameters = { + estate_unlock_mount_travel_option = yes + estate_unlock_adopt_puppy_decision = yes + estate_cheaper_hunt_cost = yes + estate_increase_master_of_hunt_aptitude = yes + kennels_more_successful_hunts_2 = yes + } + + character_modifier = { + stress_gain_mult = -0.2 + prowess = 1 + monthly_barter_goods = 0.35 + } + + ai_value = { + value = 4 + if = { + limit = { + scope:owner.culture ?= { + has_cultural_tradition = tradition_hunters + } + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_china.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_china_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_kennel.dds" + texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_stable_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_stable_kennel" + } +} + + +### Workshop +village_workshop_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.1 + } + + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } +} +village_workshop_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.15 + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_workshop.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_workshop" + } +} + +# Carpenter sub-branch +village_workshop_carpenter_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_02 + + can_construct = { + estate_can_construct_village_workshop_carpenter_03_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.2 + } + + parameters = { + estate_improved_inspirations_1 = yes + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } +} +village_workshop_carpenter_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_carpenter_03 + + can_construct = { + estate_can_construct_village_workshop_carpenter_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + parameters = { + estate_improved_inspirations_1 = yes + estate_reduce_commission_artifact_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.25 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } +} +village_workshop_carpenter_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_carpenter_04 + + can_construct = { + estate_can_construct_village_workshop_carpenter_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + parameters = { + estate_improved_inspirations_2 = yes + estate_reduce_commission_artifact_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.3 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } +} +village_workshop_carpenter_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_carpenter_05 + + can_construct = { + estate_can_construct_village_workshop_carpenter_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + parameters = { + estate_improved_inspirations_2 = yes + estate_reduce_commission_artifact_cost = yes + estate_increase_antiquarian_aptitude = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + monthly_barter_goods = 0.35 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_carpenter.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_carpenter" + } +} + +# Mason sub-branch +village_workshop_mason_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_02 + + can_construct = { + estate_can_construct_village_workshop_mason_03_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_speed = -0.05 + build_gold_cost = -0.05 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.2 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } +} +village_workshop_mason_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_mason_03 + + can_construct = { + estate_can_construct_village_workshop_mason_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_speed = -0.05 + build_gold_cost = -0.05 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.25 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } +} +village_workshop_mason_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_mason_04 + + can_construct = { + estate_can_construct_village_workshop_mason_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_speed = -0.05 + build_gold_cost = -0.05 + holding_build_gold_cost = -0.05 + holding_build_speed = -0.05 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.3 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } +} +village_workshop_mason_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_mason_05 + + can_construct = { + estate_can_construct_village_workshop_mason_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_speed = -0.05 + build_gold_cost = -0.05 + holding_build_gold_cost = -0.05 + holding_build_speed = -0.05 + domicile_build_speed = -0.05 + monthly_barter_goods = 0.35 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_mason.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_mason" + } +} + +# Textile sub-branch +village_workshop_textile_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_02 + + can_construct = { + estate_can_construct_village_workshop_textile_03_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + domicile_monthly_prestige_mult = 0.05 + monthly_barter_goods = 0.2 + } + + parameters = { + estate_improved_inspirations_1 = yes + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } +} +village_workshop_textile_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_textile_03 + + can_construct = { + estate_can_construct_village_workshop_textile_04_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + domicile_monthly_prestige_mult = 0.05 + monthly_barter_goods = 0.25 + } + + parameters = { + estate_improved_inspirations_1 = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } +} +village_workshop_textile_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_textile_04 + + can_construct = { + estate_can_construct_village_workshop_textile_05_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + domicile_monthly_prestige_mult = 0.05 + monthly_barter_goods = 0.3 + } + + parameters = { + estate_improved_inspirations_2 = yes + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } +} +village_workshop_textile_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_workshop_textile_05 + + can_construct = { + estate_can_construct_village_workshop_textile_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_workshop } + multiply = 0.75 + desc = raid_insight_workshop + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.2 + domicile_monthly_prestige_mult = 0.05 + monthly_barter_goods = 0.35 + } + + parameters = { + estate_improved_inspirations_2 = yes + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_textile.dds" + texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_workshop_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_village_workshop_textile" + } +} + +### Storage +village_storage_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + character_modifier = { + supply_capacity_mult = 0.1 + provisions_use_mult = -0.05 + provisions_capacity_add = 100 + } + + + ai_value = { + value = 9 + if = { + limit = { + has_domicile_building_or_higher = village_grain_fields_01 + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } +} +village_storage_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_storage_01 + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + character_modifier = { + supply_capacity_mult = 0.15 + provisions_use_mult = -0.1 + provisions_capacity_add = 150 + } + + + ai_value = { + value = 8 + if = { + limit = { + has_domicile_building_or_higher = village_grain_fields_01 + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_storage.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage" + } +} + +# Warehouse sub-branch +village_storage_warehouse_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_storage_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_gold_cost = -0.05 + provisions_use_mult = -0.15 + provisions_capacity_add = 200 + } + + parameters = { + house_head_can_ask_building_support = yes + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } +} +village_storage_warehouse_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_storage_warehouse_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_normal_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.1 + build_gold_cost = -0.1 + provisions_use_mult = -0.20 + provisions_capacity_add = 250 + } + + parameters = { + house_head_can_ask_building_support = yes + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_warehouse.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_warehouse" + } +} + +# Granary sub-branch +village_storage_granary_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_storage_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + character_modifier = { + development_growth_factor = 0.05 + epidemic_resistance = 2 + county_opinion_add = 10 + provisions_use_mult = -0.2 + provisions_capacity_add = 200 + } + + ai_value = { + value = 7 + if = { + limit = { + has_domicile_building_or_higher = village_grain_fields_01 + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } +} +village_storage_granary_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_storage_granary_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_storage } + multiply = 0.75 + desc = raid_insight_storage + } + } + } + + parameters = { + estate_unlock_granary_decision = yes + } + + character_modifier = { + development_growth_factor = 0.1 + epidemic_resistance = 5 + county_opinion_add = 10 + provisions_use_mult = -0.3 + provisions_capacity_add = 300 + } + + ai_value = { + value = 6 + if = { + limit = { + has_domicile_building_or_higher = village_grain_fields_01 + } + add = 2 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_chinese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_granary.dds" + texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_storage_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_storage_granary" + } +} + +### Market +village_market_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + + character_modifier = { + domicile_monthly_gold_add = 0.15 + monthly_barter_goods = -0.25 + } + + ai_value = { + value = 9 + if = { # Let's make sure the AI builds at least one good income building + limit = { + NOR = { + has_domicile_building_or_higher = village_grain_fields_01 + has_domicile_building_or_higher = vineyard_01 + has_domicile_building_or_higher = olive_01 + } + } + add = 20 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} +village_market_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_market_01 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + + character_modifier = { + domicile_monthly_gold_add = 0.25 + monthly_barter_goods = -0.35 + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} +village_market_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_market_02 + + + cost = { + gold = { + value = estate_external_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + parameters = { + estate_reduce_council_position_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.35 + monthly_barter_goods = -0.45 + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} +village_market_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_market_03 + + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + parameters = { + estate_reduce_council_position_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 0.45 + monthly_barter_goods = -0.55 + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} +village_market_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_market_04 + + + cost = { + gold = { + value = estate_external_building_high_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + parameters = { + estate_reduce_council_position_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 1 + monthly_barter_goods = -1.25 + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} +village_market_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_market_05 + + can_construct = { + estate_can_construct_village_market_06_trigger = yes + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_market } + multiply = 0.75 + desc = raid_insight_market + } + } + } + + parameters = { + estate_reduce_council_position_cost = yes + } + + character_modifier = { + domicile_monthly_gold_add = 2 + monthly_barter_goods = -2.5 + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_chinese_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_market_asian" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_mena.dds" + intersectionmask_texture = "gfx/interface/illustrations/activity_locales/estate_building_market_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_market.dds" + texture = "gfx/interface/window_domiciles/estate_building_market_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_market_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_market" + } +} + +### Grazing Lands +village_grazing_land_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_1_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + character_modifier = { + light_cavalry_damage_mult = 0.02 + light_cavalry_toughness_mult = 0.01 + light_cavalry_maintenance_mult = -0.05 + domicile_monthly_gold_add = 0.2 + monthly_barter_goods = 0.05 + } + parameters = { + minority_comm_contributes_provisions = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 9 + if = { + limit = { + scope:owner = { + OR = { + can_recruit_archer_cavalry_trigger = yes + culture ?= { + OR = { + has_innovation = innovation_elephantry + has_innovation = innovation_war_camels + } + } + } + } + } + add = 4 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} +village_grazing_land_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grazing_land_01 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_2_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + character_modifier = { + light_cavalry_damage_mult = 0.12 + light_cavalry_toughness_mult = 0.11 + light_cavalry_maintenance_mult = -0.15 + domicile_monthly_gold_add = 0.3 + monthly_barter_goods = 0.05 + } + + parameters = { + minority_comm_contributes_provisions = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 8 + if = { + limit = { + scope:owner = { + OR = { + can_recruit_archer_cavalry_trigger = yes + culture ?= { + OR = { + has_innovation = innovation_elephantry + has_innovation = innovation_war_camels + } + } + } + } + } + add = 4 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} +village_grazing_land_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grazing_land_02 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_3_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + parameters = { + minority_comm_contributes_provisions = yes + } + character_modifier = { + light_cavalry_damage_mult = 0.22 + light_cavalry_toughness_mult = 0.21 + light_cavalry_maintenance_mult = -0.25 + domicile_monthly_gold_add = 0.4 + monthly_barter_goods = 0.05 + } + + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 7 + if = { + limit = { + scope:owner = { + OR = { + can_recruit_archer_cavalry_trigger = yes + culture ?= { + OR = { + has_innovation = innovation_elephantry + has_innovation = innovation_war_camels + } + } + } + } + } + add = 4 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grazing.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} +village_grazing_land_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grazing_land_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + character_modifier = { + light_cavalry_damage_mult = 0.32 + light_cavalry_toughness_mult = 0.31 + light_cavalry_maintenance_mult = -0.35 + heavy_cavalry_damage_mult = 0.04 + heavy_cavalry_toughness_mult = 0.02 + heavy_cavalry_maintenance_mult = -0.05 + domicile_monthly_gold_add = 0.5 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} +grazing_land_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grazing_land_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_5_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + character_modifier = { + light_cavalry_damage_mult = 0.52 + light_cavalry_toughness_mult = 0.51 + light_cavalry_maintenance_mult = -0.55 + heavy_cavalry_damage_mult = 0.14 + heavy_cavalry_toughness_mult = 0.12 + heavy_cavalry_maintenance_mult = -0.15 + domicile_monthly_gold_add = 0.6 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} +grazing_land_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = grazing_land_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_6_value + if = { + limit = { has_character_modifier = raid_insight_grazing_land } + multiply = 0.75 + desc = raid_insight_grazing_land + } + } + } + + character_modifier = { + light_cavalry_damage_mult = 0.62 + light_cavalry_toughness_mult = 0.61 + light_cavalry_maintenance_mult = -0.65 + heavy_cavalry_damage_mult = 0.24 + heavy_cavalry_toughness_mult = 0.22 + heavy_cavalry_maintenance_mult = -0.25 + domicile_monthly_gold_add = 0.7 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + } + + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grazing_land + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 4 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_horse_pastures_japanese_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_horse_run.dds" + texture = "gfx/interface/window_domiciles/estate_building_grazing_fields.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grazing_fields_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grazing_lands" + } +} + + +### Grain Fields +village_grain_fields_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_1_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 10 + if = { # Let's make sure the AI builds at least one good income building + limit = { + NOR = { + has_domicile_building_or_higher = vineyard_01 + has_domicile_building_or_higher = olive_01 + has_domicile_building_or_higher = village_market_01 + } + } + add = 20 + } + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} +village_grain_fields_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grain_fields_01 + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_2_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} +village_grain_fields_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grain_fields_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_3_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} +village_grain_fields_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grain_fields_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_4_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} +village_grain_fields_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grain_fields_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_5_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} +village_grain_fields_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_grain_fields_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + add = { + value = estate_external_building_high_cost_tier_6_value + if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_1 } + } + multiply = 0.85 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_2 } + } + multiply = 0.75 + desc = grazing_land_in_domicile + } + else_if = { + limit = { + domicile ?= { has_domicile_parameter = cheaper_grain_fields_buildings_3 } + } + multiply = 0.65 + desc = grazing_land_in_domicile + } + if = { + limit = { has_character_modifier = raid_insight_grain_field } + multiply = 0.75 + desc = raid_insight_grain_field + } + } + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + on_complete = { + if = { + limit = { + scope:owner = { + is_alive = yes + } + years_from_game_start >= 1 + } + scope:owner = { + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } + } + + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_grain.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +### Rice Fields +village_rice_field_01 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_1_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 10 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +village_rice_field_02 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_rice_field_01 + + cost = { + gold = { + value = estate_external_building_high_cost_tier_2_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 9 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +village_rice_field_03 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_rice_field_02 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_02 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_3_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.05 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 8 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +village_rice_field_04 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_rice_field_03 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_03 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_4_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 7 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +village_rice_field_05 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_rice_field_04 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_04 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_5_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 6 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +village_rice_field_06 = { + construction_time = 730 + allowed_domicile_types = { minority_community } + previous_building = village_rice_field_05 + + can_construct = { + domicile ?= { has_domicile_building_or_higher = minority_community_main_05 } + } + + cost = { + gold = { + value = estate_external_building_high_cost_tier_6_value + } + } + + character_modifier = { + domicile_monthly_gold_add = 0.4 + development_growth_factor = 0.04 + supply_limit_mult = 0.05 + monthly_barter_goods = 0.1 + } + + parameters = { + minority_comm_contributes_provisions = yes + camp_improves_gather_provisions_decision = yes + } + ai_value = { + value = 5 + add = estate_building_ai_modifier_value + } + + asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_rice_paddies_asian_mask.png" + soundeffect = "event:/DLC/EP4/SFX/UI/domicile_buildings/tgp_ui_domicile_building_rice_paddies" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + has_graphical_iberian_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_mena_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + trigger = { + domicile_location.culture = { + OR = { + has_graphical_western_culture_group_trigger = yes + has_graphical_norse_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_western_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_rice.dds" + texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/domicile_buildings/ep3_ui_domicile_buildings_grain_fields" + } +} + +community_baggage_train_01 = { + internal_slots = 1 + construction_time = @camp_building_main_slot_construction_duration_t1 + allowed_domicile_types = { minority_community } + + cost = { gold = baggage_train_01_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + skirmishers_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = community_baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +community_baggage_train_02 = { + construction_time = @camp_building_main_slot_construction_duration_t2 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_01 + internal_slots = 2 + + cost = { gold = baggage_train_02_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_02_domicile_building_gold_cost_value + add = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + archers_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + camp_unlocks_head_porter_officer = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +community_baggage_train_03 = { + construction_time = @camp_building_main_slot_construction_duration_t3 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_02 + internal_slots = 3 + + cost = { gold = baggage_train_03_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_03_domicile_building_gold_cost_value + add = baggage_train_02_domicile_building_gold_cost_value + add = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + heavy_infantry_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + camp_unlocks_head_porter_officer = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +community_baggage_train_04 = { + construction_time = @camp_building_main_slot_construction_duration_t4 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_03 + internal_slots = 4 + + cost = { gold = baggage_train_04_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_04_domicile_building_gold_cost_value + add = baggage_train_03_domicile_building_gold_cost_value + add = baggage_train_02_domicile_building_gold_cost_value + add = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + light_cavalry_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + camp_unlocks_head_porter_officer = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +community_baggage_train_05 = { + construction_time = @camp_building_main_slot_construction_duration_t5 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_04 + internal_slots = 5 + + cost = { gold = baggage_train_05_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_05_domicile_building_gold_cost_value + add = baggage_train_04_domicile_building_gold_cost_value + add = baggage_train_03_domicile_building_gold_cost_value + add = baggage_train_02_domicile_building_gold_cost_value + add = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + heavy_cavalry_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + camp_unlocks_head_porter_officer = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +community_baggage_train_06 = { + construction_time = @camp_building_main_slot_construction_duration_t6 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_05 + internal_slots = 6 + + cost = { gold = baggage_train_06_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_06_domicile_building_gold_cost_value + add = baggage_train_05_domicile_building_gold_cost_value + add = baggage_train_04_domicile_building_gold_cost_value + add = baggage_train_03_domicile_building_gold_cost_value + add = baggage_train_02_domicile_building_gold_cost_value + add = baggage_train_01_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed_mult = 0.02 + provisions_capacity_mult = 0.1 + supply_capacity_mult = 0.2 + siege_weapon_max_size_add = 1 + } + + parameters = { + camp_better_scout_for_talent = yes + camp_unlocks_head_porter_officer = yes + receives_more_escort_contracts = yes + } + + ai_value = { value = baggage_train_main_path_value } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_bagage.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} +# Upgrades +community_baggage_train_ample_steeds = { # Ample Steeds + slot_type = internal + construction_time = @camp_building_internal_slot_construction_duration_t2 + allowed_domicile_types = { minority_community } + previous_building = community_baggage_train_01 + + cost = { gold = baggage_train_ample_steeds_domicile_building_gold_cost_value } + refund = { + gold = { + value = baggage_train_ample_steeds_domicile_building_gold_cost_value + multiply = camp_refund_mult_value + floor = yes + } + } + + character_modifier = { + character_travel_speed = 10 + light_cavalry_pursuit_mult = 0.1 + heavy_cavalry_pursuit_mult = 0.1 + archer_cavalry_pursuit_mult = 0.1 + } + + parameters = { + camp_cheaper_cavalry_reinforcement = yes + } + + ai_value = { + value = camp_building_ai_base_t2 + if = { + limit = { + owner = { has_lifestyle = martial_lifestyle } + } + add = camp_building_ai_lifestyle_bias_value + } + multiply = 10 + } + + asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/domicile_building/domicile_building_ample_steeds.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_asian_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } + + asset = { + icon = "gfx/interface/icons/domicile_building/domicile_building_ample_steeds.dds" + texture = "gfx/interface/window_domiciles/laamp_building_baggage_train.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_baggage_train_mask.png" + soundeffect = "event:/DLC/EP3/SFX/UI/camp_buildings/ep3_ui_domicile_buildings_baggage_train" + } +} \ No newline at end of file diff --git a/common/domiciles/types/NEOW_domicile_types.txt b/common/domiciles/types/NEOW_domicile_types.txt new file mode 100644 index 00000000..0bea98f2 --- /dev/null +++ b/common/domiciles/types/NEOW_domicile_types.txt @@ -0,0 +1,1171 @@ + +minority_community = { + + rename_window = primary_title + + illustration = "gfx/interface/illustrations/event_scenes/ep3_medi_estate.dds" + icon = "gfx/interface/icons/flat_icons/minority.dds" + map_pin_texture = "gfx/interface/icons/map_icons/map_icon_minority.dds" + map_pin_anchor = up + map_pin_lobby = yes + + travel = yes + provisions = yes + + can_move_manually = yes + culture_and_faith = yes + move_cooldown = { days = 9125 } + move_cost = { + gold = { + value = { + value = 20 + format = "BASE_VALUE_FORMAT" + desc = "BASE_VALUE" + } + if = { + limit = { + domicile ?= { has_domicile_building_or_higher = minority_community_05 } + } + add = 80 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = minority_community_04 } + } + add = 60 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = minority_community_03 } + } + add = 40 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = minority_community_02 } + } + add = 20 + } + } + } + + base_external_slots = 2 + + map_entity = { + trigger = { + owner ?= { is_alive = yes } + owner.culture = { + OR = { + has_graphical_iranian_culture_group_trigger = yes + has_graphical_mena_culture_group_trigger = yes + has_graphical_steppe_culture_group_trigger = yes + has_graphical_african_culture_group_trigger = yes + } + } + } + reference = "building_mena_city_01_entity" + } + map_entity = { + trigger = { + owner ?= { is_alive = yes } + owner.culture = { + has_graphical_india_culture_group_trigger = yes + } + } + reference = "building_india_city_01_entity" + } + map_entity = { + trigger = { + owner ?= { is_alive = yes } + } + reference = "western_city_01_a_entity" + } + + domicile_temperament_low_modifier = { + name = domicile_temperament_low + army_damage_mult = -0.2 + contract_scheme_phase_duration_add = 10 + domicile_monthly_gold_mult = -0.25 + domicile_monthly_piety_gain_mult = -0.25 + domicile_monthly_prestige_gain_mult = -0.25 + monthly_piety_gain = -0.3 + monthly_prestige_gain = -0.3 + army_maintenance_mult = 0.2 + scale = { + add = default_temperament_low_value_scale + min = 1 + } + } + domicile_temperament_high_modifier = { + name = domicile_temperament_high + domicile_monthly_gold_mult = 0.25 + domicile_monthly_piety_gain_mult = 0.25 + domicile_monthly_prestige_gain_mult = 0.25 + monthly_piety_gain = 0.3 + monthly_prestige_gain = 0.3 + army_maintenance_mult = 0.2 + scale = { + add = default_temperament_high_value_scale + min = 1 + } + } + domicile_temperament_high_modifier = { + name = domicile_temperament_high + army_toughness_mult = 0.05 + owned_contract_scheme_success_chance_growth_add = 0.4 + scale = { + add = default_temperament_high_value_scale + min = 1 + } + } + + domicile_temperament_high_modifier = { + name = domicile_temperament_high + tolerance_advantage_mod = 1 + scale = { + add = default_temperament_high_value_scale + min = 1 + max = 10 + if = { + limit = { + NOT = { has_perk = faithful_perk } + } + multiply = 0 + } + } + } + + domicile_temperament_high_modifier = { + name = domicile_temperament_high + knight_effectiveness_mult = 0.1 + scale = { + add = default_temperament_high_value_scale + min = 1 + if = { + limit = { + NOT = { has_perk = absolute_control_perk } + } + multiply = 0 + } + } + } + + + domicile_temperament_high_modifier = { + name = domicile_temperament_high + personal_scheme_phase_duration_add = -25 + scale = { + add = default_temperament_high_value_scale + min = 1 + if = { + limit = { + NOT = { has_perk = writing_history_perk } + } + multiply = 0 + } + } + } + + domicile_temperament_high_modifier = { + name = domicile_temperament_high + monthly_piety = 0.4 + scale = { + add = { + every_courtier = { + limit = { + faith = root.faith + } + add = 1 + } + } + if = { + limit = { + NOT = { has_perk = religious_icon_perk } + } + multiply = 0 + } + } + } + + domicile_temperament_high_modifier = { + name = domicile_temperament_high + diplomacy = 0.34 + intrigue = 0.34 + martial = 0.34 + stewardship = 0.34 + learning = 0.34 + scale = { + add = { + every_courtier = { + limit = { + is_imprisoned = no + } + faith = { + if = { + limit = { + NOT = { is_in_list = unique_faiths } + add_to_temporary_list = unique_faiths + } + } + } + } + every_in_list = { + list = unique_faiths + add = 1 + } + max = 15 + } + if = { + limit = { + NOT = { has_perk = apostate_perk } + } + multiply = 0 + } + } + } + domicile_building_slots = { + external_slot_1 = { + position = { 19.7% 5.5% } + size = { 15% 30% } + + ### EMPTY SLOT GREEN TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = tells + terrain = hills + terrain = plains + terrain = forest + terrain = farmlands + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_mask.png" + } + + ### EMPTY SLOT ROUGH TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = taiga + terrain = steppe + terrain = drylands + terrain = mountains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_rough.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_rough_mask.png" + } + + ### EMPTY SLOT WETLANDS TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_mask.png" + } + + ### EMPTY SLOT JUNGLE TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + terrain = jungle + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_wetlands.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_wetlands_mask.png" + } + + ### EMPTY SLOT SNOW TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_wetlands.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_wetlands_mask.png" + } + + ### EMPTY SLOT DESERT TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_drylands.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_drylands_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + + external_slot_4 = { + position = { 49.0% 2.5% } + size = { 15% 30% } + + ### EMPTY SLOT ASIAN + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/asian_empty_slot_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_04_mask.png" + } + + ### EMPTY SLOT SNOW MOUNTAIN TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + terrain = mountains + + OR = { + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_snow_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_snow_02_mask.png" + } + + ### EMPTY SLOT SNOW TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_snow_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_snow_02_mask.png" + } + + ### EMPTY SLOT GREEN TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = tells + terrain = hills + terrain = plains + terrain = forest + terrain = farmlands + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_02_mask.png" + } + + ### EMPTY SLOT ROUGH TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = taiga + terrain = steppe + terrain = drylands + terrain = mountains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_rough_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_rough_02_mask.png" + } + + ### EMPTY SLOT WETLANDS TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_green_02_mask.png" + } + + ### EMPTY SLOT JUNGLE TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + terrain = jungle + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_jungle_03.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_jungle_03_mask.png" + } + + ### EMPTY SLOT DESERT TERRAIN + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_drylands_03.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/laamp_building_empty_slot_drylands_03_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + + main_slot = { + slot_type = main + position = { 28.2% 13.2% } + size = { 28% 34.5% } + + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_01.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_01_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = hills + terrain = mountains + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png" + } + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_manor_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_byzantine_mask.png" + } + } + + external_slot_2 = { + position = { 4% 20% } + size = { 15% 30% } + + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_02_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_jungle_empty_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_06_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_drylands_empty_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_06_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = mountains + terrain = hills + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_rough_empty_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_06_mask.png" + } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_06_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + + external_slot_3 = { + position = { 14% 46% } + size = { 15% 30% } + + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_03.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_03_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_jungle_empty_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_04_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_drylands_empty_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_04_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = mountains + terrain = hills + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_rough_empty_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_04_mask.png" + } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_04_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + + external_slot_5 = { + position = { 64% 29% } + size = { 15% 30% } + + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_05.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_05_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_jungle_empty_03.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_03_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_drylands_empty_05.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_05_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = mountains + terrain = hills + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_rough_empty_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_02_mask.png" + } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_02_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + + external_slot_6 = { + position = { 43% 52% } + size = { 15% 30% } + + empty_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_06_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_jungle_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_drylands_empty_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_02_mask.png" + } + + empty_slot_asset = { + trigger = { + domicile_location = { + OR = { + terrain = mountains + terrain = hills + terrain = terraced_hills + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_rough_empty_05.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_05_mask.png" + } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_mask.png" + } + + + # Under Construction + construction_slot_asset = { + trigger = { + owner.culture = { + OR = { + has_graphical_chinese_culture_group_trigger = yes + has_graphical_japanese_culture_group_trigger = yes + } + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_mena_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png" + } + construction_slot_asset = { + trigger = { + domicile_location.culture = { + has_graphical_western_culture_group_trigger = yes + } + } + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png" + } + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png" + } + } + } + + domicile_asset = { + trigger = { + domicile_location.culture = { + has_graphical_east_asia_culture_group_trigger = yes + } + } + background = "gfx/interface/window_domiciles/estate_background_steppe_terrain.dds" + foreground = "gfx/interface/window_domiciles/estate_background_steppe_terrain_foreground.dds" + ambience = "event:/DLC/CE2/Ambience/2D/Domicile/ce2_amb_2d_domicile_yurt" + } + + + domicile_asset = { + trigger = { + domicile_location = { + OR = { + terrain = jungle + terrain = wetlands + terrain = floodplains + } + } + } + background = "gfx/interface/window_domiciles/estate_background_jungle_terrain.dds" + foreground = "gfx/interface/window_domiciles/estate_background_jungle_terrain_foreground.dds" + ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_wetlands" + } + + domicile_asset = { + trigger = { + domicile_location = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = steppe + } + } + } + background = "gfx/interface/window_domiciles/estate_background_dry_terrain.dds" + foreground = "gfx/interface/window_domiciles/estate_background_dry_terrain_foreground.dds" + ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_dry_lands" + } + + domicile_asset = { + trigger = { + domicile_location = { + OR = { + terrain = tells + terrain = hills + terrain = mountains + terrain = terraced_hills + } + } + } + background = "gfx/interface/window_domiciles/estate_background_rough_terrain.dds" + foreground = "gfx/interface/window_domiciles/estate_background_rough_terrain_foreground.dds" + ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_rough_lands" + } + + domicile_asset = { + background = "gfx/interface/window_domiciles/estate_background_green_terrain.dds" + foreground = "gfx/interface/window_domiciles/estate_background_green_terrain_foreground.dds" + ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_green_lands" + } +} diff --git a/common/dynasties/NEOW_dynasties.txt b/common/dynasties/NEOW_dynasties.txt index 460d9f27..d8f1029f 100644 --- a/common/dynasties/NEOW_dynasties.txt +++ b/common/dynasties/NEOW_dynasties.txt @@ -27,6 +27,10 @@ belpois_dynasty = { culture = bourguignon } +kohn_dynasty = { + name = dynn_britannia_kohn + culture = ashkenazi +} giry_dynasty = { name = dynn_giry culture = bourguignon diff --git a/common/flavorization/00_flavorization.txt b/common/flavorization/00_flavorization.txt index ac13b1c5..d38d081f 100644 --- a/common/flavorization/00_flavorization.txt +++ b/common/flavorization/00_flavorization.txt @@ -500,6 +500,12 @@ duchy_landless_adventurer_camp = { governments = { landless_adventurer_government } } +duchy_landless_minority_community = { + type = title + tier = duchy + priority = 30 + governments = { landless_minority_government } +} ### Devaraja ### #devaraja = { # type = character diff --git a/common/flavorization/00_title_holders.txt b/common/flavorization/00_title_holders.txt index 82b34322..3949e008 100644 --- a/common/flavorization/00_title_holders.txt +++ b/common/flavorization/00_title_holders.txt @@ -10262,6 +10262,52 @@ emperor_administrative_female_brit = { # name_lists = { name_list_roman } #} ### LANDLESS ADVENTURERS +duke_landless_minority_community_male_minority_community = { + type = character + gender = male + special = holder + tier = duchy + domicile_type = minority_community + priority = 25 + governments = { landless_minority_government } + + flavourization_rules = { + spouse_takes_title = no + } +} + +duke_landless_minority_community_female_minority_community = { + type = character + gender = female + special = holder + tier = duchy + domicile_type = minority_community + priority = 25 + governments = { landless_minority_government } + + flavourization_rules = { + spouse_takes_title = no + } +} + +spouse_landless_minority_community_male = { + type = character + gender = male + special = domicile + domicile_type = minority_community + priority = 25 + governments = { landless_minority_government } +} + +spouse_landless_minority_community_holder_female = { + type = character + gender = female + special = domicile + domicile_type = minority_community + priority = 25 + governments = { landless_minority_government } +} + duke_landless_adventurer_male_camp = { type = character gender = male diff --git a/common/flavorization/01_domicile.txt b/common/flavorization/01_domicile.txt index 10e7e370..045ab51c 100644 --- a/common/flavorization/01_domicile.txt +++ b/common/flavorization/01_domicile.txt @@ -19,3 +19,13 @@ domicile_estate = { top_liege = no } } +domicile_minority_community = { + type = domicile + domicile_type = minority_community + priority = 26 + governments = { landless_minority_government } + + flavourization_rules = { + top_liege = no + } +} \ No newline at end of file diff --git a/common/game_concepts/00_game_concepts.txt b/common/game_concepts/00_game_concepts.txt new file mode 100644 index 00000000..a4e38797 --- /dev/null +++ b/common/game_concepts/00_game_concepts.txt @@ -0,0 +1,3276 @@ +vassal = { + alias = { vassals vassalize vassalization vassal_possessive vassals_possessive vassalage } + parent = ruler + texture = "gfx/interface/icons/icon_vassal.dds" +} + +direct_vassal = { + texture = "gfx/interface/icons/icon_vassal.dds" + alias = { direct_vassals } + parent = vassal +} + +powerful_vassal = { + texture = "gfx/interface/icons/portraits/powerful_vassal.dds" + framesize = { 40 40 } + + frame = 1 + alias = { powerful_vassals powerful_vassal_powerful powerful_vassal_possessive } + parent = vassal +} + +strong_vassal = { + texture = "gfx/interface/icons/icon_vassal.dds" + alias = { strong_vassals } + parent = vassal +} + +vassal_stance = { + parent = vassal + alias = { vassal_stances preferred_heir unpreferred_heir preferred_heirs unpreferred_heirs } + texture = "gfx/interface/icons/icon_vassal.dds" +} + +ruler = { + alias = { rulers rulerpossessive } +} + +title = { + texture = "gfx/interface/icons/message_feed/titles.dds" + alias = { title_i titles titlepossessive } +} + +usurp_title = { + texture = "gfx/interface/icons/message_feed/titles.dds" + alias = { usurp usurpation usurped } +} + +domain_limit = { + texture = "gfx/interface/icons/icon_domain.dds" +} + +recently_acquired_holding = { + alias = { recently_acquired_holdings } + texture = "gfx/interface/icons/map_icons/onmap_holding_icon.dds" +} + +primary_title = { + texture = "gfx/interface/icons/message_feed/titles.dds" + parent = title + alias = { primary_titles } +} + +income = { + texture = "gfx/interface/icons/icon_gold.dds" +} +taxes = { + alias = { tax taxation } + texture = "gfx/interface/icons/council_task_types/task_collect_taxes.dds" +} +levies = { + parent = soldiers + alias = { levy } + texture = "gfx/interface/icons/icon_levies.dds" +} + +vassal_obligations = { + texture = "gfx/interface/icons/icon_contract_modification.dds" + framesize = { 60 60 } + frame = 1 + alias = { obligations obligation } +} + + +opinion = { + alias = { opinions opinion_i } + texture = "gfx/interface/icons/icon_opinion.dds" +} +clergy_opinion = { + texture = "gfx/interface/icons/icon_opinion.dds" + parent = opinion +} +secular_opinion = { + texture = "gfx/interface/icons/icon_opinion.dds" + parent = opinion +} +faction = { + texture = "gfx/interface/skinned/hud_maintab/maintab_factions.dds" + framesize = { 132 108 } + + frame = 3 + alias = { factions } +} +independence_faction = { + alias = { independence_factions faction_independence } + parent = faction +} +liberty_faction = { + alias = { faction_liberty liberty_factions } + parent = faction +} +claimant_faction = { + alias = { claimant_factions } + parent = faction +} +ceremonial_claimant_faction = { + alias = { ceremonial_claimant_factions } + parent = faction +} +peasant_faction = { + alias = { peasant_factions } + parent = faction +} +escalated_peasant_faction = { + alias = { escalated_peasant_factions } + parent = faction +} +popular_faction = { + alias = { popular_factions } + parent = faction +} +scheme = { + alias = { schemes scheming } + texture = "gfx/interface/icons/icon_scheme.dds" +} + +scheme_countermeasure = { + alias = { scheme_countermeasures scheme_countermeasure_countermeasure scheme_countermeasure_countermeasures } + parent = scheme +} + +scheme_precaution = { + alias = { scheme_precautions scheme_precaution_precaution scheme_precaution_precautions } + parent = scheme +} + +hostile_scheme = { + texture = "gfx/interface/icons/scheme_types/icon_scheme_hostile.dds" + alias = { hostile_schemes scheme_hostile } + parent = scheme +} +personal_scheme = { + texture = "gfx/interface/icons/scheme_types/icon_scheme_personal.dds" + alias = { personal personal_schemes } + parent = scheme +} +political_scheme = { + texture = "gfx/interface/icons/scheme_types/icon_scheme_political.dds" + alias = { political_schemes political } + parent = scheme +} +scheme_phase = { + alias = { scheme_phases scheme_phase_phase scheme_phase_phases } + parent = scheme +} +secret_scheme = { + texture = "gfx/interface/icons/schemes/icon_secrecy.dds" + alias = { secret_schemes secret_scheme_single } + parent = scheme +} +agent_discovery = { + texture = "gfx/interface/icons/message_feed/spy_master.dds" + alias = { agent_discovery_discovered } + parent = scheme +} +scheme_discovery_chance = { + texture = "gfx/interface/icons/schemes/icon_discovered_scheme.dds" + parent = scheme +} +predicted_scheme_difficulty = { + alias = { predicted_difficulty } + parent = scheme +} +agents = { + texture = "gfx/interface/icons/message_feed/spy_master.dds" + alias = { agent agent_i } + parent = scheme +} +scheme_target = { + alias = { scheme_target_target scheme_targets } + parent = scheme +} +scheme_owner = { + alias = { schemer scheme_owners scheme_owner_owner } + parent = scheme +} + +prevented_murder = { + alias = { prevented_murder_prevent } + parent = scheme +} + +secret = { + texture = "gfx/interface/icons/message_feed/secret.dds" + alias = { secrets } +} + +barony = { + alias = { baronies } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 1 +} +baron = { + alias = { barons } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 1 +} + +county = { + alias = { counties } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 2 +} + +count = { + alias = { counts } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 2 +} + +duchy = { + alias = { duchies } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 3 +} +duke = { + alias = { dukes } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 3 +} + +kingdom = { + alias = { kingdoms } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 4 +} +king = { + alias = { kings } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 4 +} + +empire = { + alias = { empires } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 5 +} +emperor = { + alias = { emperors } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 5 +} + +hegemony = { + alias = { hegemonies } + parent = title + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 6 +} +hegemon = { + alias = { hegemons } + parent = rank + + texture = "gfx/interface/coat_of_arms/crown_strip_115_gameconcept.dds" + framesize = { 104 104 } + frame = 6 +} + +culture = { + alias = { cultures cultural culture_possessive culture_i } + texture = "gfx/interface/icons/icon_culture.dds" +} +heritage = { + parent = culture_pillar + texture = "gfx/interface/icons/icon_culture.dds" +} +ethos = { + parent = culture_pillar + texture = "gfx/interface/icons/icon_culture.dds" +} +language = { + alias = { languages } + texture = "gfx/interface/icons/scheme_types/icon_scheme_learn_language.dds" +} +language_limit = { + parent = language + texture = "gfx/interface/icons/scheme_types/icon_scheme_learn_language.dds" +} + +martial_custom = { + parent = culture_pillar + texture = "gfx/interface/icons/icon_culture.dds" +} + +cultural_acceptance = { + parent = culture + alias = { cultural_acceptance_i } + texture = "gfx/interface/icons/council_task_types/task_accept_culture.dds" +} + +cultural_acceptance_baseline = { + parent = cultural_acceptance + texture = "gfx/interface/icons/icon_culture.dds" +} + +culture_pillar = { + parent = culture + alias = { culture_pillars } + texture = "gfx/interface/icons/icon_culture.dds" +} + +culture_tradition = { + parent = culture + alias = { culture_traditions tradition traditions } + texture = "gfx/interface/icons/icon_culture.dds" +} + +culture_intermingling = { + parent = culture + texture = "gfx/interface/icons/icon_culture.dds" +} + +county_opinion = { + texture = "gfx/interface/icons/modifiers/county_modifier_opinion_positive.dds" +} + +faith = { + alias = { faiths faithpossessive } + texture = "gfx/interface/icons/event_types/type_faith.dds" +} +religion = { + parent = faith + alias = {religions} + texture = "gfx/interface/icons/event_types/type_faith.dds" +} +religious_family = { + alias = {religious_families} + texture = "gfx/interface/icons/event_types/type_faith.dds" +} +head_of_faith = { + parent = faith + alias = {heads_of_faith} +} +spiritual_head_of_faith = { + alias = {head_of_faith_spiritual} + parent = head_of_faith +} +temporal_head_of_faith = { + alias = {head_of_faith_temporal} + parent = head_of_faith +} +# Capital of a county +county_capital = { + alias = { county_capitals } + + texture = "gfx/interface/icons/icon_capital.dds" + framesize = { 60 60 } + frame = 1 +} + +# Capital of a character +realm_capital = { + alias = { realm_capitals capital capitals realm_capital_possessive capital_possessive } + + texture = "gfx/interface/icons/icon_capital.dds" + framesize = { 60 60 } + frame = 2 +} + +de_jure_capital = { +} + +capital_duchy = {} + +heir = { + texture = "gfx/interface/icons/message_feed/heir.dds" + alias = { heirs heir_possessive } +} + +designated_heir = { +} + +primary_heir = { + texture = "gfx/interface/icons/message_feed/heir.dds" + alias = { primary_heirs primary_heir_possessive } + parent = heir +} + +player_heir = { + texture = "gfx/interface/icons/message_feed/heir.dds" + parent = heir + + # no plural alias please, focus on the one player heir you (could) have. +} + +title_heir = { + alias = { title_heirs } + parent = heir +} + +realm_heir = { + alias = { realm_heirs } + parent = heir +} + +nominate = { + alias = { nomination nominations nominate_heir } +} + + +liege = { + alias = { lieges liege_possessive } + parent = ruler +} + +rightful_liege = { + texture = "gfx/interface/icons/levy_tax_reduction.dds" + parent = liege +} + +megaduke_penalty = { +} + +top_liege = { + alias = { top_lieges top_liege_possessive } + parent = liege +} + +holding = { + alias = { holdings } + texture = "gfx/interface/icons/map_icons/onmap_holding_icon.dds" +} + +holding_type = { + parent = holding + alias = { holding_types } + texture = "gfx/interface/icons/map_icons/onmap_holding_icon.dds" +} + +castle_holding = { + alias = { castle castles castle_holdings } + parent = holding_type + texture = "gfx/interface/icons/icon_holding_castle.dds" +} + +temple_holding = { + alias = { temple temples temple_holdings } + parent = holding_type + texture = "gfx/interface/icons/icon_holding_church.dds" +} + +city_holding = { + alias = { city cities city_holdings } + parent = holding_type + texture = "gfx/interface/icons/icon_holding_city.dds" +} + +tribal_holding = { + parent = holding_type + alias = { tribe tribes tribal_holdings } + texture = "gfx/interface/icons/map_icons/recently_raided.dds" +} + +temple_citadel_holding = { + parent = holding_type + alias = { temple_citadel temple_citadels temple_citadel_holdings } + texture = "gfx/interface/icons/icon_holding_temple_citadel.dds" +} + +government = { + alias = { governments government_form government_forms } +} +domain = { + alias = { domains domain_i } + texture = "gfx/interface/icons/icon_domain.dds" +} +vassal_limit = { + parent = vassal + texture = "gfx/interface/icons/icon_vassal.dds" +} +leasing = { + texture = "gfx/interface/icons/icon_holding_church.dds" + alias = { lease leases leased lessee } +} +regiment = { + texture = "gfx/interface/icons/icon_soldier.dds" + alias = { regiments } +} +stationed_regiment = { + parent = regiment + texture = "gfx/interface/icons/message_feed/marshal_job.dds" + alias = { station_regiment stationed station stationed_holding } +} +realm = { + texture = "gfx/interface/skinned/hud_maintab/maintab_my_realm.dds" + framesize = { 132 108 } + + frame = 3 + alias = { realms realm_possessive } +} +gold = { + alias = { gold_i } + + texture = "gfx/interface/icons/icon_gold.dds" +} + +trait = { + texture = "gfx/interface/icons/message_feed/trait.dds" + alias = { traits } +} +trait_level_track = { + parent = trait +} +trait_level_track_xp = { + parent = trait_level_track +} + +spouse = { + texture = "gfx/interface/icons/message_feed/spouse_job.dds" + alias = { spouses spouse_possessive } +} + +primary_spouse = { + parent = spouse + texture = "gfx/interface/icons/message_feed/spouse_job.dds" + +} + +available_spouse = { + parent = spouse + texture = "gfx/interface/icons/message_feed/spouse_job.dds" + +} + +vizier = { + alias = { viziers vizierate } + texture = "gfx/interface/icons/scale_of_power.dds" + parent = diarch +} + +vizier_succession_score = { + texture = "gfx/interface/icons/character_interactions/icon_entrench_regency.dds" + parent = vizier +} + +vizier_extravagance = { + alias = { vizier_extravagances vizier_extravagance_extravagance vizier_extravagance_extravagances } + parent = vizier +} + +duumvirate = { + alias = { duumvirates co_emperor co_emperors } + texture = "gfx/interface/icons/scale_of_power.dds" + parent = co_rulership +} + +nominal_duumvirate = { + alias = { nominal_duumvirates junior_emperor junior_emperors } + texture = "gfx/interface/icons/scale_of_power.dds" + parent = co_rulership +} + +co_monarchy = { + alias = { co_monarchies co_monarch co_monarchs } + texture = "gfx/interface/icons/scale_of_power.dds" + parent = co_rulership +} + +co_rulership = { + alias = { co_rulerships co_ruler co_rulers } + texture = "gfx/interface/icons/scale_of_power.dds" + parent = diarch +} + +piety = { + alias = { piety_i pious } + + texture = piety # a special keyword as the actual texture depends on the player's faith +} + +piety_experience = { + parent = piety +} + +piety_level = { + parent = piety + texture = piety + alias = { piety_levels } +} + +maximum_piety_level = { + parent = piety_level + texture = piety +} + +prestige = { + alias = { prestige_i prestigious } + + texture = "gfx/interface/icons/modifiers/icon_prestige_01.dds" +} + +prestige_experience = { + alias = { prestige_experience_i } + + parent = prestige + texture = "gfx/interface/icons/modifiers/icon_prestige_05.dds" +} + +prestige_level = { + parent = prestige + texture = "gfx/interface/icons/modifiers/icon_prestige_05.dds" + alias = { prestige_levels } +} + +de_jure = { + texture = "gfx/interface/icons/casus_bellis/de_jure_cb.dds" +} +de_jure_drift = { + parent = de_jure + texture = "gfx/interface/icons/casus_bellis/de_jure_cb.dds" + alias = { de_jure_drift_drifted de_jure_drift_drift de_jure_drifting } +} + +dynast = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + parent = dynasty +} + +dynast_interaction = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + parent = dynast + alias = { dynast_interactions } +} + +dynasty = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + alias = { dynasties dynasty_members } +} + +dynasty_prestige = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_04.dds" + alias = { dynasty_prestige_i renown } +} + +dynasty_prestige_level = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_04.dds" +} + +house = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + alias = { houses house_possessive } +} + +house_head = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + alias = { house_heads house_head_head house_head_heads house_heads_possessive } +} + +clan_house_head = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + parent = house_head + alias = { clan_house_heads clan_house_head_head } +} + +house_head_interaction = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + parent = house_head +} + +soldiers = { + parent = regiment + alias = { soldier soldier_i } + + texture = "gfx/interface/icons/icon_soldier.dds" +} + +combat_width = { + texture = "gfx/interface/icons/icon_combat_width.dds" +} + +combat_roll = { + alias = { roll rolls advantage_roll advantage_rolls } +} + +toughness = { + texture = "gfx/interface/icons/regimenttypes/unit_stat_toughness.dds" +} + +damage = { + texture = "gfx/interface/icons/regimenttypes/unit_stat_damage.dds" +} + +siege_progress = { + texture = "gfx/interface/icons/regimenttypes/unit_stat_siege_progress.dds" +} + +siege_weapon = { + texture = "gfx/interface/icons/regimenttypes/trebuchet.dds" + alias = { siege_weapons } +} + +pursuit = { + texture = "gfx/interface/icons/regimenttypes/unit_stat_pursuit.dds" +} + +screen = { + texture = "gfx/interface/icons/regimenttypes/unit_stat_screen.dds" +} + +casualty = { + texture = "gfx/interface/icons/icon_kill.dds" + alias = { casualties } +} + +aftermath = { +} + +rally_point = { + alias = { rally_points } + texture = "gfx/interface/icons/icon_banner.dds" +} + +diplomacy_skill = { + alias = { diplomacy_i diplomacy } + parent = skills + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 1 +} + +martial_skill = { + alias = { martial_i martial } + parent = skills + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 2 + +} + +stewardship_skill = { + alias = { stewardship_i stewardship } + parent = skills + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 3 +} + +intrigue_skill = { + alias = { intrigue_i intrigue } + parent = skills + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 4 +} + +learning_skill = { + alias = { learning_i learning } + parent = skills + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 5 +} + +health = { + alias = { healthy } + texture = "gfx/interface/icons/character_status/icon_health.dds" + framesize = { 60 60 } + frame = 2 +} + +child_health = { + parent = health + texture = "gfx/interface/icons/character_status/icon_health.dds" + framesize = { 60 60 } + frame = 2 +} + +adult_health = { + parent = health + texture = "gfx/interface/icons/character_status/icon_health.dds" + framesize = { 60 60 } + frame = 2 +} + +elderly_health = { + parent = health + texture = "gfx/interface/icons/character_status/icon_health.dds" + framesize = { 60 60 } + frame = 2 +} + +character_death = { + alias = { character_death_dying character_death_die character_death_dies character_death_death character_death_deaths } + texture = "gfx/interface/icons/icon_dead.dds" +} + +death_natural_causes = { + parent = character_death + alias = { death_natural_cause } + texture = "gfx/interface/icons/death_reason/death_natural.dds" +} + +death_religion = { + parent = character_death + alias = { death_religious } + texture = "gfx/interface/icons/death_reason/death_disease.dds" +} + +death_combat = { + parent = character_death + texture = "gfx/interface/icons/death_reason/death_murder.dds" +} + +death_murder = { + parent = character_death + texture = "gfx/interface/icons/death_reason/death_murder.dds" +} + +fertility = { + texture = "gfx/interface/icons/modifiers/fertility_positive.dds" +} + +life_expectancy = { + texture = "gfx/interface/icons/character_status/icon_health.dds" + framesize = { 60 60 } + frame = 1 +} + +betrothal = { + alias = { betrothed betrothals } + texture = "gfx/interface/icons/marriage_types.dds" + framesize = { 60 60 } + frame = 3 +} + +matrilineal = { + alias = { matrilineally } + texture = "gfx/interface/icons/marriage_types.dds" + framesize = { 60 60 } + frame = 2 +} + +patrilineal = { + texture = "gfx/interface/icons/marriage_types.dds" + framesize = { 60 60 } + frame = 1 +} + +concubinage = { + alias = { concubine concubines concubine_male concubine_female } + texture = "gfx/interface/icons/marriage_types.dds" + framesize = { 60 60 } + frame = 5 +} + +stress = { + alias = { stress_i stress_gain_i stress_loss_i stress_critical_i stress_loss } + texture = "gfx/interface/icons/stress/icon_stress.dds" +} + +marriage = { + alias = { married marry marries marriages marrying } + texture = "gfx/interface/icons/character_interactions/icon_marriage.dds" +} + +adult = { + alias = { adults adulthood } +} + +child = { + texture = "gfx/interface/icons/message_feed/child.dds" + alias = { children child_possessive } +} + +eligible_child = { + texture = "gfx/interface/icons/message_feed/child.dds" + alias = { eligible_children } +} + +alliance = { + texture = "gfx/interface/icons/message_feed/alliance.dds" + alias = { alliances allies allied ally ally_i } +} +siege = { + alias = { besiege besieged sieges besieging } + texture = "gfx/interface/icons/map_icons/onmap_siege_icon.dds" +} +assault = { + alias = { assaults assaulting assaulted } +} +fort_level = { + alias = { fort_level_i } + texture = "gfx/interface/window_siege/fort_icon.dds" +} + +garrison = { + texture = "gfx/interface/icons/icon_garrison.dds" +} + +garrison_reinforcement = { + texture = "gfx/interface/icons/icon_garrison.dds" +} + +army = { + texture = "gfx/interface/skinned/hud_maintab/maintab_military.dds" + framesize = { 132 108 } + + frame = 3 + alias = { armies } +} + +holy_order = { + texture = "gfx/interface/icons/government_types/holy_order_government.dds" + alias = { holy_orders holy_order_i } +} + +holy_order_patron = { + texture = "gfx/interface/icons/message_feed/holy_order.dds" +} + +mercenary_company = { + texture = "gfx/interface/icons/government_types/mercenary_government.dds" + alias = { mercenary mercenaries mercenary_i } +} + +mercenary_contract = { + alias = { mercenary_contracts } + texture = "gfx/interface/icons/message_feed/mercenary.dds" +} + +hired_troops = { + texture = "gfx/interface/icons/message_feed/mercenary.dds" +} + +commander_trait = { + alias = { commander_traits } + texture = "gfx/interface/icons/icon_commander_trait.dds" + parent = trait +} + +education_focus = { + alias = { education educations educate educated education_focus_short } +} + +lifestyle = { + texture = "gfx/interface/icons/alerts/action_can_choose_lifestyle.dds" + framesize = { 144 144 } + frame = 2 + alias = { lifestyles } +} + +lifestyle_experience = { + texture = "gfx/interface/icons/alerts/action_can_choose_lifestyle.dds" + framesize = { 144 144 } + frame = 2 + alias = { experience } +} + +focus = { + alias = { focuses } +} + +perk = { + texture = "gfx/interface/icons/lifestyles_perks/node_intrigue.dds" + frame = 2 + framesize = { 60 60 } + alias = { perks } +} + +dynasty_perk = { + alias = { dynasty_perks } + texture = "gfx/interface/icons/alerts/action_can_choose_dynasty_perk.dds" + framesize = { 144 144 } + frame = 2 +} + +martial_lifestyle = { + texture = "gfx/interface/icons/alerts/action_lifestyle_martial.dds" + alias = { martial_lifestyle_i } + framesize = { 144 144 } + frame = 2 + parent = focus +} + +intrigue_lifestyle = { + texture = "gfx/interface/icons/alerts/action_lifestyle_intrigue.dds" + framesize = { 144 144 } + frame = 2 + alias = { intrigue_rigueint } + alias = { intrigue_9_14_20_18_9_7_21_5 } + alias = { intrigue_lqwuljxh } + alias = { intrigue_lifestyle_i } + parent = focus +} + +diplomacy_lifestyle = { + texture = "gfx/interface/icons/alerts/action_lifestyle_diplo.dds" + alias = { diplomacy_lifestyle_i } + framesize = { 144 144 } + frame = 2 + parent = focus +} + +stewardship_lifestyle = { + texture = "gfx/interface/icons/alerts/action_lifestyle_stewarship.dds" + alias = { stewardship_lifestyle_i } + framesize = { 144 144 } + frame = 2 + parent = focus +} + +learning_lifestyle = { + texture = "gfx/interface/icons/alerts/action_lifestyle_learning.dds" + alias = { learning_lifestyle_i } + framesize = { 144 144 } + frame = 2 + parent = focus +} + +wanderer_lifestyle = { + texture = "gfx/interface/icons/lifestyles/wanderer_lifestyle.dds" + framesize = { 160 160 } + frame = 1 + parent = focus +} + +truce = { + texture = "gfx/interface/icons/diplomatic_icons.dds" + framesize = { 120 120 } + frame = 3 + alias = { truces } +} + +decision = { + texture = "gfx/interface/skinned/hud_maintab/maintab_decisions.dds" + framesize = { 132 108 } + + frame = 3 + alias = { decisions decide } +} + +activity = { + texture = "gfx/interface/icons/activities/activity_feast.dds" + alias = { activities } +} + +activity_option = { + alias = { activity_options } + parent = activity +} + +activity_type = { + alias = { activity_types } + parent = activity +} + +activity_state_passive = { + parent = activity +} + +activity_state_active = { + parent = activity +} + +activity_phase = { + alias = { activity_phases } + parent = activity +} + +activity_phase_action = { + parent = activity_phase +} + +activity_guest = { + alias = { activity_guest_short activity_guests activity_guests_short activity_attending } + parent = activity +} +activity_host = { + alias = { activity_host_possessive activity_host_short } + parent = activity +} + +intent = { + alias = { intents } + parent = activity +} + +hunt_success_chance = { + alias = { hunt_success_chance_no_prefix } + texture = "gfx/interface/icons/activities/activity_hunt.dds" + parent = activity +} + +hunt_danger = { + alias = { hunt_danger_no_prefix hunt_dangerous } + texture = "gfx/interface/icons/activities/activity_hunt.dds" + parent = activity +} + +holder = { + alias = { holders holder_possessive holders_possessive hold } +} + +building = { + texture = "gfx/interface/icons/message_feed/building.dds" + alias = { buildings } +} + +duchy_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { duchy_buildings } +} + +special_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { special_buildings } +} + +great_building = { + texture = "gfx/interface/icons/icon_great_project.dds" + parent = building + alias = { great_buildings } +} + +ruined_building = { + texture = "gfx/interface/icons/message_feed/ruined_building.dds" + parent = great_building + alias = { ruined } +} + +rebuilt_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = great_building + alias = { rebuilt rebuilding } +} + +economic_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { economic_buildings } +} + +military_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { military_buildings } +} + +fortification_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { fortification_buildings } +} + +pious_building = { + texture = "gfx/interface/icons/message_feed/building.dds" + parent = building + alias = { pious_buildings } +} + +battle = { + texture = "gfx/interface/icons/map_icons/combat_map_icon.dds" + alias = {battles} +} + +retreat = { + alias = { retreats } + texture = "gfx/interface/icons/icon_fled.dds" +} + +war = { + texture = "gfx/interface/icons/character_interactions/declare_war_interaction.dds" + alias = {wars} +} + +civil_war = { + alias = { civil_wars revolt revolts revolting } + parent = war +} + +raid = { + alias = { raiding raids raider raiders raided raid_i } + texture = "gfx/interface/icons/map_icons/onmap_raid_icon.dds" +} + +loot = { + texture = "gfx/interface/icons/icon_loot.dds" + alias = { loot_i } +} + +barter = { + texture = "gfx/interface/icons/icon_barter.dds" + alias = { bartering bartered barter_i barters trading traded trades trade } + requires_dlc_flag = all_under_heaven +} + +barterer = { + texture = "gfx/interface/icons/icon_barter.dds" + parent = barter + alias = { barterers traders trader } +} + +barter_goods = { + texture = "gfx/interface/icons/icon_barter.dds" + parent = barter + alias = { barter_goods_i trade_goods } +} + +army_commander = { + texture = "gfx/interface/icons/icon_commander.dds" + alias = {commander commanders army_commanders commanding} +} + +illness = { + parent = health + alias = { ill illnesses sick sickness diseases } + texture = "gfx/interface/icons/traits/ill.dds" +} + +medical_treatments = { + texture = "gfx/interface/icons/traits/ill.dds" +} + +occupation = { + alias = {occupy occupying occupied occupations} +} + +fortified_holding = { + texture = "gfx/interface/icons/icon_holding_castle.dds" + alias = {fortified_holdings} +} + +education_trait = { + texture = "gfx/interface/icons/traits/education_diplomacy_3.dds" + alias = {education_traits} + parent = trait +} + +personality_trait = { + texture = "gfx/interface/icons/traits/trusting.dds" + parent = trait + alias = {personality_traits } +} + +lifestyle_trait = { + alias = { lifestyle_traits } + texture = "gfx/interface/icons/traits/diplomat.dds" + parent = trait +} + +physical_trait = { + alias = { physical_traits } + texture = "gfx/interface/icons/traits/strong.dds" + parent = trait +} + +fame_trait = { + texture = "gfx/interface/icons/traits/augustus.dds" + parent = trait +} + +health_trait = { + texture = "gfx/interface/icons/traits/bubonic_plague.dds" + parent = trait +} +childhood_trait = { + texture = "gfx/interface/icons/traits/bossy.dds" + parent = trait +} + +casus_belli = { + texture = "gfx/interface/icons/casus_bellis/de_jure_cb.dds" + alias = { casus_bellis } +} + +battle_advantage = { + texture = "gfx/interface/icons/icon_battle_advantage.dds" + alias = { advantage } +} + +war_score = { + texture = "gfx/interface/icons/war_score/icon_war_score_battles.dds" +} + +war_target = { + alias = { war_targets } +} + +war_leaders = { + alias = { war_leader } +} + +men_at_arms = { + parent = soldiers + texture = "gfx/interface/icons/regimenttypes/_default.dds" +} + +skirmishers = { + alias = { skirmisher } + texture = "gfx/interface/icons/regimenttypes/skirmishers.dds" + parent = men_at_arms +} + +archers = { + alias = { archer } + texture = "gfx/interface/icons/regimenttypes/bowmen.dds" + parent = men_at_arms +} + + +light_cavalry = { + texture = "gfx/interface/icons/regimenttypes/light_cavalry.dds" + parent = men_at_arms +} + +heavy_cavalry = { + texture = "gfx/interface/icons/regimenttypes/heavy_cavalry.dds" + parent = men_at_arms +} + +spearmen = { + texture = "gfx/interface/icons/regimenttypes/pikemen.dds" + parent = men_at_arms +} + +heavy_infantry = { + texture = "gfx/interface/icons/regimenttypes/heavy_infantry.dds" + parent = men_at_arms +} + +archer_cavalry = { + texture = "gfx/interface/icons/regimenttypes/horse_archers.dds" + parent = men_at_arms +} + +camel_cavalry = { + texture = "gfx/interface/icons/regimenttypes/camel_riders.dds" + parent = men_at_arms +} + +elephant_cavalry = { + texture = "gfx/interface/icons/regimenttypes/war_elephants.dds" + parent = men_at_arms +} + +gunpowder = { + texture = "gfx/interface/icons/regimenttypes/gunpowder.dds" + parent = men_at_arms +} + +peasant_militia = { + texture = "gfx/interface/icons/regimenttypes/pikemen_militia.dds" + parent = men_at_arms +} + +special_troops = { + texture = "gfx/interface/icons/icon_special_troops.dds" +} + +terrain = { + alias = { terrains } + texture = "gfx/interface/icons/terrain_types/hills.dds" +} + +independent_ruler = { + alias = { independent independent_rulers } + parent = ruler +} + +unlanded = { +} + +landed = { + alias = { land } +} + +routed_soldiers = { + parent = soldiers + texture = "gfx/interface/icons/icon_soldier_survivor.dds" +} + +dead_soldiers = { + parent = soldiers + texture = "gfx/interface/icons/icon_dead.dds" +} + +top_realm = { + parent = realm +} + +prison = { + alias = { imprisons imprison imprisoned prisons imprisoning imprisonment prisoner prisoners jailor } + texture = "gfx/interface/icons/event_types/type_prison.dds" +} + +dungeon = { + parent = prison + texture = "gfx/interface/icons/event_types/type_prison.dds" + alias = { dungeons } +} + +stockade = { + parent = prison + texture = "gfx/interface/icons/event_types/type_prison.dds" + alias = { stockades } +} + +house_arrest = { + parent = prison + texture = "gfx/interface/icons/event_types/type_prison.dds" +} + +close_family = { + parent = family + alias = { close_family_members close_family_member } + texture = "gfx/interface/icons/event_types/type_family.dds" +} + +extended_family = { + parent = family + alias = { extended_family_members } + texture = "gfx/interface/icons/event_types/type_family.dds" +} + +family = { + alias = { family_members family_member } + texture = "gfx/interface/icons/event_types/type_family.dds" +} + +kinslaying = { + alias = { kinslayer kinslayers } + texture = "gfx/interface/icons/traits/kinslayer_2.dds" +} + +title_claim = { + alias = { title_claims claim claims claimed claim_i } + texture = "gfx/interface/icons/title_status/icon_claim_pressed.dds" +} + +renounce = { + alias = { renounced } +} + +claimant = { + alias = { claimants claimant_possessive } + texture = "gfx/interface/icons/casus_bellis/claim_cb.dds" +} + +court = { + texture = "gfx/interface/skinned/hud_maintab/maintab_court.dds" + framesize = { 132 108 } + + frame = 3 + alias = { courts } +} + +courtier = { + texture = "gfx/interface/skinned/hud_maintab/maintab_court.dds" + framesize = { 132 108 } + + frame = 3 + alias = { courtiers } +} + +court_host = { + alias = { host hosting } +} + +noble = { + alias = { nobles noblemen nobleman noblewoman noblewomen nobility } +} + +commoner = { + texture = "gfx/interface/coat_of_arms/lowborn.dds" + alias = { commoners lowborn } +} + +court_guest = { + texture = "gfx/interface/icons/message_feed/guest.dds" + alias = { guest guests } +} + +wanderer = { + texture = "gfx/interface/icons/message_feed/guest.dds" + alias = { wanderers } +} + +prowess_skill = +{ + parent = skills + alias = { prowess prowess_i natural_prowess } + + texture = "gfx/interface/icons/icon_skills.dds" + framesize = { 60 60 } + frame = 6 +} + +skills = { + texture = "gfx/interface/icons/message_feed/learning.dds" + alias = { skill } +} + +dread = { + alias = { dreadful dreaded dread_i } + texture = "gfx/interface/icons/icon_dread.dds" +} + +fervor = { + parent = faith + texture = "gfx/interface/icons/icon_fervor.dds" +} + + +doctrines = { + parent = faith + alias = { doctrine } +} + +gender_doctrines = { + parent = doctrines + parent = doctrine +} + +debt = { + parent = gold + texture = "gfx/interface/icons/combat_effects/owner_in_debt.dds" +} + +faction_discontent = { + parent = faction + alias = { discontent } +} + +faction_military_power = { + parent = faction + alias = { military_power } +} + +council = { + texture = "gfx/interface/skinned/hud_maintab/maintab_council.dds" + framesize = { 132 108 } + alias = { council_i } + + frame = 3 +} + +councillor = { + texture = "gfx/interface/icons/message_feed/council.dds" + alias = { councillors } +} + +councillor_task = { + texture = "gfx/interface/icons/message_feed/a_catch_all_councillor_icon.dds" + alias = { councillor_tasks } +} + +councillor_task_possible_side_effects = { + parent = councillor_task +} + +spymaster = { + texture = "gfx/interface/icons/message_feed/spy_master.dds" + parent = councillor +} + +steward = { + texture = "gfx/interface/icons/message_feed/steward_job.dds" + parent = councillor + alias = { stewards } +} + +chancellor = { + texture = "gfx/interface/icons/message_feed/chancellor_job.dds" + parent = councillor + alias = { chancellors } +} + +marshal = { + texture = "gfx/interface/icons/message_feed/marshal_job.dds" + parent = councillor + alias = { marshals } +} + +court_chaplain = { + texture = "gfx/interface/icons/message_feed/religious_councillor_job.dds" + parent = councillor + alias = { court_chaplains } +} + +realm_priest = { + texture = "gfx/interface/icons/message_feed/bishop.dds" + parent = councillor + alias = { realm_priests realm_priest_possessive } +} + +espionage = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_find_secrets.dds" +} + +disrupt_schemes = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_disrupt_schemes.dds" +} + +increase_control = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_increase_control.dds" +} + +fabricate_claim = { + parent = councillor_task + alias = { fabricate_claim_short fabricated_claims_short fabricating_claims } + texture = "gfx/interface/icons/council_task_types/task_fabricate_claim.dds" +} + +collect_taxes = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_collect_taxes.dds" +} + +promote_culture = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_promote_culture.dds" +} + +accept_culture = { + alias = { promoting_cultural_acceptance } + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_accept_culture.dds" +} + +manage_guards = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_manage_guards.dds" +} + +convince_dejure = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_convince_dejure.dds" +} + +organize_levies = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_organize_levies.dds" +} + +victory = { + texture = "gfx/interface/icons/alerts_reports/report_war_victory.dds" + frame = 2 + framesize = { 144 144 } + parent = peace + alias = { win wins winning } +} + +defeat = { + texture = "gfx/interface/icons/alerts_reports/report_war_defeat.dds" + frame = 2 + framesize = { 144 144 } + parent = peace +} + +white_peace = { + texture = "gfx/interface/icons/alerts_reports/report_war_white_peace.dds" + frame = 2 + framesize = { 144 144 } + parent = peace +} + +peace = { + alias = { peace_offer peace_offers } +} + +line_of_succession = { + alias = { line } +} + +succession = { +} + +law = { + texture = "gfx/interface/icons/message_feed/law.dds" + alias = { laws law_i } +} + +succession_law = { + texture = "gfx/interface/icons/message_feed/law.dds" + alias = { succession_laws } + parent = law +} + +religious_head_succession_law = { + texture = "gfx/interface/icons/message_feed/law.dds" + alias = { religious_head_succession_law_short religious_head_succession_laws religious_head_succession_laws_short } + parent = law +} + +title_law = { + texture = "gfx/interface/icons/title_status/icon_title_law.dds" + alias = { title_laws } + parent = law +} + +disinherit = { + texture = "gfx/interface/icons/traits/disinherited.dds" + parent = succession + alias = { disinherited disinheriting disinherits } +} + +denounce = { + texture = "gfx/interface/icons/traits/denounced.dds" + parent = dynasty + alias = { denouncement } +} + +men_at_arms_counter = { + parent = men_at_arms + alias = {counter counters} + texture = "gfx/interface/icons/icon_maa_countered.dds" +} + +provisions = { + alias = { provisions_i provision } + texture = "gfx/interface/icons/icon_camp_supply.dds" + framesize = { 60 60 } + frame = 0 +} + +privation = { + parent = provisions + texture = "gfx/interface/icons/icon_camp_supply.dds" + framesize = { 60 60 } + frame = 0 +} + +supply = { + alias = { supply_state supplies supplied } + texture = "gfx/interface/icons/icon_supplies.dds" + framesize = { 60 60 } + frame = 1 +} + +supply_limit = { + texture = "gfx/interface/icons/icon_supplies.dds" + framesize = { 60 60 } + frame = 3 +} + +attrition = { + texture = "gfx/interface/icons/attrition_2.dds" + alias = { attrition_i } +} + +objectives = { +} + +hostile_army = { +} + +war_contribution = { + alias = { contribution contribute } +} + +scheme_speed = { + alias = { scheme_speed_single scheme_speed_i } + texture = "gfx/interface/icons/schemes/icon_scheme_speed.dds" + parent = scheme +} + +scheme_resistance = { + alias = { scheme_resistance_single hostile_scheme_resistance } + parent = scheme +} + +scheme_success_chance = { + alias = { success_chance success_chance_i } + texture = "gfx/interface/icons/schemes/icon_scheme_success.dds" + parent = scheme +} + +scheme_growth = { + alias = { scheme_growth_growth success_chance_growth_i scheme_growth_grow } + texture = "gfx/interface/icons/schemes/icon_scheme_success_growth.dds" + parent = scheme_success_chance +} + +scheme_potential = { + alias = { scheme_potential_potential success_chance_max_i } + texture = "gfx/interface/icons/schemes/icon_scheme_max_success.dds" + parent = scheme_success_chance +} + +critical_failure = { + alias = { critically_fail } + parent = success_chance +} + +secrecy = { + alias = { secrecy_i } + texture = "gfx/interface/icons/schemes/icon_secrecy.dds" + parent = scheme +} + +secrecy_grace = { + parent = secrecy +} + +hook = { + alias = {hooks hooked hook_i} + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" +} + +weak_hook = { + parent = hook + alias = {weak_hooks} + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" +} + +perpetual_hook = { + parent = hook + alias = { perpetual_hooks } + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" +} + +strong_hook = { + parent = hook + alias = { strong_hooks strong_hook_i } + texture = "gfx/interface/icons/message_feed/hook_strong.dds" +} + +favor = { + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" + parent = hook + alias = {favors} +} + +blackmail = { + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" + parent = hook + alias = {blackmailed blackmailing} +} + +manipulation = { + texture = "gfx/interface/icons/character_interactions/hook_icon.dds" + parent = hook +} + +pressed_claim = { + parent = claim + alias = { pressed_claims pressed pressed_claim_i } + texture = "gfx/interface/icons/title_status/icon_claim_pressed.dds" +} + +unpressed_claim = { + parent = claim + alias = { unpressed_claims unpressed unpressed_claim_i } + texture = "gfx/interface/icons/title_status/icon_claim_unpressed.dds" +} + +implicit_claim = { + alias = { implicit_claim_i implicit_claims } + parent = claim + texture = "gfx/interface/icons/title_status/icon_claim_implicit.dds" +} + +county_development = { + alias = { development development_i } + texture = "gfx/interface/icons/council_task_types/task_develop_county.dds" +} + +county_development_growth = { + alias = { development_growth } + texture = "gfx/interface/icons/council_task_types/task_develop_county.dds" +} + +existing_development = { + texture = "gfx/interface/icons/council_task_types/task_develop_county.dds" +} + +county_control = { + alias = { control control_i } + texture = "gfx/interface/icons/council_task_types/task_increase_control.dds" +} + +absolute_control = { + alias = { absolute_control_short } +} + +county_corruption = { + texture = "gfx/interface/icons/message_feed/county_corruption.dds" +} + +county_modifier = { + texture = "gfx/interface/icons/modifiers/county_modifier_development_positive.dds" + alias = { county_modifiers } + parent = modifier +} + +fleet = { + texture = "gfx/interface/icons/combat_effects/recently_disembarked_advantage.dds" + alias = {fleets} +} + +tyranny = { + alias = {tyrant tyrannical} +} + +bastard = { + alias = { bastards bastardy } + texture = "gfx/interface/icons/traits/bastard.dds" +} +legitimized_bastard = { + alias = { legitimized } + parent = bastard + texture = "gfx/interface/icons/traits/legitimized_bastard.dds" +} + +legitimate = { + texture = "gfx/interface/icons/message_feed/child.dds" +} + +divorce = { + alias = { divorced divorcing divorces } +} + +feudal = { + texture = "gfx/interface/icons/government_types/feudal_government.dds" + parent = government + alias = { feudal_government feudalism feudal_i } +} +tribal = { + texture = "gfx/interface/icons/government_types/tribal_government.dds" + parent = government + alias = { tribal_government tribal_i } +} +clan = { + texture = "gfx/interface/icons/government_types/clan_government.dds" + parent = government + alias = { clan_government clans clan_i } +} +theocracy = { + texture = "gfx/interface/icons/government_types/theocracy_government.dds" + parent = government + alias = { theocracies theocratic theocracy_government theocratic_government theocracy_i } +} +republic = { + texture = "gfx/interface/icons/government_types/republic_government.dds" + parent = government + alias = { republics republican republic_government republic_i } +} + +theocratic_vassal = { + parent = theocracy + alias = { theocratic_vassals } + parent = vassal +} + +clergy = { + texture = "gfx/interface/icons/message_feed/religious.dds" + parent = faith +} + +crown_authority = { + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/crown_authority_0.dds" + parent = law +} + +autonomous_vassals_crown_authority = { + parent = crown_authority + alias = { autonomous_vassals } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/crown_authority_0.dds" + parent = law +} +limited_crown_authority = { + parent = crown_authority + alias = { limited } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/crown_authority_1.dds" + parent = law +} +high_crown_authority = { + parent = crown_authority + alias = { high } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/crown_authority_2.dds" + parent = law +} +absolute_crown_authority = { + parent = crown_authority + alias = { absolute } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/crown_authority_3.dds" + parent = law +} + +tribal_authority = { + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/tribal_authority_0.dds" + parent = law +} + +disparate_tribes_tribal_authority = { + parent = tribal_authority + alias = { disparate_tribes } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/tribal_authority_0.dds" + parent = law +} + +limited_tribal_authority = { + parent = tribal_authority + alias = { limited_tribal } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/tribal_authority_1.dds" + parent = law +} + +high_tribal_authority = { + parent = tribal_authority + alias = { high_tribal } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/tribal_authority_2.dds" + parent = law +} + +absolute_tribal_authority = { + parent = tribal_authority + alias = { absolute_tribal } + texture = "gfx/interface/icons/message_feed/law.dds" + #texture = "gfx/interface/icons/laws/tribal_authority_3.dds" + parent = law +} + +crime = { + texture = "gfx/interface/icons/message_feed/prison.dds" + alias = {crimes criminal criminals crime_i } +} + +shunned = { +} + +refuse_conversion_crime = { + parent = demand_conversion + texture = "gfx/interface/icons/text_icons/action_can_righteously_imprison.dds" + alias = { refusing_conversion_crime refused_conversion_crime } +} + +execute = { + alias = {execution executions executed executing} +} + +torture = { + alias = {tortured torturing} +} + +banishment = { + alias = { banish banished } +} + +revoke = { + alias = {revoked revocation revocations revoking} +} + +retract = { + alias = {retracted retraction retractions retracting} +} + +transfer = { + alias = {transferred transferring} +} + +intimidated = { + texture = "gfx/interface/icons/portraits/dread_values.dds" + frame = 2 + framesize = { 40 40 } + alias = { intimidated_i } + parent = dread +} + +cowed = { + texture = "gfx/interface/icons/portraits/dread_values.dds" + frame = 3 + framesize = { 40 40 } + alias = { terrified_i } + parent = dread +} + +domain_income = { + texture = "gfx/interface/icons/icon_domain.dds" + alias = { domain_taxes } +} + +vassal_taxes = { + texture = "gfx/interface/icons/icon_vassal.dds" + parent = taxes +} + +liege_taxes = { + parent = taxes +} + +gender_law = { + texture = "gfx/interface/icons/message_feed/law.dds" + alias = { gender_laws } + parent = law +} + +depose = { + alias = { deposed } +} + +virtue = { + #texture = "gfx/interface/icons/traits/virtue_big.dds" + alias = { virtues virtuous } +} +sin = { + #texture = "gfx/interface/icons/traits/sin_big.dds" + alias = { sins sinful } +} + +excommunication = { + texture = "gfx/interface/icons/traits/excommunicated.dds" + alias = { excommunicate excommunicated } +} + +excommunicated_ruler = { + texture = "gfx/interface/icons/traits/excommunicated.dds" + alias = { excommunication_war } +} + +holy_site = { + alias = { holy_sites } +} + +legalism = { + alias = { legalistic } +} + +dynasty_prestige_level_0 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_00.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_1 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_00.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_2 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_01.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_3 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_01.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_4 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_02.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_5 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_02.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_6 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_03.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_7 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_03.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_8 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_04.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_9 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_04.dds" + shown_in_encyclopedia = no +} + +dynasty_prestige_level_10 = { + texture = "gfx/interface/icons/modifiers/icon_dynasty_prestige_05.dds" + shown_in_encyclopedia = no +} + +core_tenet = { + alias = {core_tenets} +} + +holy_war = { + alias = {holy_wars holy_war_holy } + texture = "gfx/interface/icons/casus_bellis/religious_war.dds" +} + +great_holy_war = { + alias = {great_holy_wars} + texture = "gfx/interface/icons/message_feed/great_holy_war.dds" + #texture = "gfx/interface/icons/war_status/holy_war_icon_started.dds" +} + +directed_great_holy_war = { + texture = "gfx/interface/icons/message_feed/great_holy_war.dds" + parent = great_holy_war + alias = {directed_great_holy_wars jihad jihads great_holy_war_directed} +} + +undirected_great_holy_war = { + texture = "gfx/interface/icons/message_feed/great_holy_war.dds" + parent = great_holy_war + alias = {undirected_great_holy_wars crusade crusades great_holy_war_undirected} +} + +preparation_phase = { + texture = "gfx/interface/icons/message_feed/great_holy_war.dds" + texture = "gfx/interface/icons/war_status/holy_war_icon_prep.dds" +} + +war_chest = { + texture = "gfx/interface/icons/message_feed/great_holy_war.dds" +} + +title_tier = { + texture = "gfx/interface/icons/message_feed/titles.dds" + alias = { title_tiers } +} + +title_rank = { + texture = "gfx/interface/icons/message_feed/titles.dds" + alias = { rank ranks title_ranks } +} + +church_property = { + alias = { church_holding church_holdings } + texture = "gfx/interface/icons/icon_holding_church.dds" +} + +embarking = { + texture = "gfx/interface/icons/map_icons/naval_transportation.dds" + alias = { embarked embark embarkation embarked_i } +} + +era = { + texture = "gfx/interface/icons/message_feed/technology.dds" + alias = { eras } +} + +innovation = { + texture = "gfx/interface/icons/message_feed/technology.dds" + alias = {innovations} +} + +culture_head = { + texture = "gfx/interface/icons/message_feed/technology.dds" + alias = { cultural_head } +} + +cultural_fascination = { + texture = "gfx/interface/icons/icon_game_concept_innovation_fascination.dds" + alias = { fascination } +} + +cultural_spread = { + texture = "gfx/interface/icons/icon_game_concept_innovation_spread.dds" + alias = { spread } +} + +congenital = { + texture = "gfx/interface/icons/traits/physique_good_2.dds" + alias = { congenital_trait congenital_traits } +} + +breeding = { + texture = "gfx/interface/icons/traits/fecund.dds" + alias = { bred breed } +} + +inbreeding = { + alias = { inbred } + texture = "gfx/interface/icons/traits/inbred.dds" +} + +demand_conversion = { + alias = { demanding_conversion } +} + +cadet_branching = { + texture = "gfx/interface/icons/message_feed/dynasty.dds" + alias = { cadet_branch cadet_branches } +} + +complete_control = { + alias = { completely_controls completely_control completely_controlled } +} + +complete_control_region = { + alias = { completely_controls_region completely_control_region } +} + +region = { + alias = { regions } +} + +recently_disembarked = { + texture = "gfx/interface/icons/map_icons/naval_transportation.dds" +} + +diplomatic_range = { + alias = { range } +} + +mongol_empire = { +} + +mongol_invasion_casus_belli = { + texture = "gfx/interface/icons/casus_bellis/county_conquest_cb.dds" + parent = casus_belli +} + +hungarian_invasion_casus_belli = { + texture = "gfx/interface/icons/casus_bellis/county_conquest_cb.dds" + alias = { hungarian_invasion } + parent = casus_belli +} + +imperial_expedition_cb = { + texture = "gfx/interface/icons/casus_bellis/invasion.dds" + alias = { imperial_expedition_cb_expedition } + parent = casus_belli +} + +knight = { # Don't directly use this as [knight/knights|E] in loc, do $knight_culture_player/_plural$ or do what that key does manually with a different character + alias = { knights knight_i knights_possessive } + texture = "gfx/interface/icons/icon_knight.dds" +} + +knight_effectiveness = { + texture = "gfx/interface/icons/icon_knight.dds" +} + +short_reign = { + texture = "gfx/interface/icons/message_feed/tier_down.dds" +} + +long_reign = { + texture = "gfx/interface/icons/message_feed/tier_up.dds" +} + +troop_quality = { + parent = soldiers + texture = "gfx/interface/icons/combat_effects/men_at_arms_advantage.dds" +} + +beneficiary = { + texture = "gfx/interface/icons/alerts/action_missing_ghw_beneficiary.dds" + framesize = { 144 144 } + frame = 2 + alias = { beneficiaries } +} + +papal_recipient = { +} + +end_date = { +} + +realm_size = { +} + +voter_strength = { + alias = { voting_strength voting_power vote_strength} +} + +stress_level = { + alias = { stressed stress_levels } + texture = "gfx/interface/icons/stress/icon_stress_level.dds" + framesize = { 70 70 } + frame = 4 +} + +mental_break = { + alias = { mental_breaks } + texture = "gfx/interface/icons/stress/icon_stress_gain_critical.dds" +} + +title_allegiance = { +} + + +elector = { + alias = { electors } +} + +title_succession = { + alias = { title_specific_succession } +} + +sexuality = { +} + +heterosexual = { + parent = sexuality + texture = "gfx/interface/icons/character_status/sexuality_icons_male.dds" + framesize = { 40 40 } + frame = 1 +} + +homosexual = { + parent = sexuality + texture = "gfx/interface/icons/character_status/sexuality_icons_male.dds" + framesize = { 40 40 } + frame = 2 +} + +bisexual = { + parent = sexuality + texture = "gfx/interface/icons/character_status/sexuality_icons_male.dds" + framesize = { 40 40 } + frame = 3 +} + +asexual = { + parent = sexuality + texture = "gfx/interface/icons/character_status/sexuality_icons_male.dds" + framesize = { 40 40 } + frame = 4 +} + + +attraction = { + texture = "gfx/interface/icons/modifiers/love_positive.dds" + alias = { attracted } +} + +incest = { + alias = { incestuous } + texture = "gfx/interface/icons/traits/incestuous.dds" +} + +relation = { + alias = { relations relationship } +} + +lover = { + texture = "gfx/interface/icons/portraits/lover_soulmate.dds" + framesize = { 40 40 } + frame = 1 + + alias = { lover_possessive lovers lovers_possessive } + parent = relation +} + +soulmate = { + texture = "gfx/interface/icons/portraits/lover_soulmate.dds" + framesize = { 40 40 } + frame = 2 + + alias = { soulmates soulmate_possessive soulmates_possessive } + parent = relation +} + +friend = { + texture = "gfx/interface/icons/portraits/friend_bestfriend.dds" + framesize = { 40 40 } + frame = 1 + + alias = { friends friend_possessive friends_possessive friendship friendships } + parent = relation +} + +best_friend = { + texture = "gfx/interface/icons/portraits/friend_bestfriend.dds" + framesize = { 40 40 } + frame = 2 + + alias = { best_friends best_friend_possessive best_friends_possessive } + parent = relation +} + +rival = { + texture = "gfx/interface/icons/portraits/rival_nemesis.dds" + framesize = { 40 40 } + frame = 1 + + alias = { rivals rival_possessive rivals_possessive rivalries rivalry } + parent = relation +} + +nemesis = { + texture = "gfx/interface/icons/portraits/rival_nemesis.dds" + framesize = { 40 40 } + frame = 2 + + alias = { nemeses nemesis_possessive nemeses_possessive } + parent = relation +} + +grudge = { + texture = "gfx/interface/icons/portraits/rival_grudge.dds" + framesize = { 40 40 } + frame = 1 + + alias = { grudges grudge_possessive grudges_possessive } + parent = relation +} + +guardian = { + alias = { guardians guardian_possessive guardians_possessive guardianship } + parent = relation +} + +ward = { + alias = { wards ward_possessive wards_possessive } + parent = relation +} + +mentor = { + alias = { mentors mentor_possessive mentors_possessive } + parent = relation +} + +student = { + alias = { students student_possessive students_possessive } + parent = relation +} + +bully = { + alias = { bullies bully_possessive bullies_possessive } + parent = relation +} + +victim = { + alias = { victims victim_possessive victims_possessive } + parent = relation +} + +crush = { + alias = { crushes crush_possessive crushes_possessive } + parent = relation +} + +blood_brother = { + texture = "gfx/interface/icons/portraits/blood_brother.dds" + framesize = { 40 40 } + frame = 2 + + alias = { blood_brothers blood_brother_possessive blood_brothers_possessive } + parent = relation +} + + +modifier = { + texture = "gfx/interface/icons/modifiers/dog_positive.dds" + alias = { modifiers } +} + +character_modifier = { + texture = "gfx/interface/icons/modifiers/dog_positive.dds" + alias = { character_modifiers } + parent = modifier +} + +ducal_conquest_casus_belli = { + texture = "gfx/interface/icons/casus_bellis/county_conquest_cb.dds" + alias = { ducal_conquest } + parent = casus_belli +} + +vassalize_casus_belli = { + texture = "gfx/interface/icons/casus_bellis/county_conquest_cb.dds" + alias = { vassalization_casus_belli vassalized_casus_belli } + parent = casus_belli +} + +title_creation = { + texture = "gfx/interface/icons/message_feed/titles.dds" + parent = title + alias = { uncreated_title create_title created_title create created } +} + +foreign_affairs = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_foreign_affairs.dds" +} + +domestic_affairs = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_domestic_affairs.dds" +} + +bestow_royal_favor = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_bestow_royal_favor.dds" +} + +integrate_title = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_integrate_title.dds" +} + +convert_county = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_conversion.dds" + alias = { convert converted converting } +} + +religious_relations = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_religious_relations.dds" +} + +develop_county = { + parent = councillor_task + texture = "gfx/interface/icons/council_task_types/task_develop_county.dds" +} + +interaction = { + alias = { character_interaction interactions interacting } +} + +offer_vassalization = { + alias = { offer_vassalization_interaction } + parent = interaction +} + +extort_subjects_decision = { + alias = { extort_subjects } + parent = decision +} + +sell_titles_decision = { + alias = { sell_titles } + parent = decision +} + +embrace_celibacy = { + texture = "gfx/interface/icons/traits/celibate.dds" + alias = { embrace_celibacy_decision } + parent = decision +} + +abandon_celibacy = { + texture = "gfx/interface/icons/traits/celibate.dds" + alias = { abandon_celibacy_decision } + parent = decision +} + +commission_epic = { + alias = { commission_epic_decision } + parent = decision +} + +exceptional_epic = { + parent = commission_epic +} + +demand_payment = { + alias = { demand_payment_decision } + parent = interaction +} + + + +buy_claim = { + alias = { buy_claim_interaction } + parent = interaction +} + +buy_artifact_claim = { + alias = { buy_artifact_claim_interaction } + parent = interaction +} + +offensive_war_opinion = { + texture = "gfx/interface/icons/modifiers/social_negative.dds" + alias = { offensive_war_opinion_short } +} + +at_peace_opinion = { + texture = "gfx/interface/icons/modifiers/social_negative.dds" + alias = { at_peace_opinion_short } +} + +character = { + texture = "gfx/interface/icons/icon_group_of_characters.dds" + alias = { characters character_possessive characters_possessive } +} + +detail_zoom = { +} + + +paper_zoom = { +} + +political_zoom = { +} + +highlighted_text = { #only used in tutorial! + shown_in_encyclopedia = no +} +highlighted_text_example = { #only used in tutorial! + shown_in_encyclopedia = no +} + +tutorial_education_trait = { #only used in tutorial! + alias = { tutorial_education_trait_i } + texture = "gfx/interface/icons/traits/education_martial_3.dds" + shown_in_encyclopedia = no +} + +organized = { +} + +flowery_war = { + alias = { flowery_wars flowery_warring } +} + +partition_share = { +} + +banish_reason = { + alias = { banish_reasons } +} + +imprisonment_reason = { + alias = { imprisonment_reasons } +} + +revoke_title_reason = { + alias = { revoke_title_reasons } +} + +execute_reason = { + alias = { execute_reasons } +} + +movement_locked = { + alias = { movement_lock } + texture = "gfx/interface/icons/map_icons/movement_locked.dds" +} + +extramarital_sex = { + texture = "gfx/interface/icons/modifiers/love_negative.dds" + alias = { extramarital_sex_sleeping_with } +} + +heresy = { + texture = "gfx/interface/icons/message_feed/heresy.dds" + parent = faith + alias = { heresies } +} + +titular_title = { + parent = title +} + +pilgrimage = { + texture = "gfx/interface/icons/traits/pilgrim.dds" + alias = { pilgrimages } +} + +hajj = { + texture = "gfx/interface/icons/traits/hajjaj.dds" + alias = { hajjes } +} + +faith_hostility = { + alias = {tolerance tolerate tolerates} +} + +faith_hostile = { + parent = faith_hostility +} +faith_astray = { + parent = faith_hostility +} +faith_righteous = { + parent = faith_hostility +} +faith_evil = { + parent = faith_hostility +} + +command_modifier = { + alias = { command_modifier_i command_modifiers } + + texture = "gfx/interface/icons/icon_commander.dds" +} + +nickname = { + texture = "gfx/interface/icons/message_feed/nickname.dds" + alias = { epithet cognomen nicknames epithets cognomens } +} + +main_phase = {} + +maneuver = {} + +combat_phase = {} + + + +modifier_contribution = { + alias = { modifier_contributes modifier_contributions } +} + +modifier_base_contribution = { + alias = { modifier_base_contributes modifier_base_contributions } +} + +unreformed_pagan_combat_bonus = {} + +personality = { + texture = "gfx/interface/icons/message_feed/trait.dds" + alias = { character_personality personalities personality_i } +} + +economical_archetype = { + texture = "gfx/interface/icons/message_feed/steward_job.dds" + parent = personality +} + +gift = { + alias = { send_gift gifts } +} + +valuable_prisoner = { + alias = { valuable_prisoners } +} + +prisoner_of_war = { + alias = { prisoners_of_war } +} + +single_combat_fight = { + alias = { single_combat_duel single_combat_fight_plural single_combat_duel_plural single_combat_fight_sudden_death } + + texture = "gfx/interface/icons/icon_prowess.dds" +} + +single_combat_success_chance = { + parent = single_combat_fight + alias = { single_combat_success_chance_skill } +} + +single_combat_injury_chance = { + parent = single_combat_fight + alias = { single_combat_injury_chance_injure single_combat_injury_chance_injury_risk } +} + +single_combat_prowess_bonus = { + parent = single_combat_fight +} + +single_combat_prowess_malus = { + parent = single_combat_fight +} + +game_over = { + +} + +de_jure_partition = { + alias = { de_jure_partitioned } +} + +# Has two text variants, one with DLC and one without it +hybrid_culture = { + texture = "gfx/interface/icons/icon_culture.dds" + alias = { hybrid_cultures hybridize hybridized hybridizing hybridizes } + parent = culture +} + +# Has two text variants, one with DLC and one without it +divergent_culture = { + texture = "gfx/interface/icons/icon_culture.dds" + alias = { divergent_cultures diverge diverges } + parent = culture +} + +winter = { +} + +winter_severity_mild = { + parent = winter +} + +winter_severity_normal = { + parent = winter +} + +winter_severity_harsh = { + parent = winter +} + +deceitful_progress_hostile_schemes_decision = { + parent = decision +} + +diligent_development_focus_decision = { + parent = decision +} + +impatient_rushing_all_schemes_decision = { + parent = decision +} + +dismiss_strong_hook_interaction = { + parent = interaction +} + +abandon_hook_interaction = { + parent = interaction +} + +force_duel_criminals_interaction = { + parent = interaction +} + +force_duel_anyone_interaction = { + parent = interaction +} + +artifact_rarity = { + alias = { rarity } +} + +promote_other_culture_development_decision = { + parent = decision +} + +repair_artifact = { + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 + alias = { repair } +} + +reformation = { + alias = { reform } + texture = "gfx/interface/icons/icon_culture.dds" +} + +court_position = { + alias = { court_positions court_position_i } + texture = "gfx/interface/icons/court_position_types/seneschal_court_position.dds" +} + +aptitude = { + alias = { aptitude_i } +} + +artifact_claim = { + parent = artifact + alias = { artifact_claims } + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +artifact_durability = { + parent = artifact + alias = { durability } + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +personal_artifact_claim = { + alias = { personal_artifact_claims } + parent = artifact_claim + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +house_artifact_claim = { + alias = { house_artifact_claims } + parent = artifact_claim + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +project = { + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +sponsor = { + alias = { sponsored } + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +inventory_artifact = { + alias = { inventory_artifacts } + parent = artifact + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +inspiration = { + alias = { inspirations inspired } + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +artifact = { + alias = { artifacts artifact_i } + texture = "gfx/interface/icons/roco_tabs/roco_artifact.dds" + framesize = { 140 140 } + + frame = 2 +} + +vassal_contract = { + alias = { vassal_contracts } + texture = "gfx/interface/icons/icon_contract_modification.dds" + framesize = { 60 60 } + frame = 1 +} + +tributary_contract = { + alias = { tributary_contracts } + texture = "gfx/interface/icons/icon_contract_modification.dds" + framesize = { 60 60 } + frame = 1 +} + +vassal_directive = { + parent = vassal + alias = { vassal_directives directive directives } + texture = "gfx/interface/icons/icon_vassal.dds" +} + +board_game_match = { + alias = { board_game board_games board_game_game } +} + +board_game_winning = { + parent = board_game_match + alias = { board_game_win board_game_winning_sudden_death } +} + +board_game_type = { + parent = board_game_match + alias = { board_game_types board_game_type_counter board_game_type_counters } +} + +board_game_type_chess = { + parent = board_game_match +} + +board_game_type_pachisi = { + parent = board_game_match +} + +board_game_type_hnefatafl = { + parent = board_game_match +} + +board_game_type_tabula = { + parent = board_game_match +} + +board_game_type_go = { + parent = board_game_match +} + +board_game_type_fidchell = { + parent = board_game_match +} + +purchase_truce_interaction = { +} + +ai_warlike_personality = { + alias = { warlike_i } + texture = "gfx/interface/icons/vassal_stances/warlike.dds" + parent = economical_archetype +} +ai_cautious_personality = { + alias = { cautious_i } + texture = "gfx/interface/icons/vassal_stances/cautious.dds" + parent = economical_archetype +} +ai_economical_boom_personality = { + alias = { builder_i } + texture = "gfx/interface/icons/vassal_stances/builder.dds" + parent = economical_archetype +} +ai_conqueror_personality = { + alias = { conqueror_i ai_conquerors_personality } + texture = "gfx/interface/icons/vassal_stances/conqueror.dds" + parent = economical_archetype +} +ai_economical_unpredictable_personality = { + alias = { unpredictable_i } + texture = "gfx/interface/icons/vassal_stances/unpredictable.dds" + parent = economical_archetype +} +ai_pious_builder_personality = { + alias = { pious_builder_i } + texture = "gfx/interface/icons/vassal_stances/zealot.dds" + parent = economical_archetype +} + +piety_level_impact = { + parent = piety_level +} +prestige_level_impact = { + parent = prestige_level +} + +confidant = { +} + +scheme_opportunity = { + alias = { scheme_opportunity_opportunity scheme_opportunities scheme_opportunity_opportunities scheme_opportunity_i } + parent = scheme +} + +favorite_child = { + parent = interaction +} + +draw_up_new_charts = { + alias = { draw_up_new_charts_decision } + parent = decision +} + +local_arbitration = { + alias = { local_arbitration_decision } + parent = decision +} + +scheme_breach = { + alias = { scheme_breaches scheme_breach_short scheme_breaches_short } + parent = scheme +} + +state_faith = { + texture = "gfx/interface/skinned/hud_maintab/maintab_administrative.dds" + parent = faith +} + +story_content_hereward = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +story_content_el_cid = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +story_content_wallada = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +story_content_hasan = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +story_content_temujin = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +story_content_jamukha = { + texture = "gfx/interface/icons/court_position_types/champion_court_position.dds" + shown_in_encyclopedia = no +} + +faction_commitment = { + texture = "gfx/interface/skinned/hud_maintab/maintab_factions.dds" + parent = faction +} + +harrying_widget = { + alias = { harrying_widget_i } +} + +harrying_resistance = { + texture = "gfx/interface/icons/widgets/harrying_widget.dds" +} + +harrying_pacification = { + texture = "gfx/interface/icons/widgets/harrying_widget.dds" +} + +game_rule_extreme = { + alias = { game_rule_extreme_i } +} + +game_rule_unique = { + alias = { game_rule_unique_i } +} +imperial_policy_faction = { + alias = { faction_imperial_policy imperial_policy_factions } + parent = faction +} diff --git a/common/game_concepts/neow_game_concepts.txt b/common/game_concepts/neow_game_concepts.txt index edc0baa6..bbf1dffc 100644 --- a/common/game_concepts/neow_game_concepts.txt +++ b/common/game_concepts/neow_game_concepts.txt @@ -11,4 +11,18 @@ airship = { } chemical_weapons = { texture = "gfx/interface/icons/regimenttypes/chemical_weapons.dds" +} +minority_community_building = { + texture = "gfx/interface/icons/government_types/landless_minority_government.dds" + alias = { minority_community_buildings minority_community_building } + parent = domicile_building +} +minority_community = { + texture = "gfx/interface/icons/government_types/landless_minority_government.dds" + alias = { minority_communities minority_community_i } + parent = domicile +} +minority_government = { + texture = "gfx/interface/icons/government_types/landless_minority_government.dds" + parent = domicile } \ No newline at end of file diff --git a/common/governments/00_government_types.txt b/common/governments/00_government_types.txt index a9ae5722..9f1651bb 100644 --- a/common/governments/00_government_types.txt +++ b/common/governments/00_government_types.txt @@ -6,7 +6,7 @@ feudal_government = { government_rules = { create_cadet_branches = yes rulers_should_have_dynasty = yes - dynasty_named_realms = yes + dynasty_named_realms = no legitimacy = yes } @@ -121,7 +121,7 @@ clan_government = { create_cadet_branches = yes rulers_should_have_dynasty = yes legitimacy = yes - dynasty_named_realms = yes + dynasty_named_realms = no always_use_patronym = yes } @@ -543,6 +543,70 @@ landless_adventurer_government = { realm_mask_scale = { 1 1 } } +landless_minority_government = { + government_rules = { + create_cadet_branches = yes + court_generate_spouses = yes + council = yes + always_use_patronym = yes + create_cadet_branches = yes + rulers_should_have_dynasty = yes + landless_playable = yes + use_title_tier_modifiers = no + mercenary = yes + allow_out_of_realm_inheritance = yes + use_as_base_on_landed = yes + regiments_use_barter_goods_as_gold = yes + barter = yes + } + + domicile_type = minority_community + court_generate_commanders = yes + + can_get_government = { + any_held_title = { + title_tier = duchy + is_landless_type_title = yes + } + culture = { + has_cultural_tradition = tradition_diasporic + } + } + valid_holdings = { tribal_holding church_holding castle_holding city_holding temple_citadel_holding } + + character_modifier = { + active_accolades = -100 + knight_limit = 2 + character_travel_speed = 20 + siege_weapon_siege_value_mult = -0.5 + mercenary_hire_cost_mult = 1 + short_reign_duration_mult = -5 + long_reign_bonus_mult = -1 + domicile_travel_speed = -0.75 + monthly_wanderer_lifestyle_xp_gain_mult = 0.15 + } + + ai = { + use_goals = yes + use_scripted_guis = no + perform_religious_reformation = yes + use_legends = yes + } + + # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). + flags = { + government_is_barterer + landless_can_be_vassalised + government_is_landless_minority + government_devassalises + } + + mechanic_type = landless_adventurer + + color = hsv{ 0.00 0.00 0.90 } + realm_mask_offset = { 0.0 0.0 } + realm_mask_scale = { 1 1 } +} ### Brief: nomad_government # Default nomad government, used for the Steppe Region # diff --git a/common/landed_titles/LAAMPs.txt b/common/landed_titles/LAAMPs.txt index 398d6de6..c9da6012 100644 --- a/common/landed_titles/LAAMPs.txt +++ b/common/landed_titles/LAAMPs.txt @@ -15,6 +15,20 @@ d_laamp_zolt = { ai_primary_priority = { add = @never_primary_score } } +d_laamp_test_jewish = { + color = { 100 100 100 } + capital = c_london + + definite_form = yes + landless = yes + ruler_uses_title_name = no + always_follows_primary_heir = yes + no_automatic_claims = yes + noble_family = yes + destroy_if_invalid_heir = yes + + ai_primary_priority = { add = @never_primary_score } +} d_laamp_bookwyrm = { color = { 100 100 100 } capital = c_guines diff --git a/common/laws/00_succession_laws.txt b/common/laws/00_succession_laws.txt new file mode 100644 index 00000000..c91c100d --- /dev/null +++ b/common/laws/00_succession_laws.txt @@ -0,0 +1,2066 @@ +succession_order_laws = { + + flag = succession_order_laws + + can_change_law_group = { + custom_tooltip = { + text = CANT_CHANGE_LAW_TOOLTIP + NOR = { + has_realm_law = mandala_succession_law + government_has_flag = government_is_japan_administrative + } + } + } + + confederate_partition_succession_law = { + can_keep = { + trigger_if = { + limit = { + government_has_flag = government_is_japan_feudal + tgp_realm_has_ceremonial_liege_trigger = yes + } + is_independent_ruler = no + } + trigger_else = { always = yes } # for readability + } + can_pass = { + can_change_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = no + } + } + can_have = { + can_have_confederate_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = no + } + } + should_start_with = { + NOR = { + historical_succession_access_single_heir_succession_law_trigger = yes + historical_succession_access_single_heir_succession_law_youngest_trigger = yes + historical_succession_access_single_heir_dynasty_house_trigger = yes + } + OR = { + AND = { + government_has_flag = government_is_feudal + culture = { + NOR = { + has_innovation = innovation_hereditary_rule + has_innovation = innovation_heraldry + } + } + } + government_has_flag = government_is_tribal + government_has_flag = government_is_minority + } + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + create_primary_tier_titles = yes + } + flag = partition_succession_law + modifier = { + glory_hound_opinion = 10 + parochial_opinion = 5 + belligerent_opinion = -10 + dynasty_house_opinion = 5 + eligible_child_opinion = 10 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + + potential = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + government_has_flag = government_is_mandala + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + } + } + + partition_succession_law = { + can_keep = { + OR = { + can_keep_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } + } + can_pass = { + OR = { + can_change_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } + } + can_have = { + OR = { + can_have_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } + } + should_start_with = { + NOR = { + historical_succession_access_single_heir_succession_law_trigger = yes + historical_succession_access_single_heir_succession_law_youngest_trigger = yes + historical_succession_access_single_heir_dynasty_house_trigger = yes + } + government_has_flag = government_is_feudal + culture = { + has_innovation = innovation_hereditary_rule + NOT = { + has_innovation = innovation_heraldry + } + } + NOT = { government_allows = administrative } + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + } + flag = partition_succession_law + modifier = { + glory_hound_opinion = 10 + parochial_opinion = 5 + belligerent_opinion = -10 + player_heir_opinion = 10 + eligible_child_except_player_heir_opinion = 5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { has_realm_law = confederate_partition_succession_law } + value = 1 + } + } + + potential = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + government_has_flag = government_is_mandala + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + } + } + + high_partition_succession_law = { + can_keep = { + can_keep_high_partition_succession_law_trigger = yes + } + can_pass = { + can_change_partition_succession_law_trigger = yes + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_high_partition_succession_law_trigger = yes + } + should_start_with = { + NOR = { + historical_succession_access_single_heir_succession_law_trigger = yes + historical_succession_access_single_heir_succession_law_youngest_trigger = yes + historical_succession_access_single_heir_dynasty_house_trigger = yes + } + government_has_flag = government_is_feudal + culture = { + has_innovation = innovation_heraldry + } + NOT = { government_allows = administrative } + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + primary_heir_minimum_share = 0.5 + } + flag = partition_succession_law + modifier = { + glory_hound_opinion = 5 + belligerent_opinion = -10 + player_heir_opinion = 15 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + } + } + value = 2 + } + } + + potential = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + government_has_flag = government_is_mandala + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + } + } + + single_heir_succession_law = { + can_keep = { + can_keep_single_heir_succession_law_trigger = yes + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + top_liege != this + vassal_contract_has_flag = locked_to_partition + } + } + } + can_title_have = { + # Ceremonial Regent + NOT = { exists = var:administrative_ui_special_title.holder } + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_single_heir_succession_law_trigger = yes + } + can_pass = { + can_change_succession_law_trigger = yes + trigger_if = { + limit = { + government_has_flag = government_is_clan + } + piety_level >= 3 + } + trigger_if = { + limit = { + government_allows = administrative + } + influence_level >= 4 + has_active_diarchy = no + primary_title = { title_held_years >= 10 } + } + } + should_start_with = { + historical_succession_access_single_heir_succession_law_trigger = yes + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = single_heir + } + flag = advanced_succession_law + modifier = { + glory_hound_opinion = -10 + parochial_opinion = -5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + piety = { + value = 0 + if = { + limit = { + government_has_flag = government_is_clan + } + add = { + desc = "clan_government_cost_tooltip" + value = 1500 + } + } + } + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + value = 3 + } + + potential = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_mandala + } + trigger_if = { + limit = { + government_allows = administrative + } + OR = { + is_independent_ruler = yes + tgp_is_ceremonial_liege_trigger = yes + } + } + } + } + + single_heir_succession_kurultai_law = { + can_keep = { + government_has_flag = government_is_nomadic + } + can_have = { + government_has_flag = government_is_nomadic + } + can_pass = { + government_has_flag = government_is_nomadic + } + should_start_with = { + government_has_flag = government_is_nomadic + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = single_heir + } + flag = advanced_succession_law + flag = can_designate_heirs + modifier = { + belligerent_opinion = 10 + glory_hound_opinion = 5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -20 + } + pass_cost = { + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + value = 3 + } + + potential = { + government_has_flag = government_is_nomadic + } + } + + single_heir_succession_law_youngest = { + can_keep = { + can_keep_single_heir_youngest_succession_law_trigger = yes + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + top_liege != this + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_single_heir_youngest_succession_law_trigger = yes + } + can_pass = { + can_change_succession_law_trigger = yes + trigger_if = { + limit = { + government_has_flag = government_is_clan + } + piety_level >= 3 + } + trigger_if = { + limit = { + government_allows = administrative + } + influence_level >= 4 + has_active_diarchy = no + primary_title = { title_held_years >= 10 } + } + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = youngest + title_division = single_heir + } + + flag = advanced_succession_law + modifier = { + glory_hound_opinion = -10 + parochial_opinion = -5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + piety = { + value = 0 + if = { + limit = { + government_has_flag = government_is_clan + } + add = { + desc = "clan_government_cost_tooltip" + value = 1500 + } + } + } + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + potential = { + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_mandala + } + } + } + + single_heir_dynasty_house = { # LAST CALL + can_keep = { + can_keep_single_heir_dynasty_house_trigger = yes + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + top_liege != this + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_single_heir_dynasty_house_trigger = yes + } + can_pass = { + can_change_single_heir_dynasty_house_succession_law_trigger = yes + trigger_if = { + limit = { + government_has_flag = government_is_clan + } + piety_level >= 3 + } + } + should_start_with = { + historical_succession_access_single_heir_dynasty_house_trigger = yes + NOT = { government_allows = administrative } + } + succession = { + order_of_succession = inheritance + traversal_order = dynasty_house + rank = oldest + title_division = single_heir + } + + flag = advanced_succession_law + modifier = { + glory_hound_opinion = -5 + eligible_child_except_player_heir_opinion = -15 + dynasty_house_opinion = 5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + piety = { + value = 0 + if = { + limit = { + government_has_flag = government_is_clan + } + add = { + desc = "clan_government_cost_tooltip" + value = 1500 + } + } + } + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + exists = primary_title + primary_title.tier > tier_county + OR = { + #West Slavic + culture = { has_cultural_pillar = heritage_west_slavic } + } + } + value = 2 + } + } + + potential = { + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_nomadic + government_has_flag = government_is_mandala + } + } + } + + acclamation_succession_law = { + can_keep = { + can_keep_acclamation_succession_law_trigger = yes + } + can_pass = { + can_change_acclamation_succession_law_trigger = yes + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_acclamation_succession_law_trigger = yes + } + should_start_with = { + has_ep3_dlc_trigger = yes + has_title = title:e_byzantium + government_allows = administrative + } + succession = { + order_of_succession = appointment + appointment_type = admin_emperor + } + flag = advanced_succession_law + flag = can_designate_heirs + flag = appointment_type_succession + pass_cost = { + prestige = { + value = change_succession_law_prestige_cost + multiply = { + value = 0.5 # We reduce the cost to ensure that going back to acclamation is easy + desc = "[administrative_government|E]" + } + } + } + ai_will_do = { + if = { + limit = { has_realm_law = confederate_partition_succession_law } + value = 1 + } + } + potential = { + government_allows = administrative + is_independent_ruler = yes + NOR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + } + } + + appointment_succession_law = { + can_keep = { + can_keep_appointment_succession_law_trigger = yes + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + top_liege != this + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + NOT = { government_has_flag = government_is_nomadic } + can_have_appointment_succession_law_trigger = yes + } + can_pass = { + can_change_appointment_succession_law_trigger = yes + } + should_start_with = { + government_allows = administrative + NOR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + is_independent_ruler = no + } + succession = { + order_of_succession = appointment + appointment_type = admin_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = -10 + parochial_opinion = -5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_allows = administrative # Default succession law for all admin types... + NOR = { # ... Unless you have a unique succession available + government_has_flag = government_is_celestial + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_meritocratic + } + is_independent_ruler = no + } + } + + #The prowess succession of LAAMPs is determined in code + landless_adventurer_succession_law = { + can_keep = { + government_has_flag = government_is_landless_adventurer + } + can_have = { + government_has_flag = government_is_landless_adventurer + } + can_pass = { + government_has_flag = government_is_landless_adventurer + } + should_start_with = { + government_has_flag = government_is_landless_adventurer + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_remove_from_title = { + always = no + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = single_heir + exclude_rulers = yes + limit_to_courtiers = yes + } + flag = can_designate_heirs + + potential = { + government_has_flag = government_is_landless_adventurer + } + } + + bishop_theocratic_succession_law = { + can_keep = { + can_have_bishop_theocratic_succession_law_trigger = yes # same as can_have + } + can_have = { + can_have_bishop_theocratic_succession_law_trigger = yes + } + should_start_with = { + always = yes + } + succession = { + order_of_succession = theocratic + faith = same_faith + pool_character_config = pool_theocratic_succession + } + + potential = { + can_have_bishop_theocratic_succession_law_trigger = yes + } + } + + holy_order_succession_law = { + can_keep = { + can_have_holy_order_succession_law_trigger = yes # same as can_have + } + can_have = { + can_have_holy_order_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_holy_order + } + succession = { + order_of_succession = theocratic + faith = same_faith + pool_character_config = pool_holy_order_succession + } + + potential = { + can_have_holy_order_succession_law_trigger = yes + } + } + + mercenary_company_succession_law = { + can_keep = { + can_have_mercenary_succession_law_trigger = yes + } + can_have = { + can_have_mercenary_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_mercenary + } + succession = { + order_of_succession = company + pool_character_config = pool_mercenary_succession + } + + potential = { + can_have_mercenary_succession_law_trigger = yes + } + } + + city_succession_law = { + can_keep = { + can_have_city_succession_law_trigger = yes + } + can_have = { + can_have_city_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_republic + } + succession = { + order_of_succession = generate + pool_character_config = pool_city_succession + } + + potential = { + can_have_city_succession_law_trigger = yes + } + } + + clan_antagonistic_partition_succession_law = { + can_keep = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = antagonistic + } + } + can_pass = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = antagonistic + } + } + can_have = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = antagonistic + } + } + + should_start_with = { + government_has_flag = government_is_clan + house ?= { has_house_unity_stage = antagonistic } + } + + potential = { + government_has_flag = government_is_clan + } + + requires_approve = { + NOT = { + government_has_flag = government_is_clan + } + } + + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + } + + flag = same_house_vassals_gain_claim_on_primary_title + flag = house_unity_stage_antagonistic + + modifier = { + dynasty_house_opinion = -10 + glory_hound_opinion = 15 + zealot_opinion = 10 + belligerent_opinion = -10 + player_heir_opinion = 10 + eligible_child_except_player_heir_opinion = 5 + } + + widget_name = "widget_clan_law" + } + + clan_competitive_partition_succession_law = { + can_keep = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = competitive + } + } + can_pass = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = competitive + } + } + can_have = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = competitive + } + } + should_start_with = { + government_has_flag = government_is_clan + house ?= { has_house_unity_stage = competitive } + } + + potential = { + government_has_flag = government_is_clan + } + + requires_approve = { + NOT = { + government_has_flag = government_is_clan + } + } + + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + } + + flag = same_house_vassals_gain_claim_on_primary_title + flag = house_unity_stage_competitive + + modifier = { + glory_hound_opinion = 10 + zealot_opinion = 5 + belligerent_opinion = -5 + player_heir_opinion = 10 + eligible_child_except_player_heir_opinion = 5 + } + + widget_name = "widget_clan_law" + } + + clan_impassive_partition_succession_law = { + can_keep = { + government_has_flag = government_is_clan + house ?= { + OR = { + has_house_unity_stage = impassive + # In case the house is fully unlanded + has_house_unity = no + } + } + } + can_pass = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = impassive + } + } + can_have = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = impassive + } + } + should_start_with = { + government_has_flag = government_is_clan + house ?= { + OR = { + has_house_unity_stage = impassive + # In case the house is fully unlanded + has_house_unity = no + } + } + } + + potential = { + government_has_flag = government_is_clan + } + + requires_approve = { + NOT = { + government_has_flag = government_is_clan + } + } + + flag = house_unity_stage_impassive + + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + primary_heir_minimum_share = 0.25 + } + modifier = { + glory_hound_opinion = 5 + parochial_opinion = 5 + player_heir_opinion = 15 + } + + widget_name = "widget_clan_law" + } + + clan_friendly_partition_succession_law = { + can_keep = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = friendly + } + } + can_pass = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = friendly + } + } + can_have = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = friendly + } + } + should_start_with = { + government_has_flag = government_is_clan + house ?= { has_house_unity_stage = friendly } + } + + potential = { + government_has_flag = government_is_clan + } + + requires_approve = { + NOT = { + government_has_flag = government_is_clan + } + } + + flag = house_unity_stage_friendly + + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + primary_heir_minimum_share = 0.5 + } + modifier = { + parochial_opinion = 10 + courtly_opinion = 5 + player_heir_opinion = 25 + } + + widget_name = "widget_clan_law" + } + + clan_harmonious_partition_succession_law = { + can_keep = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = harmonious + } + } + can_pass = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = harmonious + } + } + can_have = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = harmonious + } + } + should_start_with = { + government_has_flag = government_is_clan + house ?= { + has_house_unity_stage = harmonious + } + } + potential = { + government_has_flag = government_is_clan + } + + requires_approve = { + NOT = { + government_has_flag = government_is_clan + } + } + + flag = house_unity_stage_harmonious + + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = partition + primary_heir_minimum_share = 0.75 + } + modifier = { + parochial_opinion = 15 + courtly_opinion = 10 + player_heir_opinion = 40 + } + + widget_name = "widget_clan_law" + } + + herder_succession_law = { + can_keep = { + can_have_herder_succession_law_trigger = yes + } + can_have = { + can_have_herder_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_herder + } + can_remove_from_title = { + always = no + } + succession = { + order_of_succession = generate + pool_character_config = pool_herder_succession + } + + potential = { + can_have_herder_succession_law_trigger = yes + } + } + + celestial_appointment_succession_law = { + can_keep = { + government_allows = administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_appointment_allowed_desc + NOT = { vassal_contract_has_flag = celestial_military_appointment } + } + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + is_independent_ruler = no + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + government_allows = administrative + is_independent_ruler = no + } + can_pass = { + government_allows = administrative + is_independent_ruler = no + } + should_start_with = { + government_has_flag = government_is_celestial + is_independent_ruler = no + custom_tooltip = { + text = celestial_appointment_allowed_desc + NOT = { vassal_contract_has_flag = celestial_military_appointment } + } + } + succession = { + order_of_succession = appointment + appointment_type = celestial_civic_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = -10 + courtly_opinion = 5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_celestial + is_independent_ruler = no + } + } + + celestial_military_appointment_succession_law = { + can_keep = { + government_allows = administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = celestial_military_appointment + } + # Vassal Contract allows it + custom_description = { + NAND = { + is_independent_ruler = no + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + government_allows = administrative + is_independent_ruler = no + } + can_pass = { + can_change_succession_law_trigger = yes + government_allows = administrative + is_independent_ruler = no + } + should_start_with = { + government_has_flag = government_is_celestial + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = celestial_military_appointment + } + } + succession = { + order_of_succession = appointment + appointment_type = celestial_military_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = 5 + courtly_opinion = -10 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_celestial + is_independent_ruler = no + } + } + + japanese_regency_succession_law = { + can_keep = { + can_have_japanese_regency_succession_law_trigger = yes + } + can_pass = { + can_have_japanese_regency_succession_law_trigger = yes + } + can_have = { + can_have_japanese_regency_succession_law_trigger = yes + } + can_title_have = { + exists = var:administrative_ui_special_title + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_remove_from_title = { + always = no + } + should_start_with = { + always = no + } + succession = { + order_of_succession = appointment + appointment_type = japanese_regent + } + flag = advanced_succession_law + flag = can_designate_heirs + flag = appointment_type_succession + pass_cost = { + prestige = change_succession_law_prestige_cost + } + ai_will_do = { + if = { + limit = { has_realm_law = confederate_partition_succession_law } + value = 1 + } + } + potential = { + government_has_flag = government_is_japan_administrative + } + } + + japanese_appointment_succession_law = { + can_keep = { + can_keep_japanese_appointment_succession_law_trigger = yes + } + can_pass = { + can_change_japanese_appointment_succession_law_trigger = yes + } + can_have = { + can_have_japanese_appointment_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_japan_administrative + is_independent_ruler = no + NOT = { has_title = title:k_chrysanthemum_throne } + } + succession = { + order_of_succession = appointment + appointment_type = japanese_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = -10 + parochial_opinion = -5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_japan_administrative + is_independent_ruler = no + } + } + + japanese_military_appointment_succession_law = { + can_keep = { + government_allows = administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = japan_administrative_military_appointment + } + # Vassal Contract allows it + custom_description = { + NAND = { + is_independent_ruler = no + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + government_allows = administrative + is_independent_ruler = no + } + can_pass = { + can_change_succession_law_trigger = yes + government_allows = administrative + is_independent_ruler = no + } + should_start_with = { + government_has_flag = government_is_japan_administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = japan_administrative_military_appointment + } + } + succession = { + order_of_succession = appointment + appointment_type = japanese_military_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = 5 + courtly_opinion = -10 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_japan_administrative + is_independent_ruler = no + } + } + + mandala_succession_law = { + can_keep = { + realm_law_is_mandala = yes + } + can_have = { + realm_law_is_mandala = yes + } + can_pass = { + realm_law_is_mandala = yes + } + should_start_with = { + realm_law_is_mandala = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_remove_from_title = { + always = no + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = single_heir + } + flag = can_designate_heirs + + potential = { + realm_law_is_mandala = yes + } + } + + meritocratic_appointment_succession_law = { + can_keep = { + government_allows = administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + NOT = { vassal_contract_has_flag = meritocratic_military_appointment } + } + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + is_independent_ruler = no + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + government_allows = administrative + is_independent_ruler = no + } + can_pass = { + government_allows = administrative + is_independent_ruler = no + } + should_start_with = { + OR = { + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + NOT = { vassal_contract_has_flag = meritocratic_military_appointment } + } + } + succession = { + order_of_succession = appointment + appointment_type = meritocratic_civic_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = -10 + courtly_opinion = 5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_meritocratic + is_independent_ruler = no + } + } + + meritocratic_military_appointment_succession_law = { + can_keep = { + government_allows = administrative + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = meritocratic_military_appointment + } + # Vassal Contract allows it + custom_description = { + text = succession_laws_must_not_be_forced_partition + NAND = { + is_independent_ruler = no + vassal_contract_has_flag = locked_to_partition + } + } + } + can_have = { + government_allows = administrative + is_independent_ruler = no + } + can_pass = { + government_allows = administrative + is_independent_ruler = no + } + should_start_with = { + OR = { + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } + is_independent_ruler = no + custom_tooltip = { + text = celestial_military_appointment_allowed_desc + vassal_contract_has_flag = meritocratic_military_appointment + } + } + succession = { + order_of_succession = appointment + appointment_type = meritocratic_military_governor + } + flag = advanced_succession_law + flag = appointment_type_succession + modifier = { + glory_hound_opinion = -10 + courtly_opinion = 5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -5 + } + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + } + } + value = 3 + } + } + + potential = { + government_has_flag = government_is_meritocratic + is_independent_ruler = no + } + } + + meritocratic_regency_succession_law = { + can_keep = { + can_have_meritocratic_regency_succession_law_trigger = yes + } + can_pass = { + can_have_meritocratic_regency_succession_law_trigger = yes + } + can_have = { + can_have_meritocratic_regency_succession_law_trigger = yes + } + can_title_have = { + exists = var:administrative_ui_special_title + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_remove_from_title = { + always = no + } + should_start_with = { + always = no + } + succession = { + order_of_succession = appointment + appointment_type = meritocratic_regent + } + flag = advanced_succession_law + flag = can_designate_heirs + flag = appointment_type_succession + pass_cost = { + prestige = change_succession_law_prestige_cost + } + ai_will_do = { + if = { + limit = { has_realm_law = confederate_partition_succession_law } + value = 1 + } + } + potential = { + government_allows = administrative + government_allows = merit + tgp_realm_has_ceremonial_liege_trigger = yes + } + } +} + +succession_gender_laws = { + default = male_preference_law + flag = succession_gender_laws + + male_only_law = { + can_title_have = { + can_title_have_law_general_trigger = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_keep = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = male_only_law } + } + trigger_else = { + custom_tooltip = { + text = culture_not_male_only_tt + OR = { + faith = { has_doctrine = doctrine_gender_male_dominated } + NOT = { + culture = { has_cultural_parameter = female_only_inheritance } + } + } + } + } + } + can_pass = { + can_change_succession_law_trigger = yes + } + should_start_with = { + trigger_if = { + limit = { + government_has_flag = government_has_merit + } + faith = { + has_doctrine = doctrine_gender_male_dominated + } + } + trigger_else_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = male_only_law } + } + trigger_else = { + faith = { + has_doctrine = doctrine_gender_male_dominated + religion_tag = islam_religion + } + } + } + succession = { + gender_law = male_only + } + flag = men_can_have_multiple_spouses + flag = men_can_have_consorts + flag = no_female_commanders + + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + } + + male_preference_law = { + can_title_have = { + can_title_have_law_general_trigger = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_keep = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = male_preference_law } + } + trigger_else = { + custom_description = { + text = change_law_male_preference_faith_requirement + faith = { + NOT = { has_doctrine = doctrine_gender_female_dominated } + } + } + custom_tooltip = { + text = culture_not_female_only_tt + OR = { + faith = { has_doctrine = doctrine_gender_male_dominated } + NOT = { + culture = { has_cultural_parameter = female_only_inheritance } + } + } + } + } + } + can_pass = { + can_change_succession_law_trigger = yes + } + should_start_with = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = male_preference_law } + } + trigger_else = { + NOT = { + culture = { has_cultural_parameter = female_preference_inheritance } + } + OR = { + faith = { + NOR = { + religion_tag = islam_religion + AND = { + root = { + government_has_flag = government_has_merit + } + has_doctrine = doctrine_gender_male_dominated + } + } + has_doctrine = doctrine_gender_male_dominated + } + AND = { + has_realm_law = male_only_law # For when male_only_law ceases to be a legal option + trigger_if = { + limit = { + is_independent_ruler = no + government_allows = administrative + } + NOT = { + top_liege = { has_realm_law = male_only_law } + } + } + trigger_else = { + custom_tooltip = { + text = culture_not_female_only_tt + NOR = { + faith = { has_doctrine = doctrine_gender_male_dominated } + NOT = { + culture = { has_cultural_parameter = female_only_inheritance } + } + } + } + } + } + } + } + } + succession = { + gender_law = male_preference + } + flag = men_can_have_multiple_spouses + flag = men_can_have_consorts + flag = no_female_commanders + + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + } + + equal_law = { + can_title_have = { + can_title_have_law_general_trigger = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_keep = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = equal_law } + } + trigger_else = { + custom_tooltip = { + text = equal_law_culture_faith_or_innovation_trigger + OR = { + culture = { has_cultural_parameter = gender_equal_inheritance } + #culture = { has_innovation = innovation_visigothic_codes } + faith = { has_doctrine = doctrine_gender_equal } + AND = { #Culture is female dominated but religion is male dominated + faith = { has_doctrine = doctrine_gender_male_dominated } + culture = { has_cultural_parameter = female_only_inheritance } + } + AND = { #Culture is male dominated but faith is female dominated + faith = { has_doctrine = doctrine_gender_female_dominated } + NOT = { culture = { has_cultural_parameter = female_only_inheritance } } + } + primary_title.var:can_keep_realm_law ?= flag:equal_law + } + } + } + } + can_pass = { + #can_change_to_equal_succession_law_trigger = yes + can_change_succession_law_trigger = yes + } + should_start_with = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = equal_law } + } + trigger_else = { + NOR = { + culture = { has_cultural_parameter = female_preference_inheritance } + culture = { has_cultural_tradition = tradition_nubian_warrior_queens } + } + faith = { + has_doctrine = doctrine_gender_equal + } + NOT = { has_realm_law = female_only_law } # For when female_only_law ceases to be valid + } + } + succession = { + gender_law = equal + } + flag = men_can_have_multiple_spouses + flag = men_can_have_consorts + flag = women_can_have_multiple_spouses + flag = women_can_have_consorts + + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + if = { + limit = { + exists = primary_title + primary_title.tier > tier_county + faith = { + NOT = { + has_dominant_ruling_gender = prev + } + } + } + value = 2 + } + } + } + + female_preference_law = { + can_title_have = { + can_title_have_law_general_trigger = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_keep = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = female_preference_law } + } + trigger_else_if = { + limit = { + culture = { has_cultural_parameter = female_preference_inheritance } + } + culture = { has_cultural_parameter = female_preference_inheritance } + } + trigger_else = { + custom_description = { + text = change_law_female_preference_faith_requirement + faith = { + NOT = { has_doctrine = doctrine_gender_male_dominated } + } + } + custom_tooltip = { + text = female_preference_law_faith_or_culture_trigger + OR = { + faith = { has_doctrine = doctrine_gender_female_dominated } + NOT = { + culture = { has_cultural_parameter = male_only_inheritance } + } + } + } + } + } + should_start_with = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = female_preference_law } + } + trigger_else = { + OR = { + culture = { has_cultural_parameter = female_preference_inheritance } + faith = { + has_doctrine = doctrine_gender_female_dominated + } + has_realm_law = female_only_law # For when male_only_law ceases to be a legal option + } + } + } + can_pass = { + can_change_succession_law_trigger = yes + } + succession = { + gender_law = female_preference + } + flag = women_can_have_multiple_spouses + flag = women_can_have_consorts + + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + } + + female_only_law = { + can_title_have = { + can_title_have_law_general_trigger = yes + } + should_show_for_title = { # Never show this in the UI, just apply it through script + always = no + } + can_keep = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = female_only_law } + } + trigger_else_if = { + limit = { + culture = { has_cultural_parameter = female_only_inheritance } + } + culture = { has_cultural_parameter = female_only_inheritance } + } + trigger_else = { + custom_tooltip = { + text = culture_not_female_only_tt + faith = { has_doctrine = doctrine_gender_female_dominated } + NOT = { + culture = { has_cultural_parameter = male_only_inheritance } + } + } + } + } + can_pass = { + can_change_succession_law_trigger = yes + } + succession = { + gender_law = female_only + } + flag = women_can_have_multiple_spouses + flag = women_can_have_consorts + + pass_cost = { + prestige = change_succession_law_prestige_cost + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + should_start_with = { + trigger_if = { + limit = { + top_liege != this + government_allows = administrative + } + top_liege = { has_realm_law = female_only_law } + } + trigger_else = { + culture = { has_cultural_parameter = female_only_inheritance } + } + } + } +} + +succession_faith = { + same_faith_only_law = { + can_keep = { + should_have_same_faith_succession_trigger = yes + } + can_pass = { + should_have_same_faith_succession_trigger = yes + } + should_start_with = { + should_have_same_faith_succession_trigger = yes + } + succession = { + faith = same_faith + } + } +} + +succession_rel_head = { + same_faith_theocratic_succession_law = { + shown_in_encyclopedia = no + can_keep = { + faith = { + religious_head = root + has_doctrine = doctrine_spiritual_head + } + } + succession = { + order_of_succession = theocratic + faith = same_faith + pool_character_config = pool_theocratic_succession + } + } + same_faith_succession_law = { + shown_in_encyclopedia = no + can_keep = { + faith = { + religious_head = root + has_doctrine = doctrine_temporal_head + } + } + succession = { + faith = same_faith + } + } +} diff --git a/common/men_at_arms_types/NEOW_maa_types.txt b/common/men_at_arms_types/NEOW_maa_types.txt index 703af22b..2e647ad8 100644 --- a/common/men_at_arms_types/NEOW_maa_types.txt +++ b/common/men_at_arms_types/NEOW_maa_types.txt @@ -389,19 +389,24 @@ NEOW_militia = { camel_cavalry = 1 } can_recruit = { - militia_raise_limit_existing_militia_units < militia_raise_limit_existing_militia_buildings 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 - has_trait = peasant_leader - has_trait = heresiarch - has_trait = populist_leader - has_lifestyle = martial_lifestyle - has_martial_lifestyle_trait_trigger = yes - cp:councillor_marshal = { martial = 13 } + AND = { + militia_raise_limit_existing_militia_units < militia_raise_limit_existing_militia_buildings + 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 + has_trait = peasant_leader + has_trait = heresiarch + has_trait = populist_leader + has_lifestyle = martial_lifestyle + has_martial_lifestyle_trait_trigger = yes + cp:councillor_marshal = { martial = 13 } + } + } + can_recruit_militia = yes } } @@ -614,10 +619,10 @@ toxic_gas_slingers = { airships = { type = airship - damage = 300 + damage = 250 toughness = 100 pursuit = 0 - screen = 300 + screen = 250 siege_value = 0.5 diff --git a/common/modifier_definition_formats/00_definitions.txt b/common/modifier_definition_formats/00_definitions.txt new file mode 100644 index 00000000..06778472 --- /dev/null +++ b/common/modifier_definition_formats/00_definitions.txt @@ -0,0 +1,3714 @@ +diplomacy = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX +} + +martial = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX +} + +stewardship = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX +} + +intrigue = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX +} + +learning = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX +} + +prowess = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +prowess_no_portrait = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +negate_diplomacy_penalty_add = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX +} + +negate_martial_penalty_add = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX +} + +negate_stewardship_penalty_add = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX +} + +negate_intrigue_penalty_add = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX +} + +negate_learning_penalty_add = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX +} + +negate_prowess_penalty_add = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +no_prowess_loss_from_age = { + decimals = 0 +} + +diplomacy_per_piety_level = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX +} + +martial_per_piety_level = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX +} + +stewardship_per_piety_level = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX +} + +intrigue_per_piety_level = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX +} + +learning_per_piety_level = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX +} + +prowess_per_piety_level = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +diplomacy_per_prestige_level = { + decimals = 1 + prefix = MOD_DIPLOMACY_PREFIX +} + +martial_per_prestige_level = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX +} + +stewardship_per_prestige_level = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX +} + +intrigue_per_prestige_level = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX +} + +learning_per_prestige_level = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX +} + +prowess_per_prestige_level = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +diplomacy_per_influence_level = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX + +} + +martial_per_influence_level = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX + +} + +stewardship_per_influence_level = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX + +} + +intrigue_per_influence_level = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX + +} + +learning_per_influence_level = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX + +} + +prowess_per_influence_level = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX + +} + +diplomacy_per_merit_level = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX + dlc_feature = all_under_heaven +} + +martial_per_merit_level = { + decimals = 1 + prefix = MOD_MARTIAL_PREFIX + dlc_feature = all_under_heaven +} + +stewardship_per_merit_level = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX + dlc_feature = all_under_heaven +} + +intrigue_per_merit_level = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX + dlc_feature = all_under_heaven +} + +learning_per_merit_level = { + decimals = 1 + prefix = MOD_LEARNING_PREFIX + dlc_feature = all_under_heaven +} + +prowess_per_merit_level = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX + dlc_feature = all_under_heaven +} +piety_level_impact_mult = { + decimals = 0 + percent = yes +} + +prestige_level_impact_mult = { + decimals = 0 + percent = yes +} + +influence_level_impact_mult = { + decimals = 0 + percent = yes + +} + +merit_level_impact_mult = { + decimals = 0 + percent = yes + dlc_feature = all_under_heaven +} + +diplomacy_per_stress_level = { + decimals = 0 + prefix = MOD_DIPLOMACY_PREFIX +} + +martial_per_stress_level = { + decimals = 0 + prefix = MOD_MARTIAL_PREFIX +} + +stewardship_per_stress_level = { + decimals = 0 + prefix = MOD_STEWARDSHIP_PREFIX +} + +intrigue_per_stress_level = { + decimals = 0 + prefix = MOD_INTRIGUE_PREFIX +} + +learning_per_stress_level = { + decimals = 0 + prefix = MOD_LEARNING_PREFIX +} + +prowess_per_stress_level = { + decimals = 0 + prefix = MOD_PROWESS_PREFIX +} + +fertility = { + decimals = 0 + percent = yes +} + +# health, child_health, adult_health, and elderly_health - Has custom code overwrite + +negate_fertility_penalty_add = { + decimals = 0 + percent = yes +} + +# negate_health_penalty_add - Has custom code overwrite + +monthly_income = { + decimals = 2 + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +monthly_war_income_add = { + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +monthly_income_per_stress_level_add = { + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_income_per_stress_level_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +monthly_income_per_piety_level = { + decimals = 2 + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_treasury_from_vassals = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_vassals_mult = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_non_vassals = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_non_vassals_mult = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_liege_add = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX +} + +monthly_treasury_from_liege_mult = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_income_from_herd_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +treasury_ministry_budget_allocation = { + decimals = 0 + percent = yes + no_difference_sign = yes +} + +treasury_salary_budget_allocation = { + decimals = 0 + percent = yes + no_difference_sign = yes +} + +treasury_military_budget_allocation = { + decimals = 0 + percent = yes + no_difference_sign = yes +} + +monthly_treasury_from_ministry_budget_base = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_ministry_budget_mult = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_salary_budget_base = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +monthly_treasury_from_salary_budget_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +monthly_treasury_from_military_budget_base = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_treasury_from_military_budget_mult = { + decimals = 0 + prefix = MOD_MONTHLY_TREASURY_PREFIX + percent = yes +} + +monthly_piety = { + decimals = 2 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_gain_per_happy_powerful_vassal_add = { + decimals = 1 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_per_happy_powerful_vassal_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_gain_per_dread_add = { + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_per_dread_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_gain_per_knight_add = { + decimals = 2 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_per_knight_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_gain_per_legitimacy_level_add = { + decimals = 2 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_per_legitimacy_level_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_gain_per_court_position_add = { + decimals = 2 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_piety_gain_per_court_position_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_war_piety_income_add = { + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_piety_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige = { + decimals = 2 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige_gain_per_happy_powerful_vassal_add = { + decimals = 2 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_per_happy_powerful_vassal_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige_gain_per_dread_add = { + decimals = 3 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_per_dread_mult = { + decimals = 1 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige_gain_per_knight_add = { + decimals = 3 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_per_knight_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige_gain_per_legitimacy_level_add = { + decimals = 2 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_per_legitimacy_level_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_prestige_gain_per_court_position_add = { + decimals = 2 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_prestige_gain_per_court_position_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_war_prestige_income_add = { + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_prestige_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_piety_from_buildings_mult = { + decimals = 0 + percent = yes + prefix = MOD_PIETY_PREFIX +} + +monthly_prestige_from_buildings_mult = { + decimals = 0 + prefix = MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX + percent = yes +} + +monthly_dynasty_prestige = { + decimals = 2 + prefix = MOD_MONTHLY_DYNASTY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_dynasty_prestige_mult = { + decimals = 0 + prefix = MOD_MONTHLY_DYNASTY_PRESTIGE_MULT_PREFIX + percent = yes +} + +monthly_influence = { + decimals = 2 + prefix = MOD_MONTHLY_INFLUENCE_PREFIX + suffix = MOD_MONTHLY_POSTFIX + +} + +monthly_influence_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INFLUENCE_MULT_PREFIX + percent = yes + +} + +monthly_war_influence_income_add = { + prefix = MOD_MONTHLY_INFLUENCE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_influence_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_INFLUENCE_MULT_PREFIX + percent = yes +} + +monthly_merit = { + decimals = 2 + prefix = MOD_MONTHLY_MERIT_PREFIX + suffix = MOD_MONTHLY_POSTFIX + dlc_feature = all_under_heaven +} + +monthly_merit_mult = { + decimals = 1 + prefix = MOD_MONTHLY_MERIT_MULT_PREFIX + percent = yes + dlc_feature = all_under_heaven +} + +monthly_war_merit_income_add = { + prefix = MOD_MONTHLY_MERIT_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_merit_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_MERIT_MULT_PREFIX + percent = yes +} + +monthly_merit_per_liege_tax = { + decimals = 1 + prefix = MOD_MONTHLY_MERIT_PER_LIEGE_TAX_PREFIX + percent = yes + dlc_feature = all_under_heaven +} + +monthly_merit_per_title_maa_value = { + decimals = 2 + prefix = MOD_MONTHLY_MERIT_PER_TITLE_MAA_VALUE_PREFIX + percent = yes + dlc_feature = all_under_heaven +} + +stress_gain_mult = { + decimals = 0 + color = bad + prefix = MOD_STRESS_GAIN_PREFIX + percent = yes +} + +stress_loss_mult = { + decimals = 0 + prefix = MOD_STRESS_LOSS_PREFIX + percent = yes +} + +monthly_dread = { + prefix = MOD_MONTHLY_DREAD_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +dread_gain_mult = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 0 + percent = yes +} + +dread_loss_mult = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 0 + color = bad + percent = yes +} + +tyranny_gain_mult = { + decimals = 0 + color = bad + percent = yes +} + +tyranny_loss_mult = { + decimals = 0 + percent = yes +} + +monthly_tyranny = { + color = bad +} + +dread_baseline_add = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 0 +} + +dread_decay_add = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 1 + color = bad +} + +dread_decay_mult = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 0 + color = bad + percent = yes +} + +dread_per_tyranny_add = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 1 +} + +dread_per_tyranny_mult = { + prefix = MOD_MONTHLY_DREAD_PREFIX + decimals = 0 + percent = yes +} + +domain_limit = { + decimals = 0 +} + +vassal_limit = { + decimals = 0 +} + +domain_tax_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domain_tax_same_faith_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domain_tax_different_faith_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domain_tax_mult_even_if_baron = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domain_tax_same_faith_mult_even_if_baron = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domain_tax_different_faith_mult_even_if_baron = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +vassal_tax_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +tributary_tax_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +tributary_piety_contribution_mult = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +horde_conversion_cost = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + color = bad + percent = yes +} + +men_at_arms_recruitment_cost = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + color = bad + percent = yes +} + +men_at_arms_maintenance = { + decimals = 2 + color = bad + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +levy_maintenance = { + decimals = 2 + color = bad + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +men_at_arms_maintenance_per_dread_mult = { + color = bad + percent = yes +} + +army_maintenance_mult = { + decimals = 2 + color = bad + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +short_reign_duration_mult = { + decimals = 0 + color = bad + percent = yes +} + +long_reign_bonus_mult = { + decimals = 0 + percent = yes +} + +diplomatic_range_mult = { + decimals = 0 + percent = yes +} + +inbreeding_chance = { + decimals = 0 + color = bad + percent = yes +} + +positive_inactive_inheritance_chance = { + decimals = 0 + percent = yes +} + +negative_inactive_inheritance_chance = { + decimals = 0 + color = bad + percent = yes +} + +positive_random_genetic_chance = { + decimals = 0 + percent = yes +} + +negative_random_genetic_chance = { + decimals = 0 + color = bad + percent = yes +} + +genetic_trait_strengthen_chance = { + decimals = 0 + percent = yes +} + +life_expectancy = { + decimals = 1 +} + +years_of_fertility = { + decimals = 0 +} + +knight_limit = { + decimals = 0 +} + +knight_effectiveness_mult = { + decimals = 0 + prefix = MOD_KNIGHT_PREFIX + percent = yes +} + +title_creation_cost = { + decimals = 0 + color = bad + prefix = MOD_COST_PREFIX +} + +title_creation_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_COST_PREFIX + percent = yes +} + +title_creation_piety_cost = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX +} + +title_creation_piety_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +monthly_lifestyle_xp_gain_mult = { + decimals = 0 + percent = yes +} + +mercenary_hire_cost_add = { + decimals = 1 + color = bad + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +mercenary_hire_cost_mult = { + decimals = 1 + color = bad + prefix = MOD_MONTHLY_INCOME_MULT_PREFIX + percent = yes +} + +same_culture_mercenary_hire_cost_add = { + decimals = 1 + color = bad + prefix = MOD_GOLD_PREFIX +} + +same_culture_mercenary_hire_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +mercenary_hire_time_mult = { + decimals = 0 + percent = yes +} + +holy_order_hire_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +holy_order_hire_cost_add = { + decimals = 1 + color = bad + prefix = MOD_PIETY_PREFIX +} + +same_culture_holy_order_hire_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +same_culture_holy_order_hire_cost_add = { + decimals = 1 + color = bad + prefix = MOD_PIETY_PREFIX +} + +opinion_of_female_rulers = { + decimals = 0 +} + +opinion_of_male_rulers = { + decimals = 0 +} + +opinion_of_same_culture = { + decimals = 0 +} + +opinion_of_different_culture = { + decimals = 0 +} + +opinion_of_same_faith = { + decimals = 0 +} + +opinion_of_different_faith = { + decimals = 0 +} + +opinion_of_liege = { + decimals = 0 +} + +opinion_of_suzerain = { + decimals = 0 +} + +opinion_of_parents = { + decimals = 0 +} + +opinion_of_vassal = { + decimals = 0 +} + +opinion_of_tributary = { + decimals = 0 +} + +opinion_of_different_faith_liege = { + decimals = 0 +} + +opinion_of_different_faith_suzerain = { + decimals = 0 +} + +same_culture_opinion = { + decimals = 0 +} + +different_culture_opinion = { + decimals = 0 +} + +same_faith_opinion = { + decimals = 0 +} + +different_faith_opinion = { + decimals = 0 +} + +direct_vassal_opinion = { + decimals = 0 +} + +fellow_vassal_opinion = { + decimals = 0 +} + +fellow_tributary_opinion = { + decimals = 0 +} + +fellow_confederation_member_opinion = { + decimals = 0 +} + +independent_ruler_opinion = { + decimals = 0 +} + +general_opinion = { + decimals = 0 +} + +attraction_opinion = { + decimals = 0 +} + +religious_vassal_opinion = { + decimals = 0 +} + +religious_head_opinion = { + decimals = 0 +} + +spouse_opinion = { + decimals = 0 +} + +twin_opinion = { + decimals = 0 +} + +close_relative_opinion = { + decimals = 0 +} + +dynasty_house_opinion = { + decimals = 0 +} + +dynasty_opinion = { + decimals = 0 +} + +liege_opinion = { + decimals = 0 +} + +suzerain_opinion = { + decimals = 0 +} + +different_faith_liege_opinion = { + decimals = 0 +} + +different_faith_suzerain_opinion = { + decimals = 0 +} + +vassal_opinion = { + decimals = 0 +} + +tributary_opinion = { + decimals = 0 +} + +clergy_opinion = { + decimals = 0 +} + +councillor_opinion = { + decimals = 0 +} + +realm_priest_opinion = { + decimals = 0 +} + +powerful_vassal_opinion = { + decimals = 0 +} + +courtier_opinion = { + decimals = 0 +} + +guest_opinion = { + decimals = 0 +} + +courtier_and_guest_opinion = { + decimals = 0 +} + +prisoner_opinion = { + decimals = 0 +} + +player_heir_opinion = { + decimals = 0 +} + +child_opinion = { + decimals = 0 +} + +child_except_player_heir_opinion = { + decimals = 0 +} + +travel_companion_opinion = { + decimals = 0 +} + +eligible_child_opinion = { + decimals = 0 +} + +eligible_child_except_player_heir_opinion = { + decimals = 0 +} + +ignore_negative_culture_opinion = { + decimals = 0 +} + +ignore_negative_opinion_of_culture = { + decimals = 0 +} + +ignore_different_faith_opinion = { + decimals = 0 +} + +ignore_opinion_of_different_faith = { + decimals = 0 +} + +max_loot_mult = { + decimals = 0 + percent = yes +} + +pursue_efficiency = { + decimals = 0 + percent = yes +} + +counter_efficiency = { + decimals = 0 + percent = yes +} + +counter_resistance = { + decimals = 0 + percent = yes +} + +min_combat_roll = { + decimals = 0 +} + +max_combat_roll = { + decimals = 0 +} + +men_at_arms_limit = { + decimals = 0 +} + +men_at_arms_title_limit = { + decimals = 0 +} + +men_at_arms_cap = { + decimals = 0 +} + +men_at_arms_title_cap = { + decimals = 0 +} + +embarkation_cost_mult = { + decimals = 0 + color = bad + percent = yes + prefix = MOD_GOLD_PREFIX +} + +naval_movement_speed_mult = { + decimals = 0 + percent = yes +} + +siege_phase_time = { + decimals = 0 + color = bad + percent = yes +} + +siege_morale_loss = { + decimals = 0 + percent = yes +} + +revolting_siege_morale_loss_add = { +} + +revolting_siege_morale_loss_mult = { + decimals = 0 + percent = yes +} + +vassal_tax_contribution_add = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +vassal_tax_contribution_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +intimidated_vassal_tax_contribution_add = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +intimidated_vassal_tax_contribution_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +cowed_vassal_tax_contribution_add = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +cowed_vassal_tax_contribution_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +vassal_levy_contribution_add = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +vassal_levy_contribution_mult = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +intimidated_vassal_levy_contribution_add = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +intimidated_vassal_levy_contribution_mult = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +cowed_vassal_levy_contribution_add = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +cowed_vassal_levy_contribution_mult = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +vassal_herd_contribution_add = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +vassal_herd_contribution_mult = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +vassal_herder_contribution_add = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +vassal_herder_contribution_mult = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +vassal_prestige_contribution_add = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +vassal_prestige_contribution_mult = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +vassal_piety_contribution_add = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +vassal_piety_contribution_mult = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +intimidated_vassal_herd_contribution_add = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +intimidated_vassal_herd_contribution_mult = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +cowed_vassal_herd_contribution_add = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +cowed_vassal_herd_contribution_mult = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +intimidated_vassal_prestige_contribution_add = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +intimidated_vassal_prestige_contribution_mult = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +cowed_vassal_prestige_contribution_add = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +cowed_vassal_prestige_contribution_mult = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +intimidated_vassal_piety_contribution_add = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +intimidated_vassal_piety_contribution_mult = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +cowed_vassal_piety_contribution_add = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +cowed_vassal_piety_contribution_mult = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +happy_powerful_vassal_tax_contribution_add = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +happy_powerful_vassal_tax_contribution_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +happy_powerful_vassal_levy_contribution_add = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +happy_powerful_vassal_levy_contribution_mult = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +happy_powerful_vassal_herd_contribution_add = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +happy_powerful_vassal_herd_contribution_mult = { + decimals = 0 + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +happy_powerful_vassal_prestige_contribution_add = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +happy_powerful_vassal_prestige_contribution_mult = { + decimals = 0 + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +happy_powerful_vassal_piety_contribution_add = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +happy_powerful_vassal_piety_contribution_mult = { + decimals = 0 + prefix = MOD_PIETY_PREFIX + percent = yes +} + +scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +scheme_secrecy = { + prefix = MOD_SECRECY_PREFIX + decimals = 0 + already_percent = yes +} + +scheme_success_chance = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + already_percent = yes +} + +scheme_success_chance_growth = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + already_percent = yes +} + +scheme_success_chance_max = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + already_percent = yes +} + +# (Owned) Scheme Phase Duration +hostile_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +contract_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +personal_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +political_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +# Enemy Scheme Phase Duration +enemy_hostile_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + decimals = 0 +} + +enemy_contract_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + decimals = 0 +} + +enemy_personal_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + decimals = 0 +} + +enemy_political_scheme_phase_duration_add = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + decimals = 0 +} + +# Skill Scheme Phase Duration +diplomacy_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +intrigue_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +stewardship_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +martial_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +prowess_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +learning_scheme_phase_duration = { + prefix = MOD_SPEED_PREFIX + suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE + negative_suffix = MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE + no_difference_sign = yes + color = bad + decimals = 0 +} + +# Skill Scheme Resistance +diplomacy_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +intrigue_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +stewardship_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +martial_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +prowess_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +learning_scheme_resistance = { + prefix = MOD_SPEED_PREFIX + decimals = 0 +} + +scheme_discovery_chance_mult = { + prefix = MOD_DISCOVERY_PREFIX + decimals = 0 + percent = yes +} + +# Max Schemes +max_personal_schemes_add = { + decimals = 0 +} + +max_contract_schemes_add = { + decimals = 0 +} + +max_hostile_schemes_add = { + decimals = 0 +} + +max_political_schemes_add = { + decimals = 0 +} + +# Owned Scheme Success Chance +owned_hostile_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + already_percent = yes +} + +owned_contract_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + already_percent = yes +} + +owned_personal_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + already_percent = yes +} + +owned_political_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + already_percent = yes +} + +# Enemy Scheme Success Chance +enemy_hostile_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_contract_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_personal_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_political_scheme_success_chance_add = { + prefix = MOD_SUCCESS_PREFIX + decimals = 1 + color = bad + already_percent = yes +} + +# Owned Scheme Success Chance Growth +owned_hostile_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + already_percent = yes +} + +owned_contract_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + already_percent = yes +} + +owned_personal_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + already_percent = yes +} + +owned_political_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + decimals = 1 + already_percent = yes +} + +# Enemy Scheme Success Chance Growth +enemy_hostile_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_contract_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_personal_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + ##suffix = MOD_PER_SCHEME_PHASE_POSTFIX + decimals = 1 + color = bad + already_percent = yes +} + +enemy_political_scheme_success_chance_growth_add = { + prefix = MOD_SUCCESS_GROWTH_PREFIX + decimals = 1 + color = bad + already_percent = yes +} + +# Owned Scheme Success Chance Max +owned_hostile_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + already_percent = yes +} + +owned_contract_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + already_percent = yes +} + +owned_personal_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + already_percent = yes +} + +owned_political_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + already_percent = yes +} + +# Enemy Scheme Success Chance Max +enemy_hostile_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + color = bad + already_percent = yes +} + +enemy_contract_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + color = bad + already_percent = yes +} + +enemy_personal_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + color = bad + already_percent = yes +} + +enemy_political_scheme_success_chance_max_add = { + prefix = MOD_SUCCESS_MAX_PREFIX + decimals = 0 + color = bad + already_percent = yes +} + +# Scheme Secrecy +owned_scheme_secrecy_add = { + prefix = MOD_SECRECY_PREFIX + decimals = 0 + already_percent = yes +} + +enemy_scheme_secrecy_add = { + prefix = MOD_SECRECY_PREFIX + decimals = 0 + color = bad + already_percent = yes +} + +# Provisions +provisions_gain_mult = { + prefix = MOD_PROVISIONS_PREFIX + decimals = 0 + percent = yes + dlc_feature = landless_playable +} + +provisions_loss_mult = { + prefix = MOD_PROVISIONS_PREFIX + decimals = 0 + color = bad + percent = yes + dlc_feature = landless_playable +} + +provisions_capacity_add = { + prefix = MOD_PROVISIONS_PREFIX + decimals = 0 + dlc_feature = landless_playable +} + +provisions_capacity_mult = { + prefix = MOD_PROVISIONS_PREFIX + decimals = 0 + percent = yes + dlc_feature = landless_playable +} + +movement_speed = { + prefix = MOD_MOVEMENT_SPEED_PREFIX + decimals = 0 + percent = yes +} + +movement_speed_land_raiding = { + prefix = MOD_MOVEMENT_SPEED_PREFIX + decimals = 0 + percent = yes +} + +retreat_losses = { + decimals = 0 + color = bad + percent = yes +} + +hard_casualty_modifier = { + decimals = 0 + color = bad + percent = yes +} + +enemy_hard_casualty_modifier = { + decimals = 0 + percent = yes +} + +advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +attacker_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +defender_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +coastal_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +enemy_terrain_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 + color = bad + percent = yes +} + +tolerance_advantage_mod = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +advantage_against_coreligionists = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +controlled_province_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +uncontrolled_province_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +no_water_crossing_penalty = { + decimals = 0 +} + +no_disembark_penalty = { + decimals = 0 +} + +raid_speed = { + prefix = MOD_RAID_PREFIX + decimals = 0 + percent = yes +} + +hostile_county_attrition = { + prefix = MOD_RAID_PREFIX + decimals = 0 + color = bad + percent = yes +} + +hostile_county_attrition_raiding = { + decimals = 0 + color = bad + percent = yes +} + +supply_duration = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +winter_movement_speed = { + prefix = MOD_MOVEMENT_SPEED_PREFIX + decimals = 0 + percent = yes +} + +supply_loss_winter = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +hard_casualty_winter = { + decimals = 0 + color = bad + percent = yes +} + +winter_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +led_by_owner_extra_advantage_add = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +same_heritage_county_advantage_add = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +independent_primary_defender_advantage_add = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +independent_primary_attacker_advantage_add = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +army_siege_value_mult = { + prefix = MOD_SIEGE_PROGRESS_PREFIX + decimals = 0 + percent = yes +} + +army_damage_mult = { + decimals = 0 + prefix = MOD_DAMAGE_PREFIX + percent = yes +} + +army_toughness_mult = { + prefix = MOD_TOUGHNESS_PREFIX + decimals = 0 + percent = yes +} + +army_pursuit_mult = { + prefix = MOD_PURSUIT_PREFIX + decimals = 0 + percent = yes +} + +army_screen_mult = { + prefix = MOD_SCREEN_PREFIX + decimals = 0 + percent = yes +} + +supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +supply_limit = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +fort_level = { + decimals = 0 + prefix = MOD_HOLDING_FORT_LEVEL_PREFIX +} + +additional_fort_level = { + decimals = 0 + prefix = MOD_HOLDING_FORT_LEVEL_PREFIX +} + +capital_fort_level = { + decimals = 0 + prefix = MOD_HOLDING_FORT_LEVEL_PREFIX +} + +capital_additional_fort_level = { + decimals = 0 + prefix = MOD_HOLDING_FORT_LEVEL_PREFIX +} + +supply_capacity_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +supply_capacity_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +hostile_raid_time = { + prefix = MOD_RAID_PREFIX + decimals = 0 + percent = yes +} + +defender_winter_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +levy_size = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +garrison_size = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_same_faith = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_different_faith = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_even_if_baron = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_same_faith_even_if_baron = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_different_faith_even_if_baron = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +levy_reinforcement_rate_friendly_territory = { + decimals = 0 + prefix = MOD_SOLDIER_PREFIX + percent = yes +} + +build_speed = { + decimals = 0 + color = bad + prefix = MOD_TIME_PREFIX + percent = yes +} + +build_gold_cost = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +build_piety_cost = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +build_prestige_cost = { + decimals = 0 + color = bad + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +build_herd_cost = { + decimals = 0 + color = bad + prefix = MOD_HERD_PREFIX + percent = yes + dlc_feature = khans_of_the_steppe +} + +holding_build_speed = { + decimals = 0 + color = bad + prefix = MOD_TIME_PREFIX + percent = yes +} + +holding_build_gold_cost = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +temple_citadel_holding_build_gold_cost = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +temple_citadel_holding_holding_build_gold_cost = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +temple_citadel_holding_holding_build_speed = { + decimals = 0 + color = bad + percent = yes + prefix = MOD_TIME_PREFIX +} + +holding_build_piety_cost = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +temple_citadel_holding_build_piety_cost = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +holding_build_prestige_cost = { + decimals = 0 + color = bad + prefix = MOD_PRESTIGE_PREFIX + percent = yes +} + +domicile_monthly_gold_add = { + decimals = 2 + prefix = MOD_MONTHLY_INCOME_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_barter_goods = { + decimals = 2 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_barter_goods_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} +domicile_monthly_barter_goods_add = { + decimals = 2 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_prestige_add = { + decimals = 2 + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_piety_add = { + decimals = 2 + prefix = MOD_MONTHLY_PIETY_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_influence_add = { + decimals = 2 + prefix = MOD_MONTHLY_INFLUENCE_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +domicile_monthly_herd_add = { + decimals = 0 + prefix = MOD_MONTHLY_HERD_PREFIX + suffix = MOD_MONTHLY_POSTFIX + dlc_feature = khans_of_the_steppe +} + +domicile_monthly_gold_mult = { + decimals = 0 + percent = yes + prefix = MOD_GOLD_PREFIX +} + +domicile_monthly_prestige_mult = { + decimals = 0 + percent = yes + prefix = MOD_PRESTIGE_PREFIX +} + +domicile_monthly_piety_mult = { + decimals = 0 + percent = yes + prefix = MOD_PIETY_PREFIX +} + +domicile_monthly_influence_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_INFLUENCE_PREFIX +} + +domicile_monthly_herd_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_HERD_PREFIX + dlc_feature = khans_of_the_steppe +} + +domicile_build_gold_cost = { + decimals = 0 + color = bad + prefix = MOD_GOLD_PREFIX + percent = yes +} + +domicile_build_speed = { + decimals = 0 + color = bad + prefix = MOD_TIME_PREFIX + percent = yes +} + +domicile_travel_speed = { + prefix = MOD_TRAVEL_SPEED_PREFIX + decimals = 0 + percent = yes +} + +domicile_external_slots_capacity_add = { + decimals = 0 +} + +great_project_build_speed = { + decimals = 0 + color = bad + prefix = MOD_TIME_PREFIX + percent = yes + dlc_feature = all_under_heaven +} + +tax_mult = { + decimals = 0 + prefix = MOD_GOLD_PREFIX + percent = yes +} + +tax_per_piety_level = { + decimals = 2 + prefix = MOD_GOLD_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +defender_holding_advantage = { + prefix = MOD_ADVANTAGE_PREFIX + decimals = 0 +} + +building_slot_add = { + decimals = 0 +} + +development_growth_factor = { + decimals = 1 + prefix = MOD_DEVELOPMENT_PREFIX + percent = yes +} + +development_growth = { + decimals = 2 + prefix = MOD_DEVELOPMENT_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +development_decline_factor = { + decimals = 0 + prefix = MOD_DEVELOPMENT_PREFIX + percent = yes + color = bad +} + +### Brief: development_decline +# For use when we want to actively decrease development growth beyond reaching 0 progress. +# Is affected by development_decline_factor +# +development_decline = { + decimals = 2 + prefix = MOD_DEVELOPMENT_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +character_capital_county_monthly_development_growth_add = { + decimals = 2 + prefix = MOD_DEVELOPMENT_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +character_capital_county_monthly_control_add = { + prefix = MOD_CONTROL_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_county_control_growth_add = { + prefix = MOD_CONTROL_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_county_control_growth_factor = { + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +monthly_county_control_growth_add_even_if_baron = { + prefix = MOD_CONTROL_PREFIX + decimals = 1 +} + +monthly_county_control_growth_factor_even_if_baron = { + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +monthly_county_control_growth_at_war_add = { + prefix = MOD_CONTROL_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_county_control_growth_at_war_factor = { + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +monthly_county_control_decline_add = { + prefix = MOD_CONTROL_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_county_control_decline_factor = { + color = bad + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +monthly_county_control_decline_add_even_if_baron = { + prefix = MOD_CONTROL_PREFIX + decimals = 1 +} + +monthly_county_control_decline_factor_even_if_baron = { + color = bad + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +monthly_county_control_decline_at_war_add = { + prefix = MOD_CONTROL_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_county_control_decline_at_war_factor = { + color = bad + prefix = MOD_CONTROL_PREFIX + decimals = 0 + percent = yes +} + +county_opinion_add = { + decimals = 0 +} + +different_faith_county_opinion_mult = { + decimals = 0 + color = bad + percent = yes +} + +county_opinion_add_even_if_baron = { + decimals = 0 +} + +different_faith_county_opinion_mult_even_if_baron = { + decimals = 0 + color = bad + percent = yes +} + +mercenary_count_mult = { + decimals = 0 + percent = yes +} + +cultural_head_fascination_add = { + decimals = 0 +} + +cultural_head_fascination_mult = { + decimals = 0 + percent = yes +} + +cultural_head_acceptance_gain_mult = { + decimals = 0 + percent = yes +} + +cultural_acceptance_gain_mult = { + decimals = 0 + percent = yes +} + +culture_tradition_max_add = { + decimals = 0 +} + +faith_conversion_piety_cost_add = { + color = bad + prefix = MOD_PIETY_PREFIX +} + +faith_conversion_piety_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +faith_creation_piety_cost_add = { + color = bad + prefix = MOD_PIETY_PREFIX +} + +faith_creation_piety_cost_mult = { + decimals = 0 + color = bad + prefix = MOD_PIETY_PREFIX + percent = yes +} + +ai_boldness = { + hidden = yes +} + +ai_compassion = { + hidden = yes +} + +ai_sociability = { + hidden = yes +} + +ai_greed = { + hidden = yes +} + +ai_energy = { + hidden = yes +} + +ai_honor = { + hidden = yes +} + +ai_rationality = { + hidden = yes +} + +ai_vengefulness = { + hidden = yes +} + +ai_zeal = { + hidden = yes +} + +ai_war_chance = { + hidden = yes +} + +ai_war_cooldown = { + hidden = yes +} + +ai_amenity_spending = { + hidden = yes +} + +ai_amenity_target_baseline = { + hidden = yes +} + +court_grandeur_baseline_add = { + decimals = 0 + color = good + dlc_feature = royal_court +} + +monthly_court_grandeur_change_add = { + suffix = MOD_MONTHLY_POSTFIX + dlc_feature = royal_court +} + +monthly_court_grandeur_change_mult = { + decimals = 0 + percent = yes + dlc_feature = royal_court +} + +artifact_decay_reduction_mult = { + decimals = 0 + percent = yes + color = bad +} + +house_relation_change_mult = { + decimals = 0 + color = good + percent = yes +} + +strife_opinion_gain_mult = { + decimals = 0 + color = bad + percent = yes +} + +strife_opinion_loss_mult = { + decimals = 0 + percent = yes +} + +active_accolades = { + decimals = 0 + dlc_feature = accolades +} + +accolade_glory_gain_mult = { + decimals = 0 + percent = yes + dlc_feature = accolades +} + +levy_attack = { + prefix = MOD_DAMAGE_PREFIX + decimals = 0 +} + +levy_toughness = { + prefix = MOD_TOUGHNESS_PREFIX + decimals = 0 +} + +levy_siege = { + prefix = MOD_SIEGE_PROGRESS_PREFIX + decimals = 2 +} + +levy_pursuit = { + prefix = MOD_PURSUIT_PREFIX + decimals = 0 +} + +levy_screen = { + prefix = MOD_SCREEN_PREFIX + decimals = 0 +} + +knight_effectiveness_per_dread = { + decimals = 2 + prefix = MOD_KNIGHT_PREFIX + percent = yes +} + +knight_effectiveness_per_tyranny = { + decimals = 1 + prefix = MOD_KNIGHT_PREFIX + percent = yes +} + +knight_effectiveness_per_prowess = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +knight_effectiveness_per_diplomacy = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +knight_effectiveness_per_intrigue = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +knight_effectiveness_per_learning = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +knight_effectiveness_per_martial = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +knight_effectiveness_per_stewardship = { + prefix = MOD_KNIGHT_PREFIX + decimals = 1 + percent = yes +} + +stress_loss_per_piety_level = { + decimals = 0 + percent = yes +} + +stress_loss_per_prestige_level = { + decimals = 0 + percent = yes + prefix = MOD_STRESS_LOSS_PREFIX +} + +pilgrim_xp_gain_mult = { + decimals = 0 + percent = yes +} +governor_xp_gain_mult = { + decimals = 1 + percent = yes +} +confucian_education_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_lifestyle_poet_xp_gain_mult = { + decimals = 0 + percent = yes +} +lifestyle_traveler_xp_gain_mult = { + decimals = 0 + percent = yes +} +lifestyle_reveler_xp_gain_mult = { + decimals = 0 + percent = yes +} +lifestyle_hunter_xp_gain_mult = { + decimals = 0 + percent = yes +} +lifestyle_blademaster_xp_gain_mult = { + decimals = 0 + percent = yes +} +lifestyle_physician_xp_gain_mult = { + decimals = 0 + percent = yes +} +tourney_participant_xp_gain_mult = { + decimals = 0 + percent = yes +} +pilgrim_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +governor_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +lifestyle_traveler_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +lifestyle_reveler_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +lifestyle_hunter_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +tourney_participant_xp_degradation_mult = { + decimals = 0 + percent = yes + color = bad +} +trait_track_peasant_leader_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_travel_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_danger_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_hunter_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_falconer_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_foot_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_bow_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_horse_xp_gain_mult = { + decimals = 0 + percent = yes +} +trait_track_wit_xp_gain_mult = { + decimals = 0 + percent = yes +} + +hostage_prestige_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_PRESTIGE_PREFIX +} + +hostage_piety_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_PIETY_PREFIX +} + +hostage_renown_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_DYNASTY_PRESTIGE_PREFIX +} + +hostage_income_mult = { + decimals = 0 + percent = yes +} + +character_opinion_from_high_prowess_add = { + suffix = MOD_OPINION_FROM_PROWESS_SUFFIX + decimals = 1 +} + +character_opinion_from_low_prowess_add = { + suffix = MOD_OPINION_FROM_PROWESS_SUFFIX + decimals = 1 +} + +tax_slot_add = { + decimals = 0 +} + +clan_tax_slot_add = { + decimals = 0 +} + +culture_innovation_progress_chance_from_spread_add = { + decimals = 0 + suffix = MOD_INNOVATIONS_MONTHLY_POSTFIX +} + +character_innovation_progress_chance_from_fascination_add = { + decimals = 0 + suffix = MOD_INNOVATIONS_MONTHLY_POSTFIX +} + +glory_hound_ai_energy = { decimals = 0 } +glory_hound_ai_boldness = { decimals = 0 } +zealot_ai_vengefulness = { decimals = 0 } +zealot_ai_zeal = { decimals = 0 } +zealot_ai_boldness = { decimals = 0 } +minority_ai_energy = { decimals = 0 } + +epidemic_resistance = { + prefix = MOD_PLAGUE_PREFIX + decimals = 0 +} + +owned_legend_spread_add = { + prefix = MOD_LEGEND_PREFIX + decimals = 2 + dlc_feature = legends_of_the_dead +} + +owned_legend_spread_mult = { + prefix = MOD_LEGEND_PREFIX + decimals = 0 + percent = yes + dlc_feature = legends_of_the_dead +} + +legitimacy_gain_mult = { + prefix = MOD_LEGITIMACY_PREFIX + decimals = 0 + percent = yes +} + +legitimacy_loss_mult = { + prefix = MOD_LEGITIMACY_PREFIX + decimals = 0 + percent = yes + color = bad +} + +monthly_legitimacy_add = { + prefix = MOD_LEGITIMACY_PREFIX + decimals = 2 + suffix = MOD_MONTHLY_POSTFIX +} + +provisions_use_mult = { + prefix = MOD_PROVISIONS_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = landless_playable +} + +lifestyle_mystic_xp_gain_mult = { + decimals = 0 + percent = yes +} + +charioteer_green_xp_gain_mult = { + decimals = 0 + percent = yes +} +charioteer_blue_xp_gain_mult = { + decimals = 0 + percent = yes +} +charioteer_white_xp_gain_mult = { + decimals = 0 + percent = yes +} +charioteer_red_xp_gain_mult = { + decimals = 0 + percent = yes +} + +county_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 2 + dlc_feature = khans_of_the_steppe +} +county_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 2 + dlc_feature = khans_of_the_steppe +} + +county_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + dlc_feature = khans_of_the_steppe +} +county_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} + +character_capital_monthly_county_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 2 + dlc_feature = khans_of_the_steppe +} +character_capital_monthly_county_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 2 + dlc_feature = khans_of_the_steppe +} + +plains_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +plains_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +plains_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +plains_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +farmlands_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +farmlands_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +farmlands_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +farmlands_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +hills_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +hills_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +hills_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +hills_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +mountains_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +mountains_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +mountains_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +mountains_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + color = bad + percent = yes +} +desert_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +desert_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +desert_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +desert_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +desert_mountains_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +desert_mountains_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +desert_mountains_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +desert_mountains_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +oasis_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +oasis_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +oasis_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +oasis_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +jungle_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +jungle_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +jungle_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +jungle_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +forest_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +forest_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +forest_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +forest_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +taiga_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +taiga_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +taiga_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +taiga_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +wetlands_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +wetlands_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +wetlands_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +wetlands_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +steppe_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +steppe_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +steppe_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +steppe_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +floodplains_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +floodplains_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +floodplains_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +floodplains_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} +drylands_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +drylands_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +drylands_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +drylands_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} + + +# Herd +herd_gain_mult = { + prefix = MOD_HERD_PREFIX + decimals = 0 + percent = yes + dlc_feature = khans_of_the_steppe + +} +herd_conversion = { + prefix = MOD_HERD_PREFIX + decimals = 1 + percent = yes + dlc_feature = khans_of_the_steppe + +} +herd_capacity_add = { + prefix = MOD_HERD_PREFIX + decimals = 0 + dlc_feature = khans_of_the_steppe + +} +herd_capacity_mult = { + prefix = MOD_HERD_PREFIX + decimals = 0 + percent = yes + dlc_feature = khans_of_the_steppe + +} + +# Blood Brothers +blood_brother_prestige_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_PRESTIGE_PREFIX + dlc_feature = khans_of_the_steppe +} +blood_brother_piety_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_PIETY_PREFIX + dlc_feature = khans_of_the_steppe +} +blood_brother_renown_mult = { + decimals = 0 + percent = yes + prefix = MOD_MONTHLY_DYNASTY_PRESTIGE_PREFIX + dlc_feature = khans_of_the_steppe +} + +military_engineer_xp_gain_mult = { + decimals = 0 + percent = yes +} + +forder_xp_gain_mult = { + decimals = 0 + percent = yes +} + +# Situations +the_great_steppe_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +the_great_steppe_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +game_rule_extra_nomads_sami_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +game_rule_extra_nomads_sami_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +game_rule_extra_nomads_tibet_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +game_rule_extra_nomads_tibet_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +game_rule_extra_nomads_sahel_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +game_rule_extra_nomads_sahel_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +game_rule_extra_nomads_horn_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +game_rule_extra_nomads_horn_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +game_rule_extra_nomads_arabs_supply_limit_add = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 +} + +game_rule_extra_nomads_arabs_supply_limit_mult = { + prefix = MOD_SUPPLY_PREFIX + decimals = 0 + percent = yes +} + +max_migration_distance_mult = { + decimals = 0 + percent = yes + dlc_feature = khans_of_the_steppe +} + +domain_limit_max = { + decimals = 0 +} + +domain_limit_min = { + decimals = 0 +} + +vassal_limit_max = { + decimals = 0 +} + +vassal_limit_min = { + decimals = 0 +} + +character_max_piety_level_add = { + decimals = 0 +} + +character_max_prestige_level_add = { + decimals = 0 +} + +character_max_influence_level_add = { + decimals = 0 +} + +character_max_merit_level_add = { + decimals = 0 +} + +monthly_barter_goods = { + decimals = 2 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_barter_goods_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +monthly_war_barter_goods_income_add = { + decimals = 1 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + suffix = MOD_MONTHLY_POSTFIX +} + +monthly_war_barter_goods_income_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +vassal_barter_goods_contribution_add = { + decimals = 1 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX +} + +vassal_barter_goods_contribution_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +intimidated_vassal_barter_goods_contribution_add = { + decimals = 1 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX +} + +intimidated_vassal_barter_goods_contribution_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +cowed_vassal_barter_goods_contribution_add = { + decimals = 1 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX +} + +cowed_vassal_barter_goods_contribution_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +happy_powerful_vassal_barter_goods_contribution_add = { + decimals = 1 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX +} + +happy_powerful_vassal_barter_goods_contribution_mult = { + decimals = 0 + prefix = MOD_MONTHLY_BARTER_GOODS_PREFIX + percent = yes +} + +lifestyle_poet_xp_gain_mult = { + decimals = 0 + percent = yes +} + +can_vassals_be_attacked = { + decimals = 0 +} + +terraced_hills_fertility_growth_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +terraced_hills_fertility_growth_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + percent = yes + decimals = 0 + dlc_feature = khans_of_the_steppe +} +terraced_hills_fertility_decline_add = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 1 + dlc_feature = khans_of_the_steppe +} +terraced_hills_fertility_decline_mult = { + prefix = MOD_COUNTY_FERTILITY_PREFIX + decimals = 0 + percent = yes + color = bad + dlc_feature = khans_of_the_steppe +} diff --git a/common/on_action/title_on_actions.txt b/common/on_action/title_on_actions.txt new file mode 100644 index 00000000..d4c07b73 --- /dev/null +++ b/common/on_action/title_on_actions.txt @@ -0,0 +1,4647 @@ +#On actions about titles + +# All on-actions in this file provide scope:transfer_type unless otherwise noted +# scope:transfer_type has the following permutations: +# flag:conquest +# flag:conquest_holy_war +# flag:conquest_claim +# flag:conquest_populist +# flag:inheritance +# flag:abdication +# flag:destroyed +# flag:created +# flag:usurped +# flag:granted +# flag:revoked +# flag:election +# flag:independency +# flag:returned +# flag:leased_out +# flag:lease_revoked +# flag:faction_demand +# flag:swear_fealty +# flag:stepped_down + +# A title is destroyed +# root = the holder before destruction +# scope:landed_title = the title that is being destroyed +# Does *not* provide scope:transfer_type +on_title_destroyed = { + effect = { + # If the title of an independent admin ruler is destroyed, let's make sure we handle any stray admin vassals + if = { + limit = { + government_allows = administrative + top_liege = this + administrative_counts_can_be_independent = no + NOT = { + any_held_title = { + title_tier >= kingdom + + this != scope:landed_title + is_noble_family_title = no + } + } + } + admin_change_government_effect = yes + } + # Adjust the size of the laamps tally. + else_if = { + limit = { + # Pre-filter out anything higher or lower. + scope:landed_title = { tier = tier_duchy } + has_global_variable_list = laamps_tally + } + # We don't need to check the list twice, since if they're not in it then removing them from it won't do anything. + remove_list_global_variable = { + name = laamps_tally + target = scope:landed_title + } + } + #Notify folks the latin empire has fallen + else_if = { + limit = { scope:landed_title = title:e_latin_empire } + frankokratia_latin_emp_end_msg_effect = yes + } + #Create byz collapse variable that defines anarchy period + else_if = { + limit = { + scope:landed_title = { + this = title:e_byzantium + } + } + if = { + limit = { + exists = global_var:byz_collapse_counter + } + remove_global_variable = byz_collapse_counter + } + set_global_variable = { + name = byz_collapse_counter + value = { + value = current_year + add = 100 + } + } + # Silk Road prosperity gets hit if Byzantium dies + tgp_silk_road_byzantium_destroyed_effect = yes + } + else_if = { + limit = { + scope:landed_title = title:h_china + } + situation:dynastic_cycle ?= { + if = { + limit = { + situation_top_has_catalyst = catalyst_hegemon_lost_mandate_of_heaven + } + trigger_situation_catalyst = { + catalyst = catalyst_hegemon_lost_mandate_of_heaven + character = root + } + } + } + every_vassal = { + # Because a change in liege isn't triggered when the title being destroyed + if = { + limit = { + government_has_flag = government_is_celestial + highest_held_title_tier >= tier_kingdom + primary_title = { + has_custom_title_name = no + } + tgp_capital_not_in_chinese_naming_region = no + } + if = { + limit = { + is_ai = no + } + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 1 # so the player gets to choose first + } + } + else = { + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 2 + } + } + } + } + title:h_china = { + reset_title_name = yes + } + } + else_if = { # Danelaw-England partition calc. + limit = { + # Partition must be active. + exists = global_var:partition_active_danelaw + # And the destroyed title must be one of the two partitioned entities. + OR = { + scope:landed_title = title:k_england + scope:landed_title = title:k_danelaw + } + } + # If k_england has been destroyed, set k_danelaw as the de jure inheritor. + if = { + limit = { scope:landed_title = title:k_england } + title:k_danelaw = { save_scope_as = partition_winner } + # Try to grab the old holder for down the line. + if = { + limit = { + exists = this + is_alive = yes + } + save_scope_as = loser + } + } + # If k_danelaw has been destroyed, set k_england as the de jure inheritor. + if = { + limit = { scope:landed_title = title:k_danelaw } + title:k_england = { save_scope_as = partition_winner } + if = { + limit = { + exists = this + is_alive = yes + } + save_scope_as = loser + } + } + # Either way, trigger the maintenance event. + trigger_event = british_isles.1041 + } + # Safety against invalid house bloc members + else_if = { + limit = { + scope:landed_title = { is_noble_family_title = yes } + exists = house.house_confederation + } + house = { + tgp_leave_house_bloc_effect = { + OPINION = flag:no + TRUCE = flag:no + } + } + } + } +} + +# A title is transferred to a new character +# root = the new holder +# scope:title = the title that changes hands +# scope:previous_holder = previous holder. Might be dead +on_title_gain = { + effect = { + ###################### + # COUNTY-TIER TITLES # + ###################### + if = { + limit = { + scope:title.tier = tier_county + } + + ########### + # MPO - Nomad Title Handling + ########### + if = { + limit = { + scope:title = { + is_nomad_title = yes + exists = title_domicile + } + } + scope:title = { + if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + } + } + if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + exists = var:player_domicile_title + } + } + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + exists = var:player_domicile_title + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:title.title_domicile.herd + } + } + } + root = { + destroy_title = scope:title + } + } + } + } + else_if = { + limit = { + exists = var:player_domicile_title + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + save_scope_as = old_nomad_title_to_clean_up + } + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:old_nomad_title_to_clean_up.title_domicile.herd + } + } + } + root = { + destroy_title = scope:old_nomad_title_to_clean_up + } + } + else_if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + title_domicile.herd > scope:title.title_domicile.herd + } + } + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + title_domicile.herd > scope:title.title_domicile.herd + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:title.title_domicile.herd + } + } + } + } + destroy_title = scope:title + } + } + else = { + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + save_scope_as = old_nomad_title_to_clean_up + } + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:old_nomad_title_to_clean_up.title_domicile.herd + } + } + } + root = { + destroy_title = scope:old_nomad_title_to_clean_up + } + } + } + if = { + limit = { + exists = global_var:game_has_started + NOT = { + exists = previous_holder + } + } + if = { + limit = { + root = { + OR = { + house.house_head ?= { + this != root + any_held_title = { + is_nomad_title = yes + } + } + dynasty.dynast ?= { + this != root + any_held_title = { + is_nomad_title = yes + } + } + any_close_family_member = { + this != root + any_held_title = { + is_nomad_title = yes + } + } + } + } + } + generate_coa = yes # To lessen confusion thinking titles are the same + } + if = { + limit = { + current_year >= 1300 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_domicile_building = yurt_main_04 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 1200 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_domicile_building = yurt_main_04 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 1100 + } + title_domicile = { + add_domicile_building = yurt_main_02 + if = { + limit = { + has_domicile_building = yurt_main_02 + owner ?= { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + add_domicile_building = yurt_main_03 + } + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 900 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + } + } + + ########### + # MPO - Edge case Nomadic Philosophy handover + ########### + if = { + limit = { + government_has_flag = government_is_nomadic + NOT = { + has_trait = nomadic_philosophy + } + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + } + add_trait = nomadic_philosophy + every_heir = { + limit = { + top_liege ?= root + NOT = { + has_trait = nomadic_philosophy + } + } + add_trait = nomadic_philosophy + } + } + } + ########### + # Nomads switch faith/culture of conquered nomadic counties + ########### + else_if = { + limit = { + scope:title.title_province ?= { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + government_has_flag = government_is_nomadic + exists = domicile + } + if = { + limit = { + has_character_flag = domicile_culture_and_faith_check + OR = { + domicile.domicile_culture != scope:title.culture + domicile.domicile_faith != scope:title.faith + } + } + domicile = { + set_domicile_culture = scope:title.culture + set_domicile_faith = scope:title.faith + } + remove_character_flag = domicile_culture_and_faith_check + } + else = { + if = { + limit = { domicile.domicile_culture != scope:title.culture } + scope:title ?= { + set_variable = { + name = migration_previous_culture + value = culture + } + set_county_culture = root.domicile.domicile_culture + } + } + if = { + limit = { domicile.domicile_faith != scope:title.faith } + scope:title = { set_county_faith = root.domicile.domicile_faith } + } + } + } + else = { + ########### + # Apply Law of the Land title succession law if appropriate + ########### + scope:title = { + add_law_of_the_land_title_succession_law_if_appropriate_effect = yes + } + } + + ########### + # MPO - Siberian permafrost modifier switcharoo + ########### + if = { + limit = { + scope:title.title_province = { + geographical_region = geographical_region:mpo_region_permafrost + } + } + if = { + limit = { + scope:title = { + has_county_modifier = mpo_siberian_permafrost_modifier_bad + } + culture ?= { has_cultural_parameter = permafrost_modifier_mechanic } + } + scope:title = { + remove_county_modifier = mpo_siberian_permafrost_modifier_bad + add_county_modifier = mpo_siberian_permafrost_modifier + } + } + else_if = { + limit = { + scope:title = { + has_county_modifier = mpo_siberian_permafrost_modifier + } + NOR = { + culture ?= { has_cultural_parameter = permafrost_modifier_mechanic } + } + } + scope:title = { + remove_county_modifier = mpo_siberian_permafrost_modifier + add_county_modifier = mpo_siberian_permafrost_modifier_bad + } + } + } + else_if = { + limit = { + OR = { + scope:title = title:c_antiocheia + scope:title = title:c_jerusalem + scope:title = title:c_alexandria + scope:title = title:c_roma + } + } + if = { + limit = { + OR = { + AND = { + is_roman_emperor_trigger = yes + faith = faith:orthodox + faith = { has_doctrine = special_doctrine_ecumenical_christian } + } + any_liege_or_above = { + is_roman_emperor_trigger = yes + faith = faith:orthodox + faith = { has_doctrine = special_doctrine_ecumenical_christian } + } + } + } + trigger_event = roman_restoration.0199 + } + ########### + # Transfer the Samaritan HoF to the realm that holds Jerusalem + ########### + if = { + limit = { + scope:title = title:c_jerusalem + title:d_samaritan.holder ?= { + # Samaritan HoF is not independent + # Samaritan liege is not Samaritan + top_liege.faith != faith:samaritan + top_liege != root + } + # root is at least a king, or their liege is, or their liege's liege is + OR = { + highest_held_title_tier >= tier_kingdom + any_liege_or_above = { + highest_held_title_tier >= tier_kingdom + } + } + } + create_title_and_vassal_change = { + type = created + save_scope_as = title_change + add_claim_on_loss = no + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + title:d_samaritan.holder = { + change_liege = { + liege = root + change = scope:title_change + } + } + } + else = { + title:d_samaritan.holder = { + change_liege = { + liege = root.top_liege + change = scope:title_change + } + } + } + resolve_title_and_vassal_change = scope:title_change + } + } + + ########### + # FP1 - New holder for a county with a stele. + ########### + if = { + limit = { + # Using a scripted effect here so we can look at the same trigger in the grant title interaction + fp1_remove_stele_new_holder_trigger = { + TITLE = scope:title + PREVIOUS_HOLDER = scope:previous_holder + NEW_HOLDER = root + } + has_fp1_dlc_trigger = yes + } + scope:title = { + remove_variable = stele_scope_type + remove_variable = stele_container + remove_variable = stele_carver + remove_variable = stele_commissioner + remove_variable = stele_slot_occupied + remove_county_modifier = fp1_stele_ancestors_strong + remove_county_modifier = fp1_stele_ancestors_weak + remove_county_modifier = fp1_stele_conquest_strong + remove_county_modifier = fp1_stele_conquest_weak + remove_county_modifier = fp1_stele_promotion_strong + remove_county_modifier = fp1_stele_promotion_weak + } + } + ########### + # Non-FP1 - New holder of the county with a runestone + ########### + else_if = { + limit = { + scope:title = { + exists = var:ancestor_to_bury + } + dynasty != scope:previous_holder.dynasty #We only have to change something if the new holder is of a different dynasty + scope:title = { + NOT = { var:ancestor_to_bury.dynasty = root.dynasty } + } + } + scope:title = { + remove_county_modifier = county_raised_runestone_modifier + remove_variable = ancestor_to_bury + } + } + + ########### + # EP3 ADVENTURERS BECOMING LANDED + ########### + if = { + limit = { + scope:title = { is_landless_type_title = no } + any_held_title = { + title_tier = duchy + has_variable = adventurer_creation_reason + } + } + save_scope_as = adventurer + if = { + limit = { + NOR = { + has_trait = adventurer + government_has_flag = government_is_nomadic + } + } + add_trait = adventurer + } + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:adventurer + } + add_trait = adventurer_follower + } + if = { + limit = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + add_legitimacy = massive_legitimacy_gain + set_variable = { + name = legacy_adventurers_to_levies + value = 0 + } + every_courtier = { + root = { + change_variable = { name = legacy_adventurers_to_levies add = 25 } + } + } + every_held_title = { + limit = { has_variable = adventurer_creation_reason } + save_scope_as = prev_title + } + spawn_army = { + levies = var:legacy_adventurers_to_levies + location = capital_province + name = remnants_adventurer_army + } + remove_variable = legacy_adventurers_to_levies + } + destroy_laamp_effect = { ADVENTURER = scope:adventurer } + # EP3 - Ensure NF holders are Admin + if = { + limit = { + scope:title = { is_noble_family_title = yes } + NOT = { government_has_flag = government_is_administrative } + } + change_government = administrative_government + } + } + } + ##################### + # DUCHY-TIER TITLES # + ##################### + else_if = { + limit = { + scope:title.tier = tier_duchy + } + + # Special Legitimacy gain for being elected (This is present in two places in this on_action) + if = { + limit = { + scope:title = { + has_order_of_succession = election + } + has_legitimacy = yes + } + save_scope_value_as = { + name = title_tier_minus_2 + value = { + value = scope:title.tier + subtract = 2 + } + } + send_interface_toast = { + type = msg_legitimacy_gain + title = legitimacy_gain_toast + left_icon = root + right_icon = scope:title + add_legitimacy = { + value = { + value = major_legitimacy_gain + multiply = scope:title_tier_minus_2 + } + } + } + } + + # Transfer title-bound artifacts with the title it's associated with (This is present in two places in this on_action) + if = { + limit = { + scope:previous_holder ?= { + any_character_artifact = { + has_variable = artifact_succession_title #Is this an artifact that should follow a title? + var:artifact_succession_title = { is_title_created = yes } #Does the title the artifact should follow exist? + var:artifact_succession_title = scope:title #Scope title is the artifact title + } + } + } + scope:previous_holder = { + every_character_artifact = { + limit = { + has_variable = artifact_succession_title #Is this an artifact that should follow a title? + var:artifact_succession_title = { is_title_created = yes } #Does the title the artifact should follow exist? + var:artifact_succession_title = scope:title #Scope title is the artifact title + } + if = { + limit = { + OR = { + scope:transfer_type = flag:conquest + scope:transfer_type = flag:conquest_holy_war + scope:transfer_type = flag:conquest_claim + scope:transfer_type = flag:conquest_populist + scope:transfer_type = flag:abdication + scope:transfer_type = flag:usurped + scope:transfer_type = flag:revoked + scope:transfer_type = flag:faction_demand + } + } + set_owner = { + target = root + history = { + type = conquest + actor = scope:previous_holder + recipient = root + location = scope:previous_holder.location + } + } + } + else = { + set_owner = { + target = root + history = { + type = inherited + recipient = root + } + } + } + } + } + } + + if = { + limit = { + government_has_flag = government_is_landless_adventurer + } + # EP3 ADVENTURERS TELEPORT TO THEIR CAMP + trigger_event = { + id = title_event.9911 + days = 1 + } + } + + # EP3 ADVENTURER TITLE BEING INHERITED BY A LANDED RULER + if = { + limit = { + scope:title = { + has_variable = adventurer_creation_reason + } + any_held_title = { + NOT = { has_variable = adventurer_creation_reason } + } + } + every_held_title = { + limit = { has_variable = adventurer_creation_reason } + save_scope_as = landless_adventurer_title + root = { destroy_title = scope:landless_adventurer_title } + } + } + # Have we been given a fair shake as a laamp, but we're sucking? + else_if = { + limit = { + has_government = landless_adventurer_government + is_ai = yes + scope:previous_holder = { is_ai = yes } + primary_title = { + any_past_holder = { count >= 4 } + } + NOR = { + # If the heir is sufficiently impressive, then we'll keep 'em around. + prestige_level >= 2 + # Legitimists are always worthwhile. + has_realm_law = camp_purpose_legitimists + # Reserve successful mercenary outfits. + AND = { + max_military_strength >= 1500 + # Allow absolute decimations to destroy mercs from time to time. + current_military_strength <= 150 + } + # Or those currently fighting alongside/against players. + AND = { + is_at_war = yes + OR = { + any_war_ally = { is_ai = no } + any_war_enemy = { is_ai = no } + } + } + # Depending on camp purpose, we want various skills. + AND = { + has_realm_law = camp_purpose_wanderers + OR = { + highest_skill_value >= very_high_skill_rating + prowess >= very_high_skill_rating + } + } + AND = { + has_realm_law = camp_purpose_mercenaries + OR = { + martial >= high_skill_rating + prowess >= high_skill_rating + } + } + AND = { + has_realm_law = camp_purpose_scholars + OR = { + learning >= high_skill_rating + diplomacy >= high_skill_rating + } + } + AND = { + has_realm_law = camp_purpose_explorers + OR = { + diplomacy >= high_skill_rating + stewardship >= high_skill_rating + } + } + AND = { + has_realm_law = camp_purpose_brigands + OR = { + intrigue >= high_skill_rating + prowess >= high_skill_rating + } + } + # Finally, keep anyone who's important to the player. + any_player = { + OR = { + root.dynasty ?= dynasty + is_consort_of = root + has_important_relationship_with_character_trigger = { CHARACTER = root } + any_pinned_character = { this = root } + any_pinned_character = { this = scope:previous_holder } + } + } + } + } + destroy_laamp_effect = { ADVENTURER = root } + } + # Holy Order Trait + else_if = { + limit = { + scope:title = { is_holy_order = yes } + NOT = { has_trait = order_member } + government_has_flag = government_is_holy_order + } + add_trait = order_member + } + + # Apply Created Title opinion to Courtly Vassals (This is present in two places in this on_action) + if = { + limit = { + scope:transfer_type = flag:created + is_alive = yes + } + every_vassal = { + vassal_stance = courtly + if = { + limit = { + scope:title.tier = tier_duchy + } + add_opinion = { + target = root + modifier = courtly_title_creation_opinion + opinion = 10 + } + } + else = { + add_opinion = { + target = root + modifier = courtly_title_creation_opinion + opinion = 30 + } + } + } + } + # Lil Johnny Lackland changes his nickname. + if = { + limit = { + has_nickname = nick_lackland_young + } + give_nickname = nick_lackland_ironic + } + } + ##################### + # KING+ TIER TITLES # + ##################### + else = { + # Newly formed Hegemon of China should spruce up their council + if = { + limit = { + scope:title = title:h_china + exists = root.dynasty + exists = scope:previous_holder.house + scope:previous_holder.house != root.house + } + save_scope_as = councillor_liege + fill_the_ministry_effect = yes + } + # Ceremonial Liege invalidation + if = { + limit = { + exists = this + any_held_title = { exists = var:administrative_ui_special_title } + } + every_held_title = { + limit = { exists = var:administrative_ui_special_title } + var:administrative_ui_special_title.holder = { tgp_destroy_ceremonial_throne_effect = yes } + } + if = { + limit = { has_trait = former_emperor } + remove_trait = former_emperor + } + } + # Ceremonial Liege + if = { + limit = { + OR = { + exists = scope:title.var:ceremonial_title + top_liege.primary_title.var:administrative_ui_special_title ?= scope:title + } + } + if = { + limit = { + exists = house + exists = scope:previous_holder.house + scope:previous_holder.house != house + } + scope:title = { set_coa = root.house } + } + remove_character_flag = ceremonial_regent_flag + } + if = { + limit = { exists = scope:title.var:ceremonial_title } + add_character_flag = ceremonial_liege_flag + if = { + limit = { has_trait = devoted } + remove_trait = devoted + } + destroy_laamp_effect = { ADVENTURER = this } + } + # Reset raid remit + if = { + limit = { + this = top_liege + any_noble_family = { } + } + every_noble_family = { + holder = { remove_variable = raid_estate_permission } + } + } + # Special Legitimacy gain for being elected (This is present in two places in this on_action) + if = { + limit = { + scope:title = { + has_order_of_succession = election + } + has_legitimacy = yes + } + save_scope_value_as = { + name = title_tier_minus_2 + value = { + value = scope:title.tier + subtract = 2 + } + } + send_interface_toast = { + type = msg_legitimacy_gain + title = legitimacy_gain_toast + left_icon = root + right_icon = scope:title + add_legitimacy = { + value = { + value = major_legitimacy_gain + multiply = scope:title_tier_minus_2 + } + } + } + } + # Transfer title-bound artifacts with the title it's associated with (This is present in two places in this on_action) + if = { + limit = { + scope:previous_holder ?= { + any_character_artifact = { + has_variable = artifact_succession_title #Is this an artifact that should follow a title? + var:artifact_succession_title = { is_title_created = yes } #Does the title the artifact should follow exist? + var:artifact_succession_title = scope:title #Scope title is the artifact title + } + } + } + scope:previous_holder = { + every_character_artifact = { + limit = { + has_variable = artifact_succession_title #Is this an artifact that should follow a title? + var:artifact_succession_title = { is_title_created = yes } #Does the title the artifact should follow exist? + var:artifact_succession_title = scope:title #Scope title is the artifact title + } + if = { + limit = { + OR = { + scope:transfer_type = flag:conquest + scope:transfer_type = flag:conquest_holy_war + scope:transfer_type = flag:conquest_claim + scope:transfer_type = flag:conquest_populist + scope:transfer_type = flag:abdication + scope:transfer_type = flag:usurped + scope:transfer_type = flag:revoked + scope:transfer_type = flag:faction_demand + } + } + set_owner = { + target = root + history = { + type = conquest + actor = scope:previous_holder + recipient = root + location = scope:previous_holder.location + } + } + } + else = { + set_owner = { + target = root + history = { + type = inherited + recipient = root + } + } + } + } + } + } + # Grandeur in elective realms + if = { + limit = { + exists = var:previous_holder_grandeur_value + has_royal_court = yes + has_dlc_feature = royal_court + } + hidden_effect = { + change_current_court_grandeur = -100 # Reset to 0 + change_current_court_grandeur = var:previous_holder_grandeur_value + remove_variable = previous_holder_grandeur_value + } + } + # Apply Created Title opinion to Courtly Vassals (This is present in two places in this on_action) + if = { + limit = { + scope:transfer_type = flag:created + is_alive = yes + } + every_vassal = { + vassal_stance = courtly + if = { + limit = { + scope:title.tier = tier_duchy + } + add_opinion = { + target = root + modifier = courtly_title_creation_opinion + opinion = 10 + } + } + else = { + add_opinion = { + target = root + modifier = courtly_title_creation_opinion + opinion = 30 + } + } + } + } + # Empire and Hegemony stuff + if = { + limit = { + scope:title = { + tier >= tier_empire + } + } + # Byzantine-only: The Patriarch refuses to crown you as new emperor because you have a criminal trait (e.g. kinslayer) + if = { + limit = { + valid_for_byz_emperor_content_trigger = yes + has_ep3_dlc_trigger = yes + exists = root.faith.religious_head + this != faith.religious_head + faith.religious_head = { + opinion = { + target = root + value <= 0 + } + location = root.location + } + has_any_criminal_trait_in_faith_trigger = { + CHARACTER = root + FAITH = root.faith + } + NOT = { has_character_flag = has_had_ep3_2020 } + } + trigger_event = { + id = ep3_emperor_yearly.2020 + days = 1 + } + } + ### EP3 Admin Emperor Flavor ### + if = { + limit = { + # Not for meritocratic + NOT = { government_has_flag = government_has_merit } + # Admin only + government_allows = administrative + has_ep3_dlc_trigger = yes + # Independent rulers only + this = top_liege + # New title is higher or equal to your primary tier + highest_held_title_tier >= scope:title.tier + # You didn't just create the title + scope:title = { + any_past_holder = { } + # Your predecessor wasn't from your same house - not much to celebrate if you got the title from dad! + previous_holder ?= { + house != root.house + } + } + # Handled separately + tgp_realm_has_ceremonial_liege_trigger = no + } + trigger_event = { + id = ep3_emperor_yearly.2050 + days = 5 + } + } + #Byzantium is reborn! + if = { + limit = { + scope:title = { + this = title:e_byzantium + } + exists = global_var:byz_collapse_counter + } + save_scope_as = byz_emperor + title:e_byzantium = { + every_in_de_jure_hierarchy = { + limit = { + tier <= tier_kingdom + tier >= tier_county + is_title_created = yes + exists = holder + } + if = { + limit = { + holder ?= { + is_alive = yes + NOR = { + is_in_list = byz_return_notify + any_held_title = { + this = title:e_byzantium + } + } + } + } + holder = { + add_to_list = byz_return_notify + } + } + } + } + title:e_latin_empire = { + every_in_de_jure_hierarchy = { + limit = { + tier <= tier_kingdom + tier >= tier_county + is_title_created = yes + exists = holder + } + if = { + limit = { + holder = { + is_alive = yes + NOR = { + is_in_list = byz_return_notify + any_held_title = { + this = title:e_byzantium + } + } + } + } + holder = { + add_to_list = byz_return_notify + } + } + } + } + every_in_list = { + list = byz_return_notify + trigger_event = ep3_frankokratia_events.0130 + } + remove_global_variable = byz_collapse_counter + } + # TGP CHINA + else_if = { + limit = { + scope:title = title:h_china + } + # When conquering China - Change to conquest phase + if = { + limit = { + root.dynasty != scope:previous_holder.dynasty + } + if = { + limit = { + is_valid_celestial_dynasty = no + } + situation:dynastic_cycle = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability_conquest } + } + } + } + else_if = { + limit = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + situation:dynastic_cycle = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + } + } + # When inheriting China - Move towards instability/chaotic phase + if = { + limit = { + root.house != scope:previous_holder.house + current_date_is_start_date_trigger = no # We check this to avoid potentially triggering this immediately on game start + } + situation:dynastic_cycle = { + if = { + limit = { + situation_top_has_catalyst = catalyst_new_dynasty_inherits + } + trigger_situation_catalyst = catalyst_new_dynasty_inherits + } + } + } + # Clear the Strengthen Capital great project cooldown + situation:dynastic_cycle ?= { + if = { + limit = { has_variable = gp_strengthen_capital_cooldown } + remove_variable = gp_strengthen_capital_cooldown + } + } + #setup Grand Secretariat + if = { + limit = { + has_dlc_feature = all_under_heaven + NOT = { has_diarchy_type = grand_secretariat } + } + if = {# Clear out any old diarchy + limit = { has_active_diarchy = yes } + end_diarchy = yes + } + if = { + limit = { + has_realm_law = grand_chancellor_law + exists = title:h_china.holder.cp:councillor_chancellor + } + try_start_diarchy = grand_secretariat + set_diarch = title:h_china.holder.cp:councillor_chancellor + } + else_if = { + limit = { + has_realm_law = grand_marshal_law + exists = title:h_china.holder.cp:minister_grand_marshal + } + try_start_diarchy = grand_secretariat + set_diarch = title:h_china.holder.cp:minister_grand_marshal + } + else_if = { + limit = { + exists = title:h_china.holder.cp:councillor_spymaster + } + try_start_diarchy = grand_secretariat + set_diarch = title:h_china.holder.cp:councillor_spymaster + } + } + root.house.house_head.domicile ?= { + set_family_accomplishment_effect = { ACCOMPLISHMENT = family_accomplishment_dynasty } + } + } + else_if = { + limit = { + OR = { + scope:title = title:e_minister_chancellor + scope:title = title:e_minister_censor + scope:title = title:e_minister_grand_marshal + scope:title = title:e_minister_of_personnel + scope:title = title:e_minister_of_revenue + scope:title = title:e_minister_of_rites + scope:title = title:e_minister_of_war + scope:title = title:e_minister_of_justice + scope:title = title:e_minister_of_works + } + } + # set up the council holder as dejure liege of the ministry title, as this effect is not called with the same scope as council onactions + scope:title.de_jure_liege.holder = { + save_scope_as = councillor_liege + } + # If we get a minister title, make sure we set things up correctly + switch = { + trigger = scope:title + title:e_minister_chancellor = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_chancellor MINISTER_POSITION = councillor_chancellor } + } + title:e_minister_censor = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_censor MINISTER_POSITION = councillor_spymaster } + } + title:e_minister_grand_marshal = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_grand_marshal MINISTER_POSITION = minister_grand_marshal } + } + title:e_minister_of_personnel = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_personnel MINISTER_POSITION = minister_personnel } + } + title:e_minister_of_revenue = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_revenue MINISTER_POSITION = councillor_steward } + } + title:e_minister_of_rites = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_rites MINISTER_POSITION = councillor_court_chaplain } + } + title:e_minister_of_war = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_war MINISTER_POSITION = councillor_marshal } + } + title:e_minister_of_justice = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_justice MINISTER_POSITION = minister_justice } + } + title:e_minister_of_works = { + got_minister_position_effect = { MINISTER_TITLE = e_minister_of_works MINISTER_POSITION = minister_works } + } + } + } + # TGP JAPAN + else_if = { + limit = { scope:title = title:e_japan } + # TGP RETIRED EMPEROR + if = { + limit = { + exists = title:e_japan.var:administrative_ui_special_title + has_title = title:e_japan.var:administrative_ui_special_title + } + # Flavourization setup + title:e_japan = { remove_variable = shogun_flag } + remove_character_flag = shogun_flag + if = { # Flavourization setup + limit = { has_global_variable = tenno_restored } + title:e_japan = { set_variable = ceremonial_liege_flag } + add_character_flag = ceremonial_liege_flag + trigger_event = { + id = tgp_japan_general.9100 + days = 1 + } + } + else = { # Event to abdicate and become Joko + trigger_event = { + id = tgp_japan_general.9120 + days = 1 + } + } + } + # TGP SHOGUN + else_if = { + limit = { + has_government = japan_feudal_government + has_global_variable = shogunate_established + } + title:e_japan = { remove_variable = ceremonial_liege_flag } + remove_character_flag = ceremonial_liege_flag + title:e_japan = { set_variable = shogun_flag } + add_character_flag = shogun_flag + } + # TGP KAMPAKU + else = { + title:e_japan = { remove_variable = ceremonial_liege_flag } + remove_character_flag = ceremonial_liege_flag + title:e_japan = { remove_variable = shogun_flag } + remove_character_flag = shogun_flag + } + # Japanese regent laws + if = { + limit = { + tgp_realm_has_ceremonial_liege_trigger = yes + government_is_japanese_trigger = yes + NOR = { + has_global_variable = shogunate_established + has_global_variable = tenno_restored + } + } + if = { + limit = { + government_has_flag = government_is_japan_administrative + NOT = { has_realm_law = japanese_regency_succession_law } + } + add_realm_law_skip_effects = japanese_regency_succession_law + } + else_if = { + limit = { + government_has_flag = government_is_japan_feudal + has_realm_law = japanese_regency_succession_law + } + remove_realm_law = japanese_regency_succession_law + } + } + } + # ROME + else_if = { + limit = { + OR = { + scope:title = title:h_roman_empire + scope:title = title:h_eastern_roman_empire + } + NOT = { has_trait = augustus } + } + trigger_event = roman_restoration.0005 + } + #Mongol empire and GoK should lose other empires + if = { + limit = { + primary_title ?= { + OR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } + scope:title = { + NOR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } + is_ai = yes + } + destroy_title = scope:title + } + # You just inherited an Emperor title!! + if = { + limit = { + primary_title = scope:title + exists = scope:previous_holder + NOT = { #You don't already have an empire tier title + any_held_title = { + title_tier = empire + this != scope:title + } + } + # That isn't a part of the ministry + NOR = { + scope:title = title:e_minister_chancellor + scope:title = title:e_minister_censor + scope:title = title:e_minister_grand_marshal + scope:title = title:e_minister_of_personnel + scope:title = title:e_minister_of_revenue + scope:title = title:e_minister_of_rites + scope:title = title:e_minister_of_war + scope:title = title:e_minister_of_justice + scope:title = title:e_minister_of_works + } + } + trigger_event = { + id = realm_maintenance.2001 + days = 1 + } + } + # DEPRECATED + #if = { + # limit = { + # is_independent_ruler = yes + # tgp_realm_has_ceremonial_liege_trigger = no + # government_has_flag = government_is_meritocratic + # } + # trigger_event = { + # id = tgp_korea_decision.9203 + # days = 1 + # } + #} + # TGP CEREMONIAL FLAVOR + scope:previous_holder ?= { + if = { + limit = { is_alive = yes } + remove_character_flag = ceremonial_liege_flag + remove_character_flag = ceremonial_regent_flag + } + } + if = { + limit = { is_alive = yes } + remove_character_flag = ceremonial_liege_flag + remove_character_flag = ceremonial_regent_flag + } + top_liege.primary_title.var:administrative_ui_special_title.holder ?= { + remove_character_flag = ceremonial_liege_flag + remove_character_flag = ceremonial_regent_flag + } + if = { + limit = { tgp_is_ceremonial_regent_trigger = yes } # Not 'actual' ruler + add_character_flag = ceremonial_regent_flag + top_liege.primary_title.var:administrative_ui_special_title.holder ?= { add_character_flag = ceremonial_liege_flag } + } + } + # West Francia becomes France when no longer controlled by a Karling + else_if = { + limit = { + scope:title = { + this = title:k_france + } + NOR = { + dynasty = { this = dynasty:25061 } # Not held by a Karling + any_liege_or_above = { + dynasty = { this = dynasty:25061 } # And does not have a liege that is a Karling + } + has_global_variable = west_francia_renamed + } + } + trigger_event = { + id = title_event.0001 + days = 1 + } + } + # East Francia becomes Germany when no longer controlled by a Karling + else_if = { + limit = { + scope:title = { + this = title:k_east_francia + } + NOR = { + dynasty = { this = dynasty:25061 } # Not held by a Karling + any_liege_or_above = { + dynasty = { this = dynasty:25061 } # And does not have a liege that is a Karling + } + has_global_variable = east_francia_renamed + } + } + trigger_event = { + id = title_event.0002 + days = 1 + } + } + # Hidden management event to determine if we need to axe Asturias &, if we do, what notification events to send out afterwards. + else_if = { + limit = { + scope:title = title:k_castille + title:k_asturias = { + # Leon must be de jure part of Asturias, or else there's no reason to ever stop calling it Asturias. + any_in_de_jure_hierarchy = { this = title:d_leon } + } + } + trigger_event = { + id = title_event.0011 + days = 1 + } + } + # FP2 El Cid Achievement + else_if = { + limit = { + scope:title = title:k_valencia + has_character_flag = fp2_el_cid_blood_relation_legacy + } + set_global_variable = { # DO. NOT. USE. add_achievement_global_variable_effect. IT BREAKS THE ACHIEVEMENT. + name = fp2_el_cid_achievement_unlocked + value = yes + } + } + # TGP CEREMONIAL RULER + # IMPERIAL INHERITANCE + else_if = { + limit = { + exists = scope:title.var:ceremonial_title + } + add_character_flag = ceremonial_liege_flag + if = { + limit = { has_trait = devoted } + remove_trait = devoted + } + destroy_laamp_effect = { ADVENTURER = this } + trigger_event = { + id = tgp_japan_general.9100 + days = 1 + } + } + # Norway stuff + else_if = { + limit = { + # The title they've acquired is Norway. + scope:title = title:k_norway + } + # Tanglehair becomes Fairhair. + if = { + limit = { + # This character is Harald Fairhair. + exists = character:144000 + this = character:144000 + # Norway has been created by them. + scope:transfer_type = flag:created + # Norway has not been created previously. + NOT = { exists = global_var:norway_created } + } + trigger_event = { + id = fp1_major_decisions.1011 + days = 1 + } + } + # Check Norway's creation status. + if = { + limit = { + scope:transfer_type = flag:created + NOT = { exists = global_var:norway_created } + } + trigger_event = { + id = fp1_major_decisions.1012 + days = 1 + } + } + } + # English Partition Result - Gained Both + else_if = { + limit = { + # Partition must be active. + exists = global_var:partition_active_danelaw + # The gained title must be one of the two partitioned entities. + OR = { + scope:title = title:k_england + scope:title = title:k_danelaw + } + # And you must now hold both titles. + this = title:k_england.holder + this = title:k_danelaw.holder + } + trigger_event = { + id = british_isles.1032 + days = 1 + } + } + # Lil Johnny Lackland changes his nickname. + if = { + limit = { + has_nickname = nick_lackland_young + } + give_nickname = nick_lackland_ironic + } + } + + ############# + # STRUGGLES # + ############# + if = { + limit = { + exists = struggle:persian_struggle + } + #Struggle Catalysts + if = { + limit = { + scope:title.empire ?= title:e_persia + scope:title = { + tier >= tier_county + is_landless_type_title = no + } + NOR = { + scope:transfer_type = flag:created + scope:transfer_type = flag:inheritance + } + } + if = { + limit = { + fp3_character_uninvolved_in_struggle_trigger = yes + scope:previous_holder ?= { + fp3_character_involved_in_struggle_trigger = yes + any_character_struggle = { + phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + } + } + } + scope:previous_holder ?= { + every_character_struggle = { + limit = { phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles } + activate_struggle_catalyst = { + catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_interloper_uninvolved_gain_struggle_titles } + } + } + } + if = { + limit = { + fp3_character_involved_in_struggle_trigger = yes + any_character_struggle = { + phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved + # Stop catalyst from affecting those who are only just now uninvolved due to losing this title + OR = { + NOT = { is_culture_involved_in_struggle = scope:previous_holder.culture } + NOT = { is_faith_involved_in_struggle = scope:previous_holder.faith } + } + } + scope:previous_holder ?= { + OR = { + fp3_character_uninvolved_in_struggle_trigger = yes + fp3_character_interloper_in_struggle_trigger = yes + } + } + } + every_character_struggle = { + limit = { phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved } + activate_struggle_catalyst = { + catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = stabil_catalyst_gain_struggle_titles_from_interlopers_uninvolved } + } + } + } + # FP3 Struggle special cases + if = { + limit = { + scope:title = { + OR = { + this = title:d_sunni + this = title:e_arabia + } + } + } + ## Convert detractors to supporters if they inherit either of the titles they're detracting against. + if = { + limit = { + NOT = { has_trait = fp3_struggle_supporter } + } + if = { + limit = { has_trait = fp3_struggle_detractor } + remove_trait = fp3_struggle_detractor + } + add_trait = fp3_struggle_supporter + } + # FP3 Title Transfer Notification + struggle:persian_struggle = { # Wet script + every_involved_ruler = { + send_interface_toast = { + type = event_toast_effect_bad + title = persian_struggle_central_title_transfer.t + left_icon = scope:previous_holder + right_icon = scope:title.holder + + custom_tooltip = persian_struggle_central_title_transfer.desc + } + } + every_interloper_ruler = { + send_interface_toast = { + type = event_toast_effect_bad + title = persian_struggle_central_title_transfer.t + left_icon = scope:previous_holder + right_icon = scope:title.holder + + custom_tooltip = persian_struggle_central_title_transfer.desc + } + } + } + } + } + + ############### + # GOVERNMENTS # + ############### + + # TGP bloc joining + if = { + limit = { + government_is_japanese_trigger = yes + tgp_house_bloc_interaction_valid_trigger = yes + is_house_head = no + NOT = { exists = confederation } + exists = house.house_head.confederation + liege = house.house_head.liege + is_at_war = no + } + save_scope_as = bloc_joiner + house.house_head.confederation = { add_confederation_member = scope:bloc_joiner } + } + # Challenged as house head in Japan + if = { + limit = { + government_is_japanese_trigger = yes + is_house_head = yes + } + trigger_event = { + weeks = { 2 4 } + id = tgp_japan_yearly_events.1210 + } + } + # TGP Catalysts + if = { + limit = { + scope:previous_holder ?= { + has_title = title:h_china + } + OR = { + scope:transfer_type = flag:granted + scope:transfer_type = flag:appointment + } + NOR = { + any_held_title = { + is_landless_type_title = no + this != scope:title + } + has_appointment_level_for_title = scope:title + } + } + situation:dynastic_cycle ?= { + if = { + limit = { situation_top_has_catalyst = catalyst_hegemon_appointing_low_merit_governor } + trigger_situation_catalyst = { + catalyst = catalyst_hegemon_appointing_low_merit_governor + character = scope:previous_holder + } + } + } + } + # If the minister's merit rank is too low, it will affect the dynastic cycle + if = { + limit = { + scope:title = { + OR = { + this = title:e_minister_chancellor + this = title:e_minister_censor + this = title:e_minister_grand_marshal + this = title:e_minister_of_personnel + this = title:e_minister_of_revenue + this = title:e_minister_of_rites + this = title:e_minister_of_war + this = title:e_minister_of_justice + this = title:e_minister_of_works + } + } + NOT = { has_appointment_level_for_title = scope:title } + } + situation:dynastic_cycle ?= { + if = { + limit = { situation_top_has_catalyst = catalyst_hegemon_appointing_low_merit_councillor } + trigger_situation_catalyst = { + catalyst = catalyst_hegemon_appointing_low_merit_councillor + character = root + } + } + } + } + # Admin Stuff + if = { + limit = { + OR = { + government_allows = administrative + government_has_flag = government_is_japan_feudal + } + NOT = { has_variable = laamp_invasion_flag } + } + government_type = { save_scope_as = nf_gov_type } + # Note: anything that should be run after creation can go in on_noble_family_title_created + give_new_noble_family_title_effect = yes + # EP3 - Ensure Emperor keeps old realm capital in admin realms & apply unique domicile building bonus if appropriate + if = { + limit = { + top_liege = this + highest_held_title_tier >= tier_empire + NOT = { + any_held_title = { + OR = { + tier = tier_empire + tier = tier_hegemony + } + this != scope:title + } + } + } + if = { # Ensure we keep the old realm capital + limit = { + scope:title = { + tier >= tier_empire + title_capital_county != root.capital_county + # Constantinople must have been inherited + title_capital_county.holder = root + } + } + set_realm_capital = scope:title.title_capital_county + } + if = { # Get legitimacy from Reception Hall House Bonus + limit = { + house = { has_variable = ep3_legacy_legitimacy_counter } + primary_title = scope:title + } + trigger_event = { + id = ep3_admin_events.0010 + days = 1 + } + } + } + # EP3 - Fire a became governor event + else_if = { + limit = { + top_liege != this + trigger_if = { + limit = { government_allows = merit } + is_governor_or_admin_count = yes + } + trigger_else = { + is_governor = yes + } + any_held_title = { + count < 1 + this != scope:title + tier >= scope:title.tier + is_landless_type_title = no + is_noble_family_title = no + } + } + trigger_event = { + id = ep3_admin_events.0002 + delayed = yes + } + } + # Admin vassals get the Governor trait when they first become a governor + if = { + limit = { + is_governor = yes + NOT = { has_trait = governor } + scope:title = { + tier >= root.main_administrative_tier + } + } + add_trait = governor + } + #Admin imperial succession notification event (it's a big deal) + if = { + limit = { + top_liege = this + highest_held_title_tier >= tier_kingdom + scope:title = root.primary_title + has_ep3_dlc_trigger = yes + #Checks so this event doesn't fire after character creation, although it's not really a problem if it does + trigger_if = { + limit = { + game_start_date = 867.1.1 + } + current_date >= 867.1.4 + } + trigger_if = { + limit = { + game_start_date = 1066.9.15 + } + current_date >= 1066.9.18 + } + trigger_if = { + limit = { + game_start_date = 1178.10.1 + } + current_date >= 1178.10.4 + } + } + save_scope_as = emperor + #Should trigger special event during fourth crusade! + if = { + limit = { + exists = global_var:byz_claimant_champion + global_var:byz_claimant_champion = { + any_owned_story = { + type = frankokratia_story + exists = var:byz_claimant + var:byz_claimant = { + this = root + } + } + } + } + every_vassal_or_below = { + limit = { + is_playable_character = yes + } + trigger_event = ep3_frankokratia_events.0110 + } + } + else = { + if = { + limit = { + exists = root.house + } + #normal triggering + every_vassal_or_below = { + limit = { + is_playable_character = yes + exists = scope:previous_holder + has_government = administrative_government + OR = { + highest_held_title_tier >= main_administrative_tier # All governors + liege = root + } + } + trigger_event = { + id = ep3_governor_yearly.3060 + days = 1 + } + } + } + } + } + #Admin event about rewarding person who helped you get title + if = { + limit = { + has_succession_appointment_investors = scope:title + has_ep3_dlc_trigger = yes + scope:title = { + any_succession_appointment_investors = { + count >= 1 + candidate = root + value >= 20 + NOT = { + house ?= root.house + } + is_alive = yes + is_imprisoned = no + NOR = { + has_relation_rival = root + is_at_war_with = root + } + } + } + } + save_scope_as = new_landed_admin + trigger_event = { + id = ep3_interactions_events.0600 + days = { 5 10 } + } + } + #Notification for house members of title holder + if = { + limit = { + scope:title.tier > tier_barony + primary_title.tier <= scope:title.tier + NOT = { has_character_flag = admin_title_gain_notification_sent } + exists = house + any_player = { + house ?= root.house + top_liege = root.top_liege + government_allows = administrative + this != root + } + } + add_character_flag = { + flag = admin_title_gain_notification_sent + days = 10 + } + save_scope_as = title_gainer + every_player = { + limit = { + house ?= root.house + top_liege = root.top_liege + government_allows = administrative + this != scope:title_gainer + scope:title != title:k_chrysanthemum_throne + } + send_interface_message = { + type = msg_admin_title_gained + title = msg_admin_title_gained_house.tt + desc = msg_admin_title_gained.desc + left_icon = scope:title_gainer + right_icon = scope:title + } + } + } + #Notification for admin investors in new title holder + if = { + limit = { + NOT = { has_character_flag = admin_title_gain_notification_sent } + scope:title = { + tier > tier_barony + any_succession_appointment_investors = { + is_ai = no + candidate = root + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + } + } + add_character_flag = { + flag = admin_title_gain_notification_sent + days = 10 + } + save_scope_as = title_gainer + scope:title = { + every_succession_appointment_investors = { + candidate = root + value > 0 + limit = { + is_ai = no + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + send_interface_message = { + type = msg_admin_title_gained + title = msg_admin_title_gained_investor.tt + desc = msg_admin_title_gained.desc + left_icon = scope:title_gainer + right_icon = scope:title + } + } + every_succession_appointment_investors = { + candidate = root + value < 0 + limit = { + is_ai = no + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + send_interface_message = { + type = msg_admin_title_gained_foe + title = msg_admin_title_gained_foe.tt + desc = msg_admin_title_gained.desc + left_icon = scope:title_gainer + right_icon = scope:title + } + } + } + } + + # Merit based candidate score bonus is removed when successfully getting a new governorship + if = { + limit = { + OR = { + has_variable = merit_civilian_career_score_bonus + has_variable = merit_military_career_score_bonus + } + is_landed = yes + scope:title.tier >= primary_title.tier + } + if = { + limit = { has_variable = merit_civilian_career_score_bonus } + remove_variable = merit_civilian_career_score_bonus + } + else_if = { + limit = { has_variable = merit_military_career_score_bonus } + remove_variable = merit_military_career_score_bonus + } + } + } + + ######## + # MISC # + ######## + + # TGP, bow before liege mandated + if = { + limit = { + culture = { has_cultural_parameter = must_pledge_loyalty_to_liege } + } + if = { # if you are now the top liege, all your direct vassals with the same parameter who have not yet sworn fealty to you must swear fealty + limit = { + this = top_liege + primary_title.tier <= scope:title.tier + } + every_vassal = { + if = { + limit = { + culture = { has_cultural_parameter = must_pledge_loyalty_to_liege } + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + NOT = { var:pledge_loyalty_to_liege_grace ?= liege } + NOT = { owns_story_of_type = story_cycle_pledge_loyalty_to_liege_overdue } + } + create_story = story_cycle_pledge_loyalty_to_liege_overdue + random_owned_story = { + type = story_cycle_pledge_loyalty_to_liege_overdue + set_variable = new_liege_variant + } + } + } + } + else_if = { # if you now have a new liege, and they also follow a culture with the Pay Homage requirement, you must swear continued fealty + limit = { + liege.culture = { has_cultural_parameter = must_pledge_loyalty_to_liege } + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + NOT = { var:pledge_loyalty_to_liege_grace ?= liege } + NOT = { owns_story_of_type = story_cycle_pledge_loyalty_to_liege_overdue } + } + create_story = story_cycle_pledge_loyalty_to_liege_overdue + random_owned_story = { + type = story_cycle_pledge_loyalty_to_liege_overdue + set_variable = new_title_variant + } + } + } + + # Did I conquer a place with holy order leases not of my faith? + if = { + limit = { + scope:title = { + any_in_de_jure_hierarchy = { + tier = tier_barony + is_under_holy_order_lease = yes + county.holder = { + any_liege_or_above = { this = root } + } + lessee = { + NAND = { # Only for leases of people who are not of your faith or the holder's faith + faith = root.faith + faith = prev.county.holder.faith + } + } + } + } + } + scope:title = { + every_in_de_jure_hierarchy = { + limit = { + tier = tier_barony + is_under_holy_order_lease = yes + county.holder = { + any_liege_or_above = { this = root } + } + lessee = { + NAND = { # Only for leases of people who are not of your faith or the holder's faith + faith = root.faith + faith = prev.county.holder.faith + } + } + } + revoke_lease = yes + } + } + } + + # Everything that requires a previous_holder + if = { + limit = { + exists = scope:previous_holder + } + # If a player is on their way to pay homage, invalidate. + if = { + limit = { + any_player = { var:homage_liege_scope ?= scope:previous_holder } + } + every_player = { + limit = { + var:homage_liege_scope ?= scope:previous_holder + NOT = { has_character_flag = currently_invalidating_petition_liege_travel } + } + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + trigger_event = pay_homage.0601 + add_character_flag = { + flag = currently_invalidating_petition_liege_travel + days = 1 + } + } + } + # If a player is on their way to bow before liege, invalidate. + else_if = { + limit = { + any_player = { var:pledge_loyalty_to_liege_scope ?= scope:previous_holder } + } + every_player = { + limit = { + var:pledge_loyalty_to_liege_scope ?= scope:previous_holder + NOT = { has_character_flag = currently_invalidating_petition_liege_travel } + } + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + trigger_event = pledge_loyalty_to_liege.0601 + add_character_flag = { + flag = currently_invalidating_petition_liege_travel + days = 1 + } + } + } + + # Feud + if = { + limit = { + scope:previous_holder = { + house_has_feud_relation_with_trigger = { TARGET = root } + house = { + any_house_relation = { + any_relation_house = { + this = root.house + NOT = { this = scope:previous_holder.house } + } + var:house_feud_reason ?= flag:competing_claim + var:house_feud_attacker.house ?= scope:previous_holder.house + var:house_feud_victim.house ?= root.house + var:house_feud_title ?= scope:title + NOT = { exists = var:feud_avenged } + } + } + } + } + scope:previous_holder.house_head = { save_scope_as = house_feud_rival } + trigger_event = bp1_house_feud.7000 + } + } + + # EP3 LAAMP SUPPORTER INVALIDATION + if = { + limit = { + exists = var:adventurer_invasion_supporter + NOT = { government_has_flag = government_is_landless_adventurer } + } + ep3_laamp_supporter_invalidated_effect = yes + } + + # Natural Disaster Recovery project invalidation + great_projects_ensure_unique_disaster_recovery_projects_effect = yes + + ########### + # Nomads/Tribals leaving confederacies + ########### + if = { + limit = { + is_confederation_member = yes + scope:title.tier >= tier_kingdom + government_is_japanese_trigger = no + } + confederation = { + remove_confederation_member = root + } + } + + # Peasants dress like nobles if landed + if = { + limit = { + has_character_flag = peasant_outfit + NOT = { government_has_flag = government_is_herder } + } + remove_character_flag = peasant_outfit + } + + # Petition allowed again + if = { + limit = { has_variable = petition_title_cooldown } + remove_variable = petition_title_cooldown + } + + # Cancel Domicile travels + current_travel_plan ?= { + if = { + limit = { is_travel_with_domicile = yes } + abort_travel_plan = yes + } + } + + # BP3 - Inspector perks cleanup effect + landless_inspector_cleanup_modifier = yes + + # Update flavorful titles (Margrave, Tenno, etc.) + additional_flavor_check_effect = yes + + # Update CoAs + scope:title = { update_dynamic_coa = yes } + + ### MEMORIES - SHOULD STAY AT BOTTOM ### + # Ascended to the throne + if = { + limit = { + OR = { + is_ruler = no + highest_held_title_tier <= scope:title.tier + government_has_flag = government_is_landless_adventurer + government_allows = administrative + } + } + if = { + limit = { exists = scope:title.var:adventurer_flavor_char } + create_character_memory = { + type = became_landless_adventurer_memory + participants = { + flavor_character = scope:title.var:adventurer_flavor_char + } + } + #Only children should get childhood memories + if = { + limit = { is_adult = no } + scope:new_memory = { set_variable = childhood_memory } + } + scope:new_memory = { + save_scope_as = became_landless_adventurer_memory + set_variable = { + name = landless_title + value = scope:title + } + set_variable = { + name = reason + value = scope:transfer_type + } + set_variable = { + name = adventurer_creation_reason + value = scope:title.var:adventurer_creation_reason + } + if = { + limit = { exists = scope:lost_primary_title } + set_variable = { + name = old_primary_title + value = scope:lost_primary_title + } + } + if = { # Error suppression + limit = { exists = var:landless_title } + } + } + } + else = { + # Overwrite if there is a more specific Reason + root = { + add_to_variable_list = { + name = new_titles + target = scope:title + } + trigger_event = { + id = title_event.9900 + delayed = yes + } + } + } + } + + # If we weren't already in a diarchy but should be, put us in one. + if = { + limit = { + scope:title.tier >= tier_county + } + trigger_event = { + id = diarchy.0011 + days = 1 + } + } + #Confederation titles being re-created... get confederation law bb + if = { + limit = { + scope:transfer_type = flag:created + scope:title = { + has_variable = confederation_culture + NOT = { + has_title_law = confederation_elective_succession_law + } + } + } + scope:bloc = { add_confederation_member = scope:bloc_joiner } + } + #Coronation modifier is lost + if = { + limit = { + scope:title = { + tier = tier_county + OR = { + has_county_modifier = major_coronation_approval_unsettled_modifier + has_county_modifier = medium_coronation_approval_unsettled_modifier + has_county_modifier = minor_coronation_approval_unsettled_modifier + has_county_modifier = major_coronation_approval_modifier + has_county_modifier = medium_coronation_approval_modifier + has_county_modifier = minor_coronation_approval_modifier + } + } + NOR = { + scope:transfer_type = flag:inheritance + scope:transfer_type = flag:leased_out + scope:transfer_type = flag:abdication + scope:transfer_type = flag:granted + scope:transfer_type = flag:election + scope:transfer_type = flag:abdication + scope:transfer_type = flag:stepped_down + scope:transfer_type = flag:swear_fealty + scope:transfer_type = flag:created + } + } + #Add negative modifiers if stolen + scope:title = { + switch = { + trigger = has_county_modifier + major_coronation_approval_modifier = { + scope:title = { + remove_county_modifier = major_coronation_approval_modifier + add_county_modifier = { + modifier = major_coronation_approval_malus_modifier + years = 5 + } + } + } + major_coronation_approval_unsettled_modifier = { + scope:title = { + remove_county_modifier = major_coronation_approval_unsettled_modifier + add_county_modifier = { + modifier = major_coronation_approval_malus_unsettled_modifier + years = 5 + } + } + } + medium_coronation_approval_modifier = { + scope:title = { + remove_county_modifier = medium_coronation_approval_modifier + add_county_modifier = { + modifier = medium_coronation_approval_malus_modifier + years = 5 + } + } + } + medium_coronation_approval_unsettled_modifier = { + scope:title = { + remove_county_modifier = medium_coronation_approval_unsettled_modifier + add_county_modifier = { + modifier = medium_coronation_approval_malus_unsettled_modifier + years = 5 + } + } + } + minor_coronation_approval_modifier = { + scope:title = { + remove_county_modifier = minor_coronation_approval_modifier + add_county_modifier = { + modifier = minor_coronation_approval_malus_modifier + years = 5 + } + } + } + minor_coronation_approval_unsettled_modifier = { + scope:title = { + remove_county_modifier = minor_coronation_approval_unsettled_modifier + add_county_modifier = { + modifier = minor_coronation_approval_malus_unsettled_modifier + years = 5 + } + } + } + } + } + } + + # House head goes to independent ruler for Japanese AI + if = { + limit = { + is_house_head = no + is_ai = yes + government_is_japanese_trigger = yes + scope:previous_holder = { + is_ai = yes + trigger_if = { + limit = { exists = scope:player_heir } + player_heir = { is_ai = yes } + } + } + scope:new_holder = { + is_ai = yes + trigger_if = { + limit = { exists = scope:player_heir } + player_heir = { is_ai = yes } + } + } + house.house_head = { + is_ai = yes + trigger_if = { + limit = { exists = scope:player_heir } + player_heir = { is_ai = yes } + } + is_vassal_or_below_of = root + } + is_independent_ruler = yes + } + house = { set_house_head = root } + } + + if = { # If courtiers get lost between governorship assignments, move them home + limit = { + is_ai = no + government_allows = merit + } + if = { + limit = { + is_landed = yes + } + every_courtier = { + limit = { + location != root.capital_province + is_imprisoned = no + is_travelling = no + is_commanding_army = no + NOR = { + exists = involved_activity + exists = knight_army + } + } + set_location_to_default = yes + } + } + else_if = { + limit = { + exists = domicile.domicile_location + } + every_courtier = { + limit = { + location != root.domicile.domicile_location + is_imprisoned = no + is_travelling = no + is_commanding_army = no + NOR = { + exists = involved_activity + exists = knight_army + } + } + set_location_to_default = yes + } + } + } + # If you take another realm's dynasty-named title, reset its name + if = { + limit = { + is_independent_ruler = yes + government_has_flag = government_is_celestial + scope:title ?= { + tier >= tier_kingdom + has_custom_title_name = yes + this != root.primary_title + } + } + scope:title = { + reset_title_name = yes + } + } + } + events = { + roman_restoration.0005 #New Roman Emperor gets Augustus trait. (old holder, if still alive, loses it) + roman_restoration.0199 #Restoring the Pentarchy. + delay = { days = 1 } + realm_maintenance.2001 #Big notification about inheriting emperor tier title + british_isles.1032 # Danelaw-England partition calc. + title_event.0001 # Rename West Francia to France + title_event.0002 # Rename East Francia to Germany + title_event.0011 # Asturias becomes Leon upon emergence of Castille + # If we weren't already in a diarchy but should be, put us in one. + diarchy.0011 + ep3_emperor_yearly.2020 # EP3: The Patriarch refuses to crown you as new emperor because you have a criminal trait + } +} + +# A title is inherited by a character +# root = the new holder +# scope:title = the title that changes hands +# scope:previous_holder = previous holder. Should be dead +on_title_gain_inheritance = { + events = { + delay = { days = 1 } + # Try to end inherited entrenched regencies automatically — we need to launder this by a day to make sure the AI realises they've inherited a diarchy. + diarchy.0113 + } + effect = { + if = { + limit = { + government = landless_minority_government + exists = liege + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + scope:root = { + becomes_independent = { change = scope:change } + } + resolve_title_and_vassal_change = scope:change + } + if = { + limit = { + scope:title = { + OR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } + has_character_flag = gain_mongol_succession_dread + } + add_dread = 50 + } + else_if = { + limit = { + OR = { + scope:title = title:h_roman_empire + scope:title = title:h_eastern_roman_empire + } + } + set_variable = uses_custom_caesar_flavourization + } + } +} + +# A title is usurped by a character +# root = the new holder +# scope:title = the title that changes hands +# scope:previous_holder = previous holder. Shouldn't be dead +on_title_gain_usurpation = { + events = { + } + effect = { + if = { + limit = { + government = landless_minority_government + exists = liege + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + scope:root = { + becomes_independent = { change = scope:change } + } + resolve_title_and_vassal_change = scope:change + } + # Struggle Catalysts + if = { + limit = { # FP2 + # We are only interested in the title within the Struggle Region + scope:title.empire ?= title:e_spain + # Only for usurpation + scope:transfer_type = flag:usurped + + root = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_usurp_title_fp2 + CHAR = root + } + } + } + } + root = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_usurp_title_fp2 + CHAR = root + } + } + activate_struggle_catalyst = { + catalyst = catalyst_usurp_title_fp2 + character = root + } + } + } + } + else_if = { + limit = { # FP3 + scope:title.empire ?= title:e_persia + scope:transfer_type = flag:usurped + + root = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_usurp_title_fp3 + CHAR = root + } + } + } + } + root = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_usurp_title_fp3 + CHAR = root + } + } + activate_struggle_catalyst = { + catalyst = catalyst_usurp_title_fp3 + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = unrest_catalyst_usurp_title_fp3 } + } + } + } + } +} + +# A title is lost by a character +# root = the old holder +# scope:title = the title that changes hands +# scope:new_holder = new holder. +on_title_lost = { + events = { + british_isles.1033 # Danelaw-England partition calc. + } + + effect = { + if = { + limit = { + government = landless_minority_government + exists = liege + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + scope:root = { + becomes_independent = { change = scope:change } + } + resolve_title_and_vassal_change = scope:change + } + #Make sure nobody ever has only the Kingdom of Fashion + if = { + limit = { + scope:title = { tier = tier_kingdom } + has_title = title:k_fashion + NOT = { + any_held_title = { # Only trigger if you don't have any kingdom titles other than Fashion and the kingdom you just lost. Double negative is confusing but it's the only way I could think to script it + title_tier = kingdom + NOT = { this = title:k_fashion } + this != scope:title + } + } + } + destroy_title = title:k_fashion + } + #Earmark landless Scandinavians for adventuring. + if = { + limit = { + #We only want to grab tribal cultures. + culture = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + #Must have lost their last piece of land. + is_playable_character = no + #If they've ventured far outside Europe, they're unlikely to come back, so we don't #want them. + scope:title = { + tier = tier_county + title_province = { + OR = { + geographical_region = world_europe + geographical_region = world_asia_minor + } + } + } + } + #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 + } + } + } + + #To remove concubines if a character becomes unlanded + if = { + limit = { + is_playable_character = no + any_concubine = { } + } + every_concubine = { root = { remove_concubine = prev } } + } + + # Transfer co-monarchies. + if = { + limit = { + OR = { + scope:transfer_type = flag:inheritance + scope:transfer_type = flag:abdication + scope:transfer_type = flag:usurped + scope:transfer_type = flag:election + scope:transfer_type = flag:faction_demand + scope:transfer_type = flag:stepped_down + } + } + save_scope_as = old_holder + trigger_event = { + id = diarchy.0025 + days = 1 + } + } + + #Apply loss of stress to the Rivals + if = { + limit = { + scope:title.tier >= tier_county + scope:title = { is_landless_type_title = no } + OR = { + scope:transfer_type = flag:conquest + scope:transfer_type = flag:conquest_holy_war + scope:transfer_type = flag:conquest_claim + scope:transfer_type = flag:conquest_populist + scope:transfer_type = flag:abdication + scope:transfer_type = flag:usurped + scope:transfer_type = flag:revoked + scope:transfer_type = flag:faction_demand + } + } + root = { + save_scope_as = actor + } + every_relation ={ + type = rival + + send_interface_message = { + type = event_generic_neutral + title = msg_rival_dethroned + left_icon = scope:actor + right_icon = scope:title + + custom_tooltip = msg_rival_dethroned_desc + + stress_impact = { + base = medium_stress_loss + vengeful = medium_stress_loss + } + } + } + } + + # Struggle catalyst + if = { + limit = { + any_character_struggle = { + involvement = involved + phase_has_catalyst = catalyst_revoke_title + } + OR = { + scope:transfer_type = flag:revoked + scope:transfer_type = flag:lease_revoked + } + } + every_character_struggle = { + activate_struggle_catalyst = { + catalyst = catalyst_revoke_title + character = scope:new_holder + } + } + } + + # Memories + # Lost a significant title + if = { + limit = { + scope:title.tier >= highest_held_title_tier + exists = scope:new_holder + } + if = { + limit = { exists = root.var:lost_title_reason } + root.var:lost_title_reason = { save_scope_as = real_transfer_type } + root = { remove_variable = lost_title_reason } + } + else = { + scope:transfer_type = { save_scope_as = real_transfer_type } + } + root = { + add_to_variable_list = { + name = lost_titles + target = scope:title + } + trigger_event = { + id = title_event.9901 + delayed = yes + } + } + } + + # LEGITIMACY LOSS FROM USURPATION + if = { + limit = { + scope:transfer_type ?= flag:usurped + has_legitimacy = yes + NOT = { exists = scope:suppress_legitimacy_loss } + } + # Minus 2, since we want Duchy to be 1, and it's normally 3 + save_scope_value_as = { + name = title_tier_minus_2 + value = { + value = scope:title.tier + subtract = 2 + } + } + send_interface_toast = { + type = msg_legitimacy_loss + title = legitimacy_loss_toast + left_icon = root + right_icon = scope:title + custom_tooltip = legitimacy_loss_usurpation_tt + add_legitimacy = { + value = { + value = miniscule_legitimacy_loss + multiply = scope:title_tier_minus_2 + } + } + } + } + + # EP3 LAAMP SUPPORTER INVALIDATION + ep3_laamp_supporter_invalidated_effect = yes + + # EP3 - Handle admin estates when they end up outside the realm + if = { + limit = { + scope:new_holder = { + any_sub_realm_barony = { + title_province = { + any_province_domicile = { + is_domicile_type = estate + owner ?= { + top_liege != scope:new_holder.top_liege + } + } + } + } + } + } + scope:new_holder = { + every_sub_realm_barony = { + limit = { + title_province = { + any_province_domicile = { + is_domicile_type = estate + owner ?= { + top_liege != scope:new_holder.top_liege + } + } + } + } + title_province = { + every_province_domicile = { + limit = { + is_domicile_type = estate + owner ?= { + top_liege != scope:new_holder.top_liege + } + } + + # First, let's do some damage to the estate - We randomize the level of damage taken + random_list = { + 40 = { # Damage 1 + trigger = { + num_domicile_buildings <= 6 + } + set_variable = { + name = domicile_damage_count + value = 1 + } + } + 35 = { # Damage 2 + trigger = { + num_domicile_buildings > 2 + } + set_variable = { + name = domicile_damage_count + value = 2 + } + } + 30 = { # Damage 3 + trigger = { + num_domicile_buildings > 4 + } + set_variable = { + name = domicile_damage_count + value = 3 + } + } + 25 = { # Damage 4 + trigger = { + num_domicile_buildings > 6 + } + set_variable = { + name = domicile_damage_count + value = 4 + } + } + 20 = { # Damage 5 + trigger = { + num_domicile_buildings > 8 + } + set_variable = { + name = domicile_damage_count + value = 5 + } + } + 15 = { # Damage 6 + trigger = { + num_domicile_buildings > 10 + } + set_variable = { + name = domicile_damage_count + value = 6 + } + } + } + while = { + count = var:domicile_damage_count + destroy_random_estate_building_variable_effect = yes + destroy_random_estate_building_effect = yes + } + + # Clear the variable + if = { + limit = { has_variable = domicile_damage_count } + remove_variable = domicile_damage_count + } + + # Then we'll move the estate to keep it within the realm's borders + if = { # If you have a capital (i.e. you are a governor) let's move the estate there + limit = { + owner = { + is_landed = yes + exists = capital_province + } + } + move_domicile = owner.capital_province + } + else_if = { # If not, let's move it to a landed house member in the realm, if you have one + limit = { + owner = { + top_liege ?= { save_temporary_scope_as = owner_top_liege } + house ?= { + any_house_member = { + is_governor = yes + top_liege = scope:owner_top_liege + } + } + } + } + owner = { + house = { + random_house_member = { + limit = { + is_governor = yes + exists = capital_province + top_liege = scope:owner_top_liege + } + capital_province = { save_temporary_scope_as = house_member_location } + } + } + } + move_domicile = scope:house_member_location + } + else_if = { # Otherwise move it to the realm capital + limit = { + exists = owner.top_liege.capital_province + } + move_domicile = owner.top_liege.capital_province + } + + # Save the new estate location for msg + domicile_location.barony = { + save_scope_as = new_estate_location + } + + # Finally, let's make sure the owner moves to the new estate location + owner = { + if = { + limit = { + is_alive = yes + is_imprisoned = no + is_travelling = no + NOT = { + exists = involved_activity + } + is_commanding_army = no + } + set_location_to_default = yes + } + + # And notify the owner that all of this just happened + if = { + limit = { is_ai = no } + send_interface_message = { + type = msg_domicile_damaged + title = msg_estate_damaged.title + desc = msg_estate_damaged.desc + right_icon = scope:new_estate_location + } + } + } + } + } + } + } + } + + # Additional Flavor Title + additional_flavor_check_effect = yes + + if = { + limit = { + OR = { + scope:title = title:h_roman_empire + scope:title = title:h_eastern_roman_empire + } + } + remove_variable = uses_custom_caesar_flavourization + } + #Notification for house members of loser + if = { + limit = { + scope:title.tier > tier_barony + trigger_if = { # Prevent msg spam when rulers give away or lose lower tier titles + limit = { + is_landed = yes + } + primary_title.tier <= scope:title.tier + } + is_alive = yes + NOT = { has_character_flag = admin_title_loss_notification_sent } + government_allows = administrative + house ?= { + any_house_member = { + is_ai = no + trigger_if = { + limit = { exists = root.top_liege } + top_liege = root.top_liege + } + government_allows = administrative + this != root + } + } + } + add_character_flag = { + flag = admin_title_loss_notification_sent + days = 10 + } + save_scope_as = title_loser + house = { + every_house_member = { + limit = { + is_ai = no + trigger_if = { + limit = { exists = root.top_liege } + top_liege = root.top_liege + } + government_allows = administrative + this != scope:title_loser + } + send_interface_message = { + type = msg_admin_title_lost + title = msg_admin_title_lost_house.tt + desc = msg_admin_title_lost.desc + left_icon = scope:title_loser + right_icon = scope:title + } + } + } + } + #Notification for admin investors in loser + if = { + limit = { + is_alive = yes + NOT = { has_character_flag = admin_title_loss_notification_sent } + scope:title = { + tier > tier_barony + any_succession_appointment_investors = { + candidate = root + is_ai = no + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + } + } + add_character_flag = { + flag = admin_title_loss_notification_sent + days = 10 + } + save_scope_as = title_loser + scope:title = { + every_succession_appointment_investors = { + candidate = root + value > 0 + limit = { + is_ai = no + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + send_interface_message = { + type = msg_admin_title_lost + title = msg_admin_title_lost_investor.tt + desc = msg_admin_title_lost.desc + left_icon = scope:title_loser + right_icon = scope:title + } + } + every_succession_appointment_investors = { + candidate = root + value < 0 + limit = { + is_ai = no + trigger_if = { + limit = { exists = root.house } + NOT = { house ?= root.house } + } + } + send_interface_message = { + type = msg_admin_title_lost_foe + title = msg_admin_title_lost_foe.tt + desc = msg_admin_title_lost.desc + left_icon = scope:title_loser + right_icon = scope:title + } + } + } + } + + # Lil Johnny Lackland changes his nickname. + if = { + limit = { + has_nickname = nick_lackland_ironic + scope:title.tier >= tier_duchy + } + give_nickname = nick_lackland_old + } + + # BP3 - Inspector perks cleanup effect + landless_inspector_cleanup_modifier = yes + + #End Greatest of Khans story if title was lost + if = { + limit = { + any_owned_story = { + story_type = story_greatest_of_khans + } + global_var:greatest_of_khans_title ?= { + this = scope:title + } + OR = { + NOT = { + exists = scope:new_holder + } + scope:new_holder = { + NOR = { + AND = { + exists = dynasty + dynasty ?= root.dynasty + } + is_grandchild_of = root + is_child_of = root + } + } + } + } + if = { + limit = { + is_alive = yes + } + trigger_event = { + id = mpo_greatest_of_khans.0040 + days = 1 + } + } + else_if = { + limit = { + exists = root.player_heir + exists = root.dynasty + player_heir = { + dynasty ?= story_owner.dynasty + } + } + player_heir ?= { + trigger_event = { + id = mpo_greatest_of_khans.0040 + days = 1 + } + } + } + else = { + every_owned_story = { + limit = { story_type = story_greatest_of_khans } + end_story = yes + } + remove_character_modifier = the_great_khan_modifier + } + } + #Coronation loyalty modifier + if = { + limit = { + scope:title = { + has_variable = coronation_loyal_to_title + var:coronation_loyal_to_title = { + NOT = { + this = scope:new_holder.primary_title + } + } + } + } + scope:title = { + remove_county_modifier = coronation_loyal_to_the_crown_modifier + remove_variable = coronation_loyal_to_title + add_county_modifier = { + modifier = coronation_still_loyal_modifier + years = 5 + } + } + } + + if = { # If courtiers get lost between governorship assignments, move them home + limit = { + is_ai = no + government_allows = merit + } + if = { + limit = { + is_landed = yes + } + every_courtier = { + limit = { + location != root.capital_province + is_imprisoned = no + is_travelling = no + is_commanding_army = no + NOR = { + exists = involved_activity + exists = knight_army + } + } + set_location_to_default = yes + } + } + else_if = { + limit = { + is_landed = no + exists = domicile.domicile_location + } + every_courtier = { + limit = { + location != root.domicile.domicile_location + is_imprisoned = no + is_travelling = no + is_commanding_army = no + NOR = { + exists = involved_activity + exists = knight_army + } + } + set_location_to_default = yes + } + } + } + + # Remove manually added Ministers if they're not ministers anymore + if = { + limit = { + NOR = { + primary_title = title:e_minister_chancellor + primary_title = title:e_minister_censor + primary_title = title:e_minister_grand_marshal + primary_title = title:e_minister_of_personnel + primary_title = title:e_minister_of_revenue + primary_title = title:e_minister_of_rites + primary_title = title:e_minister_of_war + primary_title = title:e_minister_of_justice + primary_title = title:e_minister_of_works + } + } + situation:dynastic_cycle = { + remove_manual_participant = prev + } + } + + # Move or destroy estates without a liege + if = { + limit = { + # Has an NF title + any_held_title = { + NOT = { this = scope:title } + is_noble_family_title = yes + } + # Only remaining title is NF title + any_held_title = { + count = 0 + NOT = { this = scope:title } + is_noble_family_title = no + } + } + if = { + limit = { + OR = { + exists = scope:new_holder.var:laamp_invasion_flag + trigger_if = { + limit = { government_is_japanese_trigger = yes } + scope:new_holder.top_liege = { government_is_japanese_trigger = no } + } + trigger_else_if = { + limit = { + scope:new_holder.top_liege = { government_is_japanese_trigger = yes } + } + government_is_japanese_trigger = no + } + trigger_else = { + NOT = { has_same_government = scope:new_holder.top_liege } + } + } + } + # Find appropriate new realm if possible + scope:new_holder.top_liege = { + ordered_neighboring_and_across_water_realm_owner = { + limit = { + highest_held_title_tier >= main_administrative_tier + trigger_if = { + limit = { + root = { government_is_japanese_trigger = yes } + } + government_is_japanese_trigger = yes + } + trigger_else = { has_same_government = root } + } + order_by = highest_held_title_tier + save_scope_as = new_realm_owner + } + } + if = { # Change liege + limit = { exists = scope:new_realm_owner } + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + } + change_liege = { + liege = scope:new_realm_owner + change = scope:change + } + resolve_title_and_vassal_change = scope:change + } + else = { # Game over + random_held_title = { + limit = { is_noble_family_title = yes } + save_scope_as = title_to_destroy + scope:new_holder.top_liege = { destroy_title = scope:title_to_destroy } + } + } + } + } + else_if = { + limit = { + is_house_head = no + # Has an NF title + exists = house + house.house_head = { + any_held_title = { is_noble_family_title = yes } + } + # Only remaining title is NF title + any_held_title = { + count = 0 + NOT = { this = scope:title } + } + } + house.house_head = { + save_temporary_scope_as = house_head_court + } + every_courtier = { + if = { + limit = { + NOT = { is_courtier_of = scope:house_head_court } + } + save_temporary_scope_as = courtier + scope:house_head_court = { add_courtier = scope:courtier } + } + } + if = { + limit = { + NOT = { is_courtier_of = scope:house_head_court } + } + scope:house_head_court = { add_courtier = root } + } + } + } +} + +# A claim is gained by a character +# root = the claimant +# scope:title = the title that is claimed +# scope:transfer_type = flag:inheritance or none +on_explicit_claim_gain = { + effect = { + if = { + limit = { + title:k_england.holder = root + } + title:k_england = { + update_dynamic_coa = yes + } + } + # Struggle Catalyst + if = { # FP2 + limit = { + NOT = { scope:transfer_type = flag:inheritance } + + root = { + any_character_struggle = { + is_struggle_type = iberian_struggle + involvement = involved + } + } + title:e_spain = { any_in_de_jure_hierarchy = { this = scope:title } } + } + root = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gain_claim_on_title_fp2 + CHAR = root + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gain_claim_on_title_fp2 + character = root + } + } + } + } + else_if = { # FP3 + limit = { + NOT = { scope:transfer_type = flag:inheritance } + + root = { + any_character_struggle = { + is_struggle_type = persian_struggle + involvement = involved + } + } + title:e_persia = { any_in_de_jure_hierarchy = { this = scope:title } } + } + root = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gain_claim_on_title_fp3 + CHAR = root + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gain_claim_on_title_fp3 + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = unrest_catalyst_gain_claim_on_title_fp3 } + } + } + } + } +} + +# A claim is lost by a character +# root = the claimant +# scope:title = the title that was claimed +on_explicit_claim_lost = { + effect = { + if = { + limit = { + title:k_england.holder = root + } + title:k_england = { + update_dynamic_coa = yes + } + } + } +} + +# A title change makes the character rank up in the landed tiers (eg Duke -> King) +# root = character ranking up +# scope:title = old primary title +on_rank_up = { # Will not fire during history execution or for dying characters + events = { + } + effect = { + if = { # ACH call to coronation reminder + limit = { + coronation_trigger = yes + NOT = { + has_game_rule = coronation_laws_off + } + is_ai = no + primary_title.tier >= tier_kingdom + has_realm_law = uncrowned + NOR = { + has_variable = crowned_king_var + has_variable = crowned_emperor_var + } + NOR = { + has_character_flag = had_coronation_reminder + any_sponsored_inspiration = { has_inspiration_type = smith_inspiration } + } + is_available_adult = yes + } + trigger_event = { + id = ach_yearly_events.1005 + months = 4 + } + } + #ACH new emperors losing their crowned status + else_if = { + limit = { + coronation_trigger = yes + NOR = { + has_game_rule = coronation_laws_no_imperial_uncrowned + has_game_rule = coronation_laws_off + has_character_flag = claimed_the_mandate_of_heaven + } + highest_held_title_tier >= tier_empire + exists = scope:title + scope:title = { + tier >= tier_kingdom + #Just double checking + tier < root.highest_held_title_tier + } + OR = { + has_realm_law = crowned_king + has_realm_law = crowned_emperor + has_variable = crowned_king_var + has_variable = crowned_emperor_var + } + } + if = { + limit = { + has_variable = crowned_emperor_var + } + remove_variable = crowned_emperor_var + } + if = { + limit = { + has_variable = crowned_king_var + } + remove_variable = crowned_king_var + } + add_realm_law_skip_effects = uncrowned + trigger_event = ach_yearly_events.1010 + } + if = { + limit = { is_landed = yes } + add_achievement_flag_effect = { FLAG = achievement_moving_up_in_the_world_flag } + } + if = { + limit = { + is_ai = no + is_landed = yes + highest_held_title_tier = tier_empire + } + add_achievement_global_variable_effect = { + VARIABLE = rags_to_riches_to_rags_to_riches_first_empire + VALUE = yes + } + } + if = { + limit = { + is_ai = no + is_landed = yes + highest_held_title_tier = tier_empire + exists = global_var:rags_to_riches_to_rags_to_riches_adventurer + } + add_achievement_global_variable_effect = { + VARIABLE = finished_rags_to_riches_to_rags_to_riches_achievement + VALUE = yes + } + } + update_embassies_effect = yes + every_ally = { + update_embassies_effect = yes + } + if = { + limit = { top_liege = this } + remove_variable = use_co_ruler_title + } + # Make a note of ranking up for stele purposes. + if = { + limit = { + # DLC check. + has_fp1_dlc_trigger = yes + # Is the culture eligible? + fp1_can_raise_stele_trigger = yes + # Aaaaand, for balance reasons, were they landed already? + exists = scope:title + } + set_variable = { + name = recent_rank_increase + value = root.primary_title + years = 5 + } + } + # Remove any rank-inappropriate modifiers (e.g., baron buffs). + remove_character_modifier = mandate_baronial_troops_trained_modifier + remove_character_modifier = mandate_baronial_troops_half_trained_modifier + + # Additional Flavor Title + additional_flavor_check_effect = yes + + #Admin kings becoming emperors need their MAA transferred to new primary title + if = { + limit = { + is_independent_ruler = yes + government_allows = administrative + scope:title ?= { + any_title_maa_regiment = { + count >= 1 + } + } + } + scope:title = { + transfer_title_maa_ownership = root.primary_title + } + } + + if = { + limit = { + is_independent_ruler = yes + government_has_flag = government_is_celestial + scope:title ?= { + tier >= tier_kingdom + has_custom_title_name = yes + } + primary_title = { + has_custom_title_name = no + } + } + scope:title = { + move_title_name_to = root.primary_title + reset_title_name = yes + } + } + if = { + limit = { + is_independent_ruler = yes + government_has_flag = government_is_celestial + highest_held_title_tier >= tier_kingdom + OR = { + primary_title ?= { + has_custom_title_name = no + } + primary_title.previous_holder.dynasty != root.dynasty + } + trigger_if = { + limit = { + tgp_capital_not_in_chinese_naming_region = yes + } + primary_title ?= title:h_china + } + } + if = { + limit = { + is_ai = no + } + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 1 # so the player gets to choose first + } + } + else = { + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 2 + } + } + } + else_if = { # Make sure non-Celestials get to rename/recolor china + limit = { + is_independent_ruler = yes + has_tgp_dlc_trigger = yes + NOT = { government_has_flag = government_is_celestial } + exists = var:claimed_mandate_var + primary_title ?= title:h_china + OR = { + primary_title ?= { + has_custom_title_name = no + } + primary_title.previous_holder.dynasty != root.dynasty + } + } + if = { + limit = { + is_ai = no + } + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 1 # so the player gets to choose first + } + } + else = { + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 2 + } + } + } + + # ACH - Remove Coronated laws when titles are passed onto a new character + coronation_reset_realm_law_effect = yes + + # TGP Japan handling for blocs + if = { + limit = { + this = top_liege + tgp_uses_house_blocs_trigger = yes + exists = house.house_confederation + } + if = { # Ensure top liege is house head, if not stealing from a player + limit = { + is_house_head = no + house.house_head = { is_ai = yes } + top_liege = house.house_head.top_liege + } + house = { set_house_head = prev } + } + if = { # Ensure independent rulers are in charge of their blocs + limit = { + is_house_head = yes + NOT = { house.house_confederation.leading_house = this.house } + } + house.house_confederation = { + tgp_set_house_bloc_leading_house_effect = { LEADER = root.house } + } + } + } + + # Ensure Ministers (or any landless rulers) do not have vassals + if = { + limit = { + is_landed = no + this != top_liege + } + save_scope_as = liege + create_title_and_vassal_change = { + type = appointment + save_scope_as = change + } + every_vassal = { + limit = { + is_landed = no + any_held_title = { is_noble_family_title = yes } + } + save_scope_as = vassal + change_liege = { + liege = scope:liege.top_liege + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + } +} + +# A title change makes the character rank down in the landed tiers (eg King -> Duke) +# root = character ranking down +# scope:title = old primary title +on_rank_down = { # Will not fire during history execution or for dying characters + events = { + } + effect = { + if = { + limit = { + NOR = { + has_trait = humble + has_trait = content + has_trait = generous + } + } + add_character_flag = { + flag = make_suicide_available + years = 5 + } + set_variable = { + name = rank_demoted + value = yes + } + } + update_embassies_effect = yes + every_ally = { + update_embassies_effect = yes + } + # Inform hostage havers + if = { + limit = { + any_home_court_hostage = { } + } + save_scope_as = home_court + every_home_court_hostage = { + save_scope_as = hostage + warden = { + save_scope_as = warden + trigger_event = { id = bp2_hostage_system.0410 days = 5 } + } + } + } + + # Additional Flavor Title + additional_flavor_check_effect = yes + + # ACH - Remove variables if they are going below certain ranks + coronation_reset_realm_law_variable_effect = yes + + # ACH - if you are below king tier, remove all oaths + if = { + limit = { + highest_held_title_tier < tier_kingdom + } + ach_remove_oaths_on_king_minus_effect = yes + } + } +} + +# A character gains a vassal +# root = character gaining vassal +# scope:vassal = vassal being gained +# scope:old_liege = the previous liege of the vassal. Might be the null character (vassal used to be a non-ruler or independent), so make sure to use "exists" checks where relevant +on_vassal_gained = { + events = { + realm_maintenance.1000 # Notify vassals of new liege + } + effect = { + #Nomadic Confederation members must be independent + if = { + limit = { + scope:vassal = { + is_confederation_member = yes + scope:vassal.confederation = { has_leading_house = no } + } + } + scope:vassal.confederation = { + remove_confederation_member = scope:vassal + } + } + # EP3 LANDLESS CANNOT HAVE VASSALS + if = { + limit = { has_any_landed_title_trigger = no } + save_scope_as = new_liege + if = { + limit = { top_liege != this } + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + add_claim_on_loss = no + } + change_liege = { + liege = scope:new_liege.liege + change = scope:change + } + resolve_title_and_vassal_change = scope:change + } + else = { + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + scope:vassal = { + becomes_independent = { change = scope:change } + } + resolve_title_and_vassal_change = scope:change + } + } + + # Additional Flavor Title + scope:vassal = { + additional_flavor_check_effect = yes + } + + # Destroy ceremonial titles of vassalized realms + if = { + limit = { + # The necessary checks are baked into the effect below + scope:vassal = { + any_held_title = { + OR = { + exists = var:ceremonial_title + exists = var:administrative_ui_special_title + } + } + } + } + # TGP end the ceremonial liege + tgp_destroy_ceremonial_throne_effect = yes + } + } +} + +# A vassal changes their liege +# root = vassal changing their status +# scope:old_liege = the previous liege of the vassal +# It is also fired for rulers gaining independence, those can be identified by checking current liege +on_vassal_change = { + effect = { + ### If a admin duke-tier character becomes the top-liege's direct vassal, ensure that they have a noble family title + if = { + limit = { + government_allows = administrative + is_house_head = yes + trigger_if = { + # This trigger is intentionally different from the similar effecy in on_title_gain up above. We want all direct vassals of the top liege to have a family title if they can + limit = { government_has_flag = government_has_county_tier_noble_families } + highest_held_title_tier >= tier_county + } + trigger_else = { highest_held_title_tier >= tier_duchy } + liege = { + top_liege = this + government_allows = administrative + } + NOR = { + any_held_title = { is_noble_family_title = yes } + house = { + any_house_member = { + any_held_title = { is_noble_family_title = yes } + } + } + } + } + create_noble_family_effect = { GOVERNMENT_GIVER = this } + domicile ?= { set_up_domicile_estate_effect = yes } + } + ### If an admin ruler becomes independent... + if = { + limit = { + liege = root # I.e. root is independent + government_has_flag = government_is_administrative + } + # And is not of a high enough rank, change government + if = { + limit = { + administrative_tier_allows_independence = no + } + admin_change_government_effect = yes + } + # If they can be independent, make sure they have a noble family title + else_if = { + limit = { + NOT = { + any_held_title = { + is_noble_family_title = yes + } + } + } + create_noble_family_effect = { GOVERNMENT_GIVER = this } + domicile ?= { set_up_domicile_estate_effect = yes } + } + } + ### Independent Celestial rulers who become direct vassals of a top liege adopt Military obligations if they have title troops - Everyone else will default to Standard. + if = { + limit = { + government_has_flag = government_is_celestial + scope:old_liege = this # I.e. they were independent + liege != this + liege = top_liege + primary_title = { + any_title_maa_regiment = { count >= 1 } + } + } + vassal_contract_set_obligation_level = { type = celestial_provinces level = 3 } + } + + ### If a minister becomes independent we destroy the ministry title + if = { + limit = { + # independent title + OR = { + liege ?= { tgp_has_access_to_ministry_trigger = no } + this = top_liege + } + + any_held_title = { + # has a ministry title that is not being swapped + OR = { + this = title:e_minister_chancellor + this = title:e_minister_censor + this = title:e_minister_grand_marshal + this = title:e_minister_of_personnel + this = title:e_minister_of_revenue + this = title:e_minister_of_rites + this = title:e_minister_of_war + this = title:e_minister_of_justice + this = title:e_minister_of_works + } + } + } + every_held_title = { + switch = { + trigger = this + title:e_minister_chancellor = { + root = { destroy_title = title:e_minister_chancellor } + } + title:e_minister_censor = { + root = { destroy_title = title:e_minister_censor } + } + title:e_minister_grand_marshal = { + root = { destroy_title = title:e_minister_grand_marshal } + } + title:e_minister_of_personnel = { + root = { destroy_title = title:e_minister_of_personnel } + } + title:e_minister_of_revenue = { + root = { destroy_title = title:e_minister_of_revenue } + } + title:e_minister_of_rites = { + root = { destroy_title = title:e_minister_of_rites } + } + title:e_minister_of_war = { + root = { destroy_title = title:e_minister_of_war } + } + title:e_minister_of_justice = { + root = { destroy_title = title:e_minister_of_justice } + } + title:e_minister_of_works = { + root = { destroy_title = title:e_minister_of_works } + } + } + } + } + # Make sure independent rulers and their vassals leave movements if they are part of the Dynastic Cycle + if = { + limit = { + exists = top_participant_group:dynastic_cycle + NOT = { + has_title = title:h_china + } + OR = { + liege = root + liege.top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + } + remove_variable = movement_member + every_vassal_or_below = { + remove_variable = movement_member + } + recalculate_participant_group = situation:dynastic_cycle + } + + # Additional Flavor Title + additional_flavor_check_effect = yes + + if = { + limit = { + # We have become independent! + NOT = { + scope:old_liege = root + } + liege = root + government_has_flag = government_is_celestial + highest_held_title_tier >= tier_kingdom + primary_title = { + has_custom_title_name = no # sanity check + } + OR = { + tgp_capital_not_in_chinese_naming_region = no + primary_title = title:h_china # failsafe, in case this somehow ends up here + } + } + if = { + limit = { + is_ai = no + } + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 1 # so the player gets to choose first + } + } + else = { + trigger_event = { + id = tgp_dynastic_cycle.9000 + days = 2 + } + } + } + if = { + limit = { + scope:old_liege = root + NOT = { + liege = root + } + primary_title ?= { + has_custom_title_name = yes + } + } + primary_title = { + reset_title_name = yes + } + } + + # Destroy ceremonial titles of vassalized realms + if = { + limit = { + # The necessary checks are baked into the effect below + highest_held_title_tier >= tier_empire + any_held_title = { + OR = { + exists = var:ceremonial_title + exists = var:administrative_ui_special_title + } + } + } + # TGP end the ceremonial liege + tgp_destroy_ceremonial_throne_effect = yes + if = { + limit = { has_trait = former_emperor } + remove_trait = former_emperor + } + } + + # Bloc + if = { + # Let code trigger this if this is due to succession + limit = { + scope:old_liege ?= { + is_alive = yes + } + } + tgp_liege_change_bloc_management_effect = { VASSAL = root } + } + } +} + +# A baron is found or created for a title, E.G., due to the player using the "Give to Low Noble" action +# No transfer type here; it's always a grant +# root = the baron +# scope:liege = the person who wanted them created +# scope:title = the barony +on_baron_found_or_created_for_title = { + effect = { + add_opinion = { + target = scope:liege + modifier = received_title_barony + } + } +} + +# Called when realm capital changes. It can be manual move, loss in conquest, move after inheritance, +# move when granted a better title, becoming landed for the first time +# root: New realm capital barony +# scope:old_capital - previous capital barony. Can be empty, can be owned by someone else +on_realm_capital_change = { + effect = { + holder ?= { + # Do we need to refresh their vizier's modifiers? + if = { + limit = { has_diarchy_parameter = diarchy_is_vizierate } + diarch = { + # What we're doing here is regenerating loc on the diarchs that might refer to a specific place which they no longer have access to. + ## This is gonna get real gross, folks, so my apologies. + if = { + limit = { has_character_modifier = vizier_extravagance_t1_treasure_modifier } + remove_character_modifier = vizier_extravagance_t1_treasure_modifier + add_character_modifier = { + modifier = vizier_extravagance_t1_treasure_modifier + desc = vizier_extravagance_t1_treasure_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t1_activities_modifier } + remove_character_modifier = vizier_extravagance_t1_activities_modifier + add_character_modifier = { + modifier = vizier_extravagance_t1_activities_modifier + desc = vizier_extravagance_t1_activities_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t1_property_modifier } + remove_character_modifier = vizier_extravagance_t1_property_modifier + add_character_modifier = { + modifier = vizier_extravagance_t1_property_modifier + desc = vizier_extravagance_t1_property_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t1_charity_modifier } + remove_character_modifier = vizier_extravagance_t1_charity_modifier + add_character_modifier = { + modifier = vizier_extravagance_t1_charity_modifier + desc = vizier_extravagance_t1_charity_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t2_treasure_modifier } + remove_character_modifier = vizier_extravagance_t2_treasure_modifier + add_character_modifier = { + modifier = vizier_extravagance_t2_treasure_modifier + desc = vizier_extravagance_t2_treasure_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t2_activities_modifier } + remove_character_modifier = vizier_extravagance_t2_activities_modifier + add_character_modifier = { + modifier = vizier_extravagance_t2_activities_modifier + desc = vizier_extravagance_t2_activities_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t2_property_modifier } + remove_character_modifier = vizier_extravagance_t2_property_modifier + add_character_modifier = { + modifier = vizier_extravagance_t2_property_modifier + desc = vizier_extravagance_t2_property_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t2_charity_modifier } + remove_character_modifier = vizier_extravagance_t2_charity_modifier + add_character_modifier = { + modifier = vizier_extravagance_t2_charity_modifier + desc = vizier_extravagance_t2_charity_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t3_treasure_modifier } + remove_character_modifier = vizier_extravagance_t3_treasure_modifier + add_character_modifier = { + modifier = vizier_extravagance_t3_treasure_modifier + desc = vizier_extravagance_t3_treasure_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t3_activities_modifier } + remove_character_modifier = vizier_extravagance_t3_activities_modifier + add_character_modifier = { + modifier = vizier_extravagance_t3_activities_modifier + desc = vizier_extravagance_t3_activities_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t3_property_modifier } + remove_character_modifier = vizier_extravagance_t3_property_modifier + add_character_modifier = { + modifier = vizier_extravagance_t3_property_modifier + desc = vizier_extravagance_t3_property_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t3_charity_modifier } + remove_character_modifier = vizier_extravagance_t3_charity_modifier + add_character_modifier = { + modifier = vizier_extravagance_t3_charity_modifier + desc = vizier_extravagance_t3_charity_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t4_treasure_modifier } + remove_character_modifier = vizier_extravagance_t4_treasure_modifier + add_character_modifier = { + modifier = vizier_extravagance_t4_treasure_modifier + desc = vizier_extravagance_t4_treasure_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t4_activities_modifier } + remove_character_modifier = vizier_extravagance_t4_activities_modifier + add_character_modifier = { + modifier = vizier_extravagance_t4_activities_modifier + desc = vizier_extravagance_t4_activities_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t4_property_modifier } + remove_character_modifier = vizier_extravagance_t4_property_modifier + add_character_modifier = { + modifier = vizier_extravagance_t4_property_modifier + desc = vizier_extravagance_t4_property_modifier_custom_desc.on_action + } + } + if = { + limit = { has_character_modifier = vizier_extravagance_t4_charity_modifier } + remove_character_modifier = vizier_extravagance_t4_charity_modifier + add_character_modifier = { + modifier = vizier_extravagance_t4_charity_modifier + desc = vizier_extravagance_t4_charity_modifier_custom_desc.on_action + } + } + } + } + } + } +} + +# Primary Title has changed +# root = character +# scope:previous_title = previous primary title held by character +# Not called if new primary title is the same as the previous primary title +on_primary_title_change = { +} diff --git a/common/on_action/travel_on_actions.txt b/common/on_action/travel_on_actions.txt new file mode 100644 index 00000000..62a56e79 --- /dev/null +++ b/common/on_action/travel_on_actions.txt @@ -0,0 +1,2005 @@ +# Arrival in any province during travel +on_travel_plan_movement = { + # It should be more likely to fire a danger event if it's valid for the given province + trigger = { + is_ruler = yes + is_adult = yes + } + + on_actions = { + travel_event_tombola + delay = { days = 1 } + travel_danger_events_on_action + delay = { days = 2 } + adventurer_talent_scouting_on_action + delay = { days = 3 } + adventurer_encourage_realtionships_on_action + migration_events_on_action + delay = { days = 1 } + } + + events = { + mpo_special_flavor_events.0001 + } + + # Increment the count of how many provinces the character has passed through + # Used for loc in the travel completion event + # Variable cleanup in the completion event (travel_completion_event.1000) + effect = { + # Wandering Lifestyle XP + wandering_lifestyle_exp_post_travel_effect = yes + # Increase xp for traveler trait + traveler_progress_point_gain_effect = { CHANGE = 1 RANDOM_CHANGE = 1 } + # Increment the count of how many provinces the character has passed through + # Used for loc in the travel completion event + # Variable cleanup in the completion event (travel_completion_event.1000) + current_travel_plan = { + if = { + limit = { exists = var:travel_plan_provinces_traversed } + change_variable = { + name = travel_plan_provinces_traversed + add = 1 + } + if = { + limit = { + var:travel_plan_provinces_traversed > 50 + exists = root.var:travel_plan_start_date + root = { + NOT = { has_trait = lifestyle_traveler } + } + } + root = { + trigger_event = travel_events.0050 + } + } + } + } + #Track encountered cultures for worldly pilgrimage rewards + if = { + limit = { + involved_activity ?= { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_worldly + } + } + is_on_a_pilgrimage_trigger = yes + } + pilgrimages_track_encountered_cultures_effect = yes + } + # We change your Legend if you travel through somewhere relevant + if = { + limit = { + current_travel_plan.current_location = { + has_any_point_of_interest_flag = yes + } + has_legend_chapter_trigger = { CHAPTER = conclusion } + NOT = { + promoted_legend ?= { + has_legend_chapter = { + name = conclusion + localization_key = legend_chapter_conclusion_point_of_interest + } + } + } + } + current_travel_plan.current_location.county = { save_scope_as = county } + random = { + chance = 50 + send_interface_toast = { + title = legend_chapter_change_toast + left_icon = root + right_icon = scope:county + promoted_legend = { + set_legend_chapter = { + name = conclusion + localization_key = legend_chapter_conclusion_point_of_interest + } + } + } + } + } + # Visited Points of Interest tracker, currently only for Adventurers + points_of_interest_tracker_effect = yes + + # If you have the cultural ambassador travel option, we create a list of all the cultures you visit along your travel path and give out a slight bump at the end of your travel to cultural acceptance between your culture and their cultures + current_travel_plan = { + # Create a list of all the cultures you visit so we can consistently check if we should add a new one. Never want to apply the cultural acceptance bonus twice + if = { + limit = { + has_travel_option = cultural_ambassador_option + exists = var:cultural_ambassador_scope + current_location = { is_sea_province = no } + } + if = { + limit = { + NOR = { + has_variable_list = cultural_ambassador_culture_list + current_location.culture = root.culture + current_location = { is_sea_province = yes } + } + } + add_to_variable_list = { + name = cultural_ambassador_culture_list + target = current_location.culture + } + } + else_if = { + limit = { + NOR = { + is_target_in_variable_list = { + name = cultural_ambassador_culture_list + target = current_location.culture + } + current_location.culture = root.culture + } + } + add_to_variable_list = { + name = cultural_ambassador_culture_list + target = current_location.culture + } + current_location = { + culture = { save_scope_as = current_culture } + } + var:cultural_ambassador_scope = { save_scope_as = cultural_ambassador } + root = { + send_interface_toast = { + type = event_toast_effect_good + title = cultural_ambassador_toast.t + left_icon = scope:cultural_ambassador + scope:current_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_cultural_acceptance_gain + desc = cultural_ambassador_cultural_acceptance_gain_desc + } + } + } + } + } + } + } + # Achievements. + if = { + limit = { is_ai = no } + ep2_im_in_my_elements_terrain_grabber_effect = yes + } + if = { + limit = { + is_hostage_warden = yes + any_warden_hostage = { + exists = location + exists = home_court.location + exists = root.location + location = home_court.location + location = root.location + } + } + trigger_event = { + id = bp2_yearly.6120 + days = 2 + } + } + #trigger contract completion event, if you have a contract with this location as contract destination + if = { + limit = { + OR = { has_government = landless_adventurer_government has_government = landless_minority_government } + any_character_active_contract = { + var:task_contract_destination ?= root.current_travel_plan.current_location + trigger_if = { + limit = { exists = var:task_contract_object } + var:task_contract_object = { + current_travel_plan ?= { + travel_plan_owner = root + } + } + } + } + } + every_character_active_contract = { + limit = { + var:task_contract_destination ?= root.current_travel_plan.current_location + trigger_if = { + limit = { exists = var:task_contract_object } + var:task_contract_object = { + current_travel_plan ?= { + travel_plan_owner = root + } + } + } + } + save_scope_as = task_contract + if = { + limit = { + ep3_transport_contract_trigger = yes + } + task_contract_taker = { + trigger_event = ep3_contract_event.0011 + } + } + else_if = { + limit = { + has_task_contract_type = laamp_help_increase_control_contract + } + task_contract_taker = { + trigger_event = ep3_contract_event.0093 + } + } + } + } + + #Surveyor MAA Mustering + surveyor_perk_mustering_effect = yes + + #Charting the Realm Perk counter for mapmaking + charting_the_realm_perk_effect = yes + + # Wanderer Journey Focus + if = { + limit = { + has_focus = wanderer_journey_focus + } + add_stress = -2 + } + # Wayfarer Fame + if = { + limit = { + has_perk = far_and_wide_perk + } + add_prestige_experience = 10 + } + # Wayfarer Popularity + of_the_people_effect = yes + # Voyager Opinion + voyager_gracious_host_impeccable_guest_effect = yes + #Tutor Child Travel Option + surveyor_tutor_child_effect = yes + reminiscing_event_effect = yes + + # General laamp effects. + if = { + limit = { + current_travel_plan = { is_travel_with_domicile = yes } + } + # Trigger interface alert if provisions are critically low + root = { + if = { + limit = { + domicile = { domicile_uses_provisions = yes } + domicile.provisions < provisions_threshold_critical_low_value + NOT = { has_character_flag = notified_of_low_provisions } + } + send_interface_message = { + type = danger_landless_adventurer_bad_with_text + title = critically_low_provisions_alert + left_icon = root + # Add a small cooldown, or it will trigger for every province you enter! + add_character_flag = { + flag = notified_of_low_provisions + years = 1 + } + desc = critically_low_provisions_alert_desc + } + } + } + # Trigger the low provisions events if appropriate. + trigger_event = { on_action = travel_laamps_provisions_on_action } + # Small chance of seeing contracts on the road as you go. + if = { + limit = { + is_ai = no + location = { is_sea_province = no } + } + random = { + chance = 5 + save_scope_value_as = { + name = toggle_distance_ignore + value = yes + } + populate_location_with_special_contracts_effect = { + AREA_CHAR = location.county.holder + AMOUNT = 1 + } + } + } + # Clean up old contracts after you. + if = { + limit = { is_ai = no } + save_scope_as = char_temp + every_character_task_contract = { + limit = { + NOR = { + has_variable = retain_despite_distance + save_temporary_scope_as = contract_temp + scope:char_temp = { + any_character_active_contract = { this = scope:contract_temp } + } + } + "task_contract_location.squared_distance(scope:char_temp.location)" > define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + invalidate_contract = yes + } + } + } + if = { + limit = { + current_travel_plan ?= { has_travel_option = adventurers_make_local_deals_option } + NOT = { + is_target_in_variable_list = { + name = haggle_provinces + target = root.current_travel_plan.current_location + } + } + root.current_travel_plan.current_location.available_loot > 0 + } + add_gold = adventurers_make_local_deals_option_value + add_to_variable_list = { + name = haggle_provinces + target = root.current_travel_plan.current_location + } + } + if = { + limit = { + current_travel_plan ?= { has_travel_option = adventurers_search_for_secrets_option } + root.current_travel_plan.current_location = { + any_character_in_location = { + NOR = { + this = root + is_courtier_of = root + } + any_secret = { + NOT = { is_known_by = root } + is_blackmailable_secret_trigger = { + PARTICIPANT = prev + BLACKMAILER = root + } + } + } + } + } + random = { + chance = root.intrigue + root.current_travel_plan.current_location = { + random_character_in_location = { + limit = { + NOR = { + this = root + is_courtier_of = root + } + any_secret = { + NOT = { is_known_by = root } + is_blackmailable_secret_trigger = { + PARTICIPANT = prev + BLACKMAILER = root + } + } + } + random_secret = { + limit = { + NOT = { is_known_by = root } + is_blackmailable_secret_trigger = { + PARTICIPANT = prev + BLACKMAILER = root + } + } + save_scope_as = secret_target + } + save_scope_as = secret_target_holder + } + } + send_interface_message = { + type = secret_discovered_message + title = adventurers_search_for_secrets_option.title + left_icon = scope:secret_target_holder + scope:secret_target = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + } + } + } + if = { + limit = { + current_travel_plan ?= { has_travel_option = adventurers_proselytize_zealously_option } + any_pool_character = { + province = root.current_travel_plan.current_location + is_physically_able_adult = yes + NOR = { + faith = root.faith + has_relation_rival = root + has_character_flag = ai_will_not_convert + has_trait = zealous + } + OR = { + is_pool_character = yes + is_pool_guest = yes + } + } + } + random = { + chance = root.learning + random_pool_character = { + province = root.current_travel_plan.current_location + limit = { + is_physically_able_adult = yes + NOR = { + faith = root.faith + has_relation_rival = root + has_character_flag = ai_will_not_convert + has_trait = zealous + } + OR = { + is_pool_character = yes + is_pool_guest = yes + } + } + save_scope_as = wanderer_to_convert + } + send_interface_message = { + type = send_interface_message_good + title = adventurers_proselytize_zealously_option.title + left_icon = scope:wanderer_to_convert + add_piety = miniscule_piety_value + scope:wanderer_to_convert = { + set_character_faith = root.faith + } + } + } + } + if = { + limit = { + current_travel_plan ?= { has_travel_option = adventurers_gather_inspiration_option } + any_courtier = { + is_physically_able_ai_adult = yes + NOT = { exists = inspiration } + } + } + random = { + chance = { + value = root.stewardship + divide = 6 + min = 1 + } + random_courtier = { + limit = { + is_physically_able_ai_adult = yes + NOT = { exists = inspiration } + } + save_scope_as = inspired_follower + grant_inspiration_to_character_no_court_artifacts_effect = { CHARACTER = this } + } + send_interface_message = { + type = send_interface_message_good + title = adventurers_gather_inspiration_option.title + left_icon = scope:inspired_follower + scope:inspired_follower = { + custom_tooltip = { + text = adventurers_gather_inspiration_option.effect + } + } + } + } + } + if = { + limit = { + has_perk = church_and_state_perk + has_government = landless_adventurer_government + location = { has_holding_type = church_holding } + } + add_piety = miniscule_piety_gain + } + # laamp_base_1041/Ambush Travellers task contract minigame. + current_travel_plan ?= { + if = { + limit = { has_variable = activate_laamp_base_1041_logic } + travel_plan_owner.var:laamp_base_1041_travel_plan_contract_storage = { + if = { + limit = { var:event_ratio_tracker >= 1 } + increment_variable_effect = { + VAR = event_ratio_tracker + VAL = -1 + } + } + else_if = { + limit = { var:encounters_tally < var:encounters_max } + root = { trigger_event = laamp_base_contract_schemes.1782 } + set_variable = { + name = event_ratio_tracker + value = var:event_ratio + } + increment_variable_effect = { + VAR = encounters_tally + VAL = 1 + } + } + } + } + } + #Special raiding migration event option + if = { + limit = { + location ?= { + has_holding = yes + } + is_migrating = yes + has_character_flag = migration_raiding_flag + location.county.holder = { + NOR = { + has_relation_friend = root + has_relation_best_friend = root + root = { + is_tributary_of = prev + } + is_vassal_of = root + root = { + is_vassal_of = prev + } + is_allied_to = root + } + } + } + location.county.holder = { + save_scope_as = local_ruler + } + trigger_event = migration_events.1051 + } + } +} + +travel_danger_events_on_action = { + trigger = { + is_migrating = no # No Danger events while migrating + exists = current_travel_plan + } + random_events = { + chance_of_no_event = { + value = { + add = 100 + if = { + limit = { + exists = root.current_travel_plan + exists = root.location + } + subtract = root.current_travel_plan.current_danger_value + add = root.current_travel_plan.travel_safety + } + } + max = { + value = 100 + subtract = define:NTravel|TRAVEL_DANGER_MINIMUM + } + } + 10 = 0 + 100 = travel_danger_events.1000 # Danger! Hills Terrain + 100 = travel_danger_events.1002 # Danger! Mountain Terrain + 100 = travel_danger_events.1003 # Danger! Wetlands + 100 = travel_danger_events.1006 # Danger! Forest/Taiga + 100 = travel_danger_events.1007 # Danger! Desert/Desert Mountains + 100 = travel_danger_events.1008 # Danger! Occupied Territory + 100 = travel_danger_events.1011 # Danger! Winter - an entourage member suffered a frostbite + 100 = travel_danger_events.1012 # Danger! An entourage member is trying to eat a poisonous plant + 100 = travel_danger_events.1013 # Danger! Runaway entourage member + 100 = travel_danger_events.2000 # Danger! Jungle! + 100 = travel_danger_events.2001 # Danger! Flood! + 100 = travel_danger_events.3000 # Danger! Mountain/Desert Mountain - Somebody falls from the trail + 100 = travel_danger_events.3001 # Danger! Mountain/Desert Mountain - Winter present - Avalanche! + 100 = travel_danger_events.3003 # Danger! Snowbound + 100 = travel_danger_events.3004 # Danger! Sea - Ripped sails + 100 = travel_danger_events.3005 # Danger! Hills - Brushfire + 250 = epidemic_events.3000 # Danger! You travel through an infected province + 250 = epidemic_events.3010 # Danger! You travel through an infected province and you may get infected + 100 = travel_danger_events.4000 # Danger! Sea - Someone falls overboard + 100 = travel_danger_events.4010 # Danger! Illness - an entourage member falls ill + 100 = travel_danger_events.9000 # Danger! Wetlands, Floodplains, Forest, Jungle: Blood-sucking Insect Swarm + 100 = travel_danger_events.9010 # Danger! All terrains: Wagon wheel breaks + 25 = travel_danger_events.9020 # Danger! Sea, Desert, War: Emaciated + 250 = travel_danger_events.6000 # Danger! Forest/jungle - beast attacks + 250 = travel_danger_events.6010 # Danger! Siege - deserter bandits + 250 = travel_danger_events.6011 # Danger! Battle - deserter bandits + 250 = travel_danger_events.6012 # Danger! Army - deserter bandits + 250 = travel_danger_events.6013 # Danger! Occupied - deserter bandits + 10 = travel_danger_events.6020 # Danger! Sea - everyone dies + 100 = travel_danger_events.6030 # Danger! Spoiled food + 100 = travel_danger_events.6040 # Danger! Sickness + 100 = travel_events.1003 # Danger! Bandit attack + 100 = travel_events.1005 # Danger! Artifact washes overboard + 100 = travel_events.3070 # Danger! Bandits on a bridge + 100 = travel_events.3100 #Danger! Steppe - Feeble mounts + 100 = travel_events.3120 #Danger! Taiga/Jungle/Forest - Woods catch fire + 50 = travel_events.3130 #Danger! Rival - Rival sends professional assassin to get you + 100 = travel_events.3140 #Danger! Army in province - Army in province tries to capture you + 100 = travel_events.3160 #Danger! Forest/Taiga/Battle in province - Crows find you + 100 = travel_events.4007 # Danger! A storm at sea + 100 = travel_events.4016 # Danger! You experience heatstroke + 100 = travel_events.2016 # Danger! Visit a hill farm - Bull rush! (moved here because of extreme danger) + 100 = travel_danger_events.5000 # Danger! Your entourage members have a dispute + 100 = travel_danger_events.5010 # Danger! pariah event + 100 = travel_danger_events.7000 # Danger! an entourage member is bitten by a snake + #Bilateral Ruler events + 100 = travel_events.2106 # Danger! You get attacked while passing through a capital province; will the Province Owner help you? + 100 = travel_events.4020 # Danger! Strong believers harass your caravan and demand payment + 100 = travel_events.4003 # You encounter vikings at sea + 250 = bp1_yearly.0100 # You are caught in a storm and a rival's property is the only shelter + 100 = travel_danger_events.1020 # Danger! Your horse is stuck and can die + + #Specific Falling Ill events during pilgrimage + 25 = pilgrimage.2008 # Fall ill + 50 = pilgrimage.2009 # Develop pneumonia + + 200 = natural_disaster_flavor_events.0001 # As Scavengers Gather - Search the ruins for loot or survivors + 200 = natural_disaster_flavor_events.0010 # Desperate Souls - Decide how to deal with a throng of paupers + + # Laamp Travel Danger Events + 350 = ep3_laamp_flavour_ewan.4001 # Bandits! - Bandit raid. + 350 = ep3_laamp_flavour_ewan.4021 # Parched - Difficulty finding water. + 200 = ep3_laamp_flavour_ewan.4031 # Sickness in the Herd - Pack animals are sick or wounded. + 100 = ep3_laamp_flavour_ewan.4041 # Worn Down - Bad weather destroys wagons or pack animals. + 100 = ep3_laamp_flavour_ewan.4051 # Supplies Unaccounted For - Supplies go missing in large armies. + 100 = ep3_laamp_flavour_ewan.4061 # Eyes in the Night - local predator picking off people each evening. + 350 = ep3_laamp_flavour_ewan.4071 # Slavers - bastards try to kidnap people from the edges of your train. + 350 = ep3_laamp_flavour_ewan.4081 # Born of Desperation - hungry locals swarm at you, searching for food. + 350 = ep3_laamp_flavour_ewan.4091 # Night Attack - unknown group assaults your camp one evening. + } +} + +travel_events_on_action = { + trigger = { + NOT = { has_character_flag = in_pilgrimage_event_chain } + #Barons don't need travel events - to avoid them bloating their court when getting add_courtier events + highest_held_title_tier >= tier_county + } + + effect = { + #Invalidate Tribute Missions + tribute_mission_invalidation_effect = yes + # Invalidate travelling hostages + hostage_travel_invalidation_effect = yes + # Invalidate travelling wards + ward_travel_invalidation_effect = yes + # Invalidate travelling guardians + guardian_travel_invalidation_effect = yes + } + + random_events = { + chance_of_no_event = { + value = 80 + if = { + limit = { + is_ai = yes + } + add = 19 # Not very important that AI's get these + } + if = { # Less regular travel events when you're migrating + limit = { + is_migrating = yes + } + add = 15 + } + } + 100 = 0 + 5 = travel_events.1000 #Peasant with no shoes + 10 = travel_events.2000 #Good omen? - Encounter a duck + 100 = travel_events.2002 #Crossing an ant path - Ignore or don't ignore your guide + 100 = travel_events.2003 #Visit the local military place (barrack/military camp/regiment grounds) - Try to improve your martial + 100 = travel_events.2004 #Visit (your own) crappy pasture - Try to address or ignore the issues + 100 = travel_events.2005 #Visit another ruler's pasture - Give advice or sabotage the pasture + 100 = travel_events.2006 #Visit a camel farm - Get defiled by a camel + 100 = travel_events.2007 #Visit an elephant pen - Train with the elephants + 150 = travel_events.2008 #Visit an elephant pen, your rival is on site - Attempt to crush your rival? + 150 = travel_events.2010 #Visit an orchard - Kid falls out of tree + 100 = travel_events.2012 #Visit a plantation - Fire! + 250 = travel_events.2013 #Visit a hillfort - Train to gain military skillz + 300 = travel_events.2014 #Visit a logging camp - Burn off some stress chopping wood + 100 = travel_events.2015 #Visit a peat quarry - Try not to fall asleep + 100 = travel_events.2017 #Visit a 'haunted' mansion (farm estate) - Enter at your own peril + 150 = travel_events.2025 #Visit your own farm estate - Tax or don't tax your hospitable subject + 150 = travel_events.2026 #Visit someone else's farm estate - Pay or don't pay for the hospitality + 150 = travel_events.2027 #Visit your own quarry - Encounter hungry workers + 150 = travel_events.2028 #Visit someone else's quarry - Encounter an architect + 100 = travel_events.2029 #Visit a cereal field - Encounter a heathen + 150 = travel_events.2031 #Visit another cereal field - Encounter a gardener + 150 = travel_events.2032 #Visit a ramparts/forest fort - Encounter a herbalist/physician + 100 = travel_events.2033 #Visit some hunting grounds - Your entourage prisoner escapes. Manhunt? + 100 = travel_events.2034 #Your escaped manhunted prisoner seeks revenge + 100 = travel_events.2036 #Your escaped prisoner is... pretty peaceful actually + 100 = travel_events.2037 #Visit some hunting grounds - Sadistic province owner is manhunting + 150 = travel_events.2038 #Visit some hunting grounds - Friendly competition with an entourage member + 100 = travel_events.2200 #A local knight wants to fight someone + 100 = travel_events.3000 #Rumours about grotesque creatures + 100 = travel_events.3010 #Lost pet + 200 = travel_events.3030 #Infatuated knight + 150 = travel_events.3040 #Bishop gets religious doubts + 100 = travel_events.3150 #Rival in your entourage plots against you + 100 = travel_events.3060 #Hermit + 100 = travel_events.3080 #Knight errant + 150 = travel_events.3090 #Temple visiting + 100 = travel_events.4000 # Encounter a mystic on the road + 100 = travel_events.4001 # Encounter an adoring fan + 100 = travel_events.4002 # You determine that the women/men of X region are real pretty + 100 = travel_events.4004 # Fishermen at sea! + 100 = travel_events.4005 # Encounter a caravan of merchants at sea + 100 = travel_events.4006 # A local bird lands on your boat and eats some supplies + 100 = travel_events.4008 # Shipwreck! + 15 = travel_events.4012 # You are being followed by a feral child + 100 = travel_events.4015 # Asking for directions from a diff. language character + 100 = travel_events.4017 # Swords for hire! + 100 = travel_events.4018 # A mendicant preacher! + 100 = travel_events.4019 # You pass by a peasant street food place, demand to sample some + 100 = travel_events.4021 # You witness a human sacrifice! + 100 = travel_events.4022 # You witness some tree worship in a Sanctity of Nature province + 100 = travel_events.4023 # Prester John! You find a same-religion ruler in a faraway land + 100 = travel_events.4028 # You come across a runestone! + 100 = travel_events.4029 # You come across dimwit strung up on a post + 100 = travel_events.4031 # You come across a knight stuck in his armour + 100 = travel_events.4032 # You come across a noble being assaulted by a random animal + 100 = travel_events.4033 # A witch who strangely isn't being burned + 100 = travel_events.4035 # You are a witch and you're being harassed by locals + 100 = travel_events.4036 # Caravaneers want to sell you some cool stuff + 100 = travel_events.4037 # You enter a place that is syncretic with your faith + 100 = travel_events.4038 # You enter a province which your faith is syncretic with + 100 = travel_events.4039 # You enter a ritual hospitality province and are offered a rest + 100 = travel_events.4040 # You meet a xenophile character who wants to learn about your culture + 100 = tour_travel.3010 # Local saint shrine + 100 = travel_events.4050 # hostage/ward/different culture courtier acts as cultural mediator + 200 = hunt.8200 # Falconry Practice + 500 = hunt.8210 #Pursued by a Shrine Maiden + #Cultural Tradition events + 100 = travel_events.1200 #Friendly People + 100 = travel_events.1201 #Chivalry + 100 = travel_events.1202 #Hard workers + 100 = travel_events.1203 #Loyal subjects + 100 = travel_events.1204 #Pacifism + 100 = travel_events.1205 #Spartan + 100 = travel_events.1206 #Hunters + 100 = travel_events.1207 #Vegetarians + 100 = travel_events.1208 #Seafaring + 100 = travel_events.1209 #Storytellers + 100 = travel_events.1210 #Music theory + 100 = travel_events.1211 #Poetry + 100 = travel_events.1212 #Fishermen + 100 = travel_events.1213 #Mendicant mystic + 100 = travel_events.1214 #Warrior culture + 100 = travel_events.1215 #Martial admiration + 100 = travel_events.1216 #Philosopher + + #Bilateral Ruler events + 100 = travel_events.2100 #Someone is trying to assassinate a Target Ruler (local ruler or other travelling ruler)! + + #Mystical animal story + 300 = hunt_mystical_animal.1002 + + # BP3 Travel Events + 150 = travel_events_oltner_2.1000 # Mirage of the Cultivated Sands + 150 = travel_events_oltner_2.1010 # Hospitable Hospices + 150 = travel_events_oltner_2.1020 # The Camel Herder's Feast + 150 = travel_events_oltner_2.1030 # The Caravan's Passage + 150 = travel_events_oltner_2.1040 # Oasis of Tranquility + 150 = travel_events_oltner_2.1050 # Equine Emissaries + 150 = travel_events_oltner_2.1060 # Steward of the Stables + 150 = travel_events_oltner_2.1070 # The Horse Healer + 150 = travel_events_oltner_2.1080 # Pungent Prodigy + 150 = travel_events_oltner_2.1090 # Sentry of the Silent Dunes + 150 = travel_events_oltner_2.1100 # Bovine Bounty + 150 = travel_events_oltner_2.1110 # The Smith's Clangor + 150 = travel_events_oltner_2.1120 # A Broken Blacksmith + 150 = travel_events_oltner_2.1130 # The Sentinel Hills + 150 = travel_events_oltner_2.1140 # Diminutive Defenders + 150 = travel_events_oltner_2.1150 # The Echo of Horns + 150 = travel_events_oltner_2.1160 # Trailside Bond + 150 = travel_events_oltner_2.1170 # Path of Rivalry + 200 = travel_events_oltner_2.1180 # Moonlit Confessions + 150 = travel_events_oltner_2.1190 # A Stolen Keepsake + 150 = travel_events_oltner_2.1200 # Guardian Angel + 200 = travel_events_oltner_2.1210 # Nighttime Serenade + 100 = travel_events_oltner_2.1220 # Rivals' End + 100 = travel_events_oltner_2.1240 # The Travelling Troupe + 50 = wanderer_lifestyle_events.35 # Dreams of Distant Lands - Followup + 150 = travel_events_bp3.1 # Seasons of Change + 150 = travel_events_bp3.5 # Caught Outside + 150 = travel_events_bp3.10 # The Pilgrims to + 150 = travel_events_bp3.15 # The Songs of + 50 = travel_events_bp3.20 # The Guild + 150 = travel_events_bp3.25 # The Toils of War + 150 = travel_events_bp3.30 # The Mercenaries of + 150 = travel_events_bp3.35 # The Teacher of Knights + 150 = travel_events_bp3.40 # The Local Champion + 150 = travel_events_bp3.45 # The Wandering Knight + 150 = travel_events_bp3.50 # A Band of Two + 150 = travel_events_bp3.55 # Traveling Traders + 150 = travel_events_bp3.60 # A Small Deal + 150 = travel_events_bp3.65 # Purse Pursuit + 25 = travel_events_bp3.70 # Festival + 150 = travel_events_bp3.75 # Dreams Brewing + 100 = travel_events_bp3.80 # A Life of Service + 150 = travel_events_bp3.85 # Brewers of Fame + 150 = travel_events_bp3.90 # Patron of + 150 = travel_events_bp3.95 # A Pilgrim's Tale + 150 = travel_events_bp3.100 # Land of Milk and... Fish? + 150 = travel_events_bp3.105 # A Woman/Man of Unusual Skills + 150 = travel_events_bp3.110 # Heart-to-Heart + 150 = travel_events_bp3.115 # Night by the Campfire + 75 = travel_events_bp3.120 # The Wrecked Boat + + #FP3 Travelling through foreign faith land: + 300 = travel_events_fp3.0010 #Dying Embers + 300 = travel_events_fp3.0030 #A Feast for Falcons + 200 = fp3_scholarship.1010 # The Last Magi + + #FP3 Travel Events + 150 = travel_events_fp3.0020 #Qanat Diving + 200 = travel_events_fp3.0040 #Mare's Milk + 150 = travel_events_fp3.0050 #Tomb Raiders + + #CE1 Travel Events + 100 = legend_spread_events.8010 #Someone challenges you to a duel + 100 = travel_events.5001 #You come across a local legend + + #EP3 Travel Events + 1000 = ep3_travel_events.3000 #Waters of the Jordan + 300 = ep3_travel_events.3002 #Where Armenians Govern + 200 = ep3_travel_events.3010 #Anatolian Silence + 400 = ep3_emperor_yearly.2180 #Pilgrims come across an estate + 200 = court_events.3071 #Hidden - trigger court event for local ruler + + # LAAMP travel events + 100 = ep3_laamp_flavor.0001 # Carrion Eaters + 300 = ep3_laamp_flavor.0060 # Dead Weight + 200 = ep3_travel_events.8000 #To Belong Somewhere + 200 = ep3_travel_events.8010 #Won't Be Missed + 1000 = ep3_story_cycle_violet_poet.1000 #Nature's Bounty + + #MPO Travel Events + 100 = mpo_events_tova.0003 #A Jest Too Far + 100 = mpo_events_tova.0004 #Upset Rank + 100 = mpo_events_tova.0005 #Unhappy Soldiers + 100 = travel_events_mpo.0001 #You spot eagles circling the sky + 100 = travel_events_mpo.0010 # You encounter a muslim trader, riding a white camel + 100 = mpo_events_anna.0015 #A Morsel of Meat - choose the fate of a fawn stuck in a trap + 100 = mpo_events_anna.0020 #Race Against Time - encounter a wounded messenger + 100 = mpo_events_anna.0025 #Familiar Tunes - encounter with a performer + + #TGP Travel Events - China + 100 = tgp_travel_events.0025 + 100 = tgp_travel_events.0030 + 100 = tgp_travel_events.0035 + 100 = tgp_travel_events.0040 + 100 = tgp_travel_events.0045 + } +} + +migration_events_on_action = { + trigger = { + is_migrating = yes + } + + effect = { + # Invalidate travelling hostages + hostage_travel_invalidation_effect = yes + # Invalidate travelling wards + ward_travel_invalidation_effect = yes + # Invalidate travelling guardians + guardian_travel_invalidation_effect = yes + } + + random_events = { + chance_of_no_event = { + value = 80 + if = { + limit = { + is_ai = yes + } + add = 19 # Not very important that AI's get these + } + } + 200 = 0 + 100 = migration_events.1000 #happened upon a nice spot... to steal from + 100 = migration_events.1010 #Wife wants you to travel in the yurt wagon + 50 = migration_events.1020 #Family member wants to take land from local herder + 50 = migration_events.1030 #Your herds can't find good grazing land + 100 = migration_events.1040 #Local ruler offers you a meal and a gift + 50 = migration_events.1050 #Your warriors raid a settlement your people pass + 50 = migration_events.1060 #The going is slow and your warriors want to ride on ahead + 100 = mpo_migration_travel_events.0001 # A ruler offers herd + 100 = mpo_migration_travel_events.0010 # You decide to give some herd away + 100 = mpo_migration_travel_events.0020 # Your migration target has low fertility + 100 = mpo_migration_travel_events.0040 # Herd must cross a river + 100 = mpo_migration_travel_events.0050 # A courtier falls in love and wants to stay behind + 20 = mpo_migration_travel_events.0030 # Danger! Herd is sick + 20 = mpo_migration_travel_events.0060 # Danger! Crazy horse + } +} + +travel_event_tombola = { + trigger = { + highest_held_title_tier >= tier_county + } + random_on_action = { + chance_of_no_event = { + value = 0 + if = { + limit = { + is_ai = yes + highest_held_title_tier >= tier_kingdom + } + add = 30 # No need to waste performance here + } + else_if = { + limit = { + is_ai = yes + highest_held_title_tier >= tier_duchy + } + add = 70 # No need to waste performance here + } + else_if = { + limit = { + is_ai = yes + } + add = 95 # AI counts aren't particularly important + } + } + 1 = travel_events_on_action + 2 = on_tour_travel + 2 = pilgrimage_journey_events + 2 = hajj_journey_events + } +} + +# Arrival in a destination province during travel (a travel plan can have multiple sequential destinations) +on_travel_plan_arrival = { + trigger = { + NOR = { + AND = { + #Block these from popping when arriving at the pilgrimage destination + involved_activity ?= { has_activity_type = activity_pilgrimage } + root.location = involved_activity.activity_location + } + has_character_flag = in_pilgrimage_event_chain + } + } + random_events = { + 100 = 0 + 100 = travel_events.3020 #A warm welcome + } + effect = { + # Achievements. + if = { + limit = { is_ai = no } + ep2_im_in_my_elements_terrain_grabber_effect = yes + } + #trigger contract completion event, if you have a contract with this location as contract destination + if = { + limit = { + has_government = landless_adventurer_government + any_character_active_contract = { + var:task_contract_destination ?= root.current_travel_plan.current_location + trigger_if = { + limit = { exists = var:task_contract_object } + var:task_contract_object = { + current_travel_plan ?= { + travel_plan_owner = root + } + } + } + } + } + every_character_active_contract = { + limit = { + var:task_contract_destination ?= root.current_travel_plan.current_location + trigger_if = { + limit = { exists = var:task_contract_object } + var:task_contract_object = { + current_travel_plan ?= { + travel_plan_owner = root + } + } + } + } + save_scope_as = task_contract + if = { + limit = { + ep3_transport_contract_trigger = yes + } + task_contract_taker = { + trigger_event = ep3_contract_event.0011 + } + } + else_if = { + limit = { + root = { + any_character_active_contract = { + has_task_contract_type = laamp_help_increase_control_contract + } + } + } + task_contract_taker = { + trigger_event = ep3_contract_event.0093 + } + } + } + } + + voyager_souvenirs_aplenty_effect = yes + reminiscing_event_effect = yes + + # Visited Points of Interest tracker, currently only for Adventurers + points_of_interest_tracker_effect = yes + } +} + +# Starting a travel plan (starting to travel to the first destination) +on_travel_plan_start = { + trigger = { + OR = { + is_ruler = yes + AND = { + is_playable_character = no + involved_activity ?= { has_activity_type = activity_playdate } + } + } + NOT = { has_variable = recently_invalidated_hostage } + } + effect = { + if = { + limit = { + has_character_modifier = isolating_modifier + } + remove_character_modifier = isolating_modifier + if = { + limit = { + has_variable_list = isolating_relatives + } + every_in_list = { + variable = isolating_relatives + limit = { is_alive = yes } + remove_character_modifier = isolating_modifier + remove_character_flag = blocked_from_leaving + } + clear_variable_list = isolating_relatives + } + } + if = { + limit = { is_ruler = yes } + set_variable = { + name = travel_plan_start_date + value = current_date + } + current_travel_plan = { + set_variable = { + name = travel_plan_start_date + value = current_date + } + set_variable = { + name = travel_plan_provinces_traversed + value = 1 + } + } + # Add Court Physician and Bodyguard if they aren't already in the entourage + if = { + limit = { + employs_court_position = court_physician_court_position + current_travel_plan = { + any_entourage_character = { + NOT = { has_court_position = court_physician_court_position } + } + } + any_court_position_holder = { + type = court_physician_court_position + is_available = yes + is_travel_entourage_character = no + } + } + random_court_position_holder = { + type = court_physician_court_position + limit = { + is_available = yes + is_travel_entourage_character = no + } + save_scope_as = court_phys + } + current_travel_plan = { + add_companion = scope:court_phys + } + } + if = { + limit = { + employs_court_position = bodyguard_court_position + current_travel_plan = { + any_entourage_character = { + NOT = { has_court_position = bodyguard_court_position } + } + } + any_court_position_holder = { + type = bodyguard_court_position + is_available = yes + } + } + random_court_position_holder = { + type = bodyguard_court_position + limit = { + is_available = yes + is_travel_entourage_character = no + } + save_scope_as = bodyguard + } + current_travel_plan = { + add_companion = scope:bodyguard + } + } + if = { + limit = { + employs_court_position = akolouthos_court_position + current_travel_plan = { + any_entourage_character = { + NOT = { has_court_position = akolouthos_court_position } + } + } + any_court_position_holder = { + type = akolouthos_court_position + is_available = yes + is_travel_entourage_character = no + } + } + random_court_position_holder = { + type = akolouthos_court_position + limit = { + is_available = yes + is_travel_entourage_character = no + } + save_scope_as = akolouthos + } + current_travel_plan = { + add_companion = scope:akolouthos + } + } + # Achievements. + ## I'm in my Element(s) + if = { + limit = { is_ai = no } + # Reset our prior list. + clear_variable_list = ep2_im_in_my_elements_achievement_terrain_list + ep2_im_in_my_elements_terrain_grabber_effect = yes + } + } + else = { + if = { + limit = { + any_parent = { + is_alive = yes + is_ai = no + location = root.location + this != root.involved_activity.activity_host + } + } + random_parent = { + limit = { + is_alive = yes + is_ai = no + location = root.location + this != root.involved_activity.activity_host + } + save_scope_as = carer + } + } + else_if = { + limit = { + any_relation = { + type = guardian + is_alive = yes + is_ai = no + location = root.location + this != root.involved_activity.activity_host + } + } + random_relation = { + type = guardian + limit = { + is_alive = yes + is_ai = no + location = root.location + this != root.involved_activity.activity_host + } + save_scope_as = carer + } + } + else_if = { + limit = { + liege ?= { + is_alive = yes + is_ai = no + is_close_family_of = root + location = root.location + this != root.involved_activity.activity_host + } + } + liege = { save_scope_as = carer } + } + if = { + limit = { exists = scope:carer } + scope:carer = { + add_to_variable_list = { + name = playdate_guests + target = root + } + # Fire event after a day, once lists are built + trigger_event = { id = travel_start_event.1051 days = 1 } + } + } + } + # fishery yurt modifier + if = { + limit = { + government_has_flag = government_is_nomadic + domicile ?= { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + domicile.domicile_location.county = { + switch = { + trigger = has_county_modifier + fishing_yurt_county_modifier_3 = { remove_county_modifier = fishing_yurt_county_modifier_3 } + fishing_yurt_county_modifier_2 = { remove_county_modifier = fishing_yurt_county_modifier_2 } + fishing_yurt_county_modifier_1 = { remove_county_modifier = fishing_yurt_county_modifier_1 } + } + } + } + # Wayfarer Popularity + of_the_people_effect = yes + # Wayfarer Stress Loss + if = { + limit = { + has_perk = the_home_away_from_home_perk + } + add_character_modifier = the_home_away_from_home_modifier + } + reminiscing_event_effect = yes + #Surveyor MAA Mustering + surveyor_perk_mustering_effect = yes + #Tutor Child Travel Option + surveyor_tutor_child_effect = yes + + if = { + limit = { + has_character_modifier = wanderer_restlessness_modifier + } + send_interface_message = { + title = wanderer_restlessness_removal_title + right_icon = root + add_wanderer_lifestyle_xp = 250 + stress_impact = { base = -25 } + remove_character_modifier = wanderer_restlessness_modifier + } + } + + # Caravan Master Task + if = { + limit = { + has_variable = prepare_travels_value + var:prepare_travels_value >= 1 + } + current_travel_plan = { + set_variable = { + name = prepare_travels_modifier_value + value = root.var:prepare_travels_value + } + add_travel_plan_modifier = prepare_travels_modifier + } + remove_variable = prepare_travels_value + } + } + events = { + travel_start_event.1000 #Generic start (no activity) + travel_start_event.1010 #Travelling to a Tournament + travel_start_event.1020 #Setting off on a Tour + travel_start_event.1030 #Travelling to a Wedding + travel_start_event.1040 #Travelling to a Feast + travel_start_event.1050 #Travelling to a Playdate + travel_start_event.1060 #Going on a Pilgrimage + travel_start_event.1070 #Travelling to a Hunt + travel_start_event.1080 #Travelling to a Witch Ritual + travel_start_event.1090 #Travelling to a Travel Lifestyle Activity + travel_start_event.1100 #Travelling to an Examination + travel_start_event.1110 #Travelling to a Mandala Ritual + travel_start_event.1120 #Travelling to a Debate + + ep3_contract_event.0002 #When doing a Contract as Landless Adventurer fill your entourage with relevant people + diarchy.0002 # Do we need to enter a regency or not? + ep3_laamp_flavour_ewan.1102 #Adventurer's child helps them pack + ep3_laamp_flavour_ewan.1103 #Follow-up events for adventurer's child helping with packing + } +} + +# Completed a travel plan (arrived at final destination, or completed through script) +# A travel plan ends either via 'on_travel_plan_complete' or 'on_travel_plan_abort' +on_travel_plan_complete = { + trigger = { + is_ruler = yes + } + first_valid = { + pilgrimage.9010 #Bury the old host after finishing the Pilgrimage + pilgrimage.9001 #Nice Spiritual Journey + ep3_laamps.8000 # You arrive at a place you have a claim on + tgp_east_asia_mandala_events.8496 #You are due for a Mandala Succession? + travel_completion_event.1000 + } + events = { + ep3_laamps.9971 + } + + effect = { + if = { + limit = { + exists = var:travel_plan_start_date + } + remove_variable = travel_plan_start_date + } + # Remove regencies if possible. + trigger_event = { + id = diarchy.0112 + days = 1 + } + current_travel_plan = { + every_entourage_character = { + limit = { + is_ai = yes + is_adult = yes + } + random_list = { + 20 = { + modifier = { + exists = current_travel_plan.var:travel_plan_provinces_traversed + add = { + value = current_travel_plan.var:travel_plan_provinces_traversed + divide = 5 + } + } + if = { + limit = { + NOT = { has_trait = lifestyle_traveler } + } + add_trait = lifestyle_traveler + } + } + 80 = {} + } + } + } + # Achievements. + if = { + limit = { is_ai = no } + ep2_im_in_my_elements_terrain_grabber_effect = yes + } + + # Wayfarer Popularity + of_the_people_effect = yes + # Wayfarer Stress Loss + wayfarer_the_home_away_from_home_modifier_effect = yes + # Voyager - Souvenirs Aplenty Perk + voyager_souvenirs_aplenty_completion_effect = yes + if = { + limit = { + current_travel_plan = { + has_travel_option = leisurely_option + } + } + send_interface_toast = { + type = event_generic_good + title = leisurely_option_effect + + add_prestige_experience = { + value = { + value = current_travel_plan.var:travel_plan_provinces_traversed + multiply = 15 + } + } + } + } + reminiscing_event_effect = yes + + # Remove Excursion modifier + destination_remove_excursion_modifier_effect = yes + + if = { + limit = { + has_perk = travel_logs_perk + has_trait = lifestyle_traveler + } + send_interface_toast = { + type = event_generic_good + title = travel_logs_title + + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = { + value = current_travel_plan.var:travel_plan_provinces_traversed + divide = 2 + max = 30 + min = 1 + } + } + } + } + + # Roaming flag + remove_character_flag = roaming_character + + # Give us fresh contracts if necessary. + if = { + limit = { + current_travel_plan = { is_travel_with_domicile = yes } + } + #inform about moving the domicile + send_interface_message = { + type = msg_domicile_moved + left_icon = root + right_icon = root.location.barony + } + # Set up additional firing contracts. + player_adventurer_contract_generation_on_wait_in_place_effect = yes + # Generate contracts if you are far away from your previous location. + player_adventurer_contract_generation_on_domicile_moved_effect = yes + # If necessary, remove them immediately. + remove_laamp_from_exiled_county_automatically_effect = { + PROVINCE = root.location + LAAMP = root + } + if = { + limit = { + has_government = landless_adventurer_government + has_perk = souvenirs_aplenty_perk + } + every_courtier_or_guest = { + add_opinion = { + modifier = respected_camp_leader_opinion + opinion = 10 + target = root + } + } + if = { + limit = { + has_trait = gallowsbait + NOT = { has_variable = souvenirs_aplenty_cooldown } + } + set_variable = { + name = souvenirs_aplenty_cooldown + months = 3 + } + random_list = { + 1 = { + souvenirs_aplenty_gallowsbait_effect = { TRACK = bandit } + } + 1 = { + souvenirs_aplenty_gallowsbait_effect = { TRACK = trickster } + } + 1 = { + souvenirs_aplenty_gallowsbait_effect = { TRACK = thief } + } + 1 = { + souvenirs_aplenty_gallowsbait_effect = { TRACK = poacher } + } + 1 = { + souvenirs_aplenty_gallowsbait_effect = { TRACK = marauder } + } + } + } + } + if = { + limit = { + has_government = landless_adventurer_government + has_perk = of_the_people_perk + NOT = { has_variable = of_the_people_cooldown } + diplomacy >= 1 + } + set_variable = { + name = of_the_people_cooldown + months = 3 + } + send_interface_message = { + type = event_generic_good + title = of_the_people_perk_name + left_icon = root + + add_prestige_experience = { + value = diplomacy + multiply = 15 + } + } + } + } + if = { + limit = { + has_focus = wanderer_destination_focus + any_child = { + is_available_ai_child = yes + age >= 6 + location = root.location + save_temporary_scope_as = temp_scope + NOT = { + root.current_travel_plan = { + any_entourage_character = { + this = scope:temp_scope + } + } + } + } + } + random = { + chance = 20 + random_child = { + limit = { + is_available_ai_child = yes + age >= 6 + location = root.location + save_temporary_scope_as = temp_scope + NOT = { + root.current_travel_plan = { + any_entourage_character = { + this = scope:temp_scope + } + } + } + } + save_scope_as = demanding_relation + + root = { + current_travel_plan.final_destination_province = { + save_scope_as = dest_province + } + trigger_event = { + ID = mpo_events_tova.0001 + days = { 2 3 } + } + } + } + } + } + + # Visited Points of Interest tracker, currently only for Adventurers + points_of_interest_tracker_effect = yes + + zealous_missionary_conversion_effect = yes + + if = { + limit = { has_character_modifier = laamp_provisions_forgiveness_travel_modifier } + remove_character_modifier = laamp_provisions_forgiveness_travel_modifier + } + + # fishery yurt modifier + if = { + limit = { + government_has_flag = government_is_nomadic + domicile ?= { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + domicile ?= { + switch = { + trigger = has_domicile_parameter + fishing_yurt_riverside_lakeside_fertility_bonus_lvl_3 = { domicile_location.county = { add_county_modifier = fishing_yurt_county_modifier_3 } } + fishing_yurt_riverside_lakeside_fertility_bonus_lvl_2 = { domicile_location.county = { add_county_modifier = fishing_yurt_county_modifier_2 } } + fishing_yurt_riverside_lakeside_fertility_bonus_lvl_1 = { domicile_location.county = { add_county_modifier = fishing_yurt_county_modifier_1 } } + } + } + } + + if = { # A fallback for the contract "Settle Theological Arguments" if you have your domicile in the same location as the start province, due to how the 'Travel Plan' effect works + limit = { + is_ai = no + has_government = landless_adventurer_government + exists = domicile + root.domicile.domicile_location = current_travel_plan.final_destination_province + any_character_task_contract = { + has_variable = opportunities_left_tally + var:opportunities_left_tally = 0 + } + } + random_character_task_contract = { + limit = { + has_variable = opportunities_left_tally + var:opportunities_left_tally = 0 + } + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = employer + } + } + trigger_event = laamp_base_learning_contract_events.4017 + } + tribute_mission_clean_up_variables_effect = yes + } +} + +# Aborted a travel plan (travel plan was not completed, or aborted through script) +# A travel plan ends either via 'on_travel_plan_complete' or 'on_travel_plan_abort' +# This usually means everyone gets teleported to their default location after this. +on_travel_plan_abort = { + trigger = { is_ruler = yes } + events = { + travel_completion_event.1000 + ep3_laamps.9971 + } + effect = { + if = { + limit = { has_variable = ep3_laamp_decision_1000_is_excavating } + remove_variable = ep3_laamp_decision_1000_is_excavating + } + if = { + limit = { + exists = var:travel_plan_start_date + } + remove_variable = travel_plan_start_date + } + # Wayfarer Popularity + of_the_people_effect = yes + # Wayfarer Stress Loss + wayfarer_the_home_away_from_home_modifier_effect = yes + # Remove Excursion modifier + destination_remove_excursion_modifier_effect = yes + # Roaming flag + if = { + limit = { has_character_flag = roaming_character } #We check for this to not try to remove the flag from dead characters + remove_character_flag = roaming_character + } + + if = { + limit = { + current_travel_plan = { is_travel_with_domicile = yes } + # Check we're still an adventurer, as we may have inherited land whilst travelling. + has_government = landless_adventurer_government + } + #inform about moving the domicile + send_interface_message = { + type = msg_domicile_moved + left_icon = root + right_icon = root.location.barony + } + # Set up additional firing contracts. + player_adventurer_contract_generation_on_wait_in_place_effect = yes + # Generate contracts if you are far away from your previous location. + player_adventurer_contract_generation_on_domicile_moved_effect = yes + # If necessary, remove them immediately. + remove_laamp_from_exiled_county_automatically_effect = { + PROVINCE = root.location + LAAMP = root + } + } + if = { + limit = {has_character_modifier = laamp_provisions_forgiveness_travel_modifier } + remove_character_modifier = laamp_provisions_forgiveness_travel_modifier + } + if = { + limit = { + has_character_flag = petition_liege_character_flag + } + send_interface_toast = { + type = event_toast_effect_neutral + title = petition_liege_costs_refunded + left_icon = root + remove_decision_cooldown = petition_liege_decision + # refund prestige and influence cost + if = { + limit = { petition_liege_admin_valid_trigger = yes } + change_influence_no_experience = standard_activity_cost + } + else = { + add_prestige_no_experience = standard_activity_cost + } + } + # remove variables and flags + petition_liege_variable_cleanup_effect = yes + } + if = { + limit = { + has_character_flag = petition_ceremonial_liege_character_flag + } + remove_decision_cooldown = petition_ceremonial_liege_decision + remove_character_flag = petition_ceremonial_liege_character_flag + } + + # Invalidating travels to a Nomadic Settlement Contract + mpo_invalidating_settlement_contract_effect = yes + + #Invalidate Mandala Contracts + mandala_invalidate_contracts_effect = yes + + #Hit absentee Tributary with Tribute Mission penalty + requested_tribute_mission_penalty_effect = yes + tribute_mission_clean_up_variables_effect = yes + } +} + +# Cancelled a travel plan. Travel plan was cancelled by player interaction, and has +# been rerouted back home. (the travel plan doesn't end yet until they arrive home) +# People in the travel plan were removed from associated activities. +on_travel_plan_cancel = { + effect = { + if = { + limit = { has_variable = ep3_laamp_decision_1000_is_excavating } + remove_variable = ep3_laamp_decision_1000_is_excavating + } + if = { + limit = { + has_character_flag = petition_liege_character_flag + } + send_interface_toast = { + type = event_toast_effect_neutral + title = petition_liege_costs_refunded + left_icon = root + remove_decision_cooldown = petition_liege_decision + # refund prestige and influence cost + if = { + limit = { petition_liege_admin_valid_trigger = yes } + change_influence_no_experience = standard_activity_cost + } + else = { + add_prestige_no_experience = standard_activity_cost + } + } + # remove variables and flags + petition_liege_variable_cleanup_effect = yes + } + if = { + limit = { has_variable = petition_ceremonial_liege_character_flag } + send_interface_toast = { + type = event_toast_effect_neutral + title = petition_ceremonial_liege_costs_refunded + left_icon = root + remove_decision_cooldown = petition_ceremonial_liege_decision + # refund prestige and influence cost + if = { + limit = { petition_liege_admin_valid_trigger = yes } + change_influence_no_experience = standard_activity_cost + } + else = { add_prestige_no_experience = standard_activity_cost } + } + # remove variables and flags + petition_liege_variable_cleanup_effect = yes + } + if = { + limit = { has_variable = pledge_loyalty_to_liege_scope } + pledge_loyalty_to_liege_refund_and_cleanup_effect = yes + } + if = { + limit = { + has_variable = homage_liege_scope + } + send_interface_toast = { + type = event_toast_effect_neutral + title = pay_homage_costs_refunded + left_icon = root + # Remove variable preventing you from paying homage again + if = { + limit = { + has_variable = pay_homage_grace + exists = liege + var:pay_homage_grace = liege + } + remove_variable = pay_homage_grace + } + # Remove variable preventing you from Pledging Loyalty to your liege again + if = { + limit = { + has_variable = pledge_loyalty_to_liege_grace + exists = liege + var:pledge_loyalty_to_liege_grace = liege + } + remove_variable = pledge_loyalty_to_liege_grace + } + # refund any costs + add_prestige = standard_activity_cost + if = { + limit = { + has_variable = pay_homage_gold_value + } + add_gold = var:pay_homage_gold_value + } + } + # Variable cleanup + if = { + limit = { has_variable = homage_type } + remove_variable = homage_type + } + # Contract + if = { + limit = { has_variable = pay_homage_contract_type } + remove_variable = pay_homage_contract_type + } + # Liege + if = { + limit = { has_variable = homage_liege_scope } + remove_variable = homage_liege_scope + } + if = { + limit = { has_variable = pay_homage_gold_value } + remove_variable = pay_homage_gold_value + } + } + #remove variables from Meditate in Seclusion decision, event religious_decision.0201 + trigger_event = religious_decision.0200 + + #remove variables from Rites of Passage: Seclusion decision, event bp2_yearly.7024 + if = { + limit = { + OR = { + has_variable = cleansing_type + has_variable = chosen_rite_memory + has_variable_list = possible_rites + } + } + 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 + } + # Roaming flag + if = { + limit = { + has_character_flag = roaming_character + } + remove_character_flag = roaming_character + } + + # Invalidating travels to a Nomadic Settlement Contract + mpo_invalidating_settlement_contract_effect = yes + + #Invalidate Mandala Contracts + mandala_invalidate_contracts_effect = yes + + #Hit absentee Tributary with Tribute Mission penalty + requested_tribute_mission_penalty_effect = yes + tribute_mission_clean_up_variables_effect = yes + } +} + +# If the travel is due to an activity and the activity is now complete, this will trigger. +on_travel_activity_complete = { +} + +# If the travel is due to an activity and the activity is invalidated (not completed), this will trigger. +# After this on_action, the travel plan will be rerouted home. +on_travel_activity_invalidated = { + +} + +# If the travel is due to an activity and the activity has started while this travel plan is still underway, this +# will trigger. The travel plan is already routed home at this point. +# Root - The owner of the travel plan +# scope:travel_plan - The travel plan +on_travel_activity_arrival_too_late = { + effect = { + trigger_event = { + id = activity_system.0401 + } + } +} + +# If the travel is due to an activity and we estimate that we will not arrive in time for it, this will trigger. +# It will only trigger once, until the estimations change to be in time again. +# Root - The owner of the travel plan +# scope:travel_plan - The travel plan +# scope:estimated_arrival_diff_days - difference in days between activity start and estimated arrival (negative is arriving late) +on_travel_activity_estimated_arrival_too_late = { + effect = { + trigger_event = { + id = activity_system.0400 + } + } +} + +# If the travel leader gets removed (not replaced), this will trigger. +# Root - The owner of the travel plan +# scope:travel_plan - The travel plan +# scope:old_travel_leader - The now removed leader. +on_travel_leader_removed = { + trigger = { + is_playable_character = yes + } + events = { + travel_events.1020 # Provides the option to employ a new travel leader from your entourage or your current location + } +} + +#On action triggered from the poi_grand_city point of interest: +on_visited_grand_city = { + events = { + delay = { days = 1 } + travel_events_cities.1010 + travel_events_cities.1020 + travel_events_cities.1030 + } +} + +#On action triggered from ep3 points of interest +on_visited_ep3_monument = { + events = { + ep3_travel_events.3001 + } +} + +#Used in the debug interaction debug_move_domicile_interaction +on_travel_relocation_start = { + effect = { + every_courtier_or_guest = { #take everyone you have with you + limit = { + NOT = { exists = current_travel_plan } + } + root.current_travel_plan = { + add_companion = prev + } + } + } +} + +#Used in the debug interaction debug_move_domicile_interaction +on_travel_relocation_end = { + effect = { + } +} + +travel_laamps_provisions_on_action = { + trigger = { + exists = domicile + domicile.provisions <= provisions_privation_threshold_start + NOT = { government_has_flag = government_is_nomadic } # Yurts don't have provisions + } + + events = { + ep3_laamps_provisions.1080 + } + + random_events = { + chance_of_no_event = { + value = 10 + } + 100 = ep3_laamps_provisions.1000 + 100 = ep3_laamps_provisions.1010 + 100 = ep3_laamps_provisions.1020 + 100 = ep3_laamps_provisions.1025 + 100 = ep3_laamps_provisions.1030 + 100 = ep3_laamps_provisions.1040 + 100 = ep3_laamps_provisions.1050 + 100 = ep3_laamps_provisions.1060 + 500 = ep3_laamps_provisions.1070 + } +} + +adventurer_talent_scouting_on_action = { + trigger = { + OR = { + current_travel_plan ?= { has_travel_option = adventurers_scout_for_talent_option } + has_perk = toe_the_line_perk + } + } + random_events = { + chance_of_no_event = { + if = { + limit = { + is_ai = yes + } + add = 90 + } + else = { + add = 50 + } + } + 100 = 0 + 100 = ep3_travel_option_events.0001 + } +} + +adventurer_encourage_realtionships_on_action = { + trigger = { + current_travel_plan ?= { has_travel_option = adventurers_encourage_relationships_option } + } + random_events = { + chance_of_no_event = { + value = 50 + } + 100 = 0 + 100 = ep3_travel_option_events.0002 + 100 = ep3_travel_option_events.0003 + 100 = ep3_travel_option_events.0004 + } +} diff --git a/common/on_action/yearly_on_actions.txt b/common/on_action/yearly_on_actions.txt index c7e62b68..cde6b779 100644 --- a/common/on_action/yearly_on_actions.txt +++ b/common/on_action/yearly_on_actions.txt @@ -755,6 +755,138 @@ yearly_global_pulse = { # Root is the character yearly_playable_pulse = { effect = { + if = { + limit = { + government = landless_minority_government + domicile ?= { + OR = { + has_domicile_building_or_higher = village_rice_field_05 + has_domicile_building_or_higher = village_grain_fields_05 + } + } + } + domicile ?= { + change_provisions = { + value = 600 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + OR = { + has_domicile_building_or_higher = village_rice_field_03 + has_domicile_building_or_higher = village_grain_fields_03 + } + } + } + domicile ?= { + change_provisions = { + value = 400 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + OR = { + has_domicile_building_or_higher = village_rice_field_01 + has_domicile_building_or_higher = village_grain_fields_01 + } + } + } + domicile ?= { + change_provisions = { + value = 200 + } + } + } + else = { + } + if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = village_grazing_land_05 + } + } + domicile ?= { + change_provisions = { + value = 600 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = village_grazing_land_03 + } + } + domicile ?= { + change_provisions = { + value = 400 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = village_grazing_land_01 + } + } + domicile ?= { + change_provisions = { + value = 200 + } + } + } + else = { + } + if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = communal_gardens_fruit_05 + } + } + domicile ?= { + change_provisions = { + value = 600 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = communal_gardens_03 + } + } + domicile ?= { + change_provisions = { + value = 400 + } + } + } + else_if = { + limit = { + government = landless_minority_government + domicile ?= { + has_domicile_building_or_higher = communal_gardens_01 + } + } + domicile ?= { + change_provisions = { + value = 200 + } + } + } + else = { + } ai_budget_manipulation_effect = yes #Mandala diff --git a/common/scripted_effects/00_building_effects.txt b/common/scripted_effects/00_building_effects.txt new file mode 100644 index 00000000..b83464e9 --- /dev/null +++ b/common/scripted_effects/00_building_effects.txt @@ -0,0 +1,2978 @@ +##################################################################### +# EFFECT LIST +##################################################################### +# !!! Remember to add all new effects with a short description here !!! + +#add_next_building_tier_effect +#add_random_building_effect +#add_random_building_variable_effect + +##################################################################### +# EFFECTS +##################################################################### + +# Builds or upgrades the specified building, e.g. outposts +add_next_building_tier_effect = { + if = { + limit = { + NOT = { has_building_or_higher = $BUILDING$_01 } + } + add_building = $BUILDING$_01 + } + else_if = { + limit = { has_building = $BUILDING$_01 } + add_building = $BUILDING$_02 + } + else_if = { + limit = { has_building = $BUILDING$_02 } + add_building = $BUILDING$_03 + } + else_if = { + limit = { has_building = $BUILDING$_03 } + add_building = $BUILDING$_04 + } + else_if = { + limit = { has_building = $BUILDING$_04 } + add_building = $BUILDING$_05 + } + else_if = { + limit = { has_building = $BUILDING$_05 } + add_building = $BUILDING$_06 + } + else_if = { + limit = { has_building = $BUILDING$_06 } + add_building = $BUILDING$_07 + } + else_if = { + limit = { has_building = $BUILDING$_07 } + add_building = $BUILDING$_08 + } +} + +#### Create Random Building - 2 Part Effect #### + +# creates a random building in a holding, limited by innovations and holding level, and weighted to cheapest/lowest level, excludes tribal holdings/buildings, only for use in castle/church/city baronies + +# ensure the event/script where this is used checks that a building can be built, based on innovations and holding level, as if noe can be built this effect will do absolutely nada + +# 1, sets variable based on fitness of possible buildings +add_random_building_variable_effect = { # Province scope + province_owner = { save_scope_as = build_owner } + province_owner = { save_scope_as = holder } #Since building requirements reference scope:holder. + random_list = { # Which building? + # Generic/Terrain + 10 = { # outposts : Cheap + trigger = { + add_random_building_trigger = { BUILDING = outposts } # Generic eligiblity + generic_recruitment_building_innovations_trigger = { BUILDING = outposts } + } + set_variable = { + name = random_building_variable + value = 0 + days = 365 + } + } + 10 = { # logging_camps : Cheap + trigger = { + add_random_building_trigger = { BUILDING = logging_camps } + generic_economic_building_innovation_trigger = { BUILDING = logging_camps } + } + set_variable = { + name = random_building_variable + value = 1 + days = 365 + } + } + 10 = { # peat_quarries : Cheap + trigger = { + add_random_building_trigger = { BUILDING = peat_quarries } + generic_economic_building_innovation_trigger = { BUILDING = peat_quarries } + } + set_variable = { + name = random_building_variable + value = 2 + days = 365 + } + } + 10 = { # hill_forts : Cheap + trigger = { + add_random_building_trigger = { BUILDING = hill_forts } + generic_fortification_building_innovations_trigger = { BUILDING = hill_forts } + } + set_variable = { + name = random_building_variable + value = 3 + days = 365 + } + } + 10 = { # plantations : Cheap + trigger = { + add_random_building_trigger = { BUILDING = plantations } + generic_economic_building_innovation_trigger = { BUILDING = plantations } + } + set_variable = { + name = random_building_variable + value = 4 + days = 365 + } + } + 10 = { # quarries : Cheap + trigger = { + add_random_building_trigger = { BUILDING = quarries } + generic_economic_building_innovation_trigger = { BUILDING = quarries } + } + set_variable = { + name = random_building_variable + value = 5 + days = 365 + } + } + 10 = { # hunting_grounds : Cheap + trigger = { + add_random_building_trigger = { BUILDING = hunting_grounds } + generic_economic_building_innovation_trigger = { BUILDING = hunting_grounds } + } + set_variable = { + name = random_building_variable + value = 6 + days = 365 + } + } + 10 = { # military_camps : Cheap + trigger = { + add_random_building_trigger = { BUILDING = military_camps } + generic_recruitment_building_innovations_trigger = { BUILDING = military_camps } + } + set_variable = { + name = random_building_variable + value = 7 + days = 365 + } + } + 10 = { # horse_pastures : Cheap + trigger = { + add_random_building_trigger = { BUILDING = horse_pastures } + generic_recruitment_building_innovations_trigger = { BUILDING = horse_pastures } + } + set_variable = { + name = random_building_variable + value = 8 + days = 365 + } + } + 10 = { # hillside_grazing : Cheap + trigger = { + add_random_building_trigger = { BUILDING = hillside_grazing } + generic_recruitment_building_innovations_trigger = { BUILDING = hillside_grazing } + } + set_variable = { + name = random_building_variable + value = 9 + days = 365 + } + } + 10 = { # warrior_lodges : Cheap + trigger = { + add_random_building_trigger = { BUILDING = warrior_lodges } + generic_recruitment_building_innovations_trigger = { BUILDING = warrior_lodges } + } + set_variable = { + name = random_building_variable + value = 10 + days = 365 + } + } + 2 = { # pastures : Normal + trigger = { + add_random_building_trigger = { BUILDING = pastures } + generic_economic_building_innovation_trigger = { BUILDING = pastures } + } + set_variable = { + name = random_building_variable + value = 11 + days = 365 + } + } + 2 = { # ramparts : Normal + trigger = { + add_random_building_trigger = { BUILDING = ramparts } + generic_fortification_building_innovations_trigger = { BUILDING = ramparts } + } + set_variable = { + name = random_building_variable + value = 12 + days = 365 + } + } + 2 = { # curtain_walls : Normal + trigger = { + add_random_building_trigger = { BUILDING = curtain_walls } + generic_fortification_building_innovations_trigger = { BUILDING = curtain_walls } + } + set_variable = { + name = random_building_variable + value = 13 + days = 365 + } + } + 2 = { # watchtowers : Normal + trigger = { + add_random_building_trigger = { BUILDING = watchtowers } + generic_fortification_building_innovations_trigger = { BUILDING = watchtowers } + } + set_variable = { + name = random_building_variable + value = 14 + days = 365 + } + } + 2 = { # cereal_fields : Normal + trigger = { + add_random_building_trigger = { BUILDING = cereal_fields } + generic_economic_building_innovation_trigger = { BUILDING = cereal_fields } + } + set_variable = { + name = random_building_variable + value = 15 + days = 365 + } + } + 2 = { # barracks : Normal + trigger = { + add_random_building_trigger = { BUILDING = barracks } + generic_recruitment_building_innovations_trigger = { BUILDING = barracks } + } + set_variable = { + name = random_building_variable + value = 16 + days = 365 + } + } + 2 = { # camel_farms : Normal + trigger = { + add_random_building_trigger = { BUILDING = camel_farms } + generic_recruitment_building_innovations_trigger = { BUILDING = camel_farms } + } + set_variable = { + name = random_building_variable + value = 17 + days = 365 + } + } + 2 = { # hill_farms : Normal + trigger = { + add_random_building_trigger = { BUILDING = hill_farms } + generic_economic_building_innovation_trigger = { BUILDING = hill_farms } + } + set_variable = { + name = random_building_variable + value = 18 + days = 365 + } + } + 2 = { # elephant_pens : Normal + trigger = { + add_random_building_trigger = { BUILDING = elephant_pens } + generic_economic_building_innovation_trigger = { BUILDING = elephant_pens } + } + set_variable = { + name = random_building_variable + value = 19 + days = 365 + } + } + 2 = { # common_tradeport : Normal + trigger = { + add_random_building_trigger = { BUILDING = common_tradeport } + # Innovation triggers + trigger_if = { + limit = { has_building_or_higher = common_tradeport_01 } + scope:build_owner.culture = { + OR = { + has_innovation = innovation_crop_rotation + has_cultural_parameter = next_level_trade_ports + } + } + } + trigger_if = { + limit = { has_building_or_higher = common_tradeport_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { + OR = { + has_innovation = innovation_manorialism + AND = { + has_innovation = innovation_crop_rotation + has_cultural_parameter = next_level_trade_ports + } + } + } + } + trigger_if = { + limit = { has_building_or_higher = common_tradeport_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { + OR = { + has_innovation = innovation_windmills + AND = { + has_innovation = innovation_manorialism + has_cultural_parameter = next_level_trade_ports + } + } + } + } + trigger_if = { + limit = { has_building_or_higher = common_tradeport_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { + OR = { + has_innovation = innovation_cranes + AND = { + has_innovation = innovation_windmills + has_cultural_parameter = next_level_trade_ports + } + } + } + } + } + set_variable = { + name = random_building_variable + value = 20 + days = 365 + } + } + 2 = { # hospices : Normal + trigger = { + add_random_building_trigger = { BUILDING = hospices } + generic_economic_building_innovation_trigger = { BUILDING = hospices } + } + set_variable = { + name = random_building_variable + value = 21 + days = 365 + } + } + 2 = { # qanats : Normal + trigger = { + add_random_building_trigger = { BUILDING = qanats } + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { + limit = { + NOT = { + has_building_or_higher = qanats_01 + } + } + scope:build_owner.culture = { + has_cultural_parameter = unlocks_qanat_building + } + } + trigger_if = { + limit = { + has_building_or_higher = qanats_02 + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { + has_building_or_higher = qanats_04 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { + has_building_or_higher = qanats_06 + } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 22 + days = 365 + } + } + 2 = { # murex_farm : Normal + trigger = { + add_random_building_trigger = { BUILDING = murex_farm } + building_requirement_castle_city_church = { LEVEL = 01 } + county = { NOT = { has_county_modifier = backwater_county_modifier } } + trigger_if = { + limit = { + has_building_or_higher = murex_farm_02 + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { + has_building_or_higher = murex_farm_04 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { + has_building_or_higher = murex_farm_06 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + set_variable = { + name = random_building_variable + value = 23 + days = 365 + } + } + 2 = { # wind_furnace : Normal + trigger = { + add_random_building_trigger = { BUILDING = wind_furnace } + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { + limit = { + has_building_or_higher = wind_furnace_01 + } + scope:build_owner.culture = { + has_innovation = innovation_barracks + } + } + trigger_if = { + limit = { + has_building_or_higher = wind_furnace_02 + } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { + has_innovation = innovation_burhs + } + } + trigger_if = { + limit = { + has_building_or_higher = wind_furnace_04 + } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { + has_innovation = innovation_castle_baileys + } + } + trigger_if = { + limit = { + has_building_or_higher = wind_furnace_05 + } + scope:build_owner.culture = { + has_innovation = innovation_royal_armory + } + } + trigger_if = { + limit = { + has_building_or_higher = wind_furnace_06 + } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 24 + days = 365 + } + } + 2 = { # stables : Normal + trigger = { + add_random_building_trigger = { BUILDING = stables } + generic_recruitment_building_innovations_trigger = { BUILDING = stables } + } + set_variable = { + name = random_building_variable + value = 25 + days = 365 + } + } + 2 = { # smiths : Normal + trigger = { + add_random_building_trigger = { BUILDING = smiths } + generic_recruitment_building_innovations_trigger = { BUILDING = smiths } + } + set_variable = { + name = random_building_variable + value = 26 + days = 365 + } + } + 1 = { # orchards : Expensive + trigger = { + add_random_building_trigger = { BUILDING = orchards } + generic_economic_building_innovation_trigger = { BUILDING = orchards } + } + set_variable = { + name = random_building_variable + value = 27 + days = 365 + } + } + 1 = { # farm_estates : Expensive + trigger = { + add_random_building_trigger = { BUILDING = farm_estates } + generic_economic_building_innovation_trigger = { BUILDING = farm_estates } + } + set_variable = { + name = random_building_variable + value = 28 + days = 365 + } + } + 1 = { # regimental_grounds : Expensive + trigger = { + add_random_building_trigger = { BUILDING = regimental_grounds } + generic_recruitment_building_innovations_trigger = { BUILDING = regimental_grounds } + } + set_variable = { + name = random_building_variable + value = 29 + days = 365 + } + } + 1 = { # caravanserai : Expensive + trigger = { + is_county_capital = yes + building_caravanserai_requirement_terrain = yes + scope:build_owner.culture = { + has_innovation = innovation_guilds + } + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = caravanserai_01 + } + trigger_if = { + limit = { has_building_or_higher = caravanserai_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = caravanserai } + } + } + # City level triggers + trigger_if = { + limit = { has_building_or_higher = caravanserai_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { has_building_or_higher = caravanserai_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { has_building_or_higher = caravanserai_05 } + scope:build_owner.culture = { has_innovation = innovation_cranes } + } + trigger_if = { + limit = { has_building_or_higher = caravanserai_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 30 + days = 365 + } + } + 1 = { # watermills : Expensive + trigger = { + is_county_capital = yes + building_watermills_requirement_terrain = yes + scope:build_owner.culture = { + has_innovation = innovation_windmills + } + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = watermills_01 + } + trigger_if = { + limit = { has_building_or_higher = watermills_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = watermills } + } + } + # City level triggers + trigger_if = { + limit = { has_building_or_higher = watermills_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { has_building_or_higher = watermills_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { has_building_or_higher = watermills_05 } + scope:build_owner.culture = { has_innovation = innovation_cranes } + } + trigger_if = { + limit = { has_building_or_higher = watermills_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 31 + days = 365 + } + } + 1 = { # windmills : Expensive + trigger = { + is_county_capital = yes + building_windmills_requirement_terrain = yes + scope:build_owner.culture = { + has_innovation = innovation_windmills + } + building_requirement_castle_city_church = { LEVEL = 01 } + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = windmills_01 + } + trigger_if = { + limit = { has_building_or_higher = windmills_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = windmills } + } + } + # City level triggers + trigger_if = { + limit = { has_building_or_higher = windmills_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { has_building_or_higher = windmills_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { has_building_or_higher = windmills_05 } + scope:build_owner.culture = { has_innovation = innovation_cranes } + } + trigger_if = { + limit = { has_building_or_higher = windmills_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 32 + days = 365 + } + } + 1 = { # workshops : Expensive + trigger = { + add_random_building_trigger = { BUILDING = workshops } + building_requirement_castle_city_church = { LEVEL = 01 } + scope:build_owner.culture = { + has_innovation = innovation_advanced_bowmaking + } + trigger_if = { + limit = { + has_building_or_higher = workshops_02 + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { + has_building_or_higher = workshops_04 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { + has_building_or_higher = workshops_05 + } + scope:build_owner.culture = { + has_innovation = innovation_royal_armory + } + } + trigger_if = { + limit = { + has_building_or_higher = workshops_06 + } + building_requirement_castle_city_church = { LEVEL = 04 } + } + } + set_variable = { + name = random_building_variable + value = 33 + days = 365 + } + } + # Holding Type Specific : Normal + 10 = { # monastic_schools : Normal + trigger = { + has_holding_type = church_holding + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = monastic_schools_01 + } + trigger_if = { + limit = { has_building_or_higher = monastic_schools_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = monastic_schools } + } + } + # Innovation triggers + trigger_if = { + limit = { has_building_or_higher = monastic_schools_01 } + scope:build_owner.culture = { has_innovation = innovation_city_planning } + } + trigger_if = { + limit = { has_building_or_higher = monastic_schools_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { has_innovation = innovation_manorialism } + } + trigger_if = { + limit = { has_building_or_higher = monastic_schools_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { has_innovation = innovation_windmills } + } + trigger_if = { + limit = { has_building_or_higher = monastic_schools_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { has_innovation = innovation_cranes } + } + } + set_variable = { + name = random_building_variable + value = 34 + days = 365 + } + } + 10 = { # guild_halls : Normal + trigger = { + has_holding_type = city_holding + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = guild_halls_01 + } + trigger_if = { + limit = { has_building_or_higher = guild_halls_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = guild_halls } + } + } + # Innovation triggers + trigger_if = { + limit = { has_building_or_higher = guild_halls_01 } + scope:build_owner.culture = { + OR = { + has_innovation = innovation_crop_rotation + has_cultural_parameter = next_level_guild_halls + } + } + } + trigger_if = { + limit = { has_building_or_higher = guild_halls_02 } + OR = { + AND = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { + has_innovation = innovation_manorialism + } + } + scope:build_owner.culture = { + has_cultural_parameter = next_level_guild_halls + has_innovation = innovation_crop_rotation + } + } + } + trigger_if = { + limit = { has_building_or_higher = guild_halls_04 } + OR = { + AND = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { + has_innovation = innovation_guilds + } + } + AND = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { + has_cultural_parameter = next_level_guild_halls + has_innovation = innovation_manorialism + } + } + } + } + trigger_if = { + limit = { has_building_or_higher = guild_halls_06 } + OR = { + AND = { + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { + has_innovation = innovation_cranes + } + } + AND = { + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { + has_cultural_parameter = next_level_guild_halls + has_innovation = innovation_guilds + } + } + } + } + } + set_variable = { + name = random_building_variable + value = 35 + days = 365 + } + } + 10 = { # scriptorium : Normal + trigger = { + has_holding_type = church_holding + scope:build_owner = { + has_dlc_feature = legends + } + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = scriptorium_01 + } + trigger_if = { + limit = { has_building_or_higher = scriptorium_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = scriptorium } + } + } + generic_economic_building_innovation_trigger = { BUILDING = scriptorium } + } + set_variable = { + name = random_building_variable + value = 36 + days = 365 + } + } + 10 = { # megalith : Normal + trigger = { + has_holding_type = church_holding + scope:build_owner.faith = { + has_doctrine_parameter = can_build_megaliths + } + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = megalith_01 + } + trigger_if = { + limit = { has_building_or_higher = megalith_01 } + NOT = { + has_lesser_building_trigger = { COMPARE = megalith } + } + } + trigger_if = { + limit = { has_building_or_higher = megalith_02 } + scope:build_owner.culture = { + has_innovation = innovation_city_planning + } + } + trigger_if = { + limit = { has_building_or_higher = megalith_03 } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + set_variable = { + name = random_building_variable + value = 37 + days = 365 + } + } + 2 = { # waterworks : Normal + trigger = { + add_random_building_trigger = { BUILDING = waterworks } + building_requirement_castle_city_church = { LEVEL = 01 } + county = { NOT = { has_county_modifier = backwater_county_modifier } } + trigger_if = { + limit = { + has_building_or_higher = waterworks_02 + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + trigger_if = { + limit = { + has_building_or_higher = waterworks_04 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + trigger_if = { + limit = { + has_building_or_higher = waterworks_06 + } + building_requirement_castle_city_church = { LEVEL = 03 } + } + } + set_variable = { + name = random_building_variable + value = 42 + days = 365 + } + } + 2 = { # paddy_fields : Normal + trigger = { + add_random_building_trigger = { BUILDING = paddy_fields } + generic_economic_building_innovation_trigger = { BUILDING = paddy_fields } + } + set_variable = { + name = random_building_variable + value = 43 + days = 365 + } + } + } +} + +# 2, builds based on variable +add_random_building_construct_effect = { # Province scope + if = { + limit = { has_variable = random_building_variable } + switch = { + trigger = var:random_building_variable + 0 = { + add_next_building_tier_effect = { BUILDING = outposts } + } + 1 = { + add_next_building_tier_effect = { BUILDING = logging_camps } + } + 2 = { + add_next_building_tier_effect = { BUILDING = peat_quarries } + } + 3 = { + add_next_building_tier_effect = { BUILDING = hill_forts } + } + 4 = { + add_next_building_tier_effect = { BUILDING = plantations } + } + 5 = { + add_next_building_tier_effect = { BUILDING = quarries } + } + 6 = { + add_next_building_tier_effect = { BUILDING = hunting_grounds } + } + 7 = { + add_next_building_tier_effect = { BUILDING = military_camps } + } + 8 = { + add_next_building_tier_effect = { BUILDING = horse_pastures } + } + 9 = { + add_next_building_tier_effect = { BUILDING = hillside_grazing } + } + 10 = { + add_next_building_tier_effect = { BUILDING = warrior_lodges } + } + 11 = { + add_next_building_tier_effect = { BUILDING = pastures } + } + 12 = { + add_next_building_tier_effect = { BUILDING = ramparts } + } + 13 = { + add_next_building_tier_effect = { BUILDING = curtain_walls } + } + 14 = { + add_next_building_tier_effect = { BUILDING = watchtowers } + } + 15 = { + add_next_building_tier_effect = { BUILDING = cereal_fields } + } + 16 = { + add_next_building_tier_effect = { BUILDING = barracks } + } + 17 = { + add_next_building_tier_effect = { BUILDING = camel_farms } + } + 18 = { + add_next_building_tier_effect = { BUILDING = hill_farms } + } + 19 = { + add_next_building_tier_effect = { BUILDING = elephant_pens } + } + 20 = { + add_next_building_tier_effect = { BUILDING = common_tradeport } + } + 21 = { + add_next_building_tier_effect = { BUILDING = hospices } + } + 22 = { + add_next_building_tier_effect = { BUILDING = qanats } + } + 23 = { + add_next_building_tier_effect = { BUILDING = murex_farm } + } + 24 = { + add_next_building_tier_effect = { BUILDING = wind_furnace } + } + 25 = { + add_next_building_tier_effect = { BUILDING = stables } + } + 26 = { + add_next_building_tier_effect = { BUILDING = smiths } + } + 27 = { + add_next_building_tier_effect = { BUILDING = orchards } + } + 28 = { + add_next_building_tier_effect = { BUILDING = farm_estates } + } + 29 = { + add_next_building_tier_effect = { BUILDING = regimental_grounds } + } + 30 = { + add_next_building_tier_effect = { BUILDING = caravanserai } + } + 31 = { + add_next_building_tier_effect = { BUILDING = windmills } + } + 32 = { + add_next_building_tier_effect = { BUILDING = watermills } + } + 33 = { + add_next_building_tier_effect = { BUILDING = workshops } + } + 34 = { + add_next_building_tier_effect = { BUILDING = monastic_schools } + } + 35 = { + add_next_building_tier_effect = { BUILDING = guild_halls } + } + 36 = { + add_next_building_tier_effect = { BUILDING = scriptorium } + } + 37 = { + add_next_building_tier_effect = { BUILDING = megalith } + } + 42 = { + add_next_building_tier_effect = { BUILDING = waterworks } + } + 43 = { + add_next_building_tier_effect = { BUILDING = paddy_fields } + } + } + remove_variable = random_building_variable + } +} + +# For stuff that has exactly _eight_ levels of upgrades. +destroy_or_downgrade_building_effect = { + if = { + limit = { has_building = $BUILDING$_08 } + remove_building = $BUILDING$_08 + hidden_effect = { add_building = $BUILDING$_07 } + } + else_if = { + limit = { has_building = $BUILDING$_07 } + remove_building = $BUILDING$_07 + hidden_effect = { add_building = $BUILDING$_06 } + } + else_if = { + limit = { has_building = $BUILDING$_06 } + remove_building = $BUILDING$_06 + hidden_effect = { add_building = $BUILDING$_05 } + } + else_if = { + limit = { has_building = $BUILDING$_05 } + remove_building = $BUILDING$_05 + hidden_effect = { add_building = $BUILDING$_04 } + } + else_if = { + limit = { has_building = $BUILDING$_04 } + remove_building = $BUILDING$_04 + hidden_effect = { add_building = $BUILDING$_03 } + } + else_if = { + limit = { has_building = $BUILDING$_03 } + remove_building = $BUILDING$_03 + hidden_effect = { add_building = $BUILDING$_02 } + } + else_if = { + limit = { has_building = $BUILDING$_02 } + remove_building = $BUILDING$_02 + hidden_effect = { add_building = $BUILDING$_01 } + } + else = { remove_building = $BUILDING$_01 } +} + +# For stuff that has exactly _three_ levels of upgrades. +destroy_or_downgrade_ducal_building_effect = { + if = { + limit = { has_building = $BUILDING$_03 } + remove_building = $BUILDING$_03 + hidden_effect = { add_building = $BUILDING$_02 } + } + else_if = { + limit = { has_building = $BUILDING$_02 } + remove_building = $BUILDING$_02 + hidden_effect = { add_building = $BUILDING$_01 } + } + else = { remove_building = $BUILDING$_01 } +} + +# For stuff that has exactly _two_ levels of upgrades. +destroy_or_downgrade_tribal_building_effect = { + if = { + limit = { has_building = $BUILDING$_02 } + remove_building = $BUILDING$_02 + hidden_effect = { add_building = $BUILDING$_01 } + } + else = { remove_building = $BUILDING$_01 } +} + +destroy_random_building_variable_effect = { # Province scope + save_scope_as = raid_province + if = { + limit = { has_variable = destroyed_building_variable } + remove_variable = destroyed_building_variable + } + random_list = { # Which building? + # Generic/Terrain + 10 = { # outposts : Cheap + trigger = { has_building_or_higher = outposts_01 } + set_variable = { + name = destroyed_building_variable + value = 0 + months = 1 + } + } + 10 = { # logging_camps : Cheap + trigger = { has_building_or_higher = logging_camps_01 } + set_variable = { + name = destroyed_building_variable + value = 1 + months = 1 + } + } + 10 = { # peat_quarries : Cheap + trigger = { has_building_or_higher = peat_quarries_01 } + set_variable = { + name = destroyed_building_variable + value = 2 + months = 1 + } + } + 10 = { # hill_forts : Cheap + trigger = { has_building_or_higher = hill_forts_01 } + set_variable = { + name = destroyed_building_variable + value = 3 + months = 1 + } + } + 10 = { # plantations : Cheap + trigger = { has_building_or_higher = plantations_01 } + set_variable = { + name = destroyed_building_variable + value = 4 + months = 1 + } + } + 10 = { # quarries : Cheap + trigger = { has_building_or_higher = quarries_01 } + set_variable = { + name = destroyed_building_variable + value = 5 + months = 1 + } + } + 10 = { # hunting_grounds : Cheap + trigger = { has_building_or_higher = hunting_grounds_01 } + set_variable = { + name = destroyed_building_variable + value = 6 + months = 1 + } + } + 10 = { # military_camps : Cheap + trigger = { has_building_or_higher = military_camps_01 } + set_variable = { + name = destroyed_building_variable + value = 7 + months = 1 + } + } + 10 = { # horse_pastures : Cheap + trigger = { has_building_or_higher = horse_pastures_01 } + set_variable = { + name = destroyed_building_variable + value = 8 + months = 1 + } + } + 10 = { # hillside_grazing : Cheap + trigger = { has_building_or_higher = hillside_grazing_01 } + set_variable = { + name = destroyed_building_variable + value = 9 + months = 1 + } + } + 10 = { # warrior_lodges : Cheap + trigger = { has_building_or_higher = warrior_lodges_01 } + set_variable = { + name = destroyed_building_variable + value = 10 + months = 1 + } + } + 2 = { # pastures : Normal + trigger = { has_building_or_higher = pastures_01 } + set_variable = { + name = destroyed_building_variable + value = 11 + months = 1 + } + } + 2 = { # ramparts : Normal + trigger = { has_building_or_higher = ramparts_01 } + set_variable = { + name = destroyed_building_variable + value = 12 + months = 1 + } + } + 2 = { # curtain_walls : Normal + trigger = { has_building_or_higher = curtain_walls_01 } + set_variable = { + name = destroyed_building_variable + value = 13 + months = 1 + } + } + 2 = { # watchtowers : Normal + trigger = { has_building_or_higher = watchtowers_01 } + set_variable = { + name = destroyed_building_variable + value = 14 + months = 1 + } + } + 2 = { # cereal_fields : Normal + trigger = { has_building_or_higher = cereal_fields_01 } + set_variable = { + name = destroyed_building_variable + value = 15 + months = 1 + } + } + 2 = { # barracks : Normal + trigger = { has_building_or_higher = barracks_01 } + set_variable = { + name = destroyed_building_variable + value = 16 + months = 1 + } + } + 2 = { # camel_farms : Normal + trigger = { has_building_or_higher = camel_farms_01 } + set_variable = { + name = destroyed_building_variable + value = 17 + months = 1 + } + } + 2 = { # hill_farms : Normal + trigger = { has_building_or_higher = hill_farms_01 } + set_variable = { + name = destroyed_building_variable + value = 18 + months = 1 + } + } + 2 = { # paddy_fields : Normal + trigger = { has_building_or_higher = hill_farms_01 } + set_variable = { + name = destroyed_building_variable + value = 43 + months = 1 + } + } + 2 = { # elephant_pens : Normal + trigger = { has_building_or_higher = elephant_pens_01 } + set_variable = { + name = destroyed_building_variable + value = 19 + months = 1 + } + } + 2 = { # common_tradeport : Normal + trigger = { has_building_or_higher = common_tradeport_01 } + set_variable = { + name = destroyed_building_variable + value = 20 + months = 1 + } + } + 2 = { # hospices : Normal + trigger = { has_building_or_higher = hospices_01 } + set_variable = { + name = destroyed_building_variable + value = 21 + months = 1 + } + } + 2 = { # qanats : Normal + trigger = { has_building_or_higher = qanats_01 } + set_variable = { + name = destroyed_building_variable + value = 22 + months = 1 + } + } + 2 = { # murex_farm : Normal + trigger = { has_building_or_higher = murex_farm_01 } + set_variable = { + name = destroyed_building_variable + value = 23 + months = 1 + } + } + 2 = { # waterworks : Normal + trigger = { has_building_or_higher = waterworks_01 } + set_variable = { + name = destroyed_building_variable + value = 42 + months = 1 + } + } + 2 = { # wind_furnace : Normal + trigger = { has_building_or_higher = wind_furnace_01 } + set_variable = { + name = destroyed_building_variable + value = 24 + months = 1 + } + } + 2 = { # stables : Normal + trigger = { has_building_or_higher = stables_01 } + set_variable = { + name = destroyed_building_variable + value = 25 + months = 1 + } + } + 2 = { # smiths : Normal + trigger = { has_building_or_higher = smiths_01 } + set_variable = { + name = destroyed_building_variable + value = 26 + months = 1 + } + } + 1 = { # orchards : Expensive + trigger = { has_building_or_higher = orchards_01 } + set_variable = { + name = destroyed_building_variable + value = 27 + months = 1 + } + } + 1 = { # farm_estates : Expensive + trigger = { has_building_or_higher = farm_estates_01 } + set_variable = { + name = destroyed_building_variable + value = 28 + months = 1 + } + } + 1 = { # regimental_grounds : Expensive + trigger = { has_building_or_higher = regimental_grounds_01 } + set_variable = { + name = destroyed_building_variable + value = 29 + months = 1 + } + } + 1 = { # caravanserai : Expensive + trigger = { has_building_or_higher = caravanserai_01 } + set_variable = { + name = destroyed_building_variable + value = 30 + months = 1 + } + } + 1 = { # watermills : Expensive + trigger = { has_building_or_higher = watermills_01 } + set_variable = { + name = destroyed_building_variable + value = 31 + months = 1 + } + } + 1 = { # windmills : Expensive + trigger = { has_building_or_higher = windmills_01 } + set_variable = { + name = destroyed_building_variable + value = 32 + months = 1 + } + } + 1 = { # workshops : Expensive + trigger = { has_building_or_higher = workshops_01 } + set_variable = { + name = destroyed_building_variable + value = 33 + months = 1 + } + } + # Holding Type Specific : Normal + 10 = { # monastic_schools : Normal + trigger = { has_building_or_higher = monastic_schools_01 } + set_variable = { + name = destroyed_building_variable + value = 21 + months = 1 + } + } + 10 = { # guild_halls : Normal + trigger = { has_building_or_higher = guild_halls_01 } + set_variable = { + name = destroyed_building_variable + value = 35 + months = 1 + } + } + 10 = { # scriptorium : Normal + trigger = { has_building_or_higher = scriptorium_01 } + set_variable = { + name = destroyed_building_variable + value = 36 + months = 1 + } + } + 10 = { # megalith : Normal + trigger = { has_building_or_higher = megalith_01 } + set_variable = { + name = destroyed_building_variable + value = 37 + months = 1 + } + } + 10 = { # Waterworks + trigger = { has_building_or_higher = waterworks_01 } + set_variable = { + name = destroyed_building_variable + value = 42 + months = 1 + } + } + 10 = { # Paddy Fields + trigger = { has_building_or_higher = paddy_fields_01 } + set_variable = { + name = destroyed_building_variable + value = 43 + months = 1 + } + } + # Tribal + 10 = { # Market Villages + trigger = { has_building_or_higher = market_villages_01 } + set_variable = { + name = destroyed_building_variable + value = 38 + months = 1 + } + } + 10 = { # Palisades + trigger = { has_building_or_higher = palisades_01 } + set_variable = { + name = destroyed_building_variable + value = 39 + months = 1 + } + } + 10 = { # War Camps + trigger = { has_building_or_higher = war_camps_01 } + set_variable = { + name = destroyed_building_variable + value = 40 + months = 1 + } + } + 10 = { # Longhouses + trigger = { has_building_or_higher = longhouses_01 } + set_variable = { + name = destroyed_building_variable + value = 41 + months = 1 + } + } + } +} + +destroy_random_building_effect = { + if = { + limit = { has_variable = destroyed_building_variable } + switch = { + trigger = var:destroyed_building_variable + 0 = { # outposts : Cheap + destroy_or_downgrade_building_effect = { BUILDING = outposts } + } + 1 = { # logging_camps : Cheap + destroy_or_downgrade_building_effect = { BUILDING = logging_camps } + } + 2 = { # peat_quarries : Cheap + destroy_or_downgrade_building_effect = { BUILDING = peat_quarries } + } + 3 = { # hill_forts : Cheap + destroy_or_downgrade_building_effect = { BUILDING = hill_forts } + } + 4 = { # plantations : Cheap + destroy_or_downgrade_building_effect = { BUILDING = plantations } + } + 5 = { # quarries : Cheap + destroy_or_downgrade_building_effect = { BUILDING = quarries } + } + 6 = { # hunting_grounds : Cheap + destroy_or_downgrade_building_effect = { BUILDING = hunting_grounds } + } + 7 = { # military_camps : Cheap + destroy_or_downgrade_building_effect = { BUILDING = military_camps } + } + 8 = { # horse_pastures : Cheap + destroy_or_downgrade_building_effect = { BUILDING = horse_pastures } + } + 9 = { # hillside_grazing : Cheap + destroy_or_downgrade_building_effect = { BUILDING = hillside_grazing } + } + 10 = { # warrior_lodges : Cheap + destroy_or_downgrade_building_effect = { BUILDING = warrior_lodges } + } + 11 = { # pastures : Normal + destroy_or_downgrade_building_effect = { BUILDING = pastures } + } + 12 = { # ramparts : Normal + destroy_or_downgrade_building_effect = { BUILDING = ramparts } + } + 13 = { # curtain_walls : Normal + destroy_or_downgrade_building_effect = { BUILDING = curtain_walls } + } + 14 = { # watchtowers : Normal + destroy_or_downgrade_building_effect = { BUILDING = watchtowers } + } + 15 = { # cereal_fields : Normal + destroy_or_downgrade_building_effect = { BUILDING = cereal_fields } + } + 16 = { # barracks : Normal + destroy_or_downgrade_building_effect = { BUILDING = barracks } + } + 17 = { # camel_farms : Normal + destroy_or_downgrade_building_effect = { BUILDING = camel_farms } + } + 18 = { # hill_farms : Normal + destroy_or_downgrade_building_effect = { BUILDING = hill_farms } + } + 19 = { # elephant_pens : Normal + destroy_or_downgrade_building_effect = { BUILDING = elephant_pens } + } + 20 = { # common_tradeport : Normal + destroy_or_downgrade_building_effect = { BUILDING = common_tradeport } + } + 21 = { # hospices : Normal + destroy_or_downgrade_building_effect = { BUILDING = hospices } + } + 22 = { # qanats : Normal + destroy_or_downgrade_building_effect = { BUILDING = qanats } + } + 23 = { # murex_farm : Normal + destroy_or_downgrade_building_effect = { BUILDING = murex_farm } + } + 24 = { # wind_furnace : Normal + destroy_or_downgrade_building_effect = { BUILDING = wind_furnace } + } + 25 = { # stables : Normal + destroy_or_downgrade_building_effect = { BUILDING = stables } + } + 26 = { # smiths : Normal + destroy_or_downgrade_building_effect = { BUILDING = smiths } + } + 27 = { # orchards : Expensive + destroy_or_downgrade_building_effect = { BUILDING = orchards } + } + 28 = { # farm_estates : Expensive + destroy_or_downgrade_building_effect = { BUILDING = farm_estates } + } + 29 = { # regimental_grounds : Expensive + destroy_or_downgrade_building_effect = { BUILDING = regimental_grounds } + } + 30 = { # caravanserai : Expensive + destroy_or_downgrade_building_effect = { BUILDING = caravanserai } + } + 31 = { # watermills : Expensive + destroy_or_downgrade_building_effect = { BUILDING = watermills } + } + 32 = { # windmills : Expensive + destroy_or_downgrade_building_effect = { BUILDING = windmills } + } + 33 = { # workshops : Expensive + destroy_or_downgrade_building_effect = { BUILDING = workshops } + } + # Holding Type Specific : Normal + 34 = { # monastic_schools : Normal + destroy_or_downgrade_building_effect = { BUILDING = monastic_schools } + } + 35 = { # guild_halls : Normal + destroy_or_downgrade_building_effect = { BUILDING = guild_halls } + } + 36 = { # scriptorium : Normal + destroy_or_downgrade_building_effect = { BUILDING = scriptorium } + } + 37 = { # megalith : Normal + destroy_or_downgrade_building_effect = { BUILDING = megalith } + } + 42 = { # waterworks : Normal + destroy_or_downgrade_building_effect = { BUILDING = waterworks } + } + 43 = { # paddy_fields : Normal + destroy_or_downgrade_building_effect = { BUILDING = paddy_fields } + } + # Tribal + 38 = { # megalith : Normal + destroy_or_downgrade_tribal_building_effect = { BUILDING = market_villages } + } + 39 = { # megalith : Normal + destroy_or_downgrade_tribal_building_effect = { BUILDING = palisades } + } + 40 = { # megalith : Normal + destroy_or_downgrade_tribal_building_effect = { BUILDING = war_camps } + } + 41 = { # megalith : Normal + destroy_or_downgrade_tribal_building_effect = { BUILDING = longhouses } + } + } + remove_variable = destroyed_building_variable + } +} + +destroy_or_downgrade_estate_building_2_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_02 } + lower_domicile_building_no_refund = $BUILDING$_02 + } + else = { remove_domicile_building_no_refund = $BUILDING$_01 } +} + +destroy_or_downgrade_estate_building_3_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_03 } + lower_domicile_building_no_refund = $BUILDING$_03 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_02 } + lower_domicile_building_no_refund = $BUILDING$_02 + } + else = { remove_domicile_building_no_refund = $BUILDING$_01 } +} + +destroy_or_downgrade_estate_building_4_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_04 } + lower_domicile_building_no_refund = $BUILDING$_04 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_03 } + lower_domicile_building_no_refund = $BUILDING$_03 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_02 } + lower_domicile_building_no_refund = $BUILDING$_02 + } + else = { remove_domicile_building_no_refund = $BUILDING$_01 } +} + +destroy_or_downgrade_estate_building_5_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_05 } + lower_domicile_building_no_refund = $BUILDING$_05 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_04 } + lower_domicile_building_no_refund = $BUILDING$_04 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_03 } + lower_domicile_building_no_refund = $BUILDING$_03 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_02 } + lower_domicile_building_no_refund = $BUILDING$_02 + } + else = { remove_domicile_building_no_refund = $BUILDING$_01 } +} + +destroy_or_downgrade_estate_building_6_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_06 } + lower_domicile_building_no_refund = $BUILDING$_06 + } + if = { + limit = { has_domicile_building = $BUILDING$_05 } + lower_domicile_building_no_refund = $BUILDING$_05 + } + if = { + limit = { has_domicile_building = $BUILDING$_04 } + lower_domicile_building_no_refund = $BUILDING$_04 + } + if = { + limit = { has_domicile_building = $BUILDING$_03 } + lower_domicile_building_no_refund = $BUILDING$_03 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_02 } + lower_domicile_building_no_refund = $BUILDING$_02 + } + else = { remove_domicile_building_no_refund = $BUILDING$_01 } +} + +destroy_or_downgrade_estate_building_2_4_replacement_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_04 } + lower_domicile_building_no_refund = $BUILDING$_04 + } + else = { + lower_domicile_building_no_refund = $BUILDING$_03 + } +} + +destroy_or_downgrade_estate_building_2_6_replacement_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_06 } + lower_domicile_building_no_refund = $BUILDING$_06 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_05 } + lower_domicile_building_no_refund = $BUILDING$_05 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_04 } + lower_domicile_building_no_refund = $BUILDING$_04 + } + else = { + lower_domicile_building_no_refund = $BUILDING$_03 + } +} + +destroy_or_downgrade_estate_building_3_6_replacement_effect = { + if = { + limit = { has_domicile_building = $BUILDING$_06 } + lower_domicile_building_no_refund = $BUILDING$_06 + } + else_if = { + limit = { has_domicile_building = $BUILDING$_05 } + lower_domicile_building_no_refund = $BUILDING$_05 + } + else = { + lower_domicile_building_no_refund = $BUILDING$_04 + } +} + +destroy_random_estate_building_variable_effect = { # Domicile scope + save_scope_as = raid_domicile + if = { + limit = { has_variable = destroyed_building_variable } + remove_variable = destroyed_building_variable + } + random_list = { # Which building? + # Generic/Terrain + 10 = { # barracks : Normal + trigger = { has_domicile_building_or_higher = barracks_01 } + set_variable = { + name = destroyed_building_variable + value = 0 + months = 1 + } + } + 10 = { # watchtower : Normal + trigger = { has_domicile_building_or_higher = watchtower_01 } + set_variable = { + name = destroyed_building_variable + value = 1 + months = 1 + } + } + 10 = { # guardhouse : Normal + trigger = { has_domicile_building_or_higher = guardhouse_01 } + set_variable = { + name = destroyed_building_variable + value = 2 + months = 1 + } + } + 10 = { # garden : Normal + trigger = { has_domicile_building_or_higher = garden_01 } + set_variable = { + name = destroyed_building_variable + value = 3 + months = 1 + } + } + 10 = { # stable : Normal + trigger = { has_domicile_building_or_higher = stable_01 } + set_variable = { + name = destroyed_building_variable + value = 4 + months = 1 + } + } + 10 = { # workshop : Normal + trigger = { has_domicile_building_or_higher = workshop_01 } + set_variable = { + name = destroyed_building_variable + value = 5 + months = 1 + } + } + 10 = { # storage : Normal + trigger = { has_domicile_building_or_higher = storage_01 } + set_variable = { + name = destroyed_building_variable + value = 6 + months = 1 + } + } + 10 = { # market : Normal + trigger = { has_domicile_building_or_higher = market_01 } + set_variable = { + name = destroyed_building_variable + value = 7 + months = 1 + } + } + 10 = { # grazing_land : Normal + trigger = { has_domicile_building_or_higher = grazing_land_01 } + set_variable = { + name = destroyed_building_variable + value = 8 + months = 1 + } + } + 10 = { # grain_field : Normal + trigger = { has_domicile_building_or_higher = grain_field_01 } + set_variable = { + name = destroyed_building_variable + value = 9 + months = 1 + } + } + 10 = { # living_quarters : Normal + trigger = { has_domicile_building_or_higher = living_quarters_01 } + set_variable = { + name = destroyed_building_variable + value = 10 + months = 1 + } + } + 10 = { # vineyard : Normal + trigger = { has_domicile_building_or_higher = vineyard_01 } + set_variable = { + name = destroyed_building_variable + value = 11 + months = 1 + } + } + 10 = { # olive : Normal + trigger = { has_domicile_building_or_higher = olive_01 } + set_variable = { + name = destroyed_building_variable + value = 12 + months = 1 + } + } + 10 = { # temple : Normal + trigger = { has_domicile_building_or_higher = temple_small_01 } + set_variable = { + name = destroyed_building_variable + value = 13 + months = 1 + } + } + 10 = { # grand_solar : Normal + trigger = { has_domicile_building_or_higher = grand_solar_01 } + set_variable = { + name = destroyed_building_variable + value = 14 + months = 1 + } + } + 10 = { # cabinet_of_curiosities : Normal + trigger = { has_domicile_building_or_higher = cabinet_of_curiosities_01 } + set_variable = { + name = destroyed_building_variable + value = 15 + months = 1 + } + } + 10 = { # reception_hall : Normal + trigger = { has_domicile_building_or_higher = reception_hall_01 } + set_variable = { + name = destroyed_building_variable + value = 16 + months = 1 + } + } + 10 = { # prison : Normal + trigger = { has_domicile_building_or_higher = prison_01 } + set_variable = { + name = destroyed_building_variable + value = 17 + months = 1 + } + } + 10 = { # courtyard : Normal + trigger = { has_domicile_building_or_higher = courtyard_01 } + set_variable = { + name = destroyed_building_variable + value = 18 + months = 1 + } + } + 10 = { # wine_cellar : Normal + trigger = { has_domicile_building_or_higher = wine_cellar_01 } + set_variable = { + name = destroyed_building_variable + value = 19 + months = 1 + } + } + 10 = { # guest_room : Normal + trigger = { has_domicile_building_or_higher = guest_room_01 } + set_variable = { + name = destroyed_building_variable + value = 20 + months = 1 + } + } + 10 = { # bath : Normal + trigger = { has_domicile_building_or_higher = bath_01 } + set_variable = { + name = destroyed_building_variable + value = 21 + months = 1 + } + } + 10 = { # library : Normal + trigger = { has_domicile_building_or_higher = library_01 } + set_variable = { + name = destroyed_building_variable + value = 22 + months = 1 + } + } + 10 = { # servants_quarters : Normal + trigger = { has_domicile_building_or_higher = servants_quarters_01 } + set_variable = { + name = destroyed_building_variable + value = 23 + months = 1 + } + } + 10 = { # office : Normal + trigger = { has_domicile_building_or_higher = office_01 } + set_variable = { + name = destroyed_building_variable + value = 24 + months = 1 + } + } + 10 = { # trophy_room : Normal + trigger = { has_domicile_building_or_higher = trophy_room_01 } + set_variable = { + name = destroyed_building_variable + value = 25 + months = 1 + } + } + 10 = { # silk : Normal + trigger = { has_domicile_building_or_higher = silk_01 } + set_variable = { + name = destroyed_building_variable + value = 26 + months = 1 + } + } + } +} + +destroy_random_estate_building_effect = { + if = { + limit = { has_variable = destroyed_building_variable } + switch = { + trigger = var:destroyed_building_variable + 0 = { # barracks : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = barracks } + } + 1 = { # watchtower : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = watchtower } + } + 2 = { # guardhouse : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = guardhouse } + } + 3 = { # garden : Cheap + if = { + limit = { has_domicile_building_or_higher = garden_leisure_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = garden_leisure } + } + else_if = { + limit = { has_domicile_building_or_higher = garden_fruit_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = garden_fruit } + } + else = { + destroy_or_downgrade_estate_building_3_effect = { BUILDING = garden } + } + } + 4 = { # stable : Cheap + if = { + limit = { has_domicile_building_or_higher = stable_grand_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = stable_grand } + } + else_if = { + limit = { has_domicile_building_or_higher = stable_kennel_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = stable_kennel } + } + else_if = { + limit = { has_domicile_building_or_higher = stable_chariot_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = stable_chariot } + } + else = { + destroy_or_downgrade_estate_building_3_effect = { BUILDING = stable } + } + } + 5 = { # workshop : Cheap + if = { + limit = { has_domicile_building_or_higher = workshop_carpenter_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = workshop_carpenter } + } + else_if = { + limit = { has_domicile_building_or_higher = workshop_mason_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = workshop_mason } + } + else_if = { + limit = { has_domicile_building_or_higher = workshop_textile_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = workshop_textile } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = workshop } + } + } + 6 = { # storage : Cheap + if = { + limit = { has_domicile_building_or_higher = storage_warehouse_03 } + destroy_or_downgrade_estate_building_2_4_replacement_effect = { BUILDING = storage_warehouse } + } + else_if = { + limit = { has_domicile_building_or_higher = storage_granary_03 } + destroy_or_downgrade_estate_building_2_4_replacement_effect = { BUILDING = storage_granary } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = storage } + } + } + 7 = { # market : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = market } + } + 8 = { # grazing_land : Cheap + if = { + limit = { has_domicile_building_or_higher = horse_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = horse_pasture } + } + else_if = { + limit = { has_domicile_building_or_higher = camel_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = camel_pasture } + } + else_if = { + limit = { has_domicile_building_or_higher = elephant_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = elephant_pasture } + } + else = { + destroy_or_downgrade_estate_building_6_effect = { BUILDING = grazing_land } + } + } + 9 = { # grain_field : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = grain_field } + } + 10 = { # living_quarters : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = living_quarters } + } + 11 = { # vineyard : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = vineyard } + } + 12 = { # olive : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = olive } + } + 13 = { # temple : Cheap + if = { + limit = { has_domicile_building_or_higher = temple_crypt_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = temple_crypt } + } + else_if = { + limit = { has_domicile_building_or_higher = temple_large_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = temple_large } + } + else_if = { + limit = { has_domicile_building_or_higher = temple_monastery_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = temple_monastery } + } + else = { + destroy_or_downgrade_estate_building_3_effect = { BUILDING = temple_small } + } + } + 14 = { # grand_solar : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = grand_solar } + } + 15 = { # cabinet_of_curiosities : Cheap + destroy_or_downgrade_estate_building_3_effect = { BUILDING = cabinet_of_curiosities } + } + 16 = { # reception_hall : Cheap + destroy_or_downgrade_estate_building_5_effect = { BUILDING = reception_hall } + } + 17 = { # prison : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = prison } + } + 18 = { # courtyard : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = courtyard } + } + 19 = { # wine_cellar : Cheap + destroy_or_downgrade_estate_building_3_effect = { BUILDING = wine_cellar } + } + 20 = { # guest_room : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = guest_room } + } + 21 = { # bath : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = bath } + } + 22 = { # library : Cheap + if = { + limit = { has_domicile_building_or_higher = library_observatory_03 } + destroy_or_downgrade_estate_building_2_4_replacement_effect = { BUILDING = library_observatory } + } + else_if = { + limit = { has_domicile_building_or_higher = library_education_03 } + destroy_or_downgrade_estate_building_2_4_replacement_effect = { BUILDING = library_education } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = library } + } + } + 23 = { # servants_quarters : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = servants_quarters } + } + 24 = { # office : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = office } + } + 25 = { # trophy_room : Cheap + destroy_or_downgrade_estate_building_4_effect = { BUILDING = trophy_room } + } + 26 = { # silk : Cheap + destroy_or_downgrade_estate_building_6_effect = { BUILDING = silk } + } + } + remove_variable = destroyed_building_variable + } +} + +# Destroy building effects for chinese estates - In domicile scope +destroy_random_east_asian_estate_building_variable_effect = { + save_scope_as = raid_domicile + if = { + limit = { has_variable = destroyed_building_variable } + remove_variable = destroyed_building_variable + } + random_list = { # Which building? + # Upgrades/internal buildings + 10 = { # living_quarters + trigger = { has_domicile_building_or_higher = east_asian_estate_living_quarters_01 } + set_variable = { + name = destroyed_building_variable + value = 1 + months = 1 + } + } + 10 = { # commander's study + trigger = { has_domicile_building_or_higher = east_asian_estate_commander_study_01 } + set_variable = { + name = destroyed_building_variable + value = 2 + months = 1 + } + } + 10 = { # office + trigger = { has_domicile_building_or_higher = east_asian_estate_office_01 } + set_variable = { + name = destroyed_building_variable + value = 3 + months = 1 + } + } + 10 = { # servants_quarters + trigger = { has_domicile_building_or_higher = east_asian_estate_servants_quarters_01 } + set_variable = { + name = destroyed_building_variable + value = 4 + months = 1 + } + } + 10 = { # library + trigger = { has_domicile_building_or_higher = east_asian_estate_library_01 } + set_variable = { + name = destroyed_building_variable + value = 5 + months = 1 + } + } + 10 = { # bath + trigger = { has_domicile_building_or_higher = east_asian_estate_bath_01 } + set_variable = { + name = destroyed_building_variable + value = 6 + months = 1 + } + } + 10 = { # guest_room + trigger = { has_domicile_building_or_higher = east_asian_estate_guest_room_01 } + set_variable = { + name = destroyed_building_variable + value = 7 + months = 1 + } + } + 10 = { # wine_cellar + trigger = { has_domicile_building_or_higher = east_asian_estate_wine_cellar_01 } + set_variable = { + name = destroyed_building_variable + value = 8 + months = 1 + } + } + 10 = { # courtyard + trigger = { has_domicile_building_or_higher = east_asian_estate_courtyard_01 } + set_variable = { + name = destroyed_building_variable + value = 9 + months = 1 + } + } + 10 = { # prison + trigger = { has_domicile_building_or_higher = east_asian_estate_prison_01 } + set_variable = { + name = destroyed_building_variable + value = 10 + months = 1 + } + } + 10 = { # reception_hall + trigger = { has_domicile_building_or_higher = east_asian_estate_reception_hall_01 } + set_variable = { + name = destroyed_building_variable + value = 11 + months = 1 + } + } + 10 = { # cabinet_of_curiosities + trigger = { has_domicile_building_or_higher = east_asian_estate_cabinet_of_curiosities_01 } + set_variable = { + name = destroyed_building_variable + value = 12 + months = 1 + } + } + # External buildings + 10 = { # ancestral shrine + trigger = { has_domicile_building_or_higher = east_asian_estate_ancestral_shrine_01 } + set_variable = { + name = destroyed_building_variable + value = 13 + months = 1 + } + } + 10 = { # pagoda + trigger = { has_domicile_building_or_higher = east_asian_estate_temple_01 } + set_variable = { + name = destroyed_building_variable + value = 14 + months = 1 + } + } + 10 = { # barracks + trigger = { has_domicile_building_or_higher = east_asian_estate_barracks_01 } + set_variable = { + name = destroyed_building_variable + value = 15 + months = 1 + } + } + 10 = { # watchtower + trigger = { has_domicile_building_or_higher = east_asian_estate_watchtower_01 } + set_variable = { + name = destroyed_building_variable + value = 16 + months = 1 + } + } + 10 = { # garden + trigger = { has_domicile_building_or_higher = east_asian_estate_garden_01 } + set_variable = { + name = destroyed_building_variable + value = 18 + months = 1 + } + } + 10 = { # stable + trigger = { has_domicile_building_or_higher = east_asian_estate_stable_01 } + set_variable = { + name = destroyed_building_variable + value = 19 + months = 1 + } + } + 10 = { # workshop + trigger = { has_domicile_building_or_higher = east_asian_estate_workshop_01 } + set_variable = { + name = destroyed_building_variable + value = 20 + months = 1 + } + } + 10 = { # storage + trigger = { has_domicile_building_or_higher = east_asian_estate_storage_01 } + set_variable = { + name = destroyed_building_variable + value = 21 + months = 1 + } + } + 10 = { # market + trigger = { has_domicile_building_or_higher = east_asian_estate_market_01 } + set_variable = { + name = destroyed_building_variable + value = 22 + months = 1 + } + } + 10 = { # grazing_land + trigger = { has_domicile_building_or_higher = east_asian_estate_grazing_land_01 } + set_variable = { + name = destroyed_building_variable + value = 23 + months = 1 + } + } + 10 = { # rice_field + trigger = { has_domicile_building_or_higher = east_asian_estate_rice_field_01 } + set_variable = { + name = destroyed_building_variable + value = 25 + months = 1 + } + } + 10 = { # tea plantation + trigger = { has_domicile_building_or_higher = east_asian_estate_tea_01 } + set_variable = { + name = destroyed_building_variable + value = 27 + months = 1 + } + } + 10 = { # physician's office + trigger = { has_domicile_building_or_higher = east_asian_estate_health_01 } + set_variable = { + name = destroyed_building_variable + value = 28 + months = 1 + } + } + 10 = { # silk + trigger = { has_domicile_building_or_higher = east_asian_estate_silk_01 } + set_variable = { + name = destroyed_building_variable + value = 29 + months = 1 + } + } + 10 = { # study + trigger = { has_domicile_building_or_higher = east_asian_estate_study_01 } + set_variable = { + name = destroyed_building_variable + value = 30 + months = 1 + } + } + 10 = { # minister's office + trigger = { has_domicile_building_or_higher = east_asian_estate_minister_office_01 } + set_variable = { + name = destroyed_building_variable + value = 31 + months = 1 + } + } + 10 = { # dynastic pavilion/movement leader building + trigger = { has_domicile_building_or_higher = east_asian_estate_movement_study_01 } + set_variable = { + name = destroyed_building_variable + value = 32 + months = 1 + } + } + 10 = { # archive + trigger = { has_domicile_building_or_higher = east_asian_estate_archive_01 } + set_variable = { + name = destroyed_building_variable + value = 33 + months = 1 + } + } + 10 = { # gate + trigger = { has_domicile_building_or_higher = east_asian_estate_gate_01 } + set_variable = { + name = destroyed_building_variable + value = 34 + months = 1 + } + } + 10 = { # taxation office + trigger = { has_domicile_building_or_higher = east_asian_estate_taxation_01 } + set_variable = { + name = destroyed_building_variable + value = 35 + months = 1 + } + } + 10 = { # yamen office + trigger = { has_domicile_building_or_higher = east_asian_peasant_quarters_01 } + set_variable = { + name = destroyed_building_variable + value = 36 + months = 1 + } + } + } +} + +destroy_random_east_asian_estate_building_effect = { + if = { + limit = { has_variable = destroyed_building_variable } + switch = { + trigger = var:destroyed_building_variable + 1 = { # living_quarters + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_living_quarters } + } + 2 = { # commander's study + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_commander_study } + } + 3 = { # office + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_office } + } + 4 = { # servants_quarters + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_servants_quarters } + } + 5 = { # library + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_library_education_03 } + destroy_or_downgrade_estate_building_2_4_replacement_effect = { BUILDING = east_asian_estate_library_education } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = east_asian_estate_library } + } + } + 6 = { # bath + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_bath } + } + 7 = { # guest_room + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_guest_room } + } + 8 = { # wine_cellar + destroy_or_downgrade_estate_building_3_effect = { BUILDING = east_asian_estate_wine_cellar } + } + 9 = { # courtyard + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_courtyard } + } + 10 = { # prison + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_prison } + } + 11 = { # reception_hall + destroy_or_downgrade_estate_building_5_effect = { BUILDING = east_asian_estate_reception_hall } + } + 12 = { # cabinet_of_curiosities + destroy_or_downgrade_estate_building_3_effect = { BUILDING = east_asian_estate_cabinet_of_curiosities } + } + 13 = { # ancestral shrine + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_ancestral_shrine } + } + 14 = { # pagoda + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_temple } + } + 15 = { # barracks + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_barracks } + } + 16 = { # watchtower + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_watchtower } + } + 18 = { # garden + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_garden_leisure_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_garden_leisure } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_garden_fruit_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_garden_fruit } + } + else = { + destroy_or_downgrade_estate_building_3_effect = { BUILDING = east_asian_estate_garden } + } + } + 19 = { # stable + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_stable_grand_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_stable_grand } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_stable_kennel_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_stable_kennel } + } + else = { + destroy_or_downgrade_estate_building_3_effect = { BUILDING = east_asian_estate_stable } + } + } + 20 = { # workshop + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_workshop_carpenter_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = east_asian_estate_workshop_carpenter } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_workshop_mason_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = east_asian_estate_workshop_mason } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_workshop_textile_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = east_asian_estate_workshop_textile } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = east_asian_estate_workshop } + } + } + 21 = { # storage + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_storage_warehouse_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = east_asian_estate_storage_warehouse } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_storage_granary_03 } + destroy_or_downgrade_estate_building_2_6_replacement_effect = { BUILDING = east_asian_estate_storage_granary } + } + else = { + destroy_or_downgrade_estate_building_2_effect = { BUILDING = east_asian_estate_storage } + } + } + 22 = { # market + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_market } + } + 23 = { # grazing_land + if = { + limit = { has_domicile_building_or_higher = east_asian_estate_horse_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_horse_pasture } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_camel_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_camel_pasture } + } + else_if = { + limit = { has_domicile_building_or_higher = east_asian_estate_elephant_pasture_04 } + destroy_or_downgrade_estate_building_3_6_replacement_effect = { BUILDING = east_asian_estate_elephant_pasture } + } + else = { + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_grazing_land } + } + } + 25 = { # rice_field + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_rice_field } + } + 27 = { # tea + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_tea } + } + 28 = { # health + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_health } + } + 29 = { # silk + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_silk } + } + 30 = { # study + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_study } + } + 31 = { # minister's office + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_minister_office } + } + 32 = { # dynastic pavilion/movement leader building + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_movement_study } + } + 33 = { # archive + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_archive } + } + 34 = { # gate + destroy_or_downgrade_estate_building_6_effect = { BUILDING = east_asian_estate_gate } + } + 35 = { # tax office + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_estate_taxation } + } + 36 = { # peasants quarters + destroy_or_downgrade_estate_building_4_effect = { BUILDING = east_asian_peasant_quarters } + } + } + remove_variable = destroyed_building_variable + } +} + +add_random_economic_building_effect = { + save_scope_as = building_scope + custom_tooltip = random_economic_building_tt + hidden_effect = { + random_list = { + 10 = { # Caravanserai + trigger = { + NOT = { has_building_or_higher = caravanserai_01 } + building_caravanserai_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + culture = { + has_innovation = innovation_guilds + } + } + add_building = caravanserai_01 + } + 10 = { # Watermills + trigger = { + NOT = { has_building_or_higher = watermills_01 } + building_watermills_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + culture = { + has_innovation = innovation_windmills + } + } + add_building = watermills_01 + } + 10 = { # Windmills + trigger = { + NOT = { has_building_or_higher = windmills_01 } + building_windmills_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + culture = { + has_innovation = innovation_windmills + } + } + add_building = windmills_01 + } + 10 = { # Trade Port + trigger = { + NOT = { has_building_or_higher = common_tradeport_01 } + building_common_tradeport_requirement_terrain = yes + OR = { + AND = { + culture = { + has_cultural_parameter = trade_ports_enabled_for_tribals + } + has_building_or_higher = tribe_01 + } + building_requirement_castle_city_church = { LEVEL = 01 } + } + } + add_building = common_tradeport_01 + } + 10 = { # Pastures + trigger = { + NOT = { has_building_or_higher = pastures_01 } + building_pastures_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = pastures_01 + } + 10 = { # Hunting Grounds + trigger = { + NOT = { has_building_or_higher = hunting_grounds_01 } + building_hunting_grounds_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = hunting_grounds_01 + } + 10 = { # Orchards + trigger = { + NOT = { has_building_or_higher = orchards_01 } + building_orchards_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = orchards_01 + } + 10 = { # Farm Estates + trigger = { + NOT = { has_building_or_higher = farm_estates_01 } + building_farm_estates_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = farm_estates_01 + } + 10 = { # Cereal Fields + trigger = { + NOT = { has_building_or_higher = cereal_fields_01 } + building_cereal_fields_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = cereal_fields_01 + } + 10 = { # Logging Camps + trigger = { + NOT = { has_building_or_higher = logging_camps_01 } + building_logging_camps_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = logging_camps_01 + } + 10 = { # Peat Quarries + trigger = { + NOT = { has_building_or_higher = peat_quarries_01 } + building_peat_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = peat_quarries_01 + } + 10 = { # Hill Farms + trigger = { + NOT = { has_building_or_higher = hill_farms_01 } + building_hill_farms_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = hill_farms_01 + } + 10 = { # Elephant Pens + trigger = { + NOT = { has_building_or_higher = elephant_pens_01 } + building_elephant_pens_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = elephant_pens_01 + } + 10 = { # Plantations + trigger = { + NOT = { has_building_or_higher = plantations_01 } + building_plantations_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = plantations_01 + } + 10 = { # Quarries + trigger = { + NOT = { has_building_or_higher = quarries_01 } + building_quarries_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = quarries_01 + } + 10 = { # Qanats + trigger = { + NOT = { has_building_or_higher = qanats_01 } + building_qanats_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + culture = { + has_cultural_parameter = unlocks_qanat_building + } + } + add_building = qanats_01 + } + 10 = { # Murex Farms + trigger = { + NOT = { has_building_or_higher = murex_farm_01 } + building_murex_farm_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = murex_farm_01 + } + 10 = { # Guild Halls - City Specific + trigger = { + NOT = { has_building_or_higher = guild_halls_01 } + has_building_or_higher = city_01 + } + add_building = guild_halls_01 + } + 10 = { # Monastic Schools - Temple Specific + trigger = { + NOT = { has_building_or_higher = monastic_schools_01 } + has_building_or_higher = temple_01 + } + add_building = monastic_schools_01 + } + } + } +} + +add_random_fortification_building_effect = { + save_scope_as = building_scope + custom_tooltip = random_fortification_building_tt + hidden_effect = { + random_list = { + 10 = { # Ramparts + trigger = { + NOT = { has_building_or_higher = ramparts_01 } + building_ramparts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = ramparts_01 + } + 10 = { # Curtain Walls + trigger = { + NOT = { has_building_or_higher = curtain_walls_01 } + building_curtain_walls_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = curtain_walls_01 + } + 10 = { # Watchtowers + trigger = { + NOT = { has_building_or_higher = watchtowers_01 } + building_watchtowers_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = watchtowers_01 + } + 10 = { # Hill Forts + trigger = { + NOT = { has_building_or_higher = hill_forts_01 } + building_hill_forts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = hill_forts_01 + } + } + } +} + +add_random_military_building_effect = { + save_scope_as = building_scope + custom_tooltip = random_military_building_tt + hidden_effect = { + random_list = { + 10 = { # Wind Furnace + trigger = { + NOT = { has_building_or_higher = wind_furnace_01 } + building_wind_furnace_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = wind_furnace_01 + } + 10 = { # Workshops + trigger = { + NOT = { has_building_or_higher = workshops_01 } + building_workshops_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + scope:building_scope.county.holder.culture = { + has_innovation = innovation_advanced_bowmaking + } + } + add_building = workshops_01 + } + 10 = { # Horse Pastures + trigger = { + NOT = { has_building_or_higher = windmills_01 } + building_horse_pastures_requirement_terrain = yes + } + add_building = windmills_01 + } + 10 = { # Hillside Grazing + trigger = { + NOT = { has_building_or_higher = hillside_grazing_01 } + building_hillside_grazing_requirement_terrain = yes + } + add_building = hillside_grazing_01 + } + 10 = { # Warrior Lodges + trigger = { + NOT = { has_building_or_higher = warrior_lodges_01 } + building_warrior_lodges_requirement_terrain = yes + } + add_building = warrior_lodges_01 + } + 10 = { # Military Camps + trigger = { + NOT = { has_building_or_higher = military_camps_01 } + building_military_camps_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = military_camps_01 + } + 10 = { # Regimental Grounds + trigger = { + NOT = { has_building_or_higher = regimental_grounds_01 } + building_regimental_grounds_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = regimental_grounds_01 + } + 10 = { # Outposts + trigger = { + NOT = { has_building_or_higher = outposts_01 } + building_outposts_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = outposts_01 + } + 10 = { # Barracks + trigger = { + NOT = { has_building_or_higher = barracks_01 } + building_barracks_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = barracks_01 + } + 10 = { # Camel Farms + trigger = { + NOT = { has_building_or_higher = camel_farms_01 } + building_camel_farms_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = camel_farms_01 + } + 10 = { # Stables + trigger = { + NOT = { has_building_or_higher = stables_01 } + building_stables_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = stables_01 + } + 10 = { # Smiths + trigger = { + NOT = { has_building_or_higher = smiths_01 } + building_smiths_requirement_terrain = yes + building_requirement_castle_city_church = { LEVEL = 01 } + } + add_building = smiths_01 + } + } + } +} + +destroy_or_downgrade_temple_effect = { + if = { + limit = { has_building = temple_04 } + remove_building = temple_04 + hidden_effect = { add_building = temple_03 } + } + else_if = { + limit = { has_building = temple_03 } + remove_building = temple_03 + hidden_effect = { add_building = temple_02 } + } + else_if = { + limit = { has_building = temple_02 } + remove_building = temple_02 + hidden_effect = { add_building = temple_01 } + } + else = { remove_building = temple_01 } +} + +add_next_temple_tier_effect = { + if = { + limit = { + NOT = { has_building_or_higher = temple_01 } + } + add_building = temple_01 + } + else_if = { + limit = { has_building = temple_01 } + add_building = temple_02 + } + else_if = { + limit = { has_building = temple_02 } + add_building = temple_03 + } + else_if = { + limit = { has_building = temple_03 } + add_building = temple_04 + } +} diff --git a/common/scripted_effects/07_dlc_ep3_scripted_effects.txt b/common/scripted_effects/07_dlc_ep3_scripted_effects.txt new file mode 100644 index 00000000..78be9a92 --- /dev/null +++ b/common/scripted_effects/07_dlc_ep3_scripted_effects.txt @@ -0,0 +1,13616 @@ +################################################## +# Laamps +################################################## + +create_landless_adventurer_title_history_effect = { + holder ?= { + if = { + limit = { + NOT = { has_realm_law = landless_adventurer_succession_law } + } + add_realm_law = landless_adventurer_succession_law + } + } +} + +create_landless_minority_title_history_effect = { + holder ?= { + if = { + limit = { + NOT = { has_realm_law = confederate_partition_succession_law } + } + add_realm_law = confederate_partition_succession_law + } + } +} +create_landless_adventurer_title_effect = { + save_scope_as = new_landless_adventurer + if = { + limit = { + exists = house + } + house = { save_scope_as = new_landless_adventurer_house } + } + if = { + limit = { + exists = location + } + location = { save_scope_as = new_landless_adventurer_location } + } + save_scope_value_as = { + name = adventurer_creation_reason + value = $REASON$ + } + $FLAVOR_CHAR$ = { save_scope_as = adventurer_flavor_char } + hidden_effect = { + random_list = { + 1000 = { + trigger = { + scope:warrior_youth ?= scope:new_landless_adventurer + age <= 20 + exists = scope:host.house + } + create_adventurer_title = { + name = adventurer_name_youths + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_001 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + trigger = { + exists = scope:new_landless_adventurer_house + } + create_adventurer_title = { + name = adventurer_name_002 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_003 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_004 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + trigger = { + NOT = { + scope:new_landless_adventurer.culture = culture:kurdish + } + } + create_adventurer_title = { + name = adventurer_name_005 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_006 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_007 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + trigger = { + exists = scope:new_landless_adventurer_house + } + create_adventurer_title = { + name = adventurer_name_008 + holder = scope:new_landless_adventurer + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_009 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + exists = scope:new_landless_adventurer_location + } + create_adventurer_title = { + name = adventurer_name_010 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + exists = scope:new_landless_adventurer_location + } + create_adventurer_title = { + name = adventurer_name_011 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + exists = scope:new_landless_adventurer_location + } + create_adventurer_title = { + name = adventurer_name_012 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > 0 + } + create_adventurer_title = { + name = adventurer_name_013 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > 0 + } + create_adventurer_title = { + name = adventurer_name_014 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > 0 + } + create_adventurer_title = { + name = adventurer_name_015 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + OR = { + has_martial_lifestyle_trait_trigger = yes + ai_boldness >= medium_positive_ai_value + 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_education_martial_trigger = yes + } + } + create_adventurer_title = { + name = adventurer_name_016 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + OR = { + has_martial_lifestyle_trait_trigger = yes + 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_education_martial_trigger = yes + } + } + create_adventurer_title = { + name = adventurer_name_017 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > medium_negative_ai_value + scope:new_landless_adventurer.ai_boldness >= 0 + NOT = { + scope:new_landless_adventurer = { + faith.religion = religion:west_african_bori_religion + } + } + } + create_adventurer_title = { + name = adventurer_name_018 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > medium_negative_ai_value + scope:new_landless_adventurer.ai_greed >= 0 + NOT = { + scope:new_landless_adventurer = { + faith.religion = religion:west_african_bori_religion + } + } + } + create_adventurer_title = { + name = adventurer_name_019 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > medium_negative_ai_value + scope:new_landless_adventurer.ai_compassion >= 0 + NOT = { + scope:new_landless_adventurer = { + faith.religion = religion:west_african_bori_religion + } + } + } + create_adventurer_title = { + name = adventurer_name_020 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + exists = scope:new_landless_adventurer_location.county + } + scope:new_landless_adventurer_location.county = { + save_scope_as = new_landless_adventurer_county + } + create_adventurer_title = { + name = adventurer_name_021 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + create_adventurer_title = { + name = adventurer_name_022 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + trigger = { + exists = scope:new_landless_adventurer_house + } + create_adventurer_title = { + name = adventurer_name_023 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + trigger = { + scope:new_landless_adventurer.ai_zeal > medium_negative_ai_value + scope:new_landless_adventurer.ai_rationality >= 0 + #Many names using Allah already + NOT = { + scope:new_landless_adventurer = { + faith.religion = religion:islam_religion + } + } + } + create_adventurer_title = { + name = adventurer_name_024 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 7 = { + trigger = { + scope:new_landless_adventurer.ai_zeal < low_negative_ai_value + scope:new_landless_adventurer.ai_compassion < medium_negative_ai_value + } + create_adventurer_title = { + name = adventurer_name_025 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + 10 = { + create_adventurer_title = { + name = adventurer_name_0026 + holder = scope:new_landless_adventurer + save_scope_as = new_title + } + } + 5 = { + trigger = { + exists = scope:new_landless_adventurer.culture + OR = { + has_martial_lifestyle_trait_trigger = yes + ai_boldness >= medium_positive_ai_value + 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_education_martial_trigger = yes + } + } + create_adventurer_title = { + name = adventurer_name_0027 + holder = scope:new_landless_adventurer + article = DEFAULT_TITLE_NAME_ARTICLE + save_scope_as = new_title + } + } + } + + scope:new_title ?= { + create_landless_adventurer_title_history_effect = yes + set_variable = { + name = adventurer_creation_reason + value = scope:adventurer_creation_reason + } + set_variable = { + name = adventurer_flavor_char + value = scope:adventurer_flavor_char + } + } + + scope:new_title = { save_scope_as = new_landless_adventurer_title } + scope:new_landless_adventurer = { + if = { + limit = { + NOT = { has_government = landless_adventurer_government } + } + change_government = landless_adventurer_government + } + if = { + limit = { + NOT = { has_realm_law = landless_adventurer_succession_law } + } + add_realm_law = landless_adventurer_succession_law + } + if = { + limit = { + has_realm_law = crown_authority_0 + } + remove_realm_law = crown_authority_0 + } + domicile = { change_provisions = starting_provisions_value } + } + every_player = { + limit = { + NOR = { + root ?= this + this = scope:new_landless_adventurer + } + OR = { + # Either they're important to us. + is_close_or_extended_family_of = scope:new_landless_adventurer + is_consort_of = scope:new_landless_adventurer + has_important_relationship_with_character_trigger = { CHARACTER = scope:new_landless_adventurer } + # Or they're just close enough. + AND = { + capital_province = { "squared_distance(scope:new_landless_adventurer.location)" <= squared_distance_medium } + OR = { + top_liege = root.top_liege + any_neighboring_and_across_water_top_liege_realm_owner = { this = root.top_liege } + } + } + } + } + send_interface_message = { + type = msg_landless_adventurer_nearby + title = nearby_landless_adventurer_created_message_title + left_icon = scope:new_landless_adventurer + right_icon = scope:adventurer_flavor_char + switch = { + trigger = scope:adventurer_creation_reason + flag:conquest = { custom_tooltip = nearby_landless_adventurer_created_message_conquest_tt } + flag:conquest_claim = { custom_tooltip = nearby_landless_adventurer_created_message_conquest_tt } + flag:deposition = { custom_tooltip = nearby_landless_adventurer_created_message_deposition_tt } + flag:succession = { custom_tooltip = nearby_landless_adventurer_created_message_succession_tt } + flag:exile = { custom_tooltip = nearby_landless_adventurer_created_message_exile_tt } + flag:voluntary = { custom_tooltip = nearby_landless_adventurer_created_message_voluntary_tt } + flag:revocation = { custom_tooltip = nearby_landless_adventurer_created_message_revocation_tt } + flag:runaway_allowed = { custom_tooltip = nearby_landless_adventurer_created_message_runaway_allowed_tt } + flag:runaway_forbidden = { custom_tooltip = nearby_landless_adventurer_created_message_runaway_forbidden_tt } + flag:wanderer = { custom_tooltip = nearby_landless_adventurer_created_message_wanderer_tt } + flag:eradicate = { custom_tooltip = nearby_landless_adventurer_created_message_eradicate_tt } + fallback = { custom_tooltip = nearby_landless_adventurer_created_message_fallback_tt } + } + } + } + } + custom_tooltip = laamp_become_adventurer_tt + if = { + limit = { + OR = { + scope:adventurer_creation_reason = flag:deposition + scope:adventurer_creation_reason = flag:conquest + scope:adventurer_creation_reason = flag:conquest_claim + scope:adventurer_creation_reason = flag:exile + } + NOT = { this = scope:adventurer_flavor_char } + } + add_opinion = { + target = scope:adventurer_flavor_char + modifier = demanded_eviction_opinion + } + remove_laamp_from_exiled_county_automatically_effect = { + PROVINCE = scope:new_landless_adventurer.location + LAAMP = scope:new_landless_adventurer + } + save_scope_value_as = { + name = expelled + value = yes + } + } + hidden_effect = { + if = { + limit = { + scope:new_landless_adventurer = { + is_ai = no + } + NOT = { exists = scope:expelled } + } + populate_location_with_contracts_effect = { + AREA_CHAR = scope:new_landless_adventurer + AMOUNT = 3 + } + } + scope:new_landless_adventurer = { + every_councillor = { + if = { + limit = { + NOR = { + has_council_position = councillor_court_chaplain + has_council_position = councillor_spouse + } + } + scope:new_landless_adventurer = { + fire_councillor = prev + } + remove_opinion = { + modifier = fired_from_council_opinion + target = scope:new_landless_adventurer + } + } + else_if = { + limit = { + NOR = { + is_close_or_extended_family_of = scope:new_landless_adventurer + has_relation_lover = scope:new_landless_adventurer + has_relation_friend = scope:new_landless_adventurer + is_consort_of = scope:new_landless_adventurer + has_council_position = councillor_spouse + } + } + death = { + death_reason = death_vanished + } + } + } + every_courtier = { + limit = { + NOR = { + is_close_or_extended_family_of = scope:new_landless_adventurer + has_relation_lover = scope:new_landless_adventurer + has_relation_friend = scope:new_landless_adventurer + is_consort_of = scope:new_landless_adventurer + } + } + move_to_pool = yes + } + # Give us a couple of starting chars if we're almost completely bereft. + if = { + limit = { + any_courtier = { count <= 2 } + } + trigger_event = { + id = ep3_laamps.1001 + weeks = { 2 6 } + } + } + } + trigger_event = { id = misc.0001 days = 1 } + local_arbitration_boon_change_purpose_effect = yes + } + add_to_global_variable_list = { + name = laamps_tally + target = scope:new_landless_adventurer.primary_title + } + set_variable = flavourise_camp_purpose_wanderers +} + +create_landless_minority_title_effect = { + save_scope_as = new_landless_minority + if = { + limit = { + exists = house + } + house = { save_scope_as = new_landless_minority_house } + } + if = { + limit = { + exists = location + } + location = { save_scope_as = new_landless_minority_location } + } + save_scope_value_as = { + name = minority_creation_reason + value = $REASON$ + } + $FLAVOR_CHAR$ = { save_scope_as = minority_flavor_char } + hidden_effect = { + + create_adventurer_title = { + name = minority_name + holder = scope:new_landless_minority + article = DEFAULT_TITLE_NAME_ARTICLE + government = landless_minority_government + save_scope_as = new_title + } + scope:new_title ?= { + create_landless_minority_title_history_effect = yes + set_variable = { + name = minority_creation_reason + value = scope:minority_creation_reason + } + set_variable = { + name = minority_flavor_char + value = scope:minority_flavor_char + } + } + + scope:new_title = { save_scope_as = new_landless_minority_title } + scope:new_landless_minority = { + if = { + limit = { + NOT = { has_government = landless_minority_government } + } + change_government = landless_minority_government + } + if = { + limit = { + NOT = { has_realm_law = confederate_partition_succession_law } + } + add_realm_law = confederate_partition_succession_law + } + if = { + limit = { + has_realm_law = crown_authority_0 + } + remove_realm_law = crown_authority_0 + } + domicile = { change_provisions = starting_provisions_value } + } + every_player = { + limit = { + NOR = { + root ?= this + this = scope:new_landless_minority + } + OR = { + # Either they're important to us. + is_close_or_extended_family_of = scope:new_landless_minority + is_consort_of = scope:new_landless_minority + has_important_relationship_with_character_trigger = { CHARACTER = scope:new_landless_minority } + # Or they're just close enough. + AND = { + capital_province = { "squared_distance(scope:new_landless_minority.location)" <= squared_distance_medium } + OR = { + top_liege = root.top_liege + any_neighboring_and_across_water_top_liege_realm_owner = { this = root.top_liege } + } + } + } + } + send_interface_message = { + type = msg_landless_minority_nearby + title = nearby_landless_minority_created_message_title + left_icon = scope:new_landless_minority + right_icon = scope:minority_flavor_char + switch = { + trigger = scope:minority_creation_reason + flag:conquest = { custom_tooltip = nearby_landless_minority_created_message_conquest_tt } + flag:conquest_claim = { custom_tooltip = nearby_landless_minority_created_message_conquest_tt } + flag:deposition = { custom_tooltip = nearby_landless_minority_created_message_deposition_tt } + flag:succession = { custom_tooltip = nearby_landless_minority_created_message_succession_tt } + flag:exile = { custom_tooltip = nearby_landless_minority_created_message_exile_tt } + flag:voluntary = { custom_tooltip = nearby_landless_minority_created_message_voluntary_tt } + flag:revocation = { custom_tooltip = nearby_landless_minority_created_message_revocation_tt } + flag:runaway_allowed = { custom_tooltip = nearby_landless_minority_created_message_runaway_allowed_tt } + flag:runaway_forbidden = { custom_tooltip = nearby_landless_minority_created_message_runaway_forbidden_tt } + flag:wanderer = { custom_tooltip = nearby_landless_minority_created_message_wanderer_tt } + flag:eradicate = { custom_tooltip = nearby_landless_minority_created_message_eradicate_tt } + fallback = { custom_tooltip = nearby_landless_minority_created_message_fallback_tt } + } + } + } + } + custom_tooltip = laamp_become_minority_tt + hidden_effect = { + if = { + limit = { + scope:new_landless_minority = { + is_ai = no + } + NOT = { exists = scope:expelled } + } + populate_location_with_contracts_effect = { + AREA_CHAR = scope:new_landless_minority + AMOUNT = 3 + } + } + scope:new_landless_minority = { + every_courtier = { + limit = { + NOR = { + is_close_or_extended_family_of = scope:new_landless_minority + has_relation_lover = scope:new_landless_minority + has_relation_friend = scope:new_landless_minority + is_consort_of = scope:new_landless_minority + } + } + move_to_pool = yes + } + # Give us a couple of starting chars if we're almost completely bereft. + if = { + limit = { + any_courtier = { count <= 2 } + } + trigger_event = { + id = ep3_laamps.1001 + weeks = { 2 6 } + } + } + } + trigger_event = { id = misc.0001 days = 1 } + local_arbitration_boon_change_purpose_effect = yes + } + add_to_global_variable_list = { + name = laamps_tally + target = scope:new_landless_minority.primary_title + } + set_variable = flavourise_camp_purpose_wanderers +} + +destroy_landless_title_no_dlc_effect = { + if = { + limit = { + NOT = { has_dlc_feature = roads_to_power } + game_start_date = $DATE$ + } + holder = { destroy_title = prev } + } +} + +set_landless_government_effect = { + if = { + limit = { + has_dlc_feature = roads_to_power + } + change_government = landless_adventurer_government + } +} + +disburse_knight_errant_decision_rewards_effect = { + add_trait = knight_errant + house = { + add_house_modifier = { + modifier = ep3_knight_of_the_swan_house_modifier + } + } + custom_tooltip = knight_errant_decision_armor_tt + if = { + limit = { has_dlc_feature = legends } + create_swan_knight_legend_seed_effect = yes + } + if = { + limit = { has_character_modifier = bandit_king_modifier } + remove_character_modifier = bandit_king_modifier + } +} + +laamp_game_over_option_effect = { + add_internal_flag = dangerous + custom_tooltip = laamp_game_over_tt + if = { + limit = { exists = scope:new_landless_adventurer_title } + hidden_effect = { + destroy_title = scope:new_landless_adventurer_title + add_character_flag = { flag = declined_become_laamp days = 1 } # The flag is temporary to make the player get a game over if they had no landed heir to take over their lands + # While also making it so that if they did have an heir to take over they can later play as the old character if they somehow inherit from the heir + } + } +} + +destroy_laamp_effect = { + $ADVENTURER$ = { + save_scope_as = the_adventurer + # If we weren't an adventurer before, make us one. + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + hidden_effect = { + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:the_adventurer + } + add_trait = adventurer_follower + } + } + custom_tooltip = { + text = destroy_laamp_effect.tt.domicile_liquidated + laamp_clear_domicile_buildings_effect = yes + } + # Contacts have opinions™ about you. + ## Be they good. + every_contact = { + limit = { + opinion = { + target = scope:the_adventurer + value >= 1 + } + } + custom = custom.every_contact_with_positive_opinion + add_opinion = { + target = scope:the_adventurer + modifier = pleased_former_contact_opinion + opinion = 30 + } + hidden_effect = { + if = { + limit = { + can_set_relation_potential_friend_trigger = { CHARACTER = scope:the_adventurer } + } + set_relation_potential_friend = scope:the_adventurer + } + } + } + ## Or bad. + every_contact = { + limit = { + opinion = { + target = scope:the_adventurer + value < 1 + } + } + # And neutral but _eh_. + custom = custom.every_contact_with_negative_opinion + add_opinion = { + target = scope:the_adventurer + modifier = frustrated_former_contact_opinion + opinion = -30 + } + hidden_effect = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:the_adventurer } + } + set_relation_potential_rival = scope:the_adventurer + } + } + } + # Destroy your main title. + every_held_title = { + limit = { has_variable = adventurer_creation_reason } + save_scope_as = landless_adventurer_title + scope:the_adventurer = { destroy_title = scope:landless_adventurer_title } + } + # Ironically, we only want to use this effect if you're _not_ admin — it'll reset you nicely to the best government for you, but if you're admin, you should stay admin. + if = { + limit = { + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_nomadic + government_has_flag = government_is_steppe_admin + government_has_flag = government_is_wanua + government_has_flag = government_is_mandala + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + government_has_flag = government_is_japan_feudal + } + } + admin_government_reset_effect = yes #this only contains Clan, Tribal, Nomadic and Feudal + } + # Clean up story no-movement flags. + remove_character_flag = laamp_stay_same_kingdom + } +} + +create_landless_adventurer_title_tooltip_effect = { + show_as_tooltip = { + custom_tooltip = laamp_become_adventurer_tt + if = { + limit = { exists = scope:new_landless_adventurer_title} + show_as_tooltip = { get_title = scope:new_landless_adventurer_title } + } + } +} +create_landless_minority_title_tooltip_effect = { + show_as_tooltip = { + custom_tooltip = laamp_become_minority_tt + if = { + limit = { exists = scope:new_landless_minority_title} + show_as_tooltip = { get_title = scope:new_landless_minority_title } + } + } +} + +find_playable_relatives_effect = { + if = { + limit = { + any_close_family_member = { playable_relative_trigger = yes } + } + ordered_close_family_member = { + limit = { playable_relative_trigger = yes } + order_by = highest_held_title_tier + max = 3 + check_range_bounds = no + if = { + limit = { exists = scope:alt_2 } + save_scope_as = alt_3 + } + else_if = { + limit = { exists = scope:alt_1 } + save_scope_as = alt_2 + } + else = { save_scope_as = alt_1 } + } + } +} + +laamp_switch_playable_character_effect = { + set_player_character = $NEW_CHARACTER$ + hidden_effect = { + if = { + limit = { exists = scope:new_landless_adventurer_title } + destroy_title = scope:new_landless_adventurer_title + } + } +} + +ep3_become_landed_save_liege_effect = { + $TITLE_GIVER$ = { save_scope_as = ruler } + save_scope_value_as = { + name = override_independence_logic + value = $ALWAYS_INDEPENDENT$ + } + if = { + limit = { scope:override_independence_logic = yes } + # Do nothing, we're just here to block subsequent checks. + } + else_if = { + limit = { + scope:ruler = { top_liege != this } + any_in_list = { + list = $TITLE_LIST$ + tier = scope:ruler.highest_held_title_tier + } + NOT = { + any_in_list = { + list = $TITLE_LIST$ + tier > scope:ruler.highest_held_title_tier + } + } + } + scope:ruler.liege = { save_scope_as = new_liege } + } + else_if = { + limit = { + NOT = { + any_in_list = { + list = $TITLE_LIST$ + tier >= scope:ruler.highest_held_title_tier + } + } + } + scope:ruler = { save_scope_as = new_liege } + } +} + +ep3_become_landed_transfer_effect = { + hidden_effect = { + # Liquidate camp + $TITLE_RECEIVER$ = { laamp_clear_domicile_buildings_liquidator_effect = yes } + } + $TITLE_RECEIVER$ = { + if = { + limit = { character:90028 ?= this } + custom_tooltip = ep3_story_cycle_harrying.3053.b.tt + add_character_flag = hereward_settled_flag + } + set_variable = { + name = ascended_throne_reason + value = $REASON$ + weeks = 1 + } + save_scope_value_as = { + name = ascended_throne_value + value = $REASON$ + } + set_variable = { # Used to prevent invalid NF creation + name = laamp_invasion_flag + value = scope:target + days = 1 + } + } + create_title_and_vassal_change = { + type = $TYPE$ + add_claim_on_loss = yes + save_scope_as = title_change + } + scope:target.holder ?= { save_scope_as = old_holder } + if = { + limit = { NOT = { exists = scope:old_holder } } + scope:target = { + ordered_de_jure_county = { + limit = { holder.top_liege = scope:defender.top_liege } + order_by = development_level + holder = { save_scope_as = old_holder } + } + } + } + scope:supporter ?= { save_scope_as = government_giver } + if = { + limit = { NOT = { exists = scope:government_giver } } + scope:old_holder = { save_scope_as = government_giver } + } + scope:government_giver ?= { + switch = { + trigger = government_has_flag + government_is_administrative = { + save_scope_value_as = { name = old_government value = flag:admin } + } + government_is_clan = { + save_scope_value_as = { name = old_government value = flag:clan } + } + government_is_tribal = { + save_scope_value_as = { name = old_government value = flag:tribal } + } + government_is_wanua = { + save_scope_value_as = { name = old_government value = flag:wanua } + } + government_is_nomadic = { + save_scope_value_as = { name = old_government value = flag:nomad } + } + government_is_herder = { + save_scope_value_as = { name = old_government value = flag:nomad } + } + government_is_celestial = { + save_scope_value_as = { name = old_government value = flag:celestial } + } + government_is_steppe_admin = { + save_scope_value_as = { name = old_government value = flag:steppe_admin } + } + government_is_meritocratic = { + save_scope_value_as = { name = old_government value = flag:meritocratic } + } + government_is_japan_administrative = { + save_scope_value_as = { name = old_government value = flag:japan_administrative } + } + government_is_japan_feudal = { + save_scope_value_as = { name = old_government value = flag:japan_feudal } + } + government_is_mandala = { + save_scope_value_as = { name = old_government value = flag:mandala } + } + } + } + if = { + limit = { + NOT = { exists = scope:new_capital } + } + ordered_in_list = { + list = $TITLE_LIST$ + limit = { tier = tier_county } + order_by = development_level + save_scope_as = new_capital + } + } + if = { + limit = { + NOT = { exists = scope:new_capital } + } + scope:new_primary_title ?= { + ordered_de_jure_county = { + limit = { + holder = scope:defender + } + alternative_limit = { + holder.top_liege = scope:defender.top_liege + } + order_by = development_level + save_scope_as = new_capital + } + } + } + ordered_in_list = { + list = $TITLE_LIST$ + order_by = tier + save_scope_as = new_primary_title + } + $TITLE_RECEIVER$ = { + if = { + limit = { + exists = scope:new_primary_title + highest_held_title_tier > scope:new_primary_title.tier + primary_title = { is_landless_type_title = no } + } + primary_title = { save_scope_as = new_primary_title } + } + else = { + scope:new_primary_title ?= { + change_title_holder_include_vassals = { + holder = $TITLE_RECEIVER$ + change = scope:title_change + take_baronies = no + } + } + } + } + scope:new_primary_title ?= { + every_de_jure_county = { + limit = { + NOT = { is_in_list = $TITLE_LIST$ } + trigger_if = { + limit = { exists = scope:defender } + holder.top_liege ?= scope:defender.top_liege + } + trigger_if = { + limit = { exists = scope:new_liege } + holder.top_liege ?= scope:new_liege.top_liege + } + } + change_title_holder_include_vassals = { + holder = $TITLE_RECEIVER$ + change = scope:title_change + take_baronies = no + } + } + } + every_in_list = { + list = $TITLE_LIST$ + limit = { + is_leased_out = no + trigger_if = { + limit = { + NOT = { exists = var:ceremonial_title } + } + is_landless_type_title = no + } + is_head_of_faith = no + tier >= tier_county + trigger_if = { + limit = { exists = scope:defender } + holder.top_liege ?= scope:defender.top_liege + } + trigger_if = { + limit = { exists = scope:new_liege } + holder.top_liege ?= scope:new_liege.top_liege + } + NOT = { scope:new_primary_title ?= this } + } + change_title_holder_include_vassals = { + holder = $TITLE_RECEIVER$ + change = scope:title_change + take_baronies = no + } + } + if = { + limit = { has_character_flag = special_laamp_char } + resolve_title_and_vassal_change = scope:title_change + # Then we resolve vassalage separately, so that we can lock in tiers. + create_title_and_vassal_change = { + type = $TYPE$ + add_claim_on_loss = yes + save_scope_as = title_change + } + } + if = { + limit = { + exists = scope:new_liege + trigger_if = { + limit = { exists = scope:ascended_throne_value } + NOR = { + scope:ascended_throne_value = flag:conquest + scope:ascended_throne_value = flag:conquest_claim + } + } + } + $TITLE_RECEIVER$ = { + change_liege = { + liege = scope:new_liege + change = scope:title_change + } + } + } + else_if = { + limit = { top_liege != this } + becomes_independent = { change = scope:title_change } + } + resolve_title_and_vassal_change = scope:title_change + # Because target may be either a title or a character, we check if a scope value has been set up in advance if this is being called from the Seize Realm scheme specifically + if = { + limit = { + exists = scope:old_government_type + } + scope:old_government_type = { + save_scope_as = old_government + } + } + # Set government type + if = { + limit = { + exists = scope:old_government + } + # We don't expect to actually trigger most of the below, as most are not valid targets to begin with, but all are included for completeness and mod support + switch = { + trigger = scope:old_government + flag:feudal = { + change_government = feudal_government + } + flag:republic = { + change_government = republic_government + } + flag:theocracy = { + change_government = theocracy_government + } + flag:clan = { + change_government = clan_government + } + flag:tribal = { + change_government = tribal_government + } + flag:wanua = { + change_government = wanua_government + } + flag:holy_order = { + change_government = holy_order_government + } + flag:administrative = { + change_government = administrative_government + } + flag:nomad = { + change_government = nomad_government + } + flag:herder = { + change_government = herder_government + } + flag:celestial = { + change_government = celestial_government + } + flag:mandala = { + if = { + limit = { + faith = { has_doctrine = doctrine_polytheist } + } + change_government = mandala_government + #Sort out the House shenanigans + if = { + limit = { is_house_head = no } + house = { + if = { + limit = { + house_head = { + is_landed = no + is_courtier_of = root + } + } + set_house_head = root + } + } + } + else = { + house ?= { + set_house_aspiration = { type = no_aspect } + } + } + } + else = { + if = { + limit = { ep3_is_clan_inclined_trigger = yes } + change_government = clan_government + } + else = { change_government = feudal_government } + } + } + flag:steppe_admin = { + change_government = steppe_admin_government + } + flag:meritocratic = { + change_government = meritocratic_government + } + flag:japan_feudal = { + change_government = japan_feudal_government + } + flag:japan_administrative = { + if = { + limit = { + scope:new_liege ?= { has_government = japan_administrative_government } + } + change_government = japan_administrative_government + } + else = { change_government = feudal_government } + } + } + } + # Otherwise we proceed as normal + else = { + $TITLE_RECEIVER$ = { + # Change our government according to the government of our liege. + ## 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.title_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + hidden_effect = { + every_held_title = { + limit = { + tier = tier_county + title_province = { has_holding_type = herder_holding } + } + title_province = { set_holding_type = nomad_holding } + } + } + change_government = nomad_government + } + ## Soryo. + else_if = { + limit = { + OR = { + scope:new_liege ?= { government_has_flag = government_is_japan_feudal } + scope:old_government ?= flag:japan_feudal + } + } + change_government = japan_feudal_government + } + ## Administrative. + else_if = { + limit = { + OR = { + scope:old_government ?= flag:admin + scope:old_government ?= flag:celestial + scope:old_government ?= flag:steppe_admin + scope:old_government ?= flag:meritocratic + scope:old_government ?= flag:japan_administrative + scope:new_liege ?= { government_allows = administrative } + } + } + change_to_administrative_effect = yes + } + ## Clan. + else_if = { + limit = { + OR = { + scope:new_liege ?= { government_has_flag = government_is_clan } + scope:old_government ?= flag:clan + AND = { + ep3_is_clan_inclined_trigger = yes + top_liege = this + } + } + } + change_government = clan_government + } + ## Tribal. + else_if = { + limit = { + OR = { + scope:new_liege ?= { government_has_flag = government_is_tribal } + scope:old_government ?= flag:tribal + } + } + change_government = tribal_government + } + ## Wanua. + else_if = { + limit = { + OR = { + scope:new_liege ?= { government_has_flag = government_is_wanua } + scope:old_government ?= flag:wanua + } + } + change_government = wanua_government + } + ## Mandala. + else_if = { + limit = { + OR = { + scope:new_liege ?= { government_has_flag = government_is_mandala } + #scope:old_government ?= flag:mandala + scope:target.holder = { government_has_flag = government_is_mandala } + } + faith = { has_doctrine = doctrine_polytheist } + } + change_government = mandala_government + #Sort out the House shenanigans + hidden_effect = { + if = { + limit = { is_house_head = no } + house = { + if = { + limit = { + house_head = { + is_landed = no + is_courtier_of = $TITLE_RECEIVER$ + } + } + set_house_head = $TITLE_RECEIVER$ + } + } + } + else = { + house ?= { + set_house_aspiration = { type = no_aspect } + } + } + } + } + ## Else feudal. + else = { + change_government = feudal_government + } + } + # Ennobled adventurer penalties + if = { + limit = { $ENNOBLED_ADVENTURER$ = flag:yes } + if = { + limit = { + calc_true_if = { + amount = 3 + prestige_level <= 3 + scope:new_capital.culture ?= { + NOR = { + $TITLE_RECEIVER$.culture ?= this + $TITLE_RECEIVER$.primary_spouse.culture ?= this + $TITLE_RECEIVER$.primary_heir.culture ?= this + } + } + scope:new_capital.faith != faith + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_3 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_3 + years = 30 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + else_if = { + limit = { + calc_true_if = { + amount = 2 + prestige_level <= 3 + scope:new_capital.culture ?= { + NOR = { + $TITLE_RECEIVER$.culture ?= this + $TITLE_RECEIVER$.primary_spouse.culture ?= this + $TITLE_RECEIVER$.primary_heir.culture ?= this + } + } + scope:new_capital.faith != faith + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_2 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_2 + years = 20 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + else_if = { + limit = { + calc_true_if = { + amount = 1 + prestige_level <= 3 + scope:new_capital.culture ?= { + NOR = { + $TITLE_RECEIVER$.culture ?= this + $TITLE_RECEIVER$.primary_spouse.culture ?= this + $TITLE_RECEIVER$.primary_heir.culture ?= this + } + } + scope:new_capital.faith != faith + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_1 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_1 + years = 10 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + } + } + destroy_laamp_effect = { ADVENTURER = $TITLE_RECEIVER$ } + # Setup NF if valid + if = { + limit = { government_allows = administrative } + give_new_noble_family_title_effect = yes + } +} + +ep3_become_landed_cleanup_effect = { + if = { + limit = { + exists = scope:supporter + highest_held_title_tier < scope:supporter.highest_held_title_tier + } + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + add_claim_on_loss = no + } + change_liege = { + liege = scope:supporter + change = scope:change + } + resolve_title_and_vassal_change = scope:change + # Message for nearby rulers + create_landed_ruler_message_effect = { + LANDED = scope:attacker + FLAVOR_CHAR = scope:supporter + FLAVOR_TITLE = scope:attacker.primary_title + REASON = flag:conquest_support + } + } + else = { + if = { + limit = { + top_liege != this + NOT = { exists = scope:new_liege } + } + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = no + } + becomes_independent = { change = scope:change } + resolve_title_and_vassal_change = scope:change + } + # Message for nearby rulers + create_landed_ruler_message_effect = { + LANDED = scope:attacker + FLAVOR_CHAR = scope:defender + FLAVOR_TITLE = scope:attacker.primary_title + REASON = flag:conquest + } + } +} + +ep3_become_landed_warning_effect = { + $TITLE$ = { save_scope_as = title } + $TITLE_RECEIVER$ = { custom_tooltip = seize_realm_warning } +} + +purchase_land_interaction_effect = { + # scope:actor = adventurer + # scope:recipient = seller + # purchased_titles = titles + + hidden_effect = { + scope:actor = { + if = { + limit = { character:90028 ?= this } + add_character_flag = hereward_settled_flag + } + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:actor + } + add_trait = adventurer_follower + } + } + } + + # Determine hierarchy + ep3_become_landed_save_liege_effect = { + TITLE_GIVER = scope:recipient + ALWAYS_INDEPENDENT = no + TITLE_LIST = purchased_titles + } + # Purchase land specific + scope:actor = { + show_as_tooltip = { + pay_short_term_gold = { + gold = scope:purchase_land_cost + target = scope:recipient + } + } + } + # Resolve title, liege, government changes + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = scope:actor + TITLE_LIST = purchased_titles + TYPE = granted + REASON = flag:purchased + ENNOBLED_ADVENTURER = flag:yes + } + # Extra purchase land specific + scope:actor = { + stress_impact = { + greedy = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + } + # Effects on land giver + scope:recipient = { add_legitimacy = scope:purchase_land_legitimacy_cost } + # Messages for nearby players + create_landed_ruler_message_effect = { + LANDED = scope:actor + FLAVOR_CHAR = scope:recipient + FLAVOR_TITLE = scope:target + REASON = flag:purchased + } + # Hook + if = { + limit = { scope:offer_hook = yes } + scope:recipient = { + add_hook = { + type = obligation_hook + target = scope:actor + } + } + } + #Handle the government types + if = { + limit = { + scope:recipient = { government_has_flag = government_is_mandala } + #... we're lenient + faith = { has_doctrine = doctrine_polytheist } + } + #Sort out the House shenanigans + if = { + limit = { is_house_head = no } + house = { + if = { + limit = { + house_head = { + is_landed = no + is_courtier_of = root + } + } + set_house_head = root + } + } + } + else = { + house ?= { + set_house_aspiration = { type = no_aspect } + } + } + } + #Otherwise go vanilla + else = { + if = { + limit = { ep3_is_clan_inclined_trigger = yes } + change_government = clan_government + } + else = { change_government = feudal_government } + } +} + +purchase_land_interaction_shortened_effect = { + scope:actor = { + if = { + limit = { character:90028 ?= this } + custom_tooltip = ep3_story_cycle_harrying.3053.b.tt + add_character_flag = hereward_settled_flag + } + show_as_tooltip = { + pay_short_term_gold = { + gold = scope:purchase_land_cost + target = scope:recipient + } + } + hidden_effect = { + scope:recipient = { add_gold = scope:purchase_land_cost } + } + } + scope:actor = { + stress_impact = { + humble = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + if = { + limit = { + scope:target.tier = tier_duchy + } + custom_tooltip = purchase_land_interaction_shortened_effect_duchy_desc + } + else = { + custom_tooltip = purchase_land_interaction_shortened_effect_county_desc + } + if = { + limit = { + scope:target.tier = tier_duchy + } + scope:target.title_capital_county = { + save_scope_as = new_primary_title + } + } + else = { + scope:target = { + save_scope_as = new_primary_title + } + } + if = { + limit = { + calc_true_if = { + amount = 3 + prestige_level <= 3 + OR = { + scope:new_primary_title.culture != culture + primary_spouse ?= { + culture != scope:new_primary_title.culture + } + primary_heir ?= { + culture != scope:new_primary_title.culture + } + } + scope:new_primary_title.faith != faith + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_3 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_3 + years = 30 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + else_if = { + limit = { + calc_true_if = { + amount = 2 + prestige_level <= 3 + OR = { + scope:new_primary_title.culture != culture + primary_spouse ?= { + culture != scope:new_primary_title.culture + } + primary_heir ?= { + culture != scope:new_primary_title.culture + } + } + scope:new_primary_title.faith != faith + + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_2 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_2 + years = 20 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + else_if = { + limit = { + calc_true_if = { + amount = 1 + prestige_level <= 3 + OR = { + scope:new_primary_title.culture != culture + primary_spouse ?= { + culture != scope:new_primary_title.culture + } + primary_heir ?= { + culture != scope:new_primary_title.culture + } + } + scope:new_primary_title.faith != faith + + } + } + custom_tooltip = ep3_ennobled_adventurer_modifier_reason_1 + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_1 + years = 10 + } + custom_tooltip = ep3_ennobled_adventurer_modifier_rules + } + + } +} + +procure_estate_interaction_effect = { + if = { + limit = { scope:piety_option = yes } + if = { + limit = { faith != scope:recipient.faith } + set_character_faith = scope:recipient.faith + add_character_flag = { + flag = procure_estate_conversion + months = 1 + } + } + scope:recipient = { + add_piety = { + value = procure_estate_interaction_cost_base_piety + multiply = 0.5 + } + } + } + else_if = { + limit = { scope:gold_option = yes } + show_as_tooltip = { + pay_short_term_gold = { + target = scope:recipient + gold = procure_estate_interaction_cost_base_gold + } + } + hidden_effect = { + scope:recipient = { add_gold = procure_estate_interaction_cost_base_gold } + } + } + else_if = { + limit = { scope:hook = yes } + scope:recipient = { + add_hook = { + target = scope:actor + type = favor_hook + } + } + } + else = { + scope:recipient = { + add_prestige = { + value = procure_estate_interaction_cost_base_prestige + multiply = 0.25 + } + } + } + scope:recipient = { change_influence = medium_influence_loss } + #Scope:actor becomes ladmin + scope:actor = { + hidden_effect = { + # Liquidate camp + laamp_clear_domicile_buildings_liquidator_effect = yes + } + if = { + limit = { + scope:actor.house ?= { + any_house_member = { + any_held_title = { is_noble_family_title = yes } + top_liege = scope:recipient.top_liege + } + } + } + found_cadet_house_decision_effect = { + CHARACTER = scope:actor + PRESTIGE = major_prestige_gain + } + } + # Note our courtiers so that they don't escape. + every_courtier = { add_to_list = courtiers_list } + # Change liege + destroy_laamp_effect = { ADVENTURER = scope:actor } + hidden_effect = { + scope:recipient.top_liege = { + add_courtier = scope:actor + return_to_court = yes + } + } + create_noble_family_effect = { GOVERNMENT_GIVER = scope:recipient } + hidden_effect = { + # Return any escaped courtiers. + every_in_list = { + list = courtiers_list + limit = { + NOT = { liege_or_court_owner = scope:actor } + } + scope:actor = { add_courtier = prev } + } + # And boot any new autogenned arrivals. + every_courtier = { + limit = { + is_lowborn = yes + NOR = { + is_in_list = courtiers_list + is_close_or_extended_family_of = scope:actor + is_consort_of = scope:actor + has_important_relationship_trigger = { CHARACTER = scope:actor } + } + } + silent_disappearance_effect = yes + } + } + create_title_and_vassal_change = { + type = swear_fealty + add_claim_on_loss = no + save_scope_as = title_change + } + change_liege = { + liege = scope:recipient.top_liege + change = scope:title_change + } + resolve_title_and_vassal_change = scope:title_change + hidden_effect = { + domicile ?= { + if = { + limit = { + NOT = { domicile_location = scope:recipient.capital_province } + } + move_domicile = scope:recipient.capital_province + } + } + } + add_character_modifier = { + modifier = ep3_administrative_outsider_modifier + years = 15 + } + } + scope:recipient.top_liege = { + if = { + limit = { + is_ai = no + } + send_interface_message = { + type = msg_landless_adventurer_nearby + title = procure_estate_message_title + left_icon = scope:actor + right_icon = scope:recipient + custom_tooltip = procure_estate_message_tt + } + } + every_vassal_or_below = { + limit = { + is_ai = no + NOT = { this = scope:actor } + } + send_interface_message = { + type = msg_landless_adventurer_nearby + title = procure_estate_message_title + left_icon = scope:actor + right_icon = scope:recipient + custom_tooltip = procure_estate_message_tt + } + } + } +} + +negotiate_settlement_interaction_effect = { + # scope:actor = offerer + # scope:recipient = adventurer + # offered_titles = titles + + hidden_effect = { + scope:recipient = { + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:recipient + } + add_trait = adventurer_follower + } + } + } + + # Determine hierarchy + ep3_become_landed_save_liege_effect = { + TITLE_GIVER = scope:actor + ALWAYS_INDEPENDENT = no + TITLE_LIST = offered_titles + } + # Negotiate settlement specific + scope:recipient = { + # End relevant wars + every_character_war = { + limit = { + OR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + } + end_war = white_peace + } + # Remove from relevant wars + every_character_war = { + limit = { + NOR = { + primary_attacker = scope:recipient + primary_defender = scope:recipient + } + any_war_defender = { + OR = { + this = scope:actor + this.top_liege = scope:actor.top_liege + } + } + } + remove_participant = scope:recipient + } + } + # Resolve title, liege, government changes + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = scope:recipient + TITLE_LIST = offered_titles + TYPE = granted + REASON = flag:negotiated + ENNOBLED_ADVENTURER = flag:yes + } + # Effects on land giver + scope:actor = { + add_legitimacy = scope:negotiate_settlement_legitimacy_cost + stress_impact = { + greedy = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + } + } + # Messages for nearby players + create_landed_ruler_message_effect = { + LANDED = scope:recipient + FLAVOR_CHAR = scope:actor + FLAVOR_TITLE = scope:new_primary_title + REASON = flag:negotiated + } + # And, just in case it's failed, make sure that we've vassalised our new friend. + hidden_effect = { + if = { + limit = { + scope:recipient = { + highest_held_title_tier < scope:actor.highest_held_title_tier + top_liege = this + } + } + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + } + scope:recipient = { + change_liege = { + liege = scope:actor + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + } +} + +create_landed_ruler_message_effect = { + hidden_effect = { + $LANDED$ = { save_scope_as = landed } + $FLAVOR_CHAR$ = { save_scope_as = landed_flavor_char } + $FLAVOR_TITLE$ = { save_scope_as = landed_flavor_title } + save_scope_value_as = { + name = landed_creation_reason + value = $REASON$ + } + every_player = { + limit = { + NOR = { + this = scope:landed + this = scope:landed_flavor_char + } + top_liege = scope:landed.top_liege + } + send_interface_message = { + type = msg_landless_adventurer_nearby + title = nearby_landed_ruler_created_message_title + left_icon = scope:landed + right_icon = scope:landed_flavor_char + switch = { + trigger = scope:landed_creation_reason + flag:purchased = { custom_tooltip = nearby_landed_ruler_created_message_purchased_tt } + flag:negotiated = { custom_tooltip = nearby_landed_ruler_created_message_negotiated_tt } + flag:seized_pastureland = { custom_tooltip = nearby_landed_ruler_created_message_seized_pastureland_tt } + flag:conquest_supporter = { custom_tooltip = nearby_landed_ruler_created_message_conquest_support_tt } + flag:conquest = { custom_tooltip = nearby_landed_ruler_created_message_conquest_tt } + flag:seize_realm = { custom_tooltip = nearby_landed_ruler_created_message_seize_realm_tt } + flag:culture_champion = { custom_tooltip = nearby_landed_ruler_created_message_culture_champion_tt } + fallback = { custom_tooltip = nearby_landed_ruler_created_message_fallback_tt } + } + } + } + } +} + +conquest_supporter_memory_variable_effect = { + set_variable = { + name = ascended_throne_reason + value = flag:conquest_supporter + weeks = 1 + } + set_variable = { + name = ascended_throne_extra + value = scope:supporter + weeks = 1 + } +} + +ep3_laamp_supporter_invalidated_effect = { + if = { + limit = { exists = var:adventurer_invasion_supporter } + save_scope_as = adventurer + var:adventurer_invasion_supporter ?= { save_scope_as = supporter } + var:adventurer_invasion_target ?= { save_scope_as = war_target } + } + else_if = { + limit = { exists = var:adventurer_invasion_supportee } + var:adventurer_invasion_supportee ?= { save_scope_as = adventurer } + var:adventurer_invasion_target ?= { save_scope_as = target } + save_scope_as = supporter + } + if = { + limit = { + exists = scope:adventurer + exists = scope:supporter + exists = scope:war_target + } + scope:adventurer ?= { + send_interface_message = { + type = event_landless_adventurer_neutral + title = ep3_laamp_sponsor_invalidated_title + left_icon = scope:supporter + right_icon = scope:war_target + remove_variable = adventurer_invasion_supporter + remove_variable = adventurer_invasion_target + custom_tooltip = ep3_laamp_sponsor_invalidated_adventurer + } + } + scope:supporter ?= { + send_interface_message = { + type = event_landless_adventurer_neutral + title = ep3_laamp_sponsor_invalidated_title + left_icon = scope:attacker + right_icon = scope:war_target + remove_variable = adventurer_invasion_supportee + remove_variable = adventurer_invasion_target + custom_tooltip = ep3_laamp_sponsor_invalidated_supporter + if = { + limit = { exists = var:adventurer_invasion_join_war } + set_variable = { + name = adventurer_invasion_join_war + value = scope:actor + years = 5 + } + } + if = { + limit = { exists = var:adventurer_invasion_request_soldiers } + set_variable = { + name = adventurer_invasion_request_soldiers + value = scope:actor + years = 5 + } + } + } + } + } +} + +ep3_laamp_support_variable_cleanup_effect = { + if = { + limit = { exists = var:adventurer_invasion_supporter } + save_scope_as = adventurer + var:adventurer_invasion_supporter ?= { save_scope_as = supporter } + var:adventurer_invasion_target ?= { save_scope_as = war_target } + } + else_if = { + limit = { exists = var:adventurer_invasion_supportee } + var:adventurer_invasion_supportee ?= { save_scope_as = adventurer } + var:adventurer_invasion_target ?= { save_scope_as = war_target } + save_scope_as = supporter + } + scope:adventurer ?= { + remove_variable = adventurer_invasion_supporter + remove_variable = adventurer_invasion_target + } + scope:supporter ?= { + remove_variable = adventurer_invasion_supportee + remove_variable = adventurer_invasion_target + } +} + +seize_realm_scheme_success_effect = { + # scope:target = ruler + # scope:owner = adventurer + + hidden_effect = { + scope:owner = { + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:owner + } + add_trait = adventurer_follower + } + } + } + + scope:target = { + save_scope_as = background_dungeon_scope + save_scope_as = background_courtyard_scope + save_scope_as = background_throne_room_scope + every_held_title = { + limit = { + is_leased_out = no + is_landless_type_title = no + is_head_of_faith = no + } + add_to_list = seized_titles + } + ordered_in_list = { + list = seized_titles + order_by = tier + save_scope_as = realm_title + } + } + # Determine independent vassals + adventurer_realm_destabilisation_list_effect = { + TITLE_GIVER = scope:target + TITLE_RECEIVER = scope:owner + TITLE = scope:target.primary_title + } + # Determine hierarchy + ep3_become_landed_save_liege_effect = { + TITLE_GIVER = scope:target + ALWAYS_INDEPENDENT = no + TITLE_LIST = seized_titles + } + # Resolve title, liege, government changes + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = scope:owner + TITLE_LIST = seized_titles + TYPE = usurped + REASON = flag:seize_realm + ENNOBLED_ADVENTURER = flag:yes + } + # Old ruler's fate + if = { + limit = { exists = scope:death } + scope:target = { + death = { death_reason = death_fight } + } + } + else_if = { + limit = { exists = scope:imprison } + scope:target = { add_character_flag = was_abducted_block_notification_event } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:target + IMPRISONER = scope:owner + } + } + add_clan_unity_interaction_effect = { + CHARACTER = scope:owner + TARGET = scope:target + VALUE = medium_unity_loss + DESC = clan_unity_seize_realm_attempted.desc + REVERSE_NON_HOUSE_TARGET = no + } + successful_seize_realm_opinion_effect = { + VICTIM = scope:target + PLOTTER = scope:owner + } + # Vassals break away + adventurer_realm_destabilisation_transfer_effect = { + TITLE_RECEIVER = scope:owner + TITLE_GIVER = scope:target + TITLE = scope:realm_title + TITLE_LIST = seized_titles + } + # Messages for nearby players + create_landed_ruler_message_effect = { + LANDED = scope:owner + FLAVOR_CHAR = scope:target + FLAVOR_TITLE = scope:realm_title + REASON = flag:seize_realm + } + scope:owner = { + create_character_memory = { + type = seized_realm_memory + participants = { deposed = scope:target } + } + ordered_memory = { + memory_type = seized_realm_memory + order_by = memory_creation_date + if = { + limit = { + NOT = { exists = var:realm } + } + set_variable = { + name = realm + value = scope:realm_title + } + } + } + } + scope:target = { + create_character_memory = { + type = realm_seized_memory + participants = { deposer = scope:owner } + } + ordered_memory = { + memory_type = realm_seized_memory + order_by = memory_creation_date + if = { + limit = { + NOT = { exists = var:realm } + } + set_variable = { + name = realm + value = scope:realm_title + } + } + } + } +} + +seize_realm_scheme_failure_effect = { + scope:scheme = { end_scheme = yes } + #Add Watchful Modifier to the target + scope:target = { + save_scope_as = background_dungeon_scope + save_scope_as = background_courtyard_scope + save_scope_as = background_throne_room_scope + ordered_held_title = { + limit = { + is_leased_out = no + is_landless_type_title = no + is_head_of_faith = no + } + order_by = tier + save_scope_as = realm_title + } + show_as_tooltip = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } + } + # Old ruler's fate + if = { + limit = { exists = scope:death } + scope:owner = { + death = { death_reason = death_fight } + } + } + else = { + scope:owner = { + create_character_memory = { + type = seized_realm_failed_memory + participants = { deposed = scope:target } + } + ordered_memory = { + memory_type = seized_realm_failed_memory + order_by = memory_creation_date + if = { + limit = { + NOT = { exists = var:realm } + } + set_variable = { + name = realm + value = scope:realm_title + } + } + } + } + if = { + limit = { exists = scope:imprison } + scope:owner = { add_character_flag = was_abducted_block_notification_event } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:owner + IMPRISONER = scope:target + } + hidden_effect = { change_prison_type = dungeon } + } + } + attempted_seize_realm_opinion_effect = { + VICTIM = scope:target + PLOTTER = scope:owner + } + # If we're a clan this affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:owner + TARGET = scope:target + VALUE = medium_unity_loss + DESC = clan_unity_seize_realm_attempted.desc + REVERSE_NON_HOUSE_TARGET = no + } + scope:target = { + create_character_memory = { + type = realm_seized_failed_memory + participants = { deposer = scope:owner } + } + ordered_memory = { + memory_type = realm_seized_failed_memory + order_by = memory_creation_date + if = { + limit = { + NOT = { exists = var:realm } + } + set_variable = { + name = realm + value = scope:realm_title + } + } + } + } +} + +successful_seize_realm_opinion_effect = { + $VICTIM$ = { + if = { + limit = { is_alive = yes } + add_opinion = { + target = $PLOTTER$ + modifier = seized_my_realm_crime + } + set_relation_rival = { + target = scope:owner + reason = rival_seized_realm_reason + } + } + every_spouse = { + limit = { + NOR = { + this = $PLOTTER$ + is_spouse_of = $PLOTTER$ + is_close_family_of = $PLOTTER$ + } + } + add_to_temporary_list = close_family_seize_realm_opinion_list + } + every_close_family_member = { + limit = { + NOR = { + this = $PLOTTER$ + is_spouse_of = $PLOTTER$ + is_close_family_of = $PLOTTER$ + } + } + add_to_temporary_list = close_family_seize_realm_opinion_list + } + every_in_list = { + list = close_family_seize_realm_opinion_list + custom = all_close_family_and_spouses + add_opinion = { + target = $PLOTTER$ + modifier = seized_close_family_realm_crime + } + } + } +} + +attempted_seize_realm_opinion_effect = { + $VICTIM$ = { + if = { + limit = { is_alive = yes } + add_opinion = { + target = $PLOTTER$ + modifier = attempted_to_seize_my_realm_crime + } + } + every_spouse = { + limit = { NOT = { this = $PLOTTER$ } } + add_to_temporary_list = close_family_seize_realm_opinion_list + } + every_close_family_member = { + limit = { NOT = { this = $PLOTTER$ } } + add_to_temporary_list = close_family_seize_realm_opinion_list + } + + if = { + limit = { + any_in_list = { list = close_family_seize_realm_opinion_list } + } + every_in_list = { + list = close_family_seize_realm_opinion_list + custom = all_close_family_and_spouses + add_opinion = { + target = $PLOTTER$ + modifier = attempted_to_seize_realm_close_family_crime + } + } + } + + } +} + +adventurer_realm_destabilisation_list_effect = { + $TITLE_RECEIVER$ = { save_scope_as = adventurer } + $TITLE$ = { save_scope_as = title } + $TITLE_GIVER$ = { + save_scope_as = ruler + # Determine vassal sentiment - calculated before ruler change + hidden_effect = { + every_vassal = { + limit = { + highest_held_title_tier >= tier_county + save_temporary_scope_as = vassal_temp + # Only vassals who will not *still* be de jure vassals of the title loser via other titles + trigger_if = { + limit = { + $TITLE_GIVER$ = { + any_held_title = { + tier >= scope:title.tier + this != scope:title + } + } + } + any_held_title = { + target_is_de_jure_liege_or_above = scope:title + } + } + trigger_if = { + limit = { + government_allows = administrative + } + scope:title = { + OR = { + AND = { + scope:ruler.primary_title.tier = tier_kingdom + tier < tier_kingdom + } + tier < tier_empire + } + } + } + } + # Calculate how likely are they to not become your vassal + random = { + chance = 0 + ### FAITH/CULTURE + modifier = { # Cultural acceptance differences + add = { + value = "culture.cultural_acceptance(scope:adventurer.culture)" + subtract = 100 + abs = yes + divide = 5 + } + culture = { + this != scope:adventurer.culture + cultural_acceptance = { + target = scope:adventurer.culture + value < 50 + } + OR = { + this = scope:ruler.culture + "cultural_acceptance(scope:ruler.culture)" > "cultural_acceptance(scope:adventurer.culture)" + } + } + } + modifier = { # Zealous of other faiths more likely + add = { + value = ai_zeal + multiply = 0.15 + multiply = "scope:vassal_temp.faith.faith_hostility_level(scope:adventurer.faith)" + max = 25 + } + ai_zeal > low_positive_zeal + faith = { + this != scope:adventurer.faith + "faith_hostility_level(scope:adventurer.faith)" > 0 + } + } + modifier = { # Theocatic Vassals of different faith more likely + factor = 2 + has_government = theocracy_government + faith != scope:adventurer.faith + } + ### DISTANCE + modifier = { # Distant vassals more likely + add = { + value = 0 + add = scope:distance + if = { + limit = { scope:distance >= squared_distance_medium } + add = scope:distance + multiply = 0.0001 + } + max = 25 + } + "capital_county.squared_distance(scope:ruler.capital_county)" >= squared_distance_medium + capital_county = { + save_temporary_scope_value_as = { + name = distance + value = "squared_distance(scope:ruler.capital_county)" + } + } + } + ### PERSONALITY + ai_value_modifier = { + ai_boldness = 0.15 + ai_energy = 0.15 + ai_greed = 0.15 + ai_honor = -0.15 + } + ### OPINION + opinion_modifier = { # More likely if dislikes adventurer + opinion_target = scope:adventurer + multiplier = -0.25 + } + opinion_modifier = { # More likely if liked old ruler + opinion_target = scope:ruler + multiplier = 0.1 + } + ### STRENGTH + modifier = { # Small vassals less likely + add = -15 + tier_difference = { + target = scope:ruler + value <= -2 + } + } + modifier = { + add = -25 + realm_size < tiny_realm_size + } + modifier = { # Powerful vassals more likely + factor = 1.25 + is_powerful_vassal = yes + } + modifier = { # Powerful vassals more likely + add = { + value = highest_held_title_tier + multiply = 5 + } + } + ### RELEVANCE + modifier = { # Fringe vassals more likely + factor = 1.25 + any_sub_realm_county = { + any_neighboring_county = { holder.top_liege != scope:ruler } + } + } + modifier = { # Core vassals less likely + factor = 0.75 + scope:ruler.capital_county.kingdom = { + any_de_jure_county = { this = scope:vassal_temp.capital_county } + } + } + ### FAMILY + modifier = { # Relatives of deposed more likely + factor = 1.1 + is_close_family_of = scope:ruler + NOT = { is_close_family_of = scope:adventurer } + } + modifier = { # Dynasts of deposed more likely + factor = 1.1 + dynasty ?= { + this = scope:ruler.dynasty + this != scope:adventurer.dynasty + } + } + modifier = { # Relatives of adventurer less likely + factor = 0.75 + is_close_family_of = scope:adventurer + NOT = { is_close_family_of = scope:ruler } + } + modifier = { # Dynasts of adventurer less likely + factor = 0.75 + dynasty ?= { + this = scope:adventurer.dynasty + this != scope:ruler.dynasty + } + } + ### HOOKS + modifier = { + factor = 0 + scope:adventurer = { has_hook = scope:vassal_temp } + } + modifier = { + factor = 2 + scope:ruler = { has_hook = scope:vassal_temp } + } + ### TIER + modifier = { + factor = 1.5 + scope:ruler.primary_title.tier = tier_empire + } + modifier = { + factor = 1.25 + scope:ruler.primary_title.tier = tier_kingdom + } + max = 95 + add_to_list = independent_vassals + } + } + # Save heirs for claimant wars + scope:title = { + every_title_heir = { + limit = { + save_temporary_scope_as = heir_temp + scope:title = { + place_in_line_of_succession = { + target = scope:heir_temp + value <= 5 + } + } + } + add_to_list = heirs + } + } + } + } +} + +adventurer_realm_destabilisation_civil_war_effect = { + $TITLE_GIVER$ = { save_scope_as = ruler } + $TITLE_RECEIVER$ = { save_scope_as = adventurer } + $TITLE$ = { save_scope_as = title } + if = { + limit = { + any_in_list = { list = independent_vassals } + } + scope:ruler = { + if = { + limit = { is_alive = yes } + save_scope_as = claimant + } + else_if = { + limit = { + any_in_list = { list = heirs } + } + random_in_list = { + list = heirs + limit = { has_strong_claim_on = scope:realm } + alternative_limit = { has_weak_claim_on = scope:realm } + weight = { + base = 1 + modifier = { add = age } + } + save_scope_as = claimant + } + } + else_if = { + limit = { + scope:title = { + any_claimant = { + this != scope:adventurer + } + } + } + scope:title = { + random_claimant = { + limit = { has_strong_claim_on = scope:realm } + alternative_limit = { has_weak_claim_on = scope:realm } + weight = { + base = 1 + modifier = { add = age } + } + save_scope_as = claimant + } + } + } + else = { + ordered_in_list = { + list = independent_vassals + order_by = max_military_strength + save_scope_as = claimant + } + } + } + # Vassals Breakaway + ordered_in_list = { + list = independent_vassals + limit = { + can_create_faction = { + type = claimant_faction + target = scope:adventurer + } + } + order_by = max_military_strength + save_scope_as = revolt_leader + create_faction = { + type = claimant_faction + target = scope:adventurer + } + joined_faction = { + save_scope_as = faction + set_special_character = scope:claimant + set_special_title = scope:realm + } + } + every_in_list = { + list = independent_vassals + limit = { + this != scope:revolt_leader + can_join_faction = scope:faction + } + join_faction = scope:faction + } + scope:faction = { + faction_start_war = { title = scope:realm } + } + } +} + +adventurer_realm_destabilisation_transfer_effect = { + $TITLE_RECEIVER$ = { save_scope_as = adventurer } + $TITLE_GIVER$ = { save_scope_as = ruler } + $TITLE$ = { save_scope_as = title } + if = { + limit = { + any_in_list = { list = independent_vassals } + } + # Vassals Breakaway + create_title_and_vassal_change = { + type = independency + add_claim_on_loss = yes + save_scope_as = change + } + hidden_effect = { + every_in_list = { + list = independent_vassals + save_temporary_scope_as = vassal_temp + if = { + limit = { + scope:adventurer = { top_liege = this } + scope:ruler = { + NOT = { + any_held_title = { + this != scope:title + any_in_de_jure_hierarchy = { this = scope:vassal_temp.primary_title } + } + } + } + } + becomes_independent = { change = scope:change } + } + else_if = { + limit = { + scope:ruler = { + NOT = { + any_held_title = { + this != scope:title + any_in_de_jure_hierarchy = { this = scope:vassal_temp.primary_title } + } + } + } + } + change_liege = { + liege = scope:adventurer.liege + change = scope:change + } + } + add_opinion = { + modifier = seized_lieges_realm_crime + target = scope:adventurer + } + } + } + resolve_title_and_vassal_change = scope:change + } + create_title_and_vassal_change = { + type = conquest + add_claim_on_loss = yes + save_scope_as = change + } + hidden_effect = { + every_in_list = { + list = $TITLE_LIST$ + limit = { tier >= tier_county } + custom_tooltip = CONQUEST_CB_TITLE + every_in_de_jure_hierarchy = { + continue = { tier >= tier_duchy } + limit = { + tier >= tier_county + holder ?= { + OR = { + this = scope:ruler + target_is_liege_or_above = scope:ruler + } + } + } + save_temporary_scope_as = title_temp + if = { + limit = { + holder != scope:adventurer + OR = { + holder = scope:ruler + holder.highest_held_title_tier >= scope:title.tier + scope:adventurer = { has_claim_on = scope:title_temp } + } + } + add_to_temporary_list = titles_taken + } + else = { + holder = { + if = { + limit = { + liege = scope:ruler + NOT = { is_in_list = independent_vassals } + } + add_to_temporary_list = vassals_taken + } + } + } + } + } + } + hidden_effect = { + every_in_list = { + list = vassals_taken + change_liege = { + liege = scope:adventurer + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change +} + +player_adventurer_contract_generation_on_domicile_moved_effect = { + if = { + limit = { player_adventurer_sufficient_distance_for_contract_spawn_trigger = yes } + save_temporary_scope_as = char_temp + if = { # Explorers + limit = { has_realm_law = camp_purpose_explorers } + populate_task_contracts_for_area = { + location = scope:char_temp.location + amount = 1 + group = { laamp_contracts_transport_group } + } + } + else_if = { # Mercenaries + limit = { has_realm_law = camp_purpose_mercenaries } + populate_task_contracts_for_area = { + location = scope:char_temp.location + amount = 1 + group = { laamp_contracts_war_group } + } + ordered_independent_ruler = { + limit = { + in_diplomatic_range = scope:char_temp + scope:char_temp = { + can_create_task_contract = { + type_name = laamp_join_war_contract + employer = prev + } + } + } + order_by = { + value = 0 + subtract = "capital_county.squared_distance(scope:char_temp.domicile.domicile_location)" + } + ordered_character_war = { + limit = { + ep3_adventurer_mercenary_war_trigger = { + EMPLOYER = prev + LAAMP = scope:char_temp + } + } + order_by = war_total_participants_current_strength_value + primary_defender ?= { save_scope_as = defender } + primary_attacker ?= { save_scope_as = attacker } + save_scope_as = war + scope:char_temp = { + spawn_join_war_contracts_effect = { + WAR = scope:war + LAAMP = scope:char_temp + ATTACKER = scope:attacker + DEFENDER = scope:defender + } + } + } + } + debug_log = "WAR_1" + debug_log_scopes = yes + } + populate_location_with_contracts_effect = { + AREA_CHAR = scope:char_temp + AMOUNT = 3 + } + # Log that we visited this place. + add_to_variable_list = { + name = laamp_recently_visited_kingdoms + target = scope:kingdom_temp + years = 5 + } + } +} + +player_adventurer_contract_generation_on_wait_in_place_effect = { + if = { + limit = { player_adventurer_sufficient_distance_for_contract_spawn_trigger = yes } + # Track where we are. + set_variable = { + name = contract_passive_spawn_location + value = location.kingdom + } + # Reset the tally. + set_variable = { + name = contract_passive_spawn_tally + value = 0 + } + # Queue up an additional contract. + trigger_event = { + id = ep3_laamps.9981 + months = { 4 6 } + } + } +} + +contract_passive_spawn_effect = { + #count how many contracts you already have + every_character_task_contract = { + add_to_list = num_of_contracts_before + } + # G'is a contract. + populate_location_with_contracts_effect = { + AREA_CHAR = root + AMOUNT = $SPAWN_CONTRACTS$ + } + #count them again to see if the effect above spawned something + every_character_task_contract = { + add_to_list = num_of_contracts_after + } + set_local_variable = { + name = current_value + value = list_size:num_of_contracts_before + } + # Make sure we don't get too many of them just sitting in one place. + while = { + limit = { + local_var:current_value < list_size:num_of_contracts_after + } + increment_variable_effect = { + VAR = contract_passive_spawn_tally + VAL = 1 + } + change_local_variable = { + name = current_value + add = 1 + } + } +} + +#spawns a valid task contract for a landless adventurer +# root = landless adventurer +# TASK_CONTRACT_TYPE = type name of a task contract you want to spawn +# SPAWN_POINT = where you want the task contract to appear on the map +laamp_spawn_valid_task_contract = { + $SPAWN_POINT$ = { + save_scope_as = spawn_location + } + random_ruler = { + limit = { + root = { + can_create_task_contract = { + type_name = $TASK_CONTRACT_TYPE$ + employer = prev + } + } + } + save_scope_as = employer + } + create_task_contract = { + task_contract_type = $TASK_CONTRACT_TYPE$ + task_contract_tier = scope:employer.task_contract_tier_value + location = scope:spawn_location + task_contract_employer = scope:employer + } +} + +points_of_interest_tracker_effect = { + if = { + limit = { + government_has_flag = government_is_landless_adventurer + location = { + save_temporary_scope_as = province_temp + OR = { + # Building flags + has_any_point_of_interest_flag = yes + # Capitals + AND = { + province_owner.top_liege.capital_province ?= this + province_owner.top_liege ?= { highest_held_title_tier >= tier_kingdom } + } + # Grand Cities + this = province:4828 #Baghdad + this = province:2575 #Rome + this = province:496 #Constantinople + # Points of interest + this = province:747 # Halikarnassos + this = province:6053 # Alexandria + # Legend stuff + any_legend = { + legend_owner.capital_province ?= scope:province_temp + OR = { + legend_quality = illustrious + legend_quality = mythical + } + } + } + } + } + if = { + limit = { + NOT = { + has_variable = poi_visited + } + } + set_variable = { + name = poi_visited + value = 1 + } + } + else = { + change_variable = { + name = poi_visited + add = 1 + } + } + } +} + +zealous_missionary_conversion_effect = { + if = { + limit = { + exists = location.barony.holder + government_has_flag = government_is_landless_adventurer + has_character_flag = zealous_missionary_timer + location.county ?= { hasan_evangelize_province_trigger = yes } + } + trigger_event = ep3_laamp_decision_event.1103 + } +} + +war_contracts_completed_tracker_effect = { + if = { + limit = { + government_has_flag = government_is_landless_adventurer + has_variable = war_contract_tracker + } + change_variable = { + name = war_contract_tracker + add = 1 + } + } + else_if = { + limit = { + government_has_flag = government_is_landless_adventurer + } + set_variable = { + name = war_contract_tracker + value = 1 + } + } +} + +bandit_king_maa_spawn_effect = { + + save_scope_as = bandit_king + if = { + limit = { + has_character_modifier = bandit_king_modifier + } + set_variable = { + name = maa_number + value = 1 + } + if = { + limit = { + scope:extra_reward ?= flag:yes + } + change_variable = { + name = maa_number + add = 2 + } + } + if = { + limit = { + calc_true_if = { + amount >= 4 + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 60 + } + } + } + change_variable = { + name = maa_number + add = 2 + } + } + else_if = { + limit = { + calc_true_if = { + amount >= 2 + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 60 + } + } + } + change_variable = { + name = maa_number + add = 1 + } + } + else_if = { + limit = { + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 60 + } + } + } + change_variable = { + name = maa_number + add = 1 + } + } + custom_tooltip = bandit_king_maa_spawn_effect_desc #otherwise the tooltip looks crazy + hidden_effect = { + random_list = { + 1 = { + spawn_army = { + men_at_arms = { + type = maa_poachers + stacks = var:maa_number + } + inheritable = no + uses_supply = yes + location = scope:bandit_king.location + name = ep3_poachers_army + } + spawn_army = { + men_at_arms = { + type = maa_thieves + stacks = var:maa_number + } + inheritable = no + uses_supply = yes + location = scope:bandit_king.location + name = ep3_bandits_army + } + } + 1 = { + spawn_army = { + men_at_arms = { + type = maa_bandits + stacks = var:maa_number + } + inheritable = no + uses_supply = yes + location = scope:bandit_king.location + name = ep3_bandits_army + } + spawn_army = { + men_at_arms = { + type = maa_thieves + stacks = var:maa_number + } + inheritable = no + uses_supply = yes + location = scope:bandit_king.location + name = ep3_bandits_army + } + } + } + } + } +} + +absolve_crusaders_of_gallowsbait_effect = { + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 1 + } + } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = crusader_absolution_xp_removed_per_track_value + } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 1 + } + } + add_trait_xp = { + trait = gallowsbait + track = trickster + value = crusader_absolution_xp_removed_per_track_value + } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 1 + } + } + add_trait_xp = { + trait = gallowsbait + track = thief + value = crusader_absolution_xp_removed_per_track_value + } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 1 + } + } + add_trait_xp = { + trait = gallowsbait + track = poacher + value = crusader_absolution_xp_removed_per_track_value + } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 1 + } + } + add_trait_xp = { + trait = gallowsbait + track = marauder + value = crusader_absolution_xp_removed_per_track_value + } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value <= crusader_absolution_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value <= crusader_absolution_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = thief + value <= crusader_absolution_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value <= crusader_absolution_min_xp_to_remove_trait_value + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value <= crusader_absolution_min_xp_to_remove_trait_value + } + } + remove_trait = gallowsbait + } +} + +temporarily_lock_visit_settlement_effect = { + set_variable = { + name = ep3_laamp_decision_1000_is_visiting + days = visit_settlement_lock_days + } +} + +################################################## +# Admin Government +################################################## + +torture_grants_influence_effect = { + if = { + limit = { + domicile ?= { has_domicile_parameter = estate_torture_grants_influence } + } + change_influence = medium_influence_gain + } +} + +create_noble_family_effect = { + debug_log = create_noble_family_title + save_scope_as = new_noble_family_holder + $GOVERNMENT_GIVER$ = { save_scope_as = government_giver } + hidden_effect = { # NF can only be held by house heads + if = { # Start by checking that we are not the house head already + limit = { + exists = house.house_head + NOT = { house.house_head = scope:new_noble_family_holder } + } + if = { # If not, let's see if it would be reasonable to become house head... + limit = { + house.house_head ?= { + is_ai = yes # Don't steal house head from a player + OR = { + # Within same realm but less important + AND = { + top_liege = scope:new_noble_family_holder.top_liege + OR = { + is_ruler = no + highest_held_title_tier < scope:new_noble_family_holder.highest_held_title_tier + } + } + # Wanderer + NOT = { exists = liege } + } + } + } + house = { set_house_head = scope:new_noble_family_holder } + } + else = { # ... Otherwise, we create a cadet branch + create_cadet_branch = {} + } + } + } + scope:government_giver = { + if = { + limit = { + scope:new_noble_family_holder = { + NOT = { + any_held_title = { is_noble_family_title = yes } + } + } + } + switch = { + trigger = has_government + japan_administrative_government = { # Japan has count level NFs + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = county + article = DEFAULT_TITLE_NAME_ARTICLE + government = japan_administrative_government + save_scope_as = new_title + } + } + } + japan_feudal_government = { # Japan has count level NFs + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = county + article = DEFAULT_TITLE_NAME_ARTICLE + government = japan_feudal_government + save_scope_as = new_title + } + } + } + celestial_government = { # China has different government + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = county + article = DEFAULT_TITLE_NAME_ARTICLE + government = celestial_government + save_scope_as = new_title + } + trigger_event = { + id = tgp_china_career.0001 + days = { 2 5 } + } + } + } + meritocratic_government = { # Meritocratic has different government + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = county + article = DEFAULT_TITLE_NAME_ARTICLE + government = meritocratic_government + save_scope_as = new_title + } + } + } + steppe_admin_government = { # Steppe Admin has different government + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = county + article = DEFAULT_TITLE_NAME_ARTICLE + government = steppe_admin_government + save_scope_as = new_title + } + } + } + fallback = { + scope:new_noble_family_holder = { + give_noble_family_title = { + name = noble_family_name + tier = duchy + article = DEFAULT_TITLE_NAME_ARTICLE + government = administrative_government + save_scope_as = new_title + } + } + } + } + } + scope:new_title.holder ?= { + save_scope_as = noble_family_head + scope:new_title = { set_coa = scope:noble_family_head.house } + } + custom_description = { text = create_noble_family_tt } + + #Notifications + every_player = { + limit = { + top_liege = scope:new_noble_family_holder.top_liege + this != scope:new_noble_family_holder + # China has hundreds of Noble Families, it gets spammy + NOT = { government_allows = merit } + } + trigger_event = { + id = ep3_emperor_yearly.2410 + days = 1 + } + } + } + + debug_log_scopes = yes +} + +increase_governance_effect = { + # VALUE - The amount of XP added to the Governor trait/increased chance to gain the Governor trait + save_scope_value_as = { + name = governor_xp_gain + value = { + value = $VALUE$ + if = { + limit = { + exists = scope:task_contract + } + multiply = governance_task_contract_tier_value + + if = { + limit = { + $VALUE$ > 0 + domicile ?= { has_domicile_parameter = estate_governor_trait_xp_bonus_for_contracts } + } + multiply = { + value = 1 + add = estate_governance_contract_bonus_value + } + } + } + } + } + # Double-check if you have the governor trait - If not, let's make sure you get it + if = { + limit = { + NOT = { has_trait = governor } + is_governor = yes + } + add_trait = governor + } + # If you have the trait, let's increase your XP for it + else_if = { + limit = { + has_trait = governor + } + add_trait_xp = { + trait = governor + value = scope:governor_xp_gain + } + } +} + +spawn_governance_contract_effect = { + save_scope_as = governor + # Select the Contract Tier (somewhat randomized, based on your experience as a governor) + random_list = { + 30 = { + save_scope_value_as = { + name = governance_task_contract_tier + value = define:NTaskContract|LOW_TASK_CONTRACT_TIER + } + } + 20 = { + save_scope_value_as = { + name = governance_task_contract_tier + value = define:NTaskContract|MEDIUM_TASK_CONTRACT_TIER + } + + modifier = { + add = 10 + has_trait = governor + } + modifier = { + add = 10 + has_trait = governor + has_trait_xp = { + trait = governor + value >= 40 + } + } + } + 10 = { + save_scope_value_as = { + name = governance_task_contract_tier + value = define:NTaskContract|HIGH_TASK_CONTRACT_TIER + } + + modifier = { + add = 10 + has_trait = governor + } + modifier = { + add = 10 + has_trait = governor + has_trait_xp = { + trait = governor + value >= 40 + } + } + modifier = { + add = 20 + has_trait = governor + has_trait_xp = { + trait = governor + value >= 80 + } + } + } + } + + # Select which contract to create + trigger_event = { + on_action = spawn_admin_governance_contract_on_action + } + + play_sound_effect = "event:/DLC/EP3/SFX/Stingers/Byzantine_Flavor/ep3_mx_sting_byzantineflavor_become_governor" +} + +manage_new_governance_contract_effect = { + if = { + limit = { exists = scope:target_province } + if = { + limit = { + NOT = { has_character_flag = admin_governance_frequency_cooldown } + } + add_character_flag = { flag = admin_governance_frequency_cooldown years = 6 } + } + send_interface_message = { + type = msg_governance_contracts + title = msg_governance_contract_appear.t + desc = msg_governance_contract_appear.desc + right_icon = scope:target_province.county + } + } + if = { + limit = { + is_ai = yes + exists = scope:new_governance_issue + } + accept_task_contract = scope:new_governance_issue + } +} + +generate_governance_outcome_effect = { + # INFO: We use this effect to randomize the options you get when doing a governor contract. + # $OPTIONS$ is the number of options the event has - Never use less than four, and try to have six if possible. + + # Unlock a bonus option if you have enough exp in the Governor trait - We do this here (and not in the option) to avoid blocking the option due to exp decay (if game is unpaused). + if = { + limit = { + has_trait = governor + has_trait_xp = { + trait = governor + value >= 50 + } + } + save_scope_as = governance_option_a + } + + # Check if you have the Governor trait + if = { + limit = { # If you have the trait with at least rank 1, we generate an extra option. + has_trait = governor + has_trait_xp = { + trait = governor + value >= 25 + } + } + save_scope_value_as = { name = governance_number_of_options value = 3 } + } + else = { # Otherwise, you only get two base options. + save_scope_value_as = { name = governance_number_of_options value = 2 } + } + + # Generate the options + set_local_variable = { + name = current_value + value = 0 + } + while = { + limit = { + local_var:current_value < scope:governance_number_of_options + } + random_list = { + # There is no option A, as A should be unlocked for having the Governor trait at rank 2 (which is done in the corresponding event) + 20 = { + trigger = { + NOT = { exists = scope:governance_option_b } + } + save_scope_value_as = { + name = governance_option_b + value = yes + } + change_local_variable = { + name = current_value + add = 1 + } + } + 20 = { + trigger = { + NOT = { exists = scope:governance_option_c } + } + save_scope_value_as = { + name = governance_option_c + value = yes + } + change_local_variable = { + name = current_value + add = 1 + } + } + 20 = { + trigger = { + NOT = { exists = scope:governance_option_d } + } + save_scope_value_as = { + name = governance_option_d + value = yes + } + change_local_variable = { + name = current_value + add = 1 + } + } + 20 = { + trigger = { + NOT = { exists = scope:governance_option_e } + $OPTIONS$ >= 5 + } + save_scope_value_as = { + name = governance_option_e + value = yes + } + change_local_variable = { + name = current_value + add = 1 + } + } + 20 = { + trigger = { + NOT = { exists = scope:governance_option_f } + $OPTIONS$ >= 6 + } + save_scope_value_as = { + name = governance_option_f + value = yes + } + change_local_variable = { + name = current_value + add = 1 + } + } + } + } +} + +remove_other_eparch_modifiers_effect = { + hidden_effect = { # No need to show this + # Let's check for the county opinion modifier first + scope:liege ?= { + # We check and scope to all counties to make sure we remove any stray modifiers in case the capital is moved, etc. + if = { + limit = { + any_realm_county = { + any_county_province = { + has_province_modifier = ep3_eparch_county_opinion_modifier + } + } + } + every_realm_county = { + limit = { + any_county_province = { + has_province_modifier = ep3_eparch_county_opinion_modifier + } + } + every_county_province = { + limit = { + has_province_modifier = ep3_eparch_county_opinion_modifier + } + remove_province_modifier = ep3_eparch_county_opinion_modifier + } + } + } + } + + # Next is the troop modifier + scope:liege ?= { + # We check and scope to all counties to make sure we remove any stray modifiers in case the capital is moved, etc. + if = { + limit = { + any_realm_county = { + any_county_province = { + has_province_modifier = ep3_eparch_troops_modifier + } + } + } + every_realm_county = { + limit = { + any_county_province = { + has_province_modifier = ep3_eparch_troops_modifier + } + } + every_county_province = { + limit = { + has_province_modifier = ep3_eparch_troops_modifier + } + remove_province_modifier = ep3_eparch_troops_modifier + } + } + } + } + + # Next is the county control modifier + scope:liege ?= { + # We check and scope to all counties to make sure we remove any stray modifiers in case the capital is moved, etc. + if = { + limit = { + any_realm_county = { + any_county_province = { + has_province_modifier = ep3_eparch_control_modifier + } + } + } + every_realm_county = { + limit = { + any_county_province = { + has_province_modifier = ep3_eparch_control_modifier + } + } + every_county_province = { + limit = { + has_province_modifier = ep3_eparch_control_modifier + } + remove_province_modifier = ep3_eparch_control_modifier + } + } + } + } + + # And finally, the development modifier + scope:liege ?= { + # We check and scope to all counties to make sure we remove any stray modifiers in case the capital is moved, etc. + if = { + limit = { + any_realm_county = { + any_county_province = { + has_province_modifier = ep3_eparch_development_modifier + } + } + } + every_realm_county = { + limit = { + any_county_province = { + has_province_modifier = ep3_eparch_development_modifier + } + } + every_county_province = { + limit = { + has_province_modifier = ep3_eparch_development_modifier + } + remove_province_modifier = ep3_eparch_development_modifier + } + } + } + } + } +} + +eparch_neglecting_duty_effect = { + custom_tooltip = { + text = eparch_neglecting_duty_warning_tt + + # We check if you have neglected duties in the past + if = { + limit = { + exists = var:eparch_neglecting_duty + } + # If you have, let's first increase the variable + change_variable = { name = eparch_neglecting_duty add = 5 } + + # Then check if the liege notices and decide to take action + random = { + chance = { + # Base value - Increases with each neglecting action + value = var:eparch_neglecting_duty + + # Add the difference in intrigue skill + add = { + value = liege.intrigue + subtract = intrigue + } + + # Add the difference in influence level + add = { + value = liege.influence_level + subtract = influence_level + multiply = 5 + } + + # Lower the chance if you belong to a powerful or dominant family + if = { + limit = { + house ?= { is_powerful_family = yes } + } + subtract = 10 + } + if = { + limit = { + house ?= { is_dominant_family = yes } + } + subtract = 20 + } + + min = 5 + max = 90 + } + + # The liege have noticed - We reduce the variable slightly as a result (but never below 0) + if = { + limit = { + exists = var:eparch_neglecting_duty + var:eparch_neglecting_duty >= 20 + } + change_variable = { name = eparch_neglecting_duty subtract = 20 } + } + else = { + set_variable = { name = eparch_neglecting_duty value = 0 } + } + + liege = { + trigger_event = { id = ep3_eparch_event.9000 days = { 10 90 } } + } + } + } + else = { # If you haven't, we'll set the variable and give you a free pass (you only get it for your very first time though) + set_variable = { name = eparch_neglecting_duty value = 0 } + } + } +} + +add_influence_attacker_victory_effect = { + scope:attacker = { + if = { + limit = { government_has_flag = government_has_influence } + change_influence = major_influence_gain + } + } +} + +add_influence_attacker_defeat_effect = { + scope:defender = { + if = { + limit = { government_has_flag = government_has_influence } + change_influence = medium_influence_gain + } + } +} + +admin_change_government_effect = { + # Make sure you only use this effect on characters you are sure should change government! Since we don't do any extended triggers here. + # For a consistent behaviour, this effect is based on "convert_whole_realm_to_feudalism_effect" + + # First, let's see if the character only has their noble family title - then we don't bother changing their government + # We only destroy the family title to make sure it doesn't linger + if = { + limit = { + is_landed = no + any_held_title = { + is_noble_family_title = yes + } + NOT = { + any_held_title = { + is_noble_family_title = no + } + } + } + every_held_title = { + limit = { + is_noble_family_title = yes + } + save_temporary_scope_as = family_title + prev = { destroy_title = scope:family_title } + } + } + + # If not, let's change the government type + # If liege has clan - Become clan! + else_if = { + limit = { + top_liege != this + OR = { + liege = { government_has_flag = government_is_clan } + AND = { + liege = { government_has_flag = government_is_tribal } + religion = religion:islam_religion + } + } + } + change_government = clan_government + } + # If liege has japanese feudal - Become japanese feudal! + else_if = { + limit = { + is_independent_ruler = no + OR = { + liege = { government_has_flag = government_is_japan_feudal } + AND = { + liege = { government_has_flag = government_is_japan_feudal } + NOT = { religion = religion:islam_religion } + } + } + } + change_government = japan_feudal_government + } + # If liege has feudal - Become feudal! + else_if = { + limit = { + top_liege != this + OR = { + liege = { government_has_flag = government_is_feudal } + AND = { + liege = { government_has_flag = government_is_tribal } + NOT = { religion = religion:islam_religion } + } + } + } + change_government = feudal_government + } + # If you're an independent Muslim ruler - Become clan! + else_if = { + limit = { + top_liege = this + faith = { religion_tag = islam_religion } + } + change_government = clan_government + } + # If you're an independent ruler with anything else - Become feudal! + else = { change_government = feudal_government } + + # Finally, let's double-check and see if there are any remaining family titles we should destroy + if = { + limit = { + any_held_title = { + is_noble_family_title = yes + } + } + every_held_title = { + limit = { + is_noble_family_title = yes + } + save_temporary_scope_as = family_title + prev = { destroy_title = scope:family_title } + } + } +} + +################################################## +# Dynasty Legacy: Bureaucracy +################################################## + +ep3_dynasty_legacy_add_legitimacy_effect = { + scope:activity = { + if = { + limit = { + scope:host = { + government_allows = administrative + OR = { + dynasty = { has_dynasty_perk = ep3_administrative_legacy_3 } + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + } + # Does the activity location have a domicile owned by a house member + # Does that domicile have the Reception Hall building + activity_location = { + any_province_domicile = { + owner = { house ?= scope:host.house } + OR = { + has_domicile_building_or_higher = reception_hall_01 + has_domicile_building_or_higher = east_asian_estate_reception_hall_01 + } + } + } + } + activity_location = { + random_province_domicile = { + limit = { + owner = { house ?= scope:host.house } + OR = { + has_domicile_building_or_higher = reception_hall_01 + has_domicile_building_or_higher = east_asian_estate_reception_hall_01 + } + } + owner = { save_scope_as = reception_hall_owner } + } + } + scope:host = { + house = { + if = { + limit = { + NOT = { + has_variable = ep3_legacy_legitimacy_counter + } + } + # Set the initial value + set_variable = { + name = ep3_legacy_legitimacy_counter + value = 10 + } + } + else = { + change_variable = { + name = ep3_legacy_legitimacy_counter + add = 10 + } + } + } + if = { + limit = { + primary_title.tier = tier_empire + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_dynasty_legacy_gain_legitimacy_effect_title + left_icon = scope:host + right_icon = scope:host.primary_title + add_legitimacy = 10 + } + } + else = { + house = { + every_house_member = { + limit = { is_ai = no } + send_interface_message = { + type = event_generic_good_text + title = ep3_dynasty_legacy_add_legitimacy_effect_title + desc = ep3_dynasty_legacy_add_legitimacy_effect_desc + left_icon = scope:host + right_icon = house + } + } + } + } + } + } + } +} + +################################################## +# Byzantium +################################################## + +remove_a_criminal_trait_in_faith_effect = { + $CHARACTER$ = { + if = { + limit = { + has_trait = adulterer + trait_is_criminal_in_faith_trigger = { TRAIT = adulterer FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = adulterer + } + else_if = { + limit = { + has_trait = fornicator + trait_is_criminal_in_faith_trigger = { TRAIT = fornicator FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = fornicator + } + else_if = { + limit = { + has_trait = sodomite + trait_is_criminal_in_faith_trigger = { TRAIT = sodomite FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = sodomite + } + else_if = { + limit = { + has_trait = deviant + trait_is_criminal_in_faith_trigger = { TRAIT = deviant FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = deviant + } + else_if = { + limit = { + has_trait = kinslayer_3 + trait_is_criminal_in_faith_trigger = { TRAIT = kinslayer_3 FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = kinslayer_3 + } + else_if = { + limit = { + has_trait = kinslayer_2 + trait_is_criminal_in_faith_trigger = { TRAIT = kinslayer_2 FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = kinslayer_2 + } + else_if = { + limit = { + has_trait = kinslayer_1 + trait_is_criminal_in_faith_trigger = { TRAIT = kinslayer_1 FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = kinslayer_1 + } + else_if = { + limit = { + has_trait = witch + trait_is_criminal_in_faith_trigger = { TRAIT = witch FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = witch + } + else_if = { + limit = { + has_trait = cannibal + trait_is_criminal_in_faith_trigger = { TRAIT = cannibal FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = cannibal + } + else_if = { + limit = { + has_trait = incestuous + trait_is_criminal_in_faith_trigger = { TRAIT = incestuous FAITH = $FAITH$ GENDER_CHARACTER = $CHARACTER$ } + } + remove_trait = incestuous + } + } +} + +################################################## +# Chariot Races +################################################## + +gather_charioteers_effect = { + scope:activity = { + random_list = { + 50 = { + set_variable = { + name = num_blues + value = 2 + } + } + 50 = { + set_variable = { + name = num_blues + value = 3 + } + } + } + random_list = { + 50 = { + set_variable = { + name = num_greens + value = 2 + } + } + 50 = { + set_variable = { + name = num_greens + value = 3 + } + } + } + random_list = { + 50 = { + set_variable = { + name = num_whites + value = 2 + } + } + 50 = { + set_variable = { + name = num_whites + value = 3 + } + } + } + random_list = { + 50 = { + set_variable = { + name = num_reds + value = 2 + } + } + 50 = { + set_variable = { + name = num_reds + value = 3 + } + } + } + + ordered_attending_character = { + order_by = chariot_ordering_value + max = 12 + check_range_bounds = no + save_temporary_scope_as = temp_character + if = { + limit = { + OR = { + has_court_position = charioteer_court_position + trigger_if = { + limit = { + available_charioteers_spots_trigger = { TEAM = green } + } + has_trait = charioteer_green + } + trigger_if = { + limit = { + available_charioteers_spots_trigger = { TEAM = blue } + } + has_trait = charioteer_blue + } + trigger_if = { + limit = { + available_charioteers_spots_trigger = { TEAM = red } + } + has_trait = charioteer_red + } + trigger_if = { + limit = { + available_charioteers_spots_trigger = { TEAM = white } + } + has_trait = charioteer_white + } + } + } + scope:activity = { + add_to_guest_subset = { + name = charioteers + target = scope:temp_character + } + } + } + } + + # Finalize the list of charioteers + chariot_racers_setup_effect = { TEAM = green } + chariot_racers_setup_effect = { TEAM = blue } + chariot_racers_setup_effect = { TEAM = red } + chariot_racers_setup_effect = { TEAM = white } + # And filter everyone remaining to spectators. + every_attending_character = { + limit = { + NOT = { + is_in_guest_subset = { name = charioteers } + } + } + save_scope_as = temp_character + scope:activity = { + add_to_guest_subset = { + name = spectators + target = scope:temp_character + } + } + } + } +} + +chariot_racers_setup_effect = { # If you need to create additional racers + while = { + count = 5 + limit = { + available_charioteers_spots_trigger = { TEAM = $TEAM$ } + } + create_character = { + template = charioteer_template + employer = scope:activity.activity_host + save_scope_as = temp_charioteer + } + scope:temp_charioteer = { + add_trait = charioteer_$TEAM$ + add_trait_xp = { + trait = charioteer_$TEAM$ + value = { 5 50 } + } + add_to_activity = scope:activity + } + scope:activity = { + add_to_guest_subset = { + name = charioteers + target = scope:temp_charioteer + } + } + } +} + +# Each character is assigned Odds to Win, Odds to Place, and Odds to Show +# Win: come in first place +# Place: come in first or second place +# Show: come in first, second, or third place +calculate_chariot_race_odds_effect = { + calculate_chariot_odds_to_win_effect = yes + calculate_chariot_odds_to_place_effect = yes + calculate_chariot_odds_to_show_effect = yes +} + +# Odds are represented in the format A:B, where A is the number of ways/opportunities a character has to succeed, and B represents how many ways/opportunities they have to fail +# These same calculations are done for the teams overall +# Individual odds are saved on the individual character +# Team odds are saved on the activity scope +calculate_chariot_odds_to_win_effect = { + scope:activity = { + ### INDIVIDUAL ODDS + # Set odds to win + set_variable = { + name = total_chance_win + value = 0 + } + # Set odds_win_a (number of ways to win) + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_win_a + value = charioteer_chance_to_win + } + scope:activity = { + change_variable = { + name = total_chance_win + add = { + value = prev.charioteer_chance_to_win + min = 1 + } + } + } + } + # set odds_win_b (number of ways to lose) + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_win_b + value = { + value = scope:activity.var:total_chance_win + subtract = var:odds_win_a + min = 1 + } + } + } + + # Calc percent chance to win + every_guest_subset = { + name = charioteers + set_variable = { + name = percent_chance_to_win + value = { + add = var:odds_win_a + divide = { + value = 0 + add = var:odds_win_a + add = var:odds_win_b + } + multiply = 100 + min = 1 + max = 99 + } + } + } + ########## + + ### TEAM ODDS + # For each of the 4 teams, we calculate their odds to win/place/show. These variables are saved on the activity + # BLUES + # Initialize variables + set_variable = { + name = blue_odds_win_a + value = 0 + } + set_variable = { + name = blue_odds_win_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_blue } + scope:activity = { + change_variable = { + name = blue_odds_win_a + add = { + value = prev.var:odds_win_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = blue_odds_win_b + add = { + value = var:total_chance_win + subtract = var:blue_odds_win_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = blue_percent_chance_to_win + value = { + add = var:blue_odds_win_a + divide = { + value = 0 + add = var:blue_odds_win_a + add = var:blue_odds_win_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # GREENS + # Initialize variables + set_variable = { + name = green_odds_win_a + value = 0 + } + set_variable = { + name = green_odds_win_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_green } + scope:activity = { + change_variable = { + name = green_odds_win_a + add = { + value = prev.var:odds_win_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = green_odds_win_b + add = { + value = var:total_chance_win + subtract = var:green_odds_win_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = green_percent_chance_to_win + value = { + add = var:green_odds_win_a + divide = { + value = 0 + add = var:green_odds_win_a + add = var:green_odds_win_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # WHITES + # Initialize variables + set_variable = { + name = white_odds_win_a + value = 0 + } + set_variable = { + name = white_odds_win_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_white } + scope:activity = { + change_variable = { + name = white_odds_win_a + add = { + value = prev.var:odds_win_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = white_odds_win_b + add = { + value = var:total_chance_win + subtract = var:white_odds_win_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = white_percent_chance_to_win + value = { + add = var:white_odds_win_a + divide = { + value = 0 + add = var:white_odds_win_a + add = var:white_odds_win_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # REDS + # Initialize variables + set_variable = { + name = red_odds_win_a + value = 0 + } + set_variable = { + name = red_odds_win_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_red } + scope:activity = { + change_variable = { + name = red_odds_win_a + add = { + value = prev.var:odds_win_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = red_odds_win_b + add = { + value = var:total_chance_win + subtract = var:red_odds_win_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = red_percent_chance_to_win + value = { + add = var:red_odds_win_a + divide = { + value = 0 + add = var:red_odds_win_a + add = var:red_odds_win_b + } + multiply = 100 + min = 1 + max = 99 + } + } + } +} + +calculate_chariot_odds_to_place_effect = { + scope:activity = { + ### INDIVIDUAL ODDS + # Set odds to place + set_variable = { + name = total_chance_place + value = 0 + } + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_place_a + value = { + value = charioteer_chance_to_win + multiply = 2 + } + } + scope:activity = { + change_variable = { + name = total_chance_place + add = { + value = prev.charioteer_chance_to_win + min = 1 + } + } + } + } + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_place_b + value = { + value = scope:activity.var:total_chance_place + subtract = var:odds_place_a + min = 1 + } + } + } + + # Calc percent chance to win + every_guest_subset = { + name = charioteers + set_variable = { + name = percent_chance_to_place + value = { + add = var:odds_place_a + divide = { + value = 0 + add = var:odds_place_a + add = var:odds_place_b + } + multiply = 100 + min = 1 + max = 99 + } + } + } + ########## + + ### TEAM ODDS + # For each of the 4 teams, we calculate their odds to win/place/show. These variables are saved on the activity + # Initialize variables + set_variable = { + name = blue_odds_place_a + value = 0 + } + set_variable = { + name = blue_odds_place_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_blue } + scope:activity = { + change_variable = { + name = blue_odds_place_a + add = { + value = prev.var:odds_place_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = blue_odds_place_b + add = { + value = var:total_chance_place + subtract = var:blue_odds_place_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = blue_percent_chance_to_place + value = { + add = var:blue_odds_place_a + divide = { + value = 0 + add = var:blue_odds_place_a + add = var:blue_odds_place_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # GREENS + # Initialize variables + set_variable = { + name = green_odds_place_a + value = 0 + } + set_variable = { + name = green_odds_place_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_green } + scope:activity = { + change_variable = { + name = green_odds_place_a + add = { + value = prev.var:odds_place_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = green_odds_place_b + add = { + value = var:total_chance_place + subtract = var:green_odds_place_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = green_percent_chance_to_place + value = { + add = var:green_odds_place_a + divide = { + value = 0 + add = var:green_odds_place_a + add = var:green_odds_place_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # WHITES + # Initialize variables + set_variable = { + name = white_odds_place_a + value = 0 + } + set_variable = { + name = white_odds_place_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_white } + scope:activity = { + change_variable = { + name = white_odds_place_a + add = { + value = prev.var:odds_place_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = white_odds_place_b + add = { + value = var:total_chance_place + subtract = var:white_odds_place_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = white_percent_chance_to_place + value = { + add = var:white_odds_place_a + divide = { + value = 0 + add = var:white_odds_place_a + add = var:white_odds_place_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + + # REDS + # Initialize variables + set_variable = { + name = red_odds_place_a + value = 0 + } + set_variable = { + name = red_odds_place_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_red } + scope:activity = { + change_variable = { + name = red_odds_place_a + add = { + value = prev.var:odds_place_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = red_odds_place_b + add = { + value = var:total_chance_place + subtract = var:red_odds_place_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = red_percent_chance_to_place + value = { + add = var:red_odds_place_a + divide = { + value = 0 + add = var:red_odds_place_a + add = var:red_odds_place_b + } + multiply = 100 + min = 1 + max = 99 + } + } + } +} + +calculate_chariot_odds_to_show_effect = { + scope:activity = { + ### INDIVIDUAL ODDS + # Set odds to show + set_variable = { + name = total_chance_show + value = 0 + } + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_show_a + value = { + value = charioteer_chance_to_win + multiply = 3 + min = 1 + } + } + scope:activity = { + change_variable = { + name = total_chance_show + add = { + value = prev.charioteer_chance_to_win + min = 1 + } + } + } + } + every_guest_subset = { + name = charioteers + set_variable = { + name = odds_show_b + value = { + value = scope:activity.var:total_chance_show + subtract = var:odds_show_a + min = 1 + } + } + } + + # Calc percent chance to show + every_guest_subset = { + name = charioteers + set_variable = { + name = percent_chance_to_show + value = { + add = var:odds_show_a + divide = { + value = var:odds_show_a + add = scope:activity.var:total_chance_show + } + multiply = 100 + min = 1 + max = 99 + } + } + } + ########## + + ### TEAM ODDS + # For each of the 4 teams, we calculate their odds to win/place/show. These variables are saved on the activity + # BLUES + # Initialize variables + set_variable = { + name = blue_odds_show_a + value = 0 + } + set_variable = { + name = blue_odds_show_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_blue } + scope:activity = { + change_variable = { + name = blue_odds_show_a + add = { + value = prev.var:odds_show_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = blue_odds_show_b + add = { + value = var:total_chance_show + subtract = var:blue_odds_show_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = blue_percent_chance_to_show + value = { + add = var:blue_odds_show_a + divide = { + value = 0 + add = var:blue_odds_show_a + add = var:blue_odds_show_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # GREENS + # Initialize variables + set_variable = { + name = green_odds_show_a + value = 0 + } + set_variable = { + name = green_odds_show_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_green } + scope:activity = { + change_variable = { + name = green_odds_show_a + add = { + value = prev.var:odds_show_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = green_odds_show_b + add = { + value = var:total_chance_show + subtract = var:green_odds_show_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = green_percent_chance_to_show + value = { + add = var:green_odds_show_a + divide = { + value = 0 + add = var:green_odds_show_a + add = var:green_odds_show_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # WHITES + # Initialize variables + set_variable = { + name = white_odds_show_a + value = 0 + } + set_variable = { + name = white_odds_show_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_white } + scope:activity = { + change_variable = { + name = white_odds_show_a + add = { + value = prev.var:odds_show_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = white_odds_show_b + add = { + value = var:total_chance_show + subtract = var:white_odds_show_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = white_percent_chance_to_show + value = { + add = var:white_odds_show_a + divide = { + value = 0 + add = var:white_odds_show_a + add = var:white_odds_show_b + } + multiply = 100 + min = 1 + max = 99 + } + } + + # REDS + # Initialize variables + set_variable = { + name = red_odds_show_a + value = 0 + } + set_variable = { + name = red_odds_show_b + value = 0 + } + + # Account for each team member + every_guest_subset = { + name = charioteers + limit = { has_trait = charioteer_red } + scope:activity = { + change_variable = { + name = red_odds_show_a + add = { + value = prev.var:odds_show_a + min = 1 + } + } + } + } + # Set the B variable based on the total amount of chance - the opporutnity for success + change_variable = { + name = red_odds_show_b + add = { + value = var:total_chance_show + subtract = var:red_odds_show_a + min = 1 + } + } + # Calculate the percentage chance of success for readability + set_variable = { + name = red_percent_chance_to_show + value = { + add = var:red_odds_show_a + divide = { + value = 0 + add = var:red_odds_show_a + add = var:red_odds_show_b + } + multiply = 100 + min = 1 + max = 99 + } + } + } +} + +calculate_chariot_payout_effect = { + scope:activity = { + every_guest_subset = { + name = charioteers + set_variable = { + name = win_payout + value = { + add = var:odds_win_b + subtract = { + value = var:odds_win_b + multiply = 0.3 + } + save_temporary_value_as = temp_val + subtract = { + value = scope:temp_val + multiply = bookkeeper_small_commission_value + round = yes + } + divide = var:odds_win_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = place_payout + value = { + add = var:odds_place_b + subtract = { + value = var:odds_place_b + multiply = 0.3 + } + save_temporary_value_as = temp_val + subtract = { + value = scope:temp_val + multiply = bookkeeper_medium_commission_value + round = yes + } + divide = var:odds_place_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = show_payout + value = { + add = var:odds_show_b + subtract = { + value = var:odds_show_b + multiply = 0.3 + } + save_temporary_value_as = temp_val + subtract = { + value = scope:temp_val + multiply = bookkeeper_large_commission_value + round = yes + } + divide = var:odds_show_a + add = 1 + min = 1.1 + } + } + } + set_variable = { + name = blue_win_payout + value = { + add = var:blue_odds_win_b + subtract = { + value = var:blue_odds_win_b + multiply = bookkeeper_small_commission_value + round = yes + } + divide = var:blue_odds_win_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = blue_place_payout + value = { + add = var:blue_odds_place_b + subtract = { + value = var:blue_odds_place_b + multiply = bookkeeper_medium_commission_value + round = yes + } + divide = var:blue_odds_place_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = blue_show_payout + value = { + add = var:blue_odds_show_b + subtract = { + value = var:blue_odds_show_b + multiply = bookkeeper_large_commission_value + round = yes + } + divide = var:blue_odds_show_a + add = 1 + min = 1.1 + } + } + + set_variable = { + name = green_win_payout + value = { + add = var:green_odds_win_b + subtract = { + value = var:green_odds_win_b + multiply = bookkeeper_small_commission_value + round = yes + } + divide = var:green_odds_win_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = green_place_payout + value = { + add = var:green_odds_place_b + subtract = { + value = var:green_odds_place_b + multiply = bookkeeper_medium_commission_value + round = yes + } + divide = var:green_odds_place_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = green_show_payout + value = { + add = var:green_odds_show_b + subtract = { + value = var:green_odds_show_b + multiply = bookkeeper_large_commission_value + round = yes + } + divide = var:green_odds_show_a + add = 1 + min = 1.1 + } + } + + set_variable = { + name = white_win_payout + value = { + add = var:white_odds_win_b + subtract = { + value = var:white_odds_win_b + multiply = bookkeeper_small_commission_value + round = yes + } + divide = var:white_odds_win_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = white_place_payout + value = { + add = var:white_odds_place_b + subtract = { + value = var:white_odds_place_b + multiply = bookkeeper_medium_commission_value + round = yes + } + divide = var:white_odds_place_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = white_show_payout + value = { + add = var:white_odds_show_b + subtract = { + value = var:white_odds_show_b + multiply = bookkeeper_large_commission_value + round = yes + } + divide = var:white_odds_show_a + add = 1 + min = 1.1 + } + } + + set_variable = { + name = red_win_payout + value = { + add = var:red_odds_win_b + subtract = { + value = var:red_odds_win_b + multiply = bookkeeper_small_commission_value + round = yes + } + divide = var:red_odds_win_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = red_place_payout + value = { + add = var:red_odds_place_b + subtract = { + value = var:red_odds_place_b + multiply = bookkeeper_medium_commission_value + round = yes + } + divide = var:red_odds_place_a + add = 1 + min = 1.1 + } + } + set_variable = { + name = red_show_payout + value = { + add = var:red_odds_show_b + subtract = { + value = var:red_odds_show_b + multiply = bookkeeper_large_commission_value + round = yes + } + divide = var:red_odds_show_a + add = 1 + min = 1.1 + } + } + + } +} + +set_or_increment_lucky_better_variable = { + if = { + limit = { + NOT = { has_variable = lucky_bet_counter } + } + set_variable = { + name = lucky_bet_counter + value = 1 + } + } + else = { + change_variable = { + name = lucky_bet_counter + add = 1 + } + if = { + limit = { + var:lucky_bet_counter >= 5 + has_any_nickname = no + } + send_interface_toast = { + # works for our purposes "New Nickname" + title = sell_titles_nickname_gained + left_icon = this + give_nickname = nick_the_lucky + } + } + } +} + +disburse_chariot_race_activity_host_rewards = { + scope:activity = { + add_activity_log_entry = { + key = chariot_race_host_rewards + score = 100 + show_in_conclusion = yes + character = root + location = root.location + + root = { + # Some base influence + change_influence = medium_influence_gain + # Extra influence rewards for having a successful wager + if = { + limit = { + has_character_flag = successful_bet + has_variable = wager_type + } + switch = { + trigger = var:wager_type + flag:win = { + change_influence = medium_influence_gain + } + flag:place = { + change_influence = minor_influence_gain + } + flag:show = { + change_influence = miniscule_influence_gain + } + } + } + + # Rewards for employing a charioteer who wins/places/shows + if = { + limit = { employs_court_position = charioteer_court_position } + if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:first_place ?= this + } + } + change_influence = monumental_influence_gain + } + else_if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:second_place ?= this + } + } + change_influence = massive_influence_gain + } + else_if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:third_place ?= this + } + } + change_influence = major_influence_gain + } + } + + #Legitimacy and popular opinion for how fancy your chariot races were + if = { + limit = { + scope:activity = { + has_activity_option = { + category = chariot_option_entertainment + option = chariot_entertainment_bad + } + } + } + if = { + limit = { + scope:host.capital_county = { + county_opinion > 0 + } + } + add_legitimacy = miniscule_legitimacy_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = major_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + custom_tooltip = chariot_race_reward_high_county_opinion_tt + } + else_if = { + limit = { + scope:host.capital_county = { + county_opinion <= -50 + } + } + add_legitimacy = 5 + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = medium_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + custom_tooltip = chariot_race_reward_low_county_opinion_tt + } + else = { + add_legitimacy = 10 + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = chariot_option_entertainment + option = chariot_entertainment_normal + } + } + } + if = { + limit = { + scope:host.capital_county = { + county_opinion > 0 + } + } + add_legitimacy = minor_legitimacy_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = massive_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + capital_county = { + change_county_control = miniscule_county_control_gain + } + + custom_tooltip = chariot_race_reward_high_county_opinion_tt + } + else_if = { + limit = { + scope:host.capital_county = { + county_opinion <= -50 + } + } + add_legitimacy = 10 + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = major_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + custom_tooltip = chariot_race_reward_low_county_opinion_tt + } + else = { + add_legitimacy = miniscule_legitimacy_gain + } + scope:host.capital_county = { + add_county_modifier = { + modifier = ep3_chariot_race_weak_appeasement_modifier + years = 10 + } + } + } + else_if = { + limit = { + scope:activity = { + has_activity_option = { + category = chariot_option_entertainment + option = chariot_entertainment_good + } + } + } + if = { + limit = { + scope:host.capital_county = { + county_opinion > 0 + } + } + add_legitimacy = medium_legitimacy_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = monumental_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + capital_county = { + change_county_control = minor_county_control_gain + } + custom_tooltip = chariot_race_reward_high_county_opinion_tt + } + else_if = { + limit = { + scope:host.capital_county = { + county_opinion <= -50 + } + } + add_legitimacy = miniscule_legitimacy_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = miniscule_stress_loss + athletic = massive_stress_loss + gregarious = miniscule_stress_loss + } + } + custom_tooltip = chariot_race_reward_low_county_opinion_tt + } + else = { + add_legitimacy = minor_legitimacy_gain + } + scope:host.capital_county = { + add_county_modifier = { + modifier = ep3_chariot_race_strong_appeasement_modifier + years = 10 + } + } + } + } + } + } +} + +disburse_chariot_race_activity_spectator_rewards = { + # Some smaller amounts of Influence rewards for having a successful wager + if = { + limit = { + has_character_flag = successful_bet + has_variable = wager_type + } + switch = { + trigger = var:wager_type + flag:win = { + change_influence = medium_influence_gain + } + flag:place = { + change_influence = minor_influence_gain + } + flag:show = { + change_influence = miniscule_influence_gain + } + } + } + + # Rewards for employing a charioteer who wins/places/shows + # You get more influence if your charioteer is successful + if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:first_place ?= this + } + } + change_influence = monumental_influence_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = monumental_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + } + else_if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:second_place ?= this + } + } + change_influence = massive_influence_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = massive_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + } + else_if = { + limit = { + any_court_position_holder = { + type = charioteer_court_position + scope:activity.var:third_place ?= this + } + } + change_influence = major_influence_gain + if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = massive_stress_loss + athletic = miniscule_stress_loss + gregarious = miniscule_stress_loss + } + } + } + else_if = { + limit = { has_activity_intent = reduce_stress_intent } + stress_impact = { + base = miniscule_stress_loss + athletic = major_stress_loss + gregarious = miniscule_stress_loss + } + } +} + +disburse_chariot_race_activity_charioteer_rewards = { + # Give them some xp based on place finished + if = { + limit = { this = scope:activity.var:first_place } + scope:activity = { + add_activity_log_entry = { + key = charioteer_gained_trait_xp_key + score = 110 + character = scope:activity.var:first_place + scope:activity.var:first_place = { + distribute_charioteer_trait_xp_effect = { VALUE = 15 } } + } + } + } + else_if = { + limit = { this = scope:activity.var:second_place } + scope:activity = { + add_activity_log_entry = { + key = charioteer_gained_trait_xp_key + score = 110 + character = scope:activity.var:second_place + scope:activity.var:second_place = { distribute_charioteer_trait_xp_effect = { VALUE = 12 } } + } + } + } + else_if = { + limit = { this = scope:activity.var:third_place } + scope:activity = { + add_activity_log_entry = { + key = charioteer_gained_trait_xp_key + score = 110 + character = scope:activity.var:third_place + scope:activity.var:third_place = { distribute_charioteer_trait_xp_effect = { VALUE = 8 } } + } + } + } + else = { + scope:activity = { + add_activity_log_entry = { + key = charioteer_gained_trait_xp_key + score = 110 + character = prev + prev = { distribute_charioteer_trait_xp_effect = { VALUE = 3 } } + } + } + } +} + +# Used to show how much a character gets from a successful wager in end of the race event chariot_race.0600 +individual_chariot_race_payout_effect = { + save_scope_as = current_gambler + if = { + limit = { + var:wager_type ?= flag:win + var:wager_target ?= scope:activity.var:first_place + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:first_place.var:win_payout + max = scope:current_gambler.monumental_gold_value + } + } + else_if = { + limit = { + var:wager_type ?= flag:place + OR = { + var:wager_target ?= scope:activity.var:first_place + var:wager_target ?= scope:activity.var:second_place + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:second_place.var:place_payout + max = scope:current_gambler.monumental_gold_value + } + } + else_if = { + limit = { + var:wager_type ?= flag:show + OR = { + var:wager_target ?= scope:activity.var:first_place + var:wager_target ?= scope:activity.var:second_place + var:wager_target ?= scope:activity.var:third_place + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:third_place.var:show_payout + max = scope:current_gambler.monumental_gold_value + } + } + # Handle team based bets + else_if = { + limit = { + var:wager_type ?= flag:win + var:wager_target ?= scope:current_gambler + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_blue } } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:greens = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_green } } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:whites = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_white } } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:reds = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_red } } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:place + var:wager_target ?= scope:current_gambler + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_blue } + scope:activity.var:second_place = { has_trait = charioteer_blue } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:greens = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_green } + scope:activity.var:second_place = { has_trait = charioteer_green } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:whites = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_white } + scope:activity.var:second_place = { has_trait = charioteer_white } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:reds = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_red } + scope:activity.var:second_place = { has_trait = charioteer_red } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:show + var:wager_target ?= scope:current_gambler + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_blue } + scope:activity.var:second_place = { has_trait = charioteer_blue } + scope:activity.var:third_place = { has_trait = charioteer_blue } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:greens = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_green } + scope:activity.var:second_place = { has_trait = charioteer_green } + scope:activity.var:third_place = { has_trait = charioteer_green } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:whites = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_white } + scope:activity.var:second_place = { has_trait = charioteer_white } + scope:activity.var:third_place = { has_trait = charioteer_white } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + flag:reds = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_red } + scope:activity.var:second_place = { has_trait = charioteer_red } + scope:activity.var:third_place = { has_trait = charioteer_red } + } + } + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + } + } + } + else_if = { + limit = { has_variable = wager_value } + custom_tooltip = chariot_race_lost_bet_tt + } +} + +chariot_race_payout_effect = { + scope:activity = { + every_guest_subset = { + name = spectators + save_scope_as = current_gambler + if = { + limit = { + var:wager_type ?= flag:win + var:wager_target ?= scope:activity.var:first_place + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_char_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:first_place.var:win_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:first_place.var:win_payout + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:place + OR = { + var:wager_target ?= scope:activity.var:first_place + var:wager_target ?= scope:activity.var:second_place + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_char_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:second_place.var:place_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:second_place.var:place_payout + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:show + OR = { + var:wager_target ?= scope:activity.var:first_place + var:wager_target ?= scope:activity.var:second_place + var:wager_target ?= scope:activity.var:third_place + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_char_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:third_place.var:show_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:third_place.var:show_payout + } + } + } + } + } + # Handle team based bets + else_if = { + limit = { + var:wager_type ?= flag:win + var:wager_target ?= this + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_blue } } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_win_payout + } + } + } + } + } + } + flag:greens = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_green } } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_win_payout + } + } + } + } + } + } + flag:whites = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_white } } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_win_payout + } + } + } + } + } + } + flag:reds = { + if = { + limit = { scope:activity.var:first_place = { has_trait = charioteer_red } } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_win_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_win_payout + } + } + } + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:place + var:wager_target ?= this + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_blue } + scope:activity.var:second_place = { has_trait = charioteer_blue } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_place_payout + } + } + } + } + } + } + flag:greens = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_green } + scope:activity.var:second_place = { has_trait = charioteer_green } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_place_payout + } + } + } + } + } + } + flag:whites = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_white } + scope:activity.var:second_place = { has_trait = charioteer_white } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_place_payout + } + } + } + } + } + } + flag:reds = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_red } + scope:activity.var:second_place = { has_trait = charioteer_red } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_place_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_place_payout + } + } + } + } + } + } + } + } + else_if = { + limit = { + var:wager_type ?= flag:show + var:wager_target ?= this + } + switch = { + trigger = var:wager_team + flag:blues = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_blue } + scope:activity.var:second_place = { has_trait = charioteer_blue } + scope:activity.var:third_place = { has_trait = charioteer_blue } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:blue_show_payout + } + } + } + } + } + } + flag:greens = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_green } + scope:activity.var:second_place = { has_trait = charioteer_green } + scope:activity.var:third_place = { has_trait = charioteer_green } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:green_show_payout + } + } + } + } + } + } + flag:whites = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_white } + scope:activity.var:second_place = { has_trait = charioteer_white } + scope:activity.var:third_place = { has_trait = charioteer_white } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:white_show_payout + } + } + } + } + } + } + flag:reds = { + if = { + limit = { + OR = { + scope:activity.var:first_place = { has_trait = charioteer_red } + scope:activity.var:second_place = { has_trait = charioteer_red } + scope:activity.var:third_place = { has_trait = charioteer_red } + } + } + set_or_increment_lucky_better_variable = yes + add_character_flag = successful_bet + scope:activity = { + add_activity_log_entry = { + key = chariot_race_betting_team_outcome_key + score = 100 + show_in_conclusion = yes + character = scope:current_gambler + scope:current_gambler = { + add_gold = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_show_payout + max = scope:current_gambler.monumental_gold_value + } + } + change_variable = { + name = chariot_race_pot + subtract = { + value = scope:current_gambler.var:wager_value + multiply = scope:activity.var:red_show_payout + } + } + } + } + } + } + } + } + } + } +} + +clear_placement_variables_effect = { + switch = { + trigger = has_variable + first_place = { remove_variable = first_place } + second_place = { remove_variable = second_place } + third_place = { remove_variable = third_place } + fourth_place = { remove_variable = fourth_place } + fifth_place = { remove_variable = fifth_place } + sixth_place = { remove_variable = sixth_place } + seventh_place = { remove_variable = seventh_place } + eighth_place = { remove_variable = eighth_place } + ninth_place = { remove_variable = ninth_place } + tenth_place = { remove_variable = tenth_place } + eleventh_place = { remove_variable = eleventh_place } + twelfth_place = { remove_variable = twelfth_place } + } +} + +chariot_race_remove_variables_effect = { + scope:activity = { + # Clean up variables we used for calculations on both Charioteers and Spectators + every_guest_subset = { + name = charioteers + remove_variable = odds_win_a + remove_variable = odds_win_b + remove_variable = odds_place_a + remove_variable = odds_place_b + remove_variable = odds_show_a + remove_variable = odds_show_b + remove_variable = percent_chance_to_win + remove_variable = percent_chance_to_place + remove_variable = percent_chance_to_show + remove_variable = win_payout + remove_variable = place_payout + remove_variable = show_payout + remove_variable = current_place_in_race + } + every_guest_subset = { + name = spectators + remove_variable = wager_team + remove_variable = wager_type + remove_variable = wager_target + remove_variable = wager_value + if = { + limit = { has_character_flag = successful_bet } + remove_character_flag = successful_bet + } + } + # Really for error suppression only since variables saved on activities are destroyed when the activity is over + switch = { + trigger = has_variable + blue_percent_chance_to_win = { remove_variable = blue_percent_chance_to_win } + blue_percent_chance_to_show = { remove_variable = blue_percent_chance_to_show } + blue_percent_chance_to_place = { remove_variable = blue_percent_chance_to_place } + green_percent_chance_to_win = { remove_variable = green_percent_chance_to_win } + green_percent_chance_to_place = { remove_variable = green_percent_chance_to_place } + green_percent_chance_to_show = { remove_variable = green_percent_chance_to_show } + white_percent_chance_to_place = { remove_variable = white_percent_chance_to_place } + white_percent_chance_to_win = { remove_variable = white_percent_chance_to_win } + white_percent_chance_to_show = { remove_variable = white_percent_chance_to_show } + red_percent_chance_to_win = { remove_variable = red_percent_chance_to_win } + red_percent_chance_to_place = { remove_variable = red_percent_chance_to_place } + red_percent_chance_to_show = { remove_variable = red_percent_chance_to_show } + dead_charioteers = { remove_variable = dead_charioteers } + } + clear_placement_variables_effect = yes + } +} + +advance_place_in_ranking_effect = { + $NEW_LEADING_CHAR$ = { save_scope_as = char_advanced } + $NEW_TRAILING_CHAR$ = { save_scope_as = char_passed } + scope:char_advanced = { + change_variable = { + name = chariot_race_victory_score + add = { + value = scope:char_passed.var:chariot_race_victory_score + subtract = scope:char_advanced.var:chariot_race_victory_score + add = 1 + } + } + + } + scope:activity = { update_chariot_race_standings_effect = yes } +} + +# Use this effect to update the current standings of the race based on each charioteer's victory score +update_chariot_race_standings_effect = { + scope:activity = { + # Ensure we have dead characters saved for the gui + if = { + limit = { + has_variable = first_place + var:first_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:first_place + } + } + else_if = { + limit = { + has_variable = second_place + var:second_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:second_place + } + } + else_if = { + limit = { + has_variable = third_place + var:third_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:third_place + } + } + else_if = { + limit = { + has_variable = fourth_place + var:fourth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:fourth_place + } + } + else_if = { + limit = { + has_variable = fifth_place + var:fifth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:fifth_place + } + } + else_if = { + limit = { + has_variable = sixth_place + var:sixth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:sixth_place + } + } + else_if = { + limit = { + has_variable = seventh_place + var:seventh_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:seventh_place + } + } + else_if = { + limit = { + has_variable = eighth_place + var:eighth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:eighth_place + } + } + else_if = { + limit = { + has_variable = ninth_place + var:ninth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:ninth_place + } + } + else_if = { + limit = { + has_variable = tenth_place + var:tenth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:tenth_place + } + } + else_if = { + limit = { + has_variable = eleventh_place + var:eleventh_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:eleventh_place + } + } + else_if = { + limit = { + has_variable = twelfth_place + var:twelfth_place = { is_alive = no } + } + add_to_variable_list = { + name = dead_charioteers + target = var:twelfth_place + } + } + # Clear the variables so we get rid of any dead characters + clear_placement_variables_effect = yes + # Get a count of how many living charioteers we have + set_variable = { + name = num_charioteers + value = 0 + } + # Iterate over the list of charioteers and save each as a variable according to their place + ordered_guest_subset = { + name = charioteers + order_by = charioteer_victory_score_value + max = 12 + check_range_bounds = no + limit = { is_alive = yes } + save_temporary_scope_as = current_charioteer + # increment variable + scope:activity = { + change_variable = { + name = num_charioteers + add = 1 + } + } + if = { + limit = { has_variable = current_place_in_race } + remove_variable = current_place_in_race + } + # scripted effect to set variable based on current count (num_charioteers) + assign_charioteer_to_place_variable_effect = yes + } + } +} + +# Used in update_chariot_race_standings_effect to set variables on both the activity and the individual charioteers +assign_charioteer_to_place_variable_effect = { + scope:activity = { + switch = { + trigger = var:num_charioteers + 1 = { + set_variable = { + name = first_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 1 + } + } + } + 2 = { + set_variable = { + name = second_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 2 + } + } + } + 3 = { + set_variable = { + name = third_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 3 + } + } + } + 4 = { + set_variable = { + name = fourth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 4 + } + } + } + 5 = { + set_variable = { + name = fifth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 5 + } + } + } + 6 = { + set_variable = { + name = sixth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 6 + } + } + } + 7 = { + set_variable = { + name = seventh_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 7 + } + } + } + 8 = { + set_variable = { + name = eighth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 8 + } + } + } + 9 = { + set_variable = { + name = ninth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 9 + } + } + } + 10 = { + set_variable = { + name = tenth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 10 + } + } + } + 11 = { + set_variable = { + name = eleventh_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 11 + } + } + } + 12 = { + set_variable = { + name = twelfth_place + value = scope:current_charioteer + } + scope:current_charioteer = { + set_variable = { + name = current_place_in_race + value = 12 + } + } + } + } + } +} + +distribute_charioteer_trait_xp_effect = { + switch = { + trigger = has_trait + charioteer_blue = { + if = { + limit = { has_court_position = charioteer_court_position } + employer = { + send_interface_toast = { + title = charioteer_trait_xp_gain_message + left_icon = prev + prev = { + add_trait_xp = { + trait = charioteer_blue + value = $VALUE$ + } + } + } + } + } + else = { + add_trait_xp = { + trait = charioteer_blue + value = $VALUE$ + } + } + } + charioteer_green = { + if = { + limit = { has_court_position = charioteer_court_position } + employer = { + send_interface_toast = { + title = charioteer_trait_xp_gain_message + left_icon = prev + prev = { + add_trait_xp = { + trait = charioteer_green + value = $VALUE$ + } + } + } + } + } + else = { + add_trait_xp = { + trait = charioteer_green + value = $VALUE$ + } + } + } + charioteer_white = { + if = { + limit = { has_court_position = charioteer_court_position } + employer = { + send_interface_toast = { + title = charioteer_trait_xp_gain_message + left_icon = prev + prev = { + add_trait_xp = { + trait = charioteer_white + value = $VALUE$ + } + } + } + } + } + else = { + add_trait_xp = { + trait = charioteer_white + value = $VALUE$ + } + } + } + charioteer_red = { + if = { + limit = { has_court_position = charioteer_court_position } + employer = { + send_interface_toast = { + title = charioteer_trait_xp_gain_message + left_icon = prev + prev = { + add_trait_xp = { + trait = charioteer_red + value = $VALUE$ + } + } + } + } + } + else = { + add_trait_xp = { + trait = charioteer_red + value = $VALUE$ + } + } + } + } +} + +remove_dead_charioteer_from_race = { + scope:activity = { + add_to_variable_list = { + name = dead_charioteers + target = prev + } + } +} + +### END CHARIOT RACE + +ep3_send_akolouthos_message_loyal = { + send_interface_message = { + type = msg_akolouthos_steels_varangians + title = ep3_akolouthos_events.1000 + desc = ep3_akolouthos_events.1000_loyal_notification_tooltip + + left_icon = scope:trait_getter + scope:trait_getter = { + add_trait = loyal + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 40 + } + } + custom_tooltip = akolouthos_effect_tooltip + } +} + +ep3_send_akolouthos_message_varangian = { + send_interface_message = { + type = msg_akolouthos_steels_varangians + title = ep3_akolouthos_events.1000 + desc = ep3_akolouthos_events.1000_varangian_notification_tooltip + + left_icon = scope:trait_getter + scope:trait_getter = { + add_trait = varangian + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 40 + } + } + custom_tooltip = akolouthos_effect_tooltip + } +} + +ep3_palace_looting_random_malus_effect = { + if = { + limit = { + has_character_flag = malus_court_grandeur + var:varangian_regiments >= 7 + } + change_current_court_grandeur = massive_court_grandeur_loss + } + else_if = { + limit = { + has_character_flag = malus_court_grandeur + var:varangian_regiments >= 4 + } + change_current_court_grandeur = major_court_grandeur_loss + } + else_if = { + limit = { + has_character_flag = malus_court_grandeur + } + change_current_court_grandeur = medium_court_grandeur_loss + } + if = { + limit = { + has_character_flag = malus_broken_artifact + } + scope:broken_artifact = { + add_durability = -40 + } + } + if = { + limit = { + has_character_flag = malus_stolen_artifact + } + destroy_artifact = scope:stolen_artifact + } +} + +ep3_child_castration_effect = { + add_trait = beardless_eunuch + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = castrated_beardless + } + #Eunuch bonus effects + custom_tooltip = castration_increased_aptitude + if = { + limit = { + scope:actor = { + is_landed_or_landless_administrative = yes + } + } + custom_tooltip = castration_governor_efficiency + } + #might get hurt + custom_tooltip = castration_wounded_chance + hidden_effect = { + random_list = { + 5 = { + add_character_modifier = { + modifier = brutal_castration_modifier + years = 5 + } + } + 5 = { + modifier = { + add = 5 + employs_court_position = court_physician_court_position + } + modifier = { + add = 5 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 1 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 2 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 3 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 4 + } + } + } + } + } + } +} + +ep3_youth_castration_effect = { + add_trait = eunuch_1 + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = castrated + } + #eunuch bonus effects + custom_tooltip = castration_increased_aptitude + if = { + limit = { + scope:actor = { + is_landed_or_landless_administrative = yes + } + } + custom_tooltip = castration_governor_efficiency + } + #might get wounded + custom_tooltip = castration_wounded_chance + hidden_effect = { + random_list = { + 10 = { + add_character_modifier = { + modifier = brutal_castration_modifier + years = 5 + } + } + 5 = { + modifier = { + add = 5 + employs_court_position = court_physician_court_position + } + modifier = { + add = 5 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 1 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 2 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 3 + } + } + } + modifier = { + add = 10 + employs_court_position = court_physician_court_position + court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 4 + } + } + } + } + } + } +} + +ep3_greek_fire_success_effect = { + scope:invading_commander = { + add_character_modifier = { + modifier = ravaged_by_greek_fire_modifier + years = 1 + } + add_stress = major_stress_impact_gain + } + scope:army = { + deplete_army_by_percentage = 0.9 + } + scope:invading_commander = { + custom_tooltip = two_knights_killed_tooltip + hidden_effect = { + scope:knight_1 ?= { + death = { + death_reason = death_greek_fire + killer = scope:city_defender + } + } + scope:knight_2 ?= { + death = { + death_reason = death_greek_fire + killer = scope:city_defender + } + } + } + custom_tooltip = three_knights_killed_tooltip + hidden_effect = { + scope:knight_3 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + scope:knight_4 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + scope:knight_5 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + } + } + +} + +ep3_greek_fire_fail_effect = { + scope:invading_commander = { + add_character_modifier = { + modifier = assaulted_by_greek_fire_modifier + years = 1 + } + add_stress = medium_stress_impact_gain + } + scope:knight_1 ?= { + death = { + death_reason = death_greek_fire + killer = scope:city_defender + } + } + scope:army = { + deplete_army_by_percentage = 0.4 + } + scope:invading_commander = { + custom_tooltip = two_knights_wounded_tooltip + hidden_effect = { + scope:knight_2 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + scope:knight_3 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + } + } +} + +ep3_greek_fire_crit_fail_effect = { + scope:invading_commander = { + add_character_modifier = { + modifier = assaulted_by_greek_fire_modifier + years = 1 + } + } + scope:army = { + deplete_army_by_percentage = 0.1 + } + scope:invading_commander = { + custom_tooltip = two_knights_wounded_tooltip + hidden_effect = { + scope:knight_1 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + scope:knight_2 ?= { + increase_wounds_effect = { REASON = greek_fire } + } + } + } + + root.capital_county = { + add_county_modifier = { + modifier = defenders_immolated_modifier + years = 10 + } + } + #You lose the greek fire fleet modifier + title:c_byzantion = { + remove_county_modifier = defensive_fire_dromons_modifier + } +} + +save_traveler_culture_effect = { + random_culture_global = { + limit = { + exists = culture_head + this != root.culture + } + save_scope_as = traveler_culture + } + #save second culture + random_culture_global = { + limit = { + exists = culture_head + this != root.culture + OR = { + AND = { + culture_overlaps_geographical_region = world_europe + scope:traveler_culture = { culture_overlaps_geographical_region = world_europe } + } + AND = { + culture_overlaps_geographical_region = world_asia_minor + scope:traveler_culture = { culture_overlaps_geographical_region = world_europe } + } + AND = { + culture_overlaps_geographical_region = world_europe + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_minor } + } + AND = { + culture_overlaps_geographical_region = world_asia_minor + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_minor } + } + AND = { + culture_overlaps_geographical_region = world_asia_minor + scope:traveler_culture = { culture_overlaps_geographical_region = world_middle_east } + } + AND = { + culture_overlaps_geographical_region = world_middle_east + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_minor } + } + AND = { + culture_overlaps_geographical_region = world_middle_east + scope:traveler_culture = { culture_overlaps_geographical_region = world_middle_east } + } + AND = { + culture_overlaps_geographical_region = world_africa + scope:traveler_culture = { culture_overlaps_geographical_region = world_africa } + } + AND = { + culture_overlaps_geographical_region = world_steppe + scope:traveler_culture = { culture_overlaps_geographical_region = world_steppe } + } + AND = { + culture_overlaps_geographical_region = world_tibet + scope:traveler_culture = { culture_overlaps_geographical_region = world_tibet } + } + AND = { + culture_overlaps_geographical_region = world_tibet + scope:traveler_culture = { culture_overlaps_geographical_region = world_india} + } + AND = { + culture_overlaps_geographical_region = world_india + scope:traveler_culture = { culture_overlaps_geographical_region = world_tibet } + } + AND = { + culture_overlaps_geographical_region = world_india + scope:traveler_culture = { culture_overlaps_geographical_region = world_india } + } + AND = { + culture_overlaps_geographical_region = world_burma + scope:traveler_culture = { culture_overlaps_geographical_region = world_india } + } + AND = { + culture_overlaps_geographical_region = world_india + scope:traveler_culture = { culture_overlaps_geographical_region = world_burma } + } + AND = { + culture_overlaps_geographical_region = world_tibet + scope:traveler_culture = { culture_overlaps_geographical_region = world_burma } + } + AND = { + culture_overlaps_geographical_region = world_burma + scope:traveler_culture = { culture_overlaps_geographical_region = world_tibet } + } + AND = { + culture_overlaps_geographical_region = world_tibet + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_china } + } + AND = { + culture_overlaps_geographical_region = world_asia_china + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_china } + } + AND = { + culture_overlaps_geographical_region = world_asia_china + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_southeast } + } + AND = { + culture_overlaps_geographical_region = world_asia_china + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_korea } + } + AND = { + culture_overlaps_geographical_region = world_asia_china + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_japan } + } + AND = { + culture_overlaps_geographical_region = world_asia_korea + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_china } + } + AND = { + culture_overlaps_geographical_region = world_asia_korea + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_japan } + } + AND = { + culture_overlaps_geographical_region = world_asia_korea + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_korea } + } + AND = { + culture_overlaps_geographical_region = world_asia_japan + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_japan } + } + AND = { + culture_overlaps_geographical_region = world_asia_japan + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_china } + } + AND = { + culture_overlaps_geographical_region = world_asia_japan + scope:traveler_culture = { culture_overlaps_geographical_region = world_asia_korea } + } + } + cultural_acceptance = { + target = scope:traveler_culture + value >= 5 + } + } + alternative_limit = { + this = root.culture + } + save_scope_as = traveler_culture_2 + } +} +ep3_ai_castration_effect = { + random = { + chance = 50 + add_trait = beardless_eunuch + random_list = { + 5 = { + add_character_modifier = { + modifier = brutal_castration_modifier + years = 5 + } + } + 5 = {} + 5 = { + trigger = { + liege ?= { employs_court_position = court_physician_court_position } + } + modifier = { + add = 5 + liege.court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 1 + } + } + } + modifier = { + add = 10 + liege.court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 2 + } + } + } + modifier = { + add = 10 + liege.court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 3 + } + } + } + modifier = { + add = 10 + liege.court_position:court_physician_court_position = { + aptitude = { + court_position = court_physician_court_position + value >= 4 + } + } + } + } + } + } +} + +ep3_story_cycle_admin_eunuch_upgrade_modifier_effect = { + save_scope_value_as = { + name = modifier_type + value = flag:$TYPE$ + } + switch = { + trigger = has_character_modifier + admin_eunuch_$TYPE$_1_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_1_modifier } + add_character_modifier = admin_eunuch_$TYPE$_2_modifier + } + admin_eunuch_$TYPE$_2_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_2_modifier } + add_character_modifier = admin_eunuch_$TYPE$_3_modifier + } + admin_eunuch_$TYPE$_3_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_3_modifier } + add_character_modifier = admin_eunuch_$TYPE$_4_modifier + } + admin_eunuch_$TYPE$_4_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_4_modifier } + add_character_modifier = admin_eunuch_$TYPE$_5_modifier + } + admin_eunuch_$TYPE$_5_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_5_modifier } + add_character_modifier = admin_eunuch_$TYPE$_6_modifier + } + admin_eunuch_$TYPE$_6_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_6_modifier } + add_character_modifier = admin_eunuch_$TYPE$_7_modifier + } + admin_eunuch_$TYPE$_7_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_7_modifier } + add_character_modifier = admin_eunuch_$TYPE$_8_modifier + } + admin_eunuch_$TYPE$_8_modifier = { + if = { + limit = { + scope:modifier_type = flag:eunuch + NOT = { has_hook = top_liege } + } + add_hook = { + type = influence_hook + target = top_liege + } + } + else_if = { + limit = { + scope:modifier_type = flag:eunuch + NOT = { has_strong_hook = top_liege } + } + remove_hook = { target = top_liege } + add_hook = { + type = strong_influence_hook + target = top_liege + } + } + else = { change_influence = medium_influence_gain } + } + fallback = { add_character_modifier = admin_eunuch_$TYPE$_4_modifier } + } +} + +ep3_story_cycle_admin_eunuch_matching_modifier_effect = { + $FIRST$ = { + switch = { + trigger = has_character_modifier + admin_eunuch_$FIRST_TYPE$_1_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_1_modifier } + } + admin_eunuch_$FIRST_TYPE$_2_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_2_modifier } + } + admin_eunuch_$FIRST_TYPE$_3_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_3_modifier } + } + admin_eunuch_$FIRST_TYPE$_4_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_4_modifier } + } + admin_eunuch_$FIRST_TYPE$_5_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_5_modifier } + } + admin_eunuch_$FIRST_TYPE$_6_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_6_modifier } + } + admin_eunuch_$FIRST_TYPE$_7_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_7_modifier } + } + admin_eunuch_$FIRST_TYPE$_8_modifier = { + $SECOND$ = { add_character_modifier = admin_eunuch_$SECOND_TYPE$_8_modifier } + } + } + } +} + +ep3_story_cycle_admin_eunuch_downgrade_modifier_effect = { + save_scope_value_as = { + name = modifier_type + value = flag:$TYPE$ + } + switch = { + trigger = has_character_modifier + admin_eunuch_$TYPE$_1_modifier = { + if = { + limit = { scope:modifier_type = flag:eunuch } + progress_towards_rival_effect = { + REASON = rival_admin_eunuch + CHARACTER = top_liege + OPINION = default_rival_opinion + } + } + else = { change_influence = medium_influence_loss } + } + admin_eunuch_$TYPE$_2_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_2_modifier } + add_character_modifier = admin_eunuch_$TYPE$_1_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = miniscule_influence_loss + } + } + admin_eunuch_$TYPE$_3_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_3_modifier } + add_character_modifier = admin_eunuch_$TYPE$_2_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = miniscule_influence_loss + } + } + admin_eunuch_$TYPE$_4_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_4_modifier } + add_character_modifier = admin_eunuch_$TYPE$_3_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = minor_influence_loss + } + } + admin_eunuch_$TYPE$_5_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_5_modifier } + add_character_modifier = admin_eunuch_$TYPE$_4_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = minor_influence_loss + } + } + admin_eunuch_$TYPE$_6_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_6_modifier } + add_character_modifier = admin_eunuch_$TYPE$_5_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = medium_influence_loss + } + } + admin_eunuch_$TYPE$_7_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_7_modifier } + add_character_modifier = admin_eunuch_$TYPE$_6_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = medium_influence_loss + } + } + admin_eunuch_$TYPE$_8_modifier = { + hidden_effect = { remove_character_modifier = admin_eunuch_$TYPE$_8_modifier } + add_character_modifier = admin_eunuch_$TYPE$_7_modifier + if = { # Harder to say no the further you go + limit = { scope:modifier_type = flag:liege } + change_influence = major_influence_loss + } + } + fallback = { add_character_modifier = admin_eunuch_$TYPE$_3_modifier } + } +} + +ep3_story_cycle_admin_eunuch_clear_modifier_effect = { + switch = { + trigger = has_character_modifier + admin_eunuch_$TYPE$_1_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_1_modifier } + admin_eunuch_$TYPE$_2_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_2_modifier } + admin_eunuch_$TYPE$_3_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_3_modifier } + admin_eunuch_$TYPE$_4_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_4_modifier } + admin_eunuch_$TYPE$_5_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_5_modifier } + admin_eunuch_$TYPE$_6_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_6_modifier } + admin_eunuch_$TYPE$_7_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_7_modifier } + admin_eunuch_$TYPE$_8_modifier = { remove_character_modifier = admin_eunuch_$TYPE$_8_modifier } + } +} + +ep3_give_eunuch_effect = { + $TAKER$ = { + add_courtier = $EUNUCH$ + } + $GIVER$ = { + change_influence = { + value = 100 + add = $EUNUCH$.sum_of_all_skills_value + if = { + limit = { + $EUNUCH$ = { has_trait = beardless_eunuch } + } + multiply = 1.5 + } + } + } +} + +################################################## +# Misc +################################################## + +# Picks a random valid maa type for OWNER to create +ep3_pick_random_maa_regiment_effect = { + save_temporary_scope_value_as = { + name = include_basic_maa + value = $INCLUDE_BASIC_MAA$ + } + save_temporary_scope_value_as = { + name = include_siege_maa + value = $INCLUDE_SIEGE_MAA$ + } + $OWNER$ = { + random_list = { + 1 = { + trigger = { + scope:include_basic_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:light_footmen + } + } + 1 = { + trigger = { + scope:include_basic_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:bowmen + } + } + 1 = { + trigger = { + scope:include_basic_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:light_horsemen + } + } + 1 = { + trigger = { + scope:include_basic_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:pikemen_unit + } + } + # TRIBAL + 1 = { + trigger = { + culture = { has_innovation = innovation_elephantry } + } + save_scope_value_as = { + name = maa_to_create + value = flag:war_elephant + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_war_camels } + } + save_scope_value_as = { + name = maa_to_create + value = flag:camel_rider + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_arched_saddle } + } + save_scope_value_as = { + name = maa_to_create + value = flag:armored_horsemen + } + } + 1 = { + trigger = { + culture = { + has_innovation = innovation_catapult + NOR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:onager + } + } + 1 = { + trigger = { + culture = { + has_innovation = innovation_catapult + OR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:ballista + } + } + # EARLY + 1 = { + trigger = { + culture = { has_innovation = innovation_quilted_armor } + } + save_scope_value_as = { + name = maa_to_create + value = flag:armored_footmen + } + } + 1 = { + trigger = { + culture = { + has_innovation = innovation_mangonel + NOR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:mangonel + } + } + 1 = { + trigger = { + culture = { + has_innovation = innovation_mangonel + OR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:cloud_ladder + } + } + # HIGH + 1 = { + trigger = { + culture = { + has_innovation = innovation_trebuchet + NOR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:trebuchet + } + } + 1 = { + trigger = { + culture = { + has_innovation = innovation_trebuchet + OR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:siege_tower + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_advanced_bowmaking } + } + save_scope_value_as = { + name = maa_to_create + value = flag:crossbowmen + } + } + # LATE + 1 = { + trigger = { + culture = { + has_cultural_parameter = unlock_late_medieval_gunpowder_units + NOR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:bombard + } + } + 1 = { + trigger = { + culture = { + has_cultural_parameter = unlock_late_medieval_gunpowder_units + OR = { + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_korean + has_cultural_pillar = heritage_japonic + } + } + scope:include_siege_maa = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:cannon + } + } + # CULTURAL INNOVATIONS + 1 = { + trigger = { + culture = { has_innovation = innovation_bamboo_bows } + } + save_scope_value_as = { + name = maa_to_create + value = flag:paiks + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_zweihanders } + } + save_scope_value_as = { + name = maa_to_create + value = flag:landsknecht + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_adaptive_militia } + } + save_scope_value_as = { + name = maa_to_create + value = flag:goedendag + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_valets } + } + save_scope_value_as = { + name = maa_to_create + value = flag:gendarme + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_rocket_cart } + } + save_scope_value_as = { + name = maa_to_create + value = flag:rocket_carts + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_pike_columns } + } + save_scope_value_as = { + name = maa_to_create + value = flag:picchieri + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_legionnaires } + } + save_scope_value_as = { + name = maa_to_create + value = flag:praetorian + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_desert_tactics } + } + save_scope_value_as = { + name = maa_to_create + value = flag:chasseur + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_caballeros } + } + save_scope_value_as = { + name = maa_to_create + value = flag:caballero + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_hobbies } + } + save_scope_value_as = { + name = maa_to_create + value = flag:hobelar + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_rectilinear_schiltron } + } + save_scope_value_as = { + name = maa_to_create + value = flag:schiltron + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_sahel_horsemen } + } + save_scope_value_as = { + name = maa_to_create + value = flag:sahel_horsemen + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_sarawit } + } + save_scope_value_as = { + name = maa_to_create + value = flag:sarawit + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_repeating_crossbow } + } + save_scope_value_as = { + name = maa_to_create + value = flag:shenbigong + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_pole_vault } + } + save_scope_value_as = { + name = maa_to_create + value = flag:guanch_vaulter + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_huscarls } + } + save_scope_value_as = { + name = maa_to_create + value = flag:huscarl + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_longbowmen } + } + save_scope_value_as = { + name = maa_to_create + value = flag:longbowmen + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_monaspa } + } + save_scope_value_as = { + name = maa_to_create + value = flag:monaspa + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_cataphract } + } + save_scope_value_as = { + name = maa_to_create + value = flag:cataphract + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_metsanvartija } + } + save_scope_value_as = { + name = maa_to_create + value = flag:metsanvartija + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_maturkan_warriors } + } + save_scope_value_as = { + name = maa_to_create + value = flag:maturkan_warriors + } + } + 1 = { + trigger = { + OR = { + culture = { has_cultural_parameter = unlock_maa_horse_archers } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:horse_archers + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_ayyar } + } + save_scope_value_as = { + name = maa_to_create + value = flag:ayyar + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_mubarizun } + } + save_scope_value_as = { + name = maa_to_create + value = flag:mubarizun + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_mulaththamun } + } + save_scope_value_as = { + name = maa_to_create + value = flag:mulaththamun + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_archers_of_the_nile } + } + save_scope_value_as = { + name = maa_to_create + value = flag:archers_of_the_nile + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_druzhina } + } + save_scope_value_as = { + name = maa_to_create + value = flag:druzhina + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_hussar } + } + save_scope_value_as = { + name = maa_to_create + value = flag:hussar + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_horn_warrior } + } + save_scope_value_as = { + name = maa_to_create + value = flag:horn_warrior + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_bush_hunter } + } + save_scope_value_as = { + name = maa_to_create + value = flag:bush_hunter + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_shomer } + } + save_scope_value_as = { + name = maa_to_create + value = flag:shomer + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_garudas } + } + save_scope_value_as = { + name = maa_to_create + value = flag:garudas + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_khandayat } + } + save_scope_value_as = { + name = maa_to_create + value = flag:khandayat + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_mountaineer } + } + save_scope_value_as = { + name = maa_to_create + value = flag:mountaineer + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_guinea_warrior } + } + save_scope_value_as = { + name = maa_to_create + value = flag:guinea_warrior + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_abudrar } + } + save_scope_value_as = { + name = maa_to_create + value = flag:abudrar + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_zbrojnosh } + } + save_scope_value_as = { + name = maa_to_create + value = flag:zbrojnosh + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_palace_guards } + } + save_scope_value_as = { + name = maa_to_create + value = flag:palace_guards + } + } + 1 = { + trigger = { + dynasty ?= { + has_dynasty_perk = fp3_khvarenah_legacy_4 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:asawira + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_tarkhan } + } + save_scope_value_as = { + name = maa_to_create + value = flag:tarkhan + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_zupin_warrior } + } + save_scope_value_as = { + name = maa_to_create + value = flag:zupin_warrior + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_tawashi } + } + save_scope_value_as = { + name = maa_to_create + value = flag:tawashi + } + } + 1 = { + trigger = { + dynasty ?= { + has_dynasty_perk = warfare_legacy_5 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:house_guard + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:archer_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_archers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:skirmisher_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_skirmishers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:pike_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_pikes + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:outrider_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_outriders + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:vanguard_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_vanguards + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:lancer_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_lancers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:crossbowmen_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_crossbowers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:camelry_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_cameliers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:elephantry_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_elephantiers + } + } + 1 = { + trigger = { + any_active_accolade = { + primary_type = { + this = accolade_type:horse_archer_attribute + } + accolade_rank >= 3 + } + } + save_scope_value_as = { + name = maa_to_create + value = flag:accolade_maa_horse_archers + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_vigmen } + } + save_scope_value_as = { + name = maa_to_create + value = flag:vigmen + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_bondi } + } + save_scope_value_as = { + name = maa_to_create + value = flag:bondi + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_varangian_veterans } + } + save_scope_value_as = { + name = maa_to_create + value = flag:varangian_veterans + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_ayrudzi } + } + save_scope_value_as = { + name = maa_to_create + value = flag:ayrudzi + } + } + 1 = { + trigger = { + mpo_can_recruit_nomad_maa_trigger = yes + } + save_scope_value_as = { + name = maa_to_create + value = flag:steppe_raiders + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_conrois } + } + save_scope_value_as = { + name = maa_to_create + value = flag:conrois + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_akritai } + } + save_scope_value_as = { + name = maa_to_create + value = flag:akritai + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_ballistrai } + } + save_scope_value_as = { + name = maa_to_create + value = flag:ballistrai + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_skoutatoi } + } + save_scope_value_as = { + name = maa_to_create + value = flag:skoutatoi + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_warrior_monk_units } + } + save_scope_value_as = { + name = maa_to_create + value = flag:warrior_monks + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_emishi_horse_archers_units } + } + save_scope_value_as = { + name = maa_to_create + value = flag:emishi_horse_archers + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_mounted_samurai_units } + } + save_scope_value_as = { + name = maa_to_create + value = flag:japanese_horse_archers + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_pesilat } + } + save_scope_value_as = { + name = maa_to_create + value = flag:pesilat_warriors + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_gakgung_archers } + } + save_scope_value_as = { + name = maa_to_create + value = flag:gakgung_archers + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_infantry_samurai_units } + } + save_scope_value_as = { + name = maa_to_create + value = flag:samurai + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_zhanmadao } + } + save_scope_value_as = { + name = maa_to_create + value = flag:zhanmadao_infantry + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_burenjia } + } + save_scope_value_as = { + name = maa_to_create + value = flag:burenjia + } + } + 1 = { + trigger = { + culture = { has_innovation = innovation_tiefutu } + } + save_scope_value_as = { + name = maa_to_create + value = flag:tiefutu + } + } + 1 = { + trigger = { + culture = { has_cultural_parameter = unlock_maa_black_armor_cavalry } + } + save_scope_value_as = { + name = maa_to_create + value = flag:black_armor_cavalry + } + } + 1 = { + trigger = { + exists = scope:title + scope:title = title:e_byzantium + } + save_scope_value_as = { + name = maa_to_create + value = flag:varangian_guards + } + } + 1 = { + trigger = { + domicile ?= { has_domicile_parameter = camp_unlocks_handpicked_faithful_maa_type } + } + save_scope_value_as = { + name = maa_to_create + value = flag:handpicked_faithful + } + } + } + } + #in case you don't fullfil any criteria just pick a random default maa + if = { + limit = { + NOT = { exists = scope:maa_to_create } + } + random_list = { + 1 = { + save_scope_value_as = { + name = maa_to_create + value = flag:light_footmen + } + } + 1 = { + save_scope_value_as = { + name = maa_to_create + value = flag:bowmen + } + } + 1 = { + save_scope_value_as = { + name = maa_to_create + value = flag:light_horsemen + } + } + 1 = { + save_scope_value_as = { + name = maa_to_create + value = flag:pikemen_unit + } + } + } + } +} + +# creates the maa type for OWNER of SIZE set by the above +ep3_create_random_maa_regiment_effect = { + $OWNER$ = { + switch = { + trigger = scope:maa_to_create + flag:light_footmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = light_footmen + SIZE = $SIZE$ + } + } + flag:bowmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = bowmen + SIZE = $SIZE$ + } + } + flag:light_horsemen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = light_horsemen + SIZE = $SIZE$ + } + } + flag:pikemen_unit = { + create_maa_or_upgrade_regiment_effect = { + TYPE = pikemen_unit + SIZE = $SIZE$ + } + } + flag:war_elephant = { + create_maa_or_upgrade_regiment_effect = { + TYPE = war_elephant + SIZE = $SIZE$ + } + } + flag:camel_rider = { + create_maa_or_upgrade_regiment_effect = { + TYPE = camel_rider + SIZE = $SIZE$ + } + } + flag:armored_horsemen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = armored_horsemen + SIZE = $SIZE$ + } + } + flag:onager = { + create_maa_or_upgrade_regiment_effect = { + TYPE = onager + SIZE = $SIZE$ + } + } + flag:armored_footmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = armored_footmen + SIZE = $SIZE$ + } + } + flag:mangonel = { + create_maa_or_upgrade_regiment_effect = { + TYPE = mangonel + SIZE = $SIZE$ + } + } + flag:trebuchet = { + create_maa_or_upgrade_regiment_effect = { + TYPE = trebuchet + SIZE = $SIZE$ + } + } + flag:crossbowmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = crossbowmen + SIZE = $SIZE$ + } + } + flag:bombard = { + create_maa_or_upgrade_regiment_effect = { + TYPE = bombard + SIZE = $SIZE$ + } + } + flag:paiks = { + create_maa_or_upgrade_regiment_effect = { + TYPE = paiks + SIZE = $SIZE$ + } + } + flag:landsknecht = { + create_maa_or_upgrade_regiment_effect = { + TYPE = landsknecht + SIZE = $SIZE$ + } + } + flag:goedendag = { + create_maa_or_upgrade_regiment_effect = { + TYPE = goedendag + SIZE = $SIZE$ + } + } + flag:gendarme = { + create_maa_or_upgrade_regiment_effect = { + TYPE = gendarme + SIZE = $SIZE$ + } + } + flag:picchieri = { + create_maa_or_upgrade_regiment_effect = { + TYPE = picchieri + SIZE = $SIZE$ + } + } + flag:praetorian = { + create_maa_or_upgrade_regiment_effect = { + TYPE = praetorian + SIZE = $SIZE$ + } + } + flag:chasseur = { + create_maa_or_upgrade_regiment_effect = { + TYPE = chasseur + SIZE = $SIZE$ + } + } + flag:caballero = { + create_maa_or_upgrade_regiment_effect = { + TYPE = caballero + SIZE = $SIZE$ + } + } + flag:hobelar = { + create_maa_or_upgrade_regiment_effect = { + TYPE = hobelar + SIZE = $SIZE$ + } + } + flag:schiltron = { + create_maa_or_upgrade_regiment_effect = { + TYPE = schiltron + SIZE = $SIZE$ + } + } + flag:sahel_horsemen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = sahel_horsemen + SIZE = $SIZE$ + } + } + flag:sarawit = { + create_maa_or_upgrade_regiment_effect = { + TYPE = sarawit + SIZE = $SIZE$ + } + } + flag:shenbigong = { + create_maa_or_upgrade_regiment_effect = { + TYPE = shenbigong + SIZE = $SIZE$ + } + } + flag:guanch_vaulter = { + create_maa_or_upgrade_regiment_effect = { + TYPE = guanch_vaulter + SIZE = $SIZE$ + } + } + flag:huscarl = { + create_maa_or_upgrade_regiment_effect = { + TYPE = huscarl + SIZE = $SIZE$ + } + } + flag:longbowmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = longbowmen + SIZE = $SIZE$ + } + } + flag:monaspa = { + create_maa_or_upgrade_regiment_effect = { + TYPE = monaspa + SIZE = $SIZE$ + } + } + flag:cataphract = { + create_maa_or_upgrade_regiment_effect = { + TYPE = cataphract + SIZE = $SIZE$ + } + } + flag:metsanvartija = { + create_maa_or_upgrade_regiment_effect = { + TYPE = metsanvartija + SIZE = $SIZE$ + } + } + flag:maturkan_warriors = { + create_maa_or_upgrade_regiment_effect = { + TYPE = maturkan_warriors + SIZE = $SIZE$ + } + } + flag:horse_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = horse_archers + SIZE = $SIZE$ + } + } + flag:ayyar = { + create_maa_or_upgrade_regiment_effect = { + TYPE = ayyar + SIZE = $SIZE$ + } + } + flag:mubarizun = { + create_maa_or_upgrade_regiment_effect = { + TYPE = mubarizun + SIZE = $SIZE$ + } + } + flag:mulaththamun = { + create_maa_or_upgrade_regiment_effect = { + TYPE = mulaththamun + SIZE = $SIZE$ + } + } + flag:archers_of_the_nile = { + create_maa_or_upgrade_regiment_effect = { + TYPE = archers_of_the_nile + SIZE = $SIZE$ + } + } + flag:druzhina = { + create_maa_or_upgrade_regiment_effect = { + TYPE = druzhina + SIZE = $SIZE$ + } + } + flag:hussar = { + create_maa_or_upgrade_regiment_effect = { + TYPE = hussar + SIZE = $SIZE$ + } + } + flag:horn_warrior = { + create_maa_or_upgrade_regiment_effect = { + TYPE = horn_warrior + SIZE = $SIZE$ + } + } + flag:bush_hunter = { + create_maa_or_upgrade_regiment_effect = { + TYPE = bush_hunter + SIZE = $SIZE$ + } + } + flag:shomer = { + create_maa_or_upgrade_regiment_effect = { + TYPE = shomer + SIZE = $SIZE$ + } + } + flag:garudas = { + create_maa_or_upgrade_regiment_effect = { + TYPE = garudas + SIZE = $SIZE$ + } + } + flag:khandayat = { + create_maa_or_upgrade_regiment_effect = { + TYPE = khandayat + SIZE = $SIZE$ + } + } + flag:mountaineer = { + create_maa_or_upgrade_regiment_effect = { + TYPE = mountaineer + SIZE = $SIZE$ + } + } + flag:guinea_warrior = { + create_maa_or_upgrade_regiment_effect = { + TYPE = guinea_warrior + SIZE = $SIZE$ + } + } + flag:abudrar = { + create_maa_or_upgrade_regiment_effect = { + TYPE = abudrar + SIZE = $SIZE$ + } + } + flag:zbrojnosh = { + create_maa_or_upgrade_regiment_effect = { + TYPE = zbrojnosh + SIZE = $SIZE$ + } + } + flag:palace_guards = { + create_maa_or_upgrade_regiment_effect = { + TYPE = palace_guards + SIZE = $SIZE$ + } + } + flag:asawira = { + create_maa_or_upgrade_regiment_effect = { + TYPE = asawira + SIZE = $SIZE$ + } + } + flag:tarkhan = { + create_maa_or_upgrade_regiment_effect = { + TYPE = tarkhan + SIZE = $SIZE$ + } + } + flag:zupin_warrior = { + create_maa_or_upgrade_regiment_effect = { + TYPE = zupin_warrior + SIZE = $SIZE$ + } + } + flag:tawashi = { + create_maa_or_upgrade_regiment_effect = { + TYPE = tawashi + SIZE = $SIZE$ + } + } + flag:house_guard = { + create_maa_or_upgrade_regiment_effect = { + TYPE = house_guard + SIZE = $SIZE$ + } + } + flag:accolade_maa_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_archers + SIZE = $SIZE$ + } + } + flag:accolade_maa_skirmishers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_skirmishers + SIZE = $SIZE$ + } + } + flag:accolade_maa_pikes = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_pikes + SIZE = $SIZE$ + } + } + flag:accolade_maa_outriders = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_outriders + SIZE = $SIZE$ + } + } + flag:accolade_maa_vanguards = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_vanguards + SIZE = $SIZE$ + } + } + flag:accolade_maa_lancers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_lancers + SIZE = $SIZE$ + } + } + flag:accolade_maa_crossbowers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_crossbowers + SIZE = $SIZE$ + } + } + flag:accolade_maa_cameliers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_cameliers + SIZE = $SIZE$ + } + } + flag:accolade_maa_elephantiers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_elephantiers + SIZE = $SIZE$ + } + } + flag:accolade_maa_horse_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = accolade_maa_horse_archers + SIZE = $SIZE$ + } + } + flag:vigmen = { + create_maa_or_upgrade_regiment_effect = { + TYPE = vigmen + SIZE = $SIZE$ + } + } + flag:bondi = { + create_maa_or_upgrade_regiment_effect = { + TYPE = bondi + SIZE = $SIZE$ + } + } + flag:varangian_veterans = { + create_maa_or_upgrade_regiment_effect = { + TYPE = varangian_veterans + SIZE = $SIZE$ + } + } + flag:ayrudzi = { + create_maa_or_upgrade_regiment_effect = { + TYPE = ayrudzi + SIZE = $SIZE$ + } + } + flag:steppe_raiders = { + create_maa_or_upgrade_regiment_effect = { + TYPE = steppe_raiders + SIZE = $SIZE$ + } + } + flag:conrois = { + create_maa_or_upgrade_regiment_effect = { + TYPE = conrois + SIZE = $SIZE$ + } + } + flag:akritai = { + create_maa_or_upgrade_regiment_effect = { + TYPE = akritai + SIZE = $SIZE$ + } + } + flag:ballistrai = { + create_maa_or_upgrade_regiment_effect = { + TYPE = ballistrai + SIZE = $SIZE$ + } + } + flag:skoutatoi = { + create_maa_or_upgrade_regiment_effect = { + TYPE = skoutatoi + SIZE = $SIZE$ + } + } + flag:varangian_guards = { + create_maa_or_upgrade_regiment_effect = { + TYPE = varangian_guards + SIZE = $SIZE$ + } + } + flag:handpicked_faithful = { + create_maa_or_upgrade_regiment_effect = { + TYPE = handpicked_faithful + SIZE = $SIZE$ + } + } + flag:emishi_horse_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = emishi_horse_archers + SIZE = $SIZE$ + } + } + flag:japanese_horse_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = japanese_horse_archers + SIZE = $SIZE$ + } + } + flag:warrior_monks = { + create_maa_or_upgrade_regiment_effect = { + TYPE = warrior_monks + SIZE = $SIZE$ + } + } + flag:gakgung_archers = { + create_maa_or_upgrade_regiment_effect = { + TYPE = gakgung_archers + SIZE = $SIZE$ + } + } + flag:pesilat_warriors = { + create_maa_or_upgrade_regiment_effect = { + TYPE = pesilat_warriors + SIZE = $SIZE$ + } + } + flag:samurai = { + create_maa_or_upgrade_regiment_effect = { + TYPE = samurai + SIZE = $SIZE$ + } + } + flag:zhanmadao_infantry = { + create_maa_or_upgrade_regiment_effect = { + TYPE = zhanmadao_infantry + SIZE = $SIZE$ + } + } + flag:burenjia = { + create_maa_or_upgrade_regiment_effect = { + TYPE = burenjia + SIZE = $SIZE$ + } + } + flag:tiefutu = { + create_maa_or_upgrade_regiment_effect = { + TYPE = tiefutu + SIZE = $SIZE$ + } + } + flag:black_armor_cavalry = { + create_maa_or_upgrade_regiment_effect = { + TYPE = black_armor_cavalry + SIZE = $SIZE$ + } + } + flag:rocket_carts = { + create_maa_or_upgrade_regiment_effect = { + TYPE = rocket_carts + SIZE = $SIZE$ + } + } + flag:ballista = { + create_maa_or_upgrade_regiment_effect = { + TYPE = ballista + SIZE = $SIZE$ + } + } + flag:cloud_ladder = { + create_maa_or_upgrade_regiment_effect = { + TYPE = cloud_ladder + SIZE = $SIZE$ + } + } + flag:siege_tower = { + create_maa_or_upgrade_regiment_effect = { + TYPE = siege_tower + SIZE = $SIZE$ + } + } + flag:cannon = { + create_maa_or_upgrade_regiment_effect = { + TYPE = cannon + SIZE = $SIZE$ + } + } + } + } +} + +create_maa_or_upgrade_regiment_effect = { + if = { + limit = { + any_maa_regiment = { + is_maa_type = $TYPE$ + can_upgrade_maa = yes + } + } + random_maa_regiment = { + limit = { + is_maa_type = $TYPE$ + can_upgrade_maa = yes + } + change_maa_regiment_size = $SIZE$ + } + } + else = { + create_maa_regiment = { + type = $TYPE$ + check_can_recruit = no + size = $SIZE$ + } + } +} + +ep3_missionary_effect = { + # Same religion or unreformed or Hasan, convert to the preacher's faith + if = { + limit = { + OR = { + $LOCATION$.religion = $PREACHER$.religion + $LOCATION$.faith = { has_doctrine_parameter = unreformed } + character:41702 ?= $PREACHER$ + } + } + $LOCATION$ = { + set_county_faith = $PREACHER$.faith + } + } + # Preacher is Gnostic, convert the locals to a regionally appropriate form of Gnosticism + else_if = { + limit = { + $PREACHER$.faith = { + OR = { + has_doctrine = tenet_gnosticism + has_doctrine = special_doctrine_is_gnostic_faith + } + } + $LOCATION$.religion = { + any_faith = { + has_doctrine = tenet_gnosticism + } + } + } + $LOCATION$ = { + religion = { + random_faith = { + limit = { + OR = { + has_doctrine = tenet_gnosticism + has_doctrine = special_doctrine_is_gnostic_faith + } + } + $LOCATION$ = { set_county_faith = prev } + } + } + } + } + # Otherwise, reduce popular opinion + else = { + $LOCATION$ = { + add_county_modifier = { + modifier = ep3_religious_doubts + years = 15 + } + } + } +} +ep3_hasan_missionary_effect = { + ep3_hasan_advance_radicalism = yes + ep3_missionary_effect = { + PREACHER = $PREACHER$ + LOCATION = $LOCATION$ + } +} +ep3_hasan_advance_radicalism = { + if = { + limit = { + any_owned_story = { + type = story_hasan + } + } + custom_tooltip = { + text = advance_to_the_assassins_tt + random_owned_story = { + type = story_hasan + if = { + limit = { + exists = var:radical_points + } + change_variable = { + name = radical_points + add = 1 + } + } + else = { + set_variable = { + name = radical_points + value = 1 + } + } + } + } + } +} +hasan_sabbah_ignite_decision_effect = { + if = { + limit = { + hasan_sabbah_event_troops_value <= 1000 + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + } + else_if = { + limit = { + hasan_sabbah_event_troops_value <= 2000 + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 1 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + } + else_if = { + limit = { + hasan_sabbah_event_troops_value <= 3000 + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 1 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + } + else_if = { + limit = { + hasan_sabbah_event_troops_value > 3000 + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 2 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 2 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 2 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 2 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + spawn_army = { + name = hasan_fanatics + men_at_arms = { + type = asawira + stacks = 2 + } + men_at_arms = { + type = ayyar + stacks = 2 + } + levies = hasan_sabbah_event_troops_value + inheritable = yes + location = root.domicile.domicile_location + war_keep_on_attacker_victory = yes + } + } + start_war = { + cb = ep3_hasan_assassin_war + target = root.location.county.holder.top_liege + target_title = root.location.county.holder.top_liege.primary_title + } +} +hasan_sabbah_end_war = { + # Offer Hasan the opportunity to become landed + hidden_effect = { + if = { + limit = { + $SELJUK$ = { + any_sub_realm_barony = { + title_province = { has_building_or_higher = alamut_castle_01 } + } + } + } + $SELJUK$ = { + random_sub_realm_barony = { + limit = { + title_province = { has_building_or_higher = alamut_castle_01 } + } + county = { + save_scope_as = hasan_home + } + } + } + } + else_if = { + limit = { + $SELJUK$ = { + any_sub_realm_county = { + faith = $HASAN$.faith + holder = { is_ai = yes } + } + } + } + $SELJUK$ = { + random_sub_realm_county = { + limit = { + faith = $HASAN$.faith + holder = { is_ai = yes } + } + save_scope_as = hasan_home + } + } + } + else = { + $SELJUK$ = { + random_sub_realm_county = { + limit = { + holder = { is_ai = yes } + } + save_scope_as = hasan_home + } + } + } + $HASAN$ = { + if = { + limit = { + any_owned_story = { + type = story_hasan + exists = var:preferred_caliph + } + } + random_owned_story = { + type = story_hasan + var:preferred_caliph = { save_scope_as = caliph } + } + } + trigger_event = { + id = hasan_sabbah.1050 + } + if = { + limit = { + is_ai = no + } + add_achievement_global_variable_effect = { + VARIABLE = finished_the_old_man_of_the_mountain_achievement + VALUE = yes + } + } + } + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + } + $HASAN$ = { + add_prestige = medium_prestige_value + } + $SELJUK$ = { + add_prestige = { + value = medium_prestige_value + multiply = -1 + } + + every_vassal = { + limit = { + highest_held_title_tier > tier_barony + } + change_liege_or_become_independent = { + CHANGE = scope:change + VASSAL = this + } + } + + every_vassal = { + limit = { is_ai = no } + send_interface_toast = { + type = msg_gained_independence + title = liege_primary_title_dissolution + desc = liege_primary_title_dissolution_desc + left_icon = $SELJUK$ + } + } + } + resolve_title_and_vassal_change = scope:change + $SELJUK$ = { + every_held_title = { + limit = { + tier >= tier_duchy + is_head_of_faith = no + NOT = { this = $SELJUK$.capital_county.duchy } + } + add_to_temporary_list = titles_to_destroy + } + } + every_in_list = { + list = titles_to_destroy + $HASAN$ = { + destroy_title = prev + } + } + $SELJUK$ = { + if = { + limit = { + government_has_flag = government_is_administrative + } + admin_government_reset_effect = yes + } + } + # LEGITIMACY FROM LOSING FACTION WAR + faction_war_end_defeat_legitimacy_effect = yes + # End Hasan's story cycle + hidden_effect = { + $HASAN$ = { + if = { + limit = { + any_owned_story = { + type = story_hasan + } + } + random_owned_story = { + type = story_hasan + end_story = yes + } + } + } + } +} + +reinforce_soldiers_regiment_effect = { + save_scope_as = laamp_temp + # For the value. + save_temporary_scope_as = actor + custom_tooltip = { + text = reinforce_soldiers_effect_tt + every_maa_regiment = { + limit = { maa_regiments_valid_for_cheap_reinforcement_trigger = yes } + change_maa_troops_count = reinforce_soldiers_regiment_soldiers_value + } + } +} + +refill_maa_with_provisions_effect = { + save_scope_as = laamp_temp + while = { + limit = { + scope:actor.domicile.provisions > 0 + any_maa_regiment = { + maa_regiments_valid_to_refill_trigger = yes + } + } + random_maa_regiment = { + limit = { + maa_regiments_valid_to_refill_trigger = yes + } + save_scope_as = maa_scope + save_scope_value_as = { + name = current_provisions_max_value_scope + value = scope:actor.domicile.provisions + } + scope:actor.domicile ?= { + change_provisions = { + value = { + add = scope:maa_scope.replenishable_troops_value + divide = provision_refill_value + max = scope:current_provisions_max_value_scope + multiply = -1 + } + } + } + change_maa_troops_count = replenishable_troops_with_provisions_value + } + } +} + +refill_maa_with_gold_effect = { + save_scope_as = laamp_temp + while = { + limit = { + scope:actor.gold > 0 + any_maa_regiment = { + maa_regiments_valid_to_refill_trigger = yes + } + } + random_maa_regiment = { + limit = { + maa_regiments_valid_to_refill_trigger = yes + } + save_scope_as = maa_scope + save_scope_value_as = { + name = current_gold_max_value_scope + value = scope:actor.gold + } + scope:actor = { + remove_short_term_gold = { + add = scope:maa_scope.replenishable_troops_value + divide = gold_refill_value + max = scope:current_gold_max_value_scope + } + } + change_maa_troops_count = replenishable_troops_with_gold_value + } + } +} + +admin_government_reset_effect = { + if = { + limit = { is_landed = yes } # error suppression + ### NOMADIC + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + capital_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + change_government = nomad_government + } + ### TRIBAL - are all of your holdings Tribal? + if = { + limit = { + NOT = { + any_held_title = { + trigger_if = { + limit = { tier <= tier_county } + title_province ?= { + NOT = { has_holding_type = tribal_holding } + } + } + trigger_else = { + title_capital_county.title_province ?= { + NOT = { has_holding_type = tribal_holding } + } + } + } + } + } + change_government = tribal_government + } + ### CLAN - are you a Muslim or from a Clan culture? + else_if = { + limit = { + OR = { + faith = { religion_tag = islam_religion } + culture = { + OR = { + has_cultural_pillar = heritage_arabic + has_cultural_pillar = heritage_iranian + has_cultural_pillar = heritage_turkic + } + } + } + } + change_government = clan_government + } + ### FEUDAL - fallback playable case + else = { change_government = feudal_government } + } +} + +create_basic_peasant_effect = { + create_character = { + template = peasant_character + location = root.location + dynasty = none + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + after_creation = { + set_to_lowborn = yes + } + save_scope_as = peasant + } +} + +fire_governor_long_war_response_events = { + if = { + limit = { + scope:defender = { + government_has_flag = government_is_administrative + top_liege = this + any_vassal = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + } + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + } + } + save_scope_as = def_governor_1 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 24 + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + this = scope:def_governor_1 + } + } + save_scope_as = def_governor_2 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 28 + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + this = scope:def_governor_1 + this = scope:def_governor_2 + } + } + save_scope_as = def_governor_3 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 32 + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + this = scope:def_governor_1 + this = scope:def_governor_2 + this = scope:def_governor_3 + } + } + save_scope_as = def_governor_4 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 36 + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + this = scope:def_governor_1 + this = scope:def_governor_2 + this = scope:def_governor_3 + this = scope:def_governor_4 + } + } + save_scope_as = def_governor_5 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 42 + } + } + } + scope:defender = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:attacker + is_allied_to = scope:attacker + this = scope:def_governor_1 + this = scope:def_governor_2 + this = scope:def_governor_3 + this = scope:def_governor_4 + this = scope:def_governor_5 + } + } + save_scope_as = def_governor_6 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 54 + } + } + } + } + if = { + limit = { + scope:attacker = { + government_has_flag = government_is_administrative + top_liege = this + any_vassal = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + } + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + } + } + save_scope_as = att_governor_1 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 24 + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + this = scope:att_governor_1 + } + } + save_scope_as = att_governor_2 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 28 + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + this = scope:att_governor_1 + this = scope:att_governor_2 + } + } + save_scope_as = att_governor_3 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 32 + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + this = scope:att_governor_1 + this = scope:att_governor_2 + this = scope:att_governor_3 + } + } + save_scope_as = att_governor_4 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 36 + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + this = scope:att_governor_1 + this = scope:att_governor_2 + this = scope:att_governor_3 + this = scope:att_governor_4 + } + } + save_scope_as = att_governor_5 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 42 + } + } + } + scope:attacker = { + random_vassal = { + limit = { + is_governor = yes + NOR = { + this = scope:defender + is_allied_to = scope:defender + this = scope:att_governor_1 + this = scope:att_governor_2 + this = scope:att_governor_3 + this = scope:att_governor_4 + this = scope:att_governor_5 + } + } + save_scope_as = att_governor_6 + trigger_event = { + id = ep3_governor_yearly.3010 + months = 54 + } + } + } + } +} + +ep3_governor_yearly_3010_war_aid_effect = { + if = { + limit = { + scope:emperor = { + is_defender_in_war = scope:war + } + } + scope:war = { + add_defender = scope:governor + } + } + else = { + scope:war = { + add_attacker = scope:governor + } + + } + if = { + limit = { + root = scope:emperor + } + hidden_effect = { + reverse_add_opinion = { + target = scope:emperor + opinion = 20 + modifier = grateful_opinion + } + } + } + else = { + reverse_add_opinion = { + target = scope:emperor + opinion = 20 + modifier = grateful_opinion + } + } + pay_short_term_gold = { + target = scope:emperor + gold = medium_gold_value + } + if = { + limit = { + can_add_hook = { + target = scope:emperor + type = favor_hook + } + } + add_hook = { + target = scope:emperor + type = favor_hook + } + } + else = { + change_influence = major_influence_gain + } +} +ep3_admin_war_aftermath_effect = { + scope:war = { + if = { + limit = { + any_war_participant = { + is_landed = yes + government_has_flag = government_is_administrative + } + } + every_war_participant = { + limit = { + is_landed = yes + government_has_flag = government_is_administrative + } + primary_title = { + set_variable = { + name = admin_war_aftermath_var + years = 5 + } + } + } + } + } +} + +state_faith_conversion_add_piety_effect = { + if = { + limit = { + scope:actor = { + top_liege = { government_allows = state_faith } + faith = top_liege.primary_title.state_faith + } + scope:recipient.top_liege = { government_allows = state_faith } + } + scope:actor = { + add_piety = medium_piety_gain + } + } +} + +state_faith_refuse_conversion_add_piety_effect = { + if = { + limit = { + scope:actor.top_liege = { government_allows = state_faith } + scope:recipient = { + top_liege = { government_allows = state_faith } + faith = top_liege.primary_title.state_faith + } + } + scope:recipient = { add_piety = medium_piety_gain } + } +} + +# EP3 Laamp possibility warning +ep3_war_loss_adventurer_tt_effect = { + save_scope_as = war_loser + if = { + limit = { + has_ep3_dlc_trigger = yes + NOT = { + any_held_title = { + OR = { + is_landless_type_title = yes + is_noble_family_title = yes + } + } + } + trigger_if = { + limit = { any_in_list = { list = target_titles } } + OR = { + # You are losing all your counties and have no vassals to steal from + AND = { + any_held_county = { + count = all + OR = { + is_in_list = target_titles + target_is_de_jure_liege_or_above = scope:war_loser.primary_title + } + } + any_vassal = { + count = 0 + highest_held_title_tier >= tier_county + } + } + # You are losing all your held titles + any_held_title = { + count = all + OR = { + is_in_list = target_titles + target_is_de_jure_liege_or_above = scope:war_loser.primary_title + } + } + } + } + } + custom_tooltip = laamp_may_become_adventurer_tt + } +} + +add_randomised_double_moon_modifier_effect = { + hidden_effect = { + scope:double_moon_book = { + random_list = { + 1 = { + add_artifact_modifier = artifact_prowess_2_modifier + set_artifact_description = double_moon_tome_desc_1 + } + 1 = { + add_artifact_modifier = artifact_knight_effectiveness_4_modifier + set_artifact_description = double_moon_tome_desc_2 + } + 1 = { + add_artifact_modifier = artifact_stewardship_1_modifier + set_artifact_description = double_moon_tome_desc_3 + } + 1 = { + add_artifact_modifier = artifact_diplomacy_1_modifier + set_artifact_description = double_moon_tome_desc_4 + } + 1 = { + add_artifact_modifier = artifact_health_gain_1_modifier + set_artifact_description = double_moon_tome_desc_5 + } + 1 = { + add_artifact_modifier = artifact_monthly_minor_prestige_3_modifier + set_artifact_description = double_moon_tome_desc_6 + } + 1 = { + add_artifact_modifier = artifact_monthly_prestige_3_modifier + set_artifact_description = double_moon_tome_desc_7 + } + 1 = { + add_artifact_modifier = artifact_dynasty_opinion_2_modifier + set_artifact_description = double_moon_tome_desc_8 + } + 1 = { + add_artifact_modifier = artifact_learn_language_scheme_phase_duration_add_2_modifier + set_artifact_description = double_moon_tome_desc_9 + } + 1 = { + add_artifact_modifier = artifact_diplomacy_per_prestige_level_modifier + set_artifact_description = double_moon_tome_desc_10 + } + 1 = { + add_artifact_modifier = artifact_mercenary_hire_cost_mult_2_modifier + set_artifact_description = double_moon_tome_desc_11 + } + 1 = { + add_artifact_modifier = artifact_general_opinion_1_modifier + set_artifact_description = double_moon_tome_desc_12 + } + 1 = { + add_artifact_modifier = artifact_independent_ruler_opinion_2_modifier + set_artifact_description = double_moon_tome_desc_13 + } + 1 = { + add_artifact_modifier = artifact_clergy_opinion_2_modifier + set_artifact_description = double_moon_tome_desc_14 + } + } + } + } +} + +random_rain_snow_chance_effect = { + random_list = { + 10 = { # Snow + trigger = { + location = { + OR = { + has_province_modifier = winter_mild_modifier + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } + } + } + save_scope_as = snow_day + } + 10 = { # Rain + trigger = { + location = { + NOR = { + has_province_modifier = winter_mild_modifier + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } + } + } + modifier = { + factor = 1.02 + location.county = { is_riverside_county = yes } + } + modifier = { + factor = 0.05 + location = { + OR = { + terrain = desert + terrain = drylands + terrain = desert_mountains + terrain = oasis + + } + } + } + save_scope_as = rain_day + } + 10 = {} # No rain + } +} + +governor_resignation_title_transfer_effect = { + save_scope_as = resigner + top_liege = { save_scope_as = emperor } + force_step_down_landed_titles = yes +} + +boost_governor_efficiency_success_effect = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = boost_efficiency_success_desc + left_icon = scope:recipient + + scope:recipient ?= { + send_interface_toast = { + type = event_toast_effect_good + title = boost_efficiency_success_desc + left_icon = scope:actor + if = { + limit = { has_character_modifier = ep3_damage_efficiency_modifier } + remove_character_modifier = ep3_damage_efficiency_modifier + if = { + limit = { var:ep3_governor_efficiency_stack = 1 } + remove_variable = ep3_governor_efficiency_stack + } + else = { + change_variable = { + name = ep3_governor_efficiency_stack + add = -1 + } + } + } + else = { + add_character_modifier = { + modifier = ep3_boost_efficiency_modifier + years = 10 + } + if = { + limit = { has_variable = ep3_governor_efficiency_stack } + set_variable = { + name = ep3_governor_efficiency_stack + value = { + value = scope:recipient.var:ep3_governor_efficiency_stack + add = 1 + max = 5 + } + years = 10 + } + } + else = { + set_variable = { + name = ep3_governor_efficiency_stack + value = 1 + years = 10 + } + } + } + if = { + limit = { + opinion = { + target = scope:actor + value >= 15 + } + } + scope:actor = { + progress_towards_friend_effect = { + REASON = friend_boosted_gov_efficiency + CHARACTER = scope:recipient + OPINION = default_friend_opinion + } + } + } + else_if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = boosted_efficiency_opinion + } + } + } + } + # Merit based realm gain some merit for improving others + if = { + limit = { + government_allows = merit + } + change_merit = medium_merit_gain + } + } + } +} + +boost_governor_efficiency_duel_effect = { + scope:actor = { + duel = { + skill = $SKILL$ + value = mediocre_skill_rating + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -49 + } + min = 2 + desc = boost_efficiency_success_desc + send_interface_toast = { + type = event_toast_effect_good + title = boost_efficiency_success_desc + left_icon = scope:recipient + boost_governor_efficiency_success_effect = yes + } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1.5 + min = -49 + } + min = 2 + desc = boost_efficiency_failure_desc + send_interface_toast = { + type = event_toast_text_bad + title = boost_efficiency_failure_desc + left_icon = scope:recipient + desc = NO_EFFECT + } + } + } + } +} + +damage_governor_efficiency_success_effect = { + scope:recipient ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = damage_efficiency_success_desc + left_icon = scope:actor + if = { + limit = { has_character_modifier = ep3_boost_efficiency_modifier } + remove_character_modifier = ep3_boost_efficiency_modifier + if = { + limit = { var:ep3_governor_efficiency_stack = 1 } + remove_variable = ep3_governor_efficiency_stack + } + else = { + change_variable = { + name = ep3_governor_efficiency_stack + add = -1 + } + } + } + else = { + add_character_modifier = { + modifier = ep3_damage_efficiency_modifier + years = 10 + } + if = { + limit = { has_variable = ep3_governor_efficiency_stack } + set_variable = { + name = ep3_governor_efficiency_stack + value = { + value = scope:recipient.var:ep3_governor_efficiency_stack + add = 1 + max = 5 + } + years = 10 + } + } + else = { + set_variable = { + name = ep3_governor_efficiency_stack + value = 1 + years = 10 + } + } + } + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = damaged_efficiency_opinion + } + } + } + } +} + +damage_governor_efficiency_duel_effect = { + scope:actor = { + duel = { + skill = $SKILL$ + value = mediocre_skill_rating + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -49 + } + min = 2 + desc = damage_efficiency_success_desc + send_interface_toast = { + type = event_toast_effect_good + title = damage_efficiency_success_desc + left_icon = scope:recipient + damage_governor_efficiency_success_effect = yes + } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1.5 + min = -49 + } + min = 2 + desc = damage_efficiency_failure_desc + send_interface_toast = { + type = event_toast_text_bad + title = damage_efficiency_success_desc + left_icon = scope:recipient + desc = NO_EFFECT + } + } + } + } +} + +# NF Adoption effect +noble_family_adoption_effect = { + $ADOPTEE$ = { + if = { + limit = { + exists = house.house_head + } + house.house_head = { #We do this first, otherwise house head will already mean someone else. + if = { + limit = { + $ADOPTER$.culture = { has_cultural_parameter = wider_adoption } + $ADOPTEE$ = { + culture = { has_cultural_parameter = wider_adoption } + NOT = { + any_parent = { + is_alive = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = liege } + } + } + } + } + add_opinion = { + modifier = adopted_my_house_member_opinion + opinion = 25 + target = $ADOPTER$ + } + } + else = { + add_opinion = { + modifier = adopted_my_house_member_opinion + opinion = -25 + target = $ADOPTER$ + } + } + if = { + limit = { + has_hook_of_type = { + type = house_head_hook + target = $ADOPTEE$ + } + } + remove_hook = { + type = house_head_hook + target = $ADOPTEE$ + } + } + } + } + } + $ADOPTER$ = { + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + target = $ADOPTEE$ + gold = $ADOPTER$.minor_gold_value + } + } + if = { + limit = { scope:hook = yes } + use_hook = $ADOPTEE$ + } + $ADOPTEE$ = { set_house = $ADOPTER$.house } + # Zealous vassals *hate* you adopting a heretic + house = { + every_house_member = { + custom = every_zealot_house_member_tt + limit = { + ai_zeal >= medium_positive_ai_value + faith = { faith_hostility_level = { target = $ADOPTEE$.faith value >= faith_astray_level } } + NOT = { this = $ADOPTER$ } + } + add_opinion = { + modifier = adopted_new_house_member_opinion + opinion = -20 + target = $ADOPTER$ + } + } + every_house_member = { + custom = every_close_family_house_member_tt + limit = { + NOT = { this = $ADOPTER$ } + is_close_family_of = $ADOPTER$ + NAND = { + ai_zeal >= medium_positive_ai_value + faith = { faith_hostility_level = { target = $ADOPTEE$.faith value >= faith_astray_level } } + } + NAND = { + $ADOPTER$.culture = { has_cultural_parameter = wider_adoption } + $ADOPTEE$ = { + culture = { has_cultural_parameter = wider_adoption } + NOT = { + any_parent = { + is_alive = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = liege } + } + } + } + } + } + add_opinion = { + modifier = adopted_new_house_member_opinion + opinion = -10 + target = $ADOPTER$ + } + } + } + } + $ADOPTEE$ = { + #adopted should travel + if = { + limit = { exists = $ADOPTER$.capital_province } + $ADOPTER$.capital_province = { save_scope_as = destination_province } + } + else_if = { + limit = { exists = $ADOPTER$.host.capital_province } + $ADOPTER$.host.capital_province = { save_scope_as = destination_province } + } + else_if = { + limit = { exists = $ADOPTER$.domicile.domicile_location } + $ADOPTER$.domicile.domicile_location = { save_scope_as = destination_province } + } + else = { + $ADOPTER$.location = { save_scope_as = destination_province } + } + save_scope_as = adoptee + $ADOPTER$ = { save_scope_as = adopter } + if = { + limit = { + any_relation = { + type = guardian + NOT = { this = $ADOPTER$ } + } + } + random_relation = { + type = guardian + limit = { NOT = { this = $ADOPTER$ } } + save_scope_as = old_guardian + } + remove_guardian_effect = { + GUARDIAN = scope:old_guardian + WARD = scope:adoptee + RETURN_WARD = no + HIDE_OPINION = no + } + } + if = { + limit = { NOT = { scope:destination_province = $ADOPTEE$.location } } + set_variable = { + name = adoptee_travelling_to_adopter + years = 2 + value = scope:adopter + } + start_travel_plan = { + destination = scope:destination_province + on_start_on_action = on_adoptee_depart_for_adopter + on_travel_planner_cancel_on_action = on_adoptee_depart_travel_planner_exit + on_arrival_on_action = on_adoptee_arrive_at_adopter + on_arrival_destinations = last + return_trip = no # One way + } + custom_tooltip = adoptee_leaves_for_adopter_tt + } + else_if = { + limit = { + $ADOPTER$ = { + NOT = { is_in_the_same_court_as = $ADOPTEE$ } + } + } + $ADOPTER$ = { add_courtier = $ADOPTEE$ } + } + #No final else, in this situation they are already in the right location and the right court. + } +} + +# Create icon artifacts +## Court Artifact - Large +create_artifact_court_icon_large_effect = { + # Get the character the artifact is being made for. + $OWNER$ = { save_scope_as = owner } + $PAINTER$ = { save_scope_as = painter } + + hidden_effect_new_object = { + # Get artifact quality, wealth, and materials + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + # Create the artifact + scope:owner = { + if = { + limit = { + exists = scope:inspiration_owner + } + create_artifact = { + name = artifact_wall_court_icon_large_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = icon_court_large + type = wall_big + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + else_if = { + limit = { + exists = scope:adventurer + } + create_artifact = { + name = artifact_wall_court_icon_large_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:adventurer + visuals = icon_court_large + type = wall_big + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + history = { + location = scope:location + actor = scope:adventurer + recipient = root + type = discovered + } + } + } + else = { + create_artifact = { + name = artifact_wall_court_icon_large_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = icon_court_large + type = wall_big + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + } + scope:newly_created_artifact = { + set_artifact_description = artifact_wall_court_icon_large_description + # Set piety + add_2_scaled_artifact_modifier_devotion_effect = yes + + if = { + limit = { + OR = { + rarity = famed + rarity = illustrious + } + } + add_scaled_artifact_modifier_dynasty_prestige_effect = yes + } + remove_artifact_modifier = artifact_placeholder_modifier + } + } +} + +## Court Artifact - Small +create_artifact_court_icon_small_effect = { + # Get the character the artifact is being made for. + $OWNER$ = { save_scope_as = owner } + $PAINTER$ = { save_scope_as = painter } + + hidden_effect_new_object = { + # Get artifact quality, wealth, and materials + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + # Create the artifact + scope:owner = { + if = { + limit = { + exists = scope:inspiration_owner + } + create_artifact = { + name = artifact_wall_court_icon_small_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = icon_court_small + type = wall_small + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + else_if = { + limit = { + exists = scope:adventurer + } + create_artifact = { + name = artifact_wall_court_icon_small_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:adventurer + visuals = icon_court_small + type = wall_small + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + history = { + location = scope:location + actor = scope:adventurer + recipient = root + type = discovered + } + } + } + else = { + create_artifact = { + name = artifact_wall_court_icon_small_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = icon_court_small + type = wall_small + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + } + scope:newly_created_artifact = { + set_artifact_description = artifact_wall_court_icon_small_description + # Set piety + add_2_scaled_artifact_modifier_devotion_effect = yes + + if = { + limit = { + OR = { + rarity = famed + rarity = illustrious + } + } + add_scaled_artifact_modifier_dynasty_prestige_effect = yes + } + remove_artifact_modifier = artifact_placeholder_modifier + } + } +} + +## Trinket Artifact +create_artifact_trinket_icon_effect = { + # Get the character the artifact is being made for. + $OWNER$ = { save_scope_as = owner } + $PAINTER$ = { save_scope_as = painter } + + hidden_effect_new_object = { + # Get artifact quality, wealth, and materials + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + # Create the artifact + scope:owner = { + if = { + limit = { + exists = scope:inspiration_owner + } + create_artifact = { + name = artifact_trinket_icon_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = trinket_icon + type = miscellaneous + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + else_if = { + limit = { + exists = scope:adventurer + } + create_artifact = { + name = artifact_trinket_icon_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:adventurer + visuals = icon_court_small + type = miscellaneous + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + history = { + location = scope:location + actor = scope:adventurer + recipient = root + type = discovered + } + } + } + else = { + create_artifact = { + name = artifact_trinket_icon_name + description = placeholder # Will be regenerated in the post-creation effects + creator = scope:painter + visuals = trinket_icon + type = miscellaneous + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + } + scope:newly_created_artifact = { + set_artifact_description = artifact_trinket_icon_description + # Set piety + add_scaled_artifact_modifier_piety_effect = yes + + if = { + limit = { + OR = { + rarity = famed + rarity = illustrious + } + } + add_scaled_artifact_modifier_learning_lifestyle_xp_effect = yes + } + remove_artifact_modifier = artifact_placeholder_modifier + } + } +} + +## Trinket Artifact +create_artifact_trinket_icon_ancient_effect = { + # Get the character the artifact is being made for. + $OWNER$ = { save_scope_as = owner } + + hidden_effect_new_object = { + # Get artifact quality, wealth, and materials + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + # Create the artifact + scope:owner = { + create_artifact = { + name = artifact_trinket_icon_name + description = placeholder # Will be regenerated in the post-creation effects + visuals = trinket_icon + type = miscellaneous + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + history = { type = created_before_history } + } + } + scope:newly_created_artifact = { + set_artifact_description = artifact_trinket_icon_description + # Set piety + add_scaled_artifact_modifier_piety_effect = yes + + if = { + limit = { + OR = { + rarity = famed + rarity = illustrious + } + } + add_scaled_artifact_modifier_learning_lifestyle_xp_effect = yes + } + remove_artifact_modifier = artifact_placeholder_modifier + } + } +} +# Scheme bonuses from being the emperor, or member of a dominant/powerful family +ep3_actor_scheme_modifier_effect = { + scope:new_scheme ?= { + # Emperor enjoys a significant bonus to all admin related schemes + if = { + limit = { scope:actor = scope:actor.top_liege } + add_scheme_modifier = { type = admin_emperor_scheme_modifier } + } + # Dominant and Powerful Families enjoys a decent bonus to all admin related schemes + else_if = { + limit = { + scope:actor.house ?= { is_dominant_family = yes } + } + add_scheme_modifier = { type = admin_dominant_family_scheme_modifier } + } + else_if = { + limit = { + scope:actor.house ?= { is_powerful_family = yes } + } + add_scheme_modifier = { type = admin_powerful_family_scheme_modifier } + } + } +} + +#Complete war group task contracts, used in war_on_actions +war_task_contracts_completion_effect = { + #Join War Contract and Help Claimant Contract + scope:war = { + if = { + limit = { + any_war_participant = { + any_character_active_contract = { + OR = { + AND = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war ?= scope:war + } + AND = { + has_task_contract_type = laamp_help_claimant_contract + task_contract_employer = scope:war.primary_attacker + } + } + save_temporary_scope_as = relevant_contract + } + } + } + scope:relevant_contract = { + if = { + limit = { + scope:war = { + war_contribution = { + target = scope:relevant_contract.task_contract_taker + value > 0 + } + } + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + if = { + limit = { + primary_attacker = { + has_variable = valuable_prisoners + } + } + primary_attacker = { + remove_variable = valuable_prisoners + } + } + if = { + limit = { + primary_defender = { + has_variable = valuable_prisoners + } + } + primary_defender = { + remove_variable = valuable_prisoners + } + } + if = { + limit = { + using_civil_war_cb_trigger = yes + any_war_participant = { + any_character_active_contract = { + task_contract_type = laamp_join_faction_contract + task_contract_employer = { + is_participant_in_war = scope:war + } + } + } + } + every_war_participant = { + every_character_active_contract = { + task_contract_type = laamp_join_faction_contract + limit = { + task_contract_employer = { + is_participant_in_war = scope:war + } + } + if = { + limit = { + task_contract_taker = scope:winner + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + } + } +} + +#If a landless adventurer was hired as a mercenary and contributed in a war they get paid, used in war_on_actions, relevant flag set by hire_laamp_mercenaries_interaction or ep3_interactions_events.0112 +laamp_as_mercenary_payout_effect = { + scope:war = { + if = { + limit = { + any_war_participant = { + has_character_flag = joined_as_mercenary + is_attacker_in_war = scope:war + NOT = { is_leader_in_war = scope:war } + OR = { + has_raised_armies = yes + scope:war = { + war_contribution = { + target = prev + value > 0 + } + } + } + } + } + every_war_participant = { + limit = { + has_character_flag = joined_as_mercenary + is_attacker_in_war = scope:war + NOT = { is_leader_in_war = scope:war } + OR = { + has_raised_armies = yes + scope:war = { + war_contribution = { + target = prev + value > 0 + } + } + } + } + add_to_list = laamp_mercenaries + remove_character_flag = joined_as_mercenary + } + primary_attacker = { + save_scope_as = employer + trigger_event = { + id = ep3_interactions_events.0121 + days = { 3 7 } + } + } + every_in_list = { + list = laamp_mercenaries + scope:employer = { + remove_list_variable = { + name = hired_mercenaries + target = prev + } + } + } + } + if = { + limit = { + any_war_participant = { + has_character_flag = joined_as_mercenary + is_defender_in_war = scope:war + NOT = { is_leader_in_war = scope:war } + OR = { + has_raised_armies = yes + scope:war = { + war_contribution = { + target = prev + value > 0 + } + } + } + } + } + every_war_participant = { + limit = { + has_character_flag = joined_as_mercenary + is_defender_in_war = scope:war + NOT = { is_leader_in_war = scope:war } + OR = { + has_raised_armies = yes + scope:war = { + war_contribution = { + target = prev + value > 0 + } + } + } + } + add_to_list = laamp_mercenaries + remove_character_flag = joined_as_mercenary + } + primary_defender = { + save_scope_as = employer + trigger_event = { + id = ep3_interactions_events.0121 + days = { 3 7 } + } + } + every_in_list = { + list = laamp_mercenaries + scope:employer = { + remove_list_variable = { + name = hired_mercenaries + target = prev + } + } + } + } + } +} + +# root - casus_belli +# war - war provided by the casus_belli +# attacker - primary attacker from the casus_belli +# defender - primary defender from the casus_belli +laamp_as_mercenary_payout_tooltip_effect = { + show_as_tooltip = { + scope:defender = { + if = { + limit = { + exists = scope:war + any_war_ally = { + has_government = landless_adventurer_government + OR = { + any_character_active_contract = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war ?= scope:war + } + AND = { + has_variable = owed_contract_assistance_gold + var:owed_contract_assistance_war ?= scope:war + } + has_variable = joined_as_mercenary + } + } + } + every_war_ally = { + if = { + limit = { + has_government = landless_adventurer_government + } + save_scope_as = laamp_temp + save_scope_as = actor + save_scope_value_as = { + name = war_contribution_value + value = "scope:war.war_contribution(scope:laamp_temp)" + } + if = { + limit = { + any_character_active_contract = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war = scope:war + } + } + every_character_active_contract = { + limit = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war = scope:war + } + show_as_tooltip = { + task_contract_employer = { + save_scope_as = employer + custom_tooltip = ep3_join_war_payment_tt + pay_short_term_gold = { + target = scope:laamp_temp + gold = ep3_hire_laamp_mercs_payment_value + } + } + } + } + } + if = { + limit = { + has_variable = joined_as_mercenary + scope:defender = { + is_target_in_variable_list = { + name = hired_mercenaries + target = scope:laamp_temp + } + } + } + scope:defender = { + save_scope_as = employer + custom_tooltip = ep3_hire_laamp_mercs_payment_tt + pay_short_term_gold = { + target = scope:laamp_temp + gold = ep3_hire_laamp_mercs_payment_value + } + } + } + if = { + limit = { + has_variable = owed_contract_assistance_gold + var:owed_contract_assistance_war ?= scope:war + } + save_scope_as = contract_assistance_helper + scope:defender = { + save_scope_as = recipient + custom_tooltip = contract_assistance_interaction_condition_tt + pay_short_term_gold = { + target = scope:actor + gold = scope:actor.var:owed_contract_assistance_gold + } + } + } + } + } + } + } + scope:attacker = { + if = { + limit = { + exists = scope:war + any_war_ally = { + has_government = landless_adventurer_government + OR = { + any_character_active_contract = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war = scope:war + } + AND = { + has_variable = owed_contract_assistance_gold + var:owed_contract_assistance_war ?= scope:war + } + has_variable = joined_as_mercenary + } + } + } + every_war_ally = { + if = { + limit = { + has_government = landless_adventurer_government + } + save_scope_as = laamp_temp + save_scope_as = actor + save_scope_value_as = { + name = war_contribution_value + value = "scope:war.war_contribution(scope:laamp_temp)" + } + if = { + limit = { + any_character_active_contract = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war = scope:war + } + } + every_character_active_contract = { + limit = { + has_task_contract_type = laamp_join_war_contract + var:task_contract_war = scope:war + } + show_as_tooltip = { + task_contract_employer = { + save_scope_as = employer + custom_tooltip = ep3_hire_laamp_mercs_payment_tt + pay_short_term_gold = { + target = scope:laamp_temp + gold = ep3_hire_laamp_mercs_payment_value + } + } + } + } + } + if = { + limit = { + has_variable = joined_as_mercenary + scope:attacker = { + is_target_in_variable_list = { + name = hired_mercenaries + target = scope:laamp_temp + } + } + } + scope:attacker = { + save_scope_as = employer + custom_tooltip = ep3_hire_laamp_mercs_payment_tt + pay_short_term_gold = { + target = scope:laamp_temp + gold = ep3_hire_laamp_mercs_payment_value + } + } + } + if = { + limit = { + has_variable = owed_contract_assistance_gold + var:owed_contract_assistance_war ?= scope:war + } + save_scope_as = contract_assistance_helper + scope:attacker = { + custom_tooltip = contract_assistance_interaction_condition_tt + pay_short_term_gold = { + target = scope:actor + gold = scope:actor.var:owed_contract_assistance_gold + } + } + } + } + } + } + } + } +} + +chariot_race_sow_discord_strong_response_effect = { + if = { + limit = { + root = { + this = scope:host + } + } + scope:host = { + capital_county = { + change_county_control = { + value = -3 + multiply = scope:activity.var:counter_chant_count + } + } + custom_tooltip = counter_chants_strong_modifier_tooltip + hidden_effect = { + scope:activity = { + every_in_list = { + variable = counter_chanters + scope:host = { + capital_county = { + add_county_modifier = { + modifier = strong_sow_discord_modifier + years = 10 + } + } + } + } + } + } + } + } + else = { + scope:host = { + capital_county = { + add_county_modifier = { + modifier = strong_sow_discord_modifier + years = 10 + } + change_county_control = -3 + } + } + } +} +chariot_race_sow_discord_weak_response_effect = { + if = { + limit = { + root = { + this = scope:host + } + } + scope:host = { + custom_tooltip = counter_chants_weak_modifier_tooltip + hidden_effect = { + scope:activity = { + every_in_list = { + variable = counter_chanters + scope:host = { + capital_county = { + add_county_modifier = { + modifier = weak_sow_discord_modifier + years = 10 + } + } + } + } + } + } + } + } + else = { + scope:host = { + capital_county = { + add_county_modifier = { + modifier = weak_sow_discord_modifier + years = 10 + } + } + } + } +} +chariot_race_sow_discord_normal_response_effect = { + if = { + limit = { + root = { + this = scope:host + } + } + scope:host = { + capital_county = { + change_county_control = { + value = -1 + multiply = scope:activity.var:counter_chant_count + } + } + custom_tooltip = counter_chants_normal_modifier_tooltip + hidden_effect = { + scope:activity = { + every_in_list = { + variable = counter_chanters + scope:host = { + capital_county = { + add_county_modifier = { + modifier = normal_sow_discord_modifier + years = 10 + } + } + } + } + } + } + } + } + else = { + scope:host = { + capital_county = { + add_county_modifier = { + modifier = normal_sow_discord_modifier + years = 10 + } + custom_tooltip = modifier_stacking_chariot_tooltip + change_county_control = -1 + } + } + } +} + +############# +# Camp Party +############# + +camp_party_completed_log_entry_effect = { + involved_activity = { + add_activity_log_entry = { + key = camp_party_completed_log_entry_effect + tags = { completed } + score = 100 + show_in_conclusion = yes + character = root + #Effects + root = { + disburse_camp_party_reward_effect = yes + } + } + } +} + +disburse_camp_party_reward_effect = { + involved_activity ?= { + ###Non-progression linked + #Drinks + scope:host = { + #For highest level drinks + if = { + limit = { + involved_activity = { + has_activity_option = { + category = camp_party_option_drinks + option = camp_party_drinks_abundant + } + } + } + add_character_modifier = { + modifier = ep3_master_of_ceremonies + years = 3 + } + } + + #For any level of drinks + #Opinion + if = { + limit = { + involved_activity = { + OR = { + has_activity_option = { + category = camp_party_option_drinks + option = camp_party_drinks_abundant + } + has_activity_option = { + category = camp_party_option_drinks + option = camp_party_drinks_adequate + } + } + } + } + involved_activity = { + every_attending_character = { + limit = { + this != scope:host + } + custom = every_attending_guest + add_opinion = { + modifier = feast_life_of_the_party_opinion + target = scope:host + opinion = 35 + } + } + } + } + + # Reveler Trait + if = { + limit = { + involved_activity = { + OR = { + has_activity_option = { + category = camp_party_option_drinks + option = camp_party_drinks_abundant + } + has_activity_option = { + category = camp_party_option_drinks + option = camp_party_drinks_adequate + } + } + } + } + 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_low + max = small_lifestyle_random_xp_high + } + } + } + } + } + + #100 Carousing + if = { + limit = { var:activity_special_type_progression >= 100 } + + #Stress Loss + every_attending_character = { + custom = every_attending_guest + add_stress = -150 + } + + #Host effects + scope:host = { + hidden_effect = { + domicile = { + random_list = { + 1 = { + trigger = { + has_domicile_building_or_higher = camp_main_01 + NOT = { has_domicile_building = camp_main_04 } + } + 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 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = supply_tent_01 + NOT = { has_domicile_building = supply_tent_06 } + } + switch = { + trigger = has_domicile_building + supply_tent_01 = { add_domicile_building = supply_tent_02 } + supply_tent_02 = { add_domicile_building = supply_tent_03 } + supply_tent_03 = { add_domicile_building = supply_tent_04 } + supply_tent_04 = { add_domicile_building = supply_tent_05 } + supply_tent_05 = { add_domicile_building = supply_tent_06 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = barber_tent_01 + NOT = { has_domicile_building = barber_tent_06 } + } + switch = { + trigger = has_domicile_building + barber_tent_01 = { add_domicile_building = barber_tent_02 } + barber_tent_02 = { add_domicile_building = barber_tent_03 } + barber_tent_03 = { add_domicile_building = barber_tent_04 } + barber_tent_04 = { add_domicile_building = barber_tent_05 } + barber_tent_05 = { add_domicile_building = barber_tent_06 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = baggage_train_01 + NOT = { has_domicile_building = baggage_train_06 } + } + switch = { + trigger = has_domicile_building + baggage_train_01 = { add_domicile_building = baggage_train_02 } + baggage_train_02 = { add_domicile_building = baggage_train_03 } + baggage_train_03 = { add_domicile_building = baggage_train_04 } + baggage_train_04 = { add_domicile_building = baggage_train_05 } + baggage_train_05 = { add_domicile_building = baggage_train_06 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = camp_fire_01 + NOT = { has_domicile_building = camp_fire_06 } + } + switch = { + trigger = has_domicile_building + camp_fire_01 = { add_domicile_building = camp_fire_02 } + camp_fire_02 = { add_domicile_building = camp_fire_03 } + camp_fire_03 = { add_domicile_building = camp_fire_04 } + camp_fire_04 = { add_domicile_building = camp_fire_05 } + camp_fire_05 = { add_domicile_building = camp_fire_06 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = proving_grounds_01 + NOT = { has_domicile_building = proving_grounds_06 } + } + switch = { + trigger = has_domicile_building + proving_grounds_01 = { add_domicile_building = proving_grounds_02 } + proving_grounds_02 = { add_domicile_building = proving_grounds_03 } + proving_grounds_03 = { add_domicile_building = proving_grounds_04 } + proving_grounds_04 = { add_domicile_building = proving_grounds_05 } + proving_grounds_05 = { add_domicile_building = proving_grounds_06 } + } + } + 1 = { + trigger = { + has_domicile_building_or_higher = camp_perimeter_01 + NOT = { has_domicile_building = camp_perimeter_06 } + } + switch = { + trigger = has_domicile_building + camp_perimeter_01 = { add_domicile_building = camp_perimeter_02 } + camp_perimeter_02 = { add_domicile_building = camp_perimeter_03 } + camp_perimeter_03 = { add_domicile_building = camp_perimeter_04 } + camp_perimeter_04 = { add_domicile_building = camp_perimeter_05 } + camp_perimeter_05 = { add_domicile_building = camp_perimeter_06 } + } + } + } + } + } + + custom_tooltip = activity_camp_party_reward_upgrade_building + + custom_tooltip = camp_party_100_contracts_get + + hidden_effect = { + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 2 + } + } + + #Provisions + domicile = { + change_provisions = massive_provisions_gain + } + + #Lifestyle XP + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = major } + + add_character_flag = { + flag = better_recruitment_visit_holding_flag + years = 1 + } + } + } + + #75+ Carousing + else_if = { + limit = { + var:activity_special_type_progression < 100 + var:activity_special_type_progression >= 75 + } + + #Stress Loss + every_attending_character = { + custom = every_attending_guest + add_stress = -100 + } + + #Contract spawn & flag assign + scope:host = { + custom_tooltip = camp_party_75_contracts_get + + hidden_effect = { + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 1 + } + } + + #Provisions + domicile = { + change_provisions = major_provisions_gain + } + + #Lifestyle XP + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + + add_character_flag = { + flag = better_recruitment_visit_holding_flag + years = 1 + } + } + } + #50+ Carousing + else_if = { + limit = { + var:activity_special_type_progression < 75 + var:activity_special_type_progression >= 50 + } + + #Stress Loss + every_attending_character = { + custom = every_attending_guest + add_stress = -75 + } + + #Contract spawn and flag assign + scope:host = { + #Provisions + domicile = { + change_provisions = medium_provisions_gain + } + + #Lifestyle XP + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = minor } + + add_character_flag = { + flag = better_recruitment_visit_holding_flag + years = 1 + } + } + } + #25+ Carousing + else = { + #Stress Loss + every_attending_character = { + custom = every_attending_guest + add_stress = -50 + } + + scope:host = { + add_character_flag = { + flag = cheaper_provisions_visit_holding_flag + years = 1 + } + } + } + + scope:host = { + if = { + limit = { + has_activity_intent = fireside_chat_intent + } + hidden_effect = { + remove_character_modifier = ep3_fireside_chat_modifier_3 + remove_character_modifier = ep3_fireside_chat_modifier_2 + remove_character_modifier = ep3_fireside_chat_modifier_1 + } + if = { + limit = { + involved_activity = { + any_attending_character = { + count >= 4 + OR = { + has_character_modifier = ep3_fireside_chat_diplomacy + has_character_modifier = ep3_fireside_chat_learning + has_character_modifier = ep3_fireside_chat_intrigue + has_character_modifier = ep3_fireside_chat_stewardship + has_character_modifier = ep3_fireside_chat_martial + } + } + } + } + add_character_modifier = { + modifier = ep3_fireside_chat_modifier_3 + years = 10 + } + } + else_if = { + limit = { + involved_activity = { + any_attending_character = { + count >= 2 + OR = { + has_character_modifier = ep3_fireside_chat_diplomacy + has_character_modifier = ep3_fireside_chat_learning + has_character_modifier = ep3_fireside_chat_intrigue + has_character_modifier = ep3_fireside_chat_stewardship + has_character_modifier = ep3_fireside_chat_martial + } + } + } + } + add_character_modifier = { + modifier = ep3_fireside_chat_modifier_2 + years = 10 + } + } + else = { + add_character_modifier = { + modifier = ep3_fireside_chat_modifier_1 + years = 10 + } + } + } + } + } +} + +ep3_camp_party_visit_holding_skills_boost = { + add_diplomacy_skill = { 1 3 } + add_martial_skill = { 1 3 } + add_stewardship_skill = { 1 3 } + add_intrigue_skill = { 1 3 } + add_learning_skill = { 1 3 } +} + +#Setting up the Fens as a pseudo-custom region +ep3_the_fens_list_effect = { + province:1525 = { add_to_list = the_fens } #b_lynn + province:1534 = { add_to_list = the_fens } #b_cambridgeshire + province:1535 = { add_to_list = the_fens } #b_radfield + province:1536 = { add_to_list = the_fens } #b_papworth + province:1537 = { add_to_list = the_fens } #b_ely + province:1541 = { add_to_list = the_fens } #b_hurstingstone + province:1542 = { add_to_list = the_fens } #b_norman_cross + province:1584 = { add_to_list = the_fens } #b_stamford + province:1585 = { add_to_list = the_fens } #b_boston + province:1601 = { add_to_list = the_fens } #b_peterborough +} + +#Used for setting up the Harrying of the North widget for events +#Requires use of ep3_harrying_widget_clear_effect in the 'after' as well +ep3_harrying_widget_setup_effect = { + global_var:harrying_of_the_north = { save_scope_as = story } + ## First, identify our widget character. + save_scope_as = scope_character + ## Then transfer over some suitable variables for the UI. + set_variable = { + name = pacification_gui + value = scope:story.var:pacification + } + set_variable = { + name = resistance_gui + value = scope:story.var:resistance + } +} + +#Increase pacification +ep3_increase_pacification_effect = { + save_scope_as = origin_char + scope:story = { + change_variable = { + name = pacification + add = $AMOUNT$ + } + } + set_variable = { + name = pacification_gui + value = scope:story.var:pacification + } + if = { #Display in red if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_increase_pacification_effect_tt_negative + } + else = { #Otherwise in green + custom_tooltip = ep3_increase_pacification_effect_tt_positive + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + } +} + +#Increase pacification - large +ep3_increase_pacification_large_effect = { + save_scope_as = origin_char + scope:story = { + change_variable = { + name = pacification + add = 2 + } + } + set_variable = { + name = pacification_gui + value = scope:story.var:pacification + } + if = { #Display in red if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_increase_pacification_effect_tt_negative_large + } + else = { #Otherwise in green + custom_tooltip = ep3_increase_pacification_effect_tt_positive_large + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_pacification_rise + title = harrying.notification_pacification_rise + desc = harrying_pacification_rise + } + } + } + } +} + +#Increase resistance +ep3_increase_resistance_effect = { + save_scope_as = origin_char + scope:story = { + change_variable = { + name = resistance + add = $AMOUNT$ + } + } + set_variable = { + name = resistance_gui + value = scope:story.var:resistance + } + if = { #Display in green if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_increase_resistance_effect_tt_positive + } + else = { #Otherwise in green + custom_tooltip = ep3_increase_resistance_effect_tt_negative + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + } +} + +#Increase resistance - large +ep3_increase_resistance_large_effect = { + save_scope_as = origin_char + scope:story = { + change_variable = { + name = resistance + add = 2 + } + } + set_variable = { + name = resistance_gui + value = scope:story.var:resistance + } + if = { #Display in green if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_increase_resistance_effect_tt_positive_large + } + else = { #Otherwise in green + custom_tooltip = ep3_increase_resistance_effect_tt_negative_large + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + random_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_resistance_rise + title = harrying.notification_resistance_rise + desc = harrying_resistance_rise + } + } + } + } +} + +#Decrease pacification +ep3_decrease_pacification_effect = { + save_scope_as = origin_char + if = { + limit = { scope:story.var:pacification != 0 } + scope:story = { + change_variable = { + name = pacification + add = -1 + } + } + set_variable = { + name = pacification_gui + value = scope:story.var:pacification + } + if = { #Display in green if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_decrease_pacification_effect_tt_positive + } + else = { #Otherwise in green + custom_tooltip = ep3_decrease_pacification_effect_tt_negative + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_pacification_falls + title = harrying.notification_pacification_fall + desc = harrying_pacification_fall + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_pacification_falls + title = harrying.notification_pacification_fall + desc = harrying_pacification_fall + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_pacification_falls + title = harrying.notification_pacification_fall + desc = harrying_pacification_fall + } + } + } + } + } +} + +#Decrease resistance +ep3_decrease_resistance_effect = { + save_scope_as = origin_char + if = { + limit = { scope:story.var:pacification != 0 } + scope:story = { + change_variable = { + name = resistance + add = -1 + } + } + set_variable = { + name = resistance_gui + value = scope:story.var:resistance + } + if = { #Display in red if Anglo-Saxon + limit = { + culture = culture:anglo_saxon + } + custom_tooltip = ep3_decrease_resistance_effect_tt_negative + } + else = { #Otherwise in green + custom_tooltip = ep3_decrease_resistance_effect_tt_positive + } + + if = { + limit = { + exists = scope:story.var:ruler_england + } + scope:story.var:ruler_england = { + send_interface_message = { + type = msg_resistance_falls + title = harrying.notification_resistance_fall + desc = harrying_resistance_fall + } + } + } + + if = { + limit = { + character:90028 = { + is_alive = yes + NOT = { + has_character_flag = hereward_settled_flag + } + } + } + character:90028 = { + send_interface_message = { + type = msg_resistance_falls + title = harrying.notification_resistance_fall + desc = harrying_resistance_fall + } + } + } + + if = { + limit = { + scope:story.var:ruler_england = { + any_vassal = { + culture = culture:anglo_saxon + } + } + } + scope:story.var:ruler_england = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + send_interface_message = { + type = msg_resistance_falls + title = harrying.notification_resistance_fall + desc = harrying_resistance_fall + } + } + } + } + } +} + +#Used for clearing widget data from the participants +ep3_harrying_widget_clear_effect = { + remove_variable = pacification_gui + remove_variable = resistance_gui +} + +# Effect for handling players and AI continuing as landless if deposed +# Should be used over the standard effect in most cases (except barons/unlanded AI etc.) +# DEPOSER should be whoever has caused the deposal - faction leader, ultimatum giver, etc. +depose_effect = { + show_as_tooltip = { depose = yes } + save_scope_as = allow_imprisoned_landless + if = { + limit = { is_valid_for_laampdom = yes } + custom_tooltip = laamp_may_become_adventurer_tt + } + set_variable = { + name = deposed_primary_title + value = primary_title + months = 1 + } + # Maintenance scopes + save_scope_as = defender + $DEPOSER$ = { + save_scope_as = attacker + save_scope_as = winner + } + # ACH crown laws reset + if = { + limit = { + has_variable = crowned_king_var + } + remove_variable = crowned_king_var + if = { + limit = { + NOT = { has_game_rule = coronation_laws_off } + OR = { + has_realm_law = crowned_king + has_realm_law = crowned_emperor + } + } + add_realm_law_skip_effects = uncrowned + } + } + if = { + limit = { + has_variable = crowned_emperor_var + } + remove_variable = crowned_emperor_var + if = { + limit = { + NOT = { has_game_rule = coronation_laws_off } + OR = { + has_realm_law = crowned_king + has_realm_law = crowned_emperor + } + } + add_realm_law_skip_effects = uncrowned + } + } + every_held_title = { add_to_list = target_titles } + trigger_event = ep3_laamps.0002 +} + +# Effect for handling players and AI continuing as landless if banished +# Should be used over the standard effect in most cases (except barons/unlanded AI etc.) +# BANISHER should be whoever has caused the banishment - imprisoner, ultimatum giver, etc. +banish_effect = { + show_as_tooltip = { banish = yes } + save_scope_as = allow_imprisoned_landless + if = { + limit = { is_valid_for_laampdom = yes } + custom_tooltip = laamp_may_become_adventurer_tt + } + $BANISHER$ = { save_scope_as = banisher } + trigger_event = ep3_laamps.0021 +} + +#Used for setting up the Peasant Leader widget for events +#Requires use of ep3_peasant_leader_widget_clear_effect in the 'after' as well +ep3_peasant_leader_widget_setup_effect = { + set_variable = { + name = support_gui + value = scope:task_contract.var:support + } + set_variable = { + name = control_gui + value = scope:task_contract.var:control + } + set_variable = { + name = num_of_corrupt_counties_gui + value = scope:task_contract.var:num_of_corrupt_counties + } +} +#Increase support +ep3_increase_peasant_support_effect = { + scope:task_contract = { + change_variable = { + name = support + add = 1 + } + add_to_variable_list = { + name = supported_counties + target = scope:corrupt_province.county + } + } + custom_tooltip = ep3_support_peasants_effect_tt + scope:task_contract.var:task_contract_councillor_liege ?= { + send_interface_message = { + type = msg_peasant_supported + title = msg_peasant_supported.title + desc = msg_peasant_supported.desc + } + } + scope:task_contract.var:task_contract_councillor ?= { + send_interface_message = { + type = msg_peasant_supported + title = msg_peasant_supported.title + desc = msg_peasant_supported.desc + } + } +} +#Increase control +ep3_increase_peasant_control_effect = { + scope:task_contract = { + change_variable = { + name = control + add = 1 + } + } + custom_tooltip = ep3_control_peasants_effect_tt + scope:task_contract.var:task_contract_councillor_liege ?= { + send_interface_message = { + type = msg_peasant_controlled + title = msg_peasant_controlled.title + desc = msg_peasant_controlled.desc + } + } + scope:task_contract.var:task_contract_councillor ?= { + send_interface_message = { + type = msg_peasant_controlled + title = msg_peasant_controlled.title + desc = msg_peasant_controlled.desc + } + } +} +#Used for clearing widget data from the participants +ep3_peasant_leader_widget_clear_effect = { + remove_variable = support_gui + remove_variable = control_gui + remove_variable = num_of_corrupt_counties_gui +} + +ep3_join_faction_war_effect = { + # Use hook/pay gold + scope:actor = { + if = { + limit = { + scope:hook = yes + has_hook = scope:recipient + } + use_hook = scope:recipient + } + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + gold = scope:actor.medium_gold_value + target = scope:recipient + } + } + } + # Gain some influence + scope:recipient = { + change_influence = 75 + # Remove from existing faction if swapping + if = { + limit = { exists = joined_faction } + leave_faction = joined_faction + } + if = { + limit = { target_is_liege_or_above = scope:secondary_recipient } + add_faction_cooldown_effect = { YEARS = 5 } + } + remove_character_flag = under_offer_join_faction_war_flag + } + scope:actor.joined_faction.faction_war = { + if = { + limit = { is_defender = scope:actor } + add_defender = scope:recipient + } + else = { add_attacker = scope:recipient } + } +} + +ep3_switch_faction_war_sides_effect = { + scope:actor = { + if = { + limit = { + scope:hook = yes + has_hook = scope:recipient + } + use_hook = scope:recipient + } + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + gold = scope:actor.medium_gold_value + target = scope:recipient + } + } + } + scope:recipient = { + change_influence = 150 + # Remove from existing faction if swapping + if = { + limit = { exists = joined_faction } + leave_faction = joined_faction + } + if = { + limit = { target_is_liege_or_above = scope:secondary_recipient } + add_faction_cooldown_effect = { YEARS = 5 } + } + } + scope:actor = { + every_character_war = { + limit = { ep3_switch_faction_war_sides_war_trigger = yes } + hidden_effect = { remove_participant = scope:recipient } + if = { + limit = { is_defender = scope:actor } + add_defender = scope:recipient + hidden_effect = { + primary_attacker = { + add_opinion = { + target = scope:recipient + modifier = betrayed_me_opinion + opinion = -25 + } + } + } + } + else = { + add_attacker = scope:recipient + primary_defender = { + hidden_effect = { + add_opinion = { + target = scope:recipient + modifier = betrayed_me_opinion + opinion = -25 + } + } + } + } + } + } + scope:recipient = { custom_tooltip = ep3_switch_faction_war_sides_cooldown_effect_tt } +} + +ep3_raid_insight_effect = { + add_character_modifier = { + modifier = raid_insight_$TYPE$ + years = 5 + } +} + +# Set up titles in the new realm. +# Determine potential breakaways +ep3_landless_invasion_titles_taken_effect = { + # Determine independent vassals + adventurer_realm_destabilisation_list_effect = { + TITLE_RECEIVER = $TITLE_RECEIVER$ + TITLE_GIVER = $TITLE_GIVER$ + TITLE = $TITLE$ + } + # Determine hierarchy + ep3_become_landed_save_liege_effect = { + TITLE_GIVER = $TITLE_GIVER$ + ALWAYS_INDEPENDENT = yes + TITLE_LIST = $TITLE_LIST$ + } + # Resolve title, liege, government changes + if = { + limit = { exists = scope:claimant } + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = $TITLE_RECEIVER$ + TITLE_LIST = $TITLE_LIST$ + TYPE = conquest_claim + REASON = flag:conquest_claim + ENNOBLED_ADVENTURER = flag:yes + } + } + else = { + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = $TITLE_RECEIVER$ + TITLE_LIST = $TITLE_LIST$ + TYPE = conquest + REASON = flag:conquest + ENNOBLED_ADVENTURER = flag:yes + } + } + # Vassals break away + adventurer_realm_destabilisation_transfer_effect = { + TITLE = $TITLE$ + TITLE_RECEIVER = $TITLE_RECEIVER$ + TITLE_GIVER = $TITLE_GIVER$ + TITLE_LIST = $TITLE_LIST$ + } +} + +governor_contract_invalidated_message_effect = { + task_contract_taker ?= { + save_scope_as = task_contract_character + send_interface_message = { + type = event_generic_bad_with_text + title = admin_contract_invalidated_title + left_icon = scope:task_contract_character + desc = admin_contract_invalidated_desc + + current_travel_plan ?= { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + } + } +} + +assign_favourite_child_effect = { + $ACTOR$ = { + random_relation = { + type = favorite_child + save_scope_as = current_favorite + } + send_interface_toast = { + title = choose_favorite_interaction_notification + left_icon = $ACTOR$ + right_icon = $RECIPIENT$ + if = { + limit = { + exists = scope:current_favorite + } + remove_relation_favorite_child = scope:current_favorite + scope:current_favorite = { + add_opinion = { + target = $ACTOR$ + modifier = no_more_favorite_opinion + } + } + } + set_relation_favorite_child = { reason = favorite_child_chosen target = $RECIPIENT$ } + $RECIPIENT$ = { + add_opinion = { + target = $ACTOR$ + modifier = made_favorite_opinion + } + } + custom_tooltip = choose_favorite_interaction_notification.tt + } + hidden_effect = { + every_close_or_extended_family_member = { + limit = { + NOT = { this = $RECIPIENT$ } + OR = { + is_child_of = $ACTOR$ + is_grandchild_of = $ACTOR$ + is_great_grandchild_of = $ACTOR$ + } + } + add_opinion = { + target = $ACTOR$ + modifier = has_favorite_opinion + } + add_opinion = { + target = $RECIPIENT$ + modifier = is_favorite_opinion + } + } + } + } +} + +add_random_internal_estate_building = { + random_list = { + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = servants_quarters_01 } + } + add_domicile_building = servants_quarters_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = servants_quarters_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = library_01 } + } + add_domicile_building = library_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = library_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = bath_01 } + } + add_domicile_building = bath_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = bath_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = courtyard_01 } + } + add_domicile_building = courtyard_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = courtyard_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = prison_01 } + } + add_domicile_building = prison_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = prison_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = living_quarters_01 } + } + add_domicile_building = living_quarters_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = living_quarters_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = trophy_room_01 } + } + add_domicile_building = trophy_room_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = trophy_room_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = office_01 } + } + add_domicile_building = office_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = office_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = guest_room_01 } + } + add_domicile_building = guest_room_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = guest_room_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = wine_cellar_01 } + } + add_domicile_building = wine_cellar_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = wine_cellar_02 + } + } + } +} + +fill_external_estate_building_effect = { + switch = { + trigger = has_domicile_building_or_higher + estate_main_05 = { + while = { + limit = { free_external_domicile_building_slots >= 1 } + add_random_external_estate_building = yes + } + } + estate_main_04 = { + while = { + limit = { free_external_domicile_building_slots >= 2 } + add_random_external_estate_building = yes + } + } + estate_main_03 = { + while = { + limit = { free_external_domicile_building_slots >= 3 } + add_random_external_estate_building = yes + } + } + estate_main_02 = { + while = { + limit = { free_external_domicile_building_slots >= 4 } + add_random_external_estate_building = yes + } + } + estate_main_01 = { + while = { + limit = { free_external_domicile_building_slots >= 5 } + add_random_external_estate_building = yes + } + } + } +} + +add_random_external_estate_building = { + if = { + limit = { + free_external_domicile_building_slots >= 1 + } + random_list = { + 10 = { + trigger = { + NOR = { + has_domicile_building_or_higher = temple_small_01 + owner = { + government_has_flag = government_is_celestial + } + } + } + add_domicile_building = temple_small_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = temple_small_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = barracks_01 } + } + add_domicile_building = barracks_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = barracks_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = watchtower_01 } + } + add_domicile_building = watchtower_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = watchtower_02 + } + } + 10 = { + trigger = { + NOR = { + has_domicile_building_or_higher = vineyard_01 + owner.culture ?= { + has_innovation = innovation_champa_rice + } + } + } + add_domicile_building = vineyard_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = vineyard_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = guardhouse_01 } + } + add_domicile_building = guardhouse_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = guardhouse_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = garden_01 } + } + add_domicile_building = garden_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = garden_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = storage_01 } + } + add_domicile_building = storage_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = storage_02 + } + } + 10 = { + trigger = { + NOR = { + has_domicile_building_or_higher = grain_field_01 + owner.culture ?= { + has_innovation = innovation_champa_rice + } + } + } + add_domicile_building = grain_field_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = grain_field_02 + } + } + 10 = { + trigger = { + NOT = { + has_domicile_building_or_higher = rice_field_01 + } + owner.culture ?= { + has_innovation = innovation_champa_rice + } + } + add_domicile_building = rice_field_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = rice_field_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = stable_01 } + } + add_domicile_building = stable_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = stable_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = workshop_01 } + } + add_domicile_building = workshop_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = workshop_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = market_01 } + } + add_domicile_building = market_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = market_02 + } + } + 10 = { + trigger = { + NOT = { has_domicile_building_or_higher = grazing_land_01 } + } + add_domicile_building = grazing_land_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = grazing_land_02 + } + } + 10 = { + trigger = { + NOR = { + has_domicile_building_or_higher = olive_01 + owner.culture ?= { + has_innovation = innovation_champa_rice + } + } + } + add_domicile_building = olive_01 + if = { + limit = { has_domicile_building = estate_main_03 } + add_domicile_building = olive_02 + } + } + } + } +} + +estate_newly_built_grain_field_effect = { + scope:owner = { + if = { + limit = { + is_alive = yes + years_from_game_start >= 1 + } + random = { + chance = 75 + add_character_flag = { + flag = domicile_new_built_grain_field + months = 1 + } + trigger_event = { + id = ep3_governor_yearly.3001 + days = 5 + } + } + } + } +} + +demand_pastureland_adventurer_interaction_effect = { + # scope:actor = adventurer + # scope:recipient = herder + # seized_pastureland = titles + scope:target = { add_to_list = seized_pastureland } + scope:recipient = { save_scope_as = defender } + + hidden_effect = { + scope:actor = { + if = { + limit = { character:90028 ?= this } + add_character_flag = hereward_settled_flag + } + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + every_courtier = { + set_variable = { + name = former_camp_leader + value = scope:actor + } + add_trait = adventurer_follower + } + } + } + + # Determine hierarchy + ep3_become_landed_save_liege_effect = { + TITLE_GIVER = scope:recipient + ALWAYS_INDEPENDENT = no + TITLE_LIST = seized_pastureland + } + # Resolve title, liege, government changes + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = scope:actor + TITLE_LIST = seized_pastureland + TYPE = granted + REASON = flag:seized_pastureland + ENNOBLED_ADVENTURER = flag:yes + } + # Messages for nearby players + create_landed_ruler_message_effect = { + LANDED = scope:actor + FLAVOR_CHAR = scope:recipient + FLAVOR_TITLE = scope:target + REASON = flag:seized_pastureland + } +} diff --git a/common/scripted_triggers/00_available_for_events_triggers.txt b/common/scripted_triggers/00_available_for_events_triggers.txt new file mode 100644 index 00000000..e9f774eb --- /dev/null +++ b/common/scripted_triggers/00_available_for_events_triggers.txt @@ -0,0 +1,934 @@ +###TRIGGER LIST +#has_contagious_deadly_disease_trigger +#is_healthy +#is_available +#is_available_ai +#is_available_adult +#is_available_healthy_adult +#is_available_ai_adult +#is_available_healthy_ai_adult +#is_capable_adult +#is_capable_adult_ai +#liege_is_boss_trigger +#can_select_lifestyle_focus +#can_marry +#can_become_concubine + +has_contagious_deadly_disease_trigger = { + has_trait_with_flag = contagious_deadly_disease +} + +is_healthy = { + custom_tooltip = { + text = not_poor_health_tt + health >= fine_health + } + NOT = { + has_trait_with_flag = is_healthy_trigger_flag + } + has_contagious_deadly_disease_trigger = no +} + +basic_is_available_ai = { + is_available_quick = { + ai = yes + alive = yes + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = no +} + +is_available_allow_travelling = { + is_available_quick = { + alive = yes + imprisoned = no + incapable = no + in_army = no + } + has_contagious_deadly_disease_trigger = 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 } + # Variable set on Mandala succession + custom_tooltip = { + text = busy_in_mandala_succession + NOT = { has_variable = busy_in_mandala_succession } + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available = { + is_available_quick = { + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } + # Variable set on Mandala succession + custom_tooltip = { + text = busy_in_mandala_succession + NOT = { has_variable = busy_in_mandala_succession } + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_travelling = { + is_available_quick = { + alive = yes + in_army = no + imprisoned = no + incapable = no + travel = yes + } + has_contagious_deadly_disease_trigger = no + NOR = { + has_character_flag = is_in_task_contract_event_chain + has_variable = gone_adventuring + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_travelling_adult = { + is_available_quick = { + travel = yes + adult = yes + alive = yes + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = no + NOR = { + has_character_flag = is_in_task_contract_event_chain + has_variable = gone_adventuring + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_travelling_ai_adult = { + is_available_quick = { + travel = yes + adult = yes + ai = yes + alive = yes + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = no + NOR = { + has_character_flag = is_in_task_contract_event_chain + has_variable = gone_adventuring + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_physically_able = { + is_available_quick = { + alive = yes + imprisoned = no + incapable = no + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_physically_able_ai = { + is_available_quick = { + ai = yes + alive = yes + imprisoned = no + incapable = no + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_physically_able_adult = { + is_available_quick = { + adult = yes + alive = yes + imprisoned = no + incapable = no + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_physically_able_ai_adult = { + is_available_quick = { + ai = yes + adult = yes + alive = yes + imprisoned = no + incapable = no + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_ai = { + is_available_quick = { + ai = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_child = { + is_available_quick = { + adult = no + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_child_allow_travel = { + is_available_quick = { + adult = no + alive = yes + in_army = no + imprisoned = no + incapable = no + } + + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_ai_child = { + is_available_quick = { + adult = no + ai = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_healthy_child = { + is_available_quick = { + adult = no + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + is_healthy = yes + 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_healthy_ai_child = { + is_available_quick = { + ai = yes + adult = no + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + is_healthy = yes + 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_adult = { + is_available_quick = { + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_ai_adult = { + is_available_quick = { + ai = yes + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_healthy_adult = { + is_available_quick = { + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + is_healthy = yes + 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_healthy_ai_adult = { + is_available_quick = { + ai = yes + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + is_healthy = yes + 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_available_adult_or_is_commanding = { + OR = { + is_commanding_army = yes + is_available_adult = yes + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_at_peace = { + is_available_quick = { + at_war = no + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_at_peace_adult = { + is_available_quick = { + at_war = no + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_at_peace_ai_adult = { + is_available_quick = { + ai = yes + adult = yes + alive = yes + imprisoned = no + incapable = no + travel = no + in_army = no + at_war = no + } + + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_available_at_peace_adult_lenient = { + is_available_quick = { + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + at_war = no + } + + has_contagious_deadly_disease_trigger = 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 } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +# Meaning you may be at war, but you're still located in your capital. +is_available_even_at_war_adult = { + is_available_quick = { + adult = yes + alive = yes + travel = no + in_army = no + imprisoned = no + incapable = no + } + + has_contagious_deadly_disease_trigger = 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_capable_adult = { + is_available_quick = { + adult = yes + incapable = no + } +} + +is_capable_adult_ai = { + is_available_quick = { + ai = yes + adult = yes + incapable = no + } +} + +can_select_lifestyle_focus = { + is_capable_adult = yes + is_playable_character = yes +} + +is_not_hostile_towards_root = { + NOR = { + is_a_faction_member = yes + any_scheme = { + hostile_scheme_trigger = yes + scheme_target_character = root + } + is_at_war_with = root + } +} + +player_target_available_for_personal_scheme_ongoing_events_trigger = { + $TARGET$ = { + trigger_if = { + limit = { + is_ai = no + $OWNER$ = { is_ruler = no } + } + is_at_war = no + } + trigger_else = { + always = yes + } + } +} + + +basic_is_valid_for_yearly_events_trigger = { + is_playable_character = yes + is_available_quick = { + imprisoned = no + incapable = no + } + OR = { + is_travelling = no + has_government = landless_adventurer_government + } + NOR = { + has_character_flag = is_in_task_contract_event_chain + exists = involved_activity + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_valid_for_narrow_yearly_events = { + is_available_quick = { + at_war = no + imprisoned = no + incapable = no + } + is_commanding_army = no + is_playable_character = yes + OR = { + is_travelling = no + has_government = landless_adventurer_government + } + NOR = { + has_character_flag = is_in_task_contract_event_chain + exists = involved_activity + } +} + +# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are. +is_valid_for_narrow_yearly_events_adult = { + is_available_quick = { + adult = yes + at_war = no + imprisoned = no + incapable = no + } + is_commanding_army = no + is_playable_character = yes + OR = { + is_travelling = no + has_government = landless_adventurer_government + } + NOR = { + has_character_flag = is_in_task_contract_event_chain + exists = involved_activity + } +} + +is_within_diplo_range = { + capital_province ?= { + save_temporary_scope_as = my_capital + $CHARACTER$.capital_province ?= { + squared_distance = { + target = scope:my_capital + value < 200000 + } + } + } +} + +# This trigger checks if a character is a Nomad +is_nomad = { + government_has_flag = government_is_nomadic + is_ruler = yes +} + +# This trigger checks if a character is a landed Nomad +is_landed_nomad = { + government_has_flag = government_is_nomadic + is_available_quick = { + ruler = yes + landed = yes + } +} + +# Checks if a character is a landless nomad with a domicile +is_landless_nomad = { + government_has_flag = government_is_nomadic + is_landed = no + has_domicile = yes +} + +# This trigger checks if a character is a landless adventurer +is_landless_adventurer = { + OR = { + government_has_flag = government_is_landless_adventurer + government_has_flag = government_is_landless_minority + } +} + +# This trigger checks if a character is a governor in an admin realm (implying they are landed) +is_governor = { + government_allows = administrative + is_landed = yes + top_liege != this + OR = { + highest_held_title_tier >= main_administrative_tier + highest_held_title_tier >= min_title_maa_tier + } + tgp_is_ceremonial_liege_trigger = no +} +is_governor_or_admin_count = { + government_allows = administrative + is_landed = yes + top_liege != this + highest_held_title_tier >= tier_county + tgp_is_ceremonial_liege_trigger = no +} + +# Checks if a character is a landless house_head within an admin realm +is_landless_administrative = { + government_allows = administrative + is_landed = no + is_house_head = yes + has_domicile = yes +} + +# Checks if a character is a landless house_head within a feudal realm +is_landless_soryo = { + government_has_flag = government_is_japan_feudal + is_landed = no + is_house_head = yes + has_domicile = yes +} + +# Checks if a character is either landed or an unlanded house head within an admin realm +is_landed_or_landless_administrative = { + OR = { + is_landed = yes + is_landless_administrative = yes + } +} + +# Checks if a character is either landed, a landless house head within an admin realm, a landless nomad, a landless adventurer, a landless soryo, or a minister +is_playable_character = { + OR = { + is_landed = yes + is_landless_administrative = yes + is_landless_adventurer = yes + is_landless_nomad = yes + is_landless_soryo = yes + tgp_is_any_minister = yes # To keep ministers playable, regardless of having a nobel family title or not + } +} + +roman_restoration_is_valid_roman_empire_trigger = { + is_ai = no + is_roman_emperor_trigger = yes + OR = { + religion = religion:christianity_religion #Either Christian + religion = religion:hellenism_religion #Or Hellenic + } + NOT = { has_ep3_dlc_trigger = yes } +} + +is_eunuch_trigger = { + OR = { + has_trait = eunuch_1 + has_trait = beardless_eunuch + } +} diff --git a/common/scripted_triggers/00_building_requirement_triggers.txt b/common/scripted_triggers/00_building_requirement_triggers.txt index 2c1e8c69..6a51d151 100644 --- a/common/scripted_triggers/00_building_requirement_triggers.txt +++ b/common/scripted_triggers/00_building_requirement_triggers.txt @@ -267,17 +267,8 @@ building_paddy_fields_requirement_terrain = { text = building_paddy_fields_requirement_terrain_tt OR = { terrain = terraced_hills - AND = { - terrain = floodplains - OR = { - geographical_region = graphical_east_asia - geographical_region = custom_viet_lands - } - } - AND = { - terrain = wetlands - county.culture = { has_cultural_parameter = champa_rice_wet_land_paddies } - } + terrain = floodplains + terrain = wetlands AND = { OR = { terrain = hills @@ -289,6 +280,20 @@ building_paddy_fields_requirement_terrain = { } } +building_potato_fields_requirement_terrain = { + custom_tooltip = { + text = building_potato_fields_requirement_terrain_tt + OR = { + terrain = farmlands + terrain = hills + terrain = tells + terrain = plains + terrain = steppe + terrain = mountains + } + } +} + building_cereal_fields_requirement_terrain = { OR = { terrain = farmlands diff --git a/common/scripted_triggers/00_clothing_triggers.txt b/common/scripted_triggers/00_clothing_triggers.txt index d76310f5..02e83667 100644 --- a/common/scripted_triggers/00_clothing_triggers.txt +++ b/common/scripted_triggers/00_clothing_triggers.txt @@ -126,6 +126,20 @@ portrait_wear_armor_trigger = { limit = { portrait_sickness_trigger = yes } is_in_army = yes } + trigger_if = { + limit = { government_allows = barter } + OR = { + is_at_war = yes + involved_activity = { has_activity_type = activity_tournament } + # Serving Varangian + has_character_flag = is_currently_varangian + # In a Duel + has_character_flag = single_combat_duel_armor + has_character_flag = forced_knight_armor + # In a Tournament + activity_tournament_armor_trigger = yes + } + } OR = { # Mercenaries, Holy Orders, Adventurers AND = { diff --git a/common/scripted_triggers/00_laamp_triggers.txt b/common/scripted_triggers/00_laamp_triggers.txt index 896a9962..feee3f81 100644 --- a/common/scripted_triggers/00_laamp_triggers.txt +++ b/common/scripted_triggers/00_laamp_triggers.txt @@ -15,7 +15,7 @@ maa_regiments_valid_for_cheap_reinforcement_trigger = { } maa_regiments_cost_more_to_reinforce_per_soldier_trigger = { - regiment_owner = { government_has_flag = government_is_landless_adventurer } + regiment_owner = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } OR = { is_unit_type = elephant_cavalry is_unit_type = siege_weapon @@ -26,7 +26,7 @@ maa_regiments_valid_to_refill_trigger = { maa_current_troops_count < maa_max_troops_count trigger_if = { limit = { - scope:actor = { government_has_flag = government_is_landless_adventurer } + scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } is_unit_type = elephant_cavalry } scope:actor.domicile ?= { has_domicile_parameter = camp_reinforce_elephant_regiments_anywhere } @@ -193,11 +193,6 @@ is_valid_for_laampdom = { ai_boldness >= low_negative_ai_value ai_energy >= low_negative_ai_value } - NOR = { - has_trait = content # Too chill to adventure - has_trait = craven # Too scared to adventure - has_trait = lazy # Too lazy to adventure - } # Block admin members of noble families NOT = { house ?= { @@ -405,7 +400,7 @@ valid_laamp_basic_trigger = { $EMPLOYER$ = { OR = { employer = $LAAMP$ - NOT = { government_has_flag = government_is_landless_adventurer } + NOT = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } } } # Don't offer to work with those who've wronged us. @@ -435,7 +430,7 @@ valid_laamp_basic_trigger = { } } } - $LAAMP$ = { government_has_flag = government_is_landless_adventurer } + $LAAMP$ = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } $LAAMP$ = { trigger_if = { limit = { is_at_war = no } diff --git a/common/scripted_triggers/00_law_triggers.txt b/common/scripted_triggers/00_law_triggers.txt new file mode 100644 index 00000000..3d981d9b --- /dev/null +++ b/common/scripted_triggers/00_law_triggers.txt @@ -0,0 +1,511 @@ + +character_gender_can_rule_title_trigger = { + trigger_if = { + limit = { + $GENDER$ = { is_male = yes } + exists = $TITLE$ + $TITLE$ = { + NOT = { + has_title_law = female_only_law + } + } + } + always = yes + } + trigger_else_if = { + limit = { + $GENDER$ = { is_female = yes } + exists = $TITLE$ + $TITLE$ = { + NOT = { + has_title_law = male_only_law + } + } + } + always = yes + } + trigger_else = { + always = no + } +} + +character_gender_can_inherit_from_trigger = { + save_temporary_scope_as = heir + + trigger_if = { + limit = { + $CHARACTER$ = { exists = primary_title } + } + $CHARACTER$ = { + character_gender_can_rule_title_trigger = { + GENDER = scope:heir + TITLE = primary_title + } + } + } + trigger_else = { + always = no + } +} + +has_partition_succession_realm_law_trigger = { + OR = { + has_realm_law = confederate_partition_succession_law + has_realm_law = partition_succession_law + has_realm_law = high_partition_succession_law + has_realm_law = clan_antagonistic_partition_succession_law + has_realm_law = clan_competitive_partition_succession_law + has_realm_law = clan_impassive_partition_succession_law + has_realm_law = clan_friendly_partition_succession_law + has_realm_law = clan_harmonious_partition_succession_law + } +} + +realm_law_use_crown_authority = { + government_has_flag = government_uses_crown_authority +} + +realm_law_use_tribal_authority = { + government_has_flag = government_is_tribal +} + +realm_law_use_camp_purpose = { + government_has_flag = government_is_landless_adventurer +} + +realm_law_use_imperial_bureaucracy = { + government_allows = administrative + NOR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + government_has_flag = government_is_japan_administrative + } +} + +realm_law_use_nomadic_authority = { + government_has_flag = government_is_nomadic +} + +realm_law_use_celestial_bureaucracy = { + government_has_flag = government_is_celestial +} + +realm_law_is_mandala = { + government_has_flag = government_is_mandala +} + +realm_law_use_meritocratic_bureaucracy = { + OR = { + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } +} + +realm_uses_treasury_laws_trigger = { + government_allows = treasury +} + +realm_law_use_japanese_bureaucracy = { + government_is_japanese_trigger = yes +} + +can_have_confederate_partition_succession_law_trigger = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_tribal + government_has_flag = government_is_minority + # TGP + AND = { + government_has_flag = government_is_japan_feudal + tgp_realm_has_ceremonial_liege_trigger = yes + is_independent_ruler = no + } + } +} + +can_keep_partition_succession_law_trigger = { + # The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information. + trigger_if = { + limit = { + has_realm_law = partition_succession_law + } + OR = { + can_have_partition_succession_law_trigger = yes + + # Mongol Empires + has_title = title:e_mongol_empire + has_title = title:e_ilkhanate + has_title = title:e_golden_horde + has_title = title:e_chagatai + has_title = title:e_red_horde + has_title = title:e_white_horde + has_title = title:e_aarlud_khanate + has_title = title:e_togskol_khanate + has_title = title:e_baruun_khanate + has_title = title:e_great_yuan + has_title = title:e_blue_horde + has_title = title:e_omnod_dalai_khanate + } + } + NOT = { government_has_flag = government_is_clan } +} + +can_have_partition_succession_law_trigger = { + culture = { + has_innovation = innovation_hereditary_rule + } + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + } +} + +can_keep_high_partition_succession_law_trigger = { + # The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information. + trigger_if = { + limit = { + has_realm_law = high_partition_succession_law + } + OR = { + can_have_high_partition_succession_law_trigger = yes + + # Mongol Empires + has_title = title:e_mongol_empire + has_title = title:e_ilkhanate + has_title = title:e_golden_horde + has_title = title:e_chagatai + has_title = title:e_red_horde + has_title = title:e_white_horde + has_title = title:e_aarlud_khanate + has_title = title:e_togskol_khanate + has_title = title:e_baruun_khanate + has_title = title:e_great_yuan + has_title = title:e_blue_horde + has_title = title:e_omnod_dalai_khanate + } + } + NOT = { government_has_flag = government_is_clan} +} + +can_have_high_partition_succession_law_trigger = { + trigger_if = { + limit = { + NOT = { + culture = { has_cultural_parameter = can_enact_high_partition_succession_law } + } + } + culture = { has_innovation = innovation_heraldry } + } + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + } +} + +can_keep_single_heir_succession_law_trigger = { + # The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information. + trigger_if = { + limit = { + has_realm_law = single_heir_succession_law + } + OR = { + can_have_single_heir_succession_law_trigger = yes + # Byzantine Empire / Ceremonial Liege + historical_succession_access_single_heir_succession_law_trigger = yes + has_variable = purge_oath_previous_law # ACH Purge Pretenders Oath + } + } +} + +can_have_single_heir_succession_law_trigger = { + trigger_if = { # Celestial/Meritocratic/Soryo + limit = { + OR = { + government_allows = merit + government_has_flag = government_is_japan_feudal + } + } + custom_tooltip = { # You are independent, have the innovation or are Ceremonial Monarch + text = can_have_single_heir_succession_law_trigger_merit_or_japan_tt + OR = { + is_independent_ruler = yes + culture = { + has_innovation = innovation_primogeniture + } + tgp_has_ceremonial_liege_title_trigger = yes + } + } + } + trigger_else_if = { + limit = { tgp_realm_has_ceremonial_liege_trigger = yes } + tgp_has_ceremonial_liege_title_trigger = yes + } + trigger_else = { + culture = { + has_innovation = innovation_primogeniture + } + } + # Non-tribals only + trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it + limit = { + has_ep3_dlc_trigger = yes + } + custom_tooltip = { + text = must_be_feudal_clan_or_admin + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_allows = administrative + government_has_flag = government_is_japan_feudal + tgp_has_ceremonial_liege_title_trigger = yes + } + } + } + trigger_else = { + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_allows = merit + government_has_flag = government_is_japan_feudal + tgp_has_ceremonial_liege_title_trigger = yes + } + } + } + # Admin rules + trigger_if = { + limit = { government_allows = administrative } + trigger_if = { + limit = { tgp_realm_has_ceremonial_liege_trigger = yes } + tgp_has_ceremonial_liege_title_trigger = yes + } + trigger_else = { is_independent_ruler = yes } + } +} + +can_keep_single_heir_youngest_succession_law_trigger = { + # The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information. + trigger_if = { + limit = { + has_realm_law = single_heir_succession_law_youngest + } + OR = { + can_have_single_heir_youngest_succession_law_trigger = yes + historical_succession_access_single_heir_succession_law_youngest_trigger = yes + } + } +} + +can_have_single_heir_youngest_succession_law_trigger = { + culture = { + has_innovation = innovation_primogeniture + } + # Non-tribals only + trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it + limit = { + has_ep3_dlc_trigger = yes + } + custom_tooltip = { + text = must_be_feudal_clan_or_admin + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_allows = administrative + government_has_flag = government_is_japan_feudal + } + } + } + trigger_else = { + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + } + } + trigger_if = { + limit = { + government_allows = administrative + } + is_independent_ruler = yes + } +} + +can_keep_single_heir_dynasty_house_trigger = { + # The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information. + trigger_if = { + limit = { + has_realm_law = single_heir_dynasty_house + } + OR = { + can_have_single_heir_dynasty_house_trigger = yes + historical_succession_access_single_heir_dynasty_house_trigger = yes + } + } +} + +can_have_single_heir_dynasty_house_trigger = { + exists = house + trigger_if = { + limit = { + culture = { + OR = { + this = culture:czech + this = culture:slovien + any_parent_culture_or_above = { + this = culture:czech + } + any_parent_culture_or_above = { + this = culture:slovien + } + NOT = { has_innovation = innovation_heraldry } + } + } + } + culture = { + has_innovation = innovation_table_of_princes + } + } + trigger_else = { + culture = { + has_innovation = innovation_heraldry + } + } + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + } + NOT = { government_allows = administrative } +} + +can_have_bishop_theocratic_succession_law_trigger = { + OR = { + is_theocratic_lessee = yes + government_has_flag = government_is_theocracy + } +} + +is_temporal_head_of_faith_trigger = { + is_head_of_faith = yes + holder.faith = { has_doctrine = doctrine_temporal_head } +} + +can_title_have_law_general_trigger = { + tier >= tier_duchy + is_temporal_head_of_faith_trigger = no +} + +can_have_holy_order_succession_law_trigger = { + government_has_flag = government_is_holy_order +} + +can_have_mercenary_succession_law_trigger = { + government_has_flag = government_is_mercenary +} + +can_have_city_succession_law_trigger = { + government_has_flag = government_is_republic +} + +can_have_herder_succession_law_trigger = { + government_has_flag = government_is_herder +} + +title_can_reduce_partition_law_trigger = { + holder ?= { + OR = { + has_realm_law = single_heir_succession_law + can_have_high_partition_succession_law_trigger = yes + } + OR = { + has_realm_law = high_partition_succession_law + can_have_high_partition_succession_law_trigger = yes + } + OR = { + has_realm_law = partition_succession_law + can_have_confederate_partition_succession_law_trigger = yes + } + } +} + +can_pass_law_ca1_trigger = { + culture = { has_innovation = innovation_plenary_assemblies } +} + +can_pass_law_ca2_trigger = { + culture = { has_innovation = innovation_royal_prerogative } +} + +can_pass_law_ca3_trigger = { + culture = { has_innovation = innovation_royal_prerogative } +} + +can_have_acclamation_succession_law_trigger = { + has_ep3_dlc_trigger = yes + top_liege = this + government_allows = administrative + NOR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_meritocratic + government_has_flag = government_is_steppe_admin + } +} + +can_keep_acclamation_succession_law_trigger = { + has_ep3_dlc_trigger = yes + trigger_if = { + limit = { + has_realm_law = acclamation_succession_law + } + OR = { + can_have_acclamation_succession_law_trigger = yes + has_title = title:e_byzantium + } + } +} + +can_change_acclamation_succession_law_trigger = { + has_ep3_dlc_trigger = yes +} + +can_have_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes + government_allows = administrative + NOR = { + government_has_flag = government_is_celestial + government_has_flag = government_is_japan_administrative + government_has_flag = government_is_meritocratic + } + is_independent_ruler = no +} + +can_keep_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes + trigger_if = { + limit = { + has_realm_law = appointment_succession_law + } + can_have_appointment_succession_law_trigger = yes + } +} + +can_change_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes +} diff --git a/common/scripted_triggers/00_legal_triggers.txt b/common/scripted_triggers/00_legal_triggers.txt new file mode 100644 index 00000000..364cae07 --- /dev/null +++ b/common/scripted_triggers/00_legal_triggers.txt @@ -0,0 +1,176 @@ + +### Legal trigger list + +opposes_succession_law_change_trigger = { + is_imprisoned = no + opinion = { + target = liege + value < 0 + } + custom_description = { + text = law_change_approval_is_cowed + has_dread_level_towards = { + target = liege + level < 2 + } + } +} + +can_change_succession_laws_realm_flag_trigger = { + trigger_if = { + limit = { realm_law_use_tribal_authority = yes } + custom_description = { + text = "has_tribal_law_allowing_succession_law_change" + has_realm_law_flag = can_change_succession_laws + } + } + trigger_else_if = { + limit = { realm_law_use_imperial_bureaucracy = yes } + custom_description = { + text = has_imperial_bureaucracy_law_allowing_succession_law_change + has_realm_law_flag = can_change_succession_laws + } + } + trigger_else = { + custom_description = { + text = "has_crown_law_allowing_succession_law_change" + has_realm_law_flag = can_change_succession_laws + } + } +} + +can_change_succession_law_trigger = { + can_change_succession_laws_realm_flag_trigger = yes + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_single_heir_dynasty_house_succession_law_trigger = { + trigger_if = { + limit = { + culture = { + OR = { + this = culture:czech + this = culture:slovien + any_parent_culture_or_above = { + this = culture:czech + } + any_parent_culture_or_above = { + this = culture:slovien + } + } + } + NOT = { + has_realm_law_flag = can_change_succession_laws + } + } + culture = { + has_innovation = innovation_table_of_princes + } + } + trigger_else = { + can_change_succession_laws_realm_flag_trigger = yes + } + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_to_equal_succession_law_trigger = { + trigger_if = { + limit = { + NOT = { has_realm_law_flag = can_change_succession_laws } + } + OR = { + culture = { has_cultural_parameter = gender_equal_inheritance } + faith = { has_doctrine = doctrine_gender_equal } + } + } + trigger_else = { + can_change_succession_laws_realm_flag_trigger = yes + } + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_partition_succession_law_trigger = { + custom_description = { + text = "has_law_allowing_partition_succession_law_change" + OR = { + has_realm_law_flag = can_change_partition_succession_laws + has_realm_law_flag = can_change_succession_laws + } + } + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + + +## Can this character assign a dedicated heir? +# +# Check if a character can assign some designated heir, +# but not if the heir is a valid candidate. +# +# root: Character that will assign an heir +# +can_designate_heir_trigger = { + trigger_if = { + # Admin always has access to this + limit = { government_allows = administrative } + + custom_description = { + text = "has_admin_allowing_designate_heir" + any_held_title = { + is_noble_family_title = yes + } + } + } + trigger_else_if = { + # Feudal and clan can get this by increasing crown authority + limit = { has_realm_law_in_group = crown_authority } + + custom_description = { + text = "has_crown_authority_designate_heir" + has_realm_law_flag = can_designate_heirs + } + } + trigger_else = { + # Everyone else also needs a law to gain access to this interaction + custom_description = { + text = "has_law_allowing_designate_heir" + has_realm_law_flag = can_designate_heirs + } + } +} + + +can_change_title_law_trigger = { + is_at_war = no +} diff --git a/common/scripted_triggers/07_ep3_triggers.txt b/common/scripted_triggers/07_ep3_triggers.txt new file mode 100644 index 00000000..78ce882f --- /dev/null +++ b/common/scripted_triggers/07_ep3_triggers.txt @@ -0,0 +1,1787 @@ +ep3_should_use_byzantine_graphics_trigger = { + OR = { + culture = { has_building_gfx = byzantine_building_gfx } + culture = { has_building_gfx = caucasian_building_gfx } + } +} + +is_roman_emperor_trigger = { + OR = { + has_title = title:e_byzantium + has_title = title:h_roman_empire + has_title = title:h_eastern_roman_empire + } +} + +is_roman_emperor_excluding_byzantium_trigger = { + OR = { + has_title = title:h_roman_empire + has_title = title:h_eastern_roman_empire + } +} + +is_roman_emperor_primary_title_trigger = { + OR = { + primary_title ?= title:e_byzantium + primary_title ?= title:h_roman_empire + primary_title ?= title:h_eastern_roman_empire + } +} + +is_roman_emperor_primary_title_excluding_byzantium_trigger = { + OR = { + primary_title ?= title:h_roman_empire + primary_title ?= title:h_eastern_roman_empire + } +} + +valid_for_byz_emperor_content_trigger = { + has_ep3_dlc_trigger = yes + culture = { + OR = { + has_cultural_pillar = heritage_byzantine + has_cultural_pillar = heritage_caucasian + } + } + OR = { + is_roman_emperor_primary_title_trigger = yes + AND = { + culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { this = culture:greek } + } + } + highest_held_title_tier >= tier_empire + } + } +} + +valid_for_byz_governor_content_trigger = { + has_ep3_dlc_trigger = yes + is_governor = yes + top_liege.culture = { + OR = { + has_cultural_pillar = heritage_byzantine + has_cultural_pillar = heritage_caucasian + } + } + top_liege = { + OR = { + is_roman_emperor_primary_title_trigger = yes + AND = { + culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { this = culture:greek } + } + } + highest_held_title_tier >= tier_empire + } + } + } +} + +valid_for_byz_succession_trigger = { + is_eunuch_trigger = no + NOR = { + has_trait = incapable + has_trait = blind + has_trait = disfigured + has_trait = maimed + has_trait = one_eyed + has_trait = one_legged + has_trait = clubfooted + has_trait = hunchbacked + has_trait = dwarf + } +} + +has_any_charioteer_trait = { + OR = { + has_trait = charioteer_blue + has_trait = charioteer_green + has_trait = charioteer_white + has_trait = charioteer_red + } +} + +available_charioteers_spots_trigger = { + scope:activity = { + any_guest_subset = { + name = charioteers + has_trait = charioteer_$TEAM$ + count < scope:activity.var:num_$TEAM$s + } + } +} + +ep3_varangian_trigger = { + OR = { + culture = { + OR = { + has_cultural_tradition = tradition_fp1_coastal_warriors + has_cultural_tradition = tradition_hird + has_cultural_tradition = tradition_fp1_performative_honour + has_cultural_pillar = heritage_north_germanic + has_cultural_pillar = heritage_west_germanic + } + } + has_trait = varangian + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_physically_able_adult = yes +} + +is_competing_for_same_title_as = { + government_allows = administrative + any_heir_title = { + exists = this + is_noble_family_title = no + save_temporary_scope_as = temp_title + } + $CHARACTER$ = { + government_allows = administrative + } + scope:temp_title = { + any_title_heir = { + this = $CHARACTER$ + } + } +} + +is_winning_competing_for_same_title_as = { + $CHARACTER$ = { save_temporary_scope_as = target_char } + is_competing_for_same_title_as = { CHARACTER = $CHARACTER$ } + save_temporary_scope_as = root_scope + any_heir_title = { + exists = this + is_noble_family_title = no + save_temporary_scope_as = temp_title + } + scope:temp_title = { + "place_in_line_of_succession(scope:root_scope)" > "place_in_line_of_succession(scope:target_char)" + } +} + +restore_greece_decision_county_trigger = { + trigger_if = { + limit = { + holder.top_liege = root + has_county_modifier = backwater_county_modifier + } + development_level >= 50 + } +} + +any_valid_title_to_grant_trigger = { + # IMPORTANT! + # The is_valid_showing_failures_only of support_candidacy_interaction doesn't use this + # It uses a cloned version that has been optimized for AI usage + # Please update that one too if you're updating this one + $CANDIDATE$ ?= { + is_clergy = no + save_temporary_scope_as = candidate_temp + custom_tooltip = { + text = support_candidacy_can_appoint_for_title_tt + $TOP_LIEGE$.primary_title = { + any_in_de_jure_hierarchy = { + continue = { + tier > tier_duchy + } + save_temporary_scope_as = title_temp + scope:candidate_temp = { can_appoint_for_title = scope:title_temp } + } + } + } + } +} + +any_valid_candidacy_trigger = { + $CANDIDATE$ = { + custom_tooltip = { + text = any_valid_candidacy_tt + trigger_if = { + limit = { + $TOP_LIEGE$ = { + OR = { + has_realm_law_flag = appointment_type_succession + primary_title = { + has_title_law_flag = appointment_type_succession + } + } + } + appointment_candidate_score = { + target = $TOP_LIEGE$.primary_title + value > 0 + } + } + always = yes + } + trigger_else = { + $TOP_LIEGE$.primary_title ?= { + any_in_de_jure_hierarchy = { + exists = holder + tier >= tier_duchy + OR = { + has_title_law_flag = appointment_type_succession + holder = { + has_realm_law_flag = appointment_type_succession + } + } + save_temporary_scope_as = title_temp + trigger_if = { + limit = { exists = scope:title_temp } + $CANDIDATE$ = { + appointment_candidate_score = { + target = scope:title_temp + value > 0 + } + } + } + } + } + } + } + } +} + +is_candidate_for_title_trigger = { + $CANDIDATE$ = { + custom_tooltip = { + text = is_candidate_for_title_tt + $TITLE$ = { + OR = { + has_title_law = acclamation_succession_law + has_title_law = appointment_succession_law + holder ?= { + OR = { + has_realm_law = acclamation_succession_law + has_realm_law = appointment_succession_law + } + } + } + holder = { + NOT = { this = $CANDIDATE$ } + } + } + appointment_candidate_score = { + target = $TITLE$ + value > 0 + } + } + } +} + +valid_governor_contract_trigger = { + OR = { + government_allows = administrative + AND = { + government_has_flag = government_is_landless_minority + exists = liege + liege = { + government_allows = administrative + } + } + } + + is_available_quick = { + adult = yes + alive = yes + incapable = no + } +} + +valid_governor_contract_basic_trigger = { + task_contract_taker = { + #you have to be a governor + OR = { + trigger_if = { + limit = { + government_has_flag = government_is_celestial + } + is_governor_or_admin_count = yes + } + trigger_else = { + is_governor = yes + } + #and the location has to be in your realm + custom_tooltip = { + text = task_contract_location_not_in_realm + any_sub_realm_county = { + any_county_province = { + this = root.task_contract_location + } + } + } + AND = { + government_has_flag = government_is_landless_minority + exists = liege + liege = { + government_allows = administrative + } + } + } + } +} + +governor_contract_invalidated_message_trigger = { + task_contract_employer ?= { + NOT = { root.task_contract_taker ?= this } + OR = { + is_incapable = yes + is_imprisoned = yes + is_alive = no + } + } +} + +################################################## +### CHARIOT RACE TRIGGERS +################################################## + +chariot_race_0201_sitting_in_kathisma_trigger = { + OR = { + AND = { + exists = scope:activity.special_guest:chariot_race_honorary_guest + this = scope:activity.special_guest:chariot_race_honorary_guest + } + is_close_family_of = scope:host + is_consort_of = scope:host + } +} + +chariot_race_0201_negative_crowd_reaction_trigger = { + OR = { + scope:activity.var:emperor_speech_topic = flag:increase_legitimacy_fail + scope:activity.var:emperor_speech_topic = flag:discredit_claimant_fail + AND = { + scope:host.capital_county = { + county_opinion <= -30 + } + NOT = { scope:activity.var:emperor_speech_topic = flag:appease_populace } + } + AND = { + scope:host = { + legitimacy_level < 2 + } + NOR = { + scope:activity.var:emperor_speech_topic = flag:increase_legitimacy_success + scope:activity.var:emperor_speech_topic = flag:appease_populace + } + } + } +} + +cares_about_charioteer_trigger = { + OR = { + $CHARIOTEER$ = { + trigger_if = { + limit = { has_court_position = charioteer_court_position } + is_court_position_employer = { + court_position = charioteer_court_position + who = prev + } + } + trigger_else = { always = no } + } + is_close_family_of = $CHARIOTEER$ + trigger_if = { + limit = { has_variable = wager_target } + OR = { + var:wager_target = $CHARIOTEER$ + trigger_if = { + limit = { var:wager_target = root } + trigger_if = { + limit = { $CHARIOTEER$ = { has_trait = charioteer_blue } } + var:wager_team = flag:blues + } + trigger_if = { + limit = { $CHARIOTEER$ = { has_trait = charioteer_green } } + var:wager_team = flag:greens + } + trigger_if = { + limit = { $CHARIOTEER$ = { has_trait = charioteer_white } } + var:wager_team = flag:whites + } + trigger_if = { + limit = { $CHARIOTEER$ = { has_trait = charioteer_red } } + var:wager_team = flag:reds + } + } + trigger_else = { always = no } + } + } + trigger_else = { always = no } + } +} + +supports_chariot_team_trigger = { + trigger_if = { + limit = { $TEAM$ = flag:blues } + OR = { + AND = { + has_variable = wager_team + var:wager_team = flag:blues + } + AND = { + employs_court_position = charioteer_court_position + court_position:charioteer_court_position = { has_trait = charioteer_blue } + } + } + } + trigger_else_if = { + limit = { $TEAM$ = flag:greens } + OR = { + AND = { + has_variable = wager_team + var:wager_team = flag:greens + } + AND = { + employs_court_position = charioteer_court_position + court_position:charioteer_court_position = { has_trait = charioteer_green } + } + } + } + trigger_else_if = { + limit = { $TEAM$ = flag:whites } + OR = { + AND = { + has_variable = wager_team + var:wager_team = flag:whites + } + AND = { + employs_court_position = charioteer_court_position + court_position:charioteer_court_position = { has_trait = charioteer_white } + } + } + } + trigger_else_if = { + limit = { $TEAM$ = flag:reds } + OR = { + AND = { + has_variable = wager_team + var:wager_team = flag:reds + } + AND = { + employs_court_position = charioteer_court_position + court_position:charioteer_court_position = { has_trait = charioteer_red } + } + } + } + trigger_else = { + always = no + } +} + +has_same_chariot_team_as = { + trigger_if = { + limit = { has_trait = charioteer_blue } + $TARGET$ = { has_trait = charioteer_blue } + } + trigger_else_if = { + limit = { has_trait = charioteer_green } + $TARGET$ = { has_trait = charioteer_green } + } + trigger_else_if = { + limit = { has_trait = charioteer_white } + $TARGET$ = { has_trait = charioteer_white } + } + trigger_else_if = { + limit = { has_trait = charioteer_red } + $TARGET$ = { has_trait = charioteer_red } + } + trigger_else = { always = no } +} + +chariot_racer_valid_trigger = { + save_temporary_scope_as = chariot_racer + is_alive = yes + exists = var:current_place_in_race + is_in_guest_subset = { name = charioteers } +} + +chariot_race_anyone_ahead_of_racer_trigger = { + scope:activity ?= { + any_guest_subset = { + name = charioteers + chariot_racer_valid_trigger = yes + NOT = { this = $RACER$ } + var:current_place_in_race < $RACER$.var:current_place_in_race + } + } +} + +chariot_race_anyone_behind_racer_trigger = { + scope:activity ?= { + any_guest_subset = { + name = charioteers + chariot_racer_valid_trigger = yes + NOT = { this = $RACER$ } + var:current_place_in_race > $RACER$.var:current_place_in_race + } + } +} + +flag_matches_charioteer_team_trigger = { + trigger_if = { + limit = { $VAR$ = flag:blues } + has_trait = charioteer_blue + } + trigger_else_if = { + limit = { $VAR$ = flag:greens } + has_trait = charioteer_green + } + trigger_else_if = { + limit = { $VAR$ = flag:whites } + has_trait = charioteer_white + } + trigger_else_if = { + limit = { $VAR$ = flag:reds } + has_trait = charioteer_red + } + trigger_else = { always = no } +} + +stands_to_win_chariot_wager_trigger = { + save_temporary_scope_as = gambler + exists = scope:activity + exists = var:wager_type + # Specific Charioteer + trigger_if = { + limit = { + exists = var:wager_target + NOT = { this = var:wager_target } + } + var:wager_target ?= { + chariot_racer_valid_trigger = yes + save_temporary_scope_as = wager_target_temp + } + OR = { + # All bets gain by first place + scope:wager_target_temp.var:current_place_in_race = 1 + # Place & Show gain by second place + trigger_if = { + limit = { + OR = { + var:wager_type = flag:place + var:wager_type = flag:show + } + } + scope:wager_target_temp.var:current_place_in_race <= 2 + } + trigger_else = { always = no } + # Show gains by third place + trigger_if = { + limit = { var:wager_type = flag:show } + scope:wager_target_temp.var:current_place_in_race <= 3 + } + trigger_else = { always = no } + # Fallback no one is ahead of wager + NOT = { + chariot_race_anyone_ahead_of_racer_trigger = { RACER = scope:wager_target_temp } + } + } + } + # Team + trigger_else = { + scope:activity ?= { + any_guest_subset = { + name = charioteers + chariot_racer_valid_trigger = yes + flag_matches_charioteer_team_trigger = { VAR = scope:gambler.var:wager_team } + } + OR = { + # All bets gain by first place + any_guest_subset = { + name = charioteers + flag_matches_charioteer_team_trigger = { VAR = scope:gambler.var:wager_team } + var:current_place_in_race = 1 + } + # Place & Show gain by second place + trigger_if = { + limit = { + OR = { + scope:gambler.var:wager_type = flag:place + scope:gambler.var:wager_type = flag:show + } + } + any_guest_subset = { + name = charioteers + flag_matches_charioteer_team_trigger = { VAR = scope:gambler.var:wager_team } + var:current_place_in_race <= 2 + } + } + trigger_else = { always = no } + # Show gains by third place + trigger_if = { + limit = { scope:gambler.var:wager_type = flag:show } + any_guest_subset = { + name = charioteers + flag_matches_charioteer_team_trigger = { VAR = scope:gambler.var:wager_team } + var:current_place_in_race <= 3 + } + } + trigger_else = { always = no } + # Fallback no one is ahead of wager + AND = { + any_guest_subset = { + name = charioteers + flag_matches_charioteer_team_trigger = { VAR = scope:gambler.var:wager_team } + save_temporary_scope_as = racer + } + NOT = { + chariot_race_anyone_ahead_of_racer_trigger = { RACER = scope:racer } + } + } + } + } + } +} + +novice_charioteer_trigger = { + OR = { + has_trait_xp = { + trait = charioteer_blue + value < 40 + } + has_trait_xp = { + trait = charioteer_green + value < 40 + } + has_trait_xp = { + trait = charioteer_white + value < 40 + } + has_trait_xp = { + trait = charioteer_red + value < 40 + } + NOR = { + has_trait = charioteer_blue + has_trait = charioteer_green + has_trait = charioteer_white + has_trait = charioteer_red + } + } +} + +middling_charioteer_trigger = { + OR = { + has_trait_xp = { + trait = charioteer_blue + value >= 40 + } + has_trait_xp = { + trait = charioteer_green + value >= 40 + } + has_trait_xp = { + trait = charioteer_white + value >= 40 + } + has_trait_xp = { + trait = charioteer_red + value >= 40 + } + } +} + +experienced_charioteer_trigger = { + OR = { + has_trait_xp = { + trait = charioteer_blue + value >= 90 + } + has_trait_xp = { + trait = charioteer_green + value >= 90 + } + has_trait_xp = { + trait = charioteer_white + value >= 90 + } + has_trait_xp = { + trait = charioteer_red + value >= 90 + } + } +} + +ep3_ideal_castration_candidate_trigger = { + is_available_quick = { + ai = yes + female = no + adult = yes + } + is_close_family_of = scope:actor + is_eunuch_trigger = no + is_available = yes + is_betrothed = no + age < 10 +} + +ep3_castration_male_family_trigger = { + any_close_family_member = { + count >= 2 + is_male = yes + house ?= scope:actor.house + is_eunuch_trigger = no + NOR = { + has_trait = celibate + has_trait = devoted + has_trait = order_member + has_trait = bastard + } + OR = { + #Is an old adult with a kid + AND = { + age >= 40 + any_child = { + is_male = yes + } + } + #Is a young adult or child + age < 40 + } + } +} + +ep3_castration_interest_trigger = { + OR = { + is_landless_ruler = yes + highest_held_title_tier <= tier_county + AND = { + is_landed = yes + highest_held_title_tier <= tier_duchy + influence_level <= 1 + } + highest_held_title_tier >= tier_empire + } +} + +ep3_ai_castration_target_trigger = { + age < 12 + is_male = yes + OR = { + AND = { + exists = liege + liege.culture = { has_cultural_parameter = family_castration } + } + AND = { + NOT = { exists = liege } + culture = { has_cultural_parameter = family_castration } + } + } + is_available = yes + is_landed = no + is_betrothed = no + NOR = { + #Should not be close family of a player + any_close_family_member = { + is_ai = no + } + #Should not be close family of a character who can use the interaction + any_close_family_member = { + highest_held_title_tier >= tier_county + } + #Should not be the child of a playable title heir + any_parent = { + any_heir_title = { + tier >= tier_county + } + } + #Should not be the grandchild of a playable title heir, if their parent is the eldest son + any_parent = { + any_parent = { + highest_held_title_tier >= tier_county + } + any_sibling = { + count <= 0 + is_male = yes + age > prev.age + house ?= prev.house + } + } + } + #Not already a eunuch + is_eunuch_trigger = no + NOR = { + #Doesn't have a positive trait being a eunuch would ruin + has_trait = physique_good_1 + has_trait = physique_good_2 + has_trait = physique_good_3 + has_trait = fecund + has_trait = strong + has_trait = sayyid + has_trait = giant + } + OR = { + is_lowborn = yes + has_trait = bastard + #Sons of barons are valid if they have an elder male sibling + any_sibling = { + count >= 2 + is_male = yes + age > prev.age + house ?= prev.house + } + } +} + +valid_for_pagan_conversion_trigger = { + faith.religion = { is_in_family = rf_pagan } + faith = { has_doctrine_parameter = unreformed } + is_at_war = no + NOR = { + has_character_flag = do_not_disturb_preachers + primary_title = { has_variable = do_not_disturb_preachers } + } +} + +ep3_story_cycle_admin_eunuch_valid_story_trigger = { + any_owned_story = { + type = story_cycle_admin_eunuch + save_temporary_scope_as = story_temp + var:eunuch ?= { + is_alive = yes + save_temporary_scope_as = eunuch_temp + } + story_owner = { save_temporary_scope_as = emperor_temp } + trigger_if = { + limit = { exists = var:protege } + var:protege = { save_temporary_scope_as = protege_temp } + } + trigger_if = { + limit = { exists = var:student } + var:student = { save_temporary_scope_as = student_temp } + } + trigger_if = { + limit = { exists = var:rival } + var:rival = { save_temporary_scope_as = rival_temp } + } + trigger_if = { + limit = { exists = var:seducer } + var:seducer = { save_temporary_scope_as = seducer_temp } + } + trigger_if = { + limit = { exists = var:spouse } + var:spouse = { save_temporary_scope_as = spouse_temp } + } + trigger_if = { + limit = { exists = var:puppet } + var:puppet = { save_temporary_scope_as = puppet_temp } + } + } +} + +ep3_story_cycle_admin_eunuch_involved_character = { + employer.top_liege = { + ep3_story_cycle_admin_eunuch_valid_story_trigger = yes + OR = { + scope:eunuch_temp ?= this + scope:protege_temp ?= this + scope:student_temp ?= this + scope:seducer_temp ?= this + scope:spouse_temp ?= this + scope:puppet_temp ?= this + } + } +} + +is_appointment_valid_trigger = { + $TITLE$ = { save_temporary_scope_as = title_temp } + $CANDIDATE$ = { save_temporary_scope_as = candidate_temp } + $TOP_LIEGE$ = { save_temporary_scope_as = top_liege_temp } + custom_tooltip = { # Capital should be never a valid appointment (go for higher title instead + text = not_top_liege_capital_county_tt + NOT = { scope:title_temp ?= scope:candidate_temp.top_liege.capital_county } + } + scope:candidate_temp = { + trigger_if = { + limit = { exists = scope:title_temp } + custom_tooltip = { # Has relevant law + text = has_appointment_succession_tt + $TITLE$ = { + OR = { + has_title_law_flag = appointment_type_succession + holder ?= { has_realm_law_flag = appointment_type_succession } + } + } + } + trigger_if = { + limit = { + NOT = { top_liege.highest_held_title_tier = scope:title_temp.tier } + } + is_adult = yes + } + trigger_if = { + limit = { + any_held_title = { count >= 1 } + } + trigger_if = { + limit = { government_has_flag = government_is_celestial } + custom_tooltip = { # Only one province of highest rank + text = cannot_compete_for_lower_rank_titles_tt + NOT = { + any_held_title = { + tier > scope:title_temp.tier + is_landless_type_title = no + is_noble_family_title = no + } + } + } + } + trigger_else = { + custom_tooltip = { # Only one province of highest rank + text = only_one_province_of_highest_rank_tt + NOT = { + any_held_title = { + tier = scope:title_temp.tier + is_landless_type_title = no + is_noble_family_title = no + } + } + } + } + custom_tooltip = { + text = promote_candidate_interaction_existing_holder_tt + this != scope:title_temp.holder + } + } + } + custom_tooltip = { + text = can_be_appointed_interaction_tt + OR = { + can_be_granted_titles_by = { RULER = scope:top_liege_temp } + can_be_granted_theocratic_titles_by = { RULER = scope:top_liege_temp } + AND = { + is_diarch_of_target = scope:top_liege_temp + scope:top_liege_temp = { has_diarchy_active_parameter = diarchy_is_co_rulership } + } + } + } + custom_tooltip = { # Only administrative + text = only_administrative_tt + trigger_if = { + limit = { is_landed = yes } + government_allows = administrative + } + } + is_clergy = no + } +} + +ep3_adventurer_ai_logic_valid_trigger = { + is_alive = yes + is_ai = yes + government_has_flag = government_is_landless_adventurer + domicile ?= { is_domicile_type = camp } +} + +ep3_laamp_diplo_range_trigger = { + custom_description = { + text = ep3_laamp_diplo_range_trigger_tt + subject = scope:actor + object = scope:recipient + trigger_if = { + limit = { exists = $LAAMP$.domicile.domicile_location } + trigger_if = { + limit = { + NOT = { exists = $TARGET$.capital_province } + exists = $TARGET$.host.capital_province + } + $TARGET$.host.capital_province ?= { + squared_distance = { + target = $LAAMP$.domicile.domicile_location + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } + } + trigger_else_if = { + limit = { + NOT = { exists = $TARGET$.capital_province } + exists = $TARGET$.location + } + $TARGET$.location ?= { + squared_distance = { + target = $LAAMP$.domicile.domicile_location + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } + } + trigger_else = { + $TARGET$.capital_province ?= { + squared_distance = { + target = $LAAMP$.domicile.domicile_location + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } + } + } + trigger_else = { always = no } + } +} + +can_recruit_archer_cavalry_trigger = { + custom_tooltip = { + text = can_recruit_archer_cavalry_trigger_desc + OR = { + can_create_maa = horse_archers + can_create_maa = mangudai + can_create_maa = asawira + can_create_maa = accolade_maa_horse_archers + can_create_maa = emishi_horse_archers + can_create_maa = japanese_horse_archers + can_create_maa = kheshig + can_create_maa = heavy_horse_archers + can_create_maa = heavy_horse_archers + } + } +} + +ep3_transport_contract_trigger = { + OR = { + has_task_contract_type = laamp_transport_vip + has_task_contract_type = laamp_transport_artifact + has_task_contract_type = laamp_transport_gold + has_task_contract_type = laamp_transport_ward + has_task_contract_type = laamp_transport_explorer + has_task_contract_type = laamp_transport_animal + has_task_contract_type = laamp_construction_contract + } +} + +ep3_vassal_will_become_admin = { + #This trigger picks out vassals that automatically convert to Admin. + #We convert vassals that are: + #Clan or Feudal + #De Jure part of the Empire + #Have the State Faith + #Aren't rivals of the admin liege + #Dukes and above must like the main liege at least a little. + highest_held_title_tier > tier_barony + primary_title = { + target_is_de_jure_liege_or_above = scope:administrative_liege.primary_title #We only auto convert de jure vassals + } + OR = { #We convert only clan and feudal vassals in this decision + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_japan_feudal + } + faith = scope:administrative_liege.faith #The future state faith +} + +ep3_kings_will_convert_trigger = { + primary_title.tier >= tier_kingdom + NOR = { + opinion = { + target = liege + value < -50 + } + has_relation_rival = liege + } +} + +ep3_is_clan_inclined_trigger = { + OR = { + faith.religion = religion:islam_religion + culture ?= { + OR = { + has_cultural_pillar = heritage_arabic + has_cultural_pillar = heritage_iranian + has_cultural_pillar = heritage_turkic + } + } + } +} + +cid_story_cycle_start_trigger = { + is_alive = yes + is_playable_character = yes + has_ep3_dlc_trigger = yes + NOR = { + has_variable = ongoing_cid_story_cycle + has_variable = had_cid_story_cycle + } + has_government = landless_adventurer_government + top_liege ?= { + any_courtier = { is_available_healthy_ai_adult = yes } + } +} + +ep3_can_have_legitimists_camp_purpose_trigger = { + custom_tooltip = { + text = ep3_can_have_legitimists_camp_purpose_trigger.tt.explanation + any_claim = { + explicit = yes + tier >= tier_kingdom + } + } +} + +has_any_gallowsbait_xp_trigger = { + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 1 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 1 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 1 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 1 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 1 + } + } +} + +ep3_restored_rome_hard_mode_trigger = { + OR = { + this = title:h_roman_empire.holder + this = title:h_eastern_roman_empire.holder + } + any_owned_story = { + type = ep3_story_cycle_restoring_rome + has_variable = roman_empire_hard_mode + } +} + +faith_is_interesting_heresy_to_state_faith_trigger = { + religion = root.top_liege.primary_title.state_faith.religion + this != root.top_liege.primary_title.state_faith + num_county_followers >= 3 + save_temporary_scope_as = temp_heresy + root.top_liege.primary_title.state_faith = { + faith_hostility_level = { + target = scope:temp_heresy + value >= faith_hostile_level + } + } +} + +ep3_boundary_dispute_county_trigger = { + tier = tier_county + custom_tooltip = { + text = dispute_border_county_neighbour_tt + county_held_or_vassal_to_target_trigger = { TARGET = $TARGET$ } + OR = { + any_neighboring_county = { + county_held_or_vassal_to_target_trigger = { TARGET = $OWNER$ } + } + AND = { + de_jure_liege.holder ?= $OWNER$ + any_title_to_title_neighboring_and_across_water_county = { + county_held_or_vassal_to_target_trigger = { TARGET = $OWNER$ } + } + } + } + } +} + +ep3_subsume_province_duchy_trigger = { + tier = tier_duchy + holder ?= $TARGET$ + is_noble_family_title = no + is_landless_type_title = no + trigger_if = { + limit = { tier = tier_duchy } + custom_tooltip = { + text = subsume_province_must_neighbor_tt + any_de_jure_county = { + county_held_or_vassal_to_target_trigger = { TARGET = $TARGET$ } + any_neighboring_county = { + county_held_or_vassal_to_target_trigger = { TARGET = $OWNER$ } + } + } + } + custom_tooltip = { + text = subsume_province_more_than_half_tt + any_de_jure_county = { + percent < 0.5 + county_held_or_vassal_to_target_trigger = { TARGET = $OWNER$ } + } + } + } +} + +ep3_interesting_courtier_to_ask_trigger = { + is_councillor = no + has_any_court_position = no + 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 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + has_trait = education_martial_4 + has_trait = education_martial_5 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + has_trait = education_learning_4 + has_trait = education_learning_5 + has_trait_xp = { trait = lifestyle_physician value >= 20 } + has_trait_xp = { trait = lifestyle_traveler track = travel value >= 20 } + has_trait_xp = { trait = lifestyle_traveler track = danger value >= 20 } + has_trait_xp = { trait = lifestyle_hunter track = hunter value >= 20 } + has_trait_xp = { trait = lifestyle_hunter track = falconer value >= 20 } + has_trait_xp = { trait = charioteer_blue value >= 20 } + has_trait_xp = { trait = charioteer_green value >= 20 } + has_trait_xp = { trait = charioteer_red value >= 20 } + has_trait_xp = { trait = charioteer_white value >= 20 } + has_trait_xp = { trait = governor value >= 20 } + } +} + +ep3_admin_faction_trigger = { + trigger_if = { # Enabled for all admin realms with EP3 + limit = { has_ep3_dlc_trigger = yes } + $FACTION_TARGET$ = { government_allows = administrative } + } + trigger_else = { # Enabled for Byzantium without EP3 + $FACTION_TARGET$ = { has_title = title:e_byzantium } + } +} + +ep3_switch_faction_war_sides_war_trigger = { + # Recipient involved in war + is_participant = scope:recipient + # Is a Faction war + save_temporary_scope_as = faction_war_temp + primary_attacker.joined_faction.faction_war ?= scope:faction_war_temp + # Actor and recipient on opposing sides + trigger_if = { + limit = { is_defender = scope:recipient } + is_attacker = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_defender = { is_allied_to = scope:recipient } + } + } + trigger_else = { + is_defender = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_attacker = { is_allied_to = scope:recipient } + } + } + # Recipient must not be a war leader + NOT = { is_war_leader = scope:recipient } + # Recipient must not be the claimant + primary_attacker.joined_faction.special_character != scope:recipient +} + +ep3_raid_insight_trigger = { + scope:owner = { + NOT = { has_character_modifier = raid_insight_$TYPE$ } + } + scope:target_domicile = { has_domicile_building_or_higher = $TYPE$_01 } +} + +ep3_adventurer_ai_valid_war_target_trigger = { + is_landed = yes + reverse_opinion = { + target = $ADVENTURER$ + value <= 0 + } + in_diplomatic_range = $ADVENTURER$ + NOR = { + is_at_war_with = $ADVENTURER$ + is_allied_to = $ADVENTURER$ + } + current_strength_with_allies_value < $ADVENTURER$.current_strength_with_allies_seventy_five_percent_value + save_temporary_scope_as = war_target_temp + trigger_if = { + limit = { government_has_flag = government_is_tribal } + OR = { + $ADVENTURER$.culture.culture_head ?= { government_has_flag = government_is_tribal } + capital_county.culture = { + any_parent_culture_or_above = { this = $ADVENTURER$.culture } + } + $ADVENTURER$.culture = { + any_parent_culture_or_above = { this = scope:war_target_temp.capital_county.culture } + } + } + } + $ADVENTURER$ = { + trigger_if = { + limit = { has_realm_law = camp_purpose_legitimists } + any_claim = { + tier >= tier_kingdom + holder = scope:war_target_temp + save_temporary_scope_as = claim_temp + } + can_declare_war = { + defender = scope:war_target_temp + casus_belli = claim_cb + claimant = $ADVENTURER$ + target_titles = { scope:claim_temp } + } + } + trigger_else = { + OR = { + AND = { + scope:war_target_temp = { + any_held_title = { + count >= 1 + title_tier = empire + save_temporary_scope_as = war_target_title_temp + } + } + can_declare_war = { + defender = scope:war_target_temp + casus_belli = ep3_laamp_adventurer_empire_invasion + target_titles = { scope:war_target_title_temp } + } + } + AND = { + scope:war_target_temp = { + any_held_title = { + count >= 1 + title_tier = kingdom + save_temporary_scope_as = war_target_title_temp + } + } + can_declare_war = { + defender = scope:war_target_temp + casus_belli = ep3_laamp_adventurer_kingdom_invasion + target_titles = { scope:war_target_title_temp } + } + } + AND = { + scope:war_target_temp = { + any_held_title = { + count >= 1 + title_tier = duchy + save_temporary_scope_as = war_target_title_temp + } + } + can_declare_war = { + defender = scope:war_target_temp + casus_belli = ep3_laamp_adventurer_duchy_invasion + target_titles = { scope:war_target_title_temp } + } + } + AND = { + scope:war_target_temp = { + any_held_title = { + count >= 1 + title_tier = county + save_temporary_scope_as = war_target_title_temp + } + } + can_declare_war = { + defender = scope:war_target_temp + casus_belli = ep3_laamp_adventurer_county_invasion + target_titles = { scope:war_target_title_temp } + } + } + } + } + } +} + +ep3_adventurer_ai_valid_legitimist_target_trigger = { + is_landed = yes + NOR = { + has_relation_friend = $ADVENTURER$ + is_at_war_with = $ADVENTURER$ + is_allied_to = $ADVENTURER$ + } + save_temporary_scope_as = target_temp + current_strength_with_allies_value < $ADVENTURER$.current_strength_with_allies_seventy_five_percent_value + any_held_title = { + title_tier >= kingdom + any_claimant = { this = $ADVENTURER$ } + save_temporary_scope_as = claim_temp + } + $ADVENTURER$ = { + can_declare_war = { + defender = scope:target_temp + casus_belli = claim_cb + claimant = $ADVENTURER$ + target_titles = { scope:claim_temp } + } + } +} + +ep3_adventurer_might_attack_target_trigger = { + has_government = landless_adventurer_government + # Army at least half the size + current_strength_with_allies_value > $TARGET$.current_strength_with_allies_fifty_percent_value + # Not allies + NOT = { is_allied_to = $TARGET$ } + OR = { + # Has a claim on a title in subrealm + any_claim = { + holder ?= { + OR = { + this = $TARGET$ + target_is_liege_or_above = $TARGET$ + } + } + } + # Opinion + opinion = { + target = $TARGET$ + value < -25 + } + } +} + +ep3_adventurer_mercenary_war_trigger = { + is_war_leader = $EMPLOYER$ + OR = { + using_civil_war_cb_trigger = yes + using_non_ghw_holy_war_cb_trigger = yes + using_de_jure_cb_trigger = yes + using_conquest_cb_trigger = yes + } + NOT = { is_participant = $LAAMP$ } +} + +ep3_adventurer_ai_valid_contract_trigger = { + $LAAMP$ = { + OR = { + # DIPLOMACY + can_create_task_contract = { type_name = laamp_base_0001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_0011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_0021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_0031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_0011 employer = $EMPLOYER$ } + # MARTIAL + can_create_task_contract = { type_name = laamp_base_1001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_1011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_1021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_1031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_1041 employer = $EMPLOYER$ } + # STEWARDSHIP + can_create_task_contract = { type_name = laamp_base_2001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_2011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_2021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_2031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_2041 employer = $EMPLOYER$ } + # INTRIGUE + can_create_task_contract = { type_name = laamp_base_3001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_3011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_3021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_3031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_3041 employer = $EMPLOYER$ } + # LEARNING + can_create_task_contract = { type_name = laamp_base_4001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_4011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_4021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_4031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_4041 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_4100 employer = $EMPLOYER$ } + # PROWESS + can_create_task_contract = { type_name = laamp_base_5001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_5011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_5021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_5031 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_5041 employer = $EMPLOYER$ } + # JUSTICAR + can_create_task_contract = { type_name = laamp_base_6001 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_6011 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_6021 employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_base_6031 employer = $EMPLOYER$ } + # EXTRA + can_create_task_contract = { type_name = laamp_boost_legitimacy_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_rid_councillor_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_gain_wanderer_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_find_secret_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_eliminate_heir_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_steal_artifact_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_construction_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_cultural_minority_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_religious_minority_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_prison_break_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_join_faction_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_faith_conversion_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_fight_faith_conversion_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_find_secrets_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_fabricate_claim_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_increase_control_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_find_secrets_contract employer = $EMPLOYER$ } + } + AND = { + has_realm_law = camp_purpose_mercenaries + OR = { + can_create_task_contract = { type_name = laamp_raid_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_join_war_contract employer = $EMPLOYER$ } + can_create_task_contract = { type_name = laamp_help_claimant_contract employer = $EMPLOYER$ } + } + } + } +} + +hasan_evangelize_province_trigger = { + save_temporary_scope_as = county + scope:county.faith = { + # Religion is same as Hasan's (i.e. Muslim) + #religion = root.religion # QA thinks its more fun without this! + NOR = { + # Faith is different from Hasan's + custom_tooltip = { + text = zealous_missionary_start_decision_other_faith_location + this = root.faith + } + # County is not held by it's Faith's Religious Head + custom_tooltip = { + text = is_held_by_hof_tt + religious_head ?= scope:county.holder + } + } + } + development_level <= 25 + custom_tooltip = { + text = has_tougher_to_convert_tt + NOT = { has_county_modifier = tougher_to_convert } + } + custom_tooltip = { + text = 0_or_below_county_opinion_tt + county_opinion <= 0 + } + custom_tooltip = { + text = NOT_IS_HOLY_SITE_TRIGGER + NOT = { + any_direct_de_jure_vassal_title = { is_holy_site_of = scope:county.faith } + } + } +} + +hasan_camp_in_foes_realm_trigger = { + trigger_if = { + limit = { + any_owned_story = { + var:ultimate_foe ?= { + save_temporary_scope_as = ultimate_foe + } + } + } + custom_description = { + text = hasan_stroy_cycle_camp_at_foe_realm + object = scope:ultimate_foe + domicile.domicile_location.county.holder = { + OR = { + any_liege_or_above = { + this = scope:ultimate_foe + } + this = scope:ultimate_foe + } + } + } + } + trigger_else = { + character:3096 = { + save_temporary_scope_as = caliph + } + save_temporary_scope_as = hasan + any_owned_story = { + trigger_if = { + limit = { exists = var:radical_points } + save_temporary_scope_value_as = { + name = radical_points + value = var:radical_points + } + } + trigger_else = { + save_temporary_scope_value_as = { + name = radical_points + value = 0 + } + } + } + custom_tooltip = { + text = hasan_stroy_cycle_ultimate_foe + any_owned_story = { + story_type = story_hasan + exists = var:ultimate_foe + exists = var:radical_points + var:radical_points >= 15 + } + } + } +} + +estate_can_construct_market_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_market_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_market_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_market_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_garden_leisure_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_garden_leisure_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_garden_leisure_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} +estate_can_construct_garden_fruit_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_garden_fruit_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_garden_fruit_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_guardhouse_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_guardhouse_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} + +estate_can_construct_workshop_carpenter_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_workshop_carpenter_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_workshop_carpenter_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_workshop_carpenter_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} +estate_can_construct_workshop_mason_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_workshop_mason_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_workshop_mason_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_workshop_mason_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} +estate_can_construct_workshop_textile_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_workshop_textile_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_workshop_textile_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_workshop_textile_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_barracks_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_barracks_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_barracks_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_barracks_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_vineyard_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_vineyard_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_vineyard_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_vineyard_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_olive_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_olive_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_olive_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_olive_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_health_03_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_02 } +} +estate_can_construct_health_04_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_03 } +} +estate_can_construct_health_05_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_04 } +} +estate_can_construct_health_06_trigger = { + domicile ?= { has_domicile_building_or_higher = estate_main_05 } +} + +estate_can_construct_japanese_tea_plantation_03_trigger = { + domicile ?= { has_domicile_building_or_higher = japanese_manor_main_02 } +} +estate_can_construct_japanese_tea_plantation_04_trigger = { + domicile ?= { has_domicile_building_or_higher = japanese_manor_main_03 } +} +estate_can_construct_japanese_tea_plantation_05_trigger = { + domicile ?= { has_domicile_building_or_higher = japanese_manor_main_04 } +} +estate_can_construct_japanese_tea_plantation_06_trigger = { + domicile ?= { has_domicile_building_or_higher = japanese_manor_main_05 } +} + +# Check succession law types for Influence Candidacy validity +# TYPE should always be 'realm' or 'title' +influence_candidacy_valid_succession_law_trigger = { + OR = { + # Byzantium + has_$TYPE$_law = acclamation_succession_law + has_$TYPE$_law = appointment_succession_law + # Celestial Governors + has_$TYPE$_law = celestial_appointment_succession_law + has_$TYPE$_law = celestial_military_appointment_succession_law + # Meritocratic Governors + has_$TYPE$_law = meritocratic_appointment_succession_law + has_$TYPE$_law = meritocratic_military_appointment_succession_law + # Japanese Governors + has_$TYPE$_law = japanese_appointment_succession_law + has_$TYPE$_law = japanese_military_appointment_succession_law + # Ceremonial Regents + has_$TYPE$_law = meritocratic_regency_succession_law + has_$TYPE$_law = japanese_regency_succession_law + } +} diff --git a/common/scripted_triggers/10_tgp_triggers.txt b/common/scripted_triggers/10_tgp_triggers.txt index 9eb0788c..3ab948a7 100644 --- a/common/scripted_triggers/10_tgp_triggers.txt +++ b/common/scripted_triggers/10_tgp_triggers.txt @@ -898,3 +898,32 @@ tgp_capital_not_in_chinese_naming_region = { } } } + +farm_estates_3_4_trigger = { + custom_tooltip = { + text = farm_estates_3_4_trigger + OR = { + AND = { + building_requirement_castle_city_church = { LEVEL = 02 } + scope:holder.culture = { + has_innovation = innovation_manorialism + } + building_farm_estates_requirement_terrain = yes + } + AND = { + has_building_or_higher = pastures_04 + culture = { + has_cultural_parameter = farm_estates_pastures_unlock + } + } + AND = { + building_paddy_fields_requirement_terrain = yes + scope:holder.culture = { + has_innovation = innovation_champa_rice + has_innovation = innovation_manorialism + } + building_requirement_castle_city_church = { LEVEL = 02 } + } + } + } +} diff --git a/common/task_contracts/_task_contracts.info b/common/task_contracts/_task_contracts.info new file mode 100644 index 00000000..eda4e53a --- /dev/null +++ b/common/task_contracts/_task_contracts.info @@ -0,0 +1,104 @@ + = { + # for grouping together contract types, e.g. mercenary, potentially determines map icon + group = test_group + + # Icon used in the UI + icon = "path/to/image.dds" + + # Description or 'back-story' of the task contract, defaults to "_desc" + # root = task_contract_type + desc = "" + + # Description for request telling 'what to do' in order to complete the contract, defaults to "_request" + # root = task_contract_type + task_contract_request = "" + + # Contract owner should travel to contract location to accept and stay there for the duration of the contract + travel = no + + # Contract is of a criminal nature + is_criminal = no + + # Range setting + # yes - uses diplomatic range to contract employer + # no - uses ADVENTURER_DISTANCE_RESTRICTION define as radius + use_diplomatic_range = no + + # Validity Triggers + ## Can contract appear? (if triggers are true) + # root - contract owner + # scope:employer - contract employer, can be empty + valid_to_create = { + + } + + # Can contract be accepted? (if triggers are true) + # root - contract owner + # scope:employer - contract employer, can be empty + valid_to_accept = { + + } + + # Should contract invalidate? (if triggers are false) + # root - existing contract + valid_to_continue = { + + } + + # Should not taken contract invalidate? (if triggers are false) + # root - existing contract + valid_to_keep = { + + } + + # On-Action Effects + ## Effects called when contract is created (create_task_contract effect) + on_create = { + + } + + ## Effects called when contract is accepted (accept_task_contract effect) + on_accepted = { + + } + + # Effects called when contract is completed successfully, along with rewards (complete_task_contract effect) + on_completed = { + + } + + # Effects called when contract is invalidated (valid_to_continue is false, or invalidate_task_contract effect) + on_invalidated = { + + } + + # Default = no, showing completed contract toast animation + should_show_toast_on_complete = no + + # Contract Reward Effects + task_contract_reward = { + #reward name + = { + # Default = no, showing completed contract reward effect desription + should_print_on_complete = no + effect = { + + } + + # Should this possible reward be shown in the UI. It will still be displayed in the effect on completion + # if that's what owner gets + visible = yes + + # Is this reward positive 'Upon Success' or negative 'Upon Failure' + # default is yes + positive = yes + } + } + + # scripted value how likely this contract type is to be picked when populating for area + # root - contract owner + # scope:employer - contract employer, can be empty + weight = { + value = 0 + } +} diff --git a/common/task_contracts/admin_contracts.txt b/common/task_contracts/admin_contracts.txt new file mode 100644 index 00000000..563bab2f --- /dev/null +++ b/common/task_contracts/admin_contracts.txt @@ -0,0 +1,2966 @@ +################## +# ADMIN CONTRACTS +################## +# AKA Governance + +# Overdue Taxes: A village hasn't paid taxes +overdue_taxes = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/money.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.1000 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + task_contract_taker ?= { + save_scope_as = task_contract_character + send_interface_message = { + type = event_generic_bad_with_text + title = admin_contract_invalidated_title + left_icon = scope:task_contract_character + desc = admin_contract_invalidated_desc + + current_travel_plan ?= { + if = { + limit = { + next_destination_province = root.task_contract_location + can_cancel = yes + } + cancel_travel_plan = yes + } + } + } + } + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + taxes_governor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 25 + multiply = governance_task_contract_tier_value + min = 5 + } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_development_level = 1 + } + } + } + taxes_paid_in_full = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 40 + min = 10 + } + } + } + } + taxes_paid_partially = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 20 + min = 2 + } + add_prestige = minor_prestige_gain + } + } + } + taxes_station_troops = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = ep3_governance_stationed_troops + years = 10 + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + taxes_assign_administrator = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 20 + min = 5 + } + change_influence = minor_influence_gain + } + } + } + taxes_lower_taxes = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_tax_relief + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + if = { + limit = { + has_trait = governor + has_trait_xp = { + trait = governor + value > 0 + } + } + add_trait_xp = { + trait = governor + value = -5 + } + } + } + } + } + } +} + +# Hoarding Mayor: A greedy mayor in your employ is hoarding all the gold +hoarding_mayor = { + group = admin_governance_group + icon = "gfx/interface/icons/character_interactions/request_funding_interaction.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + task_contract_employer = { + is_alive = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = hoarding_mayor + } + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.1010 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + mayor_governor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_employer ?= { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = scope:task_contract.task_contract_employer.gold + multiply = 0.35 + round = yes + } + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_infrastructure + years = 10 + } + } + } + } + mayor_claim_gold = { + visible = no + effect = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + task_contract_employer ?= { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = scope:task_contract.task_contract_employer.gold + multiply = 0.5 + round = yes + } + } + } + } + } + mayor_invest_in_buildings = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_prestige = minor_prestige_gain + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_infrastructure + years = 10 + } + change_development_progress_with_overflow = 10 + } + } + } + mayor_hold_festivities = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_festivities + years = 10 + } + } + } + } + mayor_reprimand = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:task_contract.task_contract_employer + IMPRISONER = scope:task_contract.task_contract_taker + } + add_prestige = medium_prestige_gain + } + task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + mayor_hook = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + if = { + limit = { + can_add_hook = { + target = scope:task_contract.task_contract_employer + type = obligation_hook + } + } + add_hook = { + target = scope:task_contract.task_contract_employer + type = obligation_hook + } + } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + add_prestige = medium_prestige_loss + } + } + } + } +} + +# Bountiful Harvest: The harvest was greater than expected +bountiful_harvest = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/a_catch_all_councillor_icon.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + sub_realm_size > 1 + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.1020 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + task_contract_taker ?= { + save_scope_as = task_contract_character + send_interface_message = { + type = event_generic_bad_with_text + title = admin_contract_invalidated_title + left_icon = scope:task_contract_character + desc = admin_contract_invalidated_desc + } + } + } + } + + task_contract_reward = { + success = { + effect = { + custom_tooltip = admin_contract_success_tt_rewards + } + } + harvest_governor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + every_sub_realm_county = { + add_county_modifier = { + modifier = ep3_governance_harvest + years = 10 + } + } + if = { # Gain some extra Governor trait exp + limit = { has_trait = governor } + increase_governance_effect = { VALUE = 6 } + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + } + } + } + harvest_distribute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + every_sub_realm_county = { + change_development_progress_with_overflow = 10 + } + if = { # Gain some extra Governor trait exp + limit = { has_trait = governor } + increase_governance_effect = { VALUE = 6 } + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + } + } + } + harvest_capital = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_prestige = { + value = minor_prestige_gain + multiply = governance_task_contract_tier_value + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_great_harvest + years = 10 + } + change_development_progress_with_overflow = 10 + } + } + } + harvest_charity = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = { + value = medium_piety_gain + multiply = governance_task_contract_tier_value + } + } + } + } + harvest_sell_excess = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 10 + multiply = governance_task_contract_tier_value + round = yes + min = 2 + } + increase_governance_effect = { VALUE = 2 } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + } + task_contract_location.county = { + change_development_progress_with_overflow = 5 + } + } + } + harvest_claim_it_yourself = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 25 + multiply = governance_task_contract_tier_value + + if = { + limit = { + domicile ?= { has_domicile_building_or_higher = storage_granary_03 } + } + multiply = { + value = 1 + add = estate_granary_gold_bonus_value + } + } + round = yes + min = 5 + } + if = { + limit = { + domicile ?= { has_domicile_building_or_higher = storage_granary_03 } + } + custom_tooltip = harvest_claim_it_yourself_estate_tt + } + increase_governance_effect = { VALUE = -2 } + add_merit_if_relevant_effect = { + MERIT = minor_merit_loss + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + } +} + +# Ramping Bandits: A group of bandits have established themselves in a county +rampant_bandits = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/marshal_job.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.1030 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + bandit_governor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_governance_workforce + years = 10 + } + } + } + } + bandit_pardon = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = { + value = medium_piety_gain + multiply = governance_task_contract_tier_value + } + } + } + } + bandit_recruit = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_character_modifier = { + modifier = ep3_governance_mercenary_troops + years = 10 + } + } + } + } + bandit_payment = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + add_merit_if_relevant_effect = { + MERIT = miniscule_merit_value + } + add_stewardship_lifestyle_xp = { + value = medium_lifestyle_experience + multiply = governance_task_contract_tier_value + } + } + } + } + bandit_execute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_dread = { + value = medium_dread_gain + multiply = governance_task_contract_tier_value + } + add_merit_if_relevant_effect = { + MERIT = miniscule_merit_value + } + } + task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + bandit_gold = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = medium_gold_value + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + } + task_contract_location.county = { + change_county_control = -5 + } + } + } + } +} + +# Discontent Soldiers: Discontentment is spreading throughout your troops. +discontent_soldiers = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/soldier.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + any_neighboring_and_across_water_realm_same_rank_owner = { + liege = root.liege + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2000 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + soldiers_land = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location = { + add_province_modifier = { + modifier = ep3_settled_troops_province_modifier + years = 10 + } + } + } + } + soldiers_rival = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + var:other_gov ?= { + add_opinion = { + target = scope:task_contract.task_contract_taker + modifier = annoyed_opinion + opinion = -25 + } + } + } + } + soldiers_break = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_prestige = medium_prestige_gain + } + task_contract_location = { + add_province_modifier = { + modifier = ep3_longer_breaks_province_modifier + years = 10 + } + } + } + } + soldiers_punish = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_dread = medium_dread_gain + add_gold = medium_gold_value + } + } + } + soldiers_pay = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = medium_gold_value + add_character_modifier = { + modifier = ep3_better_paid_soldiers_modifier + years = 10 + } + } + } + } + } +} + +# Inept Mayor: The mayor of a barony has proved to be rather inept, not being able to handle the city's administration +inept_mayor = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/building.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + task_contract_employer = { + is_alive = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = inept_mayor + } + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2010 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + mayor_in_govt = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_prestige = major_prestige_gain + } + task_contract_location.county = { remove_county_modifier = ep3_mismanaged_administration_modifier } + } + } + mayor_in_fire = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + add_dread = minor_dread_gain + } + task_contract_employer = { depose = yes } # depose_effect unnecessary for AI mayor + task_contract_location.county = { remove_county_modifier = ep3_mismanaged_administration_modifier } + } + } + mayor_in_help = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + remove_short_term_gold = minor_gold_value + } + task_contract_location.county = { remove_county_modifier = ep3_mismanaged_administration_modifier } + } + } + mayor_in_punish = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + } + } + } + + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Provincial Investment: An opportunity has presented itself for you to invest in the capital of your governorship. +prov_investment = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/domain.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2020 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + invest_infrastructure = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_contract_infrastructure_modifier + years = 10 + } + } + } + } + invest_monument = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + add_prestige = { + value = medium_prestige_gain + multiply = governance_task_contract_tier_value + } + liege ?= { + add_opinion = { + target = scope:task_contract.task_contract_taker + modifier = flattered_opinion + opinion = 40 + } + } + } + } + } + invest_traders = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + increase_governance_effect = { VALUE = 6 } + } + } + } + invest_military = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + } + task_contract_location = { + add_province_modifier = { + modifier = ep3_invested_military_modifier + years = 10 + } + } + } + } + invest_food = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_food_distribution_modifier + years = 10 + } + } + task_contract_taker ?= { + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + invest_church = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = major_piety_gain + + faith ?= { + religious_head ?= { + add_opinion = { + target = scope:task_contract.task_contract_taker + modifier = pleased_opinion + opinion = 30 + } + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Raiding Peasants: A self-organized band of peasants has been raiding across the border +raiding_peasants = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/raid.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + save_scope_as = task_contract_character + trigger_event = governor_contract_event.2030 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + peasant_enroll = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + } + } + peasant_punish = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 2 } + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + add_dread = minor_dread_gain + } + } + } + peasant_encourage = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_peasant_border_raids_modifier + years = 10 + } + } + } + } + peasant_work = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_peasant_workers_modifier + years = 10 + } + } + } + } + peasant_take = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Wild Predators: Wild predators are eating all the animals of the local game preserve. +wild_predators = { + group = admin_governance_group + icon = "gfx/interface/icons/character_interactions/activity_hunt.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2040 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + predators_poisoners = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_learning_lifestyle_xp = major_lifestyle_xp + add_intrigue_lifestyle_xp = major_lifestyle_xp + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_abundant_game_modifier + years = 10 + } + remove_county_modifier = ep3_wild_predators_modifier + } + } + } + predators_hunt = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + remove_county_modifier = ep3_wild_predators_modifier + } + task_contract_taker ?= { + increase_governance_effect = { VALUE = 2 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + if = { + limit = { + has_trait = lifestyle_hunter + } + add_trait_xp = { + trait = lifestyle_hunter + track = hunter + value = 10 + } + } + else = { add_trait = lifestyle_hunter } + } + } + } + predators_hunters = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + remove_county_modifier = ep3_wild_predators_modifier + } + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + remove_short_term_gold = minor_gold_value + } + } + } + predators_locals = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + remove_county_modifier = ep3_wild_predators_modifier + } + task_contract_taker ?= { + add_prestige = minor_prestige_gain + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + predators_capture = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county ?= { + remove_county_modifier = ep3_wild_predators_modifier + } + task_contract_taker ?= { + add_prestige = medium_prestige_gain + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_character_modifier = { + modifier = ep3_ferocious_pets_modifier + years = 10 + } + } + } + } + predators_preys = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_abundant_game_modifier + years = 10 + } + } + task_contract_taker ?= { + remove_short_term_gold = minor_gold_value + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Evil Presence: The locals are persecuted by a "devil" and terrified +evil_presence = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/witchcraft.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2050 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + presence_official = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = medium_piety_gain + add_learning_lifestyle_xp = major_lifestyle_xp + increase_governance_effect = { VALUE = 8 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + presence_exorcize = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = minor_piety_gain + add_learning_lifestyle_xp = medium_lifestyle_xp + increase_governance_effect = { VALUE = 4 } + } + } + } + presence_sorcerer = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_church_investigation_modifier + years = 10 + } + } + task_contract_taker ?= { + add_prestige = major_prestige_gain + } + } + } + presence_local = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_local_practices_modifier + years = 10 + } + } + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + add_piety = medium_piety_loss + } + } + } + presence_rationalize = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_learning_lifestyle_xp = medium_lifestyle_xp + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + add_character_modifier = { + modifier = ep3_rationalist_gov_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + add_piety = minor_piety_loss + } + } + } + } +} + +# Miraculous Healing: A fake possessed/invalid keeps being "miraculously healed" every time they receive a relic or a valuable item +miraculous_healing = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/religious.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2060 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + healing_example = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_prestige = medium_prestige_gain + add_piety = medium_piety_gain + } + } + } + healing_hire = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + add_dread = minor_dread_gain + } + } + } + healing_relic = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + add_piety = medium_piety_gain + } + } + } + healing_fine = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + add_gold = medium_gold_value + } + } + } + healing_imprison = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + } + } + healing_faith = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = major_piety_gain + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Buried Treasure: A peasant has found a hoard of buried gold +buried_treasure = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/steward_job.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2070 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + treasure_invest = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_treasure_invest_modifier + years = 10 + } + } + } + } + treasure_tax = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + add_prestige = minor_prestige_gain + } + } + } + treasure_commandeer = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + } + } + treasure_acknowledge = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + treasure_distribute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_treasure_distributed_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Public Land: You get a chance to confiscate some lands +public_land = { + group = admin_governance_group + icon = "gfx/interface/icons/character_interactions/icon_scheme_expand_power_base.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + task_contract_employer = { + is_alive = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2080 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + land_reinstate = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_lands_reinstated_modifier + years = 15 + } + } + } + } + land_confiscate = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_character_modifier = { + modifier = ep3_land_confiscate_modifier + years = 15 + } + } + } + } + land_bribe = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + } + } + land_favor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + change_influence = { + value = miniscule_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + land_people = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + task_contract_location.county = { + change_county_control = 10 + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_prestige = { + value = minor_prestige_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# The Mad Prophet: A prophet has been terrorizing a province +mad_prophet = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/heresy.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2090 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + prophet_reassure = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_religiously_pacified_modifier + years = 10 + } + } + } + } + prophet_persecute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_doom_repressed_modifier + years = 10 + } + } + } + } + prophet_arrest = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + } + } + prophet_debate = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + change_influence = { + value = miniscule_influence_gain + multiply = governance_task_contract_tier_value + } + add_character_modifier = { + modifier = ep3_religious_debate_modifier + years = 10 + } + } + } + } + prophet_ceremonies = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + remove_short_term_gold = minor_gold_value + add_piety = { + value = minor_piety_gain + multiply = governance_task_contract_tier_value + } + add_prestige = { + value = minor_prestige_gain + multiply = governance_task_contract_tier_value + } + } + } + } + prophet_clergy = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = miniscule_influence_gain + multiply = governance_task_contract_tier_value + } + add_piety = { + value = medium_piety_gain + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = { + value = minor_prestige_loss + multiply = governance_task_contract_tier_value + } + change_influence = { + value = miniscule_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Titles for Sale: Someone has been unlegally selling religious titles/offices +titles_sale = { + group = admin_governance_group + icon = "gfx/interface/icons/character_interactions/purchase_land_interaction.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2100 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + titles_repay = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_repayed_church_titles_modifier + years = 10 + } + } + } + } + titles_commandeer = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + titles_back = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 8 } + } + } + } + titles_bribe = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + change_influence = { + value = miniscule_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Hungry Times: A famine has forced some locals to eat "unclean" animals... Or dead humans... Or humans-that-weren't-so-dead-yet +hungry_times = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/plague.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2110 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + hungry_support = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_rebuild_effort_modifier + years = 15 + } + } + } + } + hungry_amnesty = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + hungry_punish = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + } + } + hungry_persecute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + change_influence = { + value = miniscule_influence_loss + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + change_county_control = 20 + } + } + } + hungry_control = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + remove_short_term_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_tight_control_modifier + years = 15 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_prestige = { + value = minor_prestige_loss + multiply = governance_task_contract_tier_value + } + change_influence = { + value = miniscule_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +# Wartime Measures: Your liege is at war and you are asked to contribute to the military effort +wartime_measures = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/soldier.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = governor_contract_event.2120 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = admin_contract_success_tt_rewards + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = admin_contract_failure_tt + } + } + wartime_support = { #Gov special + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + remove_short_term_gold = { + value = medium_gold_value + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county.duchy = { + every_de_jure_county = { + limit = { + OR = { + holder = scope:task_contract.task_contract_taker + holder.liege = scope:task_contract.task_contract_taker + } + } + add_county_modifier = { + modifier = ep3_war_support_modifier + years = 10 + } + } + } + } + } + wartime_supplies = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_war_supplies_modifier + years = 10 + } + } + } + } + wartime_lodgings = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_war_lodgings_modifier + years = 10 + } + } + } + } + wartime_gold = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + wartime_lookouts = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 3 } + remove_short_term_gold = { + value = tiny_gold_value + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_war_lookout_modifier + years = 10 + } + } + } + } + wartime_compensations = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 3 } + liege = { + add_opinion = { + target = scope:task_contract.task_contract_taker + modifier = disappointed_opinion + opinion = -15 + } + } + + } + task_contract_location.county = { + add_county_modifier = { + modifier = ep3_war_compensations_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_prestige = { + value = minor_prestige_loss + multiply = governance_task_contract_tier_value + } + change_influence = { + value = miniscule_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} diff --git a/common/task_contracts/laamp_base_contracts.txt b/common/task_contracts/laamp_base_contracts.txt new file mode 100644 index 00000000..77aa30b1 --- /dev/null +++ b/common/task_contracts/laamp_base_contracts.txt @@ -0,0 +1,8315 @@ +################################################## +# INFO +# For laamp contracts that are broadly applicable: that is, they should be able to trigger virtually anywhere and with a minimum of triggers. +# The idea is that any given laamp led by a character skilled in any one thing should always be viable — maybe through crime, maybe by demeaning themselves, but they should always have some contracts around to work with. +################################################## + + + +################################################## +# GROUPS (for populate_task_contracts_for_area) +# +# laamp_contracts_criminal_group +# laamp_contracts_diplomacy_group +# laamp_contracts_hireling_group +# laamp_contracts_hunting_group +# laamp_contracts_intrigue_group +# laamp_contracts_learning_group +# laamp_contracts_martial_group +# laamp_contracts_stewardship_group +# laamp_contracts_justicar_group +# + +################################################## +# #Diplo Contracts +# laamp_base_0001 Regale court with stories +# laamp_base_0011 Improve ruler's reputation +# laamp_base_0021 Hobnob with local ruler +# laamp_base_0031 Paid Mediator +# laamp_base_0041 Confidence trickster +# +# #Martial Contracts +# laamp_base_1001 Hunt criminals +# laamp_base_1011 Act as hired muscle +# laamp_base_1021 Help train local MaA +# laamp_base_1031 Garrison service +# laamp_base_1041 Ambush travellers +# +# #Stewardship Contracts +# laamp_base_2001 Collect taxes for a third party +# laamp_base_2011 Perform a census +# laamp_base_2021 Help construct a building +# laamp_base_2031 Settle an administrative boundary dispute +# laamp_base_2041 Collect fake taxes +# +# #Intrigue Contracts +# laamp_base_3001 Provide intelligence from your trips +# laamp_base_3011 Murder a character's rival +# laamp_base_3021 Abduct a character's rival +# laamp_base_3031 Attack the property of a character's rival +# laamp_base_3041 Heist from a ruler's treasury +# +# #Learning Contracts +# laamp_base_4001 Transcribe texts for a learned ruler +# laamp_base_4011 Help settle theological arguments +# laamp_base_4021 Create a work of learning for a ruler +# laamp_base_4031 Solicit Charity +# laamp_base_4041 Sell bogus relics +# laamp_base_4100 Act as a tutor for ruler's child +# +# #Prowess Contracts +# laamp_base_5001 Hunt in the wilds +# laamp_base_5011 Guard merchant properties +# laamp_base_5021 Guard a local ruler at a minor event +# laamp_base_5031 Go rustling +# laamp_base_5041 Go poaching +# +# #Justicar Contracts +# laamp_base_6001 Protect the innocent +# laamp_base_6011 Rescue a Fair Non-Combatant Gender +# laamp_base_6021 Participate in a Chivalry Play +# laamp_base_6031 Do a Pass d'Armes +################################################## + + + + + + + + + + +################################################## +# DIPLO CONTRACTS + +# Regale court with stories +laamp_base_0001 = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that like to hear from strangers. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't have time for riff-raff. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_0001_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.0001 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Improve ruler's reputation +laamp_base_0011 = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits most likely to suffer from reputational damage generally. + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't acknowledge fault. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + scope:employer = { + # Doesn't feel right coming from anyone too famous, even if they're currently hated. + prestige_level <= high_prestige_level + OR = { + # Anyone who could use a little more political capital. + prestige <= 500 + # Or who's got a bit of a... reputation. + strife_opinion >= 1 + tyranny >= 1 + # And any important unlikeable characters in their realm that indicate they might be a bit of a prick. + any_relation = { + type = rival + liege ?= prev + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_0011_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.0011 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Hobnob with local ruler +laamp_base_0021 = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Actively sociable traits. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = humble } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't have time for riff-raff. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + scope:employer = { + NOR = { + any_relation = { type = friend } + any_relation = { type = lover } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_0021_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.0021 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Paid Mediator +laamp_base_0031 = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = no + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that like to outsource. + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that prefer a hand-on approach. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = greedy } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + scope:employer = { + AND = { + highest_held_title_tier >= tier_county + sub_realm_size >= 3 + } + NOR = { + has_trait = arrogant + has_trait = arbitrary + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { + trigger_event = laamp_base_contract_schemes.0034 + set_variable = { + name = laamp_base_0031_tally + value = 0 + } + } + } + on_completed = { + # Clean up our variables & such. + task_contract_taker = { + remove_variable ?= laamp_base_0031_tally + remove_character_flag = laamp_base_0031_contract_used_diplomacy + remove_character_flag = laamp_base_0031_contract_used_martial + remove_character_flag = laamp_base_0031_contract_used_stewardship + remove_character_flag = laamp_base_0031_contract_used_intrigue + remove_character_flag = laamp_base_0031_contract_used_learning + remove_character_flag = laamp_base_0031_contract_used_prowess + } + } + on_invalidated = { + # Clean up our variables & such. + task_contract_taker = { + remove_variable ?= laamp_base_0031_tally + remove_character_flag = laamp_base_0031_contract_used_diplomacy + remove_character_flag = laamp_base_0031_contract_used_martial + remove_character_flag = laamp_base_0031_contract_used_stewardship + remove_character_flag = laamp_base_0031_contract_used_intrigue + remove_character_flag = laamp_base_0031_contract_used_learning + remove_character_flag = laamp_base_0031_contract_used_prowess + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Confidence trickster +laamp_base_0041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Credulous traits. + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = honest } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that are naturally suspicious. + if = { + limit = { has_trait = cynical } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + ## Paranoid is already excluded from even vaguely triggering this. + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + scope:employer = { + NOT = { has_trait = paranoid } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_0041_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.0041 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + } +} + + + + + + + + + + +################################################## +# MARTIAL & PROWESS CONTRACTS + +# Hunt criminals +laamp_base_1001 = { + group = laamp_contracts_justicar_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that are happy to outsource or care largely for results. + if = { + limit = { has_trait = impatient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that prefer a personal touch. + if = { + limit = { has_trait = patient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + ## Won't resort to this. + laamp_task_contract_employer_would_resort_to_violence_trigger = yes + ## Effects require a capital county. + scope:employer.capital_county ?= { + # Aaaand we need to have at least three duchies in our de jure kingdom. + kingdom = { + any_in_de_jure_hierarchy = { + continue = { tier >= tier_duchy } + tier = tier_duchy + count >= 3 + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + # Specific flavour triggers. + ## Effects require a capital county. + exists = root.task_contract_employer.capital_county + ## Make sure that if we've got our recidivist, then they've not died at any time other than when they're _specifically_ allowed to. + OR = { + NOT = { has_variable = recidivist } + var:recidivist ?= { + OR = { + is_alive = yes + root = { has_variable = duel_engaged } + } + is_imprisoned = no + } + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.1004 } + # Track our score/encounters. + increment_variable_effect = { + VAR = encounters_tally + VAL = 0 + } + # & numbers of chars checked for loc. + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_major_gain + XP_MIN = knight_errant_xp_major_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_recruitment = { + positive = no + visible = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_critical_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + } + } + } + } +} + +# Act as hired muscle +laamp_base_1011 = { + group = laamp_contracts_hireling_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that want to be effective but subtle. + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that feel this type of manipulation is beneath them + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + ## Plus just some where the narrative would feel weird. + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + ## Won't resort to this. + laamp_task_contract_employer_would_resort_to_violence_trigger = yes + laamp_task_contract_employer_would_resort_to_deceit_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_1011_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.1011 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = var:gold_success_standard + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_medium_gain + XP_MIN = knight_errant_xp_medium_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_major_gain + XP_MIN = knight_errant_xp_major_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Ambush travellers +laamp_base_1041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that don't mind telegraphing weakness. + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = honest } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that wouldn't just admit something was wrong. + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + # Must be at least a count. + scope:employer.highest_held_title_tier >= tier_county + # Plus make sure we'd have a valid destination to even grab. + scope:employer.capital_county = { + # Counts travel two duchies over. + trigger_if = { + limit = { scope:employer.highest_held_title_tier = tier_county } + duchy = { + any_title_to_title_neighboring_duchy = { + any_title_to_title_neighboring_duchy = { + this != scope:employer.capital_county.duchy + } + } + } + } + # Dukes travel a kingdom over. + trigger_else_if = { + limit = { scope:employer.highest_held_title_tier = tier_duchy } + kingdom = { + any_title_to_title_neighboring_kingdom = { exists = this } + } + } + # Kings and emperors travel an empire over. + trigger_else = { + empire = { + any_title_to_title_neighboring_empire = { exists = this } + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.1044 } + # Plus, set up some variables for us. + ## Encounters list. + increment_variable_effect = { + VAR = encounters_tally + VAL = 0 + } + increment_variable_effect = { + VAR = encounters_max + VAL = 0 + } + ## Our actual haul. + increment_variable_effect = { + VAR = haul_actual + VAL = 0 + } + ## Path length + length:event ratio — we'll use these to determine how quickly we should get the events. + increment_variable_effect = { + VAR = path_length + VAL = 0 + } + increment_variable_effect = { + VAR = event_ratio + VAL = 0 + } + increment_variable_effect = { + VAR = event_ratio_tracker + VAL = 0 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + if = { + limit = { + NOT = { exists = scope:suppress_gold_warning } + } + custom_tooltip = laamp_base_1041.tt.gold_rewards_depend_on_travellers + } + else = { custom_tooltip = laamp_base_1041.tt.haul_actual } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + } +} + +# Go rustling +laamp_base_5031 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = laamp_contract_would_signpost_own_prosperity_value + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + scope:employer.sub_realm_size >= 2 + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + # Specific flavour triggers. + root.task_contract_employer.sub_realm_size >= 2 + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.5034 } + # Plus, set up some variables for us. + ## Progress tallies. + increment_variable_effect = { + VAR = encounter_tally + VAL = 0 + } + increment_variable_effect = { + VAR = encounter_max + VAL = 0 + } + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Critical Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = poacher + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + } + } + } + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = poacher + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = poacher + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } +} + +# Mug people. +laamp_base_5051 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + scope:employer.highest_held_title_tier >= tier_county + NOT = { scope:employer = { government_has_flag = government_is_herder } } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + NOT = { scope:employer = { government_has_flag = government_is_herder } } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + NOT = { scope:employer = { government_has_flag = government_is_herder } } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + NOT = { scope:employer = { government_has_flag = government_is_herder } } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_5051_contract_scheme + contract = root + target_character = scope:task_contract.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.5051 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + bandit_king_maa_spawn_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + bandit_king_maa_spawn_effect = yes + } + } + } + } +} + + + + + + + + + + + + +################################################## +# STEWARDSHIP CONTRACTS + +# Collect taxes for a third party +laamp_base_2001 = { + group = laamp_contracts_hireling_group + icon = "gfx/interface/icons/scheme_types/stewardship.dds" + + travel = no + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_stewardship_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that want their money and think you can get it. + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that either can wait or won't trust you. + if = { + limit = { has_trait = paranoid } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + laamp_task_contract_employer_would_chase_money_trigger = yes + # And we must have at least one mayor to act as the locus. + scope:employer = { + any_vassal = { laamp_base_2001_valid_mayor_trigger = yes } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + # Make sure our baron hasn't died. + var:person_a = { is_alive = yes } + # And that, in MP, our secondaries haven't died either. + OR = { + NOT = { has_variable = person_b } + var:person_b = { is_alive = yes } + } + OR = { + NOT = { has_variable = person_c } + var:person_b = { is_alive = yes } + } + OR = { + NOT = { has_variable = person_d } + var:person_b = { is_alive = yes } + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Grab our best possible baron. + scope:employer = { + ordered_vassal = { + limit = { laamp_base_2001_valid_mayor_trigger = yes } + order_by = { + value = ai_greed + add = { + value = ai_honor + multiply = -0.5 + } + # Weight down the capital if we can, as it feels weird to not go a city over. + if = { + limit = { primary_title.county.holder = scope:employer } + add = -1000 + } + } + save_scope_as = person_a + } + } + # Track this as a variable so that we can invalidate if they die. + set_variable = { + name = person_a + value = scope:person_a + } + # Plus our score. + increment_variable_effect = { + VAR = clues_gathered + VAL = 0 + } + # & numbers of chars checked for loc. + increment_variable_effect = { + VAR = chars_checked + VAL = 0 + } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.2004 } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = gold_success_qualified_reduced_tax + value = task_contract_taker.task_contract_success_gold_gain_third_value + } + set_variable = { + name = gold_success_qualified_insufficient_evidence + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = gold_success_qualified_beaten_down + value = task_contract_taker.task_contract_success_gold_gain_third_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Critical Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_massive_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_qualified_reduced_tax = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified_reduced_tax + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_reduced_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + success_qualified_insufficient_evidence = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified_insufficient_evidence + PRESTIGE = -200 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_qualified_beaten_down = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified_beaten_down + PRESTIGE = -200 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_reduced_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_critical = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = -300 + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_critical_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + } + } + } + failure_took_wrong_side = { + visible = no + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:yes } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Perform a census +laamp_base_2011 = { + group = laamp_contracts_stewardship_group + icon = "gfx/interface/icons/scheme_types/stewardship.dds" + + travel = no + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_stewardship_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that care especially for rules and documentation. + ### A.k.a: the good kind of designer. + if = { + limit = { has_trait = diligent } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't much care for paperwork, preferring vibes. + ### A.k.a: the bad kind of designer. + if = { + limit = { has_trait = lazy } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + scope:employer = { + domain_size >= 2 + } + # Specific flavour triggers. + scope:employer.laamp_base_2011_actual_surveyable_holdings_per_tier_value >= scope:employer.laamp_base_2011_desired_surveyable_holdings_per_tier_value + ## A census isn't necessarily about money but given the expense involved... yeah most of the time it is. + laamp_task_contract_employer_would_chase_money_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.2014 } + # Track our score. + increment_variable_effect = { + VAR = destinations_processed + VAL = 0 + } + # Plus our methods. + increment_variable_effect = { + VAR = destinations_processed_legit_success + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_quartermaster_success + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_lied_success + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_guessed_success + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_legit_failure + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_quartermaster_failure + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_lied_failure + VAL = 0 + } + increment_variable_effect = { + VAR = destinations_processed_guessed_failure + VAL = 0 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Critical Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_critical = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = -300 + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_critical_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + } + } + } + } +} + +# Help construct a building +laamp_base_2021 = { + group = laamp_contracts_stewardship_group + icon = "gfx/interface/icons/scheme_types/stewardship.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_stewardship_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that want fresh buildings but aren't great at organising such. + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that do well at construction. + if = { + limit = { has_trait = generous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + scope:employer = { + NOR = { + has_trait = architect + stewardship >= high_skill_rating + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_2021_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.2021 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Critical Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Settle a local dispute +laamp_base_2031 = { + group = laamp_contracts_stewardship_group + icon = "gfx/interface/icons/scheme_types/stewardship.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_stewardship_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that are likely to run into these kinds of political troubles but not super able to deal with them. + if = { + limit = { has_trait = honest } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that would avoid or swiftly resolve the issue. + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + # Don't weight down barons like we usually would, because we _only_ want barons here. + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # This time around we're dealing with minor disputes, so we only want barons. + scope:employer.highest_held_title_tier = tier_barony + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we roll our first event.. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.2035 } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = success_camp_purpose + value = task_contract_success_gold_gain_half_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + set_variable = { + name = success_sacked_settlement + value = task_contract_success_gold_gain_critical_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Critical Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_camp_purpose = { + should_print_on_complete = yes + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:success_camp_purpose + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_sacked_settlement = { + should_print_on_complete = yes + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:success_sacked_settlement + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + bandit_king_maa_spawn_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Collect fake taxes +laamp_base_2041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/stewardship.dds" + + travel = no + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_stewardship_value + add = laamp_contracts_weight_up_criminal_massive_value + # Employer weights. + scope:employer = { + add = laamp_contract_would_signpost_own_prosperity_value + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + scope:employer.sub_realm_size >= laamp_base_2041_num_counties_to_rob_value + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.2044 } + # Plus, set up some variables for us. + ## Progress tallies. + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + increment_variable_effect = { + VAR = losses_tally + VAL = 0 + } + ## Victory tiers. + save_scope_value_as = { + name = win_t1_threshold + value = { + value = scope:employer.laamp_base_2041_num_counties_to_rob_sans_capital_value + divide = 3 + floor = yes + } + } + increment_variable_effect = { + VAR = win_t1_threshold + VAL = scope:win_t1_threshold + } + save_scope_value_as = { + name = win_t2_threshold + value = { + value = scope:employer.laamp_base_2041_num_counties_to_rob_sans_capital_value + divide = 3 + multiply = 2 + floor = yes + } + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = scope:win_t2_threshold + } + increment_variable_effect = { + VAR = win_t3_threshold + VAL = scope:employer.laamp_base_2041_num_counties_to_rob_sans_capital_value + } + ## Roll difficulties. + increment_variable_effect = { + VAR = stewardship_diff + VAL = 10 + } + increment_variable_effect = { + VAR = intrigue_diff + VAL = 10 + } + increment_variable_effect = { + VAR = bard_diff + VAL = 0 + } + increment_variable_effect = { + VAR = stress_charge + VAL = 20 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + set_variable = { + name = gold_success_qualified + value = task_contract_taker.task_contract_success_gold_gain_half_crime_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + } + } + } + success_qualified = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + failure_qualified = { + positive = no + should_print_on_complete = yes + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_backed_down_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + } +} + + + + + + + + + + + +################################################## +# INTRIGUE CONTRACTS + +# Provide intelligence from your trips +laamp_base_3001 = { + group = laamp_contracts_intrigue_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that value foreign intelligence. + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't care for espionage. + if = { + limit = { has_trait = honest } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + scope:employer = { + highest_held_title_tier >= tier_county + OR = { + any_neighboring_and_across_water_realm_same_rank_owner = { + count >= 3 + laamp_base_3001_valid_neighbours_trigger = { EMPLOYER = scope:employer } + } + AND = { + highest_held_title_tier >= tier_empire + any_neighboring_and_across_water_top_liege_realm_owner = { + count >= 3 + highest_held_title_tier >= tier_kingdom + laamp_base_3001_valid_neighbours_trigger = { EMPLOYER = scope:employer } + } + } + } + } + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.3004 } + # Plus, set up a tracking variable for us. + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + set_variable = { + name = gold_success_qualified + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_qualified = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Murder a character's rival +laamp_base_3011 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that want someone killed and don't much care how. + if = { + limit = { has_trait = wrathful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that won't hire thugs to solve their problems just on principle. + if = { + limit = { has_trait = calm } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_would_resort_to_violence_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Now, nab us a suitable target. + task_contract_employer = { laamp_contract_grab_suitable_rival_for_disposal_effect = yes } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_3011_contract_scheme + contract = root + target_character = root.var:target + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.3011 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 1 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + bandit_king_maa_spawn_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + bandit_king_maa_spawn_effect = yes + } + } + } + } +} + +# Abduct a character's rival +laamp_base_3021 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that like a personal touch in the ol' donjon. + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = wrathful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that prefer efficiency. + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_would_resort_to_violence_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Now, nab us a suitable target. + task_contract_employer = { laamp_contract_grab_suitable_rival_for_disposal_effect = yes } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_3021_contract_scheme + contract = root + target_character = root.var:target + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.3021 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 1 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + bandit_king_maa_spawn_effect = yes + } + + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + } + } + } +} + +# Attack the property of a character's rival +laamp_base_3031 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that like a subtle, yet violent, touch. + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + ### Ok emphasising "violent" over "subtle" here. + if = { + limit = { has_trait = wrathful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that prefer bluntness or honesty. + if = { + limit = { has_trait = honest } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = calm } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + laamp_task_contract_employer_would_resort_to_violence_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Now, nab us a suitable target. + task_contract_employer = { laamp_contract_grab_suitable_rival_for_disposal_effect = yes } + # Save a scope that stops us getting double gallowsbait XP later on. + save_scope_value_as = { + name = suppress_gallowsbait + value = yes + } + # Then we start the chainlet. + task_contract_taker ?= { trigger_event = laamp_base_contract_schemes.3034 } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 1 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update gallowsbait score. + task_contract_taker = { + if = { + limit = { + NOT = { exists = scope:suppress_gallowsbait } + } + # Wrapped like this because, even with the scope definitely present, it was somehow slipping the net & applying anyway. + show_as_tooltip = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + bandit_king_maa_spawn_effect = yes + } + + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + if = { + limit = { + NOT = { exists = scope:suppress_gallowsbait } + } + # Wrapped like this because, even with the scope definitely present, it was somehow slipping the net & applying anyway. + show_as_tooltip = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } + } + failure_qualified = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_half_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Heist from a ruler's treasury +laamp_base_3041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = laamp_contract_would_signpost_own_prosperity_value + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_3041_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.3041 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + bandit_king_maa_spawn_effect = yes + } + custom_tooltip = laamp_base_3041.tt.chance_for_more + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } +} + + + + + + + + + + + +################################################## +# LEARNING CONTRACTS + +# Transcribe texts for a learned ruler +laamp_base_4001 = { + group = laamp_contracts_learning_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that appreciate works of learning. + if = { + limit = { has_trait = scholar } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = theologian } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't support these gorramned NERDS. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = athletic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_qualified + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For easy access + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Trigger the first education event + task_contract_taker ?= { trigger_event = laamp_base_learning_contract_events.4001 } + # Plus, set up some variables for us. + ## Progress tallies. + increment_variable_effect = { + VAR = score_tally + VAL = 0 + } + increment_variable_effect = { + VAR = text_passages_left + VAL = 3 + } + ### Victory tiers. + increment_variable_effect = { + VAR = win_t1_threshold + VAL = 3 #You smooch by on the standard answer + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = 7 #You use your language/traits twice and also have a successful embellishment + } + increment_variable_effect = { + VAR = win_t3_threshold + VAL = 9 #All three embellishments are successful :yeslikethis: + } + } + + # Rewards + task_contract_reward = { + success_qualified = { + should_print_on_complete = yes + effect = { + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_reduced_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_piety_gain_half_value + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = task_contract_success_piety_gain_full_value + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +#Help settle theological arguments +laamp_base_4011 = { + group = laamp_contracts_learning_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = no + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that would happily delegate a debate. + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that would leap into a debate wholesale. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + scope:employer = { + NOR = { + government_has_flag = government_is_tribal + faith = { has_doctrine_parameter = unreformed } + has_trait = cynical + } + AND = { + highest_held_title_tier >= tier_duchy + any_sub_realm_barony = { + title_province = { has_holding = yes } + this != scope:employer.capital_barony + count >= 3 + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For easy access + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + #Set this up here to calculate win thresholds + scope:employer = { + add_character_flag = is_in_task_contract_event_chain + ordered_sub_realm_barony = { + limit = { + title_province = { has_holding = yes } + this != scope:employer.capital_barony + } + order_by = { + value = county_opinion + multiply = -1 + } + max = 5 + check_range_bounds = no + add_to_list = destination_baronies_list + } + scope:employer.capital_province = { save_scope_as = employer_location_destination } + ordered_in_list = { + list = destination_baronies_list + order_by = "squared_distance(prev.capital_province)" + max = 5 + check_range_bounds = no + if = { + limit = { + NOT = { exists = scope:destination_1 } + } + save_scope_as = destination_1 + } + else_if = { + limit = { + NOT = { + this = scope:destination_1 + exists = scope:destination_2 + } + } + save_scope_as = destination_2 + } + else_if = { + limit = { + NOT = { + this = scope:destination_1 + this = scope:destination_2 + exists = scope:destination_3 + } + } + save_scope_as = destination_3 + } + else_if = { + limit = { + NOT = { + this = scope:destination_1 + this = scope:destination_2 + this = scope:destination_3 + exists = scope:destination_4 + } + } + save_scope_as = destination_4 + } + else_if = { + limit = { + NOT = { + this = scope:destination_1 + this = scope:destination_2 + this = scope:destination_3 + this = scope:destination_4 + exists = scope:destination_5 + } + } + save_scope_as = destination_5 + } + } + } + # Plus, set up some variables for us. + ## Progress tallies. + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + increment_variable_effect = { + VAR = encounter_tally + VAL = 0 + } + ### Victory tiers. + if = { + limit = { exists = scope:destination_5 } + increment_variable_effect = { + VAR = win_t1_threshold + VAL = 2 + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = 4 + } + increment_variable_effect = { + VAR = win_t3_threshold + VAL = 5 + } + } + else_if = { + limit = { exists = scope:destination_4 } + increment_variable_effect = { + VAR = win_t1_threshold + VAL = 1 + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = 2 + } + increment_variable_effect = { + VAR = win_t3_threshold + VAL = 4 + } + } + else = { + increment_variable_effect = { + VAR = win_t1_threshold + VAL = 1 + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = 2 + } + increment_variable_effect = { + VAR = win_t3_threshold + VAL = 3 + } + } + increment_variable_effect = { + VAR = opportunities_left_tally + VAL = var:win_t3_threshold + } + # Then we start the travel. + task_contract_taker ?= { trigger_event = laamp_base_learning_contract_events.4011 } + } + on_invalidated = { + task_contract_employer = { remove_character_flag = is_in_task_contract_event_chain } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_qualified + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + # Rewards + task_contract_reward = { + success_qualified = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_piety_gain_half_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_reduced_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_employer = { remove_character_flag = is_in_task_contract_event_chain } + } + } + success_standard = { + should_print_on_complete = yes + effect = { + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = task_contract_success_piety_gain_full_value + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_employer = { remove_character_flag = is_in_task_contract_event_chain } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = task_contract_success_piety_gain_critical_value + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_employer = { remove_character_flag = is_in_task_contract_event_chain } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = task_contract_failure_piety_loss_full_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_employer = { remove_character_flag = is_in_task_contract_event_chain } + } + } + } +} + +# Create a work of learning for a ruler +laamp_base_4021 = { + group = laamp_contracts_learning_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that appreciate works of learning. + if = { + limit = { has_trait = scholar } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = theologian } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't support these gorramned NERDS. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = athletic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + #You really shouldn't have terrible Learning + root.learning >= average_skill_level + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For easy access + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # How many chapters do you want to write? + task_contract_taker ?= { trigger_event = laamp_base_learning_contract_events.4021 } + #We set up the variables in the intro event + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_qualified + value = task_contract_taker.task_contract_success_gold_gain_half_value + } + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_qualified = { + should_print_on_complete = yes + effect = { + # Camp building extra Stewardship Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_stewardship_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + # Standard Reward. + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_qualified + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_reduced_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_piety_gain_half_value + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = task_contract_success_piety_gain_half_value + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = task_contract_failure_piety_loss_full_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Solicit Charity +laamp_base_4031 = { + group = laamp_contracts_learning_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that take pity on passers by. + if = { + limit = { has_trait = generous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = compassionate } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = improvident } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = profligate } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't give a damn about wanderers (or who it would look a bit weird for). + if = { + limit = { has_trait = greedy } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = sadistic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_4031_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.4031 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = 0 + PIETY = task_contract_success_piety_gain_half_value + PROVISIONS = task_contract_success_provisions_gain_massive_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = task_contract_failure_piety_loss_full_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Sell bogus relics +laamp_base_4041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that make you gullible, or at least more vulnerable to scam artistry. + if = { + limit = { has_trait = trusting } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that make you naturally suspicious. + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + scope:employer = { + NOR = { + government_has_flag = government_is_tribal + faith = { has_doctrine_parameter = unreformed } + } + } + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_4041_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.4041 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_crime_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Learning/Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { + OR = { + has_domicile_parameter = camp_improved_learning_contract_rewards + has_domicile_parameter = camp_improved_criminal_contract_rewards + } + } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = task_contract_failure_piety_loss_full_value + PROVISIONS = 0 + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = trickster + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } +} + +#Act as a tutor for ruler's child +laamp_base_4100 = { + group = laamp_contracts_learning_group + icon = "gfx/interface/icons/scheme_types/learning.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_learning_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that appreciate works of learning. + if = { + limit = { has_trait = scholar } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = theologian } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = eccentric } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = patient } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't support these gorramned NERDS. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = impatient } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = athletic } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + any_courtier = { + age >= 6 + age < 15 #Give us a year to complete the contract + is_available = yes + location = scope:employer.location + } + } + } + + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + root.var:task_contract_target = { age < 15 } + #Since the kid is saved as the target; we automatically invalidate if kid becomes unavailable, right? + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + random_courtier = { + limit = { + age >= 6 + age < 15 #Give us a year to complete the contract + is_available = yes + location = prev.location #The employer's location + } + weight = { + base = 1 + #Prioritize relevant children + modifier = { + add = 10 + is_primary_heir_of = scope:task_contract.task_contract_employer + } + modifier = { + add = 5 + trigger_if = { + limit = { + scope:task_contract.task_contract_employer = { has_realm_law = female_only_law } + } + is_female = yes + } + trigger_else = { always = no } + } + modifier = { + add = 5 + trigger_if = { + limit = { + scope:task_contract.task_contract_employer = { has_realm_law = male_only_law } + } + is_male = yes + } + trigger_else = { always = no } + } + } + save_scope_as = task_contract_target + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + # On_actions + on_accepted = { + # For easy access + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + task_contract_target = { save_scope_as = child_to_educate } + # Trigger the first education event + task_contract_taker ?= { trigger_event = laamp_base_learning_contract_events.4100 } + # Plus, set up some variables for us. + ## Progress tallies. + increment_variable_effect = { + VAR = wins_tally + VAL = 0 + } + increment_variable_effect = { + VAR = educational_moments_left + VAL = 3 + } + ### Victory tiers. + increment_variable_effect = { + VAR = win_t1_threshold + VAL = 2 + } + increment_variable_effect = { + VAR = win_t2_threshold + VAL = 3 + } + ## Roll difficulties. + increment_variable_effect = { + VAR = learning_diff + VAL = 10 + } + increment_variable_effect = { + VAR = topic_diff + VAL = 10 + } + increment_variable_effect = { + VAR = support_person_diff + VAL = 5 + } + increment_variable_effect = { + VAR = stress_charge + VAL = 20 + } + } + + on_invalidated = { + task_contract_taker = { + remove_character_flag = is_in_task_contract_event_chain + } + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_base_4100 + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + # Rewards + task_contract_reward = { + #Need at least 2 successful teaching moments + success_standard = { + should_print_on_complete = yes + effect = { + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + # Camp building extra Learning Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_learning_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_critical_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + + + + + + + + + + + +################################################## +# JUSTICAR CONTRACTS + +# Protect the innocent +laamp_base_6001 = { + group = laamp_contracts_justicar_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that value prosperity in their subjects. + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = generous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = humble } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = avaricious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that won't do favours for some grubby merchant. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_6001_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.6001 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_taker = { + # Update gallowsbait score. + lower_gallowsbait_xp_effect = { VALUE = -5 } + # Update Knight-Errant score. + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_taker = { + # Update gallowsbait score. + lower_gallowsbait_xp_effect = { VALUE = -10 } + # Update Knight-Errant score. + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_medium_gain + XP_MIN = knight_errant_xp_medium_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Rescue a Fair Non-Combatant Gender +laamp_base_6011 = { + group = laamp_contracts_justicar_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + if = { + limit = { has_trait = gallant } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + + # Weight down + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + scope:employer.capital_province = { is_wooded_trigger = yes } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_6011_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.6011 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_provisions_gain_minor_value + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_taker = { + # Update gallowsbait score. + lower_gallowsbait_xp_effect = { VALUE = -5 } + # Update Knight-Errant score. + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Participate in a Chivalry Play +laamp_base_6021 = { + group = laamp_contracts_justicar_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_diplomacy_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + if = { + limit = { has_trait = gallant } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lifestyle_reveler } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + + # Weight down + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_6021_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.6021 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_taker = { + # Update Knight-Errant score. + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Do a Pass d'Armes +laamp_base_6031 = { + group = laamp_contracts_justicar_group + icon = "gfx/interface/icons/scheme_types/martial.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + if = { + limit = { has_trait = gallant } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + task_contract_employer = { save_scope_as = employer } + # Then we start the scheme. + task_contract_taker ?= { + start_scheme = { + type = laamp_base_6031_contract_scheme + contract = root + target_character = root.task_contract_employer + } + # Make a note of what the scheme even is; we'll need this for the event too. + scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.6031 + } + } + on_create = { + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + task_contract_taker = { + # Update gallowsbait score. + lower_gallowsbait_xp_effect = { VALUE = -10 } + # Update Knight-Errant score. + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + + + + + + + + + + + +################################################## +# DEPRECATED CONTRACTS + +# Help train local MaA +laamp_base_1021 = { + group = laamp_contracts_martial_group + icon = "gfx/interface/icons/scheme_types/martial.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that believe in readiness for war. + if = { + limit = { has_trait = brave } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = wrathful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that don't think they gain anything from this. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_1021_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.1021 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_massive_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_medium_gain + XP_MIN = knight_errant_xp_medium_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Garrison service +laamp_base_1031 = { + group = laamp_contracts_hireling_group + icon = "gfx/interface/icons/scheme_types/martial.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that care about defence. + ### We don't check paranoid because they're already filtered out due to this being relative strangers. + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that think their defences are definitely fiiiiiine. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = trusting } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_1031_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.1031 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_massive_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Hunt in the wilds +laamp_base_5001 = { + group = laamp_contracts_hunting_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that hate being outdoors. + if = { + limit = { has_trait = shy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = lazy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = craven } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that love being outside. + if = { + limit = { has_trait = gregarious } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = diligent } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + # Specific flavour triggers. + scope:employer = { + NOR = { + has_trait = lifestyle_hunter + has_trait = athletic + has_trait = brave + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_5001_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.5001 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Counts towards Knight of the Swan + task_contract_taker = { + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_massive_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Counts towards Knight of the Swan + task_contract_taker = { + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Guard merchant properties +laamp_base_5011 = { + group = laamp_contracts_hireling_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that value prosperity in their subjects. + if = { + limit = { has_trait = greedy } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = generous } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = humble } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = avaricious } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that won't do favours for some grubby merchant. + if = { + limit = { has_trait = arrogant } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = callous } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_5011_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.5011 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_medium_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_minor_gain + XP_MIN = knight_errant_xp_minor_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + success_critical = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Critical Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_medium_gain + XP_MIN = knight_errant_xp_medium_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Guard a local ruler at a minor event +laamp_base_5021 = { + group = laamp_contracts_hireling_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + # Employer weights. + scope:employer = { + add = { + # Weight up. + ## Traits that suspect treason: either because they're paranoid or as a self-report. + if = { + limit = { has_trait = paranoid } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = deceitful } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = arbitrary } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = fickle } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = disloyal } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + # Weight down. + ## Traits that think loyalty is unshakeable. + if = { + limit = { has_trait = trusting } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = honest } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = just } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = stubborn } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + if = { + limit = { has_trait = loyal } + add = task_contract_weight_malus_employer_has_associated_traits_value + } + # Restrictions. + min = task_contract_weight_employer_associated_traits_min_value + max = task_contract_weight_employer_associated_traits_max_value + } + multiply = task_contract_weight_by_tier_value + # This weight is an override, so make sure it's placed at the bottom. + add = task_contract_weight_employer_contact_list_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + # Specific flavour triggers. + OR = { + laamp_task_contract_employer_not_antisocial_trigger = yes + # Grant an exception to the paranoid antisocialness here: narratively, it's presented like their paranoia of their guards overwhelms their paranoia of you. + has_trait = paranoid + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_5021_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.5021 + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_full_value + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { task_successful_noncrim_contract_count_effect = yes } + # Update Knight-Errant score. + task_contract_taker = { + laamp_rewards_apply_knight_errant_xp_effect = { + XP_MAX = knight_errant_xp_medium_gain + XP_MIN = knight_errant_xp_medium_gain + } + task_contract_justicar_contract_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Go poaching +laamp_base_5041 = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/scheme_types/war.dds" + + travel = yes + is_criminal = yes + use_diplomatic_range = no + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_prowess_value + add = laamp_contracts_weight_up_criminal_value + # Employer weights. + scope:employer = { + add = laamp_contract_would_signpost_own_prosperity_value + multiply = task_contract_weight_by_tier_value + } + } + + # Validity Triggers + valid_to_create = { + always = no + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + rule_out_dramatic_laamp_employers_trigger = yes + NOT = { + scope:employer = { government_has_flag = government_is_tribal } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + scope:employer = { is_landed = yes } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + root.task_contract_taker = { + NOT = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + task_contract_employer = { is_landed = yes } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + task_contract_employer = { is_landed = yes } + } + + # On_actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + # For the intro event. + save_scope_as = task_contract + # Then we start the scheme. + task_contract_taker ?= { + #start_scheme = { + # type = laamp_base_5041_contract_scheme + # contract = root + # target_character = root.task_contract_employer + #} + # Make a note of what the scheme even is; we'll need this for the event too. + #scope:task_contract.scheme = { save_scope_as = scheme } + trigger_event = laamp_base_contract_schemes.5041 + } + } + on_create = { + scope:contract = { + set_variable = { + name = animation + value = 0 + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + # Camp building extra Criminal Rewards: +50%. + if = { + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { + save_scope_value_as = { name = extra_reward value = flag:no } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = task_contract_success_gold_gain_crime_value + PRESTIGE = 0 + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_crime_success_value + OPINION_TYPE = succeeded_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = poacher + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + should_print_on_complete = yes + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_crime_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_crime_failure_value + OPINION_TYPE = attempted_criminal_contract_against_me_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + # Update gallowsbait score. + task_contract_taker = { + laamp_rewards_apply_criminal_xp_effect = { + TRACK = poacher + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } +} diff --git a/common/task_contracts/laamp_extra_contracts.txt b/common/task_contracts/laamp_extra_contracts.txt new file mode 100644 index 00000000..0244931a --- /dev/null +++ b/common/task_contracts/laamp_extra_contracts.txt @@ -0,0 +1,5574 @@ +################################################## +# INFO +# Extra contracts for laamps. Various types of contracts with interesting things to get and do, like wars, travel, artifacts and more. +# +################################################## + + + +################################################## +# GROUPS (for populate_task_contracts_for_area) +# +# laamp_contracts_war_group +# laamp_contracts_criminal_group +# laamp_contracts_transport_group +# laamp_contracts_diplomacy_group +# laamp_contracts_intrigue_group +# +# +# NOTICEBOARD GROUPS (for Visit Settlement - ep3_laamp_decision_event.1025) +# laamp_contracts_noticeboard_group +# + + + +################################################## +# +# laamp_raid_contract - Raid for Captives +# laamp_join_war_contract - Stand with Us +# laamp_help_claimant_contract - Press My Claims +# laamp_steal_artifact_contract - Reclaim Artifact +# laamp_construction_contract - Construction Work +# laamp_treasure_hunting_contract - Treasure Hunting +# laamp_cultural_minority_contract - Protect Heritage +# laamp_religious_minority_contract - Reward the Faithful +# laamp_prison_break_contract - Prison Break +# laamp_treasure_map_contract - Treasure Map +# laamp_legitimist_support_contract +# laamp_join_faction_contract - Support Faction +# laamp_help_faith_conversion_contract - Missionary Duties +# laamp_fight_faith_conversion_contract - Protect the Adherents +# laamp_help_train_commanders_contract - Knight's Coach +# laamp_help_find_secrets_contract - Private Eye +# laamp_help_fabricate_claim_contract - Forgotten Claims +# laamp_help_increase_control_contract - Fight Corruption +# +################################################## + +## Raid for Captives +# scope:employer = ruler wanting to capture prisoners +# task_contract_target = character to declare war on +# task_contract_destination = capital of task_contract_target +laamp_raid_contract = { + group = laamp_contracts_war_group + icon = "gfx/interface/icons/casus_bellis/request_mercenary.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + OR = { + any_relation = { + type = rival + is_ai = yes + is_adult = yes + is_landed = yes + capital_province.building_max_garrison < root.current_military_strength + is_within_diplo_range = { CHARACTER = scope:employer } + any_courtier_or_guest = { + count >= 3 + OR = { + AND = { + has_dynasty = yes + dynasty = prev.dynasty + } + is_consort_of = prev + } + } + } + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + is_landed = yes + capital_province.building_max_garrison < root.current_military_strength + house_has_feud_relation_with_trigger = { TARGET = scope:employer } + any_courtier_or_guest = { + count >= 3 + OR = { + AND = { + has_dynasty = yes + dynasty = prev.dynasty + } + is_consort_of = prev + } + } + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_mercenary_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + if = { + limit = { + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + is_landed = yes + capital_province.building_max_garrison < root.current_military_strength + house_has_feud_relation_with_trigger = { TARGET = scope:task_contract_employer } + any_courtier_or_guest = { + count >= 3 + OR = { + AND = { + has_dynasty = yes + dynasty = prev.dynasty + } + is_consort_of = prev + } + } + } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + is_landed = yes + capital_province.building_max_garrison < root.current_military_strength + house_has_feud_relation_with_trigger = { TARGET = scope:task_contract_employer } + any_courtier_or_guest = { + count >= 3 + OR = { + AND = { + has_dynasty = yes + dynasty = prev.dynasty + } + is_consort_of = prev + } + } + } + save_scope_as = task_contract_target + capital_province = { + save_scope_as = task_contract_destination + } + } + } + else = { + random_relation = { + type = rival + limit = { + is_ai = yes + is_adult = yes + is_landed = yes + capital_province.building_max_garrison < root.current_military_strength + is_within_diplo_range = { CHARACTER = scope:task_contract_employer } + any_courtier_or_guest = { + count >= 3 + OR = { + AND = { + has_dynasty = yes + dynasty = prev.dynasty + } + is_consort_of = prev + } + } + } + save_scope_as = task_contract_target + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + } + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0003 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_raid_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + scope:task_contract.var:task_contract_employer = { + save_scope_as = task_contract_employer + } + #saving scopes for custom tooltip + save_scope_as = attacker + scope:task_contract.var:task_contract_target = { + save_scope_as = defender + } + custom_tooltip = ep3_laamp_raid_contract_cb_prisoners.tt_attacker + custom_tooltip = ep3_laamp_raid_contract_cb_prisoners.tt_gold + trigger_event = ep3_contract_event.0004 + show_as_tooltip = { + if = { + limit = { + faith != scope:defender.faith + } + add_piety = minor_piety_gain + } + } + # Huck 'em into our contact list. + add_contact = scope:task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract_employer + TYPE = contact_list_weak_hook + } + war_contracts_completed_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + scope:task_contract.task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_outcome + value = flag:failure + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + trigger_event = ep3_contract_event.0004 + } + show_as_tooltip = { + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + opinion = -50 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + } + } + } + } + } +} + +## Stand with Us +# scope:employer = ruler needing help in a civil/religious/de_hure war +# scope:task_contract_war = civil/religious/de_hure war to join on the side of employer +laamp_join_war_contract = { + group = laamp_contracts_war_group + icon = "gfx/interface/icons/trait_level_tracks/mercenary.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + # Specific flavour triggers. + scope:employer = { + any_character_war = { + ep3_adventurer_mercenary_war_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + save_temporary_scope_as = temp_war + } + } + #don't spawn contracts for the same wars + NOT = { + any_character_task_contract = { + task_contract_type = laamp_join_war_contract + var:task_contract_war ?= scope:temp_war + } + } + #or if you are already an ally in a war with someone in that war, to prevent being an ally and an enemy at the same time + scope:temp_war = { + any_war_participant = { + NOT = { + is_allied_in_war = root + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + custom_tooltip = { + text = laamp_join_war_contract.valid_war + any_character_task_contract = { + task_contract_type = laamp_join_war_contract + exists = var:task_contract_war + task_contract_employer = scope:employer + } + } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + exists = root.var:task_contract_war + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_very_rare_value + add = laamp_contracts_weight_up_mercenary_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + random_character_war = { + limit = { + is_war_leader = prev + OR = { + using_civil_war_cb_trigger = yes + using_non_ghw_holy_war_cb_trigger = yes + using_de_jure_cb_trigger = yes + using_conquest_cb_trigger = yes + } + any_war_participant = { + this != scope:task_contract.task_contract_taker + } + } + save_scope_as = task_contract_war + } + save_scope_as = task_contract_employer + } + set_variable = { + name = task_contract_war + value = scope:task_contract_war + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + scope:task_contract_war = { + if = { + limit = { + is_attacker = scope:task_contract_employer + } + primary_defender = { + save_scope_as = task_contract_target + } + } + else = { + primary_attacker = { + save_scope_as = task_contract_target + } + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0008 + } + set_variable = { + name = task_contract_grace_period + days = 90 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_join_war_contract + } + } + + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + var:task_contract_war = { + save_scope_as = war + } + task_contract_employer = { + save_scope_as = task_contract_employer + save_scope_as = attacker + } + task_contract_taker = { + save_scope_as = task_contract_taker + save_scope_as = defender + custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold + if = { + limit = { + faith != scope:task_contract.var:task_contract_target.faith + } + custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety + } + save_scope_value_as = { + name = task_contract_reward + value = flag:success_standard + } + save_scope_value_as = { + name = war_contribution_value + value = "scope:war.war_contribution(scope:task_contract_taker)" + } + if = { + limit = { + exists = scope:task_contract_employer.var:valuable_prisoners + } + save_scope_value_as = { + name = war_valuable_prisoners + value = scope:task_contract_employer.var:valuable_prisoners + } + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + trigger_event = ep3_contract_event.0013 + # Huck 'em into our contact list. + add_contact = scope:task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract_employer + TYPE = contact_list_weak_hook + } + war_contracts_completed_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + if = { + limit = { + NOT = { has_variable = task_contract_grace_period } + } + save_scope_as = task_contract + var:task_contract_war = { + save_scope_as = war + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + save_scope_value_as = { + name = task_contract_reward + value = flag:failure_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + trigger_event = ep3_contract_event.0013 + } + } + } + } + } +} + +## Help Legitimate claim +# scope:employer = ruler with a valid claim +# task_contract_target = character to declare war on +# task_contract_destination = capital of task_contract_target +laamp_help_claimant_contract = { + group = laamp_contracts_war_group + icon = "gfx/interface/icons/casus_bellis/claim_cb.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + is_at_war = no + NAND = { + government_allows = administrative + liege = { government_allows = administrative } + } + liege = { has_realm_law_flag = vassal_all_wars_banned } + NOT = { + vassal_contract_has_flag = vassal_contract_war_override + } + any_claim = { + holder ?= { + NOT = { is_allied_to = scope:employer } + NOT = { any_liege_or_above = { this = scope:employer } } + scope:employer = { + has_cb_on = { + target = prev + cb = claim_cb + } + } + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_mercenary_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_claim = { + limit = { + holder ?= { + NOT = { is_allied_to = root } + NOT = { any_liege_or_above = { this = root } } + scope:task_contract_employer = { + has_cb_on = { + target = prev + cb = claim_cb + } + } + } + } + save_scope_as = task_contract_title + holder = { + save_scope_as = task_contract_target + } + } + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_title + value = scope:task_contract_title + } + } + } + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0060 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_claimant_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + var:task_contract_title = { + save_scope_as = task_contract_title + } + task_contract_employer = { + save_scope_as = task_contract_employer + save_scope_as = attacker + show_as_tooltip = { + get_title = scope:task_contract_title + } + } + task_contract_taker = { + save_scope_as = task_contract_taker + save_scope_as = defender + custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold + if = { + limit = { + faith != scope:task_contract.var:task_contract_target.faith + } + custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety + } + save_scope_value_as = { + name = task_contract_reward + value = flag:success_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + trigger_event = ep3_contract_event.0013 + # Huck 'em into our contact list. + add_contact = scope:task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract_employer + TYPE = contact_list_weak_hook + } + war_contracts_completed_tracker_effect = yes + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + var:task_contract_title = { + save_scope_as = task_contract_title + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + save_scope_value_as = { + name = task_contract_reward + value = flag:failure_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + trigger_event = ep3_contract_event.0013 + } + } + } + } +} + +## Reclaim Artifact +# scope:employer = ruler wanting to steal an artifact +# task_contract_target = character to steal an artifact from +# task_contract_object = an artifact to steal +laamp_steal_artifact_contract = { + group = laamp_contracts_criminal_group + icon = "gfx/interface/icons/character_interactions/icon_scheme_steal_back_artifact.dds" + travel = yes + use_diplomatic_range = no + is_criminal = yes + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + OR = { + #target any artifact you have a claim on + any_claimed_artifact = { + artifact_owner = { + is_within_diplo_range = { CHARACTER = root } + } + } + #or if you are greedy target at least a masterwork artifact of someone that is up to 1 tier above you + AND = { + ai_greed >= 50 + any_neighboring_top_liege_realm_owner = { + highest_held_title_tier <= { + value = scope:employer.highest_held_title_tier + add = 1 + } + any_character_artifact = { + artifact_high_rarity_trigger = yes + } + } + } + } + } + } + + valid_to_keep = { + exists = root.var:task_contract_object + root.var:task_contract_object = { + artifact_owner != root.task_contract_employer + } + task_contract_target = { + NOT = { + has_opinion_modifier = { + target = root.task_contract_taker + modifier = stole_artifact_from_me + } + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + exists = root.var:task_contract_object + root.var:task_contract_object = { + artifact_owner != root.task_contract_employer + } + task_contract_target = { + NOT = { + has_opinion_modifier = { + target = root.task_contract_taker + modifier = stole_artifact_from_me + } + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_quite_rare_value + add = laamp_contracts_weight_up_intrigue_value + if = { + limit = { + employs_court_position = master_thief_camp_officer + } + add = 50 + } + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + if = { + limit = { + any_claimed_artifact = { + artifact_owner = { + is_within_diplo_range = { CHARACTER = scope:task_contract.task_contract_taker } + } + save_temporary_scope_as = claimed_artifact + } + } + scope:claimed_artifact = { + save_scope_as = task_contract_object + artifact_owner = { + save_scope_as = task_contract_target + } + } + } + else = { + random_neighboring_top_liege_realm_owner = { + limit = { + highest_held_title_tier <= { + value = scope:task_contract.task_contract_employer.highest_held_title_tier + add = 1 + } + any_character_artifact = { + artifact_high_rarity_trigger = yes + save_temporary_scope_as = claimed_artifact + } + } + scope:claimed_artifact = { + save_scope_as = task_contract_object + } + save_scope_as = task_contract_target + } + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_object + value = scope:task_contract_object + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0009 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_steal_artifact_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + var:task_contract_object = { + save_scope_as = task_contract_object + } + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + root = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + # Update gallowsbait score. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + hidden_effect = { + scope:task_contract_object = { + set_owner = scope:task_contract.task_contract_employer + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { + # Update gallowsbait score. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + } + } + } + } +} + +## Construction Work +# scope:employer = ruler wanting to build a holding +# task_contract_destination = province where the holding is being built +laamp_construction_contract = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/vassal_stances/builder.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + NOT = { government_has_flag = government_is_tribal } + any_held_title = { + county_has_empty_province_trigger = yes + } + short_term_gold > main_building_tier_1_cost + OR = { + has_trait = architect + AND = { + has_royal_court = yes + employs_court_position = royal_architect_court_position + any_court_position_holder = { + type = royal_architect_court_position + is_available_ai_adult = yes + } + } + ai_has_builder_or_pious_builder_personality = yes + } + } + } + valid_to_keep = { + var:task_contract_destination ?= { + has_ongoing_construction = yes + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + #once you are there, you need to stay to complete the contract + trigger_if = { + limit = { + var:task_contract_destination.county = { + has_county_modifier = massive_construction_efforts_modifier + } + } + task_contract_taker.capital_county = var:task_contract_destination.county + } + NOT = { #start_city_construction_decision invalidation + var:task_contract_destination = { + has_variable = laamp_city_construction + } + } + } + + weight = { + # Standard weights. + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + if = { + limit = { + NOT = { has_variable = task_contract_destination } + } + task_contract_employer = { + ordered_held_title = { + limit = { county_has_empty_province_trigger = yes } + order_by = development_level + random_county_province = { + limit = { province_has_no_holding_trigger = yes } + save_scope_as = task_contract_destination + random_list = { + 1 = { + begin_create_holding = { + type = castle_holding + refund_cost = { gold = 0 } + } + } + 1 = { + modifier = { + add = 10 + county = { county_has_no_city_trigger = yes } + } + begin_create_holding = { + type = church_holding + refund_cost = { gold = 0 } + } + } + 1 = { + modifier = { + add = 10 + county = { county_has_no_church_trigger = yes } + } + begin_create_holding = { + type = city_holding + refund_cost = { gold = 0 } + } + } + } + } + } + remove_short_term_gold = main_building_tier_1_cost + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + else = { + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_construction_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + var:task_contract_destination.county = { + remove_county_modifier = massive_construction_efforts_modifier + } + task_contract_taker = { + remove_character_modifier = ep3_construction_contract_modifier + } + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract.var:task_contract_destination = { + switch = { + trigger = has_holding_type + castle_holding = { + scope:task_contract.task_contract_taker = { + add_prestige = task_contract_success_prestige_gain_critical_value + } + } + church_holding = { + scope:task_contract.task_contract_taker = { + add_piety = task_contract_success_piety_gain_critical_value + } + } + city_holding = { + scope:task_contract.task_contract_taker = { + add_gold = scope:task_contract.var:gold_success_standard + } + } + } + } + if = { + limit = { + is_ai = no + } + scope:task_contract.task_contract_employer = { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = scope:task_contract.var:gold_success_standard + } + } + } + else = { + add_gold = scope:task_contract.var:gold_success_standard + } + reverse_add_opinion = { + modifier = succeeded_task_contract_opinion + target = scope:task_contract.task_contract_employer + opinion = 20 + } + # Huck 'em into our contact list. + add_contact = scope:task_contract.task_contract_employer + } + } + } + } + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract.var:task_contract_destination = { + switch = { + trigger = has_holding_type + castle_holding = { + scope:task_contract.task_contract_taker = { + add_prestige = task_contract_success_prestige_gain_full_value + } + } + church_holding = { + scope:task_contract.task_contract_taker = { + add_piety = task_contract_success_piety_gain_full_value + } + } + city_holding = { + scope:task_contract.task_contract_taker = { + add_gold = scope:task_contract.var:gold_success_critical + } + } + } + } + if = { + limit = { + is_ai = no + } + scope:task_contract.task_contract_employer = { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = scope:task_contract.var:gold_success_critical + } + } + } + else = { + add_gold = scope:task_contract.var:gold_success_critical + } + reverse_add_opinion = { + modifier = critically_succeeded_task_contract_opinion + target = scope:task_contract.task_contract_employer + opinion = 50 + } + # Huck 'em into our contact list. + add_contact = scope:task_contract.task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract.task_contract_employer + TYPE = contact_list_weak_hook + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + opinion = -50 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + } + var:task_contract_destination.county ?= { + remove_county_modifier = massive_construction_efforts_modifier + } + } + } + } +} + +## Treasure Hunting +# scope:employer = ruler wanting a treasure +# task_contract_destination = province where you go to find a treasure - set in the treasure_hunting_contract_decision decision +laamp_treasure_hunting_contract = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/inspirations/adventure_inspiration.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + #There can only be one contract of this type at a time, so that the decision is easier to manage + any_character_task_contract = { + NOT = { has_task_contract_type = laamp_treasure_hunting_contract } + } + scope:employer = { + highest_held_title_tier > tier_duchy + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + save_scope_as = task_contract_taker + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + scope:task_contract_taker = { + trigger_event = ep3_contract_event.0005 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination ?= { + save_scope_as = task_contract_destination + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_treasure_hunting_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + add_prestige = task_contract_success_prestige_gain_full_value + if = { + limit = { + is_ai = no + } + scope:task_contract.task_contract_employer = { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = task_contract_success_gold_gain_full_value + } + } + } + else = { + add_short_term_gold = task_contract_success_gold_gain_full_value + } + reverse_add_opinion = { + modifier = succeeded_task_contract_opinion + target = scope:task_contract.task_contract_employer + opinion = 20 + } + # Huck 'em into our contact list. + add_contact = scope:task_contract.task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract.task_contract_employer + TYPE = contact_list_weak_hook + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + opinion = -50 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + } + } + } + } +} + +## Protect Heritage +# scope:employer = a minority vassal of the same culture as root wanting to get title revocation rights vassal contract +# task_contract_target = liege of task_contract_employer +# task_contract_destination = capital of task_contract_employer +laamp_cultural_minority_contract = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/character_interactions/icon_culture.dds" + travel = yes + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + top_liege != this + has_vassal_stance = minority + liege ?= { + is_ai = yes + } + vassal_contract_obligation_level_can_be_increased = title_revocation_rights + culture = { + this != scope:employer.liege.culture + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + save_temporary_scope_as = task_contract + var:task_contract_target = { + any_vassal = { + scope:task_contract.var:task_contract_employer = this + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + liege = { + save_scope_as = task_contract_target + } + capital_province = { + save_scope_as = task_contract_destination + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0020 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_cultural_minority_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + scope:task_contract_target = { + any_vassal = { + count = all + scope:task_contract_employer != this + } + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:not_vassal + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_good + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + root = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + if = { + limit = { + scope:task_contract.task_contract_taker.culture != scope:task_contract.task_contract_employer.culture + } + scope:task_contract.task_contract_taker.culture = { + change_cultural_acceptance = { + target = scope:task_contract.task_contract_employer.culture + value = low_positive_culture_acceptance + desc = cultural_acceptance_laamp_cultural_minority_contract + } + } + } + show_as_tooltip = { + scope:task_contract.task_contract_employer = { + vassal_contract_set_obligation_level = { + type = title_revocation_rights + level = 1 + } + } + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_bad + title = laamp_transport_contract.transport_failed + root = { + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } + } + } + } +} + +## Reward the Faithful +# scope:employer = a minority vassal of the same faith as root wanting to get religious rights vassal contract +# task_contract_target = liege of task_contract_employer +# task_contract_destination = capital of task_contract_employer +laamp_religious_minority_contract = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/character_interactions/religious.dds" + travel = yes + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + top_liege != this + has_vassal_stance = minority + liege ?= { + is_ai = yes + } + vassal_contract_obligation_level_can_be_increased = religious_rights + faith != liege.faith + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + save_temporary_scope_as = task_contract + var:task_contract_target = { + any_vassal = { + scope:task_contract.var:task_contract_employer = this + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + liege = { + save_scope_as = task_contract_target + } + capital_province = { + save_scope_as = task_contract_destination + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0021 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_religious_minority_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + scope:task_contract_target = { + any_vassal = { + count = all + scope:task_contract_employer != this + } + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:not_vassal + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_good + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + save_scope_value_as = { name = extra_reward value = flag:no } + root = { + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = task_contract_success_piety_gain_full_value + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + show_as_tooltip = { + scope:task_contract.task_contract_employer = { + vassal_contract_set_obligation_level = { + type = religious_rights + level = 1 + } + } + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_bad + title = laamp_transport_contract.transport_failed + save_scope_value_as = { name = extra_reward value = flag:no } + root = { + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = task_contract_failure_piety_loss_full_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } + } + } + } +} + +## Prison Break +# scope:employer = a character that has a spouse, family member, soulmate or best friend imprisoned by another character +# task_contract_target = imprisoner +# task_contract_destination = capital of task_contract_target +# task_contract_object = the imprisoned character to be rescued +laamp_prison_break_contract = { + group = laamp_contracts_intrigue_group + icon = "gfx/interface/icons/casus_bellis/fp3_free_house_member.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + OR = { + any_spouse = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:employer + is_imprisoned_by = root + } + } + any_close_family_member = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:employer + is_imprisoned_by = root + } + } + any_relation = { + type = soulmate + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:employer + is_imprisoned_by = root + } + } + any_relation = { + type = best_friend + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:employer + is_imprisoned_by = root + } + } + } + } + } + valid_to_keep = { + exists = root.var:task_contract_object + root.var:task_contract_object = { + is_imprisoned = yes + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + var:task_contract_object ?= { + is_imprisoned = yes + is_alive = yes + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + weight = { + # Standard weights. + value = task_contract_weight_interesting_very_rare_value + add = laamp_contracts_weight_up_intrigue_value + scope:employer = { + if = { + limit = { has_trait = compassionate } + add = task_contract_weight_bonus_employer_has_associated_traits_value + } + multiply = task_contract_weight_by_tier_value + } + add = task_contract_weight_employer_contact_list_value + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + every_spouse = { + limit = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:task_contract.task_contract_employer + is_imprisoned_by = scope:task_contract.task_contract_taker + } + } + add_to_list = character_to_breakout + } + every_close_family_member = { + limit = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:task_contract.task_contract_employer + is_imprisoned_by = scope:task_contract.task_contract_taker + } + } + add_to_list = character_to_breakout + } + every_relation = { + type = soulmate + limit = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:task_contract.task_contract_employer + is_imprisoned_by = scope:task_contract.task_contract_taker + } + } + add_to_list = character_to_breakout + } + every_relation = { + type = best_friend + limit = { + is_imprisoned = yes + NOR = { + is_imprisoned_by = scope:task_contract.task_contract_employer + is_imprisoned_by = scope:task_contract.task_contract_taker + } + } + add_to_list = character_to_breakout + } + ordered_in_list = { + list = character_to_breakout + order_by = prison_break_value + save_scope_as = task_contract_object + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_object + value = scope:task_contract_object + } + scope:task_contract_object = { + imprisoner = { + save_scope_as = task_contract_target + capital_province = { + save_scope_as = task_contract_destination + } + } + add_character_flag = being_prisonbroken_by_laamp + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0030 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + var:task_contract_object = { + save_scope_as = task_contract_object + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_prison_break_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + scope:task_contract_object = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:escortee_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + scope:task_contract_object = { + is_imprisoned = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:prisoner_free + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_good + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + scope:task_contract = { + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + scope:task_contract.var:task_contract_object = { + scope:task_contract.var:task_contract_target = { + save_scope_as = imprisoner + } + escape_from_prison_effect = yes + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_bad + title = laamp_transport_contract.transport_failed + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + scope:task_contract = { + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } + } + } + } +} + +## Treasure Map +# scope:employer = root +# task_contract_target = root +# contract_treasure_location = ep3_laamp_decision_event.1025 +# contract_picked_up_in_location = ep3_laamp_decision_event.1025 +laamp_treasure_map_contract = { + group = laamp_contracts_noticeboard_group #These are created in the Visit Local Settlement-decision + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + #There can only be one contract of this type at a time + any_task_contract = { + NOT = { has_task_contract_type = laamp_treasure_map_contract } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + #We're not already enrolled in a treasure map contract + NOT = { + any_character_artifact = { has_variable = 1025_treasure_map } + } + } + valid_to_continue = { + #We haven't already located the treasure + trigger_if = { + limit = { + NOT = { has_variable = 0045_used_map } + } + root.task_contract_taker = { + any_character_artifact = { has_variable = 1025_treasure_map } + } + } + #The employer is still alive and free + root.task_contract_employer = { + is_alive = yes + is_imprisoned = no + NOT = { has_trait = incapable } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { save_scope_as = task_contract_taker } + task_contract_employer = { save_scope_as = task_contract_employer } + + #Create quest item Treasure Map + scope:task_contract_taker = { + create_artifact = { + name = treasure_map + description = treasure_map_desc + modifier = artifact_monthly_minor_prestige_1_modifier + type = miscellaneous + visuals = pocket_map + max_durability = 10 + history = { + type = given + actor = scope:task_contract_employer + recipient = scope:task_contract_taker + location = scope:task_contract.var:contract_picked_up_in_location + } + save_scope_as = newly_created_map + } + #Set variables + scope:newly_created_map ?= { + set_variable = 1025_treasure_map + set_variable = { + name = picked_up_in_location + value = scope:task_contract.var:contract_picked_up_in_location + } + set_variable = { + name = artifact_treasure_location + value = scope:task_contract.var:contract_treasure_location + } + if = { + limit = { + exists = var:picked_up_in_location + exists = var:artifact_treasure_location + } + set_artifact_description = treasure_map_desc + } + } + #Chuck the employer in there as well + add_courtier = scope:task_contract_employer + scope:task_contract_employer = { + add_character_flag = { + flag = blocked_from_leaving + years = 11 #The map should break first, and is set to 10 years + } + } + trigger_event = ep3_contract_event.0043 + } + } + + #Employer died? Map decayed? + on_invalidated = { + #Employer unavailable + if = { + limit = { + task_contract_employer = { + OR = { + is_alive = no + has_trait = incapable + is_imprisoned = yes + } + } + } + task_contract_employer = { save_scope_as = task_contract_employer } + #Save the location of the employer + var:contract_picked_up_in_location = { save_scope_as = original_contract_location } + #Save contract + save_scope_as = task_contract + #Save tier, realistically always 1 + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + #Save the destination + var:contract_treasure_location ?= { save_scope_as = task_contract_destination } + #Destroy the historical artifact if the LAAMP is an AI + if = { + limit = { + has_variable = has_unique_historical_artifact + task_contract_taker = { is_ai = yes } + } + var:has_unique_historical_artifact = { save_scope_as = historical_artifact } + hidden_effect = { destroy_artifact = scope:historical_artifact } + } + #Send the appropriate event + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_treasure_map_contract + } + #Dead + if = { + limit = { + scope:task_contract_employer = { is_alive = no } + } + trigger_event = ep3_contract_event.0041 + } + #Incapable + if = { + limit = { + scope:task_contract_employer = { has_trait = incapable } + } + trigger_event = ep3_contract_event.0041 + } + #Imprisoned + if = { + limit = { + scope:task_contract_employer = { is_imprisoned = yes } + } + #Save the invalidation flag + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:unlanded_employer_is_imprisoned + } + trigger_event = ep3_contract_event.0012 + } + } + #No longer excavating + remove_variable ?= ep3_laamp_decision_1000_is_excavating + } + #Decay-destroyed map is handled via on_artifact_broken_through_decay, leading to ep3_contract_event.0040 + } + + task_contract_reward = { + #Something to display in the Contract Reward window. Not actually used. + success_qualified = { + effect = { + save_scope_as = task_contract + if = { # Camp building extra Criminal Rewards: +50%. + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { # Standard Reward. + save_scope_value_as = { name = extra_reward value = flag:no } + } + #Check for provision overflows + save_scope_value_as = { + name = provisions_to_add_value + value = { + value = task_contract_taker.domicile.max_provisions + max = old_adventurer_stashed_provisions_value + } + } + save_scope_value_as = { + name = total_provisions_after_reward_value + value = { + value = task_contract_taker.domicile.provisions + add = scope:provisions_to_add_value + } + } + #If there is an overflow + if = { + limit = { scope:total_provisions_after_reward_value > task_contract_taker.domicile.max_provisions } + save_scope_value_as = { + name = provisions_to_add_value + value = { + value = task_contract_taker.domicile.max_provisions + subtract = task_contract_taker.domicile.provisions + } + } + save_scope_value_as = { + name = provisions_overflow_value + value = { + value = scope:total_provisions_after_reward_value + subtract = task_contract_taker.domicile.max_provisions + } + } + save_scope_value_as = { + name = provisions_transformed_to_gold_value + value = { + value = scope:total_provisions_after_reward_value + subtract = task_contract_taker.domicile.max_provisions + multiply = 0.05 + } + } + } + task_contract_taker = { + scope:task_contract.task_contract_employer = { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + stress_impact = { + base = major_stress_impact_loss + honest = minor_stress_impact_loss + } + #1000 seems like a fine, round number for some old adventurer to have stashed somewhere + domicile ?= { + change_provisions = { + #We're capped + if = { + limit = { provisions >= max_provisions } + value = 0 #No provisions, you're full + } + #We're not capped and our max cap is less than 1000 + else_if = { + limit = { max_provisions < old_adventurer_stashed_provisions_value } + value = { + value = max_provisions + subtract = provisions + } + } + #We're not capped and our max cap is equal to -or more- than 1000 + else = { + value = { + value = max_provisions + subtract = provisions + max = old_adventurer_stashed_provisions_value + } + } + } + } + #Inform the player about the overflow + if = { + limit = { exists = scope:provisions_transformed_to_gold_value } + custom_tooltip = { + text = overflowing_provisions_to_gold.tt + add_gold = scope:provisions_transformed_to_gold_value + } + } + } + } + } + #Handled in ep3_contract_event.0050 + success_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + if = { # Camp building extra Criminal Rewards: +50%. + limit = { + task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards } + } + save_scope_value_as = { name = extra_reward value = flag:yes } + } + else = { # Standard Reward. + save_scope_value_as = { name = extra_reward value = flag:no } + } + #Check for provision overflows + if = { + limit = { task_contract_taker.domicile.max_provisions < old_adventurer_stashed_provisions_value } + save_scope_value_as = { + name = provisions_to_add_value + value = task_contract_taker.domicile.max_provisions + } + } + else = { + save_scope_value_as = { + name = provisions_to_add_value + value = old_adventurer_stashed_provisions_value + } + } + save_scope_value_as = { + name = total_provisions_after_reward_value + value = { + value = task_contract_taker.domicile.provisions + add = scope:provisions_to_add_value + } + } + #If there is an overflow + if = { + limit = { scope:total_provisions_after_reward_value > task_contract_taker.domicile.max_provisions } + save_scope_value_as = { + name = provisions_to_add_value + value = { + value = task_contract_taker.domicile.max_provisions + subtract = task_contract_taker.domicile.provisions + } + } + save_scope_value_as = { + name = provisions_overflow_value + value = { + value = scope:total_provisions_after_reward_value + subtract = task_contract_taker.domicile.max_provisions + } + } + save_scope_value_as = { + name = provisions_transformed_to_gold_value + value = { + value = scope:total_provisions_after_reward_value + subtract = task_contract_taker.domicile.max_provisions + multiply = 0.05 + } + } + } + #The actual toast + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + #Historical Artifact 'transferred owner' + if = { + limit = { + scope:task_contract = { has_variable = has_unique_historical_artifact } + } + scope:task_contract = { + var:has_unique_historical_artifact = { save_scope_as = historical_artifact } + } + show_as_tooltip = { + scope:historical_artifact = { set_owner = scope:task_contract.task_contract_employer } + } + } + #Random Jewellry 'transferred owner' + if = { + limit = { + scope:task_contract = { has_variable = has_jewelry_artifact } + } + scope:task_contract = { + var:has_jewelry_artifact = { save_scope_as = jewelry_artifact } + } + show_as_tooltip = { + scope:jewelry_artifact = { set_owner = scope:task_contract.task_contract_employer } + } + } + #Gold reward + if = { + limit = { is_ai = no } + scope:task_contract.task_contract_employer = { + if = { + limit = { exists = scope:historical_artifact } + scope:task_contract.task_contract_employer = { + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + multiply = 4 + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + } + else_if = { + limit = { exists = scope:jewelry_artifact } + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + multiply = { + value = scope:task_contract.var:has_jewelry_artifact.artifact_rarity + subtract = 1 + } + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + else_if = { + limit = { + scope:task_contract = { has_variable = treasure_gold_great } + } + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + multiply = 1.5 + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + else_if = { + limit = { + scope:task_contract = { + OR = { + has_variable = treasure_gold_mediocre + has_variable = treasure_gold_poor + } + } + } + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + multiply = 1.25 + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + else_if = { + limit = { + scope:task_contract = { has_variable = treasure_pillaged } + } + pay_short_term_gold = { + target = scope:task_contract.task_contract_taker + gold = { + value = { + value = old_adventurer_stashed_gold_value + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + } + } + } + #For AI + else = { + add_short_term_gold = { + value = { + value = old_adventurer_stashed_gold_value + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + #Prestige reward + if = { + limit = { exists = scope:historical_artifact } + add_prestige = { + value = { + value = major_prestige_gain + #Extra rewards + if = { + limit = { scope:extra_reward = flag:yes } + multiply = task_contract_extra_reward_multiplier_value + } + } + } + } + #Stress loss -- less stress loss if you gained more gold and vice versa (for doing a good thing) + if = { + limit = { + NOT = { exists = scope:historical_artifact } + } + if = { + limit = { + OR = { + exists = scope:jewelry_artifact + scope:task_contract = { has_variable = treasure_gold_great } + } + } + stress_impact = { + base = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + } + else_if = { + limit = { + scope:task_contract = { + OR = { + has_variable = treasure_gold_mediocre + has_variable = treasure_gold_poor + } + } + } + stress_impact = { + base = medium_stress_impact_loss + honest = minor_stress_impact_loss + } + } + else_if = { + limit = { + scope:task_contract = { has_variable = treasure_pillaged } + } + stress_impact = { + base = major_stress_impact_loss + honest = minor_stress_impact_loss + } + } + } + #Lose some Gallowsbait xp + if = { + limit = { + #... you can't steal a view + NOT = { + scope:task_contract = { has_variable = has_scenic_riches } + } + } + #Lose some Gallowsbait xp + if = { + limit = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = thief + value > 0 + } + } + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = negative_small_lifestyle_random_xp_low + XP_MAX = negative_small_lifestyle_random_xp_low + } + } + } + #Inform the player about the overflow + if = { + limit = { exists = scope:provisions_transformed_to_gold_value } + custom_tooltip = { + text = overflowing_provisions_to_gold.tt + add_gold = scope:provisions_transformed_to_gold_value + } + } + #Throw the historical artifact back in the pool + if = { + limit = { exists = scope:historical_artifact } + hidden_effect = { destroy_artifact = scope:historical_artifact } + } + } + #1000 seems like a fine, round number for some old adventurer to have stashed somewhere + domicile ?= { + change_provisions = { + #We're capped + if = { + limit = { provisions = max_provisions } + value = 0 #No provisions, you're full + } + #We're not capped and our max cap is less than 1000 + else_if = { + limit = { max_provisions < old_adventurer_stashed_provisions_value } + value = { + value = max_provisions + subtract = provisions + } + } + #We're not capped and our max cap is equal to -or more- than 1000 + else = { + value = { + value = max_provisions + subtract = provisions + max = old_adventurer_stashed_provisions_value + } + } + } + } + #Sweep, sweep. + hidden_effect = { + if = { + limit = { + any_character_artifact = { has_variable = 1025_treasure_map } + } + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + destroy_artifact = this + } + } + } + #No longer excavating + remove_variable ?= ep3_laamp_decision_1000_is_excavating + } + } + } + #Handled in ep3_contract_event.0045 + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + scope:task_contract = { + if = { + limit = { has_variable = has_unique_historical_artifact } + task_contract_taker = { #Pretty inconsequential, since you couldn't really determine ahead of time + send_interface_toast = { + title = laamp_transport_contract.transport_failed + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + #And this adventurer doesn't want to see you again + progress_towards_rival_effect = { + REASON = rival_mia_contract + CHARACTER = scope:task_contract.task_contract_employer + OPINION = 0 + } + reverse_add_opinion = { + modifier = stole_artifact_from_me + target = scope:task_contract.task_contract_employer + opinion = -50 + } + add_prestige = medium_prestige_loss + } + } + } + else = { + task_contract_taker = { #Pretty inconsequential, since you couldn't really determine ahead of time + send_interface_toast = { + title = laamp_transport_contract.transport_failed + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + #And this adventurer doesn't want to see you again + hidden_effect = { #For narrative reasons. For mechanical reasons, this character won't get picked in Visit Settlement again + progress_towards_rival_effect = { + REASON = rival_mia_contract + CHARACTER = scope:task_contract.task_contract_employer + OPINION = 0 + } + } + reverse_add_opinion = { + modifier = disappointed_opinion + target = scope:task_contract.task_contract_employer + opinion = -30 + } + add_prestige = minor_prestige_loss + } + } + } + task_contract_taker = { + #Sweep, sweep. (Let the player know the map will be destroyed when failing) + if = { + limit = { + any_character_artifact = { has_variable = 1025_treasure_map } + } + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + destroy_artifact = this + } + } + #No longer excavating + remove_variable ?= ep3_laamp_decision_1000_is_excavating + } + } + } + } + } +} + + +laamp_legitimist_support_contract = { + group = laamp_contracts_legitimist_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + + travel = yes + use_diplomatic_range = yes + + weight = { + value = task_contract_weight_interesting_very_rare_value + add = task_contract_weight_employer_contact_list_value + } + + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + has_realm_law = camp_purpose_legitimists + scope:employer = { + opinion = { + target = root + value > 60 + } + } + scope:employer.primary_title.tier >= tier_kingdom + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + on_create = { + scope:contract = { + task_contract_employer = { + add_character_flag = legitimist_supporter + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = petitioned_ruler + } + task_contract_taker = { + trigger_event = ep3_laamps.8101 + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + task_contract_employer = { + save_scope_as = recipient + } + task_contract_taker = { + custom_tooltip = laamp_legitimist_support_contract_success + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker = { + custom_tooltip = laamp_legitimist_support_contract_failure + } + } + } + } +} + +## Support Faction +# scope:employer = ruler needing help in a faction +# scope:task_contract_faction = faction to join +laamp_join_faction_contract = { + group = laamp_contracts_war_group + icon = "gfx/interface/icons/character_interactions/faction.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + # Specific flavour triggers. + scope:employer = { + is_a_faction_member = yes + joined_faction = { + save_temporary_scope_as = temp_faction + } + } + is_a_faction_member = no + #don't spawn contracts for the same factions or faction targets + NOT = { + any_character_task_contract = { + task_contract_type = laamp_join_faction_contract + OR = { + var:task_contract_faction ?= scope:temp_faction + task_contract_employer = scope:temp_faction.faction_target + } + } + } + is_adult = yes + is_imprisoned = no + NOR = { + is_allied_to = scope:temp_faction.faction_target + scope:temp_faction.faction_target = { has_strong_hook = root } + has_trait = incapable + has_character_flag = joining_faction_block + has_relation_friend = scope:temp_faction.faction_target + has_relation_lover = scope:temp_faction.faction_target + has_secret_relation_lover = scope:temp_faction.faction_target + scope:temp_faction.faction_target = { is_contact_of = root } + } + } + valid_to_keep = { + exists = root.var:task_contract_faction + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + custom_tooltip = { + text = NOT_FACTION_JOIN_CREATE_CONDITION_NOT_FACTION_MEMBER + is_a_faction_member = no + } + #passes_faction_hard_block from 00_rules.txt + scope:employer ?= { + joined_faction ?= { + faction_target ?= { + save_temporary_scope_as = target + } + } + } + custom_description = { + text = "FACTION_CANT_JOIN_CREATE_ADULT" + is_adult = yes + } + custom_description = { + text = "FACTION_CANT_JOIN_CREATE_ALLIED" + trigger_if = { + limit = { exists = scope:target } + NOT = { is_allied_to = scope:target } + } + } + custom_description = { + text = "FACTION_CANT_JOIN_CREATE_HOOK" + trigger_if = { + limit = { exists = scope:target } + scope:target = { + NOT = { has_strong_hook = root } + } + } + } + custom_description = { + text = "FACTION_CANT_JOIN_CREATE_IMPRISONED" + trigger_if = { + limit = { + joined_faction ?= { + faction_is_at_war = yes + } + } + } + trigger_else = { + is_imprisoned = no + } + } + custom_description = { + text = "FACTION_CANT_JOIN_CREATE_INCAPABLE" + NOT = { has_trait = incapable } + } + custom_description = { + text = "character_blocked_from_joining" + NOT = { has_character_flag = joining_faction_block } + } + custom_description = { + text = "faction_relation_blocks_joining_friend" + trigger_if = { + limit = { exists = scope:target } + NOT = { + root = { has_relation_friend = scope:target } + } + } + } + custom_description = { + text = "faction_relation_blocks_joining_lover" + trigger_if = { + limit = { exists = scope:target } + NOR = { + root = { has_relation_lover = scope:target } + root = { has_secret_relation_lover = scope:target } + } + } + } + } + valid_to_continue = { + exists = root.var:task_contract_faction + var:task_contract_faction = { + any_faction_member = { + this = root.task_contract_taker + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_mercenary_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + joined_faction = { + save_scope_as = task_contract_faction + } + save_scope_as = task_contract_employer + } + set_variable = { + name = task_contract_faction + value = scope:task_contract_faction + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + scope:task_contract_faction = { + faction_target = { + save_scope_as = task_contract_target + } + } + set_task_contract_target = scope:task_contract_target + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0070 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_join_faction_contract + } + } + + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract_faction } + NOT = { exists = var:suppress_invalidation_event } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:faction_disbanded + } + trigger_event = ep3_contract_event.0012 + } + } + } + task_contract_taker = { + remove_variable = task_contract_faction + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + var:task_contract_faction = { + save_scope_as = faction + } + task_contract_employer = { + save_scope_as = task_contract_employer + save_scope_as = attacker + } + task_contract_taker = { + save_scope_as = task_contract_taker + save_scope_as = defender + custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold + if = { + limit = { + faith != scope:task_contract.var:task_contract_target.faith + } + custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety + } + save_scope_value_as = { + name = task_contract_reward + value = flag:success_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + war_contracts_completed_tracker_effect = yes + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + # Huck 'em into our contact list. + add_contact = scope:task_contract.task_contract_employer + # Give hook as well as contact + add_hook_if_possible_default_length_effect = { + TARGET = scope:task_contract.task_contract_employer + TYPE = contact_list_weak_hook + } + if = { + limit = { + exists = scope:task_contract.var:task_contract_title + } + scope:attacker = { + save_scope_as = actor + } + save_scope_as = recipient + scope:task_contract.var:task_contract_title = { + add_to_list = offered_titles + } + negotiate_settlement_interaction_effect = yes + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + var:task_contract_faction = { + save_scope_as = faction + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_reward + value = flag:failure_standard + } + save_scope_value_as = { + name = task_contract_tier + value = scope:task_contract.task_contract_tier + } + send_interface_toast = { + title = laamp_transport_contract.transport_failed + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + add_prestige = task_contract_failure_prestige_loss_full_value + } + } + } + } + } +} + +## Missionary Duties +# scope:employer = ruler converting the county +# scope:task_contract_target = court chaplain doing the convert council task +# scope:task_contract_destination = county that has the council task active +# scope:task_contract_councillor = always the councillor performing the task +laamp_help_faith_conversion_contract = { + group = laamp_contracts_learning_group + icon = "/gfx/interface/icons/council_task_types/task_conversion.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + any_task_contract = { + task_contract_type = laamp_help_faith_conversion_contract + NOT = { task_contract_location = scope:employer.location } + } + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_court_chaplain + COUNCIL_TASK_TYPE = task_conversion + } + } + + valid_to_accept = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_court_chaplain + COUNCIL_TASK_TYPE = task_conversion + } + } + + valid_to_keep = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_continue = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_learning_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { save_scope_as = task_contract_employer } + if = { + limit = { + scope:task_contract_employer.cp:councillor_court_chaplain ?= { is_performing_council_task = task_conversion } + } + set_task_contract_target = scope:task_contract_employer.cp:councillor_court_chaplain + scope:task_contract_employer.cp:councillor_court_chaplain = { save_scope_as = task_contract_councillor } + } + else = { + set_task_contract_target = scope:task_contract_employer.liege + scope:task_contract_employer = { save_scope_as = task_contract_councillor } + } + set_variable = { + name = task_contract_destination + value = root.task_contract_target.councillor_task_target + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_target + value = root.task_contract_target + } + set_variable = { + name = task_contract_councillor + value = scope:task_contract_councillor + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0085 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_faith_conversion_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_piety_gain_full_value + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + gain_patron_and_hook_from_council_task_contract_effect = yes + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +## Protect the Adherents +# scope:employer = pool character resisting county conversion +# scope:task_contract_target = court chaplain doing the convert council task +# scope:task_contract_destination = county that has the council task active +# scope:task_contract_object = task_contract_target's liege +laamp_fight_faith_conversion_contract = { + group = laamp_contracts_learning_group + icon = "/gfx/interface/icons/council_task_types/task_conversion.dds" + travel = no + use_diplomatic_range = yes + + valid_to_create = { + NOT = { + any_task_contract = { + task_contract_type = laamp_fight_faith_conversion_contract + task_contract_location = scope:employer.location + } + } + scope:employer = { + top_liege != this + any_liege_or_above = { + cp:councillor_court_chaplain ?= { + is_performing_council_task = task_conversion + councillor_task_target = scope:employer.location + } + faith != root.faith + faith != scope:employer.faith + } + } + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_learning_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + random_liege_or_above = { + limit = { + cp:councillor_court_chaplain ?= { + is_performing_council_task = task_conversion + councillor_task_target = scope:task_contract_employer.location + save_temporary_scope_as = temp_councillor + } + faith != scope:task_contract.task_contract_taker.faith + faith != scope:task_contract_employer.faith + } + save_scope_as = task_contract_councillor_liege + scope:temp_councillor = { + save_scope_as = task_contract_councillor + } + } + scope:task_contract = { + #save how the contract was generated for easier debugging + set_variable = { + name = spawned_by + value = flag:populate_effect + } + } + } + else = { + scope:task_contract = { + task_contract_target = { + save_scope_as = task_contract_councillor + liege = { + save_scope_as = task_contract_councillor_liege + } + } + #save how the contract was generated for easier debugging + set_variable = { + name = spawned_by + value = flag:on_action + } + } + } + } + # Error suppression + if = { + limit = { exists = var:spawned_by + OR = { + var:spawned_by = flag:populate_effect + var:spawned_by = flag:on_action + } + } + } + set_variable = { + name = task_contract_councillor_liege + value = scope:task_contract_councillor_liege + } + set_variable = { + name = task_contract_councillor + value = scope:task_contract_councillor + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + set_task_contract_target = scope:task_contract.var:task_contract_councillor + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract.var:task_contract_councillor.councillor_task_target + } + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0082 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_fight_faith_conversion_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = task_contract_success_piety_gain_full_value + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = 0 + PIETY = -25 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +## Knight's Coach +# scope:employer = ruler or marshal needing help in train commanders council task +# scope:task_contract_target = marshal or ruler, depending on who's the employer +# var:knights_to_train = list of all knights you have to train +laamp_help_train_commanders_contract = { + group = laamp_contracts_martial_group + icon = "/gfx/interface/icons/council_task_types/task_train_commanders.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_marshal + COUNCIL_TASK_TYPE = task_train_commanders + } + trigger_if = { + limit = { + scope:employer.cp:councillor_marshal ?= { + is_performing_council_task = task_train_commanders + } + } + scope:employer = { + any_knight = { } + } + } + trigger_else = { + scope:employer.liege = { + any_knight = { } + } + } + } + + valid_to_accept = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_marshal + COUNCIL_TASK_TYPE = task_train_commanders + } + } + valid_to_keep = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_continue = { + time_since_contract_taken <= 720 + has_variable_list = knights_to_train + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + + assign_council_task_scopes_in_contract_effect = { + COUNCILLOR_TYPE = councillor_marshal + COUNCIL_TASK_TYPE = task_train_commanders + } + #save all knights to train + scope:task_contract_councillor_liege = { + ordered_knight = { + order_by = { + value = prowess + multiply = -1 + } + max = 3 + add_to_list = knights_list + scope:task_contract = { + add_to_variable_list = { + name = knights_to_train + target = prev + } + } + } + } + #keep track of success and failure + set_variable = { + name = knights_trained + value = 0 + } + set_variable = { + name = knights_failed + value = 0 + } + set_variable = { + name = knights_limit + value = { + value = list_size:knights_list + subtract = 1 + } + } + #get a list of traits you can teach + task_contract_taker = { + every_character_trait = { + limit = { + has_trait_category = commander + } + scope:task_contract = { + add_to_variable_list = { + name = takers_commander_traits + target = prev + } + } + } + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + # Make sure critical values are a bit higher. + save_scope_value_as = { name = gold_safety_margin value = flag:yes } + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_critical_value + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0090 + } + } + + on_invalidated = { + save_scope_as = task_contract + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_train_commanders_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else = { + scope:task_contract = { + if = { + limit = { + NAND = { + var:knights_trained = 0 + var:knights_failed = 0 + } + } + if = { + limit = { + var:knights_trained >= scope:task_contract.var:knights_failed + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + } + } + } + + task_contract_reward = { + success_critical = { + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract = { + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + gain_patron_and_hook_from_council_task_contract_effect = yes + } + } + } + } + } + success_standard = { + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" + send_interface_toast = { + title = laamp_transport_contract.success + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract = { + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" + send_interface_toast = { + title = laamp_transport_contract.transport_failed + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract = { + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } + } + } + } +} + +## Private Eye +# scope:employer = spymaster or ruler finding secrets +# scope:task_contract_target = holder of the claimed title +# scope:task_contract_destination = county that has the council task active +# scope:task_contract_object = employer's liege or court chaplain, depending on who's the employer +laamp_help_find_secrets_contract = { + group = laamp_contracts_intrigue_group + icon = "/gfx/interface/icons/council_task_types/task_find_secrets.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_spymaster + COUNCIL_TASK_TYPE = task_find_secrets + } + } + + valid_to_keep = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_accept = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_spymaster + COUNCIL_TASK_TYPE = task_find_secrets + } + } + + valid_to_continue = { + time_since_contract_taken <= 720 + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_intrigue_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_location + } + set_variable = { + name = secrets_found + value = 0 + } + assign_council_task_scopes_in_contract_effect = { + COUNCILLOR_TYPE = councillor_spymaster + COUNCIL_TASK_TYPE = task_find_secrets + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0100 + } + } + + on_invalidated = { + save_scope_as = task_contract + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_find_secrets_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else = { + scope:task_contract = { + if = { + limit = { + var:knights_trained >= scope:task_contract.var:knights_failed + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + } + } + + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + gain_patron_and_hook_from_council_task_contract_effect = yes + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = -25 + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +## Forgotten Claims +# scope:employer = court chaplain or ruler fabricating a claim +# scope:task_contract_target = holder of the claimed title +# scope:task_contract_destination = county that has the council task active +# scope:task_contract_councillor_liege = always liege of the councillor performing the task +# scope:task_contract_councillor = always the councillor performing the task +laamp_help_fabricate_claim_contract = { + group = laamp_contracts_intrigue_group + icon = "/gfx/interface/icons/council_task_types/task_fabricate_claim.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_court_chaplain + COUNCIL_TASK_TYPE = task_fabricate_claim + } + } + + valid_to_keep = { + exists = root.var:task_contract_councillor_liege + exists = root.var:task_contract_councillor + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + valid_to_accept = { + council_task_contract_valid_employer_trigger = { + COUNCILLOR_TYPE = councillor_court_chaplain + COUNCIL_TASK_TYPE = task_fabricate_claim + } + } + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_intrigue_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + assign_council_task_scopes_in_contract_effect = { + COUNCILLOR_TYPE = councillor_court_chaplain + COUNCIL_TASK_TYPE = task_fabricate_claim + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_councillor.councillor_task_target + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_target + value = scope:task_contract.var:task_contract_destination.province_owner + } + set_task_contract_target = scope:task_contract.var:task_contract_target + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_critical + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + # On_Actions + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0080 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_fabricate_claim_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + if = { + limit = { + exists = var:attached_scheme + } + var:attached_scheme = { + scheme_target_title = { + save_scope_as = claimed_title + } + } + } + else = { + scope:task_contract.var:task_contract_destination.county = { + save_scope_as = claimed_title + } + } + var:task_contract_councillor_liege = { + add_pressed_claim = scope:claimed_title + } + task_contract_taker = { + show_as_tooltip = { + add_pressed_claim = scope:claimed_title + } + } + gain_patron_and_hook_from_council_task_contract_effect = yes + } + } + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + if = { + limit = { + exists = var:attached_scheme + } + var:attached_scheme = { + scheme_target_title = { + save_scope_as = claimed_title + } + } + } + else = { + scope:task_contract.var:task_contract_destination.county = { + save_scope_as = claimed_title + } + } + var:task_contract_councillor_liege = { + add_pressed_claim = scope:claimed_title + } + task_contract_taker = { + hidden_effect = { + remove_claim = scope:claimed_title + } + } + gain_patron_and_hook_from_council_task_contract_effect = yes + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +## Fight Corruption +# scope:employer = marshal or ruler increasing control +# scope:task_contract_target = holder of the claimed title +# scope:task_contract_destination = county that has the council task active +# scope:task_contract_councillor_liege = always liege of the councillor performing the task +# scope:task_contract_councillor = always the councillor performing the task +laamp_help_increase_control_contract = { + group = laamp_contracts_intrigue_group + icon = "/gfx/interface/icons/council_task_types/task_increase_control.dds" + travel = no + use_diplomatic_range = yes + + valid_to_create = { + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + OR = { + scope:employer = { + NOT = { var:issued_help_increase_control_contract_recently ?= root } + top_liege = this + any_councillor = { + OR = { + has_council_position = councillor_marshal + AND = { + is_kurultai_trigger = yes + highest_skill = martial + } + } + } + any_sub_realm_county = { + OR = { + has_county_corruption_trigger = yes + county_control <= low_county_control + } + } + } + scope:employer = { + NOT = { var:issued_help_increase_control_contract_recently ?= root } + OR = { + has_council_position = councillor_marshal + AND = { + is_kurultai_trigger = yes + highest_skill = martial + } + } + is_councillor_of = top_liege + top_liege = { + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:employer } + } + any_sub_realm_county = { + OR = { + has_county_corruption_trigger = yes + county_control <= low_county_control + } + } + } + } + } + } + + valid_to_keep = { + var:task_contract_councillor_liege ?= { + any_sub_realm_county = { + OR = { + has_county_corruption_trigger = yes + county_control <= low_county_control + } + } + } + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_accept = { + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_martial_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + set_variable = { + name = issued_help_increase_control_contract_recently + value = scope:task_contract.task_contract_taker + years = 10 + } + save_scope_as = task_contract_employer + if = { + limit = { + top_liege = this + } + scope:task_contract_employer = { + save_scope_as = task_contract_councillor_liege + random_councillor = { + limit = { + OR = { + has_council_position = councillor_marshal + AND = { + is_kurultai_trigger = yes + highest_skill = martial + } + } + } + save_scope_as = task_contract_councillor + } + } + } + else = { + scope:task_contract_employer = { + save_scope_as = task_contract_councillor + top_liege = { + save_scope_as = task_contract_councillor_liege + } + } + } + } + set_variable = { + name = task_contract_councillor_liege + value = scope:task_contract_councillor_liege + } + set_variable = { + name = task_contract_councillor + value = scope:task_contract_councillor + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = support + value = 0 + } + set_variable = { + name = control + value = 0 + } + set_variable = { + name = num_of_corrupt_counties + value = 0 + } + #save the liege as the target + set_task_contract_target = scope:task_contract_councillor_liege + #save all counties with low control or corruption modifier in liege's realm + scope:task_contract_councillor_liege = { + ordered_sub_realm_county = { + order_by = { + value = county_opinion + multiply = -1 + } + max = 6 + check_range_bounds = no + limit = { + OR = { + has_county_corruption_trigger = yes + county_control <= low_county_control + } + } + scope:task_contract = { + add_to_variable_list = { + name = corrupt_counties + target = prev + } + } + } + } + # We do this a bit later on because otherwise it was having some slight issues if only one county was valid. + set_variable = { + name = num_of_corrupt_counties + value = { + every_in_list = { + variable = corrupt_counties + add = 1 + } + } + } + random_in_list = { + variable = corrupt_counties + title_province = { + save_scope_as = destination + } + } + set_variable = { + name = task_contract_destination + value = scope:destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_critical + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = scope:task_contract.var:num_of_corrupt_counties + } + } + set_variable = { + name = gold_success_standard + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = scope:task_contract.var:num_of_corrupt_counties + multiply = 0.5 + } + } + } + } + + # On_Actions + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0092 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_target = { + save_scope_as = task_contract_target + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_help_increase_control_contract + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + scope:task_contract_target = { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_critical = { + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + set_variable = { + name = gold_success_critical + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = var:control + } + } + set_variable = { + name = gold_success_standard + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = var:control + multiply = 0.5 + } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + gain_patron_and_hook_from_council_task_contract_effect = yes + hidden_effect = { + scope:task_contract.task_contract_taker= { return_home = yes } + } + } + } + success_standard = { + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + set_variable = { + name = gold_success_critical + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = var:control + } + } + set_variable = { + name = gold_success_standard + value = { + value = task_contract_taker.task_contract_success_gold_gain_full_value + multiply = var:control + multiply = 0.5 + } + } + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + gain_patron_and_hook_from_council_task_contract_effect = yes + hidden_effect = { + scope:task_contract.task_contract_taker = { + return_home = yes + } + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + hidden_effect = { + scope:task_contract.task_contract_taker = { + return_home = yes + } + } + } + } + } +} diff --git a/common/task_contracts/laamp_nm_contracts.txt b/common/task_contracts/laamp_nm_contracts.txt new file mode 100644 index 00000000..fb6308e8 --- /dev/null +++ b/common/task_contracts/laamp_nm_contracts.txt @@ -0,0 +1,969 @@ +################################################## +# INFO +# Extra contracts for laamps. +################################################## + +laamp_boost_legitimacy_contract = { + group = laamp_contracts_diplomacy_group + icon = "gfx/interface/icons/scheme_types/diplomacy.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + scope:employer = { + legitimacy_level <= 2 + top_liege = this + is_landed = yes + is_ai = yes + NOR = { + location = root.location + government_has_flag = government_is_theocracy + } + highest_held_title_tier > tier_county + location = { + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + } + } + + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_diplomacy_value + add = laamp_contracts_weight_up_diplomacy_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + capital_province = { + save_scope_as = task_contract_destination + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_taker.task_contract_success_gold_gain_full_value + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + trigger_event = { + id = ep3_contract_event.0510 + delayed = yes + } + } + } + + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + save_scope_as = task_contract + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + task_contract_taker = { + send_interface_toast = { + title = laamp_transport_contract.success #Re-using + left_icon = scope:task_contract.task_contract_taker + right_icon = scope:task_contract.task_contract_employer + scope:task_contract = { + # Standard Rewards. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_employer = { + add_legitimacy = minor_legitimacy_gain + } + } + } + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_as = task_contract + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_employer = { + add_legitimacy = miniscule_legitimacy_loss + } + } + } + failure_critical = { + positive = no + effect = { + save_scope_as = task_contract + # Standard Penalties. + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_double_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_critical_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_employer = { + add_legitimacy = medium_legitimacy_loss + add_prestige = task_contract_failure_prestige_loss_double_value + add_stress = medium_stress_gain + } + } + } + } +} + +laamp_rid_councillor_contract = { + group = laamp_contracts_martial_group + icon = "gfx/interface/icons/scheme_types/martial.dds" + travel = yes + use_diplomatic_range = yes + is_criminal = yes + + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + scope:employer = { + top_liege = this + is_landed = yes + is_ai = yes + NOT = { + government_has_flag = government_is_theocracy + } + highest_held_title_tier > tier_county #Requires a council + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + any_councillor = { #Has a councillor who they hate + count > 1 + is_ai = yes + reverse_opinion = { + target = scope:employer + value <= high_negative_opinion + } + } + } + } + + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_martial_value + add = laamp_contracts_weight_up_martial_slight_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + capital_province = { + save_scope_as = task_contract_destination + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_critical + value = task_contract_success_gold_gain_full_value + } + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_half_value + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + trigger_event = { + id = ep3_contract_event.0550 + delayed = no + } + } + } + + task_contract_reward = { + success_critical = { + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { + # Update gallowsbait score. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_full_value + add_piety = minor_piety_loss + reverse_add_opinion = { + opinion = -35 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + # Update gallowsbait score. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MIN = gallowsbait_xp_medium_gain + XP_MAX = gallowsbait_xp_medium_gain + } + } + } + } + failure_critical = { + positive = no + effect = { + save_scope_as = task_contract + task_contract_taker = { + add_prestige = task_contract_failure_prestige_loss_double_value + add_piety = medium_piety_loss + add_stress = minor_stress_gain + reverse_add_opinion = { + opinion = -65 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + # Update gallowsbait score. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MIN = gallowsbait_xp_major_gain + XP_MAX = gallowsbait_xp_major_gain + } + } + } + } + } +} + +laamp_gain_wanderer_contract = { + group = laamp_contracts_martial_group + icon = "gfx/interface/icons/scheme_types/martial.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + prestige_level >= 2 + scope:employer = { + is_landed = no + is_ai = yes + in_diplomatic_range = root + prestige_level < root.prestige_level + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + primary_title = { + is_mercenary_company = no + } + NOR = { + government_has_flag = government_is_theocracy + government_allows = administrative + } + } + } + + valid_to_accept = { + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + is_available = yes + prestige_level >= 2 + scope:employer = { + is_landed = no + is_ai = yes + in_diplomatic_range = root + prestige_level < root.prestige_level + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + primary_title = { + is_mercenary_company = no + } + NOR = { + government_has_flag = government_is_theocracy + government_allows = administrative + } + } + } + + weight = { + # Keep it rare and use it to fill in gaps between other contracts + value = task_contract_weight_interesting_very_rare_value + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + capital_province = { + save_scope_as = task_contract_destination + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_half_value + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = task_contract_employer + capital_province = { + save_scope_as = task_contract_destination + } + } + task_contract_taker = { + trigger_event = { + id = ep3_contract_event.0570 + delayed = no + } + } + } + + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + task_contract_taker = { + add_intrigue_lifestyle_xp = medium_lifestyle_xp + add_courtier = scope:task_contract.task_contract_employer + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_as = task_contract + task_contract_taker = { + add_stress = medium_stress_gain + add_character_modifier = { + modifier = ep3_clumsy_rescuer_modifier + years = 5 + } + reverse_add_opinion = { + opinion = -50 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + } + } + } + } +} + +laamp_find_secret_contract = { + group = laamp_contracts_intrigue_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + travel = yes + use_diplomatic_range = yes + + valid_to_create = { + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + scope:employer = { + is_ai = yes + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + NOT = { + government_has_flag = government_is_theocracy + } + OR = { + any_courtier_or_guest = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:employer } + } + } + any_vassal = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:employer } + } + } + } + } + } + + valid_to_accept = { + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { + is_ai = yes + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + NOT = { + government_has_flag = government_is_theocracy + } + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + scope:employer = { + OR = { + any_courtier_or_guest = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:employer } + } + } + any_vassal = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:employer } + } + } + } + } + } + + weight = { + value = task_contract_weight_default_value + add = laamp_contracts_weight_up_intrigue_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = 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 + } + } + else = { + random_courtier_or_guest = { + save_scope_as = secret_haver + } + } + scope:secret_haver.location = { + save_scope_as = task_contract_destination + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + scope:contract = { + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_half_value + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = 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 + } + } + else = { + random_courtier_or_guest = { + save_scope_as = secret_haver + } + } + scope:secret_haver.location = { + save_scope_as = task_contract_destination + } + } + task_contract_taker = { + trigger_event = { + id = ep3_contract_event.0580 + delayed = no + } + } + } + + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_as = task_contract + task_contract_taker = { + add_stress = minor_stress_gain + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + opinion = -50 + modifier = failed_task_contract_opinion + target = scope:task_contract.task_contract_employer + } + } + } + } + } +} + +laamp_eliminate_heir_contract = { + group = laamp_contracts_intrigue_group + icon = "gfx/interface/icons/scheme_types/intrigue.dds" + travel = yes + use_diplomatic_range = yes + is_criminal = yes + + valid_to_create = { + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + valid_laamp_sensible_start_trigger = yes + scope:employer = { + is_ai = yes + in_diplomatic_range = root + is_landed = yes + location = { #Not too far away + squared_distance = { + target = root.location + value <= squared_distance_large + } + } + NOR = { + government_has_flag = government_is_theocracy + government_allows = administrative + } + AND = { #They have a primary heir they dislike, and another one they like + primary_heir ?= { + reverse_opinion = { + target = scope:employer + value <= high_negative_opinion + } + age > 16 #No murderin' babies + } + any_heir = { + count > 1 + } + } + } + } + + valid_to_accept = { + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + + valid_to_continue = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + valid_to_keep = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = root.task_contract_employer + LAAMP = root.task_contract_taker + } + } + + weight = { #Let's not have this happen too often + value = task_contract_weight_interesting_very_rare_value + add = task_contract_weight_employer_contact_list_value + } + + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = 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 + } + scope:heir.location = { + save_scope_as = task_contract_destination + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract_employer + } + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + save_scope_as = task_contract + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_full_value + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = 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 + } + random_heir = { + limit = { + NOT = { + is_primary_heir_of = scope:task_contract_employer + } + reverse_opinion = { + target = scope:task_contract_employer + value >= low_positive_opinion + } + } + save_scope_as = favoured_heir + } + scope:heir.location = { + save_scope_as = task_contract_destination + } + } + task_contract_taker = { + trigger_event = { + id = ep3_contract_event.0590 + delayed = no + } + } + } + + task_contract_reward = { + success_standard = { + should_print_on_complete = yes + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = task_contract_success_provisions_gain_major_value + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + save_scope_value_as = { name = extra_reward value = flag:no } + save_scope_as = task_contract + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} diff --git a/common/task_contracts/laamp_transport_contracts.txt b/common/task_contracts/laamp_transport_contracts.txt new file mode 100644 index 00000000..b2dcf096 --- /dev/null +++ b/common/task_contracts/laamp_transport_contracts.txt @@ -0,0 +1,2025 @@ +################################################## +# INFO +# Transport contracts for laamps. Any contract that require usage of the travel system to complete, i.e. fetch quests, escort quests, etc. +# +################################################## + + + +################################################## +# GROUPS (for populate_task_contracts_for_area) +# +# laamp_contracts_transport_group +# +# +# + + +################################################## +# +# laamp_transport_vip - Escort Emissary - Escort a charachter's Courtier to another character +# laamp_transport_artifact - Artifact Delivery - Transfer an artifact from one character to another +# laamp_transport_gold - A Golden Gift - Transfer gold from one character to another +# laamp_transport_ward - Ward Transfer - Escorting a Ward to a Guardian +# laamp_transport_explorer - Eager Explorer - Baron wants to visit a Point of Interest +# laamp_transport_animal - A Living Gift - Escorting a pet story cycle from one character to another character +# +################################################## + +# VIP escort +# scope:employer = ruler wanting to send a courtier to a foreign court +# var:task_contract_object = the courtier to be escorted +# task_contract_target = random neighbor of scope:employer +# task_contract_destination = capital of task_contract_target +laamp_transport_vip = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + laamp_task_contract_employer_not_antisocial_trigger = yes + scope:employer = { + any_courtier = { + is_ai = yes + is_available_allow_travelling = yes + is_adult = yes + is_lowborn = no + } + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + capital_province != root.domicile.domicile_location + } + } + } + valid_to_keep = { + exists = root.var:task_contract_object + var:task_contract_object = { + is_courtier_of = root.task_contract_employer + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + var:task_contract_object ?= { + is_alive = yes + } + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_quite_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + if = { + limit = { + NOT = { exists = scope:task_contract.var:task_contract_object } + } + random_courtier = { + limit = { + is_ai = yes + is_available_allow_travelling = yes + is_adult = yes + is_lowborn = no + } + save_scope_as = task_contract_object + } + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract.task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + set_variable = { + name = task_contract_object + value = scope:task_contract_object + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_critical + value = task_contract_success_gold_gain_travel_value + } + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_half_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_object = { + save_scope_as = task_contract_object + } + + if = { + limit = { + var:task_contract_object ?= { + is_alive = yes + } + } + var:task_contract_object = { + return_to_court = yes + } + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_vip + } + } + if = { + limit = { + var:task_contract_object ?= { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:escortee_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + var:task_contract_target = { + is_alive = no + } + } + var:task_contract_target ?= { + save_scope_as = dead_target + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + #reward name + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Artifact delivery +# scope:employer = ruler wanting to send an artifact to a foreign court +# var:escorted_artifact = the artifact to be escorted +# task_contract_target = random neighbor of scope:employer +# task_contract_destination = capital of task_contract_target +laamp_transport_artifact = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + any_character_artifact = { + NOR = { + has_variable = historical_unique_artifact + has_variable = banner_house + has_variable = banner_dynasty + } + } + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + capital_province != root.domicile.domicile_location + } + } + } + valid_to_keep = { + exists = root.var:escorted_artifact + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { + any_character_artifact = { + NOR = { + has_variable = historical_unique_artifact + has_variable = banner_house + has_variable = banner_dynasty + } + } + } + } + valid_to_continue = { + var:escorted_artifact ?= { + artifact_owner = { + OR = { + root.task_contract_taker = this + root.task_contract_target = this + } + } + } + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_quite_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + if = { + limit = { + NOT = { exists = scope:task_contract.var:escorted_artifact } + } + random_character_artifact = { + limit = { + NOR = { + has_variable = historical_unique_artifact + has_variable = banner_house + has_variable = banner_dynasty + } + } + save_scope_as = escorted_artifact + } + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract.task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + set_variable = { + name = escorted_artifact + value = scope:escorted_artifact + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_critical + value = task_contract_success_gold_gain_travel_value + } + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + + if = { + limit = { + var:task_contract_object ?= { + is_alive = yes + } + } + var:task_contract_object = { + return_to_court = yes + } + } + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_artifact + } + } + if = { + limit = { + var:task_contract_object ?= { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:escortee_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + var:task_contract_target = { + is_alive = no + } + } + var:task_contract_target ?= { + save_scope_as = dead_target + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + if = { + limit = { + var:escorted_artifact ?= { + owner = root.task_contract_taker + } + } + var:escorted_artifact = { + set_owner = root.task_contract_employer + } + } + } + } + + # Rewards + task_contract_reward = { + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + transport_destroyed = { + positive = no + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_bad + title = laamp_transport_contract.transport_failed + left_icon = root.task_contract_taker + right_icon = root.task_contract_employer + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + modifier = failed_task_contract_opinion + target = root.task_contract_employer + opinion = -50 + } + } + } + } + } + transport_stolen = { + positive = no + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker = { + send_interface_toast = { + type = event_toast_effect_bad + title = laamp_transport_contract.transport_failed + left_icon = root.task_contract_taker + right_icon = root.task_contract_employer + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + modifier = failed_task_contract_opinion + target = root.task_contract_employer + opinion = -50 + } + } + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Large sum of gold +# scope:employer = ruler wanting to send a gift to a foreign court +# var:escorted_artifact = the artifact to be escorted +# task_contract_target = random neighbor of scope:employer +# task_contract_destination = capital of task_contract_target +laamp_transport_gold = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + scope:employer = { + gold >= { + value = task_contract_escort_gold_value + multiply = 1.5 + } + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + gold <= 0 + likes_character_trigger = { CHARACTER = scope:employer } + capital_province != root.domicile.domicile_location + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + gold <= 0 + likes_character_trigger = { CHARACTER = scope:task_contract.task_contract_employer } + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + capital_province = { + save_scope_as = task_contract_destination + } + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract.task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + set_variable = { + name = escorted_gold + value = scope:task_contract.task_contract_employer.task_contract_escort_gold_value + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_gold + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + var:task_contract_target = { + is_alive = no + } + } + var:task_contract_target ?= { + save_scope_as = dead_target + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Child education +# scope:employer = ruler wanting to send a child to educate at a foreign court +# var:task_contract_object = the ward to be escorted +# task_contract_target = worthy educator neighboring scope:employer +# task_contract_destination = capital of task_contract_target +laamp_transport_ward = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + any_child = { + is_ai = yes + is_available_child_allow_travel = yes + OR = { + num_of_relation_guardian = 0 + any_relation = { + type = guardian + is_landed = no + } + } + age = { 4 12 } + } + OR = { + any_neighboring_top_liege_realm_owner = { + is_ai = yes + num_of_relation_ward < 2 + is_adult = yes + OR = { + has_education_rank_4_trigger = yes + has_education_rank_5_trigger = yes + num_virtuous_traits > 0 + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:employer } + capital_province != root.domicile.domicile_location + } + any_vassal = { + is_ai = yes + num_of_relation_ward < 2 + is_adult = yes + OR = { + has_education_rank_4_trigger = yes + has_education_rank_5_trigger = yes + num_virtuous_traits > 0 + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:employer } + capital_province != root.domicile.domicile_location + } + } + } + } + valid_to_keep = { + exists = root.var:task_contract_object + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + var:task_contract_object ?= { + is_alive = yes + } + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + if = { + limit = { + NOT = { exists = scope:task_contract.var:task_contract_object } + } + random_child = { + limit = { + is_available_child_allow_travel = yes + OR = { + num_of_relation_guardian = 0 + any_relation = { + type = guardian + is_landed = no + } + } + age = { 4 12 } + } + save_scope_as = task_contract_object + } + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + num_of_relation_ward < 2 + OR = { + has_education_rank_4_trigger = yes + has_education_rank_5_trigger = yes + num_virtuous_traits > num_sinful_traits + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:task_contract.task_contract_employer } + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + } + } + else = { + random_vassal = { + limit = { + is_ai = yes + num_of_relation_ward < 2 + is_adult = yes + OR = { + has_education_rank_4_trigger = yes + has_education_rank_5_trigger = yes + num_virtuous_traits > num_sinful_traits + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:task_contract.task_contract_employer } + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + } + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + set_variable = { + name = task_contract_object + value = scope:task_contract_object + } + #set the ward/guardian variables same as in education interactions + var:task_contract_object = { + set_variable = { + name = character_requested_as_educator + value = scope:task_contract.task_contract_target + years = 10 + } + set_variable = { + name = character_making_education_request + value = scope:task_contract.task_contract_employer + years = 10 + } + set_variable = { + name = ward_travelling_to_guardian + value = scope:task_contract.task_contract_target + } + } + var:task_contract_target = { + set_variable = { + name = guardian_waiting_for_ward + value = scope:task_contract.task_contract_target + } + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + var:task_contract_object = { + save_scope_as = task_contract_object + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_ward + } + } + if = { + limit = { + var:task_contract_object ?= { + is_alive = no + } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:escortee_dead + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + else_if = { + limit = { + var:task_contract_target = { + is_alive = no + } + } + var:task_contract_target ?= { + save_scope_as = dead_target + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + #remove the ward/guardian variables + if = { + limit = { + var:task_contract_object ?= { + is_alive = yes + } + } + var:task_contract_object = { + remove_variable = character_requested_as_educator + remove_variable = character_making_education_request + remove_variable = ward_travelling_to_guardian + return_to_court = yes + } + } + if = { + limit = { + task_contract_target ?= { + is_alive = yes + } + } + task_contract_target = { + remove_variable = guardian_waiting_for_ward + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Explorer of Points of Interests +# scope:employer = pool character wanting to visit a point of interest +# var:travel_reason = the reason poi is worth a visit +# task_contract_destination = capital of task_contract_target +laamp_transport_explorer = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + is_ai = yes + is_available_allow_travelling = yes + is_adult = yes + highest_held_title_tier <= tier_barony + OR = { + ai_boldness >= 50 + ai_energy >= 50 + has_trait = lifestyle_traveler + } + any_neighboring_top_liege_realm_owner = { + is_within_diplo_range = { CHARACTER = root } + any_realm_province = { + this != root.domicile.domicile_location + has_any_travel_poi_trigger = yes + } + } + } + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + } + valid_to_continue = { + var:task_contract_object ?= { + is_alive = yes + } + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_almost_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + random_neighboring_top_liege_realm_owner = { + limit = { + is_within_diplo_range = { CHARACTER = scope:task_contract.task_contract_taker } + any_realm_province = { + this != scope:task_contract.task_contract_taker.domicile.domicile_location + has_any_travel_poi_trigger = yes + save_temporary_scope_as = poi_province + } + } + } + } + scope:poi_province = { + save_scope_as = task_contract_destination + if = { + limit = { exists = province_owner } + province_owner = { + save_scope_as = task_contract_target + } + } + else = { + county.holder = { + save_scope_as = task_contract_target + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + set_variable = { + name = task_contract_object + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + var:task_contract_destination = { + switch = { + trigger = has_travel_point_of_interest + poi_capitals = { + save_scope_value_as = { + name = travel_reason + value = flag:capitals + } + } + poi_special_buildings_martial = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_martial + } + } + poi_special_buildings_learning = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_learning + } + } + poi_special_buildings_religious = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_religious + } + } + poi_special_buildings_diplomatic = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_diplomatic + } + } + poi_grand_city = { + save_scope_value_as = { + name = travel_reason + value = flag:grand_city + } + } + poi_special_buildings_wonder = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_wonder + } + } + poi_special_buildings_economic = { + save_scope_value_as = { + name = travel_reason + value = flag:special_buildings_economic + } + } + poi_mausoleum_at_halicarnassus = { + save_scope_value_as = { + name = travel_reason + value = flag:mausoleum_at_halicarnassus + } + } + poi_lighthouse_of_alexandria = { + save_scope_value_as = { + name = travel_reason + value = flag:lighthouse_of_alexandria + } + } + poi_natural_feature = { + save_scope_value_as = { + name = travel_reason + value = flag:natural_feature + } + } + } + } + set_variable = { + name = travel_reason + value = scope:travel_reason + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_critical + value = task_contract_success_gold_gain_travel_value + } + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_half_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_explorer + } + } + if = { + limit = { + task_contract_employer = { + is_alive = no + } + } + task_contract_employer.primary_title.holder ?= { + save_scope_as = employer_heir + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:employer_dead + } + trigger_event = ep3_contract_event.0012 + + } + } + task_contract_employer = { + if = { + limit = { + is_landed = no + } + move_to_pool = yes + } + } + } + } + + # Rewards + task_contract_reward = { + success_critical = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_critical + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_excelled_reward_value + OPINION_TYPE = critically_succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_half_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} + +# Pet Story Cycle: dog or cat +# scope:employer = ruler with a pet wanting to give it away to a foreign court +# var:escorted_story = the story cycle with the pet +# task_contract_target = random ruler that doesn't have a pet story cycle +# task_contract_destination = capital of task_contract_target +laamp_transport_animal = { + group = laamp_contracts_transport_group + icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds" + travel = no + use_diplomatic_range = no + + # Validity Triggers + valid_to_create = { + # Standard triggers. + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + employer_has_treasury_to_offer_job_trigger = yes + valid_laamp_sensible_start_trigger = yes + # Specific flavour triggers. + scope:employer = { + has_named_cat_or_dog_trigger = yes + any_owned_story = { + NOT = { exists = var:gifted_pet_story } + } + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_adult = yes + has_cat_or_dog_trigger = no + capital_province != root.domicile.domicile_location + } + } + } + valid_to_keep = { + exists = root.var:escorted_story + } + valid_to_accept = { + # Standard triggers. + valid_laamp_basic_accept_only_trigger = yes + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = root + } + scope:employer = { + has_named_cat_or_dog_trigger = yes + } + } + valid_to_continue = { + exists = var:escorted_story + var:task_contract_target ?= { + is_alive = yes + } + } + + weight = { + # Standard weights. + value = task_contract_weight_interesting_somewhat_rare_value + add = laamp_contracts_weight_up_transport_value + add = task_contract_weight_employer_contact_list_value + scope:employer = { multiply = task_contract_weight_by_tier_value } + } + + # On_Actions + on_create = { + scope:contract = { + save_scope_as = task_contract + task_contract_employer = { + random_owned_story = { + limit = { + NOT = { exists = var:gifted_pet_story } + OR = { + story_type = story_cycle_pet_dog + story_type = story_cycle_pet_cat + } + } + save_scope_as = escorted_story + } + if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_target } + } + random_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_adult = yes + has_cat_or_dog_trigger = no + capital_province != scope:task_contract.task_contract_taker.domicile.domicile_location + } + save_scope_as = task_contract_target + capital_province = { + save_scope_as = task_contract_destination + } + } + } + else_if = { + limit = { + NOT = { exists = scope:task_contract.task_contract_destination } + } + scope:task_contract.task_contract_target = { + capital_province = { + save_scope_as = task_contract_destination + } + } + } + } + set_variable = { + name = task_contract_employer + value = scope:task_contract.task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + set_variable = { + name = task_contract_target + value = scope:task_contract.task_contract_target + } + } + else = { + set_variable = { + name = task_contract_target + value = scope:task_contract_target + } + set_task_contract_target = scope:task_contract_target + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + set_variable = { + name = task_contract_destination + value = scope:task_contract.task_contract_destination + } + } + else = { + set_variable = { + name = task_contract_destination + value = scope:task_contract_destination + } + } + set_variable = { + name = escorted_story + value = scope:escorted_story + } + if = { + limit = { + exists = scope:escorted_story.var:story_cycle_dog_name + } + set_variable = { + name = story_cycle_dog_name + value = scope:escorted_story.var:story_cycle_dog_name + } + } + else = { + set_variable = { + name = story_cycle_cat_name + value = scope:escorted_story.var:story_cycle_cat_name + } + } + # Make our gold rewards static. + grab_gold_fuzz_number_effect = yes + set_variable = { + name = gold_success_standard + value = task_contract_success_gold_gain_travel_value + } + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker = { + trigger_event = ep3_contract_event.0001 + } + } + + on_invalidated = { + if = { + limit = { + root.task_contract_taker = { + any_character_active_contract = { + this = root + } + } + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + save_scope_value_as = { + name = task_contract_tier + value = root.task_contract_tier + } + var:task_contract_destination = { + save_scope_as = task_contract_destination + } + + task_contract_taker = { + set_variable = { + name = invalidated_task_contract_type + value = flag:laamp_transport_animal + } + } + if = { + limit = { + NOT = { exists = var:escorted_story } + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:pet_dead + } + #for the localization to show the pet's name in the follow up event + if = { + limit = { + exists = root.var:story_cycle_dog_name + } + set_variable = { + name = story_cycle_dog_name + value = root.var:story_cycle_dog_name + days = 1 + } + } + else = { + set_variable = { + name = story_cycle_cat_name + value = root.var:story_cycle_cat_name + days = 1 + } + } + trigger_event = ep3_contract_event.0012 + } + } + else_if = { + limit = { + var:task_contract_target = { + is_alive = no + } + } + var:task_contract_target ?= { + save_scope_as = dead_target + } + task_contract_employer = { + save_scope_as = task_contract_employer + } + task_contract_taker = { + save_scope_value_as = { + name = task_contract_invalidation_reason + value = flag:target_dead + } + trigger_event = ep3_contract_event.0012 + } + } + } + } + + # Rewards + task_contract_reward = { + success_standard = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = scope:task_contract.var:gold_success_standard + PRESTIGE = task_contract_success_prestige_gain_full_value + PIETY = 0 + PROVISIONS = 0 + OPINION = task_contract_opinion_standard_reward_value + OPINION_TYPE = succeeded_task_contract_opinion + CONTACT = yes + CONTACT_HOOK = yes + EXTRA_REWARD = scope:extra_reward + } + } + } + failure_standard = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_value_as = { name = extra_reward value = flag:no } + laamp_rewards_disburse_ordinary_currency_effect = { + GOLD = 0 + PRESTIGE = task_contract_failure_prestige_loss_full_value + PIETY = 0 + PROVISIONS = task_contract_failure_provisions_gain_minor_value + OPINION = task_contract_opinion_standard_failure_value + OPINION_TYPE = failed_task_contract_opinion + CONTACT = no + CONTACT_HOOK = no + EXTRA_REWARD = scope:extra_reward + } + } + } + } +} diff --git a/common/task_contracts/nomads_migration_contracts.txt b/common/task_contracts/nomads_migration_contracts.txt new file mode 100644 index 00000000..59184bed --- /dev/null +++ b/common/task_contracts/nomads_migration_contracts.txt @@ -0,0 +1,468 @@ +############################# +# NOMADIC MIGRATION CONTRACTS +############################# +nomadic_migration_contract_1 = { # Disagreeable Herders + group = nomadic_settling_group + icon = "gfx/interface/icons/government_types/government_type_herder.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 1 + ARRIVAL_ID = 0005 + RESET_ID = 0003 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_1 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + + fertility = { effect = { settlement_issue_fertility_reward_effect = yes } } + } +} + +nomadic_migration_contract_2 = { # The Wild Herd + group = nomadic_settling_group + icon = "gfx/interface/icons/icon_herd.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 2 + ARRIVAL_ID = 0015 + RESET_ID = 0013 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_2 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + + gold = { effect = { settlement_issue_gold_reward_effect = yes } } + + opinion = { effect = { settlement_issue_opinion_reward_effect = { MODIFIER = mpo_si_slaughtered_for_a_feast } } } + } +} + +nomadic_migration_contract_3 = { # Contentious Grazelands + group = nomadic_settling_group + icon = "gfx/interface/icons/icon_county_fertility.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { + any_knight = { + count >= 2 + is_landed = no + } + any_held_county = { + county_control < 90 + NOT = { has_county_modifier = ongoing_settlement_contract } + } + } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 3 + ARRIVAL_ID = 0025 + RESET_ID = 0023 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_3 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + + opinion = { + effect = { + settlement_issue_character_opinion_reward_effect = { + CHARACTER = root.task_contract_employer + } + } + } + } +} + +nomadic_migration_contract_4 = { # A Lack of Tools + group = nomadic_settling_group + icon = "gfx/interface/icons/court_position_types/royal_architect_court_position.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 4 + ARRIVAL_ID = 0035 + RESET_ID = 0033 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_4 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + } +} + +nomadic_migration_contract_5 = { # Fragmentation of the Tribe + group = nomadic_settling_group + icon = "gfx/interface/icons/casus_bellis/ducal_conquest_cb.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 5 + ARRIVAL_ID = 0045 + RESET_ID = 0043 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_5 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + } +} + +nomadic_migration_contract_6 = { # Poisonous Lands + group = nomadic_settling_group + icon = "gfx/interface/icons/court_position_types/court_physician_court_position.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 6 + ARRIVAL_ID = 0055 + RESET_ID = 0053 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_6 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + } +} + +nomadic_migration_contract_7 = { # Troublesome Neighbors + group = nomadic_settling_group + icon = "gfx/interface/icons/casus_bellis/ducal_conquest_cb.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { + custom_tooltip = { + text = migration_contract_county_ownership_text + OR = { + task_contract_location.province_owner = task_contract_taker + task_contract_location.province_owner.liege = task_contract_taker + task_contract_location.province_owner.top_liege = task_contract_taker + } + } + custom_tooltip = { + text = migration_contract_county_alt_text + task_contract_location.county = { + county_control < 90 + any_neighboring_county = { + NOT = { owner.top_liege ?= root.top_liege } + } + } + } + } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 7 + ARRIVAL_ID = 0065 + RESET_ID = 0063 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_7 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + } +} + +nomadic_migration_contract_8 = { # The Leftovers + group = nomadic_settling_group + icon = "gfx/interface/icons/icon_herd.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 8 + ARRIVAL_ID = 0075 + RESET_ID = 0073 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_8 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + + gold = { effect = { settlement_issue_gold_reward_effect = yes } } + + fertility = { effect = { settlement_issue_fertility_reward_effect = yes } } + } +} + +nomadic_migration_contract_9 = { # Drawing Lines + group = nomadic_settling_group + icon = "gfx/interface/icons/icon_county_fertility.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { + custom_tooltip = { + text = migration_contract_county_ownership_text + OR = { + task_contract_location.province_owner = task_contract_taker + task_contract_location.province_owner.liege = task_contract_taker + task_contract_location.province_owner.top_liege = task_contract_taker + } + } + custom_tooltip = { + text = migration_contract_county_alt_text + task_contract_location.county = { + county_control < 90 + any_neighboring_county = { + holder = root.task_contract_taker + } + } + } + } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 9 + ARRIVAL_ID = 0085 + RESET_ID = 0083 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_9 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + fertility = { effect = { settlement_issue_fertility_reward_effect = yes } } + } +} + +nomadic_migration_contract_10 = { # The Old Tribe + group = nomadic_settling_group + icon = "gfx/interface/icons/icon_culture.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes } + + valid_to_keep = { + custom_tooltip = { + text = migration_contract_county_ownership_text + OR = { + task_contract_location.province_owner = task_contract_taker + task_contract_location.province_owner.liege = task_contract_taker + task_contract_location.province_owner.top_liege = task_contract_taker + } + } + custom_tooltip = { + text = migration_contract_county_alt_text + task_contract_location.county = { + county_control < 90 + has_variable = migration_previous_culture + NOT = { var:migration_previous_culture = root.task_contract_taker.culture } + } + } + } + + valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes } + + valid_to_accept = { is_available = yes } + + on_create = { settlement_issue_on_create_effect = yes } + + on_accepted = { + settlement_issue_on_accepted_default_effect = { + NUMBER = 10 + ARRIVAL_ID = 0095 + RESET_ID = 0093 + } + } + + on_completed = { + task_contract_taker = { remove_variable = nomadic_migration_contract_10 } + } + + on_invalidated = { + settlement_issue_on_invalidated_default_effect = yes + } + + task_contract_reward = { + control = { effect = { settlement_issue_control_reward_effect = yes } } + + herd = { effect = { settlement_issue_herd_reward_effect = yes } } + + success = { effect = { settlement_issue_culture_reward_effect = yes } } + } +} diff --git a/common/task_contracts/tgp_admin_contracts.txt b/common/task_contracts/tgp_admin_contracts.txt new file mode 100644 index 00000000..0af1f0d6 --- /dev/null +++ b/common/task_contracts/tgp_admin_contracts.txt @@ -0,0 +1,3458 @@ +jail_inspection = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/control.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0010 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + renovate_jail = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + improve_their_conditions = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = minor_gold_value + increase_governance_effect = { VALUE = 5 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + pardon_some_of_them = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = -5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_pardoned_prisoners_modifier + years = 10 + } + } + } + } + beat_the_complainers = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_martial_lifestyle_xp = minor_lifestyle_xp + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + convict_labor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_convict_labor_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +potent_physick = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0011 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + emergency_appropriation = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + licensing_issue = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0002.b.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_gold = minor_gold_value + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + begone_quack = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_prestige = minor_prestige_gain + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_expelled_popular_peddler_modifier + years = 10 + } + } + } + } + hire_the_quack = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = minor_gold_value + increase_governance_effect = { VALUE = 5 } + } + } + } + down_the_hatch = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = tiny_gold_value + add_character_modifier = { + modifier = tgp_potent_physick + years = 5 + } + } + } + } + failure_licensing_issue = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0002.b.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +irregular_accounting = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0012 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + confiscation_and_incarceration = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + add_gold = minor_gold_value + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_enforced_justice_on_official_modifier + years = 10 + } + } + } + } + recruit_embezzler = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + } + } + cover_up = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + change_influence = minor_influence_gain + } + scope:task_contract.task_contract_location.county = { + change_county_control = -5 + } + } + } + into_your_pocket = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + add_stewardship_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + continue_the_charade = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0003.e.toast_success + left_icon = scope:task_contract.task_contract_taker + add_gold = major_gold_value + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + failure_continue_the_charade = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0003.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +salt_smugglers = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/control.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0013 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + execute_smuggler = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + cut_a_deal = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + interrogate_smuggler = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0004.c.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + change_influence = medium_influence_gain + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + a_cut_of_the_take = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0004.d.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_gold = medium_gold_value + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + recruit_smuggler = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + } + } + failure_interrogate_smuggler = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0004.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_a_cut_of_the_take = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0004.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +hoarding_grain = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0014 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + release_the_grain = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + shame_them = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0005.b.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_prestige = minor_prestige_gain + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + } + } + } + intimidate_them = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0005.c.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + add_prestige = minor_prestige_gain + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + } + purchase_grain_yourself = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + remove_short_term_gold = minor_gold_value + add_prestige = minor_prestige_gain + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + bribe_with_offices = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + } + } + failure_intimidate_them = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0005.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_shame_them = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0005.b.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +doddering_magistrate = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/diplomacy.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0015 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + appoint_substitute = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + force_him_out = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + promote_somewhere_harmless = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_prestige = minor_prestige_gain + } + } + } + let_him_continue = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_doddering_magistrate_modifier + years = 10 + } + } + } + } + demote_him = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + add_character_modifier = { + modifier = tgp_disrespected_elderly_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +burdensome_taxes = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0007 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + revise_tax_assessment = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0007.a.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + waive_their_taxes = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_reduced_taxes_modifier + years = 10 + } + } + } + } + pay_it_yourself = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + remove_short_term_gold = medium_gold_value + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + delayed_taxes = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_delayed_taxes_modifier + years = 10 + } + } + } + } + imprison_debtors = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_imprisoned_poor_modifier + years = 10 + } + } + } + } + failure_revise_tax_assessment = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0007.a.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +unsafe_highways = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/soldier.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0008 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + merchant_funded_government_escort = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + send_out_the_patrols = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_prestige = minor_prestige_gain + add_martial_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + talk_them_into_bodyguards = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0008.c.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_prestige = minor_prestige_gain + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + } + } + } + threaten_with_sanctions = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0008.d.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + } + } + } + entice_with_promises = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0008.e.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + remove_short_term_gold = minor_gold_value + } + } + } + } + failure_entice_with_promises = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0008.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_threaten_with_sanctions = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0008.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_talk_them_into_bodyguards = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0008.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +dam_in_disrepair = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0009 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + conscientious_mobilization = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + forced_labor = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 15 + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_compelled_labor_modifier + years = 10 + } + } + } + } + compel_the_wealthy = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0009.c.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + } + } + } + personal_contribution = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = medium_gold_value + change_influence = { + value = medium_influence_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_appreciative_populace_modifier + years = 10 + } + } + } + } + requisition_state_resources = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0009.e.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + } + } + } + failure_compel_the_wealthy = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0009.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_requisition_state_resources = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0009.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +lines_in_the_soil = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0020 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + land_resurvey = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = miniscule_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + consult_archives = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0021.b.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_learning_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_consult_archives = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0021.b.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + split_the_land = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + } + } + purchase_claims = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0021.d.toast_success + left_icon = scope:task_contract.task_contract_taker + remove_short_term_gold = minor_gold_value + add_stewardship_lifestyle_xp = minor_lifestyle_xp + add_character_modifier = { + modifier = tgp_purchased_land + years = 10 + } + } + } + } + } + failure_purchase_claims = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0021.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + remove_short_term_gold = minor_gold_value + } + } + } + } + declare_state_property = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_state_annexed_land + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +fraud_in_broad_daylight = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0022 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + goods_inspection = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + reward_for_information = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + remove_short_term_gold = minor_gold_value + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + } + } + undercover_clerks = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0023.c.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + failure_undercover_clerks = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0023.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + merchant_association = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + remove_short_term_gold = minor_gold_value + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_empowered_merchants_association + years = 10 + } + } + } + } + surprise_raid = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0023.e.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_gold = { medium_gold_value major_gold_value } + add_martial_lifestyle_xp = minor_lifestyle_xp + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + failure_surprise_raid = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0023.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +crumbling_bridge = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0024 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + army_assistance = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_army_reconstruction + years = 10 + } + } + } + } + temporary_substitute = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = minor_gold_value + change_influence = medium_influence_gain + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_hastily_rebuilt_bridge + years = 10 + } + } + } + } + ferry_crossing = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_ferry_crossing + years = 10 + } + } + } + } + slower_replacement = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_learning_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_well_planned_bridge + years = 10 + } + } + } + } + settle_caravans = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0025.e.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_settled_caravans + years = 10 + } + } + } + } + failure_settle_caravans = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0025.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +confusion_of_tongues = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0026 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + temporary_housing = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + search_for_translator = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + } + } + confiscate_their_goods = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { medium_gold_value major_gold_value } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + if = { + limit = { + faith = { + trait_is_sin = greedy + } + } + add_piety = minor_piety_loss + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + scope:task_contract.var:foreign_merchant_culture = { + change_cultural_acceptance = { + target = scope:task_contract.task_contract_taker.culture + value = minor_cultural_acceptance_loss + desc = cultural_acceptance_loss_event + } + } + } + } + communicate_through_gestures = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0027.d.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.var:foreign_merchant_culture = { + change_cultural_acceptance = { + target = scope:task_contract.task_contract_taker.culture + value = minor_cultural_acceptance_loss + desc = cultural_acceptance_loss_event + } + } + } + } + failure_communicate_through_gestures = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0027.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + put_them_under_guard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.var:foreign_merchant_culture = { + change_cultural_acceptance = { + target = scope:task_contract.task_contract_taker.culture + value = minor_cultural_acceptance_loss + desc = cultural_acceptance_loss_event + } + } + } + } + i_know_this_one = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_dread = major_dread_gain + add_martial_lifestyle_xp = minor_lifestyle_xp + if = { + limit = { + NOT = { + has_character_modifier = feast_display_of_ruthlessness_modifier + } + } + add_character_modifier = { + modifier = feast_display_of_ruthlessness_modifier + years = 10 + } + } + } + scope:task_contract.var:foreign_merchant_culture = { + change_cultural_acceptance = { + target = scope:task_contract.task_contract_taker.culture + value = minor_cultural_acceptance_loss + desc = cultural_acceptance_loss_event + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +seditious_storytelling = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0028 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + censor_storyteller = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_suppressed_popular_storyteller + years = 10 + } + } + } + } + arrest_storyteller = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_suppressed_popular_storyteller + years = 10 + } + } + } + } + encourage_rival_storytellers = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + remove_short_term_gold = minor_gold_value + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_state_sponsored_storytellers + years = 10 + } + } + } + } + intimidate_audience = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + persuade_storyteller = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0029.e.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_converted_storyteller + years = 10 + } + } + } + } + failure_persuade_storyteller = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0029.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +quaking_in_panic = { # TODO_CD_TGP: hook into Natural Disasters if and where appropriate when implemented (foreshocks, aftershocks?) + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + any_councillor = { # For the context of the event localization to work properly + count >= 2 + } + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0030 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + convene_public_meeting = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0031.a.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_reassured_populace + years = 10 + } + } + } + } + failure_convene_public_meeting = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0031.a.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + deploy_guards = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location.county = { + change_county_control = 5 + } + } + } + appeal_to_local_leadership = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + architectural_inspection = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0031.d.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_reassured_populace + years = 10 + } + } + } + } + failure_architectural_inspection = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0031.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + population_transfer = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_consolidated_population + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +monopoly_in_the_marketplace = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0032 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + strict_regulations = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_market_regulation + years = 10 + } + } + } + } + association_stalls_only = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_empowered_merchants_association + years = 10 + } + } + } + } + levy_special_tax = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { minor_gold_value medium_gold_value } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + if = { + limit = { + faith = { + trait_is_sin = greedy + } + } + add_piety = minor_piety_loss + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + back_competitors = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0033.d.toast_success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 5 } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + remove_short_term_gold = minor_gold_value + } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_empowered_merchants_association + years = 10 + } + } + } + } + failure_back_competitors = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0033.d.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + remove_short_term_gold = minor_gold_value + } + } + } + } + seize_merchant_goods = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { medium_gold_value major_gold_value } + add_dread = { + value = minor_dread_gain + multiply = governance_task_contract_tier_value + } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + if = { + limit = { + faith = { + trait_is_sin = greedy + } + } + add_piety = minor_piety_loss + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +contested_inheritance = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/stewardship.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.0034 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + declare_communal_property = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + } + } + } + award_according_to_seniority = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 5 } + add_prestige = medium_prestige_gain + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + award_to_highest_bidder = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_governor_contract_event.0035.c.toast_success + left_icon = scope:task_contract.task_contract_taker + add_gold = { medium_gold_value major_gold_value } + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + if = { + limit = { + faith = { + trait_is_sin = greedy + } + } + add_piety = minor_piety_loss + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + failure_award_to_highest_bidder = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0035.c.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + adhere_to_testament = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_learning_lifestyle_xp = minor_lifestyle_xp + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + } + } + persuade_private_settlement = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + add_prestige = minor_prestige_gain + } + } + } + failure_persuade_private_settlement = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_governor_contract_event.0035.e.toast_failure + left_icon = scope:task_contract.task_contract_taker + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + diff --git a/common/task_contracts/tgp_admin_contracts_tova.txt b/common/task_contracts/tgp_admin_contracts_tova.txt new file mode 100644 index 00000000..13c4b305 --- /dev/null +++ b/common/task_contracts/tgp_admin_contracts_tova.txt @@ -0,0 +1,651 @@ +# Unsanctioned deity: Village worships excessively +unsanctioned_deity = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/heresy.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + trigger_event = governor_contract_events_tova.0050 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + sanction_deity = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = minor_merit_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + add_county_modifier = { + modifier = tgp_sanctioned_deity_modifier + years = 10 + } + } + } + } + burn_shrine = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_merit = { + value = miniscule_merit_gain + multiply = governance_task_contract_tier_value + } + } + } + } + claim_offerings = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = { + value = scope:task_contract.task_contract_location.monthly_income + multiply = 40 + } + change_merit = { + value = miniscule_merit_loss + multiply = governance_task_contract_tier_value + } + if = { + limit = { + secret_siphoned_treasury_is_valid_trigger = { + OWNER = scope:task_contract.task_contract_taker + TARGET = top_liege + } + } + add_secret = { + type = secret_siphoned_treasury + target = top_liege + } + } + } + } + } + debunk_deity = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + change_merit = { + value = miniscule_merit_gain + multiply = governance_task_contract_tier_value + } + add_character_modifier = { + modifier = tgp_debunked_deity_modifier + years = 10 + } + } + } + } + deity_monks = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = miniscule_influence_gain + multiply = governance_task_contract_tier_value + } + add_piety = { + value = medium_piety_gain + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + if = { + limit = { + has_trait = governor + has_trait_xp = { + trait = governor + value > 0 + } + } + add_trait_xp = { + trait = governor + value = -5 + } + } + } + } + } + } +} + +#Escaped Justice +escaped_justice = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/marshal_job.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + task_contract_target = { + is_travelling = no + is_imprisoned = no + is_commanding_army = no + } + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + trigger_event = governor_contract_events_tova.0055 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + escapee_persuade = { #Diplomacy + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + change_merit = { + value = minor_merit_gain + multiply = governance_task_contract_tier_value + } + } + } + } + escapee_slain = { #Martial duel + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_dread = { + value = medium_dread_gain + multiply = governance_task_contract_tier_value + } + } + task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + escapee_join_monastery = { #Increase Piety + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_piety = { + value = medium_piety_gain + multiply = governance_task_contract_tier_value + } + } + } + } + escapee_shunned = { #Influence Gain + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + } + task_contract_location.county = { + change_county_control = -5 + } + } + } + } +} + +#Forced Conscription +forced_conscription = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/marshal_job.dds" + travel = no + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + task_contract_employer = { + is_alive = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_employer = { + save_scope_as = recruitment_employer + } + task_contract_taker ?= { + trigger_event = governor_contract_events_tova.0060 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + conscripts_bribed = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location = { + add_province_modifier = { + modifier = tgp_fattened_vanguard_modifier + years = 10 + } + } + task_contract_taker ?= { + remove_short_term_gold = { + value = minor_gold_value + multiply = governance_task_contract_tier_value + } + } + } + } + conscripts_forced = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location = { + add_province_modifier = { + modifier = tgp_fattened_vanguard_modifier + years = 10 + } + } + task_contract_location.county = { + change_county_control = medium_county_control_loss + } + task_contract_taker ?= { + change_influence = { + value = minor_influence_gain + multiply = governance_task_contract_tier_value + } + } + } + } + conscripts_convinced = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location = { + add_province_modifier = { + modifier = tgp_fattened_vanguard_modifier + years = 10 + } + } + task_contract_taker ?= { + change_merit = { + value = minor_merit_gain + multiply = governance_task_contract_tier_value + } + } + } + } + conscripts_trade = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_location.county = { + add_county_modifier = { + modifier = tgp_diligent_workers_modifier + years = 10 + } + } + task_contract_taker ?= { + change_merit = { + value = minor_merit_loss + multiply = governance_task_contract_tier_value + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + } + task_contract_location.county = { + change_county_control = -5 + } + } + } + } +} + +#Teach Monks Martial Arts +combat_train_monks = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/marshal_job.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + trigger_event = governor_contract_events_tova.0065 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = {governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + hire_monks_as_maa = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + } + } + } + hire_monk_as_knight = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = minor_influence_loss + } + } + } + train_monks = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = miniscule_influence_gain + multiply = governance_task_contract_tier_value + } + increase_governance_effect = { VALUE = 4 } + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_trained_monks_modifier + years = 10 + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + station_troops = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + } + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_stationed_troops_modifier + years = 10 + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + let_marshal_handle = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + scope:task_contract.task_contract_location = { + add_province_modifier = { + modifier = tgp_adequately_trained_monks_modifier + years = 10 + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + task_contract_taker ?= { + change_influence = minor_influence_loss + } + task_contract_location.county = { + change_county_control = -5 + } + } + } + } +} diff --git a/common/task_contracts/tgp_admin_military_contracts.txt b/common/task_contracts/tgp_admin_military_contracts.txt new file mode 100644 index 00000000..3a6f631d --- /dev/null +++ b/common/task_contracts/tgp_admin_military_contracts.txt @@ -0,0 +1,180 @@ +missing_equipment = { + group = admin_governance_group + icon = "gfx/interface/icons/message_feed/marshal_job.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_governor_contract_event.2000 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_success_tt_rewards + } + } + success_failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_failure_tt + } + } + secure_future_deliveries = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + change_merit = { + value = medium_merit_value + multiply = governance_task_contract_tier_value + } + + every_held_title = { + limit = { tier = tier_county } + custom = custom.every_held_county_capital + title_province = { + add_province_modifier = { + modifier = tgp_well_equipped_soldiers_modifier + years = 15 + } + } + } + } + scope:task_contract.task_contract_location.county = { + if = { + limit = { county_control < 100 } + change_county_control = 5 + } + } + } + } + demand_extra_shipment = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 6 } + every_held_title = { + limit = { tier = tier_county } + custom = custom.every_held_county_capital + title_province = { + add_province_modifier = { + modifier = tgp_well_equipped_soldiers_modifier + years = 10 + } + } + } + } + } + } + demand_gold = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 2 } + add_gold = medium_gold_value + } + } + } + demand_best_equipment = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + + capital_province ?= { + add_province_modifier = { + modifier = tgp_greatly_equipped_soldiers_modifier + years = 15 + } + } + } + } + } + offered_replacements = { # Default outcome if you visit the workshop. Same as "buy_replacements" but without the cost. + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 4 } + + } + } + } + buy_replacements = { # Safe opt-out if you don't want to travel + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = medium_gold_value + increase_governance_effect = { VALUE = 4 } + } + } + } + + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = minor_influence_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} diff --git a/common/task_contracts/tgp_mandala_contracts.txt b/common/task_contracts/tgp_mandala_contracts.txt new file mode 100644 index 00000000..6d1a8a67 --- /dev/null +++ b/common/task_contracts/tgp_mandala_contracts.txt @@ -0,0 +1,3748 @@ +############################# +# MANDALA REALM CONTRACTS +############################# +mandala_realm_contract_0001 = { # Visit a province in your realm + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + #Generate the loc for title + desc + random_list = { + 1 = { + set_variable = { + name = loc_desc + value = flag:mandala_provincial_ritual_desc_01 + } + } + 1 = { + set_variable = { + name = loc_desc + value = flag:mandala_provincial_ritual_desc_02 + } + } + } + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1000 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0002 = { # Barren Cattle + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1100 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0003 = { # The First Seed + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1200 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0004 = { # Sacred Heifer + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1300 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0005 = { # Divine Witness + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1400 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0006 = { # Midwives' Dream + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1500 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0007 = { # Weeping Statue + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1600 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0008 = { # Sprouting Flowers + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1700 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0009 = { # River Ritual + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1800 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0010 = { # Cursed Fields + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1900 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0011 = { # Withered Grove + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2000 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0012 = { # Pig Slaughter Oath + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2100 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0013 = { # Ritual Wrath + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2200 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0014 = { # Collective Punishment + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2300 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0015 = { # Diseased Spirits + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2400 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0016 = { # Dull Spears + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2500 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0017 = { # Defiant Village + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2600 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0018 = { # Blood Tax + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2700 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0019 = { # Bamboo Rebels + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2800 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0020 = { # Road Sacrifice + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2900 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0021 = { # War God Festival + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3000 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0022 = { # Quarreling Monks + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3100 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0023 = { # Purify Battlefield + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3200 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0024 = { # Bless the Weavers + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3300 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0025 = { # Breaking of Spears + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3400 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0026 = { # Guru's Peace + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3500 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0027 = { # Reconciliation Edict + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3600 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0028 = { # Eightfold Path + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3700 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0029 = { # Grove Guardians + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3800 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0030 = { # Vow of Stillness + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3900 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0031 = { # Stone-laying + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4000 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0032 = { # Laughing Ascetic + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4100 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0033 = { # Spirit Decoy + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4200 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0034 = { # Game of Wit + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4300 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0035 = { # Divine Thief + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4400 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0036 = { # Trickster's Trial + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4500 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0037 = { # Festival of Reversal + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4600 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0038 = { # Goat Oracle + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4700 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0039 = { # Beasts in the Jungle + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4800 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0040 = { # River Naga + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4900 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} + +mandala_realm_contract_0041 = { # Promised Land + group = mandala_realm_group + icon = "gfx/interface/icons/government_types/mandala_government.dds" + use_diplomatic_range = no + travel = no + + valid_to_create = { mandala_task_contract_valid_to_create_trigger = yes } + + valid_to_accept = { + num_taken_task_contracts < 1 + government_has_flag = government_is_mandala + is_available = yes + } + + valid_to_continue = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_continue_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + valid_to_keep = { + save_temporary_scope_as = task_contract + task_contract_taker = { + mandala_task_contract_valid_to_keep_trigger = yes + trigger_if = { + limit = { + any_character_active_contract = { this = scope:task_contract } + } + current_travel_plan ?= { + OR = { + any_future_path_location = { this = scope:task_contract.task_contract_location } + any_visited_location = { this = scope:task_contract.task_contract_location } + } + } + } + } + } + + on_create = { + scope:contract = { + mandala_set_ritual_variables_effect = yes + choose_address_mandala_effect = yes + } + } + + on_accepted = { + save_scope_as = task_contract + task_contract_taker = { + play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:task_contract.task_contract_location + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.5000 + } + } + } + + on_completed = { + mandala_contract_clean_up_location_effect = yes + } + + on_invalidated = { + mandala_contract_clean_up_location_effect = yes + } + + task_contract_reward = { + common_mandala = { + effect = { + custom_tooltip = mandala_generic_reward_tt + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { mandala_contract_failure_standard_reward_effect = yes } + } + } + } +} diff --git a/common/task_contracts/tgp_natural_disaster_contracts.txt b/common/task_contracts/tgp_natural_disaster_contracts.txt new file mode 100644 index 00000000..93cf2c59 --- /dev/null +++ b/common/task_contracts/tgp_natural_disaster_contracts.txt @@ -0,0 +1,685 @@ +#TODO_CD_TGP_AJ; merit needs to be added for all relevant options (positive and negative) for use in China +tgp_food_shortage = { #Food Shortage + group = admin_governance_group + icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_natural_disaster_contract_event.0001 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards + } + } + failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt + } + } + distribution_of_food = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + add_character_modifier = { + modifier = tgp_distribution_of_food_character_modifier + years = 10 + } + change_influence = minor_influence_loss + every_vassal = { + limit = { + is_adult = yes + } + add_stress = minor_stress_impact_gain + remove_short_term_gold = minor_gold_value + } + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_distribution_of_food_modifier + years = 10 + } + } + } + } + pay_from_own_pocket = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_learning_lifestyle_xp = minor_lifestyle_xp + add_piety = minor_piety_gain + add_character_modifier = { + modifier = tgp_pay_from_own_pocket_character_modifier + years = 10 + } + remove_short_term_gold = medium_gold_value + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_pay_from_own_pocket_modifier + years = 10 + } + } + } + } + haggle_with_merchants = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0002.c.tt.success + left_icon = scope:task_contract.task_contract_taker + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_haggle_with_merchants_modifier + years = 10 + } + } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + remove_short_term_gold = minor_gold_value + } + } + } + } + haggle_with_merchants_failure = { + visible = no + effect = { + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0002.c.tt.failure + left_icon = scope:task_contract.task_contract_taker + add_prestige = minor_prestige_loss + } + } + } + } + demand_food_from_nobles = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = minor_influence_loss + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_demand_food_from_nobles_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_loss + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +tgp_ravaged_buildings = { #Destroyed by Nature + group = admin_governance_group + icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_natural_disaster_contract_event.0005 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards + } + } + failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt + } + } + rebuild_settlement = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + add_character_modifier = { + modifier = tgp_rebuild_settlement_character_modifier + years = 10 + } + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_rebuild_settlement_modifier + years = 10 + } + } + } + } + temporary_shelters = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + add_piety = minor_piety_gain + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_temporary_shelters_modifier + years = 10 + } + } + } + } + remove_debris = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0006.c.tt.success + left_icon = scope:task_contract.task_contract_taker + add_piety = minor_piety_gain + add_stewardship_lifestyle_xp = minor_lifestyle_xp + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_remove_debris_modifier + years = 10 + } + } + } + } + } + } + remove_debris_failure = { + visible = no + effect = { + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0006.c.tt.failure + left_icon = root + change_influence = minor_influence_loss + } + } + } + } + labor_exchange = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_character_modifier = { + modifier = tgp_labor_exchange_character_modifier + years = 10 + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_loss + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +tgp_medieval_medicine = { #Treating the Unfortunate + group = admin_governance_group + icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_natural_disaster_contract_event.0010 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards + } + } + failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt + } + } + assisting_physician = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + increase_governance_effect = { VALUE = 10 } + if = { + limit = { + employs_court_position = court_physician_court_position + } + random = { + chance = 50 + court_position:court_physician_court_position = { + add_learning_skill = 1 + } + add_learning_lifestyle_xp = medium_lifestyle_xp + } + } + } + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_assisting_physician_modifier + years = 10 + } + } + } + } + medical_assistance = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0011.b.tt.success + left_icon = scope:task_contract.task_contract_taker + add_character_modifier = { + modifier = tgp_medical_assistance_character_modifier + years = 10 + } + add_learning_lifestyle_xp = minor_lifestyle_xp + add_piety = minor_piety_gain + } + } + } + } + medical_assistance_failure = { + visible = no + effect = { + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0011.b.tt.failure + left_icon = scope:task_contract.task_contract_taker + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_medical_assistance_modifier + years = 10 + } + } + } + } + } + } + prayers_to_the_people = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_learning_lifestyle_xp = minor_lifestyle_xp + add_piety = minor_piety_gain + add_character_modifier = { + modifier = tgp_prayers_to_the_people_character_modifier + years = 10 + } + } + } + } + better_pay_up = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + add_piety = medium_piety_loss + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_loss + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} + +tgp_disaster_displacement = { #Provisional Relocation + group = admin_governance_group + icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds" + + valid_to_create = { + valid_governor_contract_trigger = yes + } + + valid_to_keep = { + task_contract_taker = { valid_governor_contract_trigger = yes } + valid_governor_contract_basic_trigger = yes + } + + valid_to_accept = { + valid_governor_contract_trigger = yes + custom_tooltip = { + text = has_active_governance_issue + num_taken_task_contracts < 1 + } + is_available = yes + } + + valid_to_continue = { + task_contract_taker = { + valid_governor_contract_trigger = yes + } + } + + on_accepted = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + root.task_contract_location.barony = { + save_scope_as = task_contract_location + } + trigger_event = tgp_natural_disaster_contract_event.0015 + } + } + + on_completed = { + } + + on_invalidated = { + if = { + limit = { governor_contract_invalidated_message_trigger = yes } + governor_contract_invalidated_message_effect = yes + } + } + + task_contract_reward = { + success = { + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards + } + } + failure = { + positive = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt + } + } + deployed_troops = { # Good governance option + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0016.a.tt.success + left_icon = scope:task_contract.task_contract_taker + increase_governance_effect = { VALUE = 10 } + add_martial_lifestyle_xp = medium_lifestyle_xp + add_character_modifier = { + modifier = tgp_deployed_troops_character_modifier + years = 10 + } + } + } + } + } + deployed_troops_failure = { + visible = no + effect = { + save_scope_as = task_contract + task_contract_taker ?= { + send_interface_toast = { + title = tgp_natural_disaster_contract_event.0016.a.tt.failure + left_icon = scope:task_contract.task_contract_taker + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_deployed_troops_modifier + years = 10 + } + } + } + } + } + } + setting_an_example = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_dread = medium_dread_gain + add_character_modifier = { + modifier = tgp_setting_an_example_character_modifier + years = 10 + } + } + } + } + confiscate_for_personal_inspection = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + add_gold = medium_gold_value + add_piety = medium_piety_loss + } + } + } + paying_off_the_looters = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + remove_short_term_gold = medium_gold_value + scope:task_contract.task_contract_location.county = { + add_county_modifier = { + modifier = tgp_paying_off_the_looters_modifier + years = 10 + } + } + } + } + } + failure_standard = { + visible = no + effect = { + task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" } + save_scope_as = task_contract + task_contract_taker ?= { + change_influence = { + value = medium_influence_loss + multiply = governance_task_contract_tier_value + } + add_piety = { + value = minor_piety_loss + multiply = governance_task_contract_tier_value + } + } + } + } + } +} diff --git a/events/courtier_guest_management_events/courtier_guest_management_events.txt b/events/courtier_guest_management_events/courtier_guest_management_events.txt new file mode 100644 index 00000000..c9b9b0b3 --- /dev/null +++ b/events/courtier_guest_management_events/courtier_guest_management_events.txt @@ -0,0 +1,1389 @@ +namespace = courtier_guest_management + +#COURTIERS/GUESTS LEAVING +# 0001 - Courtier is planning to leave +# 0102 - Courtier with claim is wanting to leave +# 0500 - Guests leaves +# 0999 - Maintenance - Force move to pool + +#GUESTS ARRIVING +# 1001 - Guest arriving, message if they're great + +#POOL CHARACTERS +# 2001 - "Develops" the character and gives those without location a location +# 2002 - Pool repopulation + +#COURTIERS AND GUESTS DOING STUFF +# 3001 - Sets relationships and other secrets + + + + + + +############################ +# COURTIERS/GUESTS LEAVING # +############################ + +#Courtier is planning to leave +courtier_guest_management.0001 = { + hidden = yes + + trigger = { + any_in_list = { + list = characters + is_child_of = scope:liege + } + } + + immediate = { + #Send message about child about to leave + every_in_list = { + list = characters + limit = { is_child_of = scope:liege } + + save_scope_as = child + scope:liege = { + send_interface_message = { + type = character_preparing_to_leave + title = courtier_guest_management.0001.t + desc = courtier_guest_management.desc + left_icon = scope:child + } + } + } + } +} + +# this = claimed title scope +# CLAIMANT = claimant +# RULER = ruler for claimant +scripted_trigger useful_courtier_claim_can_declare_for = { + neighboring_useful_courtier_or_guest_claim_trigger = { RULER = $RULER$ } + save_temporary_scope_as = claim_title + $RULER$ = { + can_declare_war = { + defender = scope:claim_title.holder + claimant = $CLAIMANT$ + casus_belli = claim_cb + target_titles = { scope:claim_title } + } + } +} + +#Courtier is leaving +courtier_guest_management.0101 = { + hidden = yes + + immediate = { + #Liege gets "last chance to make them stay"-event for claimants + if = { + limit = { + scope:liege = { is_ai = no } + any_in_list = { + list = characters + save_temporary_scope_as = check_character + any_claim = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:check_character + RULER = scope:liege + } + } + } + } + random_in_list = { + list = characters + limit = { + save_temporary_scope_as = check_character + any_claim = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:check_character + RULER = scope:liege + } + tier = tier_kingdom + } + } + alternative_limit = { + save_temporary_scope_as = check_character + any_claim = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:check_character + RULER = scope:liege + } + tier = tier_duchy + } + } + alternative_limit = { + save_temporary_scope_as = check_character + any_claim = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:check_character + RULER = scope:liege + } + tier = tier_county + } + } + save_scope_as = courtier + scope:liege = { trigger_event = courtier_guest_management.0102 } + } + } + else = { + move_to_pool_effect = yes + } + } +} + + +#Courtier with claim is wanting to leave +courtier_guest_management.0102 = { #by Mathilda Bjarnehed + type = character_event + title = courtier_guest_management.0102.t + desc = courtier_guest_management.0102.desc + left_portrait = scope:courtier + right_portrait = scope:courtier_claim + theme = crown + override_background = { + reference = courtyard + } + + trigger = { + scope:courtier = { + any_claim = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:courtier + RULER = scope:liege + } + } + is_pool_character = no + } + } + + immediate = { + #For text + scope:courtier = { + random_claim = { + limit = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:courtier + RULER = scope:liege + } + tier = tier_empire + } + alternative_limit = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:courtier + RULER = scope:liege + } + tier = tier_kingdom + } + alternative_limit = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:courtier + RULER = scope:liege + } + tier = tier_duchy + } + alternative_limit = { + useful_courtier_claim_can_declare_for = { + CLAIMANT = scope:courtier + RULER = scope:liege + } + tier = tier_county + } + save_scope_as = courtier_claim + } + } + + capital_province = { barony = { save_scope_as = capital } } + } + + #Yes, I promise + option = { + name = courtier_guest_management.0102.a + + show_as_tooltip = { + random_list = { + desc = courtier_guest_management.0102.a.rl.desc + 1 = { + show_chance = no + desc = courtier_guest_management.0102.a.stay + custom_tooltip = courtier_guest_management.0102.a.stay.tt + } + 1 = { + show_chance = no + desc = courtier_guest_management.0102.a.leave + scope:courtier = { select_and_move_to_pool_effect = yes } + } + } + } + + hidden_effect = { + scope:courtier = { + add_character_flag = { + flag = courtier_staying_for_claim + years = 1 + } + trigger_event = { + id = courtier_guest_management.0103 + years = 1 + } + } + } + } + + #No, I cannot + option = { + name = courtier_guest_management.0102.b + + scope:courtier = { select_and_move_to_pool_effect = yes } + } +} + +#Did liege fulfill their promise to courtier claimant? +courtier_guest_management.0103 = { + hidden = yes + + trigger = { + exists = scope:liege + is_courtier_of = scope:liege + NOT = { + scope:liege = { + any_character_war = { + casus_belli = { + any_target_title = { + scope:courtier = { has_claim_on = prev } + } + } + } + } + } + } + + immediate = { + select_and_move_to_pool_effect = yes + } +} + + +#Guest leaves +courtier_guest_management.0500 = { + hidden = yes + + immediate = { + if = { # Warning if they take your kids with them + limit = { + NOT = { has_character_flag = guest_has_given_warning_about_leaving } + #To double check that they actually can leave + is_pool_guest_of = scope:host + scope:host = { is_ai = no } + any_traveling_family_member = { + count = all + guest_allowed_to_leave_trigger = yes + } + OR = { + AND = { + OR = { + has_trait = bastard + has_trait = wild_oat + } + any_parent = { this = scope:host } + } + any_traveling_family_member = { + OR = { + has_trait = bastard + has_trait = wild_oat + } + any_parent = { this = scope:host } + } + scope:host = { + any_known_secret = { + OR = { + secret_type = secret_disputed_heritage + secret_type = secret_unmarried_illegitimate_child + } + OR = { + secret_target = { + this = root + is_adult = no + } + secret_target = { + save_temporary_scope_as = target_check + root = { + any_traveling_family_member = { + this = scope:target_check + is_adult = no + } + } + } + } + } + } + } + } + scope:host = { + send_interface_message = { + type = character_preparing_to_leave + title = courtier_guest_management.0500.t + desc = courtier_guest_management.0500.desc + left_icon = root + } + } + add_character_flag = { + flag = guest_has_given_warning_about_leaving + days = 35 + } + trigger_event = { + id = courtier_guest_management.0500 + days = { 25 30 } #You get about a month to decide if you wanna keep them around! + } + } + else = { + if = { + limit = { + has_character_flag = guest_has_given_warning_about_leaving + } + remove_character_flag = guest_has_given_warning_about_leaving + + # Now a month out of date, so lets update it + select_pool_to_move_to_effect = yes + } + move_to_pool_effect = yes + } + } +} + +# Maintenance - Force move to pool +courtier_guest_management.0999 = { + hidden = yes + + immediate = { + select_and_move_to_pool_effect = yes + } +} + + + +################### +# GUESTS ARRIVING # +################### + +#Guest arriving, message if they're great +scripted_trigger courtier_guest_management_1001_exceptional_claimant_trigger = { + any_claim = { neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host } } +} + +scripted_trigger courtier_guest_management_1001_exceptional_marriage_candidate_trigger = { + save_temporary_scope_as = marriage_candidate + guest_marriage_candidate_trigger = yes + age > 14 + OR = { + num_of_good_genetic_traits = 3 + AND = { + num_of_good_genetic_traits = 2 + OR = { + has_trait = beauty_good_3 + has_trait = intellect_good_3 + has_trait = physique_good_3 + } + } + scope:host = { + can_marry_character_trigger = { CHARACTER = scope:marriage_candidate } + marriage_between_characters_unlocks_alliance_of_min_tier_trigger = { + MY_CHARACTER = scope:host + THEIR_CHARACTER = scope:marriage_candidate + TIER = scope:host.highest_held_title_tier + } + } + dynasty ?= { dynasty_prestige_level >= high_dynasty_prestige_level } + has_useful_potential_spouse_claim_trigger = { RULER = scope:host } + calc_true_if = { + amount >= 2 + num_of_good_genetic_traits = 2 + AND = { + num_of_good_genetic_traits = 1 + OR = { + has_trait = beauty_good_2 + has_trait = intellect_good_2 + has_trait = physique_good_2 + } + } + dynasty ?= { dynasty_prestige_level > medium_dynasty_prestige_level } + } + calc_true_if = { + amount >= 3 + dynasty ?= { dynasty_prestige_level > low_dynasty_prestige_level } + num_of_good_genetic_traits = 1 + diplomacy >= high_skill_rating + martial >= high_skill_rating + stewardship >= high_skill_rating + intrigue >= high_skill_rating + learning >= high_skill_rating + } + } + NOR = { + num_of_bad_genetic_traits > 1 + is_lowborn = yes + } +} + +scripted_trigger courtier_guest_management_1001_exceptional_commander_trigger = { + guest_commander_candidate_trigger = { HOST = scope:host } + number_of_commander_traits >= 1 + martial >= very_high_skill_rating +} + +scripted_trigger courtier_guest_management_1001_exceptional_vassal_trigger = { + guest_vassal_candidate_trigger = yes + opinion = { + target = scope:host + value >= medium_positive_opinion + } + calc_true_if = { + amount >= 2 + OR = { + has_trait = content + has_trait = trusting + has_trait = humble + } + martial >= high_skill_rating + stewardship >= high_skill_rating + } +} + +scripted_trigger courtier_guest_management_1001_exceptional_knight_trigger = { + guest_knight_candidate_trigger = { HOST = root } + prowess >= very_high_skill_rating +} + +scripted_trigger courtier_guest_management_1001_exceptional_physician_trigger = { + guest_physician_candidate_trigger = yes + OR = { + has_trait = lifestyle_mystic + has_trait = lifestyle_physician + has_trait = lifestyle_herbalist + } + learning >= high_skill_rating +} + + + +courtier_guest_management.1001 = { + hidden = yes + + immediate = { + scope:guest = { + every_traveling_family_member = { + add_to_temporary_list = guest_arrival_list + } + } + + # To update Adventure Inspiration to make sure that the target destination isn't in the realm they just arrived to. If it is we remove it and make them pick a new destination! + every_in_list = { + list = guest_arrival_list + limit = { + inspiration ?= { has_inspiration_type = adventure_inspiration } + exists = var:adventure_destination #They know where they want to go + } + get_adventure_inspiration_start_location = { ADVENTURER = this } + if = { + limit = { + scope:host = { + any_sub_realm_county = { + this = scope:location.county + } + } + } + remove_variable = adventure_destination + if = { + limit = { + adventure_inspiration_average_skill_value >= high_inspiration_skill + } + set_adventure_location_effect = { + BASE_SCOPE = this + NO_DESTINATION = yes + } + } + else = { + set_adventure_location_effect = { + BASE_SCOPE = this + NO_DESTINATION = no + } + } + } + } + + ###DEVELOPMENT EFFECT### + #Because the characters spend so little time in the pool, we also run it now + + every_in_list = { # Very performance-intensive, so we restrict it as much as possible at this step. + list = guest_arrival_list + limit = { + is_adult = yes + is_lowborn = no + is_physically_able = yes + } + pool_character_development_effect = yes + if = { + limit = { + gold >= 1000 + } + purge_excess_wanderer_riches_effect = yes + } + } + + ###EXCEPTIONAL GUEST TOAST### + if = { + limit = { scope:host = { is_ai = no } } #This is just interface messages, AI doesn't care + + every_in_list = { + list = guest_arrival_list + limit = { + courtier_guest_management_1001_exceptional_claimant_trigger = yes + } + save_scope_as = exceptional_guest + + #CLAIMANT MESSAGE + if = { + limit = { courtier_guest_management_1001_exceptional_claimant_trigger = yes } + random_claim = { + limit = { + neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host } + tier = tier_kingdom + scope:host.highest_held_title_tier > tier_kingdom + } + alternative_limit = { + neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host } + tier = tier_duchy + scope:host.highest_held_title_tier > tier_duchy + } + alternative_limit = { + neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host } + tier = tier_county + scope:host.highest_held_title_tier > tier_county + } + save_scope_as = guest_claim + } + scope:host = { + send_interface_toast = { + type = msg_notable_guest + left_icon = scope:exceptional_guest + right_icon = scope:guest_claim + title = courtier_guest_management.1001.t + desc = courtier_guest_management.1001.claimant.desc + } + } + } + } + } + } +} + +################### +# POOL CHARACTERS # +################### + +#This events gives pool characters relations, skills, traits and secrets. If they lack a location, they're given a location. +courtier_guest_management.2001 = { + hidden = yes + trigger = { + is_pool_character = yes # Can cease to be in the pool between it queuing and executing + } + + immediate = { + #Am I lost in the void? + if = { + limit = { NOT = { exists = location } } + + #Oops, no good! Go someplace. (family is also moved with this effect) + fallback_move_to_pool_effect = yes + } + + #Don't I have the "last_visited_ruler" variable? (= it ran out or I'm from some weird source that doesn't set var) + if = { + limit = { NOT = { exists = var:last_visited_ruler } } + + if = { # If character is prune-able, prune. + limit = { + pool_character_is_pruneable_trigger = yes + } + if = { + limit = { + culture = { + has_cultural_tradition = tradition_diasporic + } + is_adult = yes + is_lowborn = no + age < 45 + } + random_list = { + 10 = { + save_scope_as = minority_leader + if = { + limit = { + player_heir ?= { + this != root + is_adult = yes + } + } + player_heir = { + save_scope_as = laamp_heir + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_minority_decision_title_scope_tt + } + } + else_if = { + limit = { top_liege != this } + liege = { + save_scope_as = laamp_liege + save_scope_as = laamp_inheritor + custom_tooltip = become_landless_minority_decision_title_scope_tt + } + } + else = { + custom_tooltip = become_landless_minority_decision_title_created_tt + if = { + limit = { + NOT = { exists = scope:laamp_inheritor } + } + hidden_effect_new_object = { + create_character = { + template = laamp_inheritor_template + culture = root.culture + faith = root.faith + dynasty = generate + location = root.capital_province + after_creation = { + save_scope_as = laamp_inheritor + add_character_flag = new_laamp_inheritor + } + } + } + } + } + create_landless_minority_title_tooltip_effect = yes + show_as_tooltip = { + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_voluntary_laamp_character_modifier + years = 5 + } + } + 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_minority_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 + } + } + hidden_effect = { + every_held_title = { + limit = { + is_noble_family_title = yes + } + root = { destroy_title = prev } + } + } + # Debug tracking + if = { + limit = { + is_ai = yes + debug_only = yes + } + if = { + limit = { exists = global_var:ai_voluntary_laamp_count } + change_global_variable = { + name = ai_voluntary_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_voluntary_laamp_count + value = 1 + } + } + debug_log = "AI became adventurer voluntarily" + debug_log_scopes = yes + } + stress_impact = { + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + } + 60 = { + } + 30 = { + death = { death_reason = death_accident } + } + } + } + else_if = { + limit = { age < 65 } + death = { death_reason = death_accident } + } + else = { + death = { death_reason = death_old_age } + } + } + else = { # Otherwise, go somewhere else. + fallback_move_to_pool_effect = yes + } + } + + if = { + limit = { is_alive = yes } #Because we might just have killed you and then 🎵nothing else matters🎵 + + #Develop + random = { # Very performance-intensive, so we restrict it as much as possible at this step. + chance = 50 + if = { + limit = { + static_group_filter = { + group = random_dev_blocker + match = 0.8 + } + is_adult = yes + is_lowborn = no + is_physically_able = yes + } + pool_character_development_effect = yes + } + } + if = { + limit = { + gold >= 1000 + } + purge_excess_wanderer_riches_effect = yes + } + + #Is my pool full? Then move + if = { + limit = { + location = { + exists = province_owner + local_pool_is_full_trigger = yes + } + } + + location.province_owner = { + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + capital_province ?= { local_pool_is_full_trigger = no } + } + capital_province = { save_scope_as = destination } + } + } + + if = { + limit = { exists = scope:destination } + every_traveling_family_member = { + limit = { NOT = { is_in_pool_at = scope:destination } } + move_to_pool_at = scope:destination + } + } + else = { + fallback_move_to_pool_effect = yes + } + } + } + + } +} + +#################################### +# COURTIERS AND GUESTS DOING STUFF # +#################################### + +scripted_trigger courtier_guest_management_3001_best_friend_trigger = { + opinion = { + target = scope:current_character + value >= high_positive_opinion + } + reverse_opinion = { + target = scope:current_character + value >= high_positive_opinion + } +} + +scripted_trigger courtier_guest_management_3001_soulmate_trigger = { + opinion = { + target = scope:current_character + value >= high_positive_opinion + } + reverse_opinion = { + target = scope:current_character + value >= high_positive_opinion + } +} + +scripted_trigger courtier_guest_management_3001_nemesis_trigger = { + opinion = { + target = scope:current_character + value <= high_negative_opinion + } + reverse_opinion = { + target = scope:current_character + value <= high_negative_opinion + } +} + +scripted_trigger courtier_guest_management_3001_interesting_trigger = { + OR = { + is_lowborn = no + has_trait = intellect_good + has_trait = physique_good + has_trait = beauty_good + diplomacy >= high_skill_rating + martial >= high_skill_rating + stewardship >= high_skill_rating + intrigue >= high_skill_rating + learning >= high_skill_rating + is_witch_trigger = yes + is_deviant_trigger = yes + } +} + +courtier_guest_management.3001 = { + hidden = yes + + immediate = { + every_courtier_or_guest = { + limit = { + age >= childhood_education_start_age + NOT = { has_trait = incapable } + } + add_to_list = courtiers_and_guests + } + + #Am I a player? Extra fun stuff + if = { + limit = { is_ai = no } + + save_scope_as = root_scope + random_list = { + 2 = { #Seduce + modifier = { + OR = { + has_trait = lustful + has_trait = seducer + has_focus = intrigue_temptation_focus + } + add = 3 + } + random_in_list = { + list = courtiers_and_guests + limit = { + save_temporary_scope_as = instigating_courtier + are_characters_sensible_lovers_trigger = { INSTIGATING_LOVER = scope:instigating_courtier TARGET_OF_LOVE = scope:root_scope } + can_start_scheme = { + type = seduce + target_character = root + } + } + weight = { + base = 100 + opinion_modifier = { + opinion_target = root + multiplier = 5 + } + compatibility_modifier = { + compatibility_target = root + multiplier = 20 + } + ai_value_modifier = { + ai_sociability = 1 + } + modifier = { + has_relation_potential_lover = root + add = 500 + } + + modifier = { + add = { + value = attraction + divide = high_positive_attraction + multiply = 50 + } + } + modifier = { + has_trait = lustful + factor = 1.5 + } + } + start_scheme = { + type = seduce + target_character = root + } + } + } + 2 = { #Romance + modifier = { + OR = { + has_trait = gallant + has_focus = martial_chivalry_focus + } + add = 3 + } + random_in_list = { + list = courtiers_and_guests + limit = { + save_temporary_scope_as = instigating_courtier + are_characters_sensible_and_appropriate_open_lovers_trigger = { INSTIGATING_LOVER = scope:instigating_courtier TARGET_OF_LOVE = scope:root_scope } + can_start_scheme = { + type = courting + target_character = root + } + } + weight = { + base = 100 + opinion_modifier = { + opinion_target = root + multiplier = 5 + } + compatibility_modifier = { + compatibility_target = root + multiplier = 20 + } + modifier = { + has_relation_potential_lover = root + add = 500 + } + modifier = { + is_knight = yes + add = 200 + } + ai_value_modifier = { + ai_honor = 2 + ai_sociability = 1 + } + } + start_scheme = { + type = courting + target_character = root + } + } + } + 96 = { } #Nothing + } + } + + # Every courtier gets a chance to do something (relations also include guests) + every_in_list = { + list = courtiers_and_guests + limit = { NOT = { is_in_list = already_updated } } #If another character set a relation with you, you don't get to run your own update. (However, we don't want to block you from being selected by other characters if you are the best alternative.) + + save_scope_as = current_character + + random = { + chance = 5 + modifier = { #More should happen in player's court! + root = { is_ai = no } + is_courtier_of = root + add = 15 + } + + random_list = { + ### RELATIONS ### + # Friend + 100 = { + ai_value_modifier = { + ai_compassion = 0.8 + ai_sociability = 2 + } + trigger = { + any_relation = { + type = friend + count <= 2 + } + } + + random_in_list = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:current_character } + } + list = courtiers_and_guests + weight = { + base = 100 + compatibility_modifier = { + who = this + compatibility_target = scope:current_character + multiplier = 20 + } + modifier = { + has_relation_potential_friend = scope:current_character + add = 500 + } + } + + add_to_list = already_updated + set_random_friendship_reason = { TARGET = scope:current_character } + } + } + # Lover + 50 = { + ai_value_modifier = { + ai_sociability = 1.5 + } + modifier = { + has_trait = lustful + add = 150 + } + modifier = { + OR = { + any_relation = { type = soulmate always = yes } + is_married = yes + } + ai_honor >= 0 + add = -150 + } + modifier = { + add = { + value = attraction + divide = high_positive_attraction + multiply = 50 + } + } + trigger = { + is_married = no + is_concubine = no + might_cheat_on_every_partner_trigger = yes + NOR = { + has_trait = chaste + has_trait = celibate + has_sexuality = asexual + } + trigger_if = { + limit = { + is_courtier = yes + is_close_or_extended_family_of = liege + } + OR = { + has_trait = lustful + is_deviant_trigger = yes + } + } + any_relation = { + type = lover + count < 1 + } + } + + random_in_list = { + limit = { + is_married = no + is_concubine = no + might_cheat_on_every_partner_trigger = yes + NOR = { + has_trait = chaste + has_trait = celibate + has_sexuality = asexual + } + any_relation = { + type = lover + count < 1 + } + trigger_if = { + limit = { + is_courtier = yes + is_close_or_extended_family_of = liege + } + scope:current_character = { is_lowborn = no } + OR = { + is_deviant_trigger = yes + has_trait = lustful + trait_compatibility = { + target = scope:current_character + value >= high_positive_trait_compatibility + } + } + } + this != scope:current_character + can_set_relation_lover_trigger = { CHARACTER = scope:current_character } + is_attracted_to_gender_of = scope:current_character + scope:current_character = { is_attracted_to_gender_of = prev } + age <= scope:current_character.age_plus_5 + age >= scope:current_character.age_minus_10 + trait_compatibility = { + target = scope:current_character + value >= low_positive_trait_compatibility + } + save_temporary_scope_as = incest_check + accepts_incest_with_each_other_trigger = { + CHARACTER_1 = scope:incest_check + CHARACTER_2 = scope:current_character + } + } + list = courtiers_and_guests + weight = { + base = 100 + compatibility_modifier = { + who = this + compatibility_target = scope:current_character + multiplier = 20 + } + modifier = { + has_relation_potential_lover = scope:current_character + add = 500 + } + modifier = { + add = { + value = attraction + divide = high_positive_attraction + multiply = 50 + } + } + modifier = { + has_trait = lustful + factor = 2 + } + } + + add_to_list = already_updated + + set_random_lover_reason = { TARGET = scope:current_character } + } + } + + # Rival + 50 = { + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 2 + } + trigger = { + any_relation = { + type = rival + count <= 1 + } + ai_vengefulness >= low_negative_ai_value + } + + random_in_list = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:current_character } + } + list = courtiers_and_guests + weight = { + base = 100 + opinion_modifier = { + trigger = { root = { is_ai = no } } + who = this + opinion_target = scope:current_character + multiplier = -5 + } + opinion_modifier = { + trigger = { root = { is_ai = no } } + who = scope:current_character + opinion_target = this + multiplier = -5 + } + compatibility_modifier = { + who = this + compatibility_target = scope:current_character + multiplier = -20 + } + modifier = { + has_relation_potential_rival = scope:current_character + add = 500 + } + } + + add_to_list = already_updated + set_random_rivalry_reason = { + TARGET = scope:current_character + RELATION = rival + } + } + } + # Best friend + 50 = { + trigger = { + any_relation = { + type = friend + courtier_guest_management_3001_best_friend_trigger = yes + can_set_relation_best_friend_trigger = { CHARACTER = scope:current_character } + } + } + random_relation = { + type = friend + limit = { + courtier_guest_management_3001_best_friend_trigger = yes + can_set_relation_best_friend_trigger = { CHARACTER = scope:current_character } + } + + add_to_list = already_updated + set_relation_best_friend = { reason = best_friend_bonded_at_court copy_reason = friend target = scope:current_character involved_character = root.liege } + } + } + # Soulmate + 25 = { + trigger = { + any_relation = { + type = lover + courtier_guest_management_3001_soulmate_trigger = yes + can_set_relation_soulmate_trigger = { CHARACTER = scope:current_character } + } + } + random_relation = { + type = lover + limit = { + courtier_guest_management_3001_soulmate_trigger = yes + can_set_relation_soulmate_trigger = { CHARACTER = scope:current_character } + } + + add_to_list = already_updated + set_relation_soulmate = { reason = soulmate_love_at_court copy_reason = lover target = scope:current_character } + } + } + # Nemesis + 25 = { + trigger = { + any_relation = { + type = rival + courtier_guest_management_3001_nemesis_trigger = yes + can_set_relation_nemesis_trigger = { CHARACTER = scope:current_character } + } + } + random_relation = { + type = rival + limit = { + courtier_guest_management_3001_nemesis_trigger = yes + can_set_relation_nemesis_trigger = { CHARACTER = scope:current_character } + } + + add_to_list = already_updated + set_relation_nemesis = { + reason = nemesis_at_court + copy_reason = rival + target = scope:current_character + } + } + } + + ### SECRETS ### + 30 = { + trigger = { + NOT = { any_secret = { always = yes } } + is_adult = yes + } + courtier_guest_pool_character_secret_giving_effect = yes + } + } + } + + } + } +} + +############################ +# WANDERER INTO ADVENTURER # +############################ + +courtier_guest_management.4001 = { + hidden = yes + trigger = { + has_ep3_dlc_trigger = yes + is_pool_character = yes # Can cease to be in the pool between it queuing and executing + ai_can_valid_to_create_laamp_trigger = yes + is_valid_for_laampdom = yes + OR = { + has_character_flag = easteregg + has_trait = historical_character + culture = { + has_cultural_parameter = much_more_likely_to_be_laamps + } + AND = { + is_lowborn = no + culture = { + has_cultural_parameter = more_likely_to_be_laamps + } + } + any_claim = { tier >= tier_kingdom } + } + pool_character_is_pruneable_trigger = no # Avoid having uninteresting characters become Adventurers + is_ai = yes + NOT = { + any_heir_title = { } + } + } + + immediate = { + random = { + chance = 0 + modifier = { add = ep3_laamp_chance_score_value } + #Counteract bonus in above value somewhat + modifier = { + culture = { has_cultural_parameter = more_likely_to_be_laamps } + add = -75 + } + modifier = { + has_trait = historical_character + add = 150 + } + create_landless_adventurer_title_effect = { + REASON = flag:wanderer + FLAVOR_CHAR = root + } + trigger_event = ep3_laamps.0003 + if = { # Debug AI tracking + limit = { debug_only = yes } + if = { + limit = { exists = global_var:ai_wanderer_laamp_count } + change_global_variable = { + name = ai_wanderer_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_wanderer_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 index 967db813..ab7471ba 100644 --- a/events/dlc/ep3/ep3_laamp_events.txt +++ b/events/dlc/ep3/ep3_laamp_events.txt @@ -1175,6 +1175,124 @@ ep3_laamps.0032 = { } } +ep3_laamps.1030 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.1030.t + desc = { + desc = ep3_laamps.1030.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:laamp_heir } + desc = ep3_laamps.1030.heir + } + triggered_desc = { + trigger = { exists = scope:laamp_liege } + desc = ep3_laamps.1030.liege + } + desc = ep3_laamps.1030.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 = { + # 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_minority_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.1032 } + adventurer_prestige_reset_effect = yes + hidden_effect = { + every_held_title = { + limit = { + is_noble_family_title = yes + } + root = { destroy_title = prev } + } + } + } + + option = { + name = ep3_laamps.1030.a + create_landless_minority_title_tooltip_effect = yes + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_voluntary_laamp_character_modifier + years = 5 + } + } +} + +# Liege event +ep3_laamps.1032 = { + type = letter_event + opening = ep3_laamps.1032.opening + desc = ep3_laamps.1032.desc + sender = scope:minority_leader + + trigger = { is_ai = no } + + immediate = { + scope:minority_leader = { create_landless_minority_title_tooltip_effect = yes } + } + + option = { + name = ep3_laamps.1032.a + } +} ################################################## # Become Adventurer - Revocation # by Joe Parkin diff --git a/events/dlc/fp2/fp2_struggle_events.txt b/events/dlc/fp2/fp2_struggle_events.txt index fd8140b6..1993a47c 100644 --- a/events/dlc/fp2/fp2_struggle_events.txt +++ b/events/dlc/fp2/fp2_struggle_events.txt @@ -2054,7 +2054,6 @@ scripted_trigger neighboring_ruler_proper_culture_trigger = { culture = culture:baranis culture = culture:butr culture = culture:levantine - culture = culture:sephardi } } diff --git a/events/dlc/fp2/fp2_yearly_events.txt b/events/dlc/fp2/fp2_yearly_events.txt index 9075d9a1..ea1eee4d 100644 --- a/events/dlc/fp2/fp2_yearly_events.txt +++ b/events/dlc/fp2/fp2_yearly_events.txt @@ -5915,709 +5915,6 @@ fp2_yearly.8006 = { # Conversos and Jewish events # By James Beaumont ################################### -scripted_trigger valid_grantable_county_barony = { - title_province = { - geographical_region = world_europe_west_iberia - } - title_province = { has_building_or_higher = common_tradeport_01 } - is_holy_site = no - county.holder = { - any_held_title = { # Make sure it isn't revoking their last title - title_tier = county - count >= 2 - } - } -} - -fp2_yearly.9000 = { - type = character_event - title = fp2_james.0001.t - desc = fp2_james.0001.desc - theme = secret - override_background = { - reference = docks - } - left_portrait = { - character = root - animation = personality_rational - } - right_portrait = { - character = scope:fp2_james_0001_jewish_trader - animation = personality_bold - } - - trigger = { - NOT = { root.religion = religion:judaism_religion } - highest_held_title_tier >= tier_county - any_sub_realm_barony = { - valid_grantable_county_barony = yes - } - } - - immediate = { - random_sub_realm_barony = { - limit = { - valid_grantable_county_barony = yes - } - save_scope_as = fp2_james_0001_thriving_community - } - create_character = { - template = spanish_jewish_merchant_character - location = root.capital_province - save_scope_as = fp2_james_0001_jewish_trader - } - } - - option = { - name = fp2_james.0001.a - scope:fp2_james_0001_thriving_community.county = { - add_county_modifier = { - modifier = fp2_jewish_community_denied_modifier - years = 10 - } - } - scope:fp2_james_0001_jewish_trader.culture = { - change_cultural_acceptance = { - target = root.culture - value = low_negative_culture_acceptance - desc = cultural_acceptance_gain_conversos_tolerance - } - } - - stress_impact = { - callous = minor_stress_impact_loss - greedy = minor_stress_impact_gain - compassionate = medium_stress_impact_gain - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = -0.5 - ai_greed = -0.5 - ai_zeal = 1.5 - } - } - } - - option = { - name = fp2_james.0001.b - trigger = { - NOT = { # Prevent all of Iberia from converting - any_county_in_region = { - region = world_europe_west_iberia - culture = culture:sephardi - } - } - } - create_title_and_vassal_change = { - type = granted - save_scope_as = change - add_claim_on_loss = no - } - scope:fp2_james_0001_thriving_community.county = { - change_title_holder = { - holder = scope:fp2_james_0001_jewish_trader - change = scope:change - } - } - resolve_title_and_vassal_change = scope:change - hidden_effect = { - add_opinion = { - target = scope:fp2_james_0001_jewish_trader - modifier = received_title_county - } - } - scope:fp2_james_0001_thriving_community.county = { - add_county_modifier = { - modifier = fp2_thriving_jewish_community_modifier - years = 10 - } - set_county_culture = scope:fp2_james_0001_jewish_trader.culture - set_county_faith = scope:fp2_james_0001_jewish_trader.faith - } - scope:fp2_james_0001_jewish_trader.culture = { - change_cultural_acceptance = { - target = root.culture - value = medium_positive_culture_acceptance - desc = cultural_acceptance_gain_conversos_tolerance - } - } - - stress_impact = { - compassionate = minor_stress_impact_loss - greedy = minor_stress_impact_loss - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = 1.5 - ai_greed = 1.5 - ai_zeal = -0.5 - } - } - } - - option = { - name = fp2_james.0001.c - scope:fp2_james_0001_thriving_community.county = { - add_county_modifier = { - modifier = fp2_thriving_jewish_community_modifier - years = 10 - } - } - scope:fp2_james_0001_jewish_trader.culture = { - change_cultural_acceptance = { - target = root.culture - value = low_positive_culture_acceptance - desc = cultural_acceptance_gain_conversos_tolerance - } - } - - stress_impact = { - compassionate = minor_stress_impact_loss - greedy = minor_stress_impact_loss - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = 1.5 - ai_greed = 1.5 - ai_zeal = -0.5 - } - } - } -} - -scripted_effect fp2_polish_should_heritage_israelite_get_upset_effect = { - if = { - limit = { - scope:fp2_james_0002_conversos_character = { culture = { has_cultural_pillar = heritage_israelite } } - } - scope:fp2_james_0002_conversos_character.culture = { - change_cultural_acceptance = { - target = root.culture - value = low_negative_culture_acceptance - desc = cultural_acceptance_loss_conversos_tolerance - } - } - } -} - -# Suspect Conversos of secretly praciticing Judaism -fp2_yearly.9001 = { - type = character_event - title = fp2_james.0002.t - desc = fp2_james.0002.desc - theme = secret - override_background = { - reference = temple - } - left_portrait = { - character = root - animation = paranoia - } - right_portrait = { - character = scope:fp2_james_0002_conversos_character - animation = personality_cynical - } - - trigger = { - OR = { root.religion = religion:eastern_orthodox_religion root.religion = religion:catholic_religion root.religion = religion:protestant_religion } - is_landed = yes - NOT = { faith = faith:conversos } - } - - weight_multiplier = { - base = 1 - modifier = { - add = 1 - any_character_struggle = { - is_struggle_type = iberian_struggle - is_struggle_phase = struggle_iberia_phase_hostility - } - } - } - - immediate = { - every_sub_realm_county = { - limit = { - faith = faith:conversos - holder = { - liege = { # Don't convert player-Conversos territory - OR = { - is_ai = yes - NOT = { faith = faith:conversos } - } - } - } - } - add_to_list = fp2_james_0002_conversos_county - } - # Try to find a Conversos vassal if one exists - if = { - limit = { - any_vassal = { - faith = faith:conversos - is_available_ai = yes - } - } - random_vassal = { - limit = { - faith = faith:conversos - is_available_ai = yes - } - save_scope_as = fp2_james_0002_conversos_character - } - } - # Otherwise find a pool character - else_if = { - limit = { - any_pool_character = { - province = root.capital_province - faith = faith:conversos - } - } - random_pool_character = { - province = root.capital_province - limit = { - faith = faith:conversos - } - save_scope_as = fp2_james_0002_conversos_character - } - } - # Otherwise create one - else = { - create_character = { - template = spanish_conversos_character - location = root.capital_province - save_scope_as = fp2_james_0002_conversos_character - } - } - scope:fp2_james_0002_conversos_character = { - random_list = { - 50 = { - add_character_flag = is_secretly_jewish_flag - } - 50 = { - } - } - } - # Get a religion for them to potentially be secretly praciticing - religion:judaism_religion = { - random_faith = { - limit = { is_mainstream_jewish_faith = yes } - save_scope_as = fp2_james_0002_jewish_faith - } - } - } - - option = { - name = fp2_james.0002.a - custom_tooltip = fp2_james.0002.a.tt - hidden_effect = { - if = { - limit = { - scope:fp2_james_0002_conversos_character = { has_character_flag = is_secretly_jewish_flag } - } - send_interface_toast = { - type = event_toast_effect_good - title = fp2_james.0002.a.jewish_communities_thrive - every_in_list = { - list = fp2_james_0002_conversos_county - set_county_faith = scope:fp2_james_0002_jewish_faith - } - scope:fp2_james_0002_conversos_character = { - set_character_faith = scope:fp2_james_0002_jewish_faith - every_vassal = { - limit = { - faith = faith:conversos - is_available_ai = yes - } - set_character_faith = scope:fp2_james_0002_jewish_faith - } - } - } - } - else = { - send_interface_toast = { - type = event_toast_effect_good - title = fp2_james.0002.a.nothing_happened_toast - } - } - fp2_polish_should_heritage_israelite_get_upset_effect = yes - } - - stress_impact = { - zealous = medium_stress_impact_gain - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = -0.5 - ai_zeal = 1.5 - } - } - } - - option = { - name = fp2_james.0002.b - duel = { - skill = intrigue - target = scope:fp2_james_0002_conversos_character - - 50 = { - compare_modifier = { - value = scope:duel_value - multiplier = 3.5 - } - desc = fp2_james.0002.b.succesful_interrogation - - if = { - limit = { scope:fp2_james_0002_conversos_character = { has_character_flag = is_secretly_jewish_flag } } - - send_interface_message = { # Begrudgingly added "unecessary" polish - type = event_prison_good - title = fp2_james.0002.t - right_icon = scope:fp2_james_0002_conversos_character - - rightfully_imprison_character_effect = { - TARGET = scope:fp2_james_0002_conversos_character - IMPRISONER = root - } - fp2_polish_should_heritage_israelite_get_upset_effect = yes - } - } - else = { - send_interface_message = { - type = event_intrigue_bad - title = fp2_james.0002.a.offended_conversos - right_icon = scope:fp2_james_0002_conversos_character - - reverse_add_opinion = { - target = scope:fp2_james_0002_conversos_character - modifier = hate_opinion - opinion = -30 - } - fp2_polish_should_heritage_israelite_get_upset_effect = yes - } - } - } - 50 = { - compare_modifier = { - value = scope:duel_value - multiplier = -3.5 - } - desc = fp2_james.0002.b.failed_interrogation - send_interface_message = { - type = event_intrigue_bad - title = fp2_james.0002.a.offended_conversos - right_icon = scope:fp2_james_0002_conversos_character - - every_sub_realm_county = { - custom = fp2_james_0002.b.failed_interrogation.tt - limit = { - faith = { - religion = { - OR = { - this = religion:christianity_religion - this = religion:judaism_religion - } - } - } - } - add_county_modifier = { - modifier = fp2_conversos_persecution_modifier - years = 10 - } - } - reverse_add_opinion = { - target = scope:fp2_james_0002_conversos_character - modifier = hate_opinion - opinion = -30 - } - fp2_polish_should_heritage_israelite_get_upset_effect = yes - } - } - } - - stress_impact = { compassionate = medium_stress_impact_gain } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_zeal = 0.5 - } - } - } - - option = { # Imprison the suspect without trial - name = fp2_james.0002.c - - send_interface_message = { - type = event_prison_neutral - title = fp2_james.0002.t - right_icon = scope:fp2_james_0002_conversos_character - - imprison_character_effect = { - TARGET = scope:fp2_james_0002_conversos_character - IMPRISONER = root - } - fp2_polish_should_heritage_israelite_get_upset_effect = yes - - stress_impact = { - compassionate = medium_stress_impact_gain - diligent = medium_stress_impact_gain - just = medium_stress_impact_gain - callous = minor_stress_impact_loss - sadistic = minor_stress_impact_loss - zealous = minor_stress_impact_loss - } - } - - ai_chance = { - base = 10 - modifier = { - factor = 0 - OR = { - has_trait = compassionate - has_trait = diligent - has_trait = just - } - } - modifier = { - factor = 2 - OR = { - has_trait = callous - has_trait = sadistic - } - has_trait = zealous - } - } - } -} - -# Jewish people come fleeing persecution from a nearby realm -fp2_yearly.9002 = { - type = character_event - title = fp2_james.0003.t - desc = fp2_james.0003.desc - theme = secret - override_background = { - reference = throne_room - } - left_portrait = { - character = root - animation = paranoia - } - right_portrait = { - character = scope:fp2_james_003_jewish_refugee_leader - animation = beg - } - - trigger = { - NOT = { root.religion = religion:judaism_religion } - NOT = { faith = faith:conversos } - any_neighboring_and_across_water_top_liege_realm = { # There is someone to do persecuting - holder = { - is_ai = yes - NOT = { root.religion = religion:judaism_religion } - NOT = { faith = faith:conversos } - } - } - highest_held_title_tier >= tier_county - any_held_county = { - is_landless_type_title = no - title_province = { - geographical_region = world_europe_west_iberia - } - NOT = { # Don't give away the capital - this = this.holder.top_liege.capital_county - } - holder = { - any_held_title = { - title_tier = county - count >= 2 - } - } - } - } - - weight_multiplier = { - base = 1 - modifier = { - add = 1 - any_character_struggle = { - is_struggle_type = iberian_struggle - is_struggle_phase = struggle_iberia_phase_hostility - } - } - modifier = { - factor = 0.1 - any_county_in_region = { - region = world_europe_west_iberia - culture = culture:sephardi - } - } - } - - immediate = { - # Grab the neighbour for loc purposes - random_neighboring_and_across_water_top_liege_realm = { - limit = { - holder = { - is_ai = yes - NOT = { root.religion = religion:judaism_religion } - NOT = { faith = faith:conversos } - } - } - holder = { save_scope_as = fp2_james_003_intolerant_ruler } - } - # find a pool character - if = { - limit = { - any_pool_character = { - province = root.capital_province - religion = religion:judaism_religion - } - } - random_pool_character = { - province = root.capital_province - limit = { - religion = religion:judaism_religion - } - save_scope_as = fp2_james_003_jewish_refugee_leader - } - } - # Otherwise create one - else = { - create_character = { - template = spanish_jewish_merchant_character # May as well reuse the template - location = root.capital_province - save_scope_as = fp2_james_003_jewish_refugee_leader - } - } - # Get a religion for them to potentially be secretly praciticing - religion:judaism_religion = { - random_faith = { - limit = { is_mainstream_jewish_faith = yes } - save_scope_as = fp2_james_0003_jewish_faith - } - } - random_held_county = { - limit = { - is_landless_type_title = no - title_province = { - geographical_region = world_europe_west_iberia - } - NOT = { # Don't give away the capital - this = this.holder.top_liege.capital_county - } - holder = { - any_held_title = { - title_tier = county - count >= 2 - } - } - } - weight = { - modifier = { # Low-dev counties should be more highly considered - add = 50 - development_level <= medium_development_level - } - } - save_scope_as = fp2_james_0003_province_to_convert - } - } - - option = { # Offer the community protection in your realm - name = fp2_james.0003.a - create_title_and_vassal_change = { - type = granted - save_scope_as = change - add_claim_on_loss = no - } - scope:fp2_james_0003_province_to_convert.county = { - change_title_holder = { - holder = scope:fp2_james_003_jewish_refugee_leader - change = scope:change - } - } - resolve_title_and_vassal_change = scope:change - hidden_effect = { - add_opinion = { - target = scope:fp2_james_003_jewish_refugee_leader - modifier = received_title_county - } - } - scope:fp2_james_0003_province_to_convert.county = { - change_development_level = 1 - if = { - limit = { - root = { - is_ai = no - } - NOT = { - any_county_in_region = { - region = world_europe_west_iberia - culture = culture:sephardi - } - } - } - set_county_culture = scope:fp2_james_003_jewish_refugee_leader.culture - set_county_faith = scope:fp2_james_003_jewish_refugee_leader.faith - add_county_modifier = { - modifier = fp2_thriving_jewish_community_modifier - years = 10 - } - } - else = { - add_county_modifier = { - modifier = fp2_thriving_jewish_community_modifier - years = 10 - } - } - } - scope:fp2_james_003_jewish_refugee_leader.culture = { - change_cultural_acceptance = { - target = root.culture - value = medium_positive_culture_acceptance - desc = cultural_acceptance_gain_conversos_tolerance - } - } - - stress_impact = { - callous = minor_stress_impact_gain - greedy = minor_stress_impact_gain - compassionate = medium_stress_impact_loss - zealous = medium_stress_impact_gain - paranoid = medium_stress_impact_gain - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = 1.5 - ai_zeal = -0.5 - } - } - } - - option = { - name = fp2_james.0003.b - scope:fp2_james_003_jewish_refugee_leader = { silent_disappearance_effect = yes } - - stress_impact = { - paranoid = minor_stress_impact_loss - zealous = minor_stress_impact_loss - } - ai_chance = { - base = 10 - ai_value_modifier = { - ai_honor = -0.5 - ai_zeal = 1.5 - } - } - } -} - ################################### # Toledan Nights # By James Beaumont diff --git a/gfx/interface/coat_of_arms/landless_minority_government_topframe_115.dds b/gfx/interface/coat_of_arms/landless_minority_government_topframe_115.dds new file mode 100644 index 00000000..7d289fec --- /dev/null +++ b/gfx/interface/coat_of_arms/landless_minority_government_topframe_115.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cde3fed0855c649259fa03313e7c8304a777740eb8f6ff2a932e41028178d31 +size 13872 diff --git a/gfx/interface/coat_of_arms/landless_minority_government_topframe_28.dds b/gfx/interface/coat_of_arms/landless_minority_government_topframe_28.dds new file mode 100644 index 00000000..f51ec66a --- /dev/null +++ b/gfx/interface/coat_of_arms/landless_minority_government_topframe_28.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f9f7b362a3c5968a9db3f7e8deb574bd2876eb9162aa8583141fa76f291f41 +size 1200 diff --git a/gfx/interface/coat_of_arms/landless_minority_government_topframe_44.dds b/gfx/interface/coat_of_arms/landless_minority_government_topframe_44.dds new file mode 100644 index 00000000..3fd71378 --- /dev/null +++ b/gfx/interface/coat_of_arms/landless_minority_government_topframe_44.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c466284b9fdccb4299dd405659c9ed55c76d67ff3bf3bd1e4128065b1e23090e +size 2432 diff --git a/gfx/interface/coat_of_arms/landless_minority_government_topframe_62.dds b/gfx/interface/coat_of_arms/landless_minority_government_topframe_62.dds new file mode 100644 index 00000000..38b0a20c --- /dev/null +++ b/gfx/interface/coat_of_arms/landless_minority_government_topframe_62.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87138aa5b9df6886de78a5c1059a5d3d90bc1a5bf4c4f2b7a7883886ec87a5b4 +size 3632 diff --git a/gfx/interface/coat_of_arms/landless_minority_government_topframe_86.dds b/gfx/interface/coat_of_arms/landless_minority_government_topframe_86.dds new file mode 100644 index 00000000..4d440448 --- /dev/null +++ b/gfx/interface/coat_of_arms/landless_minority_government_topframe_86.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d44eee25fa5665713b77279323670f03d91c643bc3c8ba71d5d764938795135a +size 7968 diff --git a/gfx/interface/icons/domicile_building/minority_community_main.dds b/gfx/interface/icons/domicile_building/minority_community_main.dds new file mode 100644 index 00000000..8e1ca182 --- /dev/null +++ b/gfx/interface/icons/domicile_building/minority_community_main.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e9485fabf99120e751d1608499fb642e3a0f925ec3ababbf221c56b1f11a22b +size 21472 diff --git a/gfx/interface/icons/flat_icons/minority.dds b/gfx/interface/icons/flat_icons/minority.dds new file mode 100644 index 00000000..e94f4cb7 --- /dev/null +++ b/gfx/interface/icons/flat_icons/minority.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c85a144c2385d5d32a7697622148121d669b840e088a9ea424dd4b2334764b2 +size 5104 diff --git a/gfx/interface/icons/government_types/landless_minority_government.dds b/gfx/interface/icons/government_types/landless_minority_government.dds new file mode 100644 index 00000000..63025fd3 --- /dev/null +++ b/gfx/interface/icons/government_types/landless_minority_government.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78307caf5d9fd34a0ba51de7dec51edddc7856a27c868fa98652b6518ced5956 +size 7120 diff --git a/gfx/interface/icons/icon_barter.dds b/gfx/interface/icons/icon_barter.dds new file mode 100644 index 00000000..d4c499c6 --- /dev/null +++ b/gfx/interface/icons/icon_barter.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a8cf9a0286f6d3f7124271892c65d301284214d88f6fb41be10fb6471f1d012 +size 19504 diff --git a/gfx/interface/icons/map_coa/icon_barterer.dds b/gfx/interface/icons/map_coa/icon_barterer.dds new file mode 100644 index 00000000..ef09de9d --- /dev/null +++ b/gfx/interface/icons/map_coa/icon_barterer.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3088741530c0fc6508d6ca78295bbedf405263d298a023772071fb9f1ee2f492 +size 20976 diff --git a/gfx/interface/icons/map_icons/icon_barter.dds b/gfx/interface/icons/map_icons/icon_barter.dds new file mode 100644 index 00000000..27828c8d --- /dev/null +++ b/gfx/interface/icons/map_icons/icon_barter.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f9b47522d627653b4690505d98c188017ad2ec287f8142613af56eacf91a05a +size 19504 diff --git a/gfx/interface/icons/map_icons/map_icon_minority.dds b/gfx/interface/icons/map_icons/map_icon_minority.dds new file mode 100644 index 00000000..cd354687 --- /dev/null +++ b/gfx/interface/icons/map_icons/map_icon_minority.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bad940c2b67c06f970ee07678c636fab158f513e1647730cc7bf1d46324da16 +size 8768 diff --git a/gfx/interface/icons/map_icons/onmap_barter_icon.dds b/gfx/interface/icons/map_icons/onmap_barter_icon.dds new file mode 100644 index 00000000..1a0cceae --- /dev/null +++ b/gfx/interface/icons/map_icons/onmap_barter_icon.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b78444c59cb41debf58b17076f67ddf7f3a15dd6fdb2be8ff9736f325f499793 +size 19504 diff --git a/gfx/interface/icons/message_feed/barter.dds b/gfx/interface/icons/message_feed/barter.dds new file mode 100644 index 00000000..27828c8d --- /dev/null +++ b/gfx/interface/icons/message_feed/barter.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f9b47522d627653b4690505d98c188017ad2ec287f8142613af56eacf91a05a +size 19504 diff --git a/gui/hud.gui b/gui/hud.gui new file mode 100644 index 00000000..56db3805 --- /dev/null +++ b/gui/hud.gui @@ -0,0 +1,8575 @@ +###################################################### +#################### META INFO ####################### +###################################################### + +widget = { + size = { 100% 100% } + name = "meta_info" + visible = "[IsDefaultGUIMode]" + layer = bottom + + using = Animation_ShowHide_Standard + + flowcontainer = { + name = "observer_status" + visible = "[And( Not(IsGameViewOpen('succession_event')), IsObserver )]" + visible_at_creation = no + parentanchor = bottom|left + position = { 180 -110 } + ignoreinvisible = yes + margin_top = 2 + margin_left = 80 + margin_right = 2 + + background = { + using = Background_Area_Dark + } + + text_single = { + name = "global_observer_indication" + visible = "[Not(GetPlayer.IsValid)]" + text = "GLOBAL_OBSERVER" + } + + text_single = { + name = "player_observer_indication" + visible = "[GetPlayer.IsValid]" + text = "PLAYER_OBSERVER" + } + + button_cancel = { + name = "cancel_button" + visible = "[GetPlayer.IsValid]" + + size = { 30 30 } + onclick = "[ClearObserver]" + tooltip = "OBSERVER_MODE_ON" + } + + icon_observer = { + size = { 30 30 } + visible = "[Not(GetPlayer.IsValid)]" + } + } + + ## Build version & Beta warning + text_single = { + name = "build_version_text" + visible = "[And( Not(IsGameViewOpen('barbershop')), Not(LiveMode))]" + position = { 5 5 } + + tooltip = "[GetBuildVersionDescription]" + + text = "VERSION_SHORT" + default_format = "#low" + max_width = 300 + } + text_single = { + name = "beta_warning_text" + visible = "[And( Not(IsGameViewOpen('barbershop')), Not(LiveMode))]" + position = { 5 22 } + tooltip = "[GetBuildVersionDescription]" + + text = "BETA_BUILD" + default_format = "#low" + max_width = 300 + } + + error_horse = { + parentanchor = bottom|left + position = { 850 -10 } + visible = "[And( Not(IsGameViewOpen('barbershop')), And( Not( IsPauseMenuShown ), Not(ReleaseMode) ) )]" + } + loaded_mods_icon = { + parentanchor = bottom|left + visible = "[And( Not( IsPauseMenuShown ), And( HasLoadedMods, Not(ReleaseMode) ) )]" + tooltip = "[GetLoadedMods]" + position = { 670 -5 } + } +} + +###################################################### +#################### TOP RIGHT ####################### +###################################################### + +#Top right: resources and alerts, outliner, and panel tabs +widget = { + name = "ingame_topbar" + visible = "[InGameTopbar.ShouldBeVisible]" + size = { 100% 100% } + layer = hud_layer + using = Animation_ShowHide_Quick + + ### Ruler Objectives + container = { + visible = "[And( GetPlayersRulerObjectiveDecision.IsValid, Not( IsGameViewOpen( 'hud_ruler_objective' )) )]" + datacontext = "[GetPlayersRulerObjectiveDecision]" + parentanchor = top|left + position = { 8 16 } + + using = Animation_ShowHide_Quick + + button_round = { + name = "ruler_objective_button" + size = { 84 84 } + alpha = 0.7 + + onclick = "[ToggleGameView( 'hud_ruler_objective' )]" + tooltip = "SHOW_RULER_OBJECTIVE" + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.2 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0.7 + duration = 0.7 + using = Animation_Curve_Default + } + + button_ruler_objective = { + parentanchor = center + alwaystransparent = yes + size = { 64 64 } + } + } + } + + ### Outliner Button + container = { + visible = "[And(Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_outliner').GetValue, '(CFixedPoint)0' ) ), And( Not( IsGameViewOpen('barbershop') ), And( Not( IsPauseMenuShown ), And(Not(IsRightWindowOpen), IsDefaultGUIMode))))]" + parentanchor = top|right + position = { -3 55 } + + using = Animation_ShowHide_Quick + + button_round = { + name = "outliner_button" + size = { 35 35 } + alpha = 0.7 + + onclick = "[ToggleGameView('outliner')]" + tooltip = "TOGGLE_OUTLINER" + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.2 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0.7 + duration = 0.7 + using = Animation_Curve_Default + } + + button_outliner = { + parentanchor = center + alwaystransparent = yes + size = { 25 25 } + } + } + } + + widget = { + layer = hud_layer + size = { 100% 88 } + position = { 0 -24 } + + allow_outside = yes + + hbox = { + ### Alerts + expand = {} + notifications_alerts = { + visible = "[And( Not(IsGameViewOpen('barbershop')), Not( IsPauseMenuShown ) )]" + using = Animation_ShowHide_Quick + } + ### Suggestions / Current Situation + widget = { + size = { 80 80 } + widgetid = "suggestions_placer" + visible = "[Not( IsPauseMenuShown )]" + } + + spacer = { + size = { 16 1 } + } + #### Top Right Bar + resources_top_right_bar = { + name = "top_bar" + visible = "[And(Not( IsPauseMenuShown ), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_top_bar').GetValue, '(CFixedPoint)0' ) ))]" + } + } + } + + ### Main Tabs + widget = { + name = "main_tabs" + visible = "[And(And(And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode)), Not(IsGameViewOpen('struggle'))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_main_tabs').GetValue, '(CFixedPoint)0' ) ))]" + parentanchor = top|right + position = { 0 105 } + size = { 50 0 } + allow_outside = yes + + using = Animation_ShowHide_Quick + + vbox = { + alwaystransparent = no + filter_mouse = all + visible = "[Not(IsGameViewOpen('barbershop'))]" + margin = { 5 10 } + + Background = { + visible = "[And(Not(IsRightWindowOpen) , Not(IsGameViewOpen('barbershop')) )]" + texture = "gfx/interface/skinned/hud_maintab_bg_middle.dds" + spriteType = CorneredTiled + texture_density = 2 + margin = { 0 -50 } + } + + Background = { + visible = "[And(Not(IsRightWindowOpen) , Not(IsGameViewOpen('barbershop')) )]" + spriteType = CorneredStretched + spriteborder_top = 100 + parentanchor = top|right + texture_density = 2 + size = { 50 100 } + texture = "gfx/interface/skinned/hud_maintab_bg_top.dds" + } + + Background = { + visible = "[And(Not(IsRightWindowOpen) , Not(IsGameViewOpen('barbershop')) )]" + spriteType = CorneredStretched + spriteborder_bottom = 100 + parentanchor = top|right + texture_density = 2 + size = { 50 100 } + texture = "gfx/interface/skinned/hud_maintab_bg_bottom.dds" + } + + vbox = { + state = { + name = _show + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _hide + duration = 0.6 + alpha = 0 + using = Animation_Curve_Default + } + + hbox = { + name = "tab_government_administration" #tutorial uses this + + widget_hud_main_tab = { + + datacontext = "[GetPlayer.GetTopLiege]" + visible = "[And(Character.GetGovernment.HasRule( 'noble_families' ),Not(Or(GetPlayer.GetGovernment.IsType( 'celestial_government' ),Or(GetPlayer.GetGovernment.IsType( 'japan_administrative_government' ),GetPlayer.GetGovernment.IsType( 'japan_feudal_government' )))))]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_administrative.dds" + + onclick = "[ToggleGameView( 'government_administration' )]" + down = "[IsGameViewOpen( 'government_administration' )]" + + tooltip = "ADMINISTRATIVE_BUTTON" + } + } + + widget_hud_main_tab = { + datacontext = "[GetPlayer.GetTopLiege]" + visible = "[GetPlayer.GetGovernment.IsType( 'japan_feudal_government' )]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_soryo_japan.dds" + + onclick = "[ToggleGameView( 'government_administration' )]" + down = "[IsGameViewOpen( 'government_administration' )]" + + tooltip = "ADMINISTRATIVE_BUTTON" + } + } + + widget_hud_main_tab = { + datacontext = "[GetPlayer.GetTopLiege]" + visible = "[GetPlayer.GetGovernment.IsType( 'japan_administrative_government' )]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_ritsuryo_japan.dds" + + onclick = "[ToggleGameView( 'government_administration' )]" + down = "[IsGameViewOpen( 'government_administration' )]" + + tooltip = "ADMINISTRATIVE_BUTTON" + } + } + + widget_hud_main_tab = { + + datacontext = "[GetPlayer.GetTopLiege]" + visible = "[GetPlayer.GetGovernment.IsType( 'celestial_government' )]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_administrative_china.dds" + + onclick = "[ToggleGameView( 'government_administration' )]" + down = "[IsGameViewOpen( 'government_administration' )]" + + tooltip = "ADMINISTRATIVE_BUTTON" + } + } + } + + widget = { + size = { 0 15 } + layoutpolicy_horizontal = expanding + + icon = { + datacontext = "[GetPlayer.GetTopLiege]" + visible = "[And(Or( Character.GetGovernment.HasRule( 'noble_families' ), Character.GetGovernment.HasRule( 'administrative' ) ), And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode)))]" + size = { 25 15 } + parentanchor = right|vcenter + + texture = "gfx/interface/skinned/hud_spike_big.dds" + using = Animation_ShowHide_Standard + } + } + + widget_hud_main_tab = { + name = "tab_my_realm_tutorial_uses_this" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_my_realm.dds" + onclick = "[ToggleGameView('my_realm')]" + shortcut = "my_realm_window" + tooltip = "MY_REALM_BUTTON" + down = "[IsGameViewOpen('my_realm')]" + } + } + + widget_hud_main_tab = { + name = "tab_military_tutorial_uses_this" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_military.dds" + + onclick = "[ToggleGameViewData('military', GetPlayer.GetID)]" + shortcut = "military_window" + tooltip = "MILITARY_BUTTON" + down = "[IsGameViewOpen('military')]" + } + } + + widget_hud_main_tab = { + name = "tab_council" + visible = "[Not( IsLandlessAdventurer( GetPlayer ) )]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_council.dds" + + onclick = "[ToggleGameViewData('council_window', GetPlayer.GetID)]" + shortcut = "council_window" + tooltip = "COUNCIL_BUTTON" + down = "[IsGameViewOpen('council_window')]" + } + } + } + + widget = { + layoutpolicy_horizontal = expanding + size = { 0 15 } + + icon = { + visible = "[And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode))]" + parentanchor = right|vcenter + texture = "gfx/interface/skinned/hud_spike_big.dds" + size = { 25 15 } + + using = Animation_ShowHide_Standard + } + } + + vbox = { + widget_hud_main_tab = { + name = "tab_court_tutorial_uses_this" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_court.dds" + + onclick = "[ToggleGameViewData( 'court_window', GetPlayer.GetID )]" + shortcut = "court_window" + tooltip = "COURT_BUTTON" + down = "[IsGameViewOpen( 'court_window' )]" + } + } + + widget_hud_main_tab = { + name = "tab_intrigue" #tutorial uses this + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_intrigue.dds" + + onclick = "[ToggleGameViewData('intrigue_window', GetPlayer.GetID)]" + shortcut = "intrigue_window" + tooltip = "INTRIGUE_BUTTON" + down = "[IsGameViewOpen('intrigue_window')]" + } + + } + + widget_hud_main_tab = { + name = "tab_factions" #tutorial uses this + visible = "[Or( Or( GetPlayer.IsInAFaction, GetPlayer.IsLandedRuler ), GetPlayer.HasLiege)]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_factions.dds" + + onclick = "[ToggleGameView('factions_window')]" + shortcut = "factions_window" + tooltip = "FACTION_BUTTON" + down = "[IsGameViewOpen('factions_window')]" + } + } + } + + widget = { + layoutpolicy_horizontal = expanding + size = { 0 15 } + + icon = { + visible = "[And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode))]" + parentanchor = right|vcenter + texture = "gfx/interface/skinned/hud_spike_big.dds" + size = { 25 15 } + + using = Animation_ShowHide_Standard + } + } + + vbox = { + widget_hud_main_tab = { + name = "tab_decisions" #tutorial uses this + visible = "[Not(Or(GetPlayer.GetGovernment.IsType( 'landless_adventurer_government' ) GetPlayer.GetGovernment.IsType( 'landless_minority_government' )))]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_decisions.dds" + + onclick = "[ToggleGameView('decisions')]" + shortcut = "decision_window" + tooltip = "DECISIONS_BUTTON" + down = "[IsGameViewOpen('decisions')]" + } + } + + widget_hud_main_tab = { + name = "tab_contracts" + visible = "[Or(GetPlayer.GetGovernment.IsType( 'landless_adventurer_government' ) GetPlayer.GetGovernment.IsType( 'landless_minority_government' ))]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_contracts.dds" + + onclick = "[ToggleGameView('decisions')]" + shortcut = "decision_window" + tooltip = "DECISIONS_BUTTON" + down = "[IsGameViewOpen('decisions')]" + } + } + + widget_hud_main_tab = { + name = "tab_activities" #tutorial uses this + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_activities.dds" + + onclick = "[ToggleGameView('activity_list_window')]" + shortcut = "activity_list_window" + tooltip = "ACTIVITY_LIST_BUTTON" + down = "[IsGameViewOpen('activity_list_window')]" + } + } + + widget_hud_main_tab = { + name = "tab_situation" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_situations.dds" + + onclick = "[ToggleGameView( 'situations' )]" + tooltip = "SITUATIONS_BUTTON" + shortcut = "situations" + down = "[IsGameViewOpen( 'situations' )]" + } + } + + widget_hud_main_tab = { + datacontext = "[GetPlayer]" + datacontext = "[AccessLocalPlayerCachedData]" + datacontext = "[LocalPlayerCachedData.AccessNewArtifacts]" + datacontext = "[LocalPlayerCachedData.AccessCourtEvents]" + datacontext = "[Character.GetCourtGrandeurData]" + visible = "[And(Character.HasRoyalCourt ,And(And( And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode)), HasDlcFeature( 'court_room_view' )), Not( IsLandlessAdventurer( GetPlayer ) )))]" + allow_outside = yes + name = "royal_court_button_tutorial_uses_this" + + tooltipwidget = { + container_royal_court_tooltip = {} + } + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_courtview.dds" + onclick = "[Character.OpenRoyalCourtView( 'throne' )]" + + # Looping glow when you have unhandled court events or first get your royal court + using = Animation_Glow_Pulse + + glow = { + glow_radius = 8 + using = Glow_Standard + using = Color_Bright_Yellow + visible = "[Or( And( Character.HasRoyalCourt, Not( LocalPlayerCachedData.HasEverOpenedRoyalCourt ) ), GreaterThan_int32( LocalPlayerCourtEvents.GetNumberCourtEvents, '(int32)0' ) )]" + } + + # Pulse when you get a new pending court event + state = { + name = "pending_court_event_start" + next = "pending_court_event_a" + position_x = 0 + duration = 0.2 + size = { 45 45 } + using = Animation_Curve_Default + trigger_when = "[GreaterThan_int32( Character.GetNumPendingCourtEvents, '(int32)0' )]" + + start_sound = { + soundeffect = "event:/DLC/EP1/SFX/UI/Notifications/royal_court_event_available" + } + } + + state = { + name = "pending_court_event_a" + next = "pending_court_event_b" + position_x = -30 + duration = 0.45 + size = { 85 85 } + using = Animation_Curve_Default + } + + state = { + name = "pending_court_event_b" + position_x = 0 + duration = 0.25 + size = { 45 45 } + bezier = { 0.43 0 0.2 2.2 } + } + + flowcontainer = { + position = { -5 0 } + direction = vertical + ignoreinvisible = yes + visible = "[Character.HasRoyalCourt]" + datacontext = "[GetPlayer]" + + widget_royal_court_notification = { + visible = "[And( GreaterThanOrEqualTo_int32( CourtGrandeurData.GetCurrentLevel, CourtGrandeurData.GetMinimumExpectedLevel ), Or( GreaterThan_int32( LocalPlayerNewArtifacts.GetNumNewArtifactsOfCategory( 'court' ), '(int32)0' ), Or( GreaterThan_int32( LocalPlayerCourtEvents.GetNumberCourtEvents, '(int32)0' ), GreaterThan_int32( Character.GetNumPendingCourtEvents, '(int32)0' ) ) ) )]" + } + + widget_below_cgv_expectations = { + visible = "[LessThan_int32( CourtGrandeurData.GetCurrentLevel, CourtGrandeurData.GetMinimumExpectedLevel )]" + } + } + } + } + + widget_hud_main_tab = { + name = "tab_tax_jurisdiction" + datacontext = "[GetPlayer]" + enabled = "[Character.HasTaxSlots]" + visible = "[Or( GetPlayer.GetGovernment.IsType( 'clan_government' ), Character.HasTaxSlots )]" + + blockoverride "maintab_button" + { + texture = "gfx/interface/skinned/hud_maintab/maintab_tax_jurisdictions.dds" + + onclick = "[ToggleGameViewData('manage_tax_slots', GetPlayer.GetID)]" + down = "[IsGameViewOpen('manage_tax_slots')]" + + using = tooltip_ws + + tooltipwidget = { + tax_jurisdictions_button_tooltip = {} + } + + icon = { + size = { 100% 100% } + visible = "[GreaterThan_int32( GetPlayer.GetUnassignedVassalsCount, '(int32)0' )]" + texture = "gfx/interface/skinned/hud_maintab/maintab_tax_jurisdictions.dds" + + glow = { + glow_radius = 8 + using = Glow_Standard + using = Color_Red + } + state = { + name = a + next = b + alpha = 0.3 + trigger_on_create = yes + duration = 1.2 + using = Animation_Curve_Default + } + + state = { + name = b + next = a + alpha = 0.5 + duration = 0.6 + using = Animation_Curve_Default + } + } + + icon = { + visible = "[Or( Or( GreaterThan_int32( Character.GetUnassignedVassalsCount, '(int32)0' ), Not( Character.HasTaxSlots ) ), GreaterThan_int32( Character.GetUntaxedJurisdictionCount, '(int32)0' ) )]" + size = { 25 25 } + position = { -5 5} + texture = "gfx/interface/icons/symbols/icon_warning.dds" + + icon = { + size = { 100% 100% } + alwaystransparent = yes + texture = "gfx/interface/icons/symbols/icon_warning.dds" + + modify_texture = { + texture = "gfx/interface/icons/focuses/hud_icon_mask.dds" + blend_mode = alphamultiply + } + + modify_texture = { + texture = "gfx/interface/colors/red.dds" + blend_mode = colordodge + } + + state = { + name = a + next = b + alpha = 0 + trigger_on_create = yes + duration = 1.2 + using = Animation_Curve_Default + } + + state = { + name = b + next = a + alpha = 0.8 + duration = 0.6 + using = Animation_Curve_Default + } + } + } + } + } + } + } + + # Invisible button to ensure that these shortcuts don't get hidden + button = { + size = { 0 0 } + onclick = "[ToggleGameViewData( 'character', GetPlayer.GetID )]" + shortcut = "character_window" + } + + # widget = { + # datacontext = "[GetPlayer]" + # datacontext = "[AccessLocalPlayerCachedData]" + # datacontext = "[LocalPlayerCachedData.AccessNewArtifacts]" + # datacontext = "[LocalPlayerCachedData.AccessCourtEvents]" + # datacontext = "[Character.GetCourtGrandeurData]" + # visible = "[And( And( Not( IsPauseMenuShown ), And(Or(Not(IsObserver), GetPlayer.IsValid), IsDefaultGUIMode)), HasDlcFeature( 'royal_court' ))]" + # enabled = "[Character.HasRoyalCourt]" + + # parentanchor = bottom + # position = { 4 50 } + # size = { 45 45 } + + # icon = { + # name = "royal_court_button_background" + # visible = "[Not(IsRightWindowOpen)]" + # size = { 45 45 } + # texture = "gfx/interface/buttons/maintab_courtview_bg.dds" + + # allow_outside = yes + + # state = { + # name = _show + # alpha = 1 + # duration = 0.1 + # using = Animation_Curve_Default + # } + + # state = { + # name = _hide + # duration = 0.6 + # alpha = 0 + # using = Animation_Curve_Default + # } + + # state = { + # name = "hud_tab_glow_courtview_enter" + # duration = 0.03 + # using = Animation_Curve_Default + + # modify_texture = { + # name = "glow_courtview" + # alpha = 1 + # } + # } + + # state = { + # name = "hud_tab_glow_courtview_leave" + # duration = 0.1 + # using = Animation_Curve_Default + + # modify_texture = { + # name = "glow_courtview" + # alpha = 0 + # } + # } + + # modify_texture = { + # name = "glow_courtview" + # texture = "gfx/interface/buttons/maintab_courtview_bg_glow.dds" + # alpha = 0 + # } + # } + + # widget_hud_main_tab = { + # allow_outside = yes + # name = "royal_court_button_tutorial_uses_this" + + # tooltipwidget = { + # container_royal_court_tooltip = {} + # } + + # state = { + # name = _mouse_hierarchy_enter + # on_start = "[PdxGuiInterruptThenTriggerAllAnimations('hud_tab_glow_courtview_leave','hud_tab_glow_courtview_enter')]" + # alpha = 1 + # } + + # state = { + # name = _mouse_hierarchy_leave + # on_start = "[PdxGuiInterruptThenTriggerAllAnimations('hud_tab_glow_courtview_enter','hud_tab_glow_courtview_leave')]" + # alpha = 1 + # } + + # blockoverride "maintab_button" + # { + # texture = "gfx/interface/buttons/maintab_courtview.dds" + # onclick = "[Character.OpenRoyalCourtView( 'throne' )]" + + # # Looping glow when you have unhandled court events or first get your royal court + # using = Animation_Glow_Pulse + + # glow = { + # glow_radius = 8 + # using = Glow_Standard + # using = Color_Bright_Yellow + # visible = "[Or( And( Character.HasRoyalCourt, Not( LocalPlayerCachedData.HasEverOpenedRoyalCourt ) ), GreaterThan_int32( LocalPlayerCourtEvents.GetNumberCourtEvents, '(int32)0' ) )]" + # } + + # # Pulse when you get a new pending court event + # state = { + # name = "pending_court_event_start" + # next = "pending_court_event_a" + # position_x = 0 + # duration = 0.2 + # size = { 45 45 } + # using = Animation_Curve_Default + # trigger_when = "[GreaterThan_int32( Character.GetNumPendingCourtEvents, '(int32)0' )]" + + # start_sound = { + # soundeffect = "event:/DLC/EP1/SFX/UI/Notifications/royal_court_event_available" + # } + # } + + # state = { + # name = "pending_court_event_a" + # next = "pending_court_event_b" + # position_x = -30 + # duration = 0.45 + # size = { 85 85 } + # using = Animation_Curve_Default + # } + + # state = { + # name = "pending_court_event_b" + # position_x = 0 + # duration = 0.25 + # size = { 45 45 } + # bezier = { 0.43 0 0.2 2.2 } + # } + + # flowcontainer = { + # position = { 0 6 } + # parentanchor = bottom|hcenter + # widgetanchor = center + # direction = vertical + # ignoreinvisible = yes + # visible = "[Character.HasRoyalCourt]" + # datacontext = "[GetPlayer]" + + # widget_royal_court_notification = { + # visible = "[And( GreaterThanOrEqualTo_int32( CourtGrandeurData.GetCurrentLevel, CourtGrandeurData.GetMinimumExpectedLevel ), Or( GreaterThan_int32( LocalPlayerNewArtifacts.GetNumNewArtifactsOfCategory( 'court' ), '(int32)0' ), Or( GreaterThan_int32( LocalPlayerCourtEvents.GetNumberCourtEvents, '(int32)0' ), GreaterThan_int32( Character.GetNumPendingCourtEvents, '(int32)0' ) ) ) )]" + # } + + # widget_below_cgv_expectations = { + # visible = "[LessThan_int32( CourtGrandeurData.GetCurrentLevel, CourtGrandeurData.GetMinimumExpectedLevel )]" + # } + # } + # } + # } + # } + } + + widget_stress_sounds = {} +} + +### Time Controls +icon = { + name = "timeline_widget" + visible = "[And(And( Not(IsGameViewOpen('barbershop')), And( And( Not( IsPauseMenuShown ), TimelineWidget.ShouldBeVisible ), Not(GetVariableSystem.Exists('royal_court_screenshot_window')))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_timeline').GetValue, '(CFixedPoint)0' ) ))]" + size = { 649 65 } + parentanchor = bottom|right + filter_mouse = all + alwaystransparent = yes + layer = top + allow_outside = yes + texture = "gfx/interface/skinned/hud_bg_gamespeed.dds" + + using = Animation_ShowHide_Quick + + widget = { + parentanchor = bottom|right + size = { 629 45 } + allow_outside = yes + + icon = { + parentanchor = top|right + position = { 7 -15} + texture = "gfx/interface/skinned/component_decoration/decoration_arch.dds" + size = { 30 30 } + } + + icon = { + visible = "[IsManuallyPaused]" + size = { 100% 100% } + texture = "gfx/interface/skinned/hud_pause_indicator.dds" + color = { 0.4 0.25 0.25 0.7 } + + state = { + name = _show + using = Animation_FadeIn_Quick + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + } + } + + icon = { + visible = "[IsPausedByEvent]" + size = { 100% 100% } + texture = "gfx/interface/skinned/hud_pause_indicator.dds" + color = { 0.3 0.3 0.3 0.7 } + + state = { + name = _show + using = Animation_FadeIn_Quick + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + } + } + + hotkeys_HUD = {} + + ### Extra Buttons + flowcontainer = { + name = "extra_buttons_menu" + visible = "[And( Not( IsPauseMenuShown ), GetVariableSystem.Exists( 'extra_buttons_expand' ))]" + visible_at_creation = no + parentanchor = bottom|right + widgetanchor = bottom|hcenter + position = { -570 -20 } + alwaystransparent = no + margin = { 40 40 } + direction = vertical + spacing = 3 + ignoreinvisible = yes + allow_outside = yes + + background = { + using = Background_Area_Dark + margin = { -25 -25 } + } + + state = { + name = _show + using = Animation_FadeIn_Quick + + position_y = -20 + } + + state = { + name = _hide + + using = Animation_FadeOut_Quick + position_y = 60 + } + + state = { + name = _mouse_hierarchy_leave + on_finish = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + } + + button_standard = { + name = "find_character_button" + text = "FIND_CHARACTER" + onclick = "[ToggleGameView( 'character_finder' )]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + tooltip = "IM_TT_FIND_CHARACTER" + shortcut = "character_finder" + } + + button_standard = { + name = "find_title_button" + + onclick = "[ToggleGameView( 'find_title' )]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + + down = "[IsGameViewOpen('find_title')]" + shortcut = "find_title_shortcut" + + text = "FIND_TITLE" + tooltip = "IM_TT_FIND_TITLE" + } + + button_standard = { + name = "plagues_button" + + onclick = "[ToggleGameView( 'epidemics' )]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + + down = "[IsGameViewOpen('epidemics')]" + shortcut = "explore_plagues" + + text = "EXPLORE_PLAGUES" + tooltip = "EXPLORE_PLAGUES_TT" + } + + button_standard = { + name = "legacy_button" + text = "SHOW_LEGACY" + onclick = "[ToggleGameViewData( 'lineage_view', GetPlayer.GetID )]" + down = "[IsGameViewOpen('succession_event')]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + tooltip = "IM_TT_SHOW_LEGACY" + } + + button_standard = { + name = "go_to_capital_button" + text = "GO_TO_CAPITAL" + onclick = "[OnGoToPlayerCapital]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + shortcut = "go_to_capital" + tooltip = "IM_TT_GO_TO_CAPITAL" + visible = "[GetPlayer.IsValid]" + } + + button_standard = { + name = "toggle_message_settings_button" + text = "MESSAGE_SETTINGS_WINDOW_NAME" + onclick = "[ToggleMessageSettings]" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + tooltip = "MESSAGE_SETTINGS_WINDOW_TT" + } + + button_standard = { + name = "toggle_music_player_button" + text = "MUSIC_PLAYER_NAME" + onclick = "[ToggleMusicPlayer]" + tooltip = "MUSIC_PLAYER_OPEN_PLAYER_TT" + } + } + + hbox = { + margin_left = 35 + allow_outside = yes + + hbox = { + margin_top = 12 + spacing = 3 + + button_dots = { + name = "button_hud_extra_buttons" + onclick = "[GetVariableSystem.Toggle( 'extra_buttons_expand' )]" + tooltip = MORE_POPOUT_TT + using = tooltip_ne + } + + button_menu = { + name = "pause_menu_button" + onclick = "[OnPauseMenu]" + tooltip = INGAME_MENU_TT + using = tooltip_ne + + tooltipwidget = { + using = TooltipWithFakeShortcut + blockoverride "shortcut_text" + { + text = FAKE_ESCAPE + } + } + } + + button_encyclopedia_small = { + name = "encyclopedia_button_extended_menu" + tooltip = "OPEN_ENCYCLOPEDIA" + onclick = "[ToggleEncyclopedia]" + shortcut = "encyclopedia" + using = tooltip_ne + } + } + + hbox = { + name = "tutorial_highlight_bottom_right_bar" + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + margin_right = 5 + margin_left = 15 + margin_top = 12 + allow_outside = yes + + ## Date + button_standard_hover = { + name = "play_pause_button_tutorial_uses_this" + + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + + onclick = "[OnPause]" + + tooltip = "CURRENT_DATE_TOOLTIP" + using = tooltip_nw + tooltip_offset = { 0 10 } + + margin_widget = { + visible = "[Not(Or(IsPausedByEvent, IsManuallyPaused))]" + size = { 100% 100% } + + state = { + name = _show + using = Animation_FadeIn_Quick + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + } + + Animation_HUD_daily_tick = { + visible = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)1')]" + size = { 100% 100% } + + blockoverride "duration" + { + duration = 30 + } + + blockoverride "alpha" + { + alpha = 0.3 + } + } + + Animation_HUD_daily_tick = { + visible = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)2')]" + size = { 100% 100% } + + blockoverride "duration" + { + duration = 15 + } + + blockoverride "alpha" + { + alpha = 0.25 + } + } + + Animation_HUD_daily_tick = { + visible = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)3')]" + size = { 100% 100% } + + blockoverride "duration" + { + duration = 7.5 + } + + blockoverride "alpha" + { + alpha = 0.2 + } + } + + Animation_HUD_daily_tick = { + visible = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)4')]" + size = { 100% 100% } + + blockoverride "duration" + { + duration = 3.75 + } + + blockoverride "alpha" + { + alpha = 0.15 + } + } + + Animation_HUD_daily_tick = { + visible = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)5')]" + size = { 100% 100% } + + blockoverride "duration" + { + duration = 1.9 + } + + blockoverride "alpha" + { + alpha = 0.15 + } + } + } + + hbox = { + margin = { 5 0 } + margin_bottom = 2 + + hbox = { + layoutpolicy_horizontal = expanding + margin_top = 2 + margin_right = 2 + + expand = {} + + text_single = { + name = "date_text_sp" + visible = "[Not(GameHasMultiplePlayers)]" + layoutpolicy_horizontal = expanding + + text = "CURRENT_DATE" + default_format = "#date" + autoresize = no + align = right|nobaseline + using = Font_Size_Medium + } + + text_single = { + name = "date_text_mp" + visible = "[GameHasMultiplePlayers]" + layoutpolicy_horizontal = expanding + + text = "CURRENT_DATE" + default_format = "#medium;glow_color:{0.1,0.1,0.1,1}" + autoresize = no + align = right|nobaseline + using = Font_Size_Medium + } + } + + container = { + name = "pause_play_icons" + + button_pause = { + visible = "[Not(Or(IsPausedByEvent, IsManuallyPaused))]" + alwaystransparent = yes + parentanchor = center + } + + button_play = { + visible = "[Or(IsPausedByEvent, IsManuallyPaused)]" + alwaystransparent = yes + parentanchor = center + } + } + } + } + + button_normal = { + shortcut = "decrease_speed" + shortcut = "decrease_speed_2" + shortcut = "decrease_speed_3" + onclick = "[OnDecreaseGameSpeed]" + } + + button_normal = { + shortcut = "increase_speed" + shortcut = "increase_speed_2" + shortcut = "increase_speed_3" + onclick = "[OnIncreaseGameSpeed]" + } + + hbox = { + layoutpolicy_vertical = expanding + margin = { 0 -4 } + allow_outside = yes + + icon = { + name = "speed_indicator" + layoutpolicy_vertical = expanding + size = { 170 0 } + framesize = { 200 28 } + texture = "gfx/interface/hud/speed_indicator.dds" + frame = "[GetCurrentGameSpeed]" + tooltip = "CURRENT_SPEED_TOOLTIP" + tooltip_offset = { 0 -170 } + alpha = 0.8 + + modify_texture = { + visible = "[IsPausedByEvent]" + texture = "gfx/interface/hud/speed_indicator_auto_pause.dds" + spritetype = corneredtiled + blend_mode = darken + texture_density = 2 + } + + modify_texture = { + visible = "[And(IsManuallyPaused, Not(IsPausedByEvent))]" + texture = "gfx/interface/hud/speed_indicator_pause.dds" + spritetype = corneredtiled + blend_mode = darken + texture_density = 2 + } + + modify_texture = { + visible = "[Not(Or(IsPausedByEvent, IsManuallyPaused))]" + texture = "gfx/interface/hud/speed_indicator_play.dds" + spritetype = corneredtiled + blend_mode = darken + texture_density = 2 + } + + button = { + visible = "[Not( GameHasMultiplePlayers )]" + onclick = "[OnPause]" + shortcut = "pause" + } + + icon = { + parentanchor = right|vcenter + position = { 10 0 } + size = { 15 90%} + texture = "gfx/interface/skinned/overlay_stone.dds" + color = { 0.32 0.32 0.32 1 } + } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/skinned/speed_indicator_frame.dds" + } + + hbox = { + margin_left = 6 + margin_right = 6 + + button = { + name = "speed_1" + shortcut = "speed_1" + layoutpolicy_horizontal = shrinking + layoutpolicy_vertical = expanding + size = { 34 18 } + + alwaystransparent = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)1')]" + onclick = "[SetGameSpeed('(int32)0')]" + tooltip = "CHANGE_SPEED_TOOLTIP_1" + using = tooltip_ne + + alpha = 0 + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0 + duration = 0.1 + using = Animation_Curve_Default + } + + margin_widget = { + size = { 100% 100% } + margin = { 0 8 } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/hud/speed_indicator_mouseover.dds" + } + } + } + + button = { + name = "speed_2" + shortcut = "speed_2" + layoutpolicy_horizontal = shrinking + layoutpolicy_vertical = expanding + size = { 34 18 } + + alwaystransparent = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)2')]" + onclick = "[SetGameSpeed('(int32)1')]" + tooltip = "CHANGE_SPEED_TOOLTIP_2" + using = tooltip_ne + + alpha = 0 + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0 + duration = 0.1 + using = Animation_Curve_Default + } + + margin_widget = { + size = { 100% 100% } + margin = { 0 8 } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/hud/speed_indicator_mouseover.dds" + } + } + } + + button = { + name = "speed_3" + shortcut = "speed_3" + layoutpolicy_horizontal = shrinking + layoutpolicy_vertical = expanding + size = { 34 18 } + + alwaystransparent = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)3')]" + onclick = "[SetGameSpeed('(int32)2')]" + tooltip = "CHANGE_SPEED_TOOLTIP_3" + using = tooltip_ne + + alpha = 0 + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0 + duration = 0.1 + using = Animation_Curve_Default + } + + margin_widget = { + size = { 100% 100% } + margin = { 0 8 } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/hud/speed_indicator_mouseover.dds" + } + } + } + + button = { + name = "speed_4" + shortcut = "speed_4" + layoutpolicy_horizontal = shrinking + layoutpolicy_vertical = expanding + size = { 34 18 } + + alwaystransparent = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)4')]" + onclick = "[SetGameSpeed('(int32)3')]" + tooltip = "CHANGE_SPEED_TOOLTIP_4" + using = tooltip_ne + + alpha = 0 + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0 + duration = 0.1 + using = Animation_Curve_Default + } + + margin_widget = { + size = { 100% 100% } + margin = { 0 8 } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/hud/speed_indicator_mouseover.dds" + } + } + } + + button = { + name = "speed_5" + shortcut = "speed_5" + layoutpolicy_horizontal = shrinking + layoutpolicy_vertical = expanding + size = { 34 18 } + + alwaystransparent = "[EqualTo_int32(GetCurrentGameSpeed, '(int32)5')]" + onclick = "[SetGameSpeed('(int32)4')]" + tooltip = "CHANGE_SPEED_TOOLTIP_5" + using = tooltip_ne + + alpha = 0 + + state = { + name = _mouse_enter + alpha = 1 + duration = 0.1 + using = Animation_Curve_Default + } + + state = { + name = _mouse_leave + alpha = 0 + duration = 0.1 + using = Animation_Curve_Default + } + + margin_widget = { + size = { 100% 100% } + margin = { 0 8 } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/hud/speed_indicator_mouseover.dds" + } + } + } + } + } + } + } + + # Just the hotkeys for increase/decrease speed + container = { + name = "speed_hotkeys" + + button = { + name = "increase_speed" + size = { 0 0 } + + shortcut = "increase_speed" + shortcut = "increase_speed_2" + shortcut = "increase_speed_3" + onclick = "[OnIncreaseGameSpeed]" + oversound = "event:/SFX/UI/Generic/sfx_ui_generic_pointer_over" + clicksound = "event:/SFX/UI/Generic/sfx_ui_generic_increment" + } + + button = { + name = "decrease_speed" + size = { 0 0 } + + shortcut = "decrease_speed" + shortcut = "decrease_speed_2" + shortcut = "decrease_speed_3" + onclick = "[OnDecreaseGameSpeed]" + oversound = "event:/SFX/UI/Generic/sfx_ui_generic_pointer_over" + clicksound = "event:/SFX/UI/Generic/sfx_ui_generic_decrement" + } + } + + widget_gamespeed_sounds = {} + } + } +} + +### Bottom edge +widget = { + name = "bottom_bar" + visible = "[And( Not( IsPauseMenuShown ), IsDefaultGUIMode )]" + size = { 100% 100% } + layer = bottom + datacontext = "[GetPlayer]" + + using = Animation_ShowHide_Quick + + #### DYNAMIC BACKGROUND BEHIND THE CHARACTER PORTRAIT + widget = { + parentanchor = bottom|left + position = { -100 -100} + + hbox = { + visible = "[And(And(And( Not( IsGameViewOpen( 'barbershop' ) ), And( GetPlayer.IsValid, Not( GetVariableSystem.Exists( 'hide_bottom_left_HUD' ) ) ) ), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_character').GetValue, '(CFixedPoint)0' ) )), IsNomad( GetPlayer ))]" + layoutpolicy_horizontal = expanding + + spacer = { + visible = "[LessThanOrEqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)1' )]" + size = { 364 1 } + } + + spacer = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)2' )]" + size = { 424 1 } + } + + spacer = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)3' )]" + size = { 484 1 } + } + + spacer = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)4' )]" + size = { 544 1 } + } + + spacer = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)5' )]" + size = { 604 1 } + } + + spacer = { + visible = "[GreaterThanOrEqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)6' )]" + size = { 664 1 } + } + + icon = { + size = { 340 105 } + texture = "gfx/interface/hud/nomad_widget.dds" + } + } + } + + ### TGP WIDGET BACKGROUND + widget = { + visible = "[And(And( Not( IsGameViewOpen( 'barbershop' ) ), And( GetPlayer.IsValid, Not( GetVariableSystem.Exists( 'hide_bottom_left_HUD' ) ) ) ), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_left_bar').GetValue, '(CFixedPoint)0' ) ))]" + parentanchor = bottom|left + widgetanchor = bottom|left + position = { -6 0 } + size = { 548 116 } + + # BACKGROUND MERIT + DYNASTIC CYCLE + MOVEMENTS + icon = { + visible = "[And(InGameBottomBar.ShouldShowDynasticCycle, Character.ShouldShowMerit)]" + size = { 548 116 } + texture = "gfx/interface/hud/tgp_widget_background_big.dds" + } + + # BACKGROUND MERIT + DYNASTIC CYCLE + icon = { + visible = "[And(GetSituation('dynastic_cycle').GetTopParticipantGroupByKey('other_rulers').IsCharacterParticipant( Character.Self ), Character.ShouldShowMerit)]" + parentanchor = left + size = { 474 116 } + texture = "gfx/interface/hud/tgp_widget_background_medium.dds" + } + + # BACKGROUND ONLY MERIT WIDGET + icon = { + visible = "[And(Not( InGameBottomBar.ShouldShowDynasticCycle ), Character.ShouldShowMerit )]" + parentanchor = left + size = { 430 116 } + texture = "gfx/interface/hud/tgp_widget_background_small.dds" + } + + # BACKGROUND ONLY MOVEMENT + icon = { + visible = "[And(InGameBottomBar.ShouldShowDynasticCycle, Not(Character.ShouldShowMerit))]" + parentanchor = left + position = { -10 25 } + size = { 430 116 } + texture = "gfx/interface/hud/tgp_widget_background_small.dds" + } + } + + icon_hud_background_container = { + visible = "[And(And( Not( IsGameViewOpen( 'barbershop' ) ), And( GetPlayer.IsValid, Not( GetVariableSystem.Exists( 'hide_bottom_left_HUD' ) ) ) ), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_left_bar').GetValue, '(CFixedPoint)0' ) ))]" + parentanchor = bottom|left + ignoreinvisible = yes + } + ##### END OF BACKGROUND + + ### BOTTOM LEFT CHARACTER PORTRAIT + bottom_left_portrait = { + parentanchor = bottom|left + } + + ### TGP WIDGET + flowcontainer = { + visible = "[And(And( Not( IsGameViewOpen( 'barbershop' ) ), And( GetPlayer.IsValid, Not( GetVariableSystem.Exists( 'hide_bottom_left_HUD' ) ) ) ), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_left_bar').GetValue, '(CFixedPoint)0' ) ))]" + direction = horizontal + widgetanchor = bottom|left + parentanchor = bottom|left + position = { 269 -58 } + + allow_outside = yes + ignoreinvisible = yes + + widget_merit_hud = { + name = "merit_button_tutorial_uses_this" + datacontext = "[InGameBottomBar.GetMeritItem]" + parentanchor = vcenter + alwaystransparent = no + filter_mouse = all + size = { 74 94 } + + allow_outside = yes + } + + spacer = { + visible = "[Not(Character.ShouldShowMerit)]" + size = { 7 0 } + } + + widget = { + size = { 120 60 } + parentanchor = bottom + + allow_outside = yes + + flowcontainer = { + parentanchor = left|vcenter + position = { -5 0 } + spacing = 5 + + allow_outside = yes + ignoreinvisible = yes + + button_merit_pool_item = { + datacontext = "[InGameBottomBar.GetTopAdminMeritPool]" + visible = "[Character.ShouldShowMerit]" + allow_outside = yes + + blockoverride "button_onclick" + { + onclick = "[OpenGameViewData( 'government_administration', Character.Self)]" + } + + blockoverride "default_format" {} + } + + button_situation_group_banner = { + datacontext = "[InGameBottomBar.GetDynasticCycle]" + datacontext = "[InGameBottomBar.GetDynasticCycleGroup]" + datacontext = "[SituationParticipantGroup.GetType]" + visible = "[InGameBottomBar.ShouldShowDynasticCycle]" + + allow_outside = yes + } + } + } + } + + ## Bottom left tabs + left_edge_tabs = { + parentanchor = bottom|left + position = { -3 -100 } + } + + ## Bottom left CoA + coa_realm_medium_crown = { + visible = "[And(And(Not(IsGameViewOpen('barbershop')), And(And(IsDefaultGUIMode, GetPlayer.IsRuler), Not(GetVariableSystem.Exists( 'hide_ui_coa_bottom_left')))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_character_model').GetValue, '(CFixedPoint)0' ) ))]" + visible_at_creation = no + parentanchor = bottom|left + + state = { + name = _show + using = Animation_Curve_Default + duration = 0.25 + + position = { 0 0 } + alpha = 1 + } + + state = { + name = _hide + using = Animation_Curve_Default + duration = 0.25 + + position = { 0 50 } + alpha = 0 + } + + blockoverride "coa_button" + { + tooltip = "[GetPlayer.GetDefaultRealmFlagTooltipPrimaryTitleClickInfo]" + onclick = "[DefaultOnCoatOfArmsClick(GetPlayer.GetPrimaryTitle.GetID)]" + } + } + + ### Legitimacy, Lifestyle, etc + bottom_left_button_row = { + parentanchor = bottom|left + position = { 66 0 } + } + + ### Regular position + bottom_left_temporary_statuses = { + visible = "[Not( Or( InGameBottomBar.ShouldShowDynasticCycle, Character.ShouldShowMerit ) )]" + parentanchor = bottom|left + position = { 270 -62 } + } + + ### Positioned higher when you have the celestial widget + bottom_left_temporary_statuses = { + visible = "[Or( InGameBottomBar.ShouldShowDynasticCycle, Character.ShouldShowMerit )]" + parentanchor = bottom|left + position = { 277 -160 } + } + + ###################################################### + ######### MAPMODES AND WARS AND INSPIRATIONS ######### + ###################################################### + + map_modes_debug = { + visible = "[And( InDebugMode, And( Not( GetVariableSystem.Exists( 'mapmodes_expand' ) ), And(IsDefaultGUIMode, Not(IsRightWindowOpen))))]" + visible_at_creation = no + parentanchor = bottom|right + position = { 0 -230 } + + filter_mouse = all + alwaystransparent = no + scale = 0.9 + } + + widget = { # Inspiration Details + visible = "[And( InGameBottomBar.HasSelectedInspiration, And( IsDefaultGUIMode, Not( IsRightWindowOpen ) ) )]" + visible_at_creation = no + datacontext = "[InGameBottomBar.GetSelectedInspiration]" + datacontext = "[Inspiration.GetOwner]" + + parentanchor = bottom|right + position = { -200 -150 } + using = Window_Background_Subwindow + + alwaystransparent = no + filter_mouse = all + + state = { + name = _show + using = Animation_FadeIn_Quick + using = Sound_WindowShow_Standard + } + + state = { + name = _hide + using = Animation_FadeOut_Quick + using = Sound_WindowHide_Standard + } + + vbox = { + name = "selected_inspiration" + set_parent_size_to_minimum = yes + margin = { 4 4 } + margin_bottom = 20 + spacing = 5 + + vbox = { + layoutpolicy_horizontal = expanding + + header_pattern = { + layoutpolicy_horizontal = expanding + + blockoverride "header_text" + { + text = "SELECTED_INSPIRATION_HEADER" + } + + blockoverride "button_close" + { + onclick = "[InGameBottomBar.ClearSelectedInspiration]" + } + + blockoverride "button_back" + { + visible = no + } + } + } + + hbox = { + name = "selected_inspiration_data" + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + margin_left = 20 + + + background = { + using = Background_Area + layoutpolicy_horizontal = expanding + margin_top = 14 + } + + portrait_shoulders = { + name = "inspiration_owner_portrait" + + blockoverride "inspiration_status_icons" + { + } + } + + vbox = { + name = "text" + layoutpolicy_horizontal = expanding + margin_left = 10 + margin_bottom = 10 + margin_top = -14 + + text_multi = { + name = "inspiration_text" + min_width = 300 + max_width = 300 + autoresize = yes + text = "SELECTED_INSPIRATION_TEXT" + margin_right = 10 + margin_top = 4 + } + + spacer = { + size = { 0 6 } + } + + hbox = { + name = "recuirt_owner" + layoutpolicy_horizontal = expanding + spacing = 5 + + text_single = { + text = "[Character.GetRelationToString( GetPlayer )]" + tooltip = "EXTENDED_RELATIONS_TOOLTIP" + } + + button_recruit_character = {} + + warning_icon = { + name = "wants_to_leave" + visible = "[And( Character.CourtierWantsToLeaveCourt, Not( Character.IsImprisoned))]" + size = { 20 20 } + tooltip = "[Character.GetCourtierLeaveDescription]" + } + + expand = {} + } + + text_single = { + name = "gold_invested" + text = INSPIRATION_INVESTED_GOLD + layoutpolicy_horizontal = expanding + visible = "[Inspiration.GetSponsor.IsLocalPlayer]" + } + } + } + + + hbox = { + layoutpolicy_horizontal = expanding + margin_top = 4 + + button_primary = { + name = "sponsor_inspiration" + text = START_SPONSOR_INSPIRATION + visible = "[Not( Inspiration.GetSponsor.IsValid )]" + + enabled = "[Character.IsPlayerInteractionValid( 'fund_inspiration_interaction' )]" + onclick = "[Character.OpenPlayerInteraction( 'fund_inspiration_interaction' )]" + tooltip = "[Character.GetPlayerInteractionTooltip( 'fund_inspiration_interaction' )]" + } + } + + vbox = { + name = "inspiration_progress" + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + margin_bottom = -8 + margin_top = -10 + spacing = 5 + + visible = "[Inspiration.GetSponsor.IsValid]" + + text_single = { + text = INSPIRATION_IN_PROGRESS + } + + progressbar_segmented_chance = { + name = "progress_bar" + tooltip = "INSPIRATION_ITEM_PROGRESS_TOOLTIP" + datamodel = "[GetSegmentedProgressChanceBar( GetDefine( 'NInspiration', 'MAX_PROGRESS' ), GetDefine( 'NInspiration', 'PROGRESS_FRAMES' ), Inspiration.GetProgress, Inspiration.GetProgressChance )]" + } + + text_single = { + text = INSPIRATION_ESTIMATED_REMAINING + tooltip = INSPIRATION_ESTIMATED_TIME_TOOLTIP + } + + expand = { + layoutpolicy_vertical = expanding + } + } + } + } + + ### Ongoing longer term objects and map modes + # eg: Wars, Schemes, Inspirations + flowcontainer = { + visible = "[And(And(IsDefaultGUIMode, Not(IsRightWindowOpen)), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_right_temporary_statuses').GetValue, '(CFixedPoint)0' ) ))]" + + parentanchor = bottom|right + widgetanchor = top|right + position = { 0 -175 } + alwaystransparent = yes + ignoreinvisible = yes + filter_mouse = all + allow_outside = yes + spacing = 30 + + state = { + name = _show + using = Animation_FadeIn_Quick + } + + state = { + name = _hide + using = Animation_FadeOut_Quick + } + + # In progress systems + flowcontainer = { + name = "in_progress_systems" + ignoreinvisible = yes + margin_top = 15 + visible = "[Not(IsGameViewOpen('barbershop'))]" + + + ### Raise/Disband armies ### + + container = { + visible = "[Not(GetPlayer.HasActiveCompanionAISetting('raise_armies'))]" + ignoreinvisible = yes + parentanchor = vcenter + + button_raise_disband_armies = { + name = "tutorial_highlight_raise_troops" + visible = "[And( Character.IsAtWar, Not(Character.HasRaisedRegiments))]" + visible_at_creation = no + + enabled = "[PlayerCanRaiseAnyRallyPoint]" + onclick = "[PlayerRaiseAllRegiments]" + onrightclick = "[PlayerRaiseAllRegimentsAtLocation]" + button_ignore = none + + clicksound = "event:/SFX/UI/Unit/Army/sfx_ui_raise_army" + + onclick = "[PdxGuiTriggerAllAnimations('button_army')]" + + tooltip = "[GetPlayerRaiseAllTooltip]" + + animation_aggressive = {} + } + + button_raise_disband_armies = { + visible = "[PlayerShouldDisbandAll]" + visible_at_creation = no + + onclick = "[PlayerDisbandAll]" + enabled = "[PlayerCanDisbandAll]" + clicksound = "event:/SFX/UI/Unit/Army/sfx_ui_unit_army_disband" + + blockoverride "text" { + text = "DISBAND_ALL" + } + + tooltip = "[GetDisbandAllTooltip]" + } + } + + + ### Inspirations ### + flowcontainer = { + name = "player_inspirations" + parentanchor = vcenter + spacing = 5 + margin = { 5 0 } + allow_outside = yes + + datamodel = "[GetPlayer.GetSponsoredInspirations]" + + item = { + button_normal = { + datacontext = "[Inspiration.GetOwner]" + size = { 60 60 } + tooltip = "TT_INSPIRATION_WIDGET" + using = tooltip_above + onclick = "[InGameBottomBar.ToggleSelectedInspiration( Inspiration.Self )]" + + icon_round_button_base = {} + + icon = { + visible = "[ObjectsEqual( InGameBottomBar.GetSelectedInspiration, Inspiration.Self )]" + texture = "gfx/interface/buttons/button_lifestyles_active_frame.dds" + size = { 100% 100% } + } + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + parentanchor = center + alpha = 0.5 + } + + progresspie = { + name = "progress" + visible = "[And( Inspiration.GetSponsor.IsValid, Not( Inspiration.IsComplete ) )]" + + size = { 52 52 } + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + + widgetanchor = center + parentanchor = center + + min = 0 + max = 100 + + value = "[Select_float( GreaterThan_int32( Inspiration.GetProgress, '(int32)0' ), CurrentAndMaxToProgressbarValueInt32( Inspiration.GetProgress, GetDefine( 'NInspiration', 'MAX_PROGRESS' ) ), '(float)2' )]" + } + + highlight_icon = { + texture = "[Inspiration.GetType.GetIcon]" + alwaystransparent = yes + size = { 40 40 } + position = { 1 1 } + parentanchor = center + } + } + } + } + + ### Schemes ### + flowcontainer = { + name = "player_schemes" + datamodel = "[InGameBottomBar.GetSchemes]" + parentanchor = vcenter + spacing = 10 + margin = { 5 0 } + allow_outside = yes + + item = { + button_normal = { + name = "tutorial_highlight_lifestyle_HUD_button" + onclick = "[BottomBarSchemeItem.OnClick]" + onrightclick = "[BottomBarSchemeItem.OnClick]" + onrightclick = "[PostCommand( BottomBarSchemeItem.TriggerSchemeHudClick )]" + button_ignore = none + datacontext = "[BottomBarSchemeItem.GetScheme]" + tooltip = "BOTTOMBAR_SCHEME_TOOLTIP" + size = { 90 112 } + + ### Scheme exposed animation + icon = { + visible = "[Scheme.IsExposed]" + parentanchor = center + position = { 0 0 } + size = { 120 135 } + texture = "gfx/interface/colors/white.dds" + using = Color_Red + + shaderfile = "gfx/FX/pdxgui_repeat_texture.shader" + + modify_texture = { + name = "clouds" + texture = "gfx/interface/component_masks/mask_clouds.dds" + blend_mode = alphamultiply + spriteType = corneredtiled + texture_density = 3 + } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_glow.dds" + mirror = vertical + blend_mode = alphamultiply + } + + state = { + name = mask_a + next = mask_b + trigger_on_create = yes + + modify_texture = { + name = "clouds" + translate_uv = { 0 -1 } + } + } + + state = { + name = mask_b + next = mask_a + duration = 8 + + modify_texture = { + name = "clouds" + translate_uv = { 0 1 } + } + } + } + + # Glow pulse animation when you have an opportunity + icon = { + visible = "[GreaterThan_int32( Scheme.GetAgentCharges, '(int32)0' )]" + parentanchor = center + position = { 0 4 } + size = { 100 114 } + texture = "gfx/interface/window_scheme/scheme_hud_bg_glow.dds" + using = Color_Bright_Yellow + alpha = 0 + + modify_texture = { + texture = "gfx/interface/component_masks/mask_clouds.dds" + blend_mode = alphamultiply + alpha = 0.8 + } + + state = { + name = a + next = b + trigger_on_create = yes + + alpha = 0 + duration = 0 + scale = 1 + + using = Animation_Curve_Default + } + + state = { + name = b + next = c + + alpha = 1 + duration = 0.3 + scale = 1.07 + + using = Animation_Curve_Default + } + + state = { + name = c + next = d + alpha = 0 + duration = 0.5 + scale = 1.1 + + using = Animation_Curve_Default + } + + state = { + name = d + next = a + + alpha = 0 + duration = 0 + delay = 3 + scale = 1 + } + } + + highlight_icon = { + texture = "gfx/interface/window_scheme/scheme_hud_bg.dds" + size = { 100% 100% } + } + + # Pogressbar & frame + highlight_icon = { + name = "progress_frame" + texture = "gfx/interface/window_scheme/scheme_hud_bg_progress_frame.dds" + size = { 100% 100% } + parentanchor = center + alpha = 0.5 + } + + progresspie = { + name = "progress" + position = { 0.3 -2.5 } + size = { 76 76 } + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + widgetanchor = center + parentanchor = center + value = "[Scheme.GetProgressBar]" + min = 0 + max = 1 + mirror = vertical|horizontal + } + + # Target + container = { + parentanchor = center + + # Character Target + container = { + datacontext = "[Scheme.GetTargetCharacter]" + visible = "[Character.IsValid]" + parentanchor = center + position = { 0 9 } + + portrait_scheme_hud = {} + } + + # Title Target + container = { + datacontext = "[Scheme.GetTargetTitle]" + visible = "[Title.IsValid]" + parentanchor = center + position = { 0 -12 } + + coa_title_tiny = { + tooltip_visible = no + alwaystransparent = yes + } + } + + # Faith Target + container = { + datacontext = "[Scheme.GetTargetFaith]" + visible = "[Faith.IsValid]" + parentanchor = center + position = { 0 -12 } + + icon = { + name = "faith_icon" + texture = "[Faith.GetIcon]" + size = { 40 40 } + } + } + + # Culture Target + container = { + datacontext = "[Scheme.GetTargetCulture]" + visible = "[Culture.IsValid]" + parentanchor = center + position = { 0 -12 } + + text_single = { + text = "HUD_GETCULTURE" + } + } + } + + # Scheme type icon & bg + widget = { + parentanchor = bottom|hcenter + position = { 0 -16 } + + highlight_icon = { + parentanchor = center + size = { 32 32 } + texture = "gfx/interface/window_scheme/scheme_hud_icon_bg.dds" + alwaystransparent = yes + } + + highlight_icon = { + texture = "[Scheme.GetSchemeType.GetIcon]" + size = { 30 30 } + alwaystransparent = yes + parentanchor = center + } + } + + # Scheme success chance + hbox = { + parentanchor = center + position = { 0 14 } + maximumsize = { 30 20 } + spacing = 2 + + background = { + using = Background_Area_Dark + } + + icon = { + name = success_icon + size = { 20 20 } + texture = "gfx/interface/icons/schemes/icon_scheme_success.dds" + } + + text_single = { + name = "success" + text = "SCHEME_WIDGET_SUCCESS_CHANCE" + align = nobaseline + fontsize = 13 # Smallest allowed fontsize + } + + icon = { + visible = "[Scheme.IsExposed]" + size = { 20 20 } + alwaystransparent = yes + texture = "gfx/interface/icons/schemes/icon_discovered_scheme.dds" + + tooltip = "INTRIGUE_WINDOW_AGENT_DISCOVERED_TT" + } + } + + # Opportunities + widget = { + visible = "[GreaterThan_int32( Scheme.GetAgentCharges, '(int32)0' )]" + parentanchor = top|right + position = { 5 8 } + size = { 45 22 } + alwaystransparent = yes + + background = { + using = Background_Area_Dark + margin_right = 10 + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_middle.dds" + blend_mode = alphamultiply + } + } + + flowcontainer = { + parentanchor = center + + icon = { + parentanchor = vcenter + size = { 20 20 } + texture = "gfx/interface/icons/schemes/icon_scheme_opportunity.dds" + } + + text_single = { + text = "[Scheme.GetAgentCharges]" + default_format = "#high" + max_width = 25 + align = nobaseline + } + } + } + + ### Countermeasure icon + widget = { + visible = "[And(Scheme.GetSchemeCountermeasureProtectingTarget.IsValid, Scheme.GetSchemeType.IsHostile)]" + datacontext = "[Scheme.GetSchemeCountermeasureProtectingTarget]" + parentanchor = top|left + position = { 0 2 } + size = { 30 30 } + + tooltip = "SCHEME_COUNTERMEASURE_PROTECTING_TARGET" + + background = { + using = Background_Area_ExtraDark + margin = { 2 2 } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_circle.dds" + blend_mode = alphamultiply + } + } + + # The frame + icon = { + parentanchor = center + size = { 30 30 } + alwaystransparent = yes + + texture = "gfx/interface/icons/scheme_countermeasure_types/frame_purple.dds" + } + + icon = { + visible = "[SchemeCountermeasureType.IsValid]" + parentanchor = center + size = { 30 30 } + alwaystransparent = yes + + texture = "[SchemeCountermeasureType.GetIcon]" + } + } + } + } + } + + ### Task Contacts ### + flowcontainer = { + name = "task_contracts" + datamodel = "[GetPlayer.GetAcceptedTaskContracts]" + parentanchor = vcenter + ignoreinvisible = yes + + item = { + button_task_contract_banner = {} + } + } + + ### Epidemics in/near your realm ### + button_epidemics = { + name = "epidemics_hud" + parentanchor = vcenter + visible_at_creation = no + visible = "[Or( InGameBottomBar.HasGlobalNotificationEpidemic, Or( DataModelHasItems( InGameBottomBar.GetEpidemicsInRealm ), DataModelHasItems( InGameBottomBar.GetEpidemicsBorderingRealm ) ) )]" + } + + ### Wars ### + flowcontainer = { + name = "wars" + parentanchor = vcenter + ignoreinvisible = yes + + flowcontainer = { + name = "great_holy_wars" + parentanchor = vcenter + ignoreinvisible = yes + + flowcontainer = { + ignoreinvisible = yes + parentanchor = vcenter + + datamodel = "[GetPlayer.GetFaith.GetDefensiveGreatHolyWars]" + + item = { + button_ghw_banner = { + name = "defensive_ghw" + parentanchor = vcenter + + blockoverride "ghw_tooltip" + { + tooltip = "GHW_OPEN_TOOLTIP_DEFENDER" + using = tooltip_ne + } + } + } + } + + button_ghw_banner = { + name = "player_faith_ghw" + datacontext = "[GetPlayer.GetFaith.GetGreatHolyWar]" + visible = "[GetPlayer.GetFaith.HasOffensiveGreatHolyWar]" + visible_at_creation = no + parentanchor = vcenter + + blockoverride "ghw_tooltip" + { + tooltip = "GHW_OPEN_TOOLTIP_ATTACKER" + using = tooltip_ne + } + } + } + + flowcontainer = { + name = "raids_on_me" + datamodel = "[GetPlayer.GetHostileRaiders]" + parentanchor = vcenter + + item = { + button_raid_banner = { + parentanchor = vcenter + tooltip = "RAID_ON_ME_TOOLTIP" + } + } + } + + flowcontainer = { + name = "raids_by_me" + datamodel = "[GetPlayer.GetRaidTargets]" + parentanchor = vcenter + + item = { + button_raid_banner = { + parentanchor = vcenter + tooltip = "RAID_BY_ME_TOOLTIP" + } + } + } + + flowcontainer = { + name = "regular_wars" + datamodel = "[InGameBottomBar.GetWarItems]" + ignoreinvisible = yes + + item = { + button_war_banner = {} + } + } + } + + ### Situations & Struggles ### + flowcontainer = { + name = "hud_situations_tutorial_uses_this" + parentanchor = vcenter + ignoreinvisible = yes + + flowcontainer = { + name = "visible_situations" + parentanchor = vcenter + ignoreinvisible = yes + + datamodel = "[InGameBottomBar.GetVisibleSituations]" + + item = { + button_situation_banner = { + parentanchor = bottom + } + } + } + + flowcontainer = { + name = "visible_struggles" + parentanchor = vcenter + ignoreinvisible = yes + + datamodel = "[InGameBottomBar.GetVisibleStruggles]" + + item = { + button_struggle_banner = {} + } + } + + button_situation_banner = { + visible = "[InGameBottomBar.ShouldShowDynasticCycle]" + datacontext = "[InGameBottomBar.GetDynasticCycle]" + size = { 100 100 } + name = "dynastic_cycle_highlight" + + onclick = "[OpenGuiTab( 'dynastic_cycle_tabs', 'dynastic_cycle' )]" + + blockoverride "tooltipwidget" + { + tooltip = "DYNASTIC_CYCLE_OPEN_CYCLE_TT" + using = tooltip_ne + } + + blockoverride "glow_visible" + { + visible = no + } + + blockoverride "background_texture" + { + texture = "gfx/interface/hud/situation_background_dynastic_cycle.dds" + } + + blockoverride "icon_size" + { + size = { 56 56 } + position = { 0 1 } + } + + blockoverride "progress_pie_visibility" + { + visible = yes + } + + blockoverride "progresspie_size" + { + size = { 66 66 } + position = { 0 1 } + } + } + } + } + + ## Map Modes + map_modes = { + visible = "[Not(IsGameViewOpen('barbershop'))]" + filter_mouse = all + using = Animation_ShowHide_Quick + alwaystransparent = no + parentanchor = vcenter + + blockoverride "map_mode_tutorial" + { + widgetid = "map_mode_duchies_button" + } + } + } +} + +###################################################### +############# MESSAGES AND NOTIFICATIONS ############# +###################################################### + +### Message Feed +notifications_message_feed = { + position = { -10 -135 } + layer = bottom +} + +### Toasts +notifications_toasts = { + parentanchor = top|hcenter + layer = middle +} + +### Suggestions / Current Situation +notifications_suggestions = { + layer = hud_layer + + attachto = { + widgetid = "suggestions_placer" + } +} + +###################################################### +################ TYPES AND TEMPLATES ################# +###################################################### + + +types HUD +{ + + type icon_hud_background_container = container { + icon_hud_background = { + visible = "[LessThanOrEqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)1' )]" + size = { 400 64 } + } + + icon_hud_background = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)2' )]" + size = { 460 64 } + } + + icon_hud_background = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)3' )]" + size = { 520 64 } + } + + icon_hud_background = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)4' )]" + size = { 580 64 } + } + + icon_hud_background = { + visible = "[EqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)5' )]" + size = { 640 64 } + } + + icon_hud_background = { + visible = "[GreaterThanOrEqualTo_int32( InGameBottomBar.GetHudOptionalItemsCount, '(int32)6' )]" + size = { 700 64 } + } + + } + type bottom_left_temporary_statuses = flowcontainer { + name = "bottom_left_bar_temporary_statuses" + + datacontext = "[GetPlayer]" + datacontext = "[Character.GetInvolvedActivity]" + + visible = "[And( Not( IsPauseMenuShown ), And( And( IsDefaultGUIMode, Character.IsValid ), Not( GetVariableSystem.Exists( 'hide_bottom_left_HUD') ) ) )]" + visible_at_creation = no + + ignoreinvisible = yes + alwaystransparent = no + + flowcontainer = { + name = "involved_activity" + + visible = "[And( Activity.IsValid, Not( Activity.IsComplete ) )]" + visible_at_creation = no + + spacing = 8 + + activity_hud_button = { + name = "activity_button" + } + + button_hud_travel = { + name = "activity_travel_button" + datacontext = "[Character.GetTravelPlan]" + visible = "[Character.IsTraveling]" + parentanchor = "vcenter" + + text = "ACTIVITY_VIEW_TRAVEL" + tooltip = "[SelectLocalization(Character.GetTravelPlan.GetData.IsTravelWithDomicile, 'TT_TRAVELING_WITH_DOMICILE_WIDGET', 'TT_TRAVELING_GENERIC_WIDGET')]" + max_width = 160 + + onclick = "[ToggleGameViewData('travel_planner', TravelPlan.GetID)]" + onclick = "[Character.ZoomCameraTo]" + } + } + + button_normal = { + name = "traveling" + datacontext = "[Character.GetTravelPlan]" + + visible_at_creation = no + visible = "[And( Character.IsTraveling, Or( Not( Activity.IsValid ), Activity.IsComplete ) )]" + + size = { 60 60 } + + onclick = "[ToggleGameViewData('travel_planner', TravelPlan.GetID)]" + onclick = "[Character.ZoomCameraTo]" + + tooltip = "[SelectLocalization(Character.GetTravelPlan.GetData.IsTravelWithDomicile, 'TT_TRAVELING_WITH_DOMICILE_WIDGET', 'TT_TRAVELING_GENERIC_WIDGET')]" + using = tooltip_above + + icon_round_button_base = {} + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + parentanchor = center + alpha = 0.5 + } + + progresspie = { + name = "progress" + size = { 50 50 } + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + widgetanchor = center + parentanchor = center + value = "[TravelPlan.GetData.GetNextDestinationProgress]" + min = 0 + max = 1 + } + + highlight_icon = { + texture = "gfx/interface/icons/travel/icon_travel_hud_placeholder.dds" + alwaystransparent = yes + size = { 45 45 } + parentanchor = center + } + } + + button_normal = { + name = "away_from_capital" + + visible_at_creation = no + visible = "[And( Not( Character.IsTraveling ), And( Character.IsAwayFromHome, Or( Not( Activity.IsValid ), Activity.IsComplete ) ) )]" + + size = { 60 60 } + + onclick = "[Character.ZoomCameraTo]" + + tooltip = "TT_AWAY_FROM_HOME_WIDGET" + using = tooltip_above + + icon = { + texture = "gfx/interface/icons/activity_phases/button_activity_base.dds" + size = { 100% 100% } + } + + icon = { + texture = "gfx/interface/icons/character_interactions/request_camp_follower_interaction.dds" + alwaystransparent = yes + size = { 35 35 } + parentanchor = center + } + } + } + + + #### + # + # NOTE: If you add a button in here, you must update InGameBottomBar.GetHudOptionalItemsCount and use a code defined function for visibility + # Otherwise, the background (which is placed behind the player portrait) will not extend properly + # + #### + + + type bottom_left_button_row = flowcontainer { + name = "bottom_left_bar" + visible = "[And(And( Not(IsGameViewOpen('barbershop')), And( Not( IsPauseMenuShown ), And(And(IsDefaultGUIMode, GetPlayer.IsValid), Not(GetVariableSystem.Exists( 'hide_bottom_left_HUD'))))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_left_bar').GetValue, '(CFixedPoint)0' ) ))]" + ignoreinvisible = yes + alwaystransparent = no + allow_outside = yes + spacing = 4 + + state = { + name = _show + using = Animation_Curve_Default + duration = 0.21 + + position = { 66 0 } + alpha = 1 + } + + state = { + name = _hide + using = Animation_Curve_Default + duration = 0.21 + + position = { 30 50 } + alpha = 0 + } + + button_normal = { + name = "legitimacy_button" + datacontext = "[Character.GetLegitimacyType]" + datacontext = "[Character.GetLegitimacyLevel]" + visible = "[InGameBottomBar.ShouldShowLegitimacyInHUD]" + parentanchor = vcenter + + using = tooltip_ne + + tooltipwidget = { + legitimacy_hud_tooltip = { + datacontext = "[InGameBottomBar.GetLegitimacyBar]" + } + } + + size = { 48 48 } + + icon = { + texture = "gfx/interface/icons/activity_phases/button_activity_base.dds" + size = { 100% 100% } + } + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + #alpha = 0.5 + } + + icon = { + parentanchor = vcenter + position = { 6 0 } + size = { 36 36 } + + texture = "[Character.GetLegitimacyType.GetLevelsIcon]" + framesize = { 70 70 } + frame = "[IntToFrameIndex( LegitimacyLevel.GetIndex )]" + + modify_texture = { + name = "lvl_increase" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + name = "lvl_decrease" + texture = "gfx/interface/colors/red.dds" + blend_mode = colordodge + alpha = 0 + } + + state = { + name = "legitimacy_level_increase" + next = "legitimacy_level_increase_2" + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "legitimacy_level_increase_2" + next = "legitimacy_level_increase_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_increase" + alpha = 0.7 + } + } + + state = { + name = "legitimacy_level_increase_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "legitimacy_level_decrease" + next = "legitimacy_level_decrease_2" + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + + state = { + name = "legitimacy_level_decrease_2" + next = "legitimacy_level_decrease_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0.7 + } + } + + state = { + name = "legitimacy_level_decrease_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + } + + progresspie = { + name = "progress" + size = { 42 42 } + + texture = "gfx/interface/progressbars/action_progress_thin_blue.dds" + framesize = { 128 128 } + frame = 2 + value = "[InGameBottomBar.GetLegitimacyProgress]" + parentanchor = center + + modify_texture = { + texture = "gfx/interface/colors/blue.dds" + blend_mode = normal + } + } + } + + widget = { + name = "stress_widget" + size = { 110 55 } + alwaystransparent = no + filter_mouse = all + + widget = { + parentanchor = center + size = { 180 108 } + + tooltip = "PLAYER_STRESS_TOOLTIP" + using = tooltip_ne + + widget = { + name = "progressbar" + parentanchor = center + widgetanchor = left|vcenter + position = { -13 0 } + size = { 60 20 } + + background = { + texture = "gfx/interface/colors/white.dds" + color = { 0.1 0.1 0.1 0.8 } + } + + icon = { + visible = "[EqualTo_int32(GetPlayer.GetStressLevel, '(int32)2')]" + size = { 100% 100% } + texture = "gfx/interface/colors/white.dds" + color = { 1 0.1 0.1 0.2 } + + using = Animation_ShowHide_Standard + + state = { + name = a + next = b + trigger_on_create = yes + + using = Animation_Curve_Default + duration = 0.8 + alpha = 0 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1.5 + alpha = 1 + } + } + + hbox = { + widget = { + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + layoutstretchfactor_horizontal = "[GetProgressBarValueMaxScaled( GetPlayer.GetStressProgress, '(float)100', '(int32)60' )]" + + progressbar_hud_stress = { + visible = "[GreaterThanOrEqualTo_int32(GetPlayer.GetStressLevel, '(int32)3')]" + visible_at_creation = no + size = { 100% 100% } + + using = Animation_ShowHide_Standard + + blockoverride "bar_color" + { + texture = "gfx/interface/colors/red.dds" + } + + blockoverride "bar_color_flow" + { + texture = "gfx/interface/colors/gold.dds" + alpha = 0.7 + } + } + + progressbar_hud_stress = { + visible = "[EqualTo_int32(GetPlayer.GetStressLevel, '(int32)2')]" + visible_at_creation = no + size = { 100% 100% } + + using = Animation_ShowHide_Standard + + blockoverride "bar_color" + { + texture = "gfx/interface/colors/orange.dds" + } + + blockoverride "bar_color_flow" + { + texture = "gfx/interface/colors/white.dds" + alpha = 0.3 + } + } + + progressbar_hud_stress = { + visible = "[EqualTo_int32(GetPlayer.GetStressLevel, '(int32)1')]" + visible_at_creation = no + size = { 100% 100% } + + using = Animation_ShowHide_Standard + + blockoverride "bar_color" + { + texture = "gfx/interface/colors/gold_darker.dds" + } + + blockoverride "bar_color_flow" + { + texture = "gfx/interface/colors/white.dds" + alpha = 0.3 + } + } + + progressbar_hud_stress = { + visible = "[EqualTo_int32(GetPlayer.GetStressLevel, '(int32)0')]" + size = { 100% 100% } + + using = Animation_ShowHide_Standard + + blockoverride "bar_color" + { + texture = "gfx/interface/colors/blue.dds" + } + + blockoverride "bar_color_flow" + { + texture = "gfx/interface/colors/white.dds" + alpha = 0.3 + } + } + } + + widget = { + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + layoutstretchfactor_horizontal = "[GetProgressBarValueMaxOtherScaled( GetPlayer.GetStressProgress, '(float)100', '(int32)60' )]" + } + } + } + + widget = { + size = { 100% 100% } + + progressbar_hud_stress_glow = { + texture = "gfx/interface/hud/hud_stress_glow_red.dds" + + blockoverride "animation_trigger_1" + { + name = "stress_level_increase" + } + + blockoverride "animation_trigger_2" + { + name = "stress_increase" + } + } + + progressbar_hud_stress_glow = { + texture = "gfx/interface/hud/hud_stress_glow_blue.dds" + + blockoverride "animation_trigger_1" { + name = "stress_level_decrease" + } + + blockoverride "animation_trigger_2" + { + name = "stress_decrease" + } + } + + progressbar_hud_stress_glow = { + visible = "[EqualTo_int32(GetPlayer.GetStressLevel, '(int32)3')]" + texture = "gfx/interface/hud/hud_stress_glow_red.dds" + + blockoverride "animation_trigger_1" { + name = "lvl3_fire" + trigger_on_create = yes + } + + blockoverride "animation_trigger_2" {} + blockoverride "lvl_3" {} + } + + icon = { + parentanchor = center + position = { -30 0 } + size = { 30 30 } + texture = "gfx/interface/colors/white.dds" + using = Color_Red + + + modify_texture = { + name = "mask_1" + texture = "gfx/interface/component_masks/mask_glow.dds" + blend_mode = alphamultiply + rotate_uv = 1 + } + + modify_texture = { + name = "mask_2" + texture = "gfx/interface/component_masks/mask_glow.dds" + blend_mode = alphamultiply + rotate_uv = -1 + } + + modify_texture = { + name = "mask_3" + texture = "gfx/interface/component_masks/mask_clouds.dds" + blend_mode = alphamultiply + alpha = 0.1 + } + + modify_texture = { + name = "mask_4" + texture = "gfx/interface/component_masks/mask_circle.dds" + blend_mode = mask + } + + modify_texture = { + name = "mask_3" + texture = "gfx/interface/colors/gold.dds" + blend_mode = add + } + + state = { + name = "stress_level_increase" + next = b + + using = Animation_Curve_Default + scale = 1 + alpha = 0 + } + + state = { + name = b + next = c + + duration = 0.6 + bezier = { 0.5 0 1 0.5 } + + scale = 5 + alpha = 0.7 + } + + state = { + name = c + duration = 0.3 + alpha = 0 + scale = 6 + } + + state = { + name = rotate_a + next = rotate_b + trigger_on_create = yes + + modify_texture = { + name = "mask_1" + rotate_uv = 1 + } + } + + state = { + name = rotate_a + next = rotate_b + + duration = 1 + + modify_texture = { + name = "mask_1" + rotate_uv = 180 + } + } + + state = { + name = rotate_a_2 + next = rotate_b_2 + trigger_on_create = yes + + modify_texture = { + name = "mask_2" + rotate_uv = -1 + } + } + + state = { + name = rotate_a_2 + next = rotate_b_2 + + duration = 1 + + modify_texture = { + name = "mask_2" + rotate_uv = -180 + } + } + + state = { + name = rotate_a_3 + next = rotate_b_3 + trigger_on_create = yes + + modify_texture = { + name = "mask_3" + rotate_uv = 0 + alpha = 0.1 + } + } + + state = { + name = rotate_a_3 + next = rotate_b_3 + + duration = 1 + + modify_texture = { + name = "mask_3" + rotate_uv = 40 + alpha = 0.8 + } + } + } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/skinned/hud_stress_bg.dds" + + icon = { + parentanchor = vcenter + position = { 41 0 } + size = { 35 35 } + + texture = "gfx/interface/icons/stress/icon_stress_level.dds" + framesize = { 70 70 } + frame = "[IntToFrameIndex( GetPlayer.GetStressLevel )]" + + modify_texture = { + visible = "[GreaterThanOrEqualTo_int32(GetPlayer.GetStressLevel, '(int32)2')]" + name = "lvl3_glow" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + name = "lvl_increase" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + state = { + name = a + next = b + duration = 0.6 + trigger_on_create = yes + using = Animation_Curve_Default + + modify_texture = { + name = "lvl3_glow" + alpha = 0.3 + } + } + + state = { + name = b + next = a + duration = 1.5 + using = Animation_Curve_Default + + modify_texture = { + name = "lvl3_glow" + alpha = 0 + } + } + + state = { + name = "stress_level_increase" + next = "stress_level_increase_2" + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "stress_level_increase_2" + next = "stress_level_increase_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_increase" + alpha = 0.7 + } + } + + state = { + name = "stress_level_increase_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + } + } + } + } + } + + spacer = { + size = { 5 0 } + } + + flowcontainer = { + ignoreinvisible = yes + margin_bottom = 5 + spacing = 4 + + button_normal = { + name = "lifestyle_button" + visible = "[GetPlayer.IsAdult]" + + tooltip = "PLAYER_LIFESTYLE_TOOLTIP" + using = tooltip_ne + + onclick = "[OpenGameViewData( 'lifestyle', GetPlayer.GetID )]" + size = { 56 56 } + + icon_round_button_base = {} + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + alpha = 0.5 + } + + highlight_icon_lifestyle_focus = { + name = "tutorial_highlight_lifestyle_HUD_button" + texture = "[GetPlayer.GetFocus.GetIcon]" + alwaystransparent = yes + size = { 100% 100% } + + modify_texture = { + texture = "gfx/interface/icons/focuses/hud_icon_mask.dds" + blend_mode = alphamultiply + } + } + + icon = { + visible = "[And(Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_pulsating_lifestyle').GetValue, '(CFixedPoint)0' ) ),Or(GetPlayer.CanPlayerChangeMyFocus, Not( GetPlayer.GetLifestyle.IsValid )))]" + size = { 100% 100% } + alwaystransparent = yes + texture = "[GetPlayer.GetFocus.GetIcon]" + + modify_texture = { + texture = "gfx/interface/icons/focuses/hud_icon_mask.dds" + blend_mode = alphamultiply + } + + modify_texture = { + texture = "gfx/interface/colors/gold.dds" + blend_mode = add + + } + + modify_texture = { + texture = "gfx/interface/colors/red.dds" + blend_mode = colordodge + } + + state = { + name = a + next = b + alpha = 0 + trigger_on_create = yes + duration = 1.2 + using = Animation_Curve_Default + } + + state = { + name = b + next = a + alpha = 0.8 + duration = 0.6 + using = Animation_Curve_Default + } + } + + progresspie = { + name = "progress" + size = { 48 48 } + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + value = "[GetPlayer.GetLifestyleExperienceProgress( GetPlayer.GetLifestyle.Self )]" + widgetanchor = center + parentanchor = center + position = { 0 0 } + min = 0 + max = 1 + } + + button_round = { + datacontext = "[GetPlayer]" + visible = "[And(GreaterThan_int32( Character.GetTotalPerkPoints, '(int32)0' ), Character.IsLocalPlayer)]" + parentanchor = bottom|right + position = { 7 3 } + size = { 28 28 } + framesize = { 82 82 } + upframe = 1 + uphoverframe = 1 + uppressedframe = 1 + alwaystransparent = yes + + text_single = { + parentanchor = center + datacontext = "[GetPlayer]" + text = "[Character.GetTotalPerkPoints]" + default_format = "#high" + max_width = 180 + align = nobaseline + + # animation_attention = { + # visible = "[GreaterThan_int32( GetPlayer.GetTotalPerkPoints, '(int32)0' )]" + # } + } + } + + animation_sonar = { + texture = "gfx/interface/component_effects/effect_sonar_ring.dds" + visible = "[GreaterThan_int32( GetPlayer.GetTotalPerkPoints, '(int32)0' )]" + } + } + + button_normal = { + name = "education_button" + visible = "[Not(GetPlayer.IsAdult)]" + + tooltip = "PLAYER_EDUCATION_FOCUS_TOOLTIP" + using = tooltip_ne + + onclick = "[ToggleGameViewData( 'character_focus', GetPlayer.GetID )]" + size = { 56 56 } + + icon_round_button_base = {} + + highlight_icon_lifestyle_focus = { + texture = "[GetPlayer.GetFocus.GetIcon]" + onclick = "[ToggleGameViewData( 'character_focus', GetPlayer.GetID )]" + size = { 100% 100% } + gfxtype = togglepushbuttongfx + effectname = "NoHighlight" + framesize = { 140 140 } + + modify_texture = { + texture = "gfx/interface/icons/focuses/hud_icon_mask.dds" + blend_mode = alphamultiply + } + } + } + + + widget = { + size = { 56 56 } + + button_open_inventory = { + name = "open_inventory_tutorial_uses_this" + using = tooltip_ne + + size = { 55 55 } + datacontext = "[GetPlayer]" + blockoverride "highlight_icon_size" + { + size = { 40 40 } + } + } + + widget_new_artifacts = { + position = { 6 2 } + parentanchor = bottom|right + visible = "[Or( GreaterThan_int32( LocalPlayerNewArtifacts.GetNumNewArtifactsOfCategory( 'inventory' ), '(int32)0' ), And( Not( GetPlayer.HasRoyalCourt ), GreaterThan_int32( LocalPlayerNewArtifacts.GetNumNewArtifactsOfCategory( 'court' ), '(int32)0' ) ) )]" + } + } + + button_round = { + name = "open_diarchy_tutorial_uses_this" + parentanchor = left + onclick = "[ToggleGameViewData( 'diarchy', Character.GetID )]" + visible = "[InGameBottomBar.ShouldShowDiarchyInHUD]" + + tooltip = "DIARCHY_WINDOW_OPEN_TOOLTIP" + using = tooltip_ne + size = { 56 56 } + + icon_round_button_base = {} + + button = { + size = { 40 40 } + alwaystransparent = yes + parentanchor = center + texture = "gfx/interface/icons/scale_of_power.dds" + } + + icon_power_sharing_level = { + name = "your_power_sharing_level" + + datacontext = "[GetPlayer.GetDiarchy]" + visible = "[Diarchy.IsValid]" + + parentanchor = bottom|right + position = { 3 3 } + + } + + icon_power_sharing_level = { + name = "liege_power_sharing_level" + + datacontext = "[GetPlayer.GetLiege.GetDiarchy]" + visible = "[And(GetPlayer.HasLiege, Diarchy.IsValid)]" + + parentanchor = bottom|right + position = { 3 3 } + } + + } + + # Radiance (enabled) + button_normal = { + datacontext = "[Character.GetRadianceBreakdown]" + visible = "[InGameBottomBar.ShouldShowRadianceInHUD]" + size = { 56 56 } + + using = tooltip_ne + + tooltip_visible = "[ValueBreakdown.HasTooltip]" + tooltipwidget = { + visible = "[ValueBreakdown.HasTooltip]" + widget_value_breakdown_tooltip = { + blockoverride "input_info_text" { + text = "SELECT_MANDALA_MAPMODE" + default_format = "#I" + } + } + } + + onclick = "[ToggleMapMode( 'mandala' )]" + + icon_round_button_base = { + parentanchor = center + size = { 100% 100% } + } + + button_icon = { + alwaystransparent = yes + texture = "gfx/interface/icons/flat_icons/mandala_radiance.dds" + size = { 60% 60% } + parentanchor = center + } + + } + + button_round = { + name = "hud_camp_button" #tutorial uses this + widgetid = "hud_camp_button" + datacontext = "[Character.GetDomicile]" + visible = "[InGameBottomBar.ShouldShowDomicileInHUD]" + parentanchor = left + size = { 56 56 } + using = tooltip_ne + + onclick = "[ToggleGameViewData( 'domicile', Domicile.Self )]" + tooltip = "[Domicile.GetMapPinTooltip( Character.Self )]" + + icon_round_button_base = {} + + progresspie = { + name = "progress" + visible = "[Domicile.IsConstructing]" + + size = { 48 48 } + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + value = "[Domicile.GetConstructionProgress]" + widgetanchor = center + parentanchor = center + position = { 0 0 } + min = 0 + max = 1 + } + + button_icon = { + size = { 40 40 } + position = { 0 -1 } + parentanchor = center + alwaystransparent = yes + texture = "[Domicile.GetType.GetIcon]" + } + } + + # Bloc + button_normal = { + name = "confederation_button" #tutorial uses this + datacontext = "[GetPlayer.GetConfederation]" + visible = "[InGameBottomBar.ShouldShowBlocInHUD]" + parentanchor = left + size = { 56 56 } + + onclick = "[OpenGameViewData( 'confederation_window', Confederation.GetID )]" + + using = tooltip_ne + tooltip_offset = { 20 0 } + + tooltipwidget = { + using = confederation_tooltip + } + + icon_round_button_base = { + alwaystransparent = yes + parentanchor = center + size = { 100% 100% } + + button_icon = { + alwaystransparent = yes + texture = "gfx/interface/icons/flat_icons/confederations.dds" + size = { 60% 60% } + parentanchor = center + } + } + } + + button_normal = { + name = "house_power_hud_button" #tutorial uses this + datacontext = "[Character.GetHouse]" + datacontext = "[DynastyHouse.GetHouseAspiration]" + + visible = "[And(InGameBottomBar.ShouldShowHousePowerInHUD, Not( IsLandlessAdventurer( GetPlayer ) ) )]" + + size = { 56 56 } + + onclick = "[ToggleGameViewData( 'house_aspiration_window', DynastyHouse.Self )]" + tooltip = "OPEN_HOUSE_ASPIRATION_TT_SELECT" + using = tooltip_ne + + icon_round_button_base = { + parentanchor = center + size = { 100% 100% } + } + + powerful_family_bonus_icon = { + parentanchor = center + size = { 46 46 } + } + + animation_sonar = { + texture = "gfx/interface/component_effects/effect_sonar_ring.dds" + visible = "[ObjectsEqual( GetHouseAspiration('no_aspect'), HouseAspiration.Self)]" + } + } + } + + spacer = { + size = { 24 1 } + } + + nomad_widget = { + visible = "[IsNomad( GetPlayer )]" + datacontext = "[InGameBottomBar.GetDomainFertilityProgressBar]" + } + + widget_stress_sounds = {} + } + + + type left_edge_tabs = flowcontainer { + name = "side_bottom_left_tabs" + visible = "[And(And( Not( IsPauseMenuShown ), And(And(IsDefaultGUIMode, Character.IsValid), Not(GetVariableSystem.Exists( 'hide_bottom_left_HUD')))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_bottom_left_bar').GetValue, '(CFixedPoint)0' ) ))]" + visible_at_creation = no + + ignoreinvisible = yes + alwaystransparent = no + + using = Animation_ShowHide_Standard + + widget = { + parentanchor = left|top + size = { 100% 150% } + + widget = { + size = { 100% 100% } + position = { -24 -20} + + Background = { + texture = "gfx/interface/skinned/hud_maintab_bg_middle.dds" + mirror = horizontal + spriteType = CorneredTiled + texture_density = 2 + margin = { 0 -50 } + } + + Background = { + spriteType = CorneredStretched + spriteborder_top = 100 + parentanchor = top|right + texture_density = 2 + size = { 50 100 } + texture = "gfx/interface/skinned/hud_maintab_bg_top.dds" + mirror = horizontal + } + + Background = { + spriteType = CorneredStretched + spriteborder_bottom = 100 + parentanchor = top|right + texture_density = 2 + size = { 50 100 } + texture = "gfx/interface/skinned/hud_maintab_bg_bottom.dds" + mirror = horizontal + } + + Background = { + size = { 100% 100% } + margin_bottom = 100 + using = Background_Area_Dark + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_vertical_up.dds" + blend_mode = alphaMultiply + } + + } + } + } + + flowcontainer = { + parentanchor = bottom + ignoreinvisible = yes + direction = vertical + + button_hud_character_bar = { + name = "legend_tab" + visible = "[HasDlcFeature( 'legends' )]" + + onclick = "[ToggleGameView( 'legends' )]" + + tooltipwidget = { + legends_hud_tooltip = {} + } + + using = tooltip_es + tooltip_offset = { 20 0 } + + highlight_icon = { + parentanchor = center + position = { 0 1 } + size = { 40 40 } + texture = "gfx/interface/icons/legend_hud.dds" + scale = 0.9 + + glow = { + color = { 0 0 0 0.8 } + glow_radius = 3 + using = Glow_Standard + } + } + } + + button_hud_character_bar = { + name = "player_culture_button_tutorial_uses_this" + datacontext = "[GetPlayer.GetCulture]" + onclick = "[OpenGameViewData( 'culture_window', Culture.GetID )]" + + using = tooltip_es + tooltip_offset = { 20 0 } + + tooltipwidget = { + culture_tooltip_click = {} + } + + highlight_icon = { + parentanchor = center + position = { 0 1 } + size = { 40 40 } + texture = "gfx/interface/icons/icon_culture.dds" + + glow = { + color = { 0 0 0 0.8 } + glow_radius = 3 + using = Glow_Standard + } + } + } + + # Faith + button_hud_character_bar = { + name = "faith_button" + datacontext = "[GetPlayer.GetFaith]" + parentanchor = left + + onclick = "[OpenGameViewData( 'faith', GetPlayer.GetFaith.GetID )]" + + using = tooltip_es + tooltip_offset = { 20 0 } + + tooltipwidget = { + faith_tooltip_click = {} + } + + highlight_icon = { + texture = "[Faith.GetIcon]" + size = { 40 40 } + position = { 0 1 } + parentanchor = center + + glow = { + color = { 0 0 0 0.8 } + glow_radius = 3 + using = Glow_Standard + } + } + } + + # Confederation + button_hud_character_bar = { + name = "confederation_button" #tutorial uses this + datacontext = "[GetPlayer.GetConfederation]" + visible = "[And(Confederation.IsValid, Not(Confederation.GetType.IsHouseBasedConfederation))]" + parentanchor = left + + onclick = "[OpenGameViewData( 'confederation_window', Confederation.GetID )]" + + using = tooltip_es + tooltip_offset = { 20 0 } + + tooltipwidget = { + using = confederation_tooltip + } + + button = { + visible = "[Not(Confederation.GetType.IsHouseBasedConfederation)]" + parentanchor = top|hcenter + alwaystransparent = yes + position = { 0 -10 } + size = { 42 42 } + texture = "gfx/interface/icons/diplomatic_icons.dds" + frame = "5" + framesize = { 120 120 } + tooltip_visible = no + } + + coat_of_arms_icon = { + visible = "[Not(Confederation.GetType.IsHouseBasedConfederation)]" + parentanchor = center + position = { 0 1 } + size = { 28 28 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = 0.4 + } + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_28.dds" + size = { 36 36 } + } + } + } + + # Dynasty House + button_hud_character_bar = { + name = "house_button" + datacontext = "[GetPlayer.GetHouse]" + onclick = "[DefaultOnHouseCoatOfArmsClick(DynastyHouse.GetID)]" + parentanchor = left + + using = tooltip_es + tooltip_offset = { 20 0 } + + tooltipwidget = { + using = dynasty_house_tooltip + } + + coa_house_tiny = { + parentanchor = center + position = { 0 1 } + scale = 0.92 + + blockoverride "coa_button" + { + alwaystransparent = yes + } + + blockoverride "coa_tooltip" + {} + } + } + } + } + + + type bottom_left_portrait = container { + datacontext = "[GetPlayer]" + visible = "[And(And( Not(IsGameViewOpen('barbershop')) , And(GetPlayer.IsValid, Not(GetVariableSystem.Exists( 'hide_bottom_left_HUD')))), Not( GreaterThan_CFixedPoint( GetPlayer.MakeScope.Var('hide_ui_character_model').GetValue, '(CFixedPoint)0' ) ))]" + visible_at_creation = no + + + state = { + name = _show + using = Animation_Curve_Default + duration = 0.15 + + position = { 0 0 } + alpha = 1 + } + + state = { + name = _hide + using = Animation_Curve_Default + duration = 0.15 + + position = { 0 50 } + alpha = 0 + } + + portrait_hud = { + scale = 1.3 + parentanchor = center + position = { -20 -40 } + } + + icon = { + texture = "gfx/interface/hud/bottom_left_portrait_fade.dds" + parentanchor = bottom|left + color = { 0.12 0.12 0.12 1 } + } + + icon = { + texture = "gfx/interface/hud/bottom_left_portrait_fade.dds" + parentanchor = bottom|left + color = { 0.15 0.15 0.15 0.3 } + } + } + + + + + type Animation_HUD_daily_tick = widget { + using = Animation_ShowHide_Quick + + icon = { + size = { 100% 100% } + texture = "gfx/interface/colors/white.dds" + shaderfile = "gfx/FX/pdxgui_repeat_texture.shader" + color = { 0.63 0.59 0.68 1 } + + block "alpha" + { + alpha = 0.5 + } + + modify_texture = { + name = "pattern" + texture = "gfx/interface/component_masks/mask_clouds.dds" + spriteType = corneredtiled + blend_mode = alphamultiply + } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_middle_thick.dds" + blend_mode = alphamultiply + } + + state = { + name = a + next = b + duration = 0 + trigger_on_create = yes + + modify_texture = { + name = "pattern" + translate_uv = { 0 0 } + } + } + + state = { + name = b + next = a + block "duration" + { + duration = 2 + } + + modify_texture = { + name = "pattern" + translate_uv = { -1 0 } + } + } + } + } + + type progressbar_hud_stress_glow = icon { + size = { 100% 100% } + + block "lvl_3" + { + alpha = 0 + } + + shaderfile = "gfx/FX/pdxgui_repeat_texture.shader" + + modify_texture = { + name = "clouds" + texture = "gfx/interface/component_masks/mask_clouds.dds" + blend_mode = alphamultiply + spriteType = corneredtiled + texture_density = 3 + } + + state = { + name = mask_a + next = mask_b + trigger_on_create = yes + + modify_texture = { + name = "clouds" + translate_uv = { 0 -1 } + } + } + + state = { + name = mask_b + next = mask_a + duration = 8 + + modify_texture = { + name = "clouds" + translate_uv = { 0 1 } + } + } + + state = { + block "animation_trigger_1" + { + name = "stress_level_increase" + } + next = "fade_out" + + duration = 0.2 + delay = 0.3 + bezier = { 0.5 0 1 0.5 } + alpha = 1 + } + + block "lvl_3" { + state = { + block "animation_trigger_2" + { + name = "stress_increase" + } + next = "fade_out" + + duration = 0.2 + delay = 0.3 + bezier = { 0.5 0 1 0.5 } + alpha = 1 + } + + state = { + name = "fade_out" + + duration = 1.5 + bezier = { 0 0.5 0.5 1 } + alpha = 0 + } + } + } + + type progressbar_hud_stress = icon { + shaderfile = "gfx/FX/pdxgui_repeat_texture.shader" + alpha = 0.8 + + block "bar_color" + { + # texture = "gfx/interface/colors/red.dds" + } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_rough_edges.dds" + spriteType = Corneredtiled + spriteborder = { 20 20 } + blend_mode = alphamultiply + texture_density = 5 + } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal.dds" + blend_mode = alphamultiply + alpha = 0.3 + } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_scratches.dds" + blend_mode = alphamultiply + spriteType = corneredtiled + alpha = 0.3 + texture_density = 3 + } + + modify_texture = { + name = "flash" + texture = "gfx/interface/colors/white.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + visible = "[GreaterThanOrEqualTo_int32(GetPlayer.GetStressLevel, '(int32)2')]" + name = "lvl3_glow" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + name = "clouds" + texture = "gfx/interface/component_masks/mask_clouds_solid.dds" + blend_mode = mask + spriteType = corneredtiled + texture_density = 1 + } + + modify_texture = { + block "bar_color_flow" + { + # texture = "gfx/interface/colors/yellow.dds" + alpha = 0.3 + } + blend_mode = colordodge + } + + state = { + name = "lvl3_glow_a" + next = "lvl3_glow_b" + duration = 0.6 + trigger_on_create = yes + using = Animation_Curve_Default + + modify_texture = { + name = "lvl3_glow" + alpha = 0.5 + } + } + + state = { + name = "lvl3_glow_b" + next = "lvl3_glow_a" + duration = 1.5 + using = Animation_Curve_Default + + modify_texture = { + name = "lvl3_glow" + alpha = 0 + } + } + + state = { + name = "stress_level_increase" + next = "fade_out" + + duration = 0.1 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "flash" + alpha = 0.6 + } + } + + state = { + name = "stress_increase" + next = "fade_out" + + duration = 0.1 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "flash" + alpha = 0.6 + } + } + + state = { + name = "fade_out" + + duration = 0.8 + bezier = { 0 0.5 0.5 1 } + + + modify_texture = { + name = "flash" + alpha = 0 + } + } + + state = { + name = a + next = b + trigger_on_create = yes + + modify_texture = { + name = "clouds" + translate_uv = { 1 0 } + } + } + + state = { + name = b + next = a + duration = 15 + + modify_texture = { + name = "clouds" + translate_uv = { -1 0 } + } + } + } + + type button_raise_disband_armies = button_standard { + size = { 200 64 } + datacontext = "[GetPlayer]" + parentanchor = vcenter + + background = { + using = Background_Area_Dark_Border + } + + background = { + using = Background_Area_Dark + } + + margin_left = 45 + + + block "text" { + text = "RAISE_ALL" + } + + using = tooltip_ne + + icon = { + texture = "gfx/interface/icons/icon_banner.dds" + size = { 40 40 } + alwaystransparent = yes + parentanchor = left|vcenter + position = { 10 0 } + } + + state = { + name = _show + using = Animation_FadeIn_Quick + position_y = 0 + } + + state = { + name = _hide + using = Animation_FadeOut_Quick + position_y = 20 + } + } + + type button_hud_travel = button_standard { + size = { 170 36 } + datacontext = "[GetPlayer]" + parentanchor = vcenter + + background = { + using = Background_Area_Dark_Border + } + + margin_left = 34 + + using = tooltip_ne + + icon = { + texture = "gfx/interface/icons/travel/icon_travel_hud_placeholder.dds" + size = { 30 30 } + alwaystransparent = yes + parentanchor = left|vcenter + position = { 8 0 } + } + + state = { + name = _show + using = Animation_FadeIn_Quick + position_y = 0 + } + + state = { + name = _hide + using = Animation_FadeOut_Quick + position_y = 20 + } + } + + type button_war_banner = button_normal { + visible = "[Not(IsGameViewOpen('barbershop'))]" + size = { 78 82 } + onclick = "[WarItem.OnClick]" + tooltip = "[WarItem.GetTooltip]" + using = tooltip_ne + + animation_sonar = { + visible = "[WarItem.CanEnforceVictory]" + texture = "gfx/interface/component_masks/mask_glow.dds" + using = Color_Orange + } + + ##Show animation + state = { + name = _show + next = banner_default + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + size = { 86 88 } + alpha = 1 + trigger_on_create = yes + } + + state = { + name = banner_default + using = Animation_FadeIn_Standard + size = { 78 82 } + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + bezier = { 1 0 0.5 0.5 } + size = { 66 70 } + alpha = 0 + } + + icon = { + name = "enforce_victory_glow" + visible = "[WarItem.CanEnforceVictory]" + parentanchor = center + size = { 100% 100% } + scale = 1.2 + texture = "gfx/interface/icons/war_status/war_won_glow.dds" + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 1 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1.6 + alpha = 0.2 + } + } + + button = { + name = "enforce_victory_icon" + visible = "[WarItem.CanEnforceVictory]" + parentanchor = hcenter + position = { 0 -27 } + texture = "gfx/interface/icons/war_status/war_won_icon.dds" + + modify_texture = { + name = "shimmer_war_banner" + texture = "gfx/interface/component_effects/effect_shimmer.dds" + blend_mode = colordodge + translate_uv = { 1 1 } + alpha = 0.8 + } + + state = { + name = shimmer + next = pause + trigger_when = "[WarItem.CanEnforceVictory]" + delay = 0.5 + bezier = { 0 0.9 1 0.4 } + + modify_texture = { + name = "shimmer_war_banner" + translate_uv = { 1 0.8 } + alpha = 0.5 + } + } + + state = { + name = pause + duration = 0.8 + + modify_texture = { + name = "shimmer_war_banner" + translate_uv = { -1 -1 } + alpha = 0.5 + } + } + } + + highlight_icon = { + name = "war_icon" + visible = "[WarItem.IsPlayerParticipant]" + parentanchor = center + size = { 100% 100% } + texture = "gfx/interface/icons/war_status/war_icon.dds" + + modify_texture = { + name = "shimmer_war_banner" + texture = "gfx/interface/component_effects/effect_shimmer.dds" + blend_mode = colordodge + translate_uv = { 1 1 } + } + + state = { + name = shimmer + next = pause + trigger_when = "[WarItem.CanEnforceVictory]" + delay = 0.5 + bezier = { 0 0.9 1 0.4 } + + modify_texture = { + name = "shimmer_war_banner" + translate_uv = { 1 0.5 } + alpha = 0.5 + } + } + + state = { + name = pause + duration = 0.8 + + modify_texture = { + name = "shimmer_war_banner" + translate_uv = { -1 -1 } + alpha = 0.5 + } + } + } + + highlight_icon = { + name = "war_icon_liege" + visible = "[Not(WarItem.IsPlayerParticipant)]" + parentanchor = center + size = { 100% 100% } + texture = "gfx/interface/icons/war_status/war_icon_liege.dds" + } + + coa_realm_small = { + name = "enemy_realm" + datacontext = "[WarItem.GetWar.GetPrimaryPlayerEnemy]" + parentanchor = hcenter + scale = 0.9 + position = { 0 25 } + tooltip_visible = no + alwaystransparent = yes + } + + text_single = { + name = "warscore" + parentanchor = bottom|hcenter + position = { 0 -7 } + size = { 50 10 } + align = center + text = "[WarItem.GetWarScoreFraction|0%=+]" + + background = { + using = Background_Area_Dark + } + } + + widget = { + visible = "[WarItem.CanEnforceVictory]" + + state = { + name = _show + + start_sound = { + soundeffect = "event:/SFX/UI/War/sfx_ui_war_enforce_demand" + soundparam = { + name = StateChange + value = 1.5 + } + } + } + } + } + + type button_task_contract_banner = button_normal { + size = { 100 100 } + + icon = { + visible = "[And( TaskContract.IsEasy, Not(TaskContract.IsCriminal) )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_1.dds" + } + icon = { + visible = "[And( TaskContract.IsEasy, TaskContract.IsCriminal )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_1_crime.dds" + } + + icon = { + visible = "[And( TaskContract.IsMedium, Not(TaskContract.IsCriminal) )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_2.dds" + } + icon = { + visible = "[And( TaskContract.IsMedium, TaskContract.IsCriminal )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_2_crime.dds" + } + + icon = { + visible = "[And( TaskContract.IsHard, Not(TaskContract.IsCriminal) )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_3.dds" + } + icon = { + visible = "[And( TaskContract.IsHard, TaskContract.IsCriminal )]" + size = { 100% 100% } + texture = "gfx/interface/window_contract/pin_contract_3_crime.dds" + } + + highlight_icon = { + parentanchor = center + alwaystransparent = yes + texture = "[TaskContract.GetType.GetIcon]" + size = { 40% 40% } + position = { 0 -2 } + } + + onclick = "[ToggleGameViewData('task_contract', TaskContract.Self )]" + tooltip = "[TaskContract.GetName]" + using = tooltip_ne + } + + type button_situation_banner = button_normal { + name = "situation_banner_item" + size = { 90 90 } + + onclick = "[ToggleGameViewData(Situation.GetWindowName, Situation.GetID)]" + + block "tooltipwidget" + { + tooltipwidget = situation_tooltip + using = tooltip_nw + } + + widget = { + name = "natural_disaster_highlight" + size = { 100% 100% } + visible = "[Or(EqualTo_string( 'impact' , Situation.GetTopCurrentPhase.GetType.GetKey ), EqualTo_string( 'warning' , Situation.GetTopCurrentPhase.GetType.GetKey ))]" + } + + icon = { + name = "below_glow" + block "glow_visible" + { + visible = "[GreaterThan_CFixedPoint( Situation.GetTopCurrentPhase.GetRelativeProgress, '(CFixedPoint)0.8' )]" + } + size = { 100% 100% } + texture = "gfx/interface/icons/character_interactions/icon_bg.dds" + + using = Animation_Glow_Pulse + + glow = { + glow_radius = 5 + using = Glow_Standard + using = Color_Bright_Yellow + } + } + + # Current phase + widget = { + size = { 100% 100% } + datacontext = "[Situation.GetTopCurrentPhase]" + parentanchor = center + + button = { + size = { 88% 88% } + parentanchor = center + + block "background_texture" + { + texture = "gfx/interface/window_situations/hud_situation_widget.dds" + } + alwaystransparent = yes + } + + icon = { + parentanchor = center + block "icon_size" + { + size = { 60% 60% } + } + + block "button_icon" + { + texture = "[Situation.GetIcon]" + } + } + } + + progresspie = { + block "progress_pie_visibility" {} + block "progresspie_size" + { + size = { 70% 70% } + } + parentanchor = center + value = "[Situation.GetTopCurrentPhase.GetRelativeProgress]" + max = 1 + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 128 128 } + frame = 2 + } + } + + type button_situation_group_banner = button_normal { + name = "situation_group_banner_item" + size = { 56 56 } + + onclick = "[ToggleGameViewData(Situation.GetWindowName, Situation.GetID)]" + onclick = "[OpenGuiTab( 'dynastic_cycle_tabs', 'movements' )]" + tooltip = "[SelectLocalization( And(SituationParticipantGroup.IsValid, InGameBottomBar.ShouldShowDynasticCycleOwnedLand), 'DYNASTIC_CYCLE_HUD_GROUP_OWNED_LAND_TOOLTIP', 'DYNASTIC_CYCLE_HUD_GROUP_POWER_TOOLTIP' )]" + using = tooltip_ne + + # Current phase + widget = { + size = { 100% 100% } + parentanchor = center + + button = { + size = { 56 56 } + parentanchor = center + texture = "gfx/interface/buttons/button_lifestyles_base.dds" + alwaystransparent = yes + } + + button_icon = { + visible = "[InGameBottomBar.ShouldShowMovementPower]" + parentanchor = center + position = { 0 -5 } + size = { 27 27 } + texture = "[SituationParticipantGroup.GetType.GetIcon]" + alwaystransparent = yes + } + + # Bigger icon that is centered in background when you don't have the banner with movement power + button_icon = { + visible = "[Not(InGameBottomBar.ShouldShowMovementPower)]" + parentanchor = center + size = { 35 35 } + texture = "[SituationParticipantGroup.GetType.GetIcon]" + alwaystransparent = yes + } + } + + icon = { + visible = "[InGameBottomBar.ShouldShowMovementPower]" + parentanchor = bottom|hcenter + position = { 0 -3 } + size = { 60 24 } + texture = "gfx/interface/hud/tgp_widget_button_banner.dds" + datacontext = "[SituationParticipantGroup]" + + using = tooltip_ne + tooltip_offset = { 3 38 } + + flowcontainer = { + parentanchor = center + spacing = 3 + + tooltip = "DYNASTIC_CYCLE_HUD_PERSONAL_MOVEMENT_POWER_TT" + using = tooltip_ne + tooltip_offset = { 0 -5 } + + widget = { + parentanchor = vcenter + size = { 12 24 } + + icon_flat_standard_gold = { + parentanchor = vcenter + position = { 0 2 } + size = { 12 12 } + texture = "gfx/interface/icons/flat_icons/group_power.dds" + alwaystransparent = yes + } + } + + text_single = { + parentanchor = vcenter + text = "[InGameBottomBar.GetDynasticCycleMovementPower]" + using = Font_Size_Tiny + max_width = 40 + } + } + } + + icon = { + size = { 25 25 } + position = { -5 10 } + + texture = "gfx/interface/icons/dynastic_cycle/favored_by_hegemon.dds" + visible = "[InGameBottomBar.IsDynasticCycleMovementFavored]" + widgetanchor = center + parentanchor = top|right + + tooltip = "DYNASTIC_CYCLE_WINDOW_FAVORED_MOVEMENT_TOOLTIP" + } + } + + type button_situations_scroll = button_normal { + size = { 80 110 } + + onclick = "[ToggleGameViewData(Situation.GetWindowName, Situation.GetID)]" + + widget = { + parentanchor = bottom|hcenter + size = { 74 78 } + + highlight_icon = { + size = { 74 78 } + texture = "gfx/interface/window_situations/silk_road_hud_widget_bg.dds" + } + + widget = { + size = { 50 50 } + parentanchor = center + + highlight_icon = { + size = { 46 46 } + parentanchor = center + texture = "gfx/interface/icons/struggle_banners/icon_background_02.dds" + } + + highlight_icon = { + parentanchor = center + size = { 34 34 } + texture = "[Situation.GetIcon]" + } + } + + tooltip = "SITUATION_LIST_HUD_BUTTON" + } + } + + type button_struggle_banner = button_normal { + name = "struggle_banner_tutorial_uses_this" + + size = { 110 110 } + + onclick = "[ToggleGameViewData('struggle', Struggle.GetID)]" + + onmousehierarchyenter = "[HighlightStruggle( Struggle.Self )]" + onmousehierarchyleave = "[ClearHighlightedStruggleBorder]" + + state = { + name = _show + next = banner_default + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + size = { 80 80 } + alpha = 1 + trigger_on_create = yes + } + + state = { + name = banner_default + using = Animation_FadeIn_Standard + size = { 110 110 } + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + bezier = { 1 0 0.5 0.5 } + size = { 80 80 } + alpha = 0 + } + + # Animations + struggle_phase_based_widget = { + datacontext = "[Struggle.GetCurrentPhase]" + visible = "[Struggle.HasPossibleEndingDecision]" + parentanchor = center + + animation_sonar = { + texture = "gfx/interface/component_masks/mask_glow.dds" + using = Color_Orange + } + + blockoverride "point_based_widget_content" { + icon = { + size = { 100% 100% } + position = { 0 -12 } + texture = "gfx/interface/icons/struggle_banners/upper_point_glow.dds" + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 1 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1.6 + alpha = 0.2 + } + } + } + + blockoverride "time_based_widget_content" { + icon = { + position = { 0 -12 } + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/upper_time_glow.dds" + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 1 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1.6 + alpha = 0.2 + } + } + } + } + + # Leading phase + struggle_phase_based_widget = { + datacontext = "[Struggle.GetCurrentLeadingPhase]" + + blockoverride "point_based_widget_content" { + icon = { + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/lower_point_banner.dds" + } + } + + blockoverride "time_based_widget_content" { + icon = { + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/lower_time_banner.dds" + } + } + + blockoverride "ending_widget_content" { + icon = { + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/lower_ending_banner.dds" + } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/component_effects/ending_banner_fire_01.dds" + alpha = 0.25 + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 0.25 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1 + alpha = 0 + } + } + + icon = { + size = { 100% 100% } + texture = "gfx/interface/component_effects/ending_banner_fire_02.dds" + alpha = 0 + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 0 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1 + alpha = 0.25 + } + } + + icon = { + name = "ending_phase_glow" + visible = "[Struggle.HasPossibleEndingDecision]" + parentanchor = center + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/lower_ending_glow.dds" + + state = { + trigger_on_create = yes + name = a + next = b + + using = Animation_Curve_Default + duration = 1 + alpha = 0.5 + } + + state = { + name = b + next = a + + using = Animation_Curve_Default + duration = 1.6 + alpha = 0.2 + } + } + } + + widget = { + visible = "[Struggle.GetCurrentLeadingPhase.IsValid]" + parentanchor = bottom|left + size = { 25 25 } + position = { 20 -14 } + } + } + + # Tie + icon = { + visible = "[Not(Struggle.GetCurrentLeadingPhase.IsValid)]" + size = { 100% 100% } + texture = "gfx/interface/icons/struggle_banners/lower_tied_banner.dds" + } + + # Current phase + struggle_phase_based_widget = { + datacontext = "[Struggle.GetCurrentPhase]" + blockoverride "point_based_widget_content" { + struggle_highlight_icon = { + visible = "[Struggle.IsInvolvedCharacter(Character.Self)]" + blockoverride "texture" { + texture = "gfx/interface/icons/struggle_banners/upper_point_involved_banner.dds" + } + } + + struggle_highlight_icon = { + visible = "[Not(Struggle.IsInvolvedCharacter(Character.Self))]" + blockoverride "texture" { + texture = "gfx/interface/icons/struggle_banners/upper_point_interloper_banner.dds" + } + } + + widget = { + size = { 52 52 } + position = { 0 15 } + parentanchor = top|hcenter + + icon = { + size = { 52 52 } + parentanchor = center + texture = "gfx/interface/icons/struggle_banners/icon_background_02.dds" + } + + icon = { + parentanchor = center + size = { 40 40 } + texture = "[Struggle.GetCurrentPhase.GetIcon]" + } + } + + progressbar_standard = { + size = { 60 12 } + parentanchor = bottom|hcenter + position = { 0 -20 } + value = "[Struggle.GetProgress]" + progresstexture = "gfx/interface/progressbars/progress_orange.dds" + } + + widget_struggle_hourglass = { } + } + + blockoverride "time_based_widget_content" { + struggle_highlight_icon = { + visible = "[Struggle.IsInvolvedCharacter(Character.Self)]" + blockoverride "texture" { + texture = "gfx/interface/icons/struggle_banners/upper_time_involved_banner.dds" + } + } + + struggle_highlight_icon = { + size = { 100% 100% } + visible = "[Struggle.IsInterloperCharacter(Character.Self)]" + blockoverride "texture" { + texture = "gfx/interface/icons/struggle_banners/upper_time_interloper_banner.dds" + } + } + + widget = { + size = { 52 52 } + parentanchor = top|hcenter + position = { 1 18 } + + icon = { + parentanchor = center + texture = "gfx/interface/icons/struggle_banners/icon_background_02.dds" + size = { 60 60 } + } + + progresspie = { + name = "progress" + parentanchor = center + size = { 52 52 } + position = { 0 -1} + texture = "gfx/interface/progressbars/action_progress_thin.dds" + framesize = { 124 124 } + frame = 2 + value = "[Struggle.GetProgress]" + } + + icon = { + parentanchor = center + size = { 40 40 } + texture = "[Struggle.GetCurrentPhase.GetIcon]" + } + } + + widget_struggle_hourglass = { } + + text_single = { + text = "[Struggle.GetPhaseValue(Struggle.GetCurrentLeadingPhase)]" + default_format = "#high" + parentanchor = bottom|hcenter + position = { 0 -14 } + } + } + } + + widget = { + size = { 80 110 } + tooltipwidget = struggle_tooltip + parentanchor = center + } + } + + type struggle_highlight_icon = highlight_icon { + size = { 100% 100% } + block "texture" {} + + ##Pulse glow + glow = { + name = "glow_defined" + glow_radius = 3 + using = Glow_Standard + using = Color_Orange + glow_alpha = 0 + } + + state = { + name = struggle_pulse_glow + next = struggle_pulse_glow_stop + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + glow_alpha = 1 + } + + state = { + name = struggle_pulse_glow_stop + bezier = { 1 0 0.5 0.5 } + duration = 0.3 + glow_alpha = 0 + } + + #white fill + state = { + name = struggle_pulse_icon + next = struggle_pulse_icon_stop + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + + modify_texture = { + name = "white_icon" + alpha = 1 + } + } + + state = { + name = struggle_pulse_icon_stop + bezier = { 1 0 0.5 0.5 } + duration = 0.3 + + modify_texture = { + name = "white_icon" + alpha = 0 + } + } + + modify_texture = { + name = "white_icon" + texture = "gfx/interface/component_masks/mask_rough_edges.dds" + blend_mode = colordodge + alpha = 0 + } + } + + type widget_struggle_hourglass = widget { + visible = "[Struggle.IsInTransitionPhase]" + position = { 0 0 } + size = { 32 32 } + + icon = { + parentanchor = center + size = { 32 32 } + texture = "gfx/interface/icons/struggle_banners/icon_background_dark.dds" + + #white fill + state = { + name = struggle_pulse_icon + next = struggle_pulse_icon_stop + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + + modify_texture = { + name = "white_icon" + alpha = 1 + } + } + + state = { + name = struggle_pulse_icon_stop + bezier = { 1 0 0.5 0.5 } + duration = 0.3 + + modify_texture = { + name = "white_icon" + alpha = 0 + } + } + + modify_texture = { + name = "white_icon" + texture = "gfx/interface/component_masks/mask_rough_edges.dds" + blend_mode = colordodge + alpha = 0 + } + } + + icon = { + parentanchor = center + size = { 30 30 } + texture = "gfx/interface/icons/icon_time.dds" + + #white fill + state = { + name = struggle_pulse_icon + next = struggle_pulse_icon_stop + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + + modify_texture = { + name = "white_icon" + alpha = 1 + } + } + + state = { + name = struggle_pulse_icon_stop + bezier = { 1 0 0.5 0.5 } + duration = 0.3 + + modify_texture = { + name = "white_icon" + alpha = 0 + } + } + + modify_texture = { + name = "white_icon" + texture = "gfx/interface/component_masks/mask_rough_edges.dds" + blend_mode = colordodge + alpha = 0 + } + } + } + + type button_ghw_banner = button_normal { + size = { 78 82 } + onclick = "[OpenGameViewData( 'great_holy_war', GreatHolyWar.GetID )]" + + block "ghw_tooltip" + { + raw_tooltip = "#D no tooltip :(#!" + } + + ##Show animation + state = { + name = _show + next = banner_default + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + size = { 86 88 } + alpha = 1 + trigger_on_create = yes + } + + state = { + name = banner_default + using = Animation_FadeIn_Standard + size = { 78 82 } + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + bezier = { 1 0 0.5 0.5 } + size = { 66 70 } + alpha = 0 + } + + button = { + name = "holy_war_icon_started" + visible = "[GreatHolyWar.HasWarStarted]" + onclick = "[OpenGameViewData( 'great_holy_war', GreatHolyWar.GetID )]" + parentanchor = center + size = { 100% 100% } + texture = "gfx/interface/icons/war_status/holy_war_icon_started.dds" + } + + button = { + name = "holy_war_icon_prep" + visible = "[Not(GreatHolyWar.HasWarStarted)]" + onclick = "[OpenGameViewData( 'great_holy_war', GreatHolyWar.GetID )]" + parentanchor = center + size = { 100% 100% } + texture = "gfx/interface/icons/war_status/holy_war_icon_prep.dds" + } + + button = { + name = "faith_icon" + datacontext = "[GreatHolyWar.GetFaith]" + onclick = "[OpenGameViewData( 'great_holy_war', GreatHolyWar.GetID )]" + parentanchor = center + position = { 1 -3 } + size = { 35 35 } + texture = "[Faith.GetIcon]" + } + } + + type button_raid_banner = button_normal { + size = { 78 82 } + onclick = "[DefaultOnCharacterClick(Character.GetID)]" + using = tooltip_ne + + ##Show animation + state = { + name = _show + next = banner_default + using = Animation_FadeIn_Quick + bezier = { 1 0 0.5 0.5 } + size = { 86 88 } + alpha = 1 + trigger_on_create = yes + } + + state = { + name = banner_default + using = Animation_FadeIn_Standard + size = { 78 82 } + } + + state = { + name = _hide + using = Animation_FadeOut_Standard + bezier = { 1 0 0.5 0.5 } + size = { 66 70 } + alpha = 0 + } + + highlight_icon = { + texture = "gfx/interface/icons/war_status/raid_icon.dds" + size = { 100% 100% } + parentanchor = center + } + + coa_realm_small = { + name = "enemy_realm" + parentanchor = hcenter + scale = 0.9 + position = { 0 12 } + tooltip_visible = no + alwaystransparent = yes + } + + text_single = { + name = "time_left" + parentanchor = bottom|hcenter + position = { 0 -7 } + size = { 50 10 } + align = center + text = "[GetPlayer.GetRaidHostilityEnd( Character.Self ).GetTimeDiffFromNow]" + + } + } + + type button_hud_character_bar = button_normal { + effectname = "NoHighlight" + + framesize = { 103 102} + size = { 52 52 } + texture = "gfx/interface/skinned/button_hud_character_sidebar.dds" + using = tooltip_ne + + state = { + name = _show + frame = 1 + position_x = 0 + + using = Animation_Curve_Default + duration = 0.25 + } + + state = { + name = _mouse_hierarchy_enter + frame = 2 + position_x = 3 + + using = Animation_Curve_Default + duration = 0.1 + } + + state = { + name = _mouse_leave + frame = 1 + position_x = 0 + + using = Animation_Curve_Default + duration = 0.25 + } + + state = { + name = _mouse_press + frame = 3 + position_x = 3 + } + + state = { + name = _mouse_release + frame = 2 + position_x = 0 + + using = Animation_Curve_Default + duration = 0.25 + } + } + + type widget_hud_main_tab = widget { + size = { 45 45 } + using = tooltip_ws + tooltip_offset = { 35 0 } + + button_normal = { + parentanchor = center + size = { 45 45 } + + scale = 1 + + block "maintab_button" {} + + modify_texture = { + name = "glow" + texture = "gfx/interface/component_effects/effect_shimmer.dds" + blend_mode = colordodge + translate_uv = { 1 0 } + alpha = 0 + } + + state = { + name = _mouse_enter + duration = 0.03 + scale = 1.2 + position_x = -3 + + using = Animation_Curve_Default + + modify_texture = { + name = "glow" + translate_uv = { 0 0 } + alpha = 0.4 + } + } + + state = { + name = _mouse_leave + duration = 0.1 + scale = 1 + position_x = 0 + + using = Animation_Curve_Default + + modify_texture = { + name = "glow" + translate_uv = { 1 0 } + alpha = 0 + } + } + } + } + + type hotkeys_HUD = widget { + # Mapmodes + button_normal = { + onclick = "[SetMapMode('players')]" + shortcut = "map_mode_8" + enabled = "[Or(GameHasMultiplePlayers, InDebugMode)]" + } + + button_normal = { + onclick = "[SetMapMode('dejure_duchies')]" + shortcut = "map_mode_9" + shortcut = "mapmode_duchies_secondary" + } + + button_normal = { + onclick = "[SetMapMode('dejure_kingdoms')]" + shortcut = "map_mode_10" + shortcut = "mapmode_kingdoms_secondary" + + } + + button_normal = { + onclick = "[SetMapMode('dejure_empires')]" + shortcut = "map_mode_11" + shortcut = "mapmode_empires_secondary" + } + + button_normal = { + onclick = "[SetMapMode('religions')]" + shortcut = "map_mode_3" + shortcut = "mapmode_faith_secondary" + } + + button_normal = { + onclick = "[SetMapMode('cultures')]" + shortcut = "map_mode_2" + shortcut = "mapmode_culture_secondary" + } + + button_normal = { + onclick = "[SetMapMode('houses')]" + onclick = "[ClearExploringHouses]" + shortcut = "map_mode_4" + shortcut = "mapmode_house_secondary" + } + + button_normal = { + onclick = "[SetMapMode('realms')]" + onclick = "[ClearExploringRealms]" + shortcut = "map_mode_1" + } + + button_normal = { + onclick = "[SetMapMode('government')]" + shortcut = "map_mode_5" + } + + button_normal = { + onclick = "[SetMapMode('epidemics')]" + shortcut = "map_mode_16" + } + + button_normal = { + onclick = "[SetMapMode('legends')]" + shortcut = "map_mode_17" + } + + button_normal = { + onclick = "[SetMapMode('landless_rulers')]" + shortcut = "map_mode_18" + } + + button_normal = { + onclick = "[SetMapMode('migration_counties')]" + shortcut = "map_mode_19" + } + + button_normal = { + onclick = "[SetMapMode('dejure_counties')]" + shortcut = "map_mode_6" + } + + button_normal = { + onclick = "[SetMapMode('dejure_hegemonies')]" + shortcut = "map_mode_20" + } + + button_normal = { + onclick = "[SetMapMode('court_languages')]" + shortcut = "map_mode_7" + } + + button_normal = { + onclick = "[SetMapMode('terrain')]" + shortcut = "map_mode_terrain" + } + + button_normal = { + onclick = "[SetMapMode('simple_terrain')]" + shortcut = "map_mode_12" + } + + button_normal = { + onclick = "[SetMapMode('county_development')]" + shortcut = "map_mode_13" + } + + button_normal = { + onclick = "[SetMapMode( 'economy_buildings' )]" + shortcut = "map_mode_14" + } + + button_normal = { + onclick = "[SetMapMode( 'county_control' )]" + shortcut = "map_mode_15" + } + + button_normal = { + onclick = "[SetMapMode( 'diplomatic_relations' )]" + shortcut = "map_mode_diplomatic_relations" + } + + button_normal = { + onclick = "[SetMapMode( 'confederations' )]" + shortcut = "map_mode_confederations" + } + + button_normal = { + name = "find_title_shortcut" + onclick = "[ToggleGameView( 'find_title' )]" + onclick = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + shortcut = "find_title_shortcut" + } + + button_normal = { + name = "plagues_shortcut" + onclick = "[ToggleGameView( 'epidemics' )]" + onclick = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + shortcut = "explore_plagues" + } + + button_normal = { + name = "legends_shortcut" + onclick = "[ToggleGameView( 'legends' )]" + onclick = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + shortcut = "explore_legends" + } + + # 0 size button for shortcut to work + button_normal = { + name = "find_character_shortcut" + onclick = "[ToggleGameView( 'character_finder' )]" + onclick = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + shortcut = "character_finder" + } + + # 0 size button for shortcut to work + button_normal = { + name = "encyclopedia_shortcut" + onclick = "[ToggleEncyclopedia]" + onclick = "[GetVariableSystem.Clear( 'extra_buttons_expand' )]" + shortcut = "encyclopedia" + } + button_normal = { + onclick = "[SetMapMode( 'mandala' )]" + shortcut = "map_mode_mandala" + } + } + + type button_pause_hud = button_round { + size = { 33 33 } + + enabled = "[Not(IsGameOver)]" + onclick = "[OnPause]" + oversound = "event:/SFX/UI/Generic/sfx_ui_generic_pointer_over" + clicksound = "event:/SFX/UI/Generic/sfx_ui_generic_select" + + button_play = { + visible = "[IsGamePaused]" + size = { 35 35 } + + tooltip = "[SelectLocalization( IsGameOver, 'UNPAUSE_GAME_OVER', 'UNPAUSE_GAME')]" + using = tooltip_ne + alwaystransparent = yes + parentanchor = center + } + + button_pause = { + visible = "[Not(IsGamePaused)]" + size = { 35 35 } + + tooltip = "PAUSE_GAME" + using = tooltip_ne + alwaystransparent = yes + parentanchor = center + } + } + + type container_resource_balance = container { + text_single = { + name = "balance_pos" + visible = "[GreaterThanOrEqualTo_CFixedPoint(PlayerValueItem.GetBalance, '(CFixedPoint)0')]" + text = "[PlayerValueItem.GetBalance|1=]" + max_width = 110 + + default_format = "#low" + } + + text_single = { + name = "balance_neg" + visible = "[LessThan_CFixedPoint(PlayerValueItem.GetBalance, '(CFixedPoint)0')]" + text = "[PlayerValueItem.GetBalance|1=]" + max_width = 110 + + default_format = "#N" + } + } + + type container_saving_indicator = container { + visible = yes + + background = { + name = "bg" + texture = "gfx/interface/tooltips/tooltip_bg.dds" + spriteType = Corneredtiled + gfxtype = icongfx + spriteborder = { 2 2 } + shaderfile = "gfx/FX/pdxgui_default.shader" + + } + + background = { + name = "frame" + texture = "gfx/interface/tooltips/tooltip_frame.dds" + gfxtype = icongfx + spriteType = Corneredtiled + spriteborder = { 20 20 } + shaderfile = "gfx/FX/pdxgui_default.shader" + + + modify_texture = { + name = "overlay" + texture = "gfx/interface/component_overlay/overlay_window.dds" + spriteType = Corneredstretched + spriteborder = { 0 0 } + blend_mode = overlay + } + } + + flowcontainer = { + spacing = 15 + margin = { 20 15 } + + progressbar = { + size = { 44 44 } + gfxtype = framedprogressbargfx + texture = "gfx/interface/frontend/loading_progress.dds" + framesize = { 88 88 } + loopinterval = 2.0 + max = 0 + } + + text_single = { + parentanchor = vcenter + align = nobaseline + using = Font_Size_Medium + + block "csi_text" + { + text = "AUTOSAVE_IN_PROGRESS" + } + } + } + } + + type resources_top_right_bar = hbox + { + layer = top + + using = Animation_ShowHide_Quick + + ## Resources + hbox = { + name = "resources" + visible = "[Not( IsGameViewOpen('barbershop') )]" + + hbox = { + name = "spendables" + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + + hbox = { + name = "tutorial_highlight_resources_bar" + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + + widget = { + name = "gold" + size = { 144 70 } + + state = { + name = _mouse_enter + on_start = "[InGameTopbar.ResetLastUpdateFrame]" + } + + widget = { + size = { 144 45 } + + tooltipwidget = { + widget_gold_breakdown_tooltip = { + blockoverride "income" + { + datacontext = "[InGameTopbar.GetGoldIncomeBreakdown]" + } + + blockoverride "expenses" + { + datacontext = "[InGameTopbar.GetGoldExpensesBreakdown]" + } + } + } + using = tooltip_ne + } + + background = { + texture = "gfx/interface/skinned/resource_panel_start.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "gold_icon" + size = { 30 30 } + texture = "gfx/interface/icons/icon_gold.dds" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + ignoreinvisible = yes + + text_single = { + name = "gold_value_positive" + visible = "[GreaterThanOrEqualTo_CFixedPoint(GetPlayer.GetGold, '(CFixedPoint)0')]" + text = "[GetPlayer.GetGold|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + text_single = { + name = "gold_value_negative" + visible = "[LessThan_CFixedPoint(GetPlayer.GetGold, '(CFixedPoint)0')]" + text = "[GetPlayer.GetGold|0]" + max_width = 50 + default_format = "#N" + using = Font_Size_Medium + } + + container = { + text_single = { + name = "balance_positive" + visible = "[GreaterThanOrEqualTo_CFixedPoint(InGameTopbar.GetGoldBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetGoldBalance|=1]" + max_width = 50 + default_format = "#low" + } + + text_single = { + name = "balance_negative" + visible = "[LessThan_CFixedPoint(InGameTopbar.GetGoldBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetGoldBalance|=1]" + max_width = 50 + default_format = "#N" + } + } + } + } + spacer = { + size = { 10 1} + } + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + widget = { + name = "treasury" + visible = "[GetPlayer.HasTreasury]" + size = { 112 70 } + allow_outside = yes + + state = { + name = _mouse_enter + on_start = "[InGameTopbar.ResetLastUpdateFrame]" + } + + button = { + size = { 112 45 } + + onclick = "[ToggleGameViewData( 'treasury_budget_change', GetPlayer.GetTopLiege.Self )]" + enabled = "[GetPlayer.IsIndependentRuler]" + + tooltipwidget = { + widget_gold_breakdown_tooltip = { + blockoverride "my_gold" + { + text_single = { + layoutpolicy_horizontal = expanding + + text = "[treasury_i] [GetPlayer.GetPrimaryTitle.GetNameNoTierNoTooltip] [treasury|E]" + default_format = "#T" + } + } + + blockoverride "income" + { + datacontext = "[InGameTopbar.GetTreasuryIncomeBreakdown]" + } + + blockoverride "expenses" + { + datacontext = "[InGameTopbar.GetTreasuryExpensesBreakdown]" + } + + blockoverride "extra_info" + { + text_single = { + visible = "[And( GetPlayer.IsIndependentRuler, IsAdministrativeRuler( GetPlayer ) )]" + layoutpolicy_horizontal = expanding + text = "CLICK_TO_OPEN_TREASURY_BUDGETING" + default_format = "#I" + } + } + } + } + using = tooltip_ne + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + allow_outside = yes + + hbox = { + layoutpolicy_horizontal = expanding + allow_outside = yes + + widget = { + size = { 20 40 } + allow_outside = yes + + vbox = { + position = { -10 0 } + parentanchor = center + + button_round = { + size = { 20 20 } + + datacontext = "[GetPlayer]" + datacontext = "[GetDecisionWithKey( 'extract_gold_from_treasury' )]" + + visible = "[Decision.IsShownForPlayer]" + onclick = "[OpenGameViewData( 'decision_detail', Decision.Self)]" + + tooltip = "TRANSFER_TREASURY_TO_GOLD_DECISION_TOOLTIP" + using = tooltip_se + + button_icon = { + size = { 100% 100% } + alwaystransparent = yes + texture = "gfx/interface/icons/flat_icons/transfer_left.dds" + enabled = "[Decision.IsPossibleForPlayer]" + } + } + + button_round = { + size = { 20 20 } + + name = "transfer_gold_to_treasury_button_tutorial_uses_this" + datacontext = "[GetPlayer]" + enabled = "[Character.CanSendPlayerInteraction('transfer_small_gold_amount_to_treasury_interaction')]" + onclick = "[Character.SendPlayerInteraction( Select_CString( IsCtrlDown, 'transfer_huge_gold_amount_to_treasury_interaction', 'transfer_small_gold_amount_to_treasury_interaction' ) )]" + onrightclick = "[Character.SendPlayerInteraction( 'transfer_large_gold_amount_to_treasury_interaction' )]" + button_ignore = none + tooltip = "TRANSFER_GOLD_TO_TREASURY_INTERACTION_TOOLTIP" + using = tooltip_se + + button_icon = { + size = { 100% 100% } + alwaystransparent = yes + texture = "gfx/interface/icons/flat_icons/transfer_right.dds" + } + + tooltip_offset = { 0 10 } + } + } + } + + expand = {} + + hbox = { + spacing = 7 + + name = "treasury_tutorial_uses_this" + + icon = { + name = "treasury_icon" + size = { 30 30 } + texture = "gfx/interface/icons/icon_imperial_treasury.dds" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + ignoreinvisible = yes + + text_single = { + name = "treasury_value_positive" + visible = "[GreaterThanOrEqualTo_CFixedPoint(GetPlayer.GetTreasury, '(CFixedPoint)0')]" + text = "[GetPlayer.GetTreasury|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + text_single = { + name = "treasury_value_negative" + visible = "[LessThan_CFixedPoint(GetPlayer.GetTreasury, '(CFixedPoint)0')]" + text = "[GetPlayer.GetTreasury|0]" + max_width = 50 + default_format = "#N" + using = Font_Size_Medium + } + + container = { + text_single = { + name = "treasury_balance_positive" + visible = "[GreaterThanOrEqualTo_CFixedPoint(InGameTopbar.GetTreasuryBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetTreasuryBalance|=1]" + max_width = 50 + default_format = "#low" + } + + text_single = { + name = "treasury_balance_negative" + visible = "[LessThan_CFixedPoint(InGameTopbar.GetTreasuryBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetTreasuryBalance|=1]" + max_width = 50 + default_format = "#N" + } + } + } + } + + spacer = { + size = { 10 1} + } + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + widget = { + name = "barter_goods" + datacontext = "[GetPlayer]" + visible = "[GetPlayer.HasBarterGoods]" + size = { 112 70 } + + state = { + name = _mouse_enter + on_start = "[InGameTopbar.ResetLastUpdateFrame]" + } + + widget = { + size = { 112 45 } + using = tooltip_ne + + tooltipwidget = { + widget_gold_breakdown_tooltip = { + blockoverride "income" + { + datacontext = "[InGameTopbar.GetBarterGoodsIncomeBreakdown]" + } + + blockoverride "expenses" + { + datacontext = "[InGameTopbar.GetBarterGoodsExpensesBreakdown]" + } + } + } + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "barter_goods_icon" + size = { 30 30 } + texture = "gfx/interface/icons/icon_barter.dds" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + ignoreinvisible = yes + + text_single = { + name = "barter_goods_value_positive" + + text = "[GetPlayer.GetCurrency('barter_goods')|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + container = { + text_single = { + name = "barter_goods_balance_positive" + visible = "[GreaterThanOrEqualTo_CFixedPoint(InGameTopbar.GetBarterGoodsBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetBarterGoodsBalance|=1]" + max_width = 50 + default_format = "#low" + } + + text_single = { + name = "barter_goods_balance_negative" + visible = "[LessThan_CFixedPoint(InGameTopbar.GetBarterGoodsBalance, '(CFixedPoint)0')]" + text = "[InGameTopbar.GetBarterGoodsBalance|=1]" + max_width = 50 + default_format = "#N" + } + } + } + } + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + widget = { + name = "prestige" + datacontext = "[InGameTopbar.GetPrestigeItem]" + size = { 112 70 } + + widget = { + size = { 112 45 } + + tooltipwidget = { + widget_resource_value_tooltip = {} + } + using = tooltip_ne + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "prestige_icon" + size = { 30 30 } + texture = "[GetPlayer.GetPrestigeLevelTexture]" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + + text_single = { + name = "prestige_value" + text = "[GetPlayer.GetPrestige|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + container_resource_balance = {} + } + } + + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + + + widget = { + name = "piety" + datacontext = "[InGameTopbar.GetPietyItem]" + size = { 112 70 } + + button = { + size = { 112 45 } + onclick = "[OpenGameViewData( 'faith', GetPlayer.GetFaith.GetID )]" + + using = tooltip_ne + tooltipwidget = { + widget_resource_value_tooltip = {} + } + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 6 + + icon = { + name = "piety_icon" + size = { 30 30 } + texture = "[GetPlayer.GetPietyLevelTexture]" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + + text_single = { + name = "piety_value" + text = "[GetPlayer.GetPiety|0]" + + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + container_resource_balance = {} + } + } + + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + + widget = { + name = "provisions" + visible = "[Or(IsLandlessAdventurer( GetPlayer ) GetPlayer.GetGovernment.IsType( 'landless_minority_government' ) )]" + size = { 112 70 } + + widget = { + datacontext = "[GetPlayer.GetDomicile]" + size = { 112 45 } + + tooltip = "[Domicile.GetProvisionsBreakdown]" + using = tooltip_ne + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + datacontext = "[GetPlayer.GetDomicile]" + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "provisions_icon" + size = { 30 30 } + + framesize = { 60 60 } + frame = 0 + texture = "gfx/interface/icons/icon_camp_supply.dds" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + ignoreinvisible = yes + + text_single = { + name = "provisions_value_positive" + visible = "[Not( Or( Domicile.IsProvisionsLow, Domicile.IsProvisionsCritical ) )]" + + text = "[Domicile.GetProvisions|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + text_single = { + name = "provisions_value_low" + visible = "[Domicile.IsProvisionsLow]" + + text = "[Domicile.GetProvisions|0]" + max_width = 50 + default_format = "#color_yellow" + using = Font_Size_Medium + } + + text_single = { + name = "provisions_value_critical" + visible = "[Domicile.IsProvisionsCritical]" + + text = "[Domicile.GetProvisions|0]" + max_width = 50 + default_format = "#N" + using = Font_Size_Medium + } + + container = { + text_single = { + name = "provisions_max" + text = "[Domicile.GetProvisionsMax]" + max_width = 50 + default_format = "#low" + } + } + } + } + expand = {} + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + + hbox = { + layoutpolicy_horizontal = expanding + spacing = 6 + + + vbox = { + margin_top = -2 + layoutpolicy_vertical = expanding + + expand = {} + } + } + expand = {} + } + } + + widget = { + name = "influence" + datacontext = "[InGameTopbar.GetInfluenceItem]" + visible = "[GetPlayer.GetGovernment.HasRule( 'administrative' )]" + size = { 112 70 } + + widget = { + size = { 112 45 } + + tooltipwidget = { + widget_resource_value_tooltip = {} + } + using = tooltip_ne + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "influence_icon" + size = { 30 30 } + texture = "[GetPlayer.GetInfluenceLevelTexture]" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + + text_single = { + name = "influence_value" + text = "[GetPlayer.GetInfluence|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + container_resource_balance = {} + } + } + + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + widget = { + name = "renown" + datacontext = "[InGameTopbar.GetDynastyPrestigeItem]" + size = { 112 70 } + layoutpolicy_vertical = expanding + + button = { + size = { 112 45 } + onclick = "[DefaultOnHouseCoatOfArmsClick(GetPlayer.GetHouse.GetID)]" + + using = tooltip_ne + tooltipwidget = { + widget_resource_value_tooltip = {} + } + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 6 + + icon = { + visible = "[GetPlayer.IsDynast]" + texture = "[GetPlayer.GetDynasty.GetDynastyPrestigeLevelTexture]" + size = { 30 30 } + } + + icon = { + visible = "[Not(GetPlayer.IsDynast)]" + texture = "[GetPlayer.GetDynasty.GetDynastyPrestigeLevelTexture]" + size = { 30 30 } + alpha = 0.3 + } + + flowcontainer = { + visible = "[GetPlayer.IsDynast]" + margin_bottom = 7 + spacing = -6 + direction = vertical + + text_single = { + name = "prestige_value" + text = "[GetPlayer.GetDynasty.GetPrestige|0]" + + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + container_resource_balance = {} + } + + flowcontainer = { + visible = "[Not(GetPlayer.IsDynast)]" + margin_bottom = 7 + spacing = -6 + direction = vertical + + text_single = { + name = "prestige_value_nodynast" + text = "[GetPlayer.GetDynasty.GetPrestige|0]" + + max_width = 50 + default_format = "#low" + using = Font_Size_Medium + } + + container_resource_balance = {} + } + } + + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + + widget = { + name = "herd" + datacontext = "[GetPlayer]" + datacontext = "[Character.GetDomicile]" + visible = "[IsNomad( GetPlayer )]" + size = { 112 70 } + + state = { + name = _mouse_enter + on_start = "[InGameTopbar.ResetLastUpdateFrame]" + } + + widget = { + size = { 112 45 } + using = tooltip_ne + + tooltipwidget = { + herd_breakdown_hud_toolip = {} + } + } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece.dds" + } + + vbox = { + margin_top = -2 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 7 + + icon = { + name = "herd_icon" + size = { 30 30 } + + texture = "gfx/interface/icons/icon_herd.dds" + } + + flowcontainer = { + margin_bottom = 7 + spacing = -6 + direction = vertical + ignoreinvisible = yes + + text_single = { + name = "herd_value_positive" + visible = "[Not( Domicile.IsAboveHerdLimit )]" + + text = "[Domicile.GetHerd|0]" + max_width = 50 + default_format = "#high" + using = Font_Size_Medium + } + + text_single = { + name = "above_herd_limit" + visible = "[Domicile.IsAboveHerdLimit]" + + text = "[Domicile.GetHerd|0]" + max_width = 50 + default_format = "#color_yellow" + using = Font_Size_Medium + } + + container = { + text_single = { + name = "army_from_herd" + text = "[InGameTopbar.GetHerdChangeValue|=1]" + max_width = 50 + default_format = "#low" + } + } + } + } + expand = {} + + divider_light = { + layoutpolicy_vertical = expanding + alpha = 0.8 + } + } + expand = {} + } + } + } + + hbox = { + name = "military" + datacontext = "[GetPlayer]" + + widget = { + button = { + size = { 112 45 } + onclick = "[ToggleGameViewData('military', GetPlayer.GetID)]" + + tooltip = "[InGameTopbar.GetMilitaryTooltip]" + using = tooltip_ne + } + + size = { 112 70 } + + background = { + texture = "gfx/interface/skinned/resource_panel_piece_light.dds" + } + + ### Stiches for the Nomadic UI skin placed as a separate texture to be able to place it perfectly aligned with texture change and tiling. + ### Placed on top of the divider that is there normally. + widget = { + name = "nomadic_stiches_divider" + visible = "[IsNomad( GetPlayer )]" + parentanchor = vcenter + size = { 10 42 } + position = { -6 -17 } + + icon = { + parentanchor = center + position = { 0 0 } + size = { 10 42 } + texture = "gfx/interface/hud/nomadic_resource_panel_stiches.dds" + } + } + + vbox = { + margin_top = 4 + + hbox = { + layoutpolicy_horizontal = expanding + expand = {} + + hbox = { + spacing = 5 + icon = { + name = "icon_soldier" + texture = "gfx/interface/icons/icon_soldier.dds" + size = { 25 25 } + } + + flowcontainer = { + direction = vertical + datacontext = "[GetPlayerArmyComposition]" + + flowcontainer = { + spacing = 2 + + text_single = { + name = "strength" + text = "[InGameTopbar.GetCurrentTroopsCount]" + default_format = "#high" + align = nobaseline + } + + army_quality_icon = {} + } + + progressbar_standard = { + name = "soldiers_max" + size = { 40 8 } + visible = "[NotEqualTo_int32(ArmyComposition.GetMaxNumberOfSoldiers, '(int32)0')]" + + min = 0 + max = "[IntToFloat(ArmyComposition.GetMaxNumberOfSoldiers)]" + value = "[IntToFloat(ArmyComposition.GetCurrentNumberOfSoldiers)]" + } + } + } + + expand = {} + } + + expand = {} + } + } + + widget = { + name = "domain_limit" + visible = "[Not( IsLandlessAdventurer( GetPlayer ) )]" + + layoutpolicy_vertical = expanding + + button = { + size = { 112 45 } + onclick = "[ToggleGameViewData( 'my_realm', 'bookmark_domain' )]" + + tooltip = "[Character.GetDomainLimitTooltip]" + using = tooltip_ne + } + + size = { 112 70 } + + background = { + texture = "gfx/interface/skinned/resource_panel_end.dds" + } + + vbox = { + margin_top = 4 + + hbox = { + margin_bottom = 16 + + expand = {} + hbox = { + margin = { 5 5 } + spacing = 5 + + background = { + visible = "[GreaterThan_int32( Character.GetDomainSize, Character.GetDomainLimit )]" + using = Status_Bad + margin_bottom = -3 + } + + icon = { + texture = "gfx/interface/icons/icon_domain.dds" + size = { 25 25 } + } + + text_single = { + name = "value" + text = "[Character.GetDomainSize]/[Character.GetDomainLimit]" + align = nobaseline + margin_bottom = 1 + max_width = 110 + } + } + expand = {} + } + expand = {} + } + } + } + } + } + } + + type container_royal_court_tooltip = container + { + using = GeneralTooltipSetup + alwaystransparent = no + + object_tooltip_pop_out = { + blockoverride "title_text" + { + margin = { 0 8 } + text = "ROYAL_COURT" + default_format = "#T" + } + + blockoverride "concept_link" + { + visible = no + } + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + visible = "[Not( Character.HasRoyalCourt )]" + text = "[Character.GetRoyalCourtBlockers]" + } + + cooltip_paragraph = { + visible = "[GreaterThan_int32( Character.GetNumPendingCourtEvents, '(int32)0' )]" + text = "ROYAL_COURT_STATUS_PENDING_EVENTS_BULLET" + } + cooltip_paragraph = { + visible = "[GreaterThan_int32( LocalPlayerNewArtifacts.GetNumNewArtifactsOfCategory( 'court' ), '(int32)0' )]" + text = "ROYAL_COURT_STATUS_NEW_COURT_ARTIFACTS_BULLET" + } + cooltip_paragraph = { + visible = "[And(LessThan_int32( CourtGrandeurData.GetCurrentLevel, CourtGrandeurData.GetMinimumExpectedLevel ),HasDlcFeature( 'royal_court' ))]" + text = "ROYAL_COURT_STATUS_CGV_EXPECTATIONS_BULLET" + } + cooltip_paragraph = { + visible = "[GreaterThan_int32( LocalPlayerCourtEvents.GetNumberCourtEvents, '(int32)0' )]" + text = "ROYAL_COURT_STATUS_CURRENT_EVENTS_BULLET" + } + } + } + } + } + + type activity_hud_button = button_normal + { + size = { 58 58 } + + tooltip = "TT_ACTIVITY_WIDGET" + using = tooltip_above + onclick = "[Activity.OpenActivityView]" + + icon_round_button_base = {} + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + parentanchor = center + alpha = 0.5 + } + + progresspie = { + name = "progress" + visible = "[Character.HasActivityState( 'travel' )]" + size = { 50 50 } + + texture = "gfx/interface/progressbars/action_progress_thin.dds" + + framesize = { 128 128 } + frame = 2 + + widgetanchor = center + parentanchor = center + + min = 0 + max = 1 + value = "[Character.GetTravelPlan.GetData.GetNextDestinationProgress]" + } + + highlight_icon = { + texture = "[Activity.GetType.GetIcon]" + alwaystransparent = yes + size = { 45 45 } + parentanchor = center + } + } + + type icon_hud_background = icon { + size = { 200 64 } + texture = "gfx/interface/skinned/hud_bg_character_bar.dds" + spritetype = corneredtiled + spriteborder_left = 70 + spriteborder_right = 240 + texture_density = 2 + + state = { + name = _show + using = Animation_Curve_Default + duration = 0.21 + + position = { 0 0 } + alpha = 1 + } + + state = { + name = _hide + using = Animation_Curve_Default + duration = 0.21 + + position = { -36 50 } + alpha = 0 + } + } + + type tax_jurisdictions_button_tooltip = widget { + alwaystransparent = no + datacontext = "[GetPlayer]" + + vbox = { + using = Background_Tooltip + spacing = 10 + margin = { 20 10 } + parentanchor = right|vcenter + text_single = { + text = "TAX_JURISDICTIONS_BUTTON" + layoutpolicy_horizontal = expanding + } + + hbox = { + layoutpolicy_horizontal = expanding + visible = "[Or( Or( GreaterThan_int32( Character.GetUnassignedVassalsCount, '(int32)0' ), Not( Character.HasTaxSlots ) ), GreaterThan_int32( Character.GetUntaxedJurisdictionCount, '(int32)0' ) )]" + + icon = { + size = { 25 25 } + texture = "gfx/interface/icons/symbols/icon_warning.dds" + } + + vbox = { + layoutpolicy_horizontal = expanding + margin_left = 5 + + text_single = { + visible = "[GreaterThan_int32( Character.GetUntaxedJurisdictionCount, '(int32)0' )]" + layoutpolicy_horizontal = expanding + text = "TAX_SLOT_OVERVIEW_WINDOW_TAX_SLOTS_WARNING" + default_format = "#N" + max_width = 320 + } + + text_single = { + visible = "[GreaterThan_int32( Character.GetUnassignedVassalsCount, '(int32)0' )]" + layoutpolicy_horizontal = expanding + text = "TAX_SLOT_OVERVIEW_WINDOW_UNASSIGNED_VASSALS_WARNING" + default_format = "#N" + max_width = 320 + } + + text_single = { + visible = "[Not( Character.HasTaxSlots )]" + layoutpolicy_horizontal = expanding + text = "NO_TAX_SLOT_AVAILABLE" + default_format = "#N" + max_width = 320 + } + } + } + expand = {} + } + } + + type administrative_button_tooltip = widget { + alwaystransparent = no + datacontext = "[GetPlayer]" + + vbox = { + using = DefaultTooltipBackground + spacing = 10 + margin = { 20 10 } + parentanchor = right|vcenter + + text_single = { + text = "ADMINISTRATIVE_BUTTON" + layoutpolicy_horizontal = expanding + } + expand = {} + } + } + + type epidemic_hud_tooltip_list = vbox + { + layoutpolicy_horizontal = expanding + spacing = 10 + + background = { + using = Background_Area_With_Header + margin = { 10 7 } + using = Mask_Rough_Edges + } + + cooltip_paragraph = { + block "heading_text" + { + raw_text = "#D Fill me#!" + } + default_format = "#S" + } + + vbox = { + layoutpolicy_horizontal = expanding + spacing = 10 + + block "epidemic_datamodel" + { + } + + item = { + hbox = { + layoutpolicy_horizontal = expanding + spacing = 10 + visible = "[Epidemic.IsValidCheck]" + + background = { + using = Background_Area + using = Mask_Rough_Edges + using = Background_Alternate_Datamodel + margin = { 10 7 } + } + + icon_epidemic = { + tooltipwidget = epidemic_tooltip + } + + vbox = { + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + text = "[Epidemic.GetName]" + default_format = "#S" + } + + cooltip_paragraph = { + text = "EPIDEMIC_TOTAL_DEATH_TOLL" + } + + block "item_extra_data" + { + } + } + + expand = {} + } + } + } + } + + type epidemic_hud_tooltip = object_tooltip_pop_out + { + blockoverride "title_text" + { + text = "EPIDEMICS_TITLE" + default_format = "#T" + } + + blockoverride "concept_link" + { + visible = no + } + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + spacing = 16 + + epidemic_hud_tooltip_list = { + name = "realm_epidemics" + visible = "[DataModelHasItems( InGameBottomBar.GetEpidemicsInRealm )]" + + blockoverride "heading_text" + { + text = "HUD_EPIDEMICS_IN_REALM" + } + blockoverride "epidemic_datamodel" + { + datamodel = "[InGameBottomBar.GetEpidemicsInRealm]" + } + blockoverride "item_extra_data" + { + cooltip_paragraph = { + text = "EPIDMIC_TOOLTIP_DOMAIN_INFECTIONS" + } + } + } + + epidemic_hud_tooltip_list = { + name = "nearby_epidemics" + visible = "[DataModelHasItems( InGameBottomBar.GetEpidemicsBorderingRealm )]" + + blockoverride "heading_text" + { + text = "HUD_EPIDEMICS_BORDERING_REALM" + } + blockoverride "epidemic_datamodel" + { + datamodel = "[InGameBottomBar.GetEpidemicsBorderingRealm]" + } + } + + epidemic_hud_tooltip_list = { + name = "global_epidemics" + visible = "[DataModelHasItems( InGameBottomBar.GetGlobalNotificationEpidemics )]" + + blockoverride "heading_text" + { + text = "HUD_EPIDEMICS_GLOBAL_NOTIFICATIONS" + } + blockoverride "epidemic_datamodel" + { + datamodel = "[InGameBottomBar.GetGlobalNotificationEpidemics]" + } + blockoverride "item_extra_data" + { + cooltip_paragraph = { + text = "HUD_EPIDEMIC_GLOBAL_NOTIFICATION" + default_format = "#flavor" + } + } + } + } + } + } + + type button_epidemics = button + { + size = { 80 80 } + using = tooltip_ne + + onclick = "[ToggleGameView( 'epidemics' )]" + + tooltipwidget = { + epidemic_hud_tooltip = {} + } + + video_icon = { + name = "epidemic_particules" + size = { 80 80 } + + visible = "[InGameBottomBar.HasGlobalNotificationEpidemic]" + + gfxtype = videogfx + shaderfile = "" + video = "gfx/particles/fly.bk2" + loop = yes + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_right.dds" + blend_mode = alphamultiply + spriteType = corneredTiled + alpha = 0.8 + } + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_right.dds" + blend_mode = alphamultiply + spriteType = corneredTiled + mirror = horizontal + alpha = 0.8 + } + } + + button = { + name = "epidemic_icon_global_notify" + visible = "[InGameBottomBar.HasGlobalNotificationEpidemic]" + texture = "gfx/interface/hud/button_epidemics_black_plague.dds" + size = { 100% 100% } + alwaystransparent = yes + } + + button = { + name = "epidemic_icon" + visible = "[Not( InGameBottomBar.HasGlobalNotificationEpidemic )]" + texture = "gfx/interface/hud/button_epidemics.dds" + size = { 100% 100% } + alwaystransparent = yes + } + } + + type legends_hud_tooltip = object_tooltip_pop_out + { + blockoverride "title_text" + { + text = "LEGENDS_TITLE" + default_format = "#T" + margin = { 0 5 } + } + + blockoverride "concept_link" + { + visible = no + } + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + spacing = 15 + + datacontext = "[GetPlayer]" + datacontext = "[Character.GetPromotedLegend]" + datacontext = "[AccessLocalPlayerCachedData]" + + vbox = { + name = "promoted_legend" + layoutpolicy_horizontal = expanding + spacing = 15 + + visible = "[And( Legend.IsValid, Not( Legend.IsCompleted ) )]" + + background = { + using = Background_Area_With_Header + margin = { 10 7 } + using = Mask_Rough_Edges + } + + cooltip_paragraph = { + datacontext = "[Character.GetPromotedLegend]" + + text = "PROMOTED_LEGEND" + default_format = "#S" + } + + hbox = { + layoutpolicy_horizontal = expanding + spacing = 10 + + background = { + using = Background_Area + using = Mask_Rough_Edges + using = Background_Alternate_Datamodel + margin = { 10 7 } + } + + icon_legend = { + datacontext = "[Legend.GetType]" + tooltipwidget = legend_tooltip + } + + vbox = { + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + text = "[Legend.GetName]" + default_format = "#S" + } + + legend_summary_vbox = {} + } + + expand = {} + } + } + + vbox = { + name = "legend_seeds" + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + text = "LEGEND_SEEDS" + default_format = "#S" + } + + cooltip_paragraph = { + text = "HUD_LEGEND_SEEDS" + visible = "[Or( DataModelHasItems( Character.GetLegendSeeds ), DataModelHasItems( LocalPlayerCachedData.GetTriggeredLegendSeeds ) )]" + } + + cooltip_paragraph = { + text = "LEGEND_SEEDS_EMPTY" + visible = "[And( IsDataModelEmpty( Character.GetLegendSeeds ), IsDataModelEmpty( LocalPlayerCachedData.GetTriggeredLegendSeeds ) )]" + } + } + } + } + } + + type icon_power_sharing_level = highlight_icon { + size = { 28 28 } + + texture = "gfx/interface/window_regency/regency_level_button_badge.dds" + + text_single = { + align = nobaseline + parentanchor = center + raw_text = "[Diarchy.GetPowerLevel]" + } + } + + + type legitimacy_hud_tooltip = object_tooltip_pop_out + { + visible = "[And(LegitimacyType.IsValid, Character.GetGovernment.HasRule( 'legitimacy' ))]" + + blockoverride "title_text" + { + margin = { 0 8 } + text = "legitimacy_hud_tt" + default_format = "#T" + } + + blockoverride "concept_link" + { + text = "[legitimacy|E]" + } + + blockoverride "subheading" + { + text_single = { + layoutpolicy_horizontal = expanding + autoresize = yes + fontsize_min = 14 + using = Font_Size_Small + text = "legitimacy_hud_tt_subheading" + default_format = "#weak" + fonttintcolor = "[TooltipInfo.GetTintColor]" + max_width = 400 + + margin_top = -4 + } + } + + blockoverride "header_additions" + { + widget = { + size = { 120 74 } + + widget = { + size = { 240 74 } + position = { -16 0 } + visible = "[And( Not( IsNomad( GetPlayer ) ), Not( GetPlayer.GetGovernment.IsType( 'celestial_government' ) ) )]" + + proportional_icon = { + size = { 100% 100% } + visible = "[GreaterThanOrEqualTo_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/window_legend_chronicle/expected_legitimacy_decoration.dds" + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_right.dds" + blend_mode = alphaMultiply + } + } + + proportional_icon = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/window_legend_chronicle/under_expected_legitimacy_decoration.dds" + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_right.dds" + blend_mode = alphaMultiply + } + } + } + + widget = { + size = { 240 74 } + position = { -16 0 } + visible = "[IsNomad( GetPlayer )]" + + proportional_icon = { + size = { 100% 100% } + visible = "[GreaterThanOrEqualTo_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/illustrations/decisions/mpo_decision_great_khan.dds" + mirror = horizontal + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal.dds" + blend_mode = alphaMultiply + } + } + + proportional_icon = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/illustrations/event_scenes/mpo_raid_burning_asian.dds" + mirror = horizontal + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal.dds" + blend_mode = alphaMultiply + } + } + } + + widget = { + size = { 240 74 } + position = { -16 0 } + visible = "[GetPlayer.GetGovernment.IsType( 'celestial_government' )]" + + proportional_icon = { + size = { 100% 100% } + visible = "[GreaterThanOrEqualTo_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/illustrations/event_story/tgp_dynastic_cycle_stability.dds" + mirror = horizontal + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal.dds" + blend_mode = alphaMultiply + } + } + + proportional_icon = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/illustrations/event_story/tgp_dynastic_cycle_consolidation.dds" + mirror = horizontal + + using = Mask_Rough_Edges + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal.dds" + blend_mode = alphaMultiply + } + } + } + } + } + + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + margin_right = 10 + + hbox = { + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + text = "LEGITIMACY_EFFECTS" + max_width = 500 + } + expand = { + layoutpolicy_horizontal = expanding + } + } + spacer = { + size = { 0 15 } + } + + ### LEGITIMACY BREAKDOWN + hbox = { + datacontext = "[Character.GetMonthlyLegitimacyTooltip]" + visible = "[Not( EqualTo_CFixedPoint( Character.GetLegitimacy, '(CFixedPoint)0' ))]" + layoutpolicy_horizontal = expanding + using = tooltip_se + + text_single = { + + layoutpolicy_horizontal = expanding + + text = "[Character.GetMonthlyLegitimacy]" + align = nobaseline + } + + tooltip_visible = "[ValueBreakdown.HasTooltip]" + tooltipwidget = { + visible = "[ValueBreakdown.HasTooltip]" + widget_value_breakdown_tooltip = {} + } + expand = {} + } + + spacer = { + size = { 0 15 } + } + + hbox = { + name = "track_header" + layoutpolicy_horizontal = expanding + spacing = 5 + margin_left = -10 + min_height = 45 + + background = { + using = Background_Area + margin = { -5 -5 } + + modify_texture = { + texture = "gfx/interface/component_masks/mask_fade_horizontal_right.dds" + blend_mode = alphaMultiply + } + } + + icon_legitimacy_flat = {} + + text_single = { + text = "LEGITIMACY_TRACK_TITLE" + layoutpolicy_horizontal = expanding + align = nobaseline + } + } + + margin_widget = { + size = { 500 50 } + margin = { 10 0 } + + datacontext = "[Character.GetLegitimacyType]" + datacontext = "[Character.GetLegitimacyLevel]" + + hbox_complex_bar_progress = { + layoutpolicy_horizontal = expanding + margin_top = 30 + } + + hbox_complex_bar_levels = { + layoutpolicy_horizontal = expanding + position = { 0 -10 } + blockoverride "marker" + { + widget_level_marker = { + scale = 0.75 + + # Hide last one, it is the maximum not an actual level + visible = "[LessThan_int32( PdxGuiWidget.GetIndexInDataModel, GetDataModelSize( LegitimacyType.GetLevels ) )]" + + blockoverride "marker_addon" { + icon = { + texture = "gfx/interface/colors/white.dds" + using = Mask_Rough_Edges + position = { -4 28 } + size = { 8 40 } + alpha = 0.4 + + visible = "[GreaterThan_int32( PdxGuiWidget.GetIndexInDataModel, '(int32)0' )]" + } + + widget = { + size = { 52 52 } + position = { -26 24 } + visible = "[And( EqualTo_int32( Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex, PdxGuiWidget.GetIndexInDataModel ), Not( Character.GetGovernment.HasRule( 'deny_powerful_vassal' ) ) ) ]" + + icon = { + size = { 100% 100% } + visible = "[Not(LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex ))]" + texture = "gfx/interface/window_legend_chronicle/pin_expected_legitimacy.dds" + } + + icon = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/window_legend_chronicle/pin_under_expected_legitimacy.dds" + } + + widget = { + parentanchor = center + size = { 28 28 } + + icon_flat_standard_red = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex )]" + texture = "[LegitimacyType.GetFlatIcon]" + } + + icon_flat_standard = { + size = { 100% 100% } + visible = "[Not(LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex ))]" + texture = "[LegitimacyType.GetFlatIcon]" + } + } + } + widget = { + size = { 52 52 } + position = { -26 24 } + visible = "[And( EqualTo_int32( Character.GetAverageVassalLegitimacyExpectation.GetIndex, PdxGuiWidget.GetIndexInDataModel ), Character.GetGovernment.HasRule( 'deny_powerful_vassal' ) ) ]" + + icon = { + size = { 100% 100% } + visible = "[Not(LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAverageVassalLegitimacyExpectation.GetIndex ))]" + texture = "gfx/interface/window_legend_chronicle/pin_expected_legitimacy.dds" + } + + icon = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAverageVassalLegitimacyExpectation.GetIndex )]" + texture = "gfx/interface/window_legend_chronicle/pin_under_expected_legitimacy.dds" + } + + widget = { + parentanchor = center + size = { 28 28 } + + icon_flat_standard_red = { + size = { 100% 100% } + visible = "[LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAverageVassalLegitimacyExpectation.GetIndex )]" + texture = "[LegitimacyType.GetFlatIcon]" + } + + icon_flat_standard = { + size = { 100% 100% } + visible = "[Not(LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAverageVassalLegitimacyExpectation.GetIndex ))]" + texture = "[LegitimacyType.GetFlatIcon]" + } + } + } + } + + blockoverride "visible_active" + { + visible = "[EqualTo_int32( LegitimacyLevel.GetIndex, PdxGuiWidget.GetIndexInDataModel )]" + } + + blockoverride "visible_inactive" + { + visible = "[NotEqualTo_int32( LegitimacyLevel.GetIndex, PdxGuiWidget.GetIndexInDataModel )]" + } + + blockoverride "marker_tooltip" + { + datacontext_from_model = { + datamodel = "[LegitimacyType.GetLevels]" + index = "[PdxGuiWidget.GetIndexInDataModel]" + } + tooltip = "LEGITIMACY_TRACK_TOOLTIP" + using = tooltip_se + } + + blockoverride "marker_text" + { + text = "[PdxGuiWidget.GetIndexInDataModel|V]" + } + } + } + } + } + + spacer = { + size = { 0 15 } + } + hbox = { + layoutpolicy_horizontal = expanding + + vbox = { + visible = "[Character.HasVassals]" + spacing = 10 + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + text = "LEGITIMACY_AVERAGE_EXPECTATIONS" + visible = "[Not(Character.GetGovernment.HasRule( 'deny_powerful_vassal' ))]" + } + cooltip_paragraph = { + text = "LEGITIMACY_AVERAGE_EXPECTATIONS_NO_POWERFUL_VASSALS" + visible = "[Character.GetGovernment.HasRule( 'deny_powerful_vassal' )]" + } + + cooltip_paragraph = { + visible = "[And( LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAveragePowerfulVassalLegitimacyExpectation.GetIndex ), Not( Character.GetGovernment.HasRule( 'deny_powerful_vassal' ) ) ) ]" + text = "LEGITIMACY_BELOW_AVERAGE_EXPECTATIONS" + } + cooltip_paragraph = { + visible = "[And( LessThan_int32( LegitimacyLevel.GetIndex, Character.GetAverageVassalLegitimacyExpectation.GetIndex ), Character.GetGovernment.HasRule( 'deny_powerful_vassal' ) ) ]" + text = "LEGITIMACY_BELOW_AVERAGE_EXPECTATIONS" + } + } + expand = { + layoutpolicy_horizontal = expanding + } + } + } + } + } + + type hbox_merit_with_label = hbox { + visible = "[Character.ShouldShowMerit]" + spacing = 4 + margin = { 4 0 } + + block "hbox_merit_with_label_background" + { + background = { + using = Background_Area + margin = { 4 4 } + } + } + + widget_merit = { + blockoverride "merit_widget_tooltip" + { + # use our own hitbox for the tooltip + } + } + + text_single = { + name = "rank_number" + visible = "[GreaterThanOrEqualTo_int32( Character.GetMeritLevel, '(int32)1' )]" + text = "[GetMeritLevelShortNameNoTooltip( MeritItem.GetCurrentLevel )|V]" + + align = nobaseline + } + + text_single = { + name = "no_rank" + visible = "[LessThanOrEqualTo_int32( Character.GetMeritLevel, '(int32)0' )]" + text = "[GetMeritLevelShortNameNoTooltip( MeritItem.GetCurrentLevel )]" + default_format = "#weak" + max_width = 50 + + align = nobaseline + } + + tooltipwidget = { + merit_hud_tooltip = { + block "merit_tooltip" {} + } + } + } + + type widget_merit = widget { + visible = "[Character.ShouldShowMerit]" + + block "icon_size" + { + size = { 32 32 } + } + + using = tooltip_ne + + block "merit_widget_tooltip" + { + tooltipwidget = { + merit_hud_tooltip = { + block "merit_tooltip" {} + } + } + } + + block "background_texture" + { + icon = { + texture = "gfx/interface/icons/activity_phases/button_activity_base.dds" + size = { 100% 100% } + } + } + + icon = { + name = "progress_frame" + texture = "gfx/interface/progressbars/action_progress_frame.dds" + size = { 100% 100% } + } + + icon = { + parentanchor = center + size = { 66% 66% } + + texture = "[Character.GetMeritLevelTexture]" + frame = "[IntToFrameIndex( Character.GetMeritLevel )]" + + modify_texture = { + name = "lvl_increase" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + name = "lvl_decrease" + texture = "gfx/interface/colors/red.dds" + blend_mode = colordodge + alpha = 0 + } + + state = { + name = "merit_level_increase" + next = "merit_level_increase_2" + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "merit_level_increase_2" + next = "merit_level_increase_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_increase" + alpha = 0.7 + } + } + + state = { + name = "merit_level_increase_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "merit_level_decrease" + next = "merit_level_decrease_2" + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + + state = { + name = "merit_level_decrease_2" + next = "merit_level_decrease_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0.7 + } + } + + state = { + name = "merit_level_decrease_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + } + + widget = { + size = { 87% 87% } + parentanchor = center + + progresspie = { + name = "progress" + + size = { 100% 100% } + texture = "gfx/interface/progressbars/action_progress_thin_blue.dds" + framesize = { 128 128 } + frame = 2 + min = 0 + max = 100 + value = "[MeritItem.GetProgress]" + } + + icon = { + name = "progress_capped" + visible = "[And(Character.IsMeritCapped, Not( EqualTo_int32( Character.GetMeritLevel, '(int32)9' ) ) )]" + + + size = { 100% 100% } + texture = "gfx/interface/progressbars/action_progress_thin_red.dds" + framesize = { 128 128 } + frame = 2 + } + } + } + + type widget_merit_hud = widget { + visible = "[And(Character.ShouldShowMerit, Character.IsAlive)]" + size = { 74 94 } + + using = tooltip_ne + + block "merit_widget_tooltip" + { + tooltipwidget = { + merit_hud_tooltip = { + block "merit_tooltip" {} + } + } + } + + # WIDGET BACKGROUND TEXTURE + icon = { + texture = "gfx/interface/hud/tgp_widget_merit_background.dds" + size = { 100% 100% } + } + + # MERIT ICON + icon = { + parentanchor = top|hcenter + position = { 0 17 } + size = { 40 40 } + + texture = "[Character.GetMeritLevelTexture]" + frame = "[IntToFrameIndex( Character.GetMeritLevel )]" + + modify_texture = { + name = "lvl_increase" + texture = "gfx/interface/colors/gold.dds" + blend_mode = colordodge + alpha = 0 + } + + modify_texture = { + name = "lvl_decrease" + texture = "gfx/interface/colors/red.dds" + blend_mode = colordodge + alpha = 0 + } + + state = { + name = "merit_level_increase" + next = "merit_level_increase_2" + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "merit_level_increase_2" + next = "merit_level_increase_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_increase" + alpha = 0.7 + } + } + + state = { + name = "merit_level_increase_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_increase" + alpha = 0 + } + } + + state = { + name = "merit_level_decrease" + next = "merit_level_decrease_2" + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + + state = { + name = "merit_level_decrease_2" + next = "merit_level_decrease_3" + duration = 0.4 + bezier = { 0.5 0 1 0.5 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0.7 + } + } + + state = { + name = "merit_level_decrease_3" + duration = 0.5 + bezier = { 0 0.5 0.5 1 } + + modify_texture = { + name = "lvl_decrease" + alpha = 0 + } + } + } + + # PROGRESS BAR + widget = { + parentanchor = top|hcenter + position = { 0 9 } + size = { 56 56 } + + + progresspie = { + name = "progress" + + size = { 100% 100% } + texture = "gfx/interface/progressbars/action_progress_thin_blue.dds" + framesize = { 128 128 } + frame = 2 + min = 0 + max = 100 + value = "[MeritItem.GetProgress]" + } + + + icon = { + name = "progress_capped" + visible = "[And(Character.IsMeritCapped, Not( EqualTo_int32( Character.GetMeritLevel, '(int32)9' ) ) )]" + + size = { 100% 100% } + framesize = { 128 128 } + texture = "gfx/interface/progressbars/action_progress_thin_red.dds" + frame = 2 + } + } + + # RANK + text_single = { + visible = "[GreaterThan_int32( Character.GetMeritLevel, '(int32)0' )]" + parentanchor = bottom|hcenter + position = { 0 -6 } + + text = "[GetMeritLevelShortNameNoTooltip( MeritItem.GetCurrentLevel )|V]" + align = nobaseline + using = Font_Size_Small + } + + # IF YOU HAVE NO RANK + text_single = { + visible = "[EqualTo_int32( Character.GetMeritLevel, '(int32)0' )]" + parentanchor = bottom|hcenter + position = { 0 -5 } + + raw_text = "-" + align = nobaseline + using = Font_Size_Small + } + } + + type hbox_merit_complex_bar_progress = hbox { + allow_outside = yes + + hbox = { + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + layoutstretchfactor_horizontal = "[MeritItem.GetMeritStretchFactor]" + allow_outside = yes + + block "filled" { + background = { + spriteType = Corneredstretched + spriteborder = { 3 3 } + + block "texture_merit" { + texture = "gfx/interface/progressbars/progress_standard.dds" + } + } + } + } + + hbox = { + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + layoutstretchfactor_horizontal = "[MeritItem.GetOverflowMeritStretchFactor]" + visible = "[GreaterThan_int32( MeritItem.GetOverflowMeritStretchFactor, '(int32)0' )]" + allow_outside = yes + + tooltip = "MERIT_RANK_CAP_TT" + + block "next" { + background = { + spriteType = Corneredstretched + spriteborder = { 3 3 } + + block "texture_overflow_merit" { + texture = "gfx/interface/progressbars/progress_red.dds" + } + } + } + } + + hbox = { + layoutpolicy_horizontal = expanding + layoutpolicy_vertical = expanding + layoutstretchfactor_horizontal = "[MeritItem.GetLeftoverSpaceStretchFactor]" + allow_outside = yes + + block "empty" { + background = { + spriteType = Corneredstretched + spriteborder = { 3 3 } + + block "texture_empty" { + texture = "gfx/interface/progressbars/progress_black.dds" + } + } + } + } + } + + type merit_hud_tooltip = object_tooltip_pop_out { + datacontext = "[MeritItem.GetValueItem]" + datacontext = "[MeritItem.GetComplexBar]" + visible = "[Character.HasMerit]" + + blockoverride "title_text" + { + text = "[GetMeritModifierByLevel( Character.GetMeritLevel ).GetName]" + default_format = "#T" + } + + blockoverride "concept_link" + { + text = "[merit_level|E]" + } + + blockoverride "subheading" + { + text_single = { + max_width = 400 + layoutpolicy_horizontal = expanding + + text = "[Character.GetCareerPathDesc]" + fonttintcolor = "[TooltipInfo.GetTintColor]" + using = Font_Size_Small + fontsize_min = 14 + autoresize = yes + default_format = "#weak_glow" + } + } + + blockoverride "header_additions" + { + widget = { + size = { 60 74 } + + icon = { + size = { 64 64 } + parentanchor = center + position = { -8 0 } + + texture = "[Character.GetMeritLevelTexture]" + frame = "[IntToFrameIndex( Character.GetMeritLevel )]" + } + } + } + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + margin_right = 5 + spacing = 16 + + ### MERIT EFFECTS + vbox = { + layoutpolicy_horizontal = expanding + + ### modifier effects + cooltip_paragraph = { + visible = "[Not( StringIsEmpty( GetMeritLevelEffects( Character.GetMeritLevel ) ) )]" + max_width = 500 + text = "[GetMeritLevelEffects( Character.GetMeritLevel )]" + } + + ### Merit affecting Movement Power + cooltip_paragraph = { + visible = "[Character.ShouldShowMovementPower]" + max_width = 500 + text = "MERIT_MOVEMENT_POWER" + } + + ### Merit enabling appointment + cooltip_paragraph = { + max_width = 500 + name = "merit_appointment" + layoutpolicy_horizontal = expanding + + text = "[GetMaxAppointmentRankDescription( 'merit', Character.GetMeritLevel )]" + } + } + + text_label_left = { + layoutpolicy_horizontal = expanding + + text = "MERIT_PROGRESS_HEADING" + } + + ### MERIT COMPLEX PROGRESS BAR + widget = { + layoutpolicy_horizontal = expanding + size = { 500 50 } + + hbox_merit_complex_bar_progress = { + layoutpolicy_horizontal = expanding + margin_top = 30 + margin_right = 16 + margin_left = 5 + } + + hbox_complex_bar_levels = { + layoutpolicy_horizontal = expanding + position = { 0 -10 } + + margin_right = 16 + + blockoverride "marker" + { + widget_level_marker = { + visible = "[And( GreaterThan_int32( ComplexBarItem.GetIndex, '(int32)0' ), LessThan_int32( PdxGuiWidget.GetIndexInDataModel, GetDataModelSize( ComplexBar.GetItems ) ) )]" + scale = 0.75 + + blockoverride "marker_size" + { + size = { 55 55 } + } + + blockoverride "marker_size_inactive" + { + size = { 45 45 } + } + + blockoverride "marker_addon" { + icon = { + texture = "gfx/interface/colors/white.dds" + using = Mask_Rough_Edges + position = { -4 42 } + size = { 8 23 } + alpha = 0.3 + + visible = "[GreaterThan_int32( PdxGuiWidget.GetIndexInDataModel, '(int32)0' )]" + } + + widget = { + size = { 52 52 } + position = { -26 24 } + visible = "[EqualTo_int32( Add_int32( Character.GetMaxMeritLevelForCharacter, '(int32)1' ), PdxGuiWidget.GetIndexInDataModel )]" + tooltip = "MERIT_RANK_CAP_TT" + + icon = { + size = { 100% 100% } + texture = "gfx/interface/window_legend_chronicle/pin_under_expected_legitimacy.dds" + } + + icon_flat_standard_red = { + parentanchor = center + size = { 26 26 } + texture = "gfx/interface/icons/domicile_building/domicile_lock_wagons.dds" + } + } + } + + blockoverride "visible_active" + { + visible = "[EqualTo_int32( MeritItem.GetCurrentLevel, ComplexBarItem.GetIndex )]" + } + + blockoverride "level_inactive_style" + { + datacontext = "[ComplexBarItem]" + allow_outside = yes + + datacontext_from_model = { + datamodel = "[MeritItem.GetLevels]" + index = "[PdxGuiWidget.GetIndexInDataModel]" + } + + modify_texture = { + visible = "[GreaterThan_int32( ComplexBarItem.GetIndex, PlayerValueItem.GetMaxLevelIndex( Character.Self ) )]" + texture = "gfx/interface/colors/black.dds" + blend_mode = multiply + alpha = 0.1 + } + } + + blockoverride "visible_inactive" + { + visible = "[NotEqualTo_int32( MeritItem.GetCurrentLevel, ComplexBarItem.GetIndex )]" + } + + blockoverride "marker_tooltip" + { + datacontext = "[ComplexBarItem]" + + datacontext_from_model = { + datamodel = "[MeritItem.GetLevels]" + index = "[PdxGuiWidget.GetIndexInDataModel]" + } + + tooltip = "MERIT_PROGRESSBAR_MARKER_TOOLTIP" + using = tooltip_se + } + + blockoverride "marker_text" + { + text = "[GetMeritLevelShortNameNoTooltip( ComplexBarItem.GetIndex )]" + } + } + } + } + } + + vbox = { + layoutpolicy_horizontal = expanding + + hbox = { + layoutpolicy_horizontal = expanding + + ### MERIT TOTAL + text_single = { + layoutpolicy_horizontal = expanding + + text = "[Character.GetTotalMerit]" + align = nobaseline + } + + ### MERIT CAP + text_single = { + visible = "[PlayerValueItem.HasNonStandardLevel( Character.Self )]" + layoutpolicy_horizontal = expanding + + text = "[PlayerValueItem.GetMaxLevel( Character.Self )]" + align = right|nobaseline + default_format = "#underline" + + tooltip = "MAX_MERIT_RANK_BREAKDOWN_TOOLTIP" + } + } + + hbox = { + layoutpolicy_horizontal = expanding + + ### MERIT BREAKDOWN WITH TOOLTIP + text_single = { + datacontext = "[PlayerValueItem.GetBalanceGained]" + + text = "[Character.GetMeritBalanceBreakdown]" + align = nobaseline + + tooltip_visible = "[ValueBreakdown.HasTooltip]" + + tooltipwidget = { + widget_value_breakdown_tooltip = { } + } + } + + expand = {} + } + } + + ### MERIT EXAMINATIONS + vbox = { + layoutpolicy_horizontal = expanding + spacing = 5 + + text_label_left = { + layoutpolicy_horizontal = expanding + + text = "MERIT_TOOLTIP_COMPLETED_EXAMINATIONS" + } + + hbox = { + datacontext = "[Character.MakeScope]" + spacing = 50 + + widget_childrens_exam_status = {} + + widget_provincial_exam_status = {} + + widget_metropolitan_exam_status = {} + + widget_palace_exam_status = {} + } + + text_single = { + layoutpolicy_horizontal = expanding + + text = "MERIT_TOOLTIP_EXAMINATION_DISCLAIMER" + default_format = "#weak" + } + } + } + } + } + + type passed_examination_icon = icon_flat_standard_green + { + size = { 30 30 } + texture = "gfx/interface/icons/flat_icons/passed_examination_icon.dds" + + background = { + using = Background_Area_Solid + + block "background_margins" + { + margin = { -1 -1 } + } + } + } + + type failed_examination_icon = icon_flat_standard_red + { + size = { 30 30 } + texture = "gfx/interface/icons/flat_icons/failed_examination_icon.dds" + + background = { + using = Background_Area_Solid + + margin = { -1 -1 } + } + } + + type herd_breakdown_hud_toolip = container + { + using = GeneralTooltipSetup + alwaystransparent = no + + object_tooltip_pop_out = { + blockoverride "title_text" + { + margin = { 0 8 } + text = "DOMICILE_HERD_TITLE" + default_format = "#T" + + block "herd_limit_breakdown" + { + datacontext = "[InGameTopbar.GetHerdLimitBreakdown( Domicile.Self )]" + } + tooltipwidget = { + widget_value_breakdown_tooltip = {} + } + } + + blockoverride "concept_link" + { + visible = no + } + + blockoverride "main_description" + { + vbox = { + layoutpolicy_horizontal = expanding + + cooltip_paragraph = { + visible = "[Domicile.IsAboveHerdLimit]" + text = "[Domicile.GetAboveHerdLimitEffects]" + } + + spacer = { + visible = "[Domicile.IsAboveHerdLimit]" + size = { 0 15 } + } + + cooltip_paragraph = { + block "herd_change_breakdown" + { + datacontext = "[InGameTopbar.GetHerdChangeBreakdown]" + } + + text = "VALUE_BREAKDOWN_TEXT_LINK" + + tooltip_visible = "[ValueBreakdown.HasTooltip]" + + tooltipwidget = { + widget_value_breakdown_tooltip = {} + } + } + + cooltip_paragraph = { + block "herd_conversion_breakdown" + { + datacontext = "[InGameTopbar.GetHerdConversionBreakdown( Domicile.Self )]" + } + + text = "VALUE_BREAKDOWN_TEXT_LINK" + + tooltip_visible = "[ValueBreakdown.HasTooltip]" + + tooltipwidget = { + widget_value_breakdown_tooltip = {} + } + } + + spacer = { + size = { 0 15 } + } + + cooltip_paragraph = { + visible = "[Character.HasRaisedHorde]" + text = "DOMICILE_HERD_ALREADY_RAISED" + } + + cooltip_paragraph = { + visible = "[Not( Character.HasRaisedHorde )]" + text = "DOMICILE_HERD_HERD_TO_RAISE" + } + } + } + } + } +} diff --git a/gui/shared/coat_of_arms.gui b/gui/shared/coat_of_arms.gui new file mode 100644 index 00000000..b48d8904 --- /dev/null +++ b/gui/shared/coat_of_arms.gui @@ -0,0 +1,2937 @@ +###################################################### +#################### COAT OF ARMS #################### +###################################################### + +# Standard Realm Coa of Arms types + +@overlay_alpha = 0.4 + +template coat_of_arms_icon_data +{ + gfxtype = coatofarmsgfx + shaderfile = "gfx/FX/gui_coatofarms.shader" + alwaystransparent = yes + allow_outside = yes +} + +types CoATypes +{ + type coat_of_arms_icon = icon { + using = coat_of_arms_icon_data + } + + type drag_drop_coat_of_arms_icon = drag_drop_icon { + using = coat_of_arms_icon_data + alwaystransparent = no + drag_drop_base_type = "coat_of_arms_icon" + } + + #################################### + ########### REALM SHIELDS ########## + #################################### + + ## Tiny Realm CoA + type coa_realm_tiny_crown = coa_realm_tiny { + blockoverride "crown" { + visible = "[And(And(Not(Character.GetPrimaryTitle.IsMercenaryCompany), Not(Character.GetPrimaryTitle.IsHolyOrder)), Not(Character.GetGovernment.IsType('landless_adventurer_government')))]" + } + } + + type coa_realm_tiny = button_group { + using = CoA_Realm_Defaults + + block "government_datacontext" + { + datacontext = "[Character.GetGovernment]" + } + + widget = { + parentanchor = hcenter + position = { 0 -24 } + icon = { + name = "adventurer_top_decor" + visible = "[GovernmentType.IsType('landless_adventurer_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_28.dds" + } + icon = { + name = "minority_top_decor" + visible = "[GovernmentType.IsType('landless_minority_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_28.dds" + } + + icon = { + name = "mercenary" + visible = "[Character.GetPrimaryTitle.IsMercenaryCompany]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_28.dds" + } + + icon = { + name = "holy_order" + visible = "[Character.GetPrimaryTitle.IsHolyOrder]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_28.dds" + } + } + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 2 + + icon = { + name = "crown" + texture = "gfx/interface/coat_of_arms/crown_strip_28.dds" + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + framesize = { 32 22 } + + block "crown" { + visible = no + } + } + + widget = { + visible = "[Character.HasLandedTitles]" + size = { 32 32 } + + coa_realm_shadow = { + texture = "[GovernmentType.GetRealmFrameShadow('(int32)28')]" + size = { 32 32 } + framesize = { 32 32 } + + using = CoA_Realm_Hover_Glow + } + + coat_of_arms_icon = { + parentanchor = center + size = { 32 32 } + coat_of_arms = "[Character.GetPrimaryTitle.GetTitleCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Character.GetPrimaryTitle.GetTitleCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "[GovernmentType.GetRealmMask]" + coat_of_arms_offset = "[GovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[GovernmentType.GetRealmMaskScale]" + + block "coa_icon_additions" {} + + modify_texture = { + texture = "[GovernmentType.GetRealmMask]" + blend_mode = overlay + } + + coa_realm_overlay = { + texture = "[GovernmentType.GetRealmFrame('(int32)28')]" + size = { 32 32 } + framesize = { 32 32 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_28.dds" + position = { 0 -6 } + size = { 32 32 } + framesize = { 32 32 } + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + } + } + } + } + } + + + ## Small Realm CoA + type coa_realm_small_crown = coa_realm_small { + blockoverride "crown" { + visible = "[And(And(Not(Character.GetPrimaryTitle.IsMercenaryCompany), Not(Character.GetPrimaryTitle.IsHolyOrder)), Not(Or(Character.GetGovernment.IsType('landless_adventurer_government')Character.GetGovernment.IsType('landless_minority_government'))))]" + } + } + + type coa_realm_small = button_group { + using = CoA_Realm_Defaults + + widget = { + parentanchor = hcenter + position = { 0 -34 } + + icon = { + name = "adventurer_top_decor" + visible = "[Character.GetGovernment.IsType('landless_adventurer_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_44.dds" + } + + icon = { + name = "minority_top_decor" + visible = "[Character.GetGovernment.IsType('landless_minority_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_44.dds" + } + icon = { + name = "mercenary" + visible = "[Character.GetPrimaryTitle.IsMercenaryCompany]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_44.dds" + } + + icon = { + name = "holy_order" + visible = "[Character.GetPrimaryTitle.IsHolyOrder]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_44.dds" + } + } + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 3 + + block "government_datacontext" + { + datacontext = "[Character.GetGovernment]" + } + + icon = { + name = "crown" + parentanchor = hcenter + framesize = { 52 32 } + texture = "gfx/interface/coat_of_arms/crown_strip_44.dds" + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + + block "crown" { + visible = no + } + } + + widget = { + size = { 52 52 } + + coa_realm_shadow = { + texture = "[GovernmentType.GetRealmFrameShadow('(int32)44')]" + size = { 52 52 } + framesize = { 52 52 } + using = CoA_Realm_Hover_Glow + } + visible = "[Character.HasLandedTitles]" + + coat_of_arms_icon = { + parentanchor = center + size = { 52 52 } + coat_of_arms = "[Character.GetPrimaryTitle.GetTitleCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Character.GetPrimaryTitle.GetTitleCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[GovernmentType.GetRealmMask]" + coat_of_arms_offset = "[GovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[GovernmentType.GetRealmMaskScale]" + + block "coa_icon_additions" {} + + modify_texture = { + texture = "[GovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[GovernmentType.GetRealmFrame('(int32)44')]" + size = { 52 52 } + framesize = { 52 52 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_44.dds" + position = { 0 -7 } + size = { 52 52 } + framesize = { 52 52 } + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + } + } + } + } + } + + + ## Medium Realm CoA + type coa_realm_medium_crown = coa_realm_medium { + blockoverride "crown" { + visible = "[And(And(Not(Character.GetPrimaryTitle.IsMercenaryCompany), Not(Character.GetPrimaryTitle.IsHolyOrder)), Not(Or(Character.GetGovernment.IsType('landless_adventurer_government')Character.GetGovernment.IsType('landless_minority_government'))))]" + } + } + + type coa_realm_medium = button_group { + using = CoA_Realm_Defaults + + block "government_datacontext" + { + datacontext = "[Character.GetGovernment]" + } + + flowcontainer = { + direction = vertical + spacing = 3 + + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_62.dds" + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + framesize = { 64 40 } + + block "crown" { + visible = no + } + } + + icon = { + name = "adventurer_top_decor" + visible = "[GovernmentType.IsType('landless_adventurer_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_62.dds" + } + + icon = { + name = "minority_top_decor" + visible = "[GovernmentType.IsType('landless_minority_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_62.dds" + } + icon = { + name = "mercenary" + visible = "[Character.GetPrimaryTitle.IsMercenaryCompany]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_62.dds" + } + + icon = { + name = "holy_order" + visible = "[Character.GetPrimaryTitle.IsHolyOrder]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_62.dds" + } + + widget = { + size = { 64 64 } + + coa_realm_shadow = { + texture = "[GovernmentType.GetRealmFrameShadow('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + + using = CoA_Realm_Hover_Glow + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + + block "coa_icon_additions" {} + + block "coat_of_arms" + { + coat_of_arms = "[Character.GetPrimaryTitle.GetTitleCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Character.GetPrimaryTitle.GetTitleCoA.GetSlot('(int32)124','(int32)124')]" + } + + coat_of_arms_offset = "[GovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[GovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[GovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[GovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + position = { 0 -9 } + size = { 64 64 } + framesize = { 64 64 } + } + } + } + } + } + + + ## Big Realm CoA + type coa_realm_big_crown = coa_realm_big { + blockoverride "crown" { + visible = "[And(And(Not(Character.GetPrimaryTitle.IsMercenaryCompany), Not(Character.GetPrimaryTitle.IsHolyOrder)), Not(Or(Character.GetGovernment.IsType('landless_adventurer_government')Character.GetGovernment.IsType('landless_minority_government'))))]" + } + } + + type coa_realm_big = button_group { + using = CoA_Realm_Defaults + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 4 + + block "government_datacontext" + { + datacontext = "[Character.GetGovernment]" + } + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_86.dds" + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + framesize = { 96 60 } + + block "crown" { + visible = no + } + } + + icon = { + name = "adventurer_top_decor" + visible = "[GovernmentType.IsType('landless_adventurer_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_86.dds" + } + + icon = { + name = "minority_top_decor" + visible = "[GovernmentType.IsType('landless_minority_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_86.dds" + } + icon = { + name = "mercenary" + visible = "[Character.GetPrimaryTitle.IsMercenaryCompany]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_86.dds" + } + + icon = { + name = "holy_order" + visible = "[Character.GetPrimaryTitle.IsHolyOrder]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_86.dds" + } + + widget = { + size = { 96 96 } + + coa_realm_shadow = { + texture = "[GovernmentType.GetRealmFrameShadow('(int32)86')]" + size = { 96 96 } + framesize = { 96 96 } + + using = CoA_Realm_Hover_Glow + } + + coat_of_arms_icon = { + parentanchor = center + size = { 96 96 } + + block "coa_icon_additions" {} + + block "coat_of_arms" + { + coat_of_arms = "[Character.GetPrimaryTitle.GetTitleCoA.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[Character.GetPrimaryTitle.GetTitleCoA.GetSlot('(int32)172','(int32)172')]" + } + + coat_of_arms_mask = "[GovernmentType.GetRealmMask]" + coat_of_arms_offset = "[GovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[GovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[GovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[GovernmentType.GetRealmFrame('(int32)86')]" + size = { 96 96 } + framesize = { 96 96 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_86.dds" + position = { 0 -14 } + size = { 96 96 } + framesize = { 96 94 } + } + } + } + } + } + + ## Huge Realm CoA + type coa_realm_huge_crown = coa_realm_huge { + blockoverride "crown" { + visible = "[And(And(Not(Character.GetPrimaryTitle.IsMercenaryCompany), Not(Character.GetPrimaryTitle.IsHolyOrder)), Not(Or(Character.GetGovernment.IsType('landless_adventurer_government')Character.GetGovernment.IsType('landless_minority_government'))))]" + } + } + + type coa_realm_huge = button_group { + using = CoA_Realm_Defaults + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 2 + + block "government_datacontext" + { + datacontext = "[Character.GetGovernment]" + } + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_115.dds" + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + framesize = { 128 80 } + + block "crown" { + visible = no + } + } + + icon = { + name = "adventurer_top_decor" + visible = "[GovernmentType.IsType('landless_adventurer_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_115.dds" + } + + icon = { + name = "minority_top_decor" + visible = "[GovernmentType.IsType('landless_minority_government')]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_115.dds" + } + icon = { + name = "mercenary" + visible = "[Character.GetPrimaryTitle.IsMercenaryCompany]" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_115.dds" + } + + icon = { + name = "holy_order" + visible = "[Character.GetPrimaryTitle.IsHolyOrder]" + visible_at_creation = no + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_115.dds" + } + + widget = { + parentanchor = hcenter + size = { 128 128 } + + coa_realm_shadow = { + texture = "[GovernmentType.GetRealmFrameShadow('(int32)115')]" + size = { 128 128 } + framesize = { 128 128 } + + using = CoA_Realm_Hover_Glow + } + + coat_of_arms_icon = { + parentanchor = center + size = { 128 128 } + coat_of_arms = "[Character.GetPrimaryTitle.GetTitleCoA.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[Character.GetPrimaryTitle.GetTitleCoA.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "[GovernmentType.GetRealmMask]" + coat_of_arms_offset = "[GovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[GovernmentType.GetRealmMaskScale]" + + block "coa_icon_additions" {} + + modify_texture = { + texture = "[GovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[GovernmentType.GetRealmFrame('(int32)115')]" + size = { 128 128 } + framesize = { 128 128 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_115.dds" + position = { 0 -14 } + size = { 128 128 } + framesize = { 128 128 } + } + } + } + } + } + + # The frame around the Realm CoA texture + type coa_realm_overlay = highlight_icon { + name = "coa_overlay" + parentanchor = center + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + texture = "[Character.GetGovernment.GetRealmFrame('(int32)230')]" + size = { 128 128 } + framesize = { 128 128 } + } + + type coa_realm_shadow = highlight_icon { + name = "coa_shadow" + parentanchor = center + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + texture = "[Character.GetGovernment.GetRealmFrameShadow('(int32)230')]" + size = { 128 128 } + framesize = { 128 128 } + } + + type coa_realm_topframe = highlight_icon { + name = "coa_topframe" + parentanchor = center + frame = "[Character.GetPrimaryTitle.GetTierFrame]" + texture ="gfx/interface/coat_of_arms/topframe_115.dds" + size = { 128 128 } + framesize = { 128 128 } + } + + #################################### + ############## TITLES ############## + #################################### + + # Standard Ttile Coa of Arms types + + ## Tiny Title CoA + type coa_title_tiny_crown = coa_title_tiny { + blockoverride "crown" {} + } + + type coa_title_tiny = button_group { + using = CoA_Title_Defaults + + flowcontainer = { + direction = vertical + + block "position" { + position = { 0 -10 } + } + + spacing = -4 + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_28.dds" + frame = "[Title.GetTierFrame]" + framesize = { 32 22 } + + block "crown" { + visible = no + } + } + + widget = { + parentanchor = hcenter + size = { 36 36 } + + coat_of_arms_icon = { + parentanchor = center + size = { 28 28 } + coat_of_arms = "[Title.GetTitleCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Title.GetTitleCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + using = CoA_Title_Hover_Glow + + block "coa_icon" {} + + coa_title_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_28.dds" + size = { 36 36 } + } + + coa_title_frame_no_holder = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_no_holder_28.dds" + size = { 36 36 } + } + } + } + } + } + + ## Small Title CoA + type coa_title_small_crown = coa_title_small { + blockoverride "crown" {} + } + + # type coa_title_small = coa_title_tiny {} + + type coa_title_small = button_group { + using = CoA_Title_Defaults + + flowcontainer = { + direction = vertical + spacing = -3 + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_44.dds" + frame = "[Title.GetTierFrame]" + framesize = { 52 32 } + + block "crown" { + visible = no + } + } + + widget = { + parentanchor = hcenter + size = { 52 52 } + + coat_of_arms_icon = { + parentanchor = center + size = { 44 44 } + coat_of_arms = "[Title.GetTitleCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Title.GetTitleCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + using = CoA_Title_Hover_Glow + + coa_title_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_44.dds" + size = { 52 52 } + } + + coa_title_frame_no_holder = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_no_holder_44.dds" + size = { 56 56 } + } + } + } + } + } + + ## Medium Title CoA + type coa_title_medium_crown = coa_title_medium { + blockoverride "crown" {} + } + + type coa_title_medium = button_group { + using = CoA_Title_Defaults + + flowcontainer = { + direction = vertical + spacing = -3 + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_62.dds" + frame = "[Title.GetTierFrame]" + framesize = { 64 40 } + + block "crown" { + visible = no + } + } + + widget = { + parentanchor = hcenter + size = { 72 72 } + + coat_of_arms_icon = { + parentanchor = center + size = { 62 62 } + coat_of_arms = "[Title.GetTitleCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Title.GetTitleCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + using = CoA_Title_Hover_Glow + + coa_title_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_62.dds" + size = { 72 72 } + } + + coa_title_frame_no_holder = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_no_holder_62.dds" + size = { 80 80 } + } + } + } + } + } + + ## Big Title CoA + type coa_title_big_crown = coa_title_big { + blockoverride "crown" {} + } + + type coa_title_big = button_group { + using = CoA_Title_Defaults + + flowcontainer = { + direction = vertical + spacing = -3 + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_115.dds" + frame = "[Title.GetTierFrame]" + framesize = { 128 80 } + + block "crown" { + visible = no + } + } + + widget = { + parentanchor = hcenter + size = { 96 96 } + + coat_of_arms_icon = { + parentanchor = center + size = { 86 86 } + coat_of_arms = "[Title.GetTitleCoA.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[Title.GetTitleCoA.GetSlot('(int32)172','(int32)172')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + using = CoA_Title_Hover_Glow + + coa_title_frame = { + texture = "gfx/interface/coat_of_arms/title_86.dds" + size = { 96 96 } + } + + coa_title_frame_no_holder = { + texture = "gfx/interface/coat_of_arms/title_no_holder_86.dds" + size = { 104 104 } + } + } + } + } + } + + ## The frames around the Title CoA texture + type coa_title_frame = highlight_icon { + name = "coa_title_frame" + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_86.dds" + } + + type coa_title_frame_no_holder = highlight_icon { + name = "coa_title_frame_noholder" + visible = "[Not(Title.HasHolder)]" + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_no_holder_86.dds" + } + + #################################### + ############## DYNASTY ############# + #################################### + + type coa_lowborn_icon = vbox + { + icon = { + block "icon_size" + { + size = { 62 62 } + } + texture = "gfx/interface/coat_of_arms/lowborn.dds" + tooltip = "[lowborn|E]" + } + } + + type coa_dynasty_widget = button_group + { + visible = "[Dynasty.IsValid]" + } + + type coa_dynasty_lowborn_widget = widget + { + visible = "[Not( Dynasty.IsValid )]" + coa_lowborn_icon = {} + } + + type coa_dynasty_tiny = widget + { + size = { 48 48 } + + coa_dynasty_lowborn_widget = { + parentanchor = center + size = { 40 40 } + + blockoverride "icon_size" + { + size = { 28 28 } + } + } + + coa_dynasty_widget = { + size = { 40 40 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coat_of_arms_icon = { + parentanchor = center + size = { 28 28 } + coat_of_arms = "[Dynasty.GetDynastyCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Dynasty.GetDynastyCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "[Dynasty.GetCulture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Dynasty.GetCulture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Dynasty.GetCulture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + size = { 48 48 } + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + } + } + } + + type coa_dynasty_small = widget + { + size = { 72 72 } + + coa_dynasty_lowborn_widget = { + parentanchor = center + size = { 56 56 } + blockoverride "icon_size" + { + size = { 44 44 } + } + } + + coa_dynasty_widget = { + size = { 56 56 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coat_of_arms_icon = { + parentanchor = center + size = { 44 44 } + coat_of_arms = "[Dynasty.GetDynastyCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Dynasty.GetDynastyCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[Dynasty.GetCulture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Dynasty.GetCulture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Dynasty.GetCulture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + size = { 64 64 } + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + } + } + } + + type coa_dynasty_medium = widget + { + size = { 96 96 } + + coa_dynasty_lowborn_widget = { + parentanchor = center + size = { 80 80 } + blockoverride "icon_size" + { + size = { 64 64 } + } + } + + coa_dynasty_widget = { + size = { 80 80 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coat_of_arms_icon = { + parentanchor = center + size = { 72 72 } + coat_of_arms = "[Dynasty.GetDynastyCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Dynasty.GetDynastyCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[Dynasty.GetCulture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Dynasty.GetCulture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Dynasty.GetCulture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + size = { 96 96 } + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + } + } + } + + type coa_dynasty_big = widget + { + size = { 128 128 } + + coa_dynasty_lowborn_widget = { + parentanchor = center + size = { 112 112 } + blockoverride "icon_size" + { + size = { 88 88 } + } + } + + coa_dynasty_widget = { + size = { 112 112 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coat_of_arms_icon = { + parentanchor = center + size = { 88 88 } + coat_of_arms = "[Dynasty.GetDynastyCoA.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[Dynasty.GetDynastyCoA.GetSlot('(int32)172','(int32)172')]" + coat_of_arms_mask = "[Dynasty.GetCulture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Dynasty.GetCulture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Dynasty.GetCulture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + size = { 128 128 } + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + } + } + } + + type coa_dynasty_huge = widget + { + size = { 172 172 } + + coa_dynasty_lowborn_widget = { + parentanchor = center + size = { 156 156 } + blockoverride "icon_size" + { + size = { 112 112 } + } + } + + coa_dynasty_widget = { + parentanchor = center + size = { 152 152 } + using = CoA_Dynasty_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 120 120 } + coat_of_arms = "[Dynasty.GetDynastyCoA.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[Dynasty.GetDynastyCoA.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "[Dynasty.GetCulture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Dynasty.GetCulture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Dynasty.GetCulture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + size = { 172 172 } + } + } + } + + type coa_dynasty_frame = highlight_icon { + name = "house_frame" + parentanchor = center + + block "coa_dynasty_frame_size" {} + + block "frame_override" + { + frame = "[Dynasty.GetPrestigeFrame]" + } + texture = "[Dynasty.GetCulture.GetCultureDynastyCoAFrame]" + framesize = { 160 160 } + size = { 172 172 } + } + + #################################### + ############### HOUSE ############## + #################################### + + type coa_house_widget = button_group + { + layoutpolicy_horizontal = expanding + visible = "[DynastyHouse.IsValid]" + } + + + ## House relation icon + # + # Show the House Relation level between the players house, + # and this house. + # + type icon_house_relation = icon { + visible = "[DynastyHouse.HasHouseRelationWith( GetPlayer.GetHouse )]" + size = { 16 16 } + + texture = "[DynastyHouse.GetHouseRelationWith( GetPlayer.GetHouse ).GetLevel.GetFlatIcon]" + } + + + type coa_house_lowborn_widget = widget + { + layoutpolicy_horizontal = shrinking + visible = "[Not( DynastyHouse.IsValid )]" + coa_lowborn_icon = {} + } + + type coa_house_tiny = widget + { + size = { 48 48 } + + hbox = { + margin = { 4 4 } + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 40 40 } + + blockoverride "icon_size" + { + size = { 28 28 } + } + } + + coa_house_widget = { + size = { 40 40 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 28 28 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + size = { 40 40 } + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + } + } + } + } + + type coa_house_microscopic = widget + { + size = { 24 24 } + + hbox = { + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 18 18 } + blockoverride "icon_size" + { + size = { 16 16 } + } + } + + coa_house_widget = { + size = { 24 24 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 16 16 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + size = { 24 24 } + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + } + } + } + } + type coa_house_small = widget + { + size = { 64 64 } + + hbox = { + margin = { 4 4 } + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 56 56 } + blockoverride "icon_size" + { + size = { 44 44 } + } + } + + coa_house_widget = { + size = { 56 56 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 44 44 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + size = { 56 56 } + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + } + } + } + } + + type coa_house_medium = widget + { + size = { 88 88 } + + hbox = { + margin = { 4 4 } + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 80 80 } + blockoverride "icon_size" + { + size = { 64 64 } + } + } + + coa_house_widget = { + size = { 80 80 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + size = { 80 80 } + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + } + } + } + } + + type coa_house_big = widget + { + size = { 120 120 } + + hbox = { + margin = { 3 5 } + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 112 112 } + blockoverride "icon_size" + { + size = { 86 86 } + } + } + + coa_house_widget = { + size = { 112 112 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 86 86 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)172','(int32)172')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + size = { 112 112 } + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + } + } + } + } + + type coa_house_huge = widget + { + size = { 160 160 } + + hbox = { + margin = { 3 5 } + + block "culture_template_data_datacontext" + { + datacontext = "[DynastyHouse.GetCulture.GetTemplateData]" + } + + coa_house_lowborn_widget = { + size = { 156 156 } + blockoverride "icon_size" + { + size = { 120 120 } + } + } + + coa_house_widget = { + size = { 156 156 } + using = CoA_House_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 120 120 } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "[CultureTemplateData.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[CultureTemplateData.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[CultureTemplateData.GetCultureHouseCoAScale]" + + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + size = { 156 156 } + } + + block "house_relation_icon" + { + icon_house_relation = { + parentanchor = left|bottom + position = { 16 -16 } + size = { 32 32 } + } + } + } + } + } + + # Frame used at the front of all House CoAs + type coa_house_frame = highlight_icon { + name = "house_frame" + parentanchor = center + + block "frame_override" + { + frame = "[DynastyHouse.GetDynasty.GetPrestigeFrame]" + } + + texture = "[CultureTemplateData.GetCultureHouseCoAFrame]" + framesize = { 160 160 } + size = { 156 156 } + } + + #################################### + ########## CONFEDERATION ########### + #################################### + + type coa_confederation_frame = icon { + name = "coa_confederation_frame" + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_86.dds" + } + + type coa_confederation_tiny = button_group { + visible = "[Confederation.IsValid]" + using = CoA_Confederation_Defaults + + widget = { + parentanchor = hcenter + size = { 36 36 } + + coat_of_arms_icon = { + parentanchor = center + size = { 28 28 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_44.dds" + size = { 36 36 } + } + } + } + } + + type coa_confederation_microscopic = button_group { + visible = "[Confederation.IsValid]" + size = { 24 24 } + + using = CoA_Confederation_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 18 18 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + size = { 18 18 } + } + } + } + + type coa_confederation_small = button_group { + visible = "[Confederation.IsValid]" + size = { 52 52 } + + using = CoA_Confederation_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 44 44 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_44.dds" + size = { 52 52 } + } + } + } + + type coa_confederation_medium = button_group { + visible = "[Confederation.IsValid]" + size = { 72 72 } + + using = CoA_Confederation_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 62 62 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_62.dds" + size = { 72 72 } + } + } + } + + type coa_confederation_big = button_group { + visible = "[Confederation.IsValid]" + size = { 96 96 } + + using = CoA_Confederation_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 86 86 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)172','(int32)172')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_86.dds" + size = { 96 96 } + } + } + } + + type coa_confederation_huge = button_group { + visible = "[Confederation.IsValid]" + size = { 115 115 } + + using = CoA_Confederation_Defaults + + coat_of_arms_icon = { + parentanchor = center + size = { 115 115 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + block "glow" { + using = CoA_Confederation_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_confederation_frame = { + parentanchor = center + size = { 115 115 } + } + } + } + + type coa_bloc_microscopic = button_group { + visible = "[Confederation.IsValid]" + size = { 24 24 } + + using = CoA_Confederation_Defaults + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/frames/bloc_frame.dds" + size = { 24 24 } + position = { 2 0 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 24 24 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/frames/bloc_frame_mask.dds" + coat_of_arms_offset = { -0.02 -0.01 } + coat_of_arms_scale = { 0.8 0.8 } + + block "glow" { + using = CoA_Bloc_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + + type coa_bloc_tiny = button_group { + visible = "[Confederation.IsValid]" + size = { 36 36 } + + using = CoA_Confederation_Defaults + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/frames/bloc_frame.dds" + size = { 36 36 } + position = { 2 0 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 36 36 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/frames/bloc_frame_mask.dds" + coat_of_arms_offset = { -0.02 -0.01 } + coat_of_arms_scale = { 0.8 0.8 } + + block "glow" { + using = CoA_Bloc_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + + type coa_bloc_small = button_group { + visible = "[Confederation.IsValid]" + size = { 52 52 } + + using = CoA_Confederation_Defaults + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/frames/bloc_frame.dds" + size = { 52 52 } + position = { 2 0 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 52 52 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/frames/bloc_frame_mask.dds" + coat_of_arms_offset = { -0.02 -0.01 } + coat_of_arms_scale = { 0.8 0.8 } + + block "glow" { + using = CoA_Bloc_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + + type coa_bloc_medium = button_group { + visible = "[Confederation.IsValid]" + size = { 72 72 } + + using = CoA_Confederation_Defaults + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/frames/bloc_frame.dds" + size = { 72 72 } + position = { 2 0 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 72 72 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/frames/bloc_frame_mask.dds" + coat_of_arms_offset = { -0.02 -0.01 } + coat_of_arms_scale = { 0.8 0.8 } + + block "glow" { + using = CoA_Bloc_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + + type coa_bloc_big = button_group { + visible = "[Confederation.IsValid]" + size = { 96 96 } + + using = CoA_Confederation_Defaults + + coa_confederation_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/frames/bloc_frame.dds" + size = { 86 86 } + position = { 2 0 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 86 86 } + coat_of_arms = "[Confederation.GetConfederationCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[Confederation.GetConfederationCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/frames/bloc_frame_mask.dds" + coat_of_arms_offset = { -0.02 -0.01 } + coat_of_arms_scale = { 0.8 0.8 } + + block "glow" { + using = CoA_Bloc_Hover_Glow + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + + #################################### + ############# SAVEGAME ############# + #################################### + + type coa_savegame = button_group { + alwaystransparent = yes + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_44.dds" + frame = "[SaveGameItem.GetPlayerTier]" + framesize = { 52 32 } + } + + widget = { + size = { 52 52 } + + coa_realm_shadow = { + texture = "[SaveGameItem.GetPlayerGovernment.GetRealmFrameShadow('(int32)44')]" + size = { 52 52 } + framesize = { 52 52 } + frame = 1 + } + + coat_of_arms_icon = { + parentanchor = center + size = { 52 52 } + coat_of_arms = "[SaveGameItem.GetCoatOfArms.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[SaveGameItem.GetCoatOfArms.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[SaveGameItem.GetPlayerGovernment.GetRealmMask]" + coat_of_arms_offset = "[SaveGameItem.GetPlayerGovernment.GetRealmMaskOffset]" + coat_of_arms_scale = "[SaveGameItem.GetPlayerGovernment.GetRealmMaskScale]" + + modify_texture = { + texture = "[SaveGameItem.GetPlayerGovernment.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[SaveGameItem.GetPlayerGovernment.GetRealmFrame('(int32)44')]" + frame = "[SaveGameItem.GetPlayerTier]" + framesize = { 52 52 } + size = { 52 52 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_44.dds" + frame = "[SaveGameItem.GetPlayerTier]" + framesize = { 52 52 } + position = { 0 -7 } + size = { 52 52 } + } + } + } + } + } + + type coa_savegame_house = container { + + coat_of_arms_icon = { + size = { 44 44 } + parentanchor = center + coat_of_arms = "[SaveGameItem.GetHouseCoatOfArms.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[SaveGameItem.GetHouseCoatOfArms.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[SaveGameItem.GetSaveGameItemHouseCoAMask]" + coat_of_arms_offset = "[SaveGameItem.GetSaveGameItemHouseCoAOffset]" + coat_of_arms_scale = "[SaveGameItem.GetSaveGameItemHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = 0.4 + } + } + + coa_house_frame = { + size = { 56 56 } + parentanchor = center + frame = "[SaveGameItem.GetDynastyFrame]" + texture = "[SaveGameItem.GetSaveGameItemHouseCoAFrame]" + } + } + + #################################### + ############# BOOKMARK ############# + #################################### + + type coa_dynasty_bookmark = button_group { + + block "character" { + onclick = "[GameSetup.SetSelectedCharacter( BookmarkCharacter.Self )]" + } + + tooltip = "BOOKMARK_DYNASTY_OR_HOUSE_TOOLTIP" + + flowcontainer = { + margin = { 3 0 } + margin_top = 5 + + widget = { + size = { 56 56 } + + # Dynasty CoA and frame + coat_of_arms_icon = { + visible = "[Not( BookmarkCharacter.HasDynastyHouse )]" + parentanchor = center + size = { 44 44 } + coat_of_arms = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateDynastyCoAMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateDynastyCoAOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + } + } + + coa_house_frame = { + visible = "[Not( BookmarkCharacter.HasDynastyHouse )]" + blockoverride "frame_override" + { + frame = "[BookmarkCharacter.GetDynastySplendorFrame]" + } + size = { 56 56 } + texture = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateDynastyCoAFrame]" + } + + # House CoA and frame + coat_of_arms_icon = { + visible = "[BookmarkCharacter.HasDynastyHouse]" + parentanchor = center + size = { 48 52 } + coat_of_arms = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetSlot('(int32)88','(int32)88')]" + coat_of_arms_mask = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCultureTemplate.GetCultureTemplateHouseCoAMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateHouseCoAOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateHouseCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + } + } + + coa_house_frame = { + visible = "[BookmarkCharacter.HasDynastyHouse]" + blockoverride "frame_override" + { + frame = "[BookmarkCharacter.GetDynastySplendorFrame]" + } + size = { 56 56 } + texture = "[BookmarkCharacter.GetDynastyTemplate.GetCultureTemplate.GetCultureTemplateHouseCoAFrame]" + } + } + } + } + + type coa_realm_bookmark = container { + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 3 + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_62.dds" + frame = "[BookmarkCharacter.GetTier]" + framesize = { 64 40 } + } + + widget = { + size = { 64 64 } + + coa_realm_shadow = { + parentanchor = center + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrameShadow('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + frame = 1 + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + + coat_of_arms = "[BookmarkCharacter.GetLandedTitleTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetLandedTitleTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + frame = 1 + framesize = { 64 64 } + inherit_visual_state = no + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + position = { 0 -8 } + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + } + } + } + } + } + + type coa_clan_bookmark = container { + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 3 + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_62.dds" + frame = "[BookmarkCharacter.GetTier]" + framesize = { 64 40 } + } + + widget = { + size = { 64 64 } + + coa_realm_shadow = { + parentanchor = center + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrameShadow('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + frame = 1 + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + visible = "[Not(BookmarkCharacter.HasDynastyHouse)]" + + coat_of_arms = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + frame = 1 + inherit_visual_state = no + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + position = { 0 -8 } + } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + visible = "[BookmarkCharacter.HasDynastyHouse]" + + coat_of_arms = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + inherit_visual_state = no + frame = 1 + framesize = { 64 64 } + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + position = { 0 -8 } + } + } + } + } + } + + type coa_admin_nodlc_bookmark = container { + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 3 + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_62.dds" + frame = "[BookmarkCharacter.GetTier]" + framesize = { 64 40 } + } + + widget = { + size = { 64 64 } + + coa_realm_shadow = { + parentanchor = center + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrameShadow('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + frame = 1 + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + + coat_of_arms = "[BookmarkCharacter.GetLandedTitleTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetLandedTitleTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[GetGovernment('feudal_government').GetRealmMask]" + coat_of_arms_offset = "[GetGovernment('feudal_government').GetRealmMaskOffset]" + coat_of_arms_scale = "[GetGovernment('feudal_government').GetRealmMaskScale]" + + modify_texture = { + texture = "[GetGovernment('feudal_government').GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[GetGovernment('feudal_government').GetRealmFrame('(int32)62')]" + size = { 64 64 } + inherit_visual_state = no + frame = 1 + framesize = { 64 64 } + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + position = { 0 -2 } + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + } + } + } + } + } + + type coa_adventurer_bookmark = container { + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = 4 + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_adventurer_topframe_62.dds" + size = { 62 30 } + } + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/landless_minority_government_topframe_62.dds" + size = { 62 30 } + } + widget = { + size = { 64 64 } + + coa_realm_shadow = { + parentanchor = center + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrameShadow('(int32)62')]" + size = { 64 64 } + framesize = { 64 64 } + frame = 1 + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + visible = "[Not(BookmarkCharacter.HasDynastyHouse)]" + + coat_of_arms = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + inherit_visual_state = no + frame = 1 + framesize = { 64 64 } + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + position = { 0 -8 } + } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 64 64 } + alwaystransparent = yes + visible = "[BookmarkCharacter.HasDynastyHouse]" + + coat_of_arms = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[BookmarkCharacter.GetDynastyHouseTemplate.GetCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + coat_of_arms_offset = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskOffset]" + coat_of_arms_scale = "[BookmarkCharacter.GetGovernmentType.GetRealmMaskScale]" + + modify_texture = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmMask]" + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + texture = "[BookmarkCharacter.GetGovernmentType.GetRealmFrame('(int32)62')]" + size = { 64 64 } + inherit_visual_state = no + frame = 1 + framesize = { 64 64 } + } + + coa_realm_topframe = { + inherit_visual_state = no + texture ="gfx/interface/coat_of_arms/topframe_62.dds" + framesize = { 64 64 } + size = { 64 64 } + frame = "[BookmarkCharacter.GetTier]" + position = { 0 -8 } + } + } + } + } + } + + ######################################### + ######### COAT OF ARMS DESIGNER ######### + ######################################### + # These widgets require a "CoatOfArms" datacontext (CCoatOfArmsSprite in code) + + # modelled after coa_realm_huge_crown + type coa_preview_realm_huge_crown = button_group { + alwaystransparent = yes + + flowcontainer = { + direction = vertical + ignoreinvisible = yes + spacing = -2 + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_115.dds" + + block "frame_override" + { + frame = 2 + } + framesize = { 128 80 } + + block "crown" + { + visible = yes + } + } + + icon = { + name = "mercenary" + + block "mercenary_visible" + { + visible = no + } + + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/mercenary_topframe_115.dds" + } + + icon = { + name = "holy_order" + + block "holy_order_visible" + { + visible = no + } + + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/holyorder_topframe_115.dds" + } + + widget = { + parentanchor = hcenter + size = { 128 128 } + + coa_realm_shadow = { + parentanchor = center + texture = "gfx/interface/icons/realm_frames/_default_115_shadow.dds" + size = { 128 128 } + } + + coat_of_arms_icon = { + parentanchor = center + size = { 128 128 } + coat_of_arms = "[CoatOfArms.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)230','(int32)230')]" + + block "coa_icon_additions" {} + + block "coat_of_arms_mask" + { + coat_of_arms_mask = "gfx/interface/icons/realm_frames/_default_mask.dds" + coat_of_arms_offset = { 0.0 0.07 } + coat_of_arms_scale = { 0.9 0.9 } + } + + modify_texture = { + block "realm_mask_texture" + { + texture = "gfx/interface/icons/realm_frames/_default_mask.dds" + } + blend_mode = overlay + alpha = @overlay_alpha + } + + coa_realm_overlay = { + block "realm_frame_texture" + { + texture = "gfx/interface/icons/realm_frames/_default_115_frame.dds" + } + size = { 128 128 } + } + + coa_realm_topframe = { + texture ="gfx/interface/coat_of_arms/topframe_115.dds" + block "frame_override" + { + frame = 2 + } + size = { 128 128 } + framesize = { 128 128 } + position = { 0 -12} + } + } + } + } + } + + # modelled after coa_title_big_crown + type coa_preview_title_big_crown = button_group { + alwaystransparent = yes + + flowcontainer = { + margin = { 3 7 } + direction = vertical + spacing = -3 + ignoreinvisible = yes + + icon = { + name = "crown" + parentanchor = hcenter + texture = "gfx/interface/coat_of_arms/crown_strip_115.dds" + block "frame_override" + { + frame = 2 + } + framesize = { 128 80 } + + block "crown" + { + visible = yes + } + } + + widget = { + parentanchor = hcenter + size = { 96 96 } + + coat_of_arms_icon = { + parentanchor = center + size = { 86 86 } + coat_of_arms = "[CoatOfArms.GetTexture('(int32)172','(int32)172')]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)172','(int32)172')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + coa_title_frame = { + texture = "gfx/interface/coat_of_arms/title_86.dds" + size = { 96 96 } + alwaystransparent = yes + } + } + } + } + } + + # modelled after coa_title_tiny + type coa_preview_title_tiny = button_group { + alwaystransparent = yes + + flowcontainer = { + margin = { 3 7 } + direction = vertical + spacing = -4 + ignoreinvisible = yes + + spacer = { + name = "crown" + size = { 18 12 } + visible = no + } + + widget = { + parentanchor = hcenter + size = { 36 35 } + + coat_of_arms_icon = { + parentanchor = center + size = { 28 28 } + coat_of_arms = "[CoatOfArms.GetTexture('(int32)56','(int32)56')]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)56','(int32)56')]" + coat_of_arms_mask = "gfx/interface/coat_of_arms/title_mask.dds" + coat_of_arms_offset = "[DefaultCoATitleMaskOffset]" + coat_of_arms_scale = "[DefaultCoATitleMaskScale]" + + coa_title_frame = { + parentanchor = center + texture = "gfx/interface/coat_of_arms/title_28.dds" + size = { 34 34 } + } + } + } + } + } + + # modelled after coa_dynasty_huge + type coa_preview_dynasty_huge = widget + { + size = { 172 172 } + + #block "coa_widget_size" + + button_group = { + parentanchor = center + size = { 156 156 } + alwaystransparent = yes + + coat_of_arms_icon = { + parentanchor = center + size = { 128 128 } + coat_of_arms = "[CoatOfArms.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "[Culture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Culture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Culture.GetCultureDynastyCoAScale]" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_dynasty_frame = { + texture = "[Culture.GetCultureDynastyCoAFrame]" + size = { 172 172 } + alwaystransparent = yes + + #block "coa_frame_size" {} + + blockoverride "frame_override" + { + frame = 2 + } + } + } + } + + # modelled after coa_house_huge + type coa_preview_house_huge = widget + { + size = { 160 160 } + + hbox = { + margin = { 4 4 } + + coa_house_widget = { + visible = yes + size = { 156 156 } + alwaystransparent = yes + + coat_of_arms_icon = { + parentanchor = center + size = { 120 120 } + coat_of_arms = "[CoatOfArms.GetTexture('(int32)230','(int32)230')]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)230','(int32)230')]" + coat_of_arms_mask = "[Culture.GetCultureHouseCoAMask]" + coat_of_arms_offset = "[Culture.GetCultureHouseCoAOffset]" + coat_of_arms_scale = "[Culture.GetCultureHouseCoAScale]" + alwaystransparent = yes + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + + coa_house_frame = { + texture = "[Culture.GetCultureHouseCoAFrame]" + size = { 156 156 } + alwaystransparent = yes + + blockoverride "frame_override" + { + frame = 2 + } + } + } + } + } + + #################################### + ######### CULTURE PREVIEW ########## + #################################### + + type coa_hybridize_window = widget + { + size = { 128 128 } + + button_group = { + size = { 84 84 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coat_of_arms_icon = { + parentanchor = center + using = Mask_Rough_Edges + + size = { 84 84 } + coat_of_arms = "[DesignerCoA.GetCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[DesignerCoA.GetCoA.GetSlot('(int32)124','(int32)124')]" + block "mask" + { + coat_of_arms_mask = "[Culture.GetCultureDynastyCoAMask]" + coat_of_arms_offset = "[Culture.GetCultureDynastyCoAOffset]" + coat_of_arms_scale = "[Culture.GetCultureDynastyCoAScale]" + } + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + + } + + block "frame" + { + coa_dynasty_frame = { + size = { 128 128 } + texture = "[Culture.GetCultureDynastyCoAFrame]" + } + } + } + } + + type coa_hybridize_frame_preview = widget + { + size = { 128 128 } + + button_group = { + size = { 84 84 } + using = CoA_Dynasty_Defaults + parentanchor = center + + coa_dynasty_frame = { + size = { 128 128 } + texture = "[Culture.GetCultureDynastyCoAFrame]" + } + } + } + + ##### Sigil Coat of Arms + type coa_character_sigil = widget + { + block "size" + { + size = { 45 30 } + } + + widget = { + parentanchor = center + + icon = { + name = "sigil_bg" + texture = "gfx/interface/skinned/window_letter/sigil_bg.dds" + alwaystransparent = yes + parentanchor = center + + block "size" + { + size = { 50 50 } + } + } + + icon = { + name = "sigil" + visible = "[Character.HasSealCoA]" + gfxtype = coatofarmsgfx + shaderfile = "gfx/FX/gui_coatofarms.shader" + effectname = PdxGuiSeal + alwaystransparent = yes + datacontext = "[Character.GetSealCoA]" + coat_of_arms_slot = "[CoatOfArms.GetSlot('(int32)88','(int32)88')]" + coat_of_arms = "[CoatOfArms.GetTexture('(int32)88','(int32)88')]" + coat_of_arms_mask = "gfx/interface/skinned/window_letter/sigil_center.dds" + parentanchor = center + + block "sigil_size" + { + size = { 34 34 } + } + } + + icon = { + name = "sigil_lowborn" + visible = "[Not( Character.HasSealCoA )]" + texture = "gfx/interface/skinned/window_letter/sigil_center_lowborn.dds" + alwaystransparent = yes + parentanchor = center + + block "sigil_size" + { + size = { 34 34 } + } + } + } + + coa_house_widget = { + using = CoA_House_Defaults + visible = "[Character.HasSealCoA]" + datacontext = "[Character.GetHouse]" + parentanchor = center + + block "sigil_size" + { + size = { 34 34 } + } + + coat_of_arms_icon = { + parentanchor = center + block "sigil_size" + { + size = { 34 34 } + } + coat_of_arms = "[DynastyHouse.GetHouseCoA.GetTexture('(int32)124','(int32)124')]" + coat_of_arms_slot = "[DynastyHouse.GetHouseCoA.GetSlot('(int32)124','(int32)124')]" + coat_of_arms_mask = "gfx/interface/skinned/window_letter/asia_house_mask.dds" + + modify_texture = { + texture = "gfx/interface/coat_of_arms/coa_overlay.dds" + blend_mode = overlay + alpha = @overlay_alpha + } + } + } + } +} + +###################################################### +##################### TEMPLATES ###################### +###################################################### + +## Default values for Title CoA buttons +template CoA_Title_Defaults +{ + block "coa_button" + { + block "coa_tooltip" + { + tooltipwidget = { + using = LandedTitleTooltip + } + } + block "coa_onclick" + { + onclick = "[DefaultOnCoatOfArmsClick(Title.GetID)]" + onrightclick = "[DefaultOnCoatOfArmsRightClick(Title.GetID)]" + button_ignore = none + } + } + using = State_Title_MouseEntry +} + +template CoA_Title_Hover_Glow +{ + glow = { + block "coa_hover_glow_visible" + { + visible = "[Title.IsHovered]" + } + using = Color_Bright_Yellow + glow_radius = 8 + + glow_generation_rules = { + glow_alpha_mask = 0 + glow_blur_passes = 10 + glow_texture_downscale = 2.5f + glow_ignore_inside_pixels = yes + } + } + + using = Animation_Glow_Pulse +} + +template CoA_Realm_Hover_Glow +{ + glow = { + block "coa_hover_glow_visible" + { + visible = "[Character.IsHovered]" + } + using = Color_Bright_Yellow + glow_radius = 4 + + glow_generation_rules = { + glow_alpha_mask = 0 + glow_blur_passes = 5 + glow_texture_downscale = 2.5f + glow_ignore_inside_pixels = yes + } + } + + using = Animation_Glow_Pulse +} + +template CoA_Confederation_Hover_Glow +{ + glow = { + block "coa_hover_glow_visible" + { + visible = "[Confederation.IsHovered]" + } + using = Color_Bright_Yellow + glow_radius = 8 + + glow_generation_rules = { + glow_alpha_mask = 0 + glow_blur_passes = 10 + glow_texture_downscale = 2.5f + glow_ignore_inside_pixels = yes + } + } + + using = Animation_Glow_Pulse +} + +template CoA_Bloc_Hover_Glow +{ + glow = { + block "coa_hover_glow_visible" + { + visible = "[Confederation.IsHovered]" + } + using = Color_Bright_Yellow + glow_radius = 4 + + glow_generation_rules = { + glow_alpha_mask = 0 + glow_blur_passes = 10 + glow_texture_downscale = 2.5f + glow_ignore_inside_pixels = yes + } + } + + using = Animation_Glow_Pulse +} + + +## Default values for Realm CoA buttons +template CoA_Realm_Defaults +{ + block "coa_button" + { + tooltip = "[Character.GetDefaultRealmFlagTooltip]" + onclick = "[DefaultOnRealmFlagClick(Character.GetID)]" + onrightclick = "[DefaultOnCharacterRightClick(Character.GetID)]" + button_ignore = none + tooltip_visible = "[Not(IsInteractionMenuOpenForCharacter(Character.GetID))]" + } + + block "coa_realm_mouse_entry" + { + using = State_Realm_MouseEntry + } +} + +## Default values for Dynasty CoA buttons +template CoA_Dynasty_Defaults +{ + block "coa_button" + { + block "coa_tooltip" + { + tooltipwidget = { + using = DynastyTooltip + } + } + block "OnClickDefault" + { + onclick = "[DefaultOnDynastyCoatOfArmsClick(Dynasty.GetID)]" + } + } +} + +## Default values for House CoA buttons +template CoA_House_Defaults +{ + block "coa_button" + { + block "coa_tooltip" + { + tooltipwidget = { + using = dynasty_house_tooltip + } + } + onclick = "[DefaultOnHouseCoatOfArmsClick(DynastyHouse.GetID)]" + } +} + +## Default values for Confederation CoA buttons +template CoA_Confederation_Defaults +{ + block "coa_button" + { + block "coa_tooltip" + { + } + } + using = Confederation_Mouse_Entry +} diff --git a/gui/texticons.gui b/gui/texticons.gui index b9144e41..5082094a 100644 --- a/gui/texticons.gui +++ b/gui/texticons.gui @@ -4624,6 +4624,16 @@ texticon = { } } +texticon = { + icon = government_type_landless_minority + iconsize = { + texture = "gfx/interface/icons/government_types/landless_minority_government.dds" + size = { 28 28 } + offset = { 0 6 } + fontsize = 16 + } +} + texticon = { icon = government_type_celestial iconsize = { diff --git a/history/characters/NEOW_e_britannia.txt b/history/characters/NEOW_e_britannia.txt index d405ba2c..7781bf53 100644 --- a/history/characters/NEOW_e_britannia.txt +++ b/history/characters/NEOW_e_britannia.txt @@ -1192,6 +1192,19 @@ britannia_tabb_ian = { } } +brit_test_jewish = { + name = "Aaron" + dynasty = kohn_dynasty + religion = "congregationist" + culture = ashkenazi + trait = education_diplomacy_4 + 2514.8.11 = { + birth = yes + } + 2600.1.1 = { + death = yes + } +} britannia_aurelian_ambrose = { name = "Ambrose" dynasty = dynn_britannia_aurelian diff --git a/history/titles/NEOW_laamp_titles.txt b/history/titles/NEOW_laamp_titles.txt index 8807e0ac..ac1ce3a8 100644 --- a/history/titles/NEOW_laamp_titles.txt +++ b/history/titles/NEOW_laamp_titles.txt @@ -12,6 +12,19 @@ # } #} +d_laamp_test_jewish = { # Saltpites + 2555.1.1 = { + liege = 0 + holder = brit_test_jewish + government = landless_minority_government + succession_laws = { confederate_partition_succession_law } + effect = { + create_landless_minority_title_history_effect = yes + set_variable = { name = adventurer_creation_reason value = flag:historical } + destroy_landless_title_no_dlc_effect = { DATE = 2555.1.1 } + } + } +} d_laamp_zolt = { # Saltpites 2555.1.1 = { liege = 0 diff --git a/localization/english/replace/NEOW_Domicile_l_english.yml b/localization/english/replace/NEOW_Domicile_l_english.yml new file mode 100644 index 00000000..5801d669 --- /dev/null +++ b/localization/english/replace/NEOW_Domicile_l_english.yml @@ -0,0 +1,316 @@ +l_english: + + landless_minority_government: "Minority Community Leader" + landless_minority_government_with_icon: "@government_type_landless_minority! $landless_minority_government$" + landless_minority_government_adjective: "Minority Community" + landless_minority_government_realm: "Minority Community" + landless_minority_government_desc: "\n$game_concept_minority_government_desc$" + conditional_maa_refill_rule: "only [reinforce_soldiers|E] troops" + mercenary_rule: "be hired to serve as [mercenaries|E] by [landed|E] [rulers|E]" + adult_rulers_only: "#N May only be ruled by [adults|E]#!" + game_concept_minority_government: "Minority Community Leader" + game_concept_minority_government_desc: "A $Minority Community Leader$ is an [unlanded|E] [character|E] who leads a [minority_community|E]." + game_concept_minority_community: "Minority Community" + game_concept_minority_community_desc: "Minority Communities are ethnic, religious or linguistic groups who form a distinctive shared identity, often forming enclaves in urban or rural areas in the region they inhabit, which differ significantly from the surrounding majority population. These communities are not tied to land, able to move to elsewhere once a generation." + minority_community_main_01_domicile_building: "Minority Community" + minority_community_main_01_domicile_building_desc: "A Minority Community is a small culturally distinct portion of the population typically with a local community leader" + minority_community_main_02_domicile_building: "Minority Community" + minority_community_main_02_domicile_building_desc: "A Minority Community is a small culturally distinct portion of the population typically with a local community leader" + minority_community_main_03_domicile_building: "Minority Community" + minority_community_main_03_domicile_building_desc: "A Minority Community is a small culturally distinct portion of the population typically with a local community leader" + minority_community_main_04_domicile_building: "Minority Community" + minority_community_main_04_domicile_building_desc: "A Minority Community is a small culturally distinct portion of the population typically with a local community leader" + minority_community_main_05_domicile_building: "Minority Community" + minority_community_main_05_domicile_building_desc: "A Minority Community is a small culturally distinct portion of the population typically with a local community leader" + government_is_landless_minority: "Has access to a [minority_community_i|E][minority_community|E]" + government_devassalises: "Will cease to be a vassal upon the succession of a new Community Leader" + minority_community_icon_concept: "[minority_community_i|E]" + game_concept_minority_community_i: "@government_type_landless_minority!" + duchy_landless_minority_community: "Community" + duke_landless_minority_community_male_minority_community: "Master" + duke_landless_minority_community_female_minority_community: "Mistress" + spouse_landless_minority_community_male: "Master" + spouse_landless_minority_community_holder_female: "Mistress" + d_laamp_test_jewish:0 "$ashkenazi$ Community of the $dynn_britannia_kohn$'s" + d_laamp_test_jewish_adj:0 "Jewish" + d_laamp_test_jewish_article:0 "The " + minority_community_domicile_title: "[CHARACTER.GetFirstNamePossessiveNoTooltip] [minority_community_i|E][minority_community|E]" + minority_community_type: "[minority_community_i|E][minority_community|E]" + minority_community_type_tooltip: "[minority_community_i|E][minority_community|E]" + minority_community_domicile_type: "[minority_community_i|E][minority_community|E]" + minority_community_domicile_type_possessive: "Community's" + minority_community_domicile_type_tooltip: "[minority_community_i|E][minority_community|E]" + MINORITY_COMMUNITY: "[minority_community_i|E][minority_community|E]" + MINORITY_COMMUNITY_BUILDINGS: "[minority_community_i|E][minority_community_buildings|E]" + minority_community_move_desc: "#T Move Minority Community#!\nMove your [minority_community_i|E][minority_community|E] to another [barony|E] within the [realm|E].\n@alert_icon! #alert_trial You will be unable to move it again for [EmptyScope.ScriptValue('estate_move_cooldown_value')|V0] days#!\n\n#S Cost:\n#![GetCostString( DOMICILE_TYPE.GetMoveCost( Character.Self ) )]\n\n#P Click to move your $minority_community_type$#!" + MINORITY_COMMUNITY_CONCEPT: "[minority_community_i|E][minority_community|E]" + domicile_minority_community: "the [CHARACTER.GetCulture.GetNameNoTooltip] $Community$ of the [CHARACTER.GetHouse.GetNameNoTooltip]'s" + + government_is_barterer: "Enables [barter_goods_i][trading|E]" + + ep3_laamps.1030.t: "On the Move Again" + ep3_laamps.1030.desc: "My people no longer feel secure in this realm, as such we are leaving to ensure our safety.\n\nI am joined by my family and people, with varying degrees of enthusiasm for their new lives on the road.\n\n" + ep3_laamps.1030.heir: "In my stead, my [ROOT.Char.Custom2('RelationToMeShort', SCOPE.sC('laamp_inheritor'))] and heir, [laamp_inheritor.GetFirstName], has assumed my titles as the [laamp_inheritor.GetTitleAsNameNoTooltip] of [laamp_inheritor.GetPrimaryTitle.GetNameNoTierNoTooltip]." + ep3_laamps.1030.liege: "Any lands I ruled have been given to my erstwhile liege." + ep3_laamps.1030.new: "Any lands I ruled have been given to a local knight." + ep3_laamps.1030.a: "Well, what we are we waiting for?" + ep3_laamps.1032.opening: "On the Move Again" + ep3_laamps.1032.desc: "My people no longer feel secure in this realm, as such we are leaving. Good Day my Liege." + ep3_laamps.1032.a: "A bold move, some might call foolish." + become_landless_minority_decision: "Become Minority Community" + become_landless_minority_decision_desc: "My people no longer feel secure in this realm, as such we are leaving to ensure our safety." + become_landless_minority_decision_tooltip: "Abandon your [landed|E] [realm|E] and establish an [minority_community_i|E][minority_community|E]" + become_landless_minority_decision_confirm: "On the Move Again" + become_landless_minority_decision_hof_tt: "You must not be a [head_of_faith|E]" + become_landless_minority_decision_tier_tt: "You must be a [count|E] or [duke|E]" + become_landless_minority_decision_domain_size_tt: "Your [domain|E] must be no larger than #V 3#! [counties|E]" + become_landless_minority_decision_title_scope_tt: "#negative_value All your [landed|E] [titles|E] and [vassals|E] pass to [THIS.Char.GetName]#!" + become_landless_minority_decision_title_created_tt: "#negative_value All your [landed|E] [titles|E] pass to a new local [ruler|E]#!" + minority_name: "[new_landless_minority.GetCulture.GetName] Community of the [new_landless_minority.GetDynasty.GetName]'s" + laamp_become_minority_tt: "#mixed_value #BER [THIS.Char.GetShortUIName|U] will establish an $Minority Community$" + landless_can_be_vassalised:: "Can be vassalised but not converted by landed powers and serve on their councils." + + headmans_croft_01_domicile_building: "Headman's Croft" + headmans_croft_01_domicile_building_desc: "The Leader of a Minority Community will typically have a residence of their own." + headmans_croft_02_domicile_building: "Headman's Croft" + headmans_croft_02_domicile_building_desc: "The Leader of a Minority Community will typically have a residence of their own." + headmans_croft_03_domicile_building: "Headman's Croft" + headmans_croft_03_domicile_building_desc: "The Leader of a Minority Community will typically have a residence of their own." + headmans_croft_04_domicile_building: "Headman's Croft" + headmans_croft_04_domicile_building_desc: "The Leader of a Minority Community will typically have a residence of their own." + village_training_yard_01_domicile_building: "Village Training Yard" + village_training_yard_01_domicile_building_desc: "A yard set out for individual combat training so one might defend oneself in personal combat." + village_training_yard_02_domicile_building: "Village Training Yard" + village_training_yard_02_domicile_building_desc: "A yard set out for individual combat training so one might defend oneself in personal combat." + village_training_yard_03_domicile_building: "Village Training Yard" + village_training_yard_03_domicile_building_desc: "A yard set out for individual combat training so one might defend oneself in personal combat." + village_training_yard_04_domicile_building: "Village Training Yard" + village_training_yard_04_domicile_building_desc: "A yard set out for individual combat training so one might defend oneself in personal combat." + contracts_office_01_domicile_building: "Contracts Office" + contracts_office_01_domicile_building_desc: "An Office for Managing any contracts members of our community are hired for." + contracts_office_02_domicile_building: "Contracts Office" + contracts_office_02_domicile_building_desc: "An Office for Managing any contracts members of our community are hired for." + contracts_office_03_domicile_building: "Contracts Office" + contracts_office_03_domicile_building_desc: "An Office for Managing any contracts members of our community are hired for." + contracts_office_04_domicile_building: "Contracts Office" + contracts_office_04_domicile_building_desc: "An Office for Managing any contracts members of our community are hired for." + local_criminal_contacts_01_domicile_building: "Local Criminal Contracts" + local_criminal_contacts_01_domicile_building_desc: "Sometimes the best way to stay safe in a locality is to ingraciate yourself with its criminal element." + local_criminal_contacts_02_domicile_building: "Local Criminal Contracts" + local_criminal_contacts_02_domicile_building_desc: "Sometimes the best way to stay safe in a locality is to ingraciate yourself with its criminal element." + local_criminal_contacts_03_domicile_building: "Local Criminal Contracts" + local_criminal_contacts_03_domicile_building_desc: "Sometimes the best way to stay safe in a locality is to ingraciate yourself with its criminal element." + local_criminal_contacts_04_domicile_building: "Local Criminal Contracts" + local_criminal_contacts_04_domicile_building_desc: "Sometimes the best way to stay safe in a locality is to ingraciate yourself with its criminal element." + minority_comm_library_01_domicile_building: "Library" + minority_comm_library_01_domicile_building_desc: "A small library containing what few records and books our community owns." + minority_comm_library_02_domicile_building: "Library" + minority_comm_library_02_domicile_building_desc: "A small library containing what few records and books our community owns." + minority_comm_library_education_03_domicile_building: "School" + minority_comm_library_education_03_domicile_building_desc: "A small school for teaching the members of our village basic common knowledge before they learn a trade." + minority_comm_library_education_04_domicile_building: "School" + minority_comm_library_education_04_domicile_building_desc: "A small school for teaching the members of our village basic common knowledge before they learn a trade." + communal_baths_01_domicile_building: "Communal Bathouse" + communal_baths_01_domicile_building_desc: "A communal bath so that our community may stay clean and healthy." + communal_baths_02_domicile_building: "Communal Bathouse" + communal_baths_02_domicile_building_desc: "A communal bath so that our community may stay clean and healthy." + communal_baths_03_domicile_building: "Communal Bathouse" + communal_baths_03_domicile_building_desc: "A communal bath so that our community may stay clean and healthy." + communal_baths_04_domicile_building: "Communal Bathouse" + communal_baths_04_domicile_building_desc: "A communal bath so that our community may stay clean and healthy." + guest_house_01_domicile_building: "Guest House" + guest_house_01_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + guest_house_02_domicile_building: "Guest House" + guest_house_02_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + guest_house_03_domicile_building: "Guest House" + guest_house_03_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + guest_house_04_domicile_building: "Guest House" + guest_house_04_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + guest_house_05_domicile_building: "Guest House" + guest_house_05_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + guest_house_06_domicile_building: "Guest House" + guest_house_06_domicile_building_desc: "A guest house for any visitors or travellers to reside it, we treat them well." + village_cage_01_domicile_building: "Village Cage" + village_cage_01_domicile_building_desc: "A locked building to imprison troublemakers and prisoners." + village_cage_02_domicile_building: "Village Cage" + village_cage_02_domicile_building_desc: "A locked building to imprison troublemakers and prisoners." + village_cage_03_domicile_building: "Village Cage" + village_cage_03_domicile_building_desc: "A locked building to imprison troublemakers and prisoners." + village_cage_04_domicile_building: "Village Cage" + village_cage_04_domicile_building_desc: "A locked building to imprison troublemakers and prisoners." + minority_comm_temple_small_01_domicile_building: "Small Temple" + minority_comm_temple_small_01_domicile_building_desc: "A small temple in which we give praise to our god" + minority_comm_temple_small_02_domicile_building: "Small Temple" + minority_comm_temple_small_02_domicile_building_desc: "A small temple in which we give praise to our god" + minority_comm_temple_small_03_domicile_building: "Small Temple" + minority_comm_temple_small_03_domicile_building_desc: "A small temple in which we give praise to our god" + minority_comm_temple_large_04_domicile_building: "Large Temple" + minority_comm_temple_large_04_domicile_building_desc: "A large temple in which we give praise to our god" + minority_comm_temple_large_05_domicile_building: "Large Temple" + minority_comm_temple_large_05_domicile_building_desc: "A large temple in which we give praise to our god" + minority_comm_temple_large_06_domicile_building: "Large Temple" + minority_comm_temple_large_06_domicile_building_desc: "A large temple in which we give praise to our god" + militia_barracks_01_domicile_building: "Militia Barracks" + militia_barracks_01_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + militia_barracks_02_domicile_building: "Militia Barracks" + militia_barracks_02_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + militia_barracks_03_domicile_building: "Militia Barracks" + militia_barracks_03_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + militia_barracks_04_domicile_building: "Militia Barracks" + militia_barracks_04_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + militia_barracks_05_domicile_building: "Militia Barracks" + militia_barracks_05_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + militia_barracks_06_domicile_building: "Militia Barracks" + militia_barracks_06_domicile_building_desc: "A structure in which the local militia train and store their weapons in case of attack." + village_watch_01_domicile_building: "Village Watch" + village_watch_01_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + village_watch_02_domicile_building: "Village Watch" + village_watch_02_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + village_watch_03_domicile_building: "Village Watch" + village_watch_03_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + village_watch_04_domicile_building: "Village Watch" + village_watch_04_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + village_watch_05_domicile_building: "Village Watch" + village_watch_05_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + village_watch_06_domicile_building: "Village Watch" + village_watch_06_domicile_building_desc: "The village watch ensures that bandits or raiders wont attack the village without our Militia being alerted." + communal_gardens_01_domicile_building: "Communal Gardens" + communal_gardens_01_domicile_building_desc: "Communal Gardens in which vegetables and herbs are grown for village use." + communal_gardens_02_domicile_building: "Communal Gardens" + communal_gardens_02_domicile_building_desc: "Communal Gardens in which vegetables and herbs are grown for village use." + communal_gardens_03_domicile_building: "Communal Gardens" + communal_gardens_03_domicile_building_desc: "Communal Gardens in which vegetables and herbs are grown for village use." + communal_gardens_leisure_04_domicile_building: "Flower Fields" + communal_gardens_leisure_04_domicile_building_desc: "There can be something so comforting about a field of flowers." + communal_gardens_leisure_05_domicile_building: "Flower Fields" + communal_gardens_leisure_05_domicile_building_desc: "There can be something so comforting about a field of flowers." + communal_gardens_leisure_06_domicile_building: "Flower Fields" + communal_gardens_leisure_06_domicile_building_desc: "There can be something so comforting about a field of flowers." + communal_gardens_fruit_04_domicile_building: "Fruit Orchard + communal_gardens_fruit_04_domicile_building_desc: "A few apples or pears can add a lot to a village's diet." + communal_gardens_fruit_05_domicile_building: "Fruit Orchard + communal_gardens_fruit_05_domicile_building_desc: "A few apples or pears can add a lot to a village's diet." + communal_gardens_fruit_06_domicile_building: "Fruit Orchard + communal_gardens_fruit_06_domicile_building_desc: "A few apples or pears can add a lot to a village's diet." + village_stable_01_domicile_building: "Village Stable" + village_stable_01_domicile_building_desc: "A small stable to house a few horses for distant travel or agricultural purposes." + village_stable_02_domicile_building: "Village Stable" + village_stable_02_domicile_building_desc: "A small stable to house a few horses for distant travel or agricultural purposes." + village_stable_03_domicile_building: "Village Stable" + village_stable_03_domicile_building_desc: "A small stable to house a few horses for distant travel or agricultural purposes." + village_stable_grand_04_domicile_building: "Large Village Stable" + village_stable_grand_04_domicile_building_desc: "A Large stable to house a few horses for distant travel or agricultural purposes." + village_stable_grand_05_domicile_building: "Large Village Stable" + village_stable_grand_05_domicile_building_desc: "A Large stable to house a few horses for distant travel or agricultural purposes." + village_stable_grand_06_domicile_building: "Large Village Stable" + village_stable_grand_06_domicile_building_desc: "A Large stable to house a few horses for distant travel or agricultural purposes." + village_stable_kennel_04_domicile_building: "Kennel" + village_stable_kennel_04_domicile_building_desc: "A kennel to raise hounds for assisting hunters and guarding homes." + village_stable_kennel_05_domicile_building: "Kennel" + village_stable_kennel_05_domicile_building_desc: "A kennel to raise hounds for assisting hunters and guarding homes." + village_stable_kennel_06_domicile_building: "Kennel" + village_stable_kennel_06_domicile_building_desc: "A kennel to raise hounds for assisting hunters and guarding homes." + village_workshop_01_domicile_building: "Village Workshop" + village_workshop_01_domicile_building_desc: "A workshop in which a few tradesmen ply their trades for the benefit of the village." + village_workshop_02_domicile_building: "Village Workshop" + village_workshop_02_domicile_building_desc: "A workshop in which a few tradesmen ply their trades for the benefit of the village." + village_workshop_carpenter_03_domicile_building: "Village Carpentry Workshop" + village_workshop_carpenter_03_domicile_building_desc: "A workshop in which a few carpenters ply their trade for the benefit of the village." + village_workshop_carpenter_04_domicile_building: "Village Carpentry Workshop" + village_workshop_carpenter_04_domicile_building_desc: "A workshop in which a few carpenters ply their trade for the benefit of the village." + village_workshop_carpenter_05_domicile_building: "Village Carpentry Workshop" + village_workshop_carpenter_05_domicile_building_desc: "A workshop in which a few carpenters ply their trade for the benefit of the village." + village_workshop_carpenter_06_domicile_building: "Village Carpentry Workshop" + village_workshop_carpenter_06_domicile_building_desc: "A workshop in which a few carpenters ply their trade for the benefit of the village." + village_workshop_mason_03_domicile_building: "Village Masonry Workshop" + village_workshop_mason_03_domicile_building_desc: "A workshop in which a few masons ply their trade for the benefit of the village." + village_workshop_mason_04_domicile_building: "Village Masonry Workshop" + village_workshop_mason_04_domicile_building_desc: "A workshop in which a few masons ply their trade for the benefit of the village." + village_workshop_mason_05_domicile_building: "Village Masonry Workshop" + village_workshop_mason_05_domicile_building_desc: "A workshop in which a few masons ply their trade for the benefit of the village." + village_workshop_mason_06_domicile_building: "Village Masonry Workshop" + village_workshop_mason_06_domicile_building_desc: "A workshop in which a few masons ply their trade for the benefit of the village." + village_workshop_textile_03_domicile_building: "Village Weavers Workshop" + village_workshop_textile_03_domicile_building_desc: "A workshop in which a few weavers ply their trade for the benefit of the village." + village_workshop_textile_04_domicile_building: "Village Weavers Workshop" + village_workshop_textile_04_domicile_building_desc: "A workshop in which a few weavers ply their trade for the benefit of the village." + village_workshop_textile_05_domicile_building: "Village Weavers Workshop" + village_workshop_textile_05_domicile_building_desc: "A workshop in which a few weavers ply their trade for the benefit of the village." + village_workshop_textile_06_domicile_building: "Village Weavers Workshop" + village_workshop_textile_06_domicile_building_desc: "A workshop in which a few weavers ply their trade for the benefit of the village." + village_storage_01_domicile_building: "Village Storehouse" + village_storage_01_domicile_building_desc: "A small storehouse where food and goods are stored for protection from the elements" + village_storage_02_domicile_building: "Village Storehouse" + village_storage_02_domicile_building_desc: "A small storehouse where food and goods are stored for protection from the elements" + village_storage_warehouse_03_domicile_building: "Village Warehouse" + village_storage_warehouse_03_domicile_building_desc:: "A warehouse in which goods are stored for protection from the elements" + village_storage_warehouse_04_domicile_building: "Village Warehouse" + village_storage_warehouse_04_domicile_building_desc:: "A warehouse in which goods are stored for protection from the elements" + village_storage_granary_03_domicile_building: "Village Granary" + village_storage_granary_03_domicile_building_desc:: "A granary in which food is stored for protection from the elements" + village_storage_granary_04_domicile_building: "Village Granary" + village_storage_granary_04_domicile_building_desc:: "A granary in which food is stored for protection from the elements" + village_market_01_domicile_building: "Village Market + village_market_01_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_market_02_domicile_building: "Village Market + village_market_02_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_market_03_domicile_building: "Village Market + village_market_03_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_market_04_domicile_building: "Village Market + village_market_04_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_market_05_domicile_building: "Village Market + village_market_05_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_market_06_domicile_building: "Village Market + village_market_06_domicile_building_desc: "A market in which goods are exchanged with travelling merchants and distributed around the village" + village_grazing_land_01_domicile_building: "Village Pastures" + village_grazing_land_01_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grazing_land_02_domicile_building: "Village Pastures" + village_grazing_land_02_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grazing_land_03_domicile_building: "Village Pastures" + village_grazing_land_03_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grazing_land_04_domicile_building: "Village Pastures" + village_grazing_land_04_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grazing_land_05_domicile_building: "Village Pastures" + village_grazing_land_05_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grazing_land_06_domicile_building: "Village Pastures" + village_grazing_land_06_domicile_building_desc: "The pastures where cattle and horses roam freely providing dairy and meat to the community." + village_grain_fields_01_domicile_building: "Spelt Fields" + village_grain_fields_01_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_grain_fields_02_domicile_building: "Spelt Fields" + village_grain_fields_02_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_grain_fields_03_domicile_building: "Spelt Fields" + village_grain_fields_03_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_grain_fields_04_domicile_building: "Spelt Fields" + village_grain_fields_04_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_grain_fields_05_domicile_building: "Spelt Fields" + village_grain_fields_05_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_grain_fields_06_domicile_building: "Spelt Fields" + village_grain_fields_06_domicile_building_desc: "Open fields of spelt used to produce the universal staple, bread." + village_rice_field_01_domicile_building: "Rice Fields" + village_rice_fields_01_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + village_rice_field_02_domicile_building: "Rice Fields" + village_rice_fields_02_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + village_rice_field_03_domicile_building: "Rice Fields" + village_rice_fields_03_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + village_rice_field_04_domicile_building: "Rice Fields" + village_rice_fields_04_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + village_rice_field_05_domicile_building: "Rice Fields" + village_rice_fields_05_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + village_rice_field_06_domicile_building: "Rice Fields" + village_rice_fields_06_domicile_building_desc: "Originally from the far east, rice has been a major food staple across eurasia for centuries now." + community_baggage_train_01_domicile_building: "Communities Baggage Train" + community_baggage_train_01_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_02_domicile_building: "Communities Baggage Train" + community_baggage_train_02_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_03_domicile_building: "Communities Baggage Train" + community_baggage_train_03_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_04_domicile_building: "Communities Baggage Train" + community_baggage_train_04_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_05_domicile_building: "Communities Baggage Train" + community_baggage_train_05_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_06_domicile_building: "Communities Baggage Train" + community_baggage_train_06_domicile_building_desc: "The Baggage train is upkept incase they are no longer wanted in their locality." + community_baggage_train_ample_steeds: "Ample Steeds" + community_baggage_train_ample_steeds_desc: "Horses are kept ready incase flight becomes necessary." + domicile_building_parameter_minority_comm_contributes_provisions: "This building chain will contribute [provisions_i][provisions|E] to your community yearly" + domicile_building_parameter_can_recruit_militia: "This building chain allows the recruitment of [peasant_militia|E] MAAs" \ No newline at end of file diff --git a/localization/english/replace/ai_automation_options_view_l_english.yml b/localization/english/replace/ai_automation_options_view_l_english.yml new file mode 100644 index 00000000..1840e4d3 --- /dev/null +++ b/localization/english/replace/ai_automation_options_view_l_english.yml @@ -0,0 +1,43 @@ +l_english: + ARMY_AUTOMATION_FEATURE_NAME: "Automated Armies" + AOV_HEADING: "$ARMY_AUTOMATION_FEATURE_NAME$ Settings" + AOV_APPLY: "$BARBERSHOP_APPLY$" + AOV_SET_TO_DEFAULT: "$CHARACTER_RESET_FILTERS$" + AOV_SET_TO_DEFAULT_TT: "[AddLocalizationIf( ArmyAutomationOptionsView.AreDisplayedSettingsDefault, 'AOV_SET_TO_DEFAULT_TT_CONTENT' )]" + AOV_SET_TO_DEFAULT_TT_CONTENT: "@warning_icon! #X Settings are already default#!" + AOV_COMPANION_OFF_WARNING: "@alert_icon! These settings have no effect while $ARMY_AUTOMATION_FEATURE_NAME$ is disabled" + AOV_AUTOMATED: "Automated" + AOV_MANUAL: "Manual" + AOV_OPT_COMMANDERS: "Assign Commanders" + AOV_OPT_COMMANDERS_NOT_PLAYERS: "Limited" + AOV_OPT_COMMANDERS_NOT_PLAYERS_TT: "#T Limited $game_concept_commander$ Assignment\n#![commanders|E] are assigned automatically to your [armies|E], but you are never assigned as $game_concept_commander$" + AOV_OPT_COMMANDERS_AUTOMATED_TT: "#T Automated $game_concept_commander$ Assignment\n#![commanders|E] are assigned automatically to your [armies|E]" + AOV_OPT_COMMANDERS_MANUAL_TT: "#T Manual $game_concept_commander$ Assignment\n#!You must manually assign [commanders|E] to your [armies|E]" + AOV_OPT_WAR_STANCE: "War Stance" + AOV_OPT_WAR_STANCE_DEFAULT: "Adaptive" + AOV_OPT_WAR_STANCE_DEFAULT_TT: "#T Adaptive Stance\n#!Your [armies|E] will act offensively or defensively depending on the situation" + AOV_OPT_WAR_STANCE_OFFENSIVE: "Offensive" + AOV_OPT_WAR_STANCE_OFFENSIVE_TT: "#T Offensive Stance\n#!Your [armies|E] will always act offensively" + AOV_OPT_WAR_STANCE_DEFENSIVE: "Defensive" + AOV_OPT_WAR_STANCE_DEFENSIVE_TT: "#T Defensive Stance\n#!Your [armies|E] will always act defensively" + AOV_OPT_RAIDING: "Raiding" + AOV_OPT_RAIDING_AUTOMATED_TT: "#T Automated Raiding\n#!Your [raider|E] [armies|E] will raise and go on $game_concept_raids$ on their own" + AOV_OPT_RAIDING_MANUAL_TT: "#T Manual Trading\n#!You control and raise your own [trader|E] Caravans" + AOV_OPT_BARTERING: "Trading" + AOV_OPT_BARTERING_AUTOMATED_TT: "#T Automated Trading\n#!Your [trader|E] Caravans will raise and go on $game_concept_barter$ Missions on their own" + AOV_OPT_BARTERING_MANUAL_TT: "#T Manual Trading\n#!You control and raise your own [trader|E] Caravans" + AOV_OPT_HIRING: "Hiring Troops" + AOV_OPT_HIRING_FULL: "Hire and Extend" + AOV_OPT_HIRING_FULL_TT: "#T Automated Hiring\n#![mercenaries|E], [holy_orders|E] and [provincial_armies|E] will be paid for automatically, and [mercenary_contracts|E] will be extended if needed for the war effort" + AOV_OPT_HIRING_EXTEND: "Only Extend" + AOV_OPT_HIRING_EXTEND_TT: "#T Automated Extending of Mercenary Contracts\n#![mercenary_contracts|E] will be extended if needed for the war effort" + AOV_OPT_HIRING_MANUAL_TT: "#T Manual Hiring\n#!You must manually pay for [mercenaries|E], [holy_orders|E] and [provincial_armies|E]" + + MV_AUTOMATION_TOGGLE_TT: "[SelectLocalization( GetPlayer.HasCompanionAI, 'MV_AUTOMATION_TOGGLE_TT_ON', 'MV_AUTOMATION_TOGGLE_TT_OFF' )]" + MV_AUTOMATION_TOGGLE_TT_ON: "#T $ARMY_AUTOMATION_FEATURE_NAME$: #V Enabled#!\n#!$MV_AUTOMATION_TOGGLE_TT_DESC$\n\n#I Click to disable automation#!" + MV_AUTOMATION_TOGGLE_TT_OFF: "#T $ARMY_AUTOMATION_FEATURE_NAME$: #V Disabled#!\n#!$MV_AUTOMATION_TOGGLE_TT_DESC$\n\n#I Click to enable automation#!" + MV_AUTOMATION_TOGGLE_TT_DESC: "[SelectLocalization(GetPlayer.HasDefaultCompanionAISettings, 'MV_AUTOMATION_TOGGLE_TT_DEFAULT_DESC' , 'MV_AUTOMATION_TOGGLE_TT_CUSTOM_DESC')]" + MV_AUTOMATION_TOGGLE_TT_DEFAULT_DESC: "If enabled, your [armies|E] are raised and fight the enemy on their own, and assign their own [commanders|E].\n\nYou are still responsible for buying [men_at_arms|E], hiring [mercenaries|E] and going on [raids|E].\n\n#help Automated Armies are intended for players unfamiliar with warfare, or otherwise want to focus their attention elsewhere. If you are an experienced player, we recommend that you control your armies yourself.#!" + MV_AUTOMATION_TOGGLE_TT_CUSTOM_DESC: "If enabled, your [armies|E] act on their own, but are limited by the settings you have chosen." + + MV_AUTOMATION_SETTINGS_TT: "#T Open $AOV_HEADING$\n#!Change the default behavior for $ARMY_AUTOMATION_FEATURE_NAME$" diff --git a/localization/english/replace/armyview_l_english.yml b/localization/english/replace/armyview_l_english.yml new file mode 100644 index 00000000..b8059b34 --- /dev/null +++ b/localization/english/replace/armyview_l_english.yml @@ -0,0 +1,234 @@ +l_english: + ARMY_HEADER:0 "Army" + SPLIT_ARMY_IN_HALF:0 "#T Split in half#!\nSplit this army into two roughly equal [armies|E]" + SPLIT_ARMY_IN_HALF_DISABLED:0 "\n$DESC$" + SPLIT_ARMY_CUSTOM:1 "#T Split off new Army#!\nDetach [regiments|E] from this [army|E] in order to create a new one" + SPLIT_ARMY_CUSTOM_TWO:1 "#T Reorganize#!\nReorganize the regiments of two [armies|E]" + SPLIT_ARMY_CUSTOM_DISABLED_TOO_MANY_SELECTED:0 "@warning_icon! #X Cannot reorganize more than two [armies|E]#!" + SPLIT_ARMY_CUSTOM_DISABLED_TOO_FEW_SELECTED:0 "@warning_icon! #X Need two [armies|E] selected to reorganize#!" + CANNOT_REORGANIZE_DIFFERENT_LOCATION:0 "@warning_icon! #X Cannot reorganize [armies|E] in two different locations#!" + MERGE_ARMY:0 "#T Merge [armies|E]#!\nCombine all selected armies into one" + MERGE_UNIT:0 "#T Merge [armies|E] and [fleets|E]#!\nCombine all selected armies and fleets into one" + DESELECT:0 "Deselect (not implemented)" + ATTACH_TO:0 "#T Attach to...#!\n#D (not implemented)#!" + SELECTED_ARMY:0 "Selected army (not implemented)" + FORTIFICATION_TOOLTIP:1 "#T [fort_level|E]: $VALUE|V0$/$MAX_VALUE|0$#!" + FORTIFICATION_INCREASE_TOOLTIP:0 "$INCREASE|=+$ per day" + FORTIFICATION_DAYS_TOOLTIP:0 "Will start to fortify its position in $DAYS|V$ days" + FORTIFICATION_NOT_ALLOWED:0 "Cannot fortify while moving" + FORTIFICATION_ADVANTAGE_TOOLTIP:0 "Will give $ADVANTAGE|0V$ [advantage|E] in [battle|E]" + FORTIFICATION_SIEGE_ADVANTAGE_TOOLTIP:0 "Will give $ADVANTAGE|0V$ [advantage|E] in [battle|E] due to ongoing siege." + ARMY_VIEW_FORTIFICATION_VALUE:0 "$VALUE$" + SELECT:0 "Select" + DISBAND:0 "Disband" + SELECT_TOOLTIP:0 "#T Select [army|E]#!\n" + DISBAND_TOOLTIP:0 "#T Disband [army|E]#!\n[ArmyReorgWindow.CanDisbandTooltip]" + DISBAND_ARMY:0 "#T Disband [army|E]#! " + CANNOT_DISBAND_WHILE_IN_COMBAT:0 "@warning_icon! #X Cannot disband while in [battle|E]#!" + CANNOT_DISBAND_WHILE_IN_RETREAT:0 "@warning_icon! #X Cannot disband while in [retreat|E]#!" + CANNOT_DISBAND_WHILE_ARMY_EMBARKED:0 "@warning_icon! #X Cannot disband while [embarked|E]#!" + CANNOT_DISBAND_NOT_FRIENDLY_AREA:0 "@warning_icon! #X Can disband only in a friendly area#!" + CANNOT_DISBAND_HOSTILE_AREA:0 "@warning_icon! #X Can disband only in a non-hostile area#!" + CANNOT_DISBAND_ENEMY_OR_HOSTILE_ARMIES_AROUND:0 "@warning_icon! #X Cannot disband while enemy or hostile [armies|E] are around#!" + CANNOT_DISBAND_WAR_LEADER: "@warning_icon! #X Cannot disband as a [war_leader|E]#!" + DISBAND_ARMY_DISABLED:0 "\n$DESC$" + DISBAND_ARMY_CONFIRM_TITLE:0 "Disband Army" + DISBAND_ARMY_CONFIRM_ACCEPT:0 "Disband" + DISBAND_ARMY_CONFIRM:0 "$COUNT|V$ [soldiers|E] will stand down and return home." + DISBAND_GATHERING_ARMY:1 "Disband Gathering Army" + DISBAND_GATHERING_ARMY_DISABLED:0 "\n$DESC$" + STOP_GATHERING:0 "Stop Gathering" + DISBAND_RETURN_HOME_TIME:1 "@warning_icon! #X [soldiers|E] will take up to $TIME$ to return home, making it take longer to raise them again.#!" + CANNOT_SPLIT_ARMY_NOT_OWNER:0 "@warning_icon! #X Cannot split Army belonging to someone else#!" + CANNOT_SPLIT_ARMY_WHILE_IN_COMBAT:0 "@warning_icon! #X Cannot split Army while in [battle|E]#!" + CANNOT_SPLIT_ARMY_WHILE_MOVEMENT_LOCKED:0 "@warning_icon! #X Cannot split Army while movement is locked#!" + CANNOT_SPLIT_ARMY_CUSTOM_WHILE_MOVING:0 "@warning_icon! #X Cannot reorganize Army while moving#!" + CANNOT_SPLIT_ARMY_WHILE_RETREATING:0 "@warning_icon! #X Cannot split Army while in [retreat|E]#!" + CANNOT_MERGE_WHILE_IN_COMBAT:0 "@warning_icon! #X Cannot merge while in [battle|E]#!" + CANNOT_MERGE_RAID_ARMY:0 "@warning_icon! #X Cannot merge [raid|E] armies outside own territory#!" + CANNOT_SPLIT_RAID_ARMY:0 "@warning_icon! #X Cannot split [raid|E] armies outside own territory#!" + CANNOT_MERGE_WHILE_RETREATING:0 "@warning_icon! #X Cannot merge while retreating#!" + CANNOT_MERGE_WHILE_MOVEMENT_LOCKED:0 "@warning_icon! #X Cannot merge while movement is locked#!" + CANNOT_MERGE_NAVAL_AND_LAND:0 "@warning_icon! #X Cannot merge [fleets|E] with unembarked [armies|E]#!" + CANNOT_MERGE_NO_ARMIES:0 "@warning_icon! #X No selected [armies|E] that can be merged#!" + CANNOT_MERGE_NO_UNITS:0 "@warning_icon! #X No selected [armies|E] or [fleets|E] that can be merged#!" + CANNOT_SPLIT_ARMY_FEW_REGIMENTS:0 "@warning_icon! #X Not enough Regiments in [army|E]#!" + CANNOT_SPLIT_ARMY_EMBARKED:0 "@warning_icon! #X Cannot split embarked [armies|E]#!" + CANNOT_SPLIT_SIEGE_SPLIT_NOT_FOUND:0 "@warning_icon! #X The [army|E] cannot be split in two for this [siege|E]#!" + CANNOT_SPLIT_NO_HIRED_OR_EVENT_TROOPS:0 "@warning_icon! #X No Hired or [special_troops|E] in the Army#!" + CANNOT_SPLIT_ONLY_HIRED_OR_EVENT_TROOPS:0 "@warning_icon! #X Only Hired and [special_troops|E] are present in the Army#!" + SELECT_COMMANDER_HEADER:1 "#T Select new [commander|E]#!" + SUPPLY_STATE_TOOLTIP:1 "#T [supplies|E]: $SUPPLY|V$/$FULL_SUPPLY|V0$#!\n$STATE|V$" + SUPPLY_STATE_POSITIVE:0 "#P +$CHANGE$#! Supplies/month" + SUPPLY_STATE_NEGATIVE:0 "#N -$CHANGE$#! Supplies/month" + SUPPLY_STATE_INCREASE:0 "#weak Will improve to $NEW_STATE$ in $DAYS$ days#!" + SUPPLY_STATE_DECREASE:0 "#weak Will decline to $NEW_STATE$ in $DAYS$ days#!" + SUPPLY_STATE_NO_CHANGE_THIS_YEAR:1 "#weak Will not change within the next year#!" + SUPPLY_STATE_EFFECTS:0 "Effects of $STATE|V$:" + SUPPLY_STATE_ATTRITION:0 "[attrition|E]: $VALUE|%-$" + SUPPLY_STATE_COMBAT_EFFECT:1 "$GENERIC_COMBAT_EFFECT$" + GENERIC_COMBAT_EFFECT:0 "[advantage|E]: $VALUE|0V$" + SUPPLY_STATE_0:0 "Well Supplied" + SUPPLY_STATE_1:0 "Undersupplied" + SUPPLY_STATE_2:0 "Starving" + SUPPLY_STATE_EVENT_TROOPS_IGNORING_SUPPLY:0 "$COUNT$ Soldiers in this army are not using supply" + SUPPLY_STATE_NO_LOSS_PERIOD:1 "Because it has been raised recently, the [army|E] will not use supply until [DATE.GetStringShort|V]" + SUPPLY_STATE_GATHERING:0 "The [army|E] will not use supply until it has gathered" + ARMY_NUMBER_OF_MEN:1 "$MAX_MEN|0$" + ARMY_NUMBER_OF_MEN_NOT_MAX:0 "$LIVING|0V$/$MAX_MEN|0V$" + ARMY_NUMBER_OF_LEVIES:0 "[levies|E]: $MAX_MEN|0V$" + ARMY_NUMBER_OF_LEVIES_NOT_MAX:0 "[levies|E]: $LIVING|0V$/$MAX_MEN|0V$" + ARMY_NUMBER_OF_LEVIES_TOOLTIP:0 "#T [levies|E]: $LIVING|0V$/$MAX_MEN|0V$#!" + ARMY_NUMBER_OF_MAA:0 "[men_at_arms|E]: $MAX_MEN|0V$" + ARMY_NUMBER_OF_MAA_NOT_MAX:0 "[men_at_arms|E]: $LIVING|0V$/$MAX_MEN|0V$" + ARMY_NUMBER_OF_MAA_TOOLTIP:0 "#T [men_at_arms|E]: $LIVING|0V$/$MAX_MEN|0V$#!" + ARMY_NUMBER_OF_KNIGHTS:1 "[knight_i]$knight_culture_player_plural$: $NUM|0V$" + ARMY_NUMBER_OF_KNIGHTS_TOOLTIP:1 "#T $knight_culture_player_plural$: [knight_i]$NUM|0V$#!\nEffectiveness: $EFFECTIVENESS|V%0$" + ARMY_EVENT_TROOPS_ASSOCIATED_WAR:0 "$COUNT$ [special_troops|E] will stand down when the [WAR.GetName] ends" + ARMY_ALL_ARMIES_MORE:0 "\nAnd $COUNT$ more" + ARMY_SUPPLY_COMMANDER_BREAKDOWN:0 "#indent_newline:3 \n[CHARACTER.GetModifierDescription( 'supply_capacity_mult' )]\n[CHARACTER.GetModifierDescription( 'supply_capacity_add' )]#!" + ARMY_SUPPLY_CAPACITY_INCREASED_BY_COMMANDER:0 "Supply capacity increased by [CHARACTER.GetName]:$ARMY_SUPPLY_COMMANDER_BREAKDOWN$\n" + ARMY_SUPPLY_CAPACITY_LOWERED_BY_COMMANDER:0 "Supply capacity decreased by [CHARACTER.GetName]:$ARMY_SUPPLY_COMMANDER_BREAKDOWN$\n" + FLEET_EMBARKING:0 "[embarking|E]: $TIME_LEFT$ left" + FLEET_EMBARKED:0 "[embarked|E]" + SHOW_SIEGE:0 "Go to the [siege|E]" + SPLIT_ARMY_FOR_SIEGE:1 "#T Station Besiegers\n#!Leave enough [soldiers|E] in this [army|E] to continue the [siege|E]" + SPLIT_ARMY_DISABLED:0 "\n$DESC$" + SPLIT_ARMY_FOR_SIEGE_NOT_ENOUGH_SOLDIERS:0 "@warning_icon! #X Not Enough soldiers to split off#!" + SPLIT_ARMY_FOR_SIEGE_TOO_MANY_SOLDIERS:2 "@warning_icon! #X Other Armies at this Holding have enough Soldiers to continue the Siege#!" + BESIEGING:0 "Besieging" + ARMY_COMPOSITION_ENTRY_MAX:0 "$TYPE$: $MAX|0V$" + ARMY_COMPOSITION_ENTRY_REINFORCE:0 "($REINFORCE|0V=$/month)" + ARMY_COMPOSITION_ENTRY:1 "$TYPE$: $COUNT|0V$/$MAX|0V$$REINFORCE_INFO$" + KNIGHT_REGIMENTS:1 "@knight_icon![CHARACTER.Custom('KnightCulturePlural')]" + LEVIES_REGIMENTS:1 "@soldier_icon![levies|e]" + MAA_REGIMENTS_ICON:1 "@$ICONKEY$_icon!$NAME$" + ARMY_TOTAL_SOLDIERS:0 "#T Total Soldiers: $CURRENT|0V$/$MAX|0V$#!" + ARMY_RAISED_SOLDIERS:0 "#T Raised Soldiers: $CURRENT|0V$/$MAX|0V$#!" + ARMY_UNRAISED_SOLDIERS:0 "#T Unraised Soldiers: $CURRENT|0V$/$MAX|0V$#!" + SPLIT_OFF_HIRED_AND_EVENT_TROOPS:0 "#T Split off [hired_troops|E] and [special_troops|E]#!\nSplit off an [army|E] containing all [hired_troops|E] and [special_troops|E] of this [army|E]." + ARMY_VIEW_ARMY_HAS_EVENT_TROOPS:1 "#T [special_troops|E]\n#![ArmyWindow.BuildEventTroopList]" + LEVIES_ARMY_REGIMENT_NAME:0 "Levies" + TT_REORG_SOLDIERS:0 "#T Soldiers: [RegimentReorgEntry.GetSoldierCount]#!\nMaximum: [RegimentReorgEntry.GetMaxSoldierCount]" + TT_REORG_EVENT_TROOPS:0 "#T [special_troops|E]: [RegimentReorgEntry.GetEventTroopName]#!" + TT_REORG_LEVIES:0 "#T [levies|E]\n#![soldiers|E]: [soldier_i][RegimentReorgEntry.GetSoldierCount]/[RegimentReorgEntry.GetMaxSoldierCount]\nFrom your [domain|E]\n\n$REORG_INSTRUCTION$" + TT_REORG_VASSAL_LEVIES:0 "#T [levies|E]\n#![soldiers|E]: [soldier_i][RegimentReorgEntry.GetSoldierCount]/[RegimentReorgEntry.GetMaxSoldierCount]\nFrom [vassal|E] [RegimentReorgEntry.GetRegiment.GetFromVassal.GetUIName]\n\n$REORG_INSTRUCTION$" + REORG_INSTRUCTION:0 "#I Click to move to other Army#!" + REORG_EMPTY_LIST:0 "#weak Move Regiments here to create a new Army#!" + ARMY_REORG_LEFT_MAINTENANCE:0 "[ArmyReorgWindow.GetLeftMaintenance]/month" + ARMY_REORG_RIGHT_MAINTENANCE:0 "[ArmyReorgWindow.GetRightMaintenance]/month" + ARMY_TBA_NAME:0 "New Army" + KNIGHT_REGIMENT_NAME:1 "[CHARACTER.GetShortUINameNoTooltip]" + ARMY_SELECT_THIS_ONLY:0 "#T Select This [army|E] Only#!" + GATHERING_DAYS_LEFT:0 "Days Left: [Army.GetGatheringDaysLeft|V]" + ARMY_VIEW_NEXT:0 "Next army" + ARMY_VIEW_PREVIOUS:0 "Previous army" + ARMY_VIEW_CREATE_NEW:0 "Create new army" + ARMY_VIEW_LEVIES:0 "Levies" + ARMY_VIEW_LEVIES_TOOLTIP:0 "#T Levies#!" + ARMY_VIEW_MAA:0 "Men-at-Arms" + ARMY_VIEW_KNIGHTS:1 "$knight_culture_player_plural_no_tooltip$" + START_RAIDING:0 "#T Start Raiding#!\nThis unit will now be able to take the [raid|E] action outside your realm" + END_RAIDING:0 "#T Stop being a Raiding Army#!\nThis [army|E] will stop being a Raiding Army, and can reinforce again" + START_RAID:0 "#T Start Raid#!" + RAID_ACTION_INFO:0 "Will take about [PROVINCE.GetLootTime( ARMY.Self )|V] days.\nWill loot [gold_i|E][PROVINCE.GetLoot|0V]." + START_RAID_ALREADY_RAIDING:0 "@warning_icon! #X Already [raiding|E] this Holding#!" + START_RAID_NOT_A_RAID_ARMY:0 "@warning_icon! #X Not a [raid|E] Army#!" + START_RAID_LOOT_CAP:0 "@warning_icon! #X Cannot carry more [raid|E] Loot#!" + START_RAID_NOT_OWN_REALM:0 "@warning_icon! #X Cannot [raid|E] inside your own [realm|E]#!" + START_RAID_ALLY:0 "@warning_icon! #X Cannot [raid|E] your ally [CHARACTER.GetShortUIName]#!" + START_RAID_TRUCE:0 "@warning_icon! #X Cannot [raid|E] [CHARACTER.GetShortUIName]#! while you have a truce agreement" + START_RAID_IMMUNE:0 "@warning_icon! #X Cannot raid someone who has recently defeated one of your [raids|E]. Immunity will end on [DATE.GetString|V]#!" + START_RAID_SAME_CONFEDERATION: "@warning_icon! #X Cannot raid someone who is also part of [CONFEDERATION.GetName]#!" + START_RAID_OWN_TRIBUTARY: "@warning_icon! #X Cannot raid your own [tributary|E]#!" + START_RAID_OWN_SUZERAIN: "@warning_icon! #X Cannot raid your own [suzerain|E]#!" + START_RAID_NO_HOLDING:0 "@warning_icon! #X No [holding|E] here to [raid|E]#!" + START_RAID_MOVING:0 "@warning_icon! #X Cannot [raid|E] while moving#!" + START_RAID_IN_COMBAT:0 "@warning_icon! #X Cannot [raid|E] while in combat#!" + START_RAID_SMALLER_THAN_GARRISON:0 "@warning_icon! #X [raid|E] Army is smaller than the [garrison|E] ($VALUE|0$ men)#!" + START_RAID_TOO_FEW_MEN:0 "@warning_icon! #X [raid|E] Army is too small to raid (need at least $VALUE|0$ men)#!" + START_RAID_RECENTLY_LOOTED:0 "@warning_icon! #X The Holding has been looted recently. Can be looted again on [DATE.GetString|V]#!" + RAID_PROVINCE_TOOLTIP_RECENTLY_LOOTED:0 "The Holding has been looted recently. Can be looted again on [DATE.GetString|V]" + RAID_PROVINCE_TOOLTIP_LOOT:0 "Raid [loot|E]: [gold_i]$VALUE|0V$" + START_RAID_ALREADY_BEING_LOOTED:0 "@warning_icon! #X The Holding is already being looted by [ARMY.GetName]#!" + START_RAID_UNDER_SIEGE:0 "@warning_icon! #X Cannot [raid|E] a Holding that is under [siege|E]#!" + TOGGLE_RAID_IN_COMBAT:0 "@warning_icon! #X Cannot toggle [raiding|E] while in combat#!" + TOGGLE_RAID_RETREATING:0 "@warning_icon! #X Cannot toggle [raiding|E] while retreating#!" + TOGGLE_RAID_ONLY_OWN_TERRITORY:0 "@warning_icon! #X Cannot toggle [raiding|E] outside own territory#!" + TOGGLE_RAID_CANNOT_RAID:0 "@warning_icon! #X Unable to [raid|E]#!" + TOGGLE_RAID_MERCENARY:0 "@warning_icon! #X Mercenaries cannot [raid|E]#!" + ARMY_RAID_LOOT_TOOLTIP: "#T Raid Loot#!\nThis [army|E] is carrying [loot_i][Army.GetRaidLoot|0V] [loot|E].\nIt can carry at most [loot_i][Army.GetLootCap|0V] [loot|E] due to the size of the army." + + START_BARTERING: "#T Start Trading#!\nThis unit will now be able to take the [trade|E] action outside your realm" + END_BARTERING: "#T Stop being a Trader Caravan#!\nThis [army|E] will stop being a Trader Caravan, and can reinforce again" + START_BARTER: "#T Start Trade#!" + BARTER_ACTION_INFO: "Bartering will take about [PROVINCE.GetLootTime( ARMY.Self )|V] days.\nThe Caravan will receive [loot_i|E][PROVINCE.GetLoot|0V]." + START_BARTER_INSUFFICIENT_BARTER_GOODS: "@warning_icon! #X Insufficient [trade_goods|E] to start [trading|E]#!" + START_BARTER_ALREADY_BARTERING: "@warning_icon! #X Already [trading|E] with this Holding#!" + START_BARTER_NOT_A_BARTER_ARMY: "@warning_icon! #X Not a [trade|E] Army#!" + START_BARTER_LOOT_CAP: "@warning_icon! #X Cannot carry more [trade|E] Loot#!" + START_BARTER_NOT_OWN_REALM: "@warning_icon! #X Cannot [trade|E] inside your own [realm|E]#!" + START_BARTER_NO_HOLDING: "@warning_icon! #X No [holding|E] here with which to [trade|E]#!" + START_BARTER_MOVING: "@warning_icon! #X Cannot [trade|E] while moving#!" + START_BARTER_IN_COMBAT: "@warning_icon! #X Cannot [trade|E] while in combat#!" + START_BARTER_RECENTLY_LOOTED: "@warning_icon! #X The Holding has been looted or traded with recently. Can be traded with again on [DATE.GetString|V]#!" + BARTER_PROVINCE_TOOLTIP_RECENTLY_LOOTED: "The Holding has been looted or traded with recently. Can be traded with again on [DATE.GetString|V]" + BARTER_PROVINCE_TOOLTIP_LOOT: "[loot|E]: [loot_i]$VALUE|0V$" + START_BARTER_ALREADY_BEING_LOOTED: "@warning_icon! #X The Holding is already being looted by [ARMY.GetName]#!" + START_BARTER_UNDER_SIEGE: "@warning_icon! #X Cannot [trade|E] a Holding that is under [siege|E]#!" + TOGGLE_BARTER_IN_COMBAT: "@warning_icon! #X Cannot toggle [trading|E] while in combat#!" + TOGGLE_BARTER_RETREATING: "@warning_icon! #X Cannot toggle [trading|E] while retreating#!" + TOGGLE_BARTER_ONLY_OWN_TERRITORY: "@warning_icon! #X Cannot toggle [trading|E] outside own territory#!" + TOGGLE_BARTER_CANNOT_BARTER: "@warning_icon! #X Unable to [trade|E]#!" + TOGGLE_BARTER_MERCENARY: "@warning_icon! #X Mercenaries cannot [trade|E]#!" + ARMY_BARTER_LOOT_TOOLTIP: "#T Loot#!\nThis Caravan is carrying [loot_i][Army.GetBarterLoot|0V] [loot|E].\nIt can carry at most [loot_i][Army.GetLootCap|0V] [loot|E] due to its size." + + CHANGE_COMMANDER_IN_RETREAT:0 "@warning_icon! #X Army is retreating#!" + TOGGLE_LOOTER_STANCE:2 "#T [Select_CString( Army.HasLooterStance, 'Always', 'Never' )] Raid#!\n[SelectLocalization( Army.HasLooterStance, 'TOGGLE_LOOTER_STANCE_DESC_ON', 'TOGGLE_LOOTER_STANCE_DESC_OFF' )]" + TOGGLE_LOOTER_STANCE_DESC_ON:0 "This [army|E] will automatically [raid|E] any viable [holding|E] that it stops in" + TOGGLE_LOOTER_STANCE_DESC_OFF:0 "This [army|E] does not automatically [raid|E] [holdings|E] that it stops in" + ARMY_ATTRITION_TT:0 "#T Monthly [attrition|E]: [Army.GetArmyAttritionPercentage|%-0] ([soldier_i] [Army.GetArmyAttrition|+]/month)\n#![Army.GetArmyAttritionBreakdownPercentage][Select_CString( EqualTo_CFixedPoint(Army.GetArmyAttritionPercentage, '(CFixedPoint)0'), '#weak No Attrition#!', '' )]" + ATTRITION_SIEGE:0 "Besieging" + ATTRITION_RAID:0 "Raiding" + AV_ALWAYS_RAID:0 "Always Raid" + ATTRITION_SUPPLY:0 "Lack of Supplies" + ATTRITION_TOTAL:0 "[attrition|E]" + ARMY_VIEW_TROOP_TT:0 "[TroopItem.BuildTroopItemTooltip( Army.Self )]" + TROOP_LEVY:0 "[levies|E]" + TROOP_LIST_LEVIES:0 "#T [levies|E]: $TOTAL$/$MAX$#!" + TROOP_KNIGHTS:0 "#T $knight_culture_player_plural$: $TOTAL$#!" + TROOP_LIST_KNIGHT:1 "[CHARACTER.GetShortUIName|U]: [CHARACTER.GetSkill( 'prowess' )] [prowess_i|E]" + TROOP_LIST_MAA_MULTIPLE_PERSONAL: "[CHARACTER.GetShortUINamePossessive|U] [ARMY_REGIMENT.GetRegiment.GetName]: [ARMY_REGIMENT.GetCount]/[ARMY_REGIMENT.GetMax]" + TROOP_LIST_MAA_MULTIPLE_TITLE: "[ARMY_REGIMENT.GetRegiment.GetName] of the [TITLE.GetBaseName]: [ARMY_REGIMENT.GetCount]/[ARMY_REGIMENT.GetMax]" + TROOP_LIST_MAA_MULTIPLE: "[ARMY_REGIMENT.GetRegiment.GetName]: [ARMY_REGIMENT.GetCount]/[ARMY_REGIMENT.GetMax]" + TROOP_LIST_MAA_HEADER: "#T [MEN_AT_ARMS_TYPE.GetBaseTypeName]: $TOTAL$/$MAX$#!" + ARMY_TOOLTIP_ATTRITION: "[attrition|E]: [Army.GetArmyAttritionPercentage|%0-]/month" + ARMY_TOOLTIP_COMMANDER: "[commander|E]: [Character.GetShortUIName|U]" + ARMY_TOOLTIP_COMMANDER_ADVANTAGE: "[Character.GetCommanderAdvantage]" + ARMY_TOOLTIP_NO_COMMANDER:0 "No [commander|E]" + ARMY_REORGANIZATION:0 "Army Reorganization" + ATTACH_TO_UNIT_HEADER:0 "#T Attach to [army|E]#!" + ATTACH_TO_UNIT:0 "Attach to follow [TARGET_ARMY.GetName]" + CANNOT_ATTACH_UNIT_TO_SELF:0 "@warning_icon! #X Cannot attach an [army|E] to itself#!" + CANNOT_ATTACH_UNIT_TO_OWN_UNITS:0 "@warning_icon! #X Cannot attach to another [army|E] you own#!" + ALREADY_ATTACHED_TO_UNIT:0 "@warning_icon! #X Already attached to the [ARMY.GetName]#!" + UNIT_IS_ALREADY_ATTACHED_TO_US:0 "@warning_icon! #X Cannot attach to the [ARMY.GetName] as it is attached to us#!" + NOT_A_FRIENDLY_UNIT:0 "@warning_icon! #X Cannot attach to hostile or neutral [armies|E]#!" + DETACH_FROM_UNIT_HEADER:0 "#T Detatch from [army|E]#!" + DETACH_FROM_UNIT:0 "Detatch from following [TARGET_ARMY.GetName]" + NOT_ATTACHED_TO_ANY_UNIT:0 "@warning_icon! #X Not attached to another [army|E]#!" + ATTACHED_ARMY_NAME:0 "Following:\n[Army.GetName]" + ATTACH_TO_ARMY_WINDOW_HEADER:0 "Attach to Army" + ATTACH_TO_ARMY_WINDOW_TEXT:0 "Select an [army|E] in [ArmyWindow.GetArmy.GetLocation.GetName] for [ArmyWindow.GetArmy.GetName] to follow." + TOGGLE_ATTACH_TO_UNIT_WINDOW:0 "Attach to Army" + ATTACH_TO_UNIT_WINDOW_TEXT:0 "Attach to [AttachToArmyWindow.GetSelectedArmy.GetName]" + ATTACH:1 "Attach" + ARMY_UNIT_COOLTIP_NAME: "[UnitItem.GetArmy.GetNameNoTooltip]" + RAID_INTENT_SELECTION_HEADER: "Change $game_concept_raid_intent$" + RAID_INTENT_SELECTION_TEXT: "Select your [raid_intent|E]" + RAID_CHANGE_INTENT_TOOLTIP: "#T [RaidIntent.GetName]#!\n[RaidIntent.GetDescription][AddParagraph( RaidIntentSelectionWindow.GetCanPickIntentDesc( RaidIntent.Self ) )]" + RAID_SINGLE_INTENT_TOOLTIP: "#T [RaidIntent.GetName]#!\n[RaidIntent.GetDescription]" + RAID_OPEN_INTENT_WINDOW: "$RAID_SINGLE_INTENT_TOOLTIP$\n\n#I Click to change [raid_intent|E]#!" + RAID_OPEN_INTENT_WINDOW_DISABLED: "$RAID_SINGLE_INTENT_TOOLTIP$\n\n#X Cannot change [raid_intent|E] during active events!#!" + RAID_CHANGE_INTENT_TT: "#T Change $game_concept_raid_intent$#!" + INVALID_RAID_INTENT: "@warning_icon! #X Invalid [raid_intent|E]#!" diff --git a/localization/english/replace/barter_window_l_english.yml b/localization/english/replace/barter_window_l_english.yml new file mode 100644 index 00000000..e68bfa5c --- /dev/null +++ b/localization/english/replace/barter_window_l_english.yml @@ -0,0 +1,20 @@ +l_english: + BW_TT_BARTERING_REALM_TOOLTIP: "#T Trader: [Character.GetPrimaryTitle.GetName|V]#!\n#I Click to view#!" + BW_TT_BARTEREE_REALM_TOOLTIP: "#T Traderee: [Character.GetPrimaryTitle.GetName|V]#!\n#I Click to view#!" + BW_TT_OPEN_ARMY_WINDOW: "#T Select all your [trading|E] [armies|E]" + BW_TIME_LEFT: "[BarterMission.GetEta.GetTimeDiffFromNow|V] left" + BW_TIME_LEFT_TT: "#T Time Left\n#!The Trade Mission will finish on [BarterMission.GetEta.GetString]" + BARTER_PROGRESS_TOOLTIP: "#T Trade Progress: [BarterMission.GetProgress|0]/[BarterMission.GetProgressNeeded|0]#!\n[BarterMission.GetBarterProgressTooltip]" + BARTER_BLOCKED_BY_COMBAT: "@warning_icon! #X Trading Caravan is in a [battle|E]#!" + BARTER_TROOPS_TOOLTIP: "#T Number of Soldiers#!\n[trading|E] Caravan: [BarterMission.GetAttackerMen|V]\n[garrison|E]: [BarterMission.GetDefenderMen|V]\nDaily progress: [BarterMission.GetDailyProgressPercent|%1V]" + HOLDING_BARTER_GOODS_NEEDED: "[trade_goods|E]" + HOLDING_BARTER_GOODS_NEEDED_VALUE: "[barter_goods_i] [Province.GetBarterGoodsNeeded|-0]" + BARTER_WINDOW_TT_DAILY_PROGRESS: "Daily progress" + BW_TT_BASE_PROGRESS: "Base" + BW_TT_MEN_PROGRESS: "Trading [soldiers|E]" + + BARTER_GOODS_MONTHLY_INCOME: "Monthly [trade_goods|E]" + DOMAIN_BARTER_GOODS_INCOME_HOLDING: "[TITLE.GetName]" + BARTER_GOODS_MONTHLY_EXPENSES: "Monthly Expenses" + + BARTER_WINDOW_DESC: "#weak [BarterMission.GetArmy.GetOwner.GetShortUINamePossessive|U] [trade|E] Caravan trades [Province.GetBarterGoodsNeeded|0V] [trade_goods|E] for [Province.GetLoot|0V] [loot|E] in [Province.GetName]. [Province.GetNameNoTooltip] will gain [StaticModifier.GetNameWithTooltip] for 5 years.#!" diff --git a/localization/english/replace/buildings_l_english.yml b/localization/english/replace/buildings_l_english.yml index 13e7f395..533d8d02 100644 --- a/localization/english/replace/buildings_l_english.yml +++ b/localization/english/replace/buildings_l_english.yml @@ -2715,5 +2715,3 @@ building_type_mount_baekdu_01_desc: "The lofty peak of Mount Baekdu is said to be the origin of all the mountains of the Korean peninsula, and its heights are a sacred place among the region's many faiths and peoples." building_mount_baekdu_01: "$building_type_mount_baekdu_01$" building_mount_baekdu_01_desc: "$building_type_mount_baekdu_01_desc$" - - diff --git a/localization/english/replace/court_positions_2_l_english.yml b/localization/english/replace/court_positions_2_l_english.yml new file mode 100644 index 00000000..31792f16 --- /dev/null +++ b/localization/english/replace/court_positions_2_l_english.yml @@ -0,0 +1,177 @@ +l_english: + master_of_hunt_court_position_task_dangerous_game: "Track Dangerous Game" + master_of_hunt_court_position_task_dangerous_game_desc: "Your $master_of_hunt_court_position$ will track down dangerous game, such as wolves or bears, that would yield a lot of prestige to hunt." + master_of_hunt_court_position_task_dangerous_game_tt: "Every year your $master_of_hunt_court_position$ has a chance of [hunt_sighting_no_prefix|E] dangerous game for you to[GetActivityType('activity_hunt').GetTextIcon][GetActivityType('activity_hunt').GetName]\n$master_of_hunt_court_position_task_generic_tt$" + + master_of_hunt_court_position_task_regular_game: "Track Regular Game" + master_of_hunt_court_position_task_regular_game_desc: "Your $master_of_hunt_court_position$ will track down regular game, such as foxes or deer, that would yield an average amount of prestige to hunt." + master_of_hunt_court_position_task_regular_game_tt: "Every year your $master_of_hunt_court_position$ has a chance of [hunt_sighting_no_prefix|E] regular game for you to[GetActivityType('activity_hunt').GetTextIcon][GetActivityType('activity_hunt').GetName]\n$master_of_hunt_court_position_task_generic_tt$" + + master_of_hunt_court_position_task_legendary_game: "Track Legendary Game" + master_of_hunt_court_position_task_legendary_game_desc: "Your $master_of_hunt_court_position$ will attempt to track down legendary beasts that would yield an enormous of prestige to hunt." + master_of_hunt_court_position_task_legendary_game_tt: "Every year your $master_of_hunt_court_position$ has a small chance of [hunt_sighting_no_prefix|E] legendary game for you to[GetActivityType('activity_hunt').GetTextIcon][GetActivityType('activity_hunt').GetName]\n$master_of_hunt_court_position_task_generic_tt$" + + master_of_hunt_court_position_task_generic_tt: "The frequency of [hunt_sightings_no_prefix|E] increases with [aptitude|E] #weak (max one Sighting every 3 years)#!" + + court_jester_court_position_task_entertain_court: "Entertain Courtiers" + court_jester_court_position_task_entertain_court_desc: "Your $court_jester_court_position$ will spend their time entertaining your courtiers with jokes, stories, and acrobatics." + court_jester_court_position_task_entertain_court_tt: "Every year the $court_jester_court_position$ has a chance to reduce the [stress_loss_i] [stress|E] of a random [courtier|E] #weak (preferring those close to you, such as your [children|E])#!\nIf their [aptitude|E] is at least $aptitude_good$, up to two [courtiers|E] can be targeted every year" + foreign_emissary_court_position_task_entertain_court_tt: "Every year the $foreign_emissary_court_position$ has a chance to reduce the [stress_loss_i] [stress|E] of a random [courtier|E] #weak (preferring those close to you, such as your [children|E])#!\nIf their [aptitude|E] is at least $aptitude_good$, up to two [courtiers|E] can be targeted every year" + + court_jester_court_position_task_fuel_the_rumour_mill: "Fuel the Rumor Mill" + court_jester_court_position_task_fuel_the_rumour_mill_desc: "This character will spend their time spreading nonsensical rumors and misleading stories to slow down enemy schemes." + court_jester_court_position_task_fuel_the_rumour_mill_tt: "Every year the $court_jester_court_position$ has a chance to reduce the [stress_loss_i] [stress|E] of a random [courtier|E] #weak (preferring those close to you, such as your [children|E])#!" + + court_jester_court_position_task_abuse_the_jester: "Abuse the Jester" + court_jester_court_position_task_abuse_the_jester_desc: "Your $court_jester_court_position$ will spend their time being abused and humiliated." + court_jester_court_position_task_abuse_the_jester_tt: "Every year the $court_jester_court_position$ has a chance to reduce the [stress_loss_i] [stress|E] of a random [courtier|E] #weak (preferring those close to you, such as your [children|E])#!" + + court_artificer_court_position_task_martial: "Create Weapons, Armor, & go Adventuring" + court_artificer_court_position_task_martial_desc: "Your $court_artificer_court_position$ will gather inspiration to make swords, shields, armor, and go adventuring for the martially-inclined ruler." + court_artificer_court_position_task_martial_tt: "Every year the $court_artificer_court_position$ has a chance to gain a #V Weapon#!, #V Armor#!, or #V Adventure#! [inspiration|E] #weak (preferring [artifacts|E] you do not already have)#!\n$court_artificer_court_position_task_improved_chances_tt$" + + court_artificer_court_position_task_learning: "Create Books & Tapestries" + court_artificer_court_position_task_learning_desc: "Your $court_artificer_court_position$ will gather inspiration to make books, tapestries, or archemical concoctions to please the learned ruler." + court_artificer_court_position_task_learning_tt: "Every year the $court_artificer_court_position$ has a chance to gain a #V Book#!, #V Weaver#!, or #V Alchemy#! [inspiration|E] #weak (preferring [artifacts|E] you do not already have)#!\n$court_artificer_court_position_task_improved_chances_tt$" + + court_artificer_court_position_task_stewardship: "Create Crowns & Sculptures" + court_artificer_court_position_task_stewardship_desc: "Your $court_artificer_court_position$ will gather inspiration to make regalia, crowns, thrones, and other artifacts for the stewardly ruler." + court_artificer_court_position_task_stewardship_tt: "Every year the $court_artificer_court_position$ has a chance to gain a #V Smith#! or #V Artisan#! [inspiration|E]\n$court_artificer_court_position_task_improved_chances_tt$" + + court_artificer_court_position_task_improved_chances_tt: "Using this task drastically increases the chance of gaining an [inspiration|E]" + + must_have_an_equipped_illustrious_court_artifact: "You do #bold not#! have an equipped #V Illustrious#! [court_artifact|E]" + must_have_upgradeable_artifact_tt: "You do #bold not#! have an equipped [artifact|E] that can be upgraded" + + antiquarian_court_position_task_scout_for_artifacts: "Search for Rare Artifacts" + antiquarian_court_position_task_scout_for_artifacts_desc: "Your $antiquarian_court_position$ will scour ancient tomes and investigate loose rumors, searching for those who might be able to bring something spectacular back to court." + antiquarian_court_position_task_scout_for_artifacts_tt: "Every year the $antiquarian_court_position$ has a chance to give someone at [court|E] an Adventure [inspiration|E] #weak (Chance increases with [aptitude|E])#!" + antiquarian_inspired_adventurer_message: "$antiquarian_court_position$ Inspires Adventure!" + antiquarian_inspired_adventurer_effect: "Your [ROOT.Char.Custom2('RelationToMeShort', SCOPE.sC('adventure_target'))] [adventure_target.GetFirstName] gained an #V Adventure#! [inspiration|E]" + + antiquarian_court_position_task_improve_artifacts: "Improve Artifacts" + antiquarian_court_position_task_improve_artifacts_desc: "Your $antiquarian_court_position$ will improve and polish artifacts so that they are as impressive and effective as they can possibly be." + antiquarian_court_position_task_improve_artifacts_tt: "Every year the $antiquarian_court_position$ has a chance to improve an equipped [artifact|E]\nThe chance of improvement #weak (#bold not#! the quality)#! increases with [aptitude|E]\nCommon [artifacts|E] can be improved once, Masterworks twice, and so on" + antiquarian_improved_artifact_message: "[artifact_target.GetName] Improved!" + + artifact_prowess_1_modifier: "Prowess" + artifact_knight_effectiveness_1_modifier: "Knight Effectiveness" + artifact_glory_hound_levy_contribution_mult_1_modifier: "Glory Hound Levy Contribution" + artifact_enemy_hard_casualty_modifier_1_modifier: "Enemy Hard Casualty Modifier" + artifact_plains_advantage_1_modifier: "Plains Advantage" + artifact_farmlands_advantage_1_modifier: "Farmlands Advantage" + artifact_hills_advantage_1_modifier: "Hills Advantage" + artifact_mountains_advantage_1_modifier: "Mountains Advantage" + artifact_desert_advantage_1_modifier: "Desert Advantage" + artifact_desert_mountains_advantage_1_modifier: "Desert Mountain Advantage" + artifact_oasis_advantage_1_modifier: "Oasis Advantage" + artifact_jungle_advantage_1_modifier: "Jungle Advantage" + artifact_forest_advantage_1_modifier: "Forest Advantage" + artifact_taiga_advantage_1_modifier: "Taiga Advantage" + artifact_wetlands_advantage_1_modifier: "Wetlands Advantage" + artifact_steppe_advantage_1_modifier: "Steppe Advantage" + artifact_floodplains_advantage_1_modifier: "Floodplains Advantage" + artifact_drylands_advantage_1_modifier: "Drylands Advantage" + artifact_controlled_province_advantage_1_modifier: "Controlled Territory Defender Advantage" + artifact_hard_casualty_modifier_1_modifier: "Hard Casualty Modifier" + artifact_monthly_minor_prestige_1_modifier: "Monthly Prestige" + artifact_monthly_prestige_1_modifier: "Monthly Prestige" + artifact_monthly_piety_1_modifier: "Monthly Piety" + artifact_monthly_prestige_add_1_modifier: "Monthly Renown" + artifact_short_reign_duration_mult_1_modifier: "Short Reign Reduction" + artifact_short_reign_duration_mult_3_modifier: "$artifact_short_reign_duration_mult_1_modifier$" + artifact_monthly_tyranny_1_modifier: "Monthly Tyranny Reduction" + artifact_happy_powerful_vassal_tax_contribution_mult_1_modifier: "Powerful Vassal Councillor Tax Contribution" + artifact_courtly_tax_contribution_mult_1_modifier: "Courtly Tax Contribution" + artifact_courtly_vassal_opinion_1_modifier: "Courtly Opinion" + artifact_powerful_vassal_opinion_1_modifier: "Powerful Vassal Opinion" + artifact_parochial_vassal_opinion_1_modifier: "Parochial Opinion" + artifact_parochial_tax_contribution_mult_1_modifier: "Parochial Tax Contribution" + artifact_courtier_and_guest_opinion_1_modifier: "Courtier and Guest Opinion" + artifact_men_at_arms_maintenance_1_modifier: "Men-at-Arms Maintenance Reduction" + artifact_build_gold_cost_1_modifier: "Build Cost Reduction" + artifact_domain_tax_mult_1_modifier: "Domain Taxes" + artifact_zealot_vassal_opinion_1_modifier: "Zealot Opinion" + artifact_zealot_tax_contribution_mult_1_modifier: "Zealot Tax Contribution" + artifact_belligerent_tax_contribution_mult_1_modifier: "Belligerent Tax Contribution" + artifact_court_grandeur_baseline_add_1_modifier: "Court Grandeur" + artifact_development_growth_1_modifier: "Development Growth" + artifact_glory_hound_vassal_opinion_1_modifier: "Glory Hound Opinion" + artifact_belligerent_vassal_opinion_1_modifier: "Belligerent Opinion" + artifact_vassal_limit_1_modifier: "Vassal Limit" + artifact_owned_scheme_secrecy_add_1_modifier: "Scheme Secrecy" + artifact_hostile_scheme_phase_duration_add_1_modifier: "Hostile Scheme Speed" + artifact_personal_scheme_phase_duration_add_1_modifier: "Personal Scheme Speed" + artifact_learn_language_scheme_phase_duration_add_1_modifier: "Learn Language Scheme Speed" + artifact_monthly_lifestyle_xp_minor_modifier: "Monthly Lifestyle Experience" + artifact_monthly_lifestyle_xp_miniscule_modifier: "Monthly Lifestyle Experience" + artifact_glory_hound_tax_contribution_mult_1_modifier: "Glory Hound Tax Contribution" + artifact_mercenary_hire_cost_mult_1_modifier: "Mercenary Hire Cost" + artifact_fertility_growth_1_modifier: "Fertility Growth" + artifact_herd_gain_1_modifier: "Herd Gain" + artifact_herd_conversion_1_modifier: "Herd Conversion" + artifact_health_gain_2_modifier: "Improved Health" + artifact_dread_baseline_add_2_modifier: "Dread" + artifact_pursue_efficiency_2_modifier: "Pursue Efficiency" + artifact_controlled_province_advantage_5_modifier: "Controlled Province Advantage" + artifact_negate_health_penalty_add_2_modifier: "Negate Health Penalty" + artifact_scheme_resistance_add_3_modifier: "Scheme Resistance" + + antiquarian_court_position_task_exibit_artifacts: "Exibit Illustrious Artifacts" + antiquarian_court_position_task_exibit_artifacts_desc: "Your $antiquarian_court_position$ will exibit your illustrious artifacts to the public, showing everyone that you are in possession of something truly unique." + + court_musician_court_position_task_bolster_legitimacy: "Bolster Legitimacy" + court_musician_court_position_task_bolster_legitimacy_desc: "This character will strengthen your right to rule through song and dance." + + cupbearer_court_position_task_flatter_dignitaries: "Flatter Dignitaries" + cupbearer_court_position_task_flatter_dignitaries_desc: "This character will make sure that the cups of those you care for the most runneth over with vigor." + + cupbearer_court_position_task_collect_tallage: "Collect Tallage" + cupbearer_court_position_task_collect_tallage_desc: "Your $cupbearer_court_position$ will collect extra taxes from vassal socialites and revelers, the feasts must not run out of food and drink, after all!" + cupbearer_court_position_task_collect_tallage_tt: "You do not have any [GetVassalStance( 'courtly' ).GetName] [vassals|E]" + high_almoner_court_position_task_appease_zealots_tt: "You do not have any [GetVassalStance( 'zealot' ).GetName] [vassals|E]" + + chief_qadi_court_position_task_public_alms: "Lead Public Sadaqah" + chief_qadi_court_position_task_public_alms_desc: "Your $chief_qadi_court_position$ will divide alms to the poor and destitute of your domain in your name." + + high_almoner_court_position_task_appease_zealots: "Appease Zealots" + high_almoner_court_position_task_appease_zealots_desc: "This character will drum up your name in the eyes of the pious vassals of the realm." + + food_taster_court_position_task_brew_poisons: "Brew Poisons" + food_taster_court_position_task_brew_poisons_desc: "This character will spend their time behind the scenes, concocting poisons for use in schemes." + + food_taster_court_position_task_ear_to_the_ground: "Keep an Ear to the Ground" + food_taster_court_position_task_ear_to_the_ground_desc: "This character will spend their time hiding behind curtains, listening intently for rumors and gossip." + + court_poet_court_position_task_create_poetry: "Write Poetry" + court_poet_court_position_task_create_poetry_desc: "Your $court_poet_court_position$ will spend their time penning and reciting beautiful poems about you, your realm, and your achievements." + court_poet_court_position_task_create_poetry_tt: "Every year the $court_poet_court_position$ will write a poem, giving you a [modifier|E] improving either your [legitimacy|E], [piety|E], [advantage|E], or [attraction|E] for three years #weak (Effect increases with [aptitude|E])#!" + court_poet_court_position_task_japanese_legacy_addendum: "Each finished Poem will provide a one time increase of [bloc_cohesion|E]" + court_poet_poetry_desc: "[court_poet_from_task.Custom('GeneratePoem_Outro_Rhyming')]" + court_poet_poetry_title: "[court_poet_from_task.Custom('GeneratePoem_Title')|U]" + + court_poet_romance_aptitude_1_modifier: "Court Poet: Poetry about Romance" + court_poet_romance_aptitude_2_modifier: "$court_poet_romance_aptitude_1_modifier$" + court_poet_romance_aptitude_3_modifier: "$court_poet_romance_aptitude_1_modifier$" + court_poet_romance_aptitude_4_modifier: "$court_poet_romance_aptitude_1_modifier$" + court_poet_romance_aptitude_5_modifier: "$court_poet_romance_aptitude_1_modifier$" + + court_poet_mourning_aptitude_1_modifier: "Court Poet: Poetry about Mourning" + court_poet_mourning_aptitude_2_modifier: "$court_poet_mourning_aptitude_1_modifier$" + court_poet_mourning_aptitude_3_modifier: "$court_poet_mourning_aptitude_1_modifier$" + court_poet_mourning_aptitude_4_modifier: "$court_poet_mourning_aptitude_1_modifier$" + court_poet_mourning_aptitude_5_modifier: "$court_poet_mourning_aptitude_1_modifier$" + + court_poet_legacy_aptitude_1_modifier: "Court Poet: Poetry about Legacy" + court_poet_legacy_aptitude_2_modifier: "$court_poet_legacy_aptitude_1_modifier$" + court_poet_legacy_aptitude_3_modifier: "$court_poet_legacy_aptitude_1_modifier$" + court_poet_legacy_aptitude_4_modifier: "$court_poet_legacy_aptitude_1_modifier$" + court_poet_legacy_aptitude_5_modifier: "$court_poet_legacy_aptitude_1_modifier$" + + court_poet_strife_aptitude_1_modifier: "Court Poet: Poetry about Strife" + court_poet_strife_aptitude_2_modifier: "$court_poet_strife_aptitude_1_modifier$" + court_poet_strife_aptitude_3_modifier: "$court_poet_strife_aptitude_1_modifier$" + court_poet_strife_aptitude_4_modifier: "$court_poet_strife_aptitude_1_modifier$" + court_poet_strife_aptitude_5_modifier: "$court_poet_strife_aptitude_1_modifier$" + + drinks_alcohol: "They drink alcohol" diff --git a/localization/english/replace/court_positions_l_english.yml b/localization/english/replace/court_positions_l_english.yml new file mode 100644 index 00000000..9cd0bd64 --- /dev/null +++ b/localization/english/replace/court_positions_l_english.yml @@ -0,0 +1,1087 @@ +l_english: + APPOINT_COURT_POSITION_VIEW_replace_character_header: "Replace [AppointCourtPositionView.GetCourtPositionToReplace.GetEmployee.GetShortUINameNoTooltip] as [AppointCourtPositionView.GetPositionName]" + APPOINT_COURT_POSITION_VIEW_select_character_header: "Appoint [AppointCourtPositionView.GetPositionName]" + APPOINT_COURT_POSITION_VIEW_EMPLOYER_SALARY: "Salary: [CourtPositionType.GetEmployerSalaryTextFor( Character.Self )|V]" + APPOINT_COURT_POSITION_VIEW_EMPLOYEE_SALARY: "Salary: [CourtPositionType.GetEmployeeSalaryTextFor( Character.Self )|V]" + APPOINT_COURT_POSITION_VIEW_salary_per_travel:0 "Salary when a travel starts: [Character.GetTravelLeaderCost|U]" + APPOINT_COURT_POSITION_VIEW_header:2 "Appoint Court Position" + APPOINT_COURT_POSITION_VIEW_back_button:1 "Back" + APPOINT_COURT_POSITION_VIEW_appoint_button:1 "Appoint" + APPOINT_COURT_POSITION_VIEW_appoint_button_no_eligible_courtiers_tooltip:0 "@warning_icon! #X No one in your court is eligible for this [court_positions|E]#!" + APPOINT_COURT_POSITION_VIEW_search_for_position_button:1 "Search for candidate" + APPOINT_COURT_POSITION_VIEW_search_for_position_button_tooltip:0 "Start a search to find a candidate for this [court_position|E]." + APPOINT_COURT_POSITION_VIEW_appoint_courtier_or_vassal_button:2 "Appoint" + APPOINT_COURT_POSITION_VIEW_REVOKE_CONSEQUENCES_HEADER:0 "@warning_icon! Revoking this court position will:" + APPOINT_COURT_POSITION_VIEW_REVOKE_COST:0 "• Cost you $COST$." + APPOINT_COURT_POSITION_VIEW_COURTIER_SORT_APTITUDE:0 "Aptitude" + APPOINT_COURT_POSITION_VIEW_COURTIER_SORT_TRAVEL_SPEED:0 "Travel Speed" + APPOINT_COURT_POSITION_VIEW_COURTIER_SORT_TRAVEL_SAFETY:0 "Travel Safety" + APPOINT_COURT_POSITION_VIEW_NO_SELECTED_COURTIER:0 "Select a character to fill the role" + APPOINT_COURT_POSITION_VIEW_CANNOT_AFFORD:1 "@warning_icon! #X Hiring this position will make your expenses higher than your income, causing you to lose $RESOURCES$ every month.#!" + APPOINT_COURT_POSITION_VIEW_REVOKE_CONSEQUENCE_FOR_APPOINTMENT:0 "#T If you choose to revoke this position later it will: #!" + APPOINT_COURT_POSITION_VIEW_REVOKE_CONSEQUENCE_FOR_APPOINTMENT_TOOLTIP:0 "#X [AppointCourtPositionView.AppointingRevokeText] #!" + APPOINT_COURT_POSITION_VIEW_REPLACE_CURRENTLY_APPOINTED:0 "Currently appointed [CourtPosition.GetNameNoTooltip]" + APPOINT_COURT_POSITION_VIEW_REPLACE_FIRE_CURRENT_HOLDER:0 "Fire" + APPOINT_COURT_POSITION_VIEW_REPLACE_CURRENT_SALARY:0 "Monthly Salary: #L [CourtPosition.GetEmployerSalaryText]#!" + APPOINT_COURT_POSITION_VIEW_REPLACE_CONSEQUENCE_FOR_REVOKE:0 "#T Revoking this position will: #!" + APPOINT_COURT_POSITION_VIEW_REPLACE_CONSEQUENCE_FOR_REVOKE_TOOLTIP:0 "#X [AppointCourtPositionView.ReplaceRevokeText] #!" + APPOINT_COURT_POSITION_VIEW_APTITUDE: "[aptitude|e]: [AppointCourtPositionView.GetAptitudeTextFor(Character.Self)]" + APPOINT_COURT_POSITION_VIEW_OPINION_BONUS:0 "[opinion|e] with [AppointCourtPositionView.GetSelectedCharacter.GetShortUINameNoTooltip]: [AppointCourtPositionView.GetOpinionBonusForSelectedEmployee|=+]" + + COURT_POSITION_NAME: "[CourtPosition.GetNameNoTooltip]" + COURT_POSITION_FOR_EMPLOYER:1 "For [CourtPosition.GetEmployer.GetUINameNoTooltip]" + + COURT_WINDOW_COURT_POSITIONS:0 "[CourtWindow.GetCourtOwner.Custom('GetCourtPositionPlural')|U]" + COURT_POSITION_REPLACE:0 "#T Replace [Character.GetShortUINameNoTooltip]#!" + COURT_POSITION_REVOKE:0 "#T Fire [Character.GetShortUINameNoTooltip]#!" + COURT_POSITION_POWERFUL_AGENT: "@alert_icon! #alert_trial Powerful [agent|E] in [hostile_schemes|E] against their $game_concept_liege$#!" + COURT_POSITION_OPINION_BONUS:0 "[opinion|e] Bonus: [CourtPosition.GetOpinionBonus|=+]" + COURT_POSITION_TOGGLE_AUTOMATION: "#T Toggle Automation #!\n$COURT_POSITION_AUTOMATION_CURRENT$\n#I Click to toggle automation options#!" + COURT_POSITION_AUTOMATION_DISABLE_TOOLTIP: "#T Current Automation #!\n$COURT_POSITION_AUTOMATION_CURRENT$\n#I Click to disable automation#!" + COURT_POSITION_AUTOMATION_CURRENT: "When vacated:\n[Select_CString( CourtPositionType.HasAutomationNone( GetPlayer.Self ), '@check_icon!', '@small_dot!')] No automation\n[Select_CString( CourtPositionType.HasAutomationShowEvent( GetPlayer.Self ), '@check_icon!', '@small_dot!' )] Suggest best candidates in event\n#indent_newline:5 [Select_CString( CourtPositionType.HasAutomationAssignBest( GetPlayer.Self ), '@check_icon!', '@small_dot!')] Auto-assign highest [aptitude|e] candidate, if available#!\n#indent_newline:5 [Select_CString( CourtPositionType.HasAutomationAssignBestOrEvent( GetPlayer.Self ), '@check_icon!', '@small_dot!')] Auto-assign highest [aptitude|e] candidate, or notify with event#!" + + COURT_POSITIONS_WINDOW_EMPTY_POSITION_NO_ADD_TT:1 "[SelectLocalization( Not( CourtPositionType.CanHirePosition( Character.Self ) ), 'COURT_POSITIONS_WINDOW_EMPTY_POSITION_YOU_DONT_MEET_REQUIREMENTS', '' )]\n[SelectLocalization( Not( CourtPositionType.HasValidCourtiersForCharacter( Character.Self ) ), 'COURT_POSITIONS_WINDOW_EMPTY_POSITION_NO_ELIGIBLE_COURTIERS', '' )]" + + COURT_POSITIONS_WINDOW_GROUP_HEADER: "$NAME$" + COURT_POSITIONS_WINDOW_GROUP_DENIED: "Unavailable Potential Court Positions" + COURT_POSITIONS_WINDOW_MONTHLY_SALARY: "Monthly Salaries:" + COURT_POSITIONS_WINDOW_MONTHLY_SALARY_YOUR: "Your Salary:" + COURT_POSITIONS_WINDOW_EMPLOYER_SALARY_SHORT: "#L [CourtPosition.GetEmployerSalaryTextShort]#!" + COURT_POSITIONS_WINDOW_EMPLOYEE_SALARY_SHORT: "#L [CourtPosition.GetEmployeeSalaryTextShort]#!" + COURT_POSITIONS_WINDOW_POSITION_AI_SHORT: "Pos AI: [CourtPositionItem.GetPositionAiScore|0]" + COURT_POSITIONS_WINDOW_BEST_CANDIDATE_AI_SHORT: "Can AI: [CourtPositionItem.GetBestCandidateAiScore|0]" + COURT_POSITIONS_WINDOW_POSITION_DENIED: "@warning_icon! #X You do not fulfill all the requirements#!\n$REASONS$" + COURT_POSITIONS_WINDOW_YOUR_POSITIONS: "Your Held Positions:" + + COURT_POSITIONS_WINDOW_EMPTY_POSITION_HEADER:0 "Vacant [CourtPositionsWindow.CourtOwner.Custom('GetCourtOrOfficerPositionConceptPlural')] in your [CourtPositionsWindow.CourtOwner.Custom('GetRealmOrDomicileConcept')]" + COURT_POSITIONS_WINDOW_EMPTY_POSITION_EFFECTS_VARY:0 "Effects vary based on [aptitude|e]:" + COURT_POSITIONS_WINDOW_EMPTY_POSITION_YOU_DONT_MEET_REQUIREMENTS:0 "@warning_icon! #X You do not fulfill the requirements to hire this [court_position|e]#!" + COURT_POSITIONS_WINDOW_EMPTY_POSITION_YOU_DONT_MEET_REQUIREMENTS_TT:0 "#T $COURT_POSITION_TOOLTIP_LIEGE_REQUIREMENT$#!\n[CourtPositionType.GetLiegeRequirementDescriptionText]" + COURT_POSITIONS_WINDOW_EMPTY_POSITION_NO_ELIGIBLE_COURTIERS:0 "@warning_icon! #X No courtiers meet the [court_position|e] requirements#!" + COURT_POSITIONS_WINDOW_EMPTY_POSITION_NO_ELIGIBLE_COURTIERS_TT:0 "#T $COURT_POSITION_TOOLTIP_EMPLOYEE_REQUIREMENT$#!\n[CourtPositionType.GetEmployeeRequirementDescriptionText]" + COURT_POSITIONS_WINDOW_FILTER_ALL:0 "All" + COURT_POSITIONS_WINDOW_FILTER_TAB_ALL_NUM_HIRES:0 "[CourtPositionsWindow.NumHiredPositions]/[CourtPositionsWindow.MaxNumAvailablePositions]" + COURT_POSITIONS_WINDOW_FILTER_TAB_CATEGORY_NUM_HIRES:0 "[CourtPositionsWindow.NumHiredInCategory(CourtPositionCategory.Self)]/[CourtPositionsWindow.MaxNumHirableInCategory(CourtPositionCategory.Self)]" + + COURT_POSITIONS_COURT_VIEW_appoint_court_position_button:2 "Appoint Court Position" + COURT_POSITIONS_COURT_VIEW_appoint_court_position_button_tooltip:1 "#T Appoint Court Position#!\n\nAppoint a [vassal|E] or a member of your court to a [court_position|E]." + COURT_POSITIONS_COURT_VIEW_positions_in_your_court:2 "[CourtPositionsWindow.CourtOwner.Custom('GetCourtOrOfficerPositionConceptPlural')] in your [CourtPositionsWindow.CourtOwner.Custom('GetRealmOrDomicileConcept')]" + COURT_POSITIONS_COURT_VIEW_salaries_gained:1 "Monthly Income from your Salary:" + COURT_POSITIONS_COURT_VIEW_salaries_paid:2 "Monthly Salaries paid:" + COURT_POSITIONS_SALARY_FOR:0 "$EMPLOYEE$ ($COURT_POSITION$)" + COURT_POSITIONS_INCOME:0 "Income from [court_positions|E]" + COURT_POSITIONS_EXPENSES:0 "Expenses to [court_positions|E]" + COURT_POSITIONS_SALARIES_PAID:0 "Salaries paid" + COURT_POSITIONS_SALARIES_GAINED:0 "Salaries earned" + COURT_POSITION_TYPE_SCALING_MODIFIER_DESCRIPTION:1 "$MODIFIER$: $RANGED_MODIFIER$ (based on [aptitude|E])" + + COURT_POSITIONS_your_positions_in_liege_court:2 "Your [court_positions|E] at your [liege|e]'s Court" + COURT_POSITIONS_no_positions_with_liege:2 "You have no [court_positions|E] at your [liege|e]'s Court" + COURT_POSITIONS_no_positions_in_your_court:1 "You have not employed any [court_position|E] in your court." + COURT_POSITIONS_cannot_hire_more_positions:2 "You cannot hire any [court_positions|E]." + COURT_POSITIONS_cannot_hire_more_positions_in_category:2 "You cannot hire any [court_positions|E] in this category." + + COURT_POSITIONS_revoke_confirm_header:2 "Confirm Revoke [GetPlayer.Custom('GetCourtPositionConcept')]" + COURT_POSITIONS_revoke_confirm_accept:1 "Revoke" + COURT_POSITIONS_revoke_position_cost:1 "Doing this will cost you $COSTS$" + COURT_POSITIONS_revoke_position_cost_cannot_afford:1 "Doing this will cost you $COSTS$. You cannot afford this and it will put you at a deficit" + COURT_POSITIONS_revoke_position_confirmation:1 "[CHARACTER.GetShortUINameNoTooltip]'s $COURT_POSITION$ position will be revoked." + COURT_POSITIONS_revoke_position_confirmation_with_cost:1 "[CHARACTER.GetShortUINameNoTooltip]'s $COURT_POSITION$ position will be revoked. $COSTS$" + COURT_POSITIONS_revoke_position_confirmation_with_effect:1 "[CHARACTER.GetShortUINameNoTooltip]'s $COURT_POSITION$ position will be revoked. Doing this will have the following effect:\n$EFFECT$" + COURT_POSITIONS_revoke_position_confirmation_with_cost_and_effect:1 "[CHARACTER.GetShortUINameNoTooltip]'s $COURT_POSITION$ position will be revoked. $COSTS$, and have the following effect:\n$EFFECT$" + + COURT_POSITIONS_replace_confirm_header:2 "Confirm Replace [court_position|E]" + COURT_POSITIONS_replace_confirm_accept:1 "Replace" + COURT_POSITIONS_replace_position_confirmation:1 "[CHARACTER.GetShortUINameNoTooltip] will be replaced by [TARGET_CHARACTER.GetShortUINameNoTooltip] as $COURT_POSITION$." + COURT_POSITIONS_replace_position_confirmation_with_cost:1 "[CHARACTER.GetShortUINameNoTooltip] will be replaced by [TARGET_CHARACTER.GetShortUINameNoTooltip] as $COURT_POSITION$. $COSTS$" + COURT_POSITIONS_replace_position_confirmation_with_effect:1 "[CHARACTER.GetShortUINameNoTooltip] will be replaced by [TARGET_CHARACTER.GetShortUINameNoTooltip] as $COURT_POSITION$. Doing this will have the following effect:\n$EFFECT$" + COURT_POSITIONS_replace_position_confirmation_with_cost_and_effect:1 "[CHARACTER.GetShortUINameNoTooltip] will be replaced by [TARGET_CHARACTER.GetShortUINameNoTooltip] as $COURT_POSITION$. $COSTS$, and have the following effect:\n$EFFECT$" + + COURT_POSITIONS_category_day_to_day:0 "Day-to-day" + COURT_POSITIONS_category_honorary:0 "Honorary" + COURT_POSITIONS_category_personal_servants:0 "Personal Servants" + COURT_POSITIONS_category_frivolous:0 "Frivolous" + COURT_POSITIONS_category_fighters:0 "Fighters" + COURT_POSITIONS_months_of_service:1 "Months of service: $MONTHS$" + COURT_POSITIONS_years_of_service:1 "Years of service: $YEARS$" + + COURT_POSITION_TOOLTIP_EFFECT_ON_YOUR_LIEGE:0 "Effect on your [liege|e]:" + COURT_POSITION_TOOLTIP_EFFECT_ON_LIEGE: "Effect on [liege|e]:" + COURT_POSITION_TOOLTIP_EFFECT_ON_LIEGE_WITH_HEADING: "#S $COURT_POSITION_TOOLTIP_EFFECT_ON_LIEGE$#!#indent_newline:2 \n[CourtPositionType.GetEmployerModifierDescription]#!" + + + COURT_POSITION_TOOLTIP_SCALED_EFFECT_ON_LIEGE:0 "Effect on [liege|e], based on employee's [aptitude|e]:" + COURT_POSITION_TOOLTIP_LIEGE_REQUIREMENT:0 "[liege|e] requirements:" + COURT_POSITION_TOOLTIP_LIEGE_REQUIREMENT_NESTED: "#TOOLTIP:COURT_POSITION_TOOLTIP_LIEGE_REQUIREMENT_NESTED_TT #L Liege Requirements#!#!" + COURT_POSITION_TOOLTIP_LIEGE_REQUIREMENT_NESTED_TT: "[CourtPositionType.GetLiegeRequirementDescriptionText]" + COURT_POSITION_TOOLTIP_EFFECT_ON_YOU:0 "Effect on you:" + COURT_POSITION_TOOLTIP_EFFECT_ON_EMPLOYEE:1 "Effect on [CourtPosition.GetNameNoTooltip]:" + COURT_POSITION_TOOLTIP_EFFECT_ON_HOLDER: "Effect on holder:" + COURT_POSITION_TOOLTIP_EMPLOYEE_REQUIREMENT:1 "[CourtPositionType.GetNameNoTooltip] requirements:" + COURT_POSITION_TOOLTIP_EMPLOYEE_REQUIREMENT_NESTED: "#TOOLTIP:COURT_POSITION_TOOLTIP_EMPLOYEE_REQUIREMENT_NESTED_TT #L [CourtPositionType.GetNameNoTooltip] Requirements#!#!" + COURT_POSITION_TOOLTIP_EMPLOYEE_REQUIREMENT_NESTED_TT: "[CourtPositionType.GetEmployeeRequirementDescriptionText]" + COURT_POSITION_TOOLTIP_SALARY: "Salary: [CourtPosition.GetSalaryText]" + COURT_POSITION_TOOLTIP_SALARIES_GOLD_PAID: "[gold_i][gold|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_GOLD_EARNED: "[gold_i][gold|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_PRESTIGE_PAID: "[prestige_i][prestige|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_PRESTIGE_EARNED: "[prestige_i][prestige|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_PIETY_PAID: "[piety_i][piety|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_PIETY_EARNED: "[piety_i][piety|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_DYNASTY_PRESTIGE_PAID: "[dynasty_prestige_i][dynasty_prestige|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_DYNASTY_PRESTIGE_EARNED: "[dynasty_prestige_i][dynasty_prestige|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_INFLUENCE_PAID: "[influence_i][influence|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_INFLUENCE_EARNED: "[influence_i][influence|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_HERD_PAID: "[herd_i][herd|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_HERD_EARNED: "[herd_i][herd|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_TREASURY_PAID: "[treasury_i][treasury|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_TREASURY_EARNED: "[treasury_i][treasury|E] Salaries Earned" + COURT_POSITION_TOOLTIP_SALARIES_MERIT_PAID: "[merit_i][merit|E] Salaries Paid" + COURT_POSITION_TOOLTIP_SALARIES_MERIT_EARNED: "[merit_i][merit|E] Salaries Earned" + COURT_POSITION_TOOLTIP_REVOKE_COST:1 "• Cost you: [CourtPosition.GetRevokeCostText]" + COURT_POSITION_TOOLTIP_REVOKE_EFFECT_HEADER:0 "Revoking this [SelectLocalization( IsLandlessAdventurer( GetPlayer ), 'COURT_POSITION_TOOLTIP_REVOKE_EFFECT_HEADER.CAMP_OFFICER', 'COURT_POSITION_TOOLTIP_REVOKE_EFFECT_HEADER.COURT_POSITION')] will cause:" + COURT_POSITION_TOOLTIP_REVOKE_EFFECT_HEADER.COURT_POSITION: "[court_position|E]" + COURT_POSITION_TOOLTIP_REVOKE_EFFECT_HEADER.CAMP_OFFICER: "[officer|E]" + COURT_POSITION_TYPE_TOOLTIP_EFFECT_ON_EMPLOYEE: "Effect on [CourtPositionType.GetNameNoTooltip]:" + COURT_POSITION_TYPE_TOOLTIP_EFFECT_ON_EMPLOYEE_WITH_HEADING: "#S $COURT_POSITION_TYPE_TOOLTIP_EFFECT_ON_EMPLOYEE$#!#indent_newline:2 \n[CourtPositionType.GetEmployeeModifierDescription]#!" + + COURT_POSITION_TYPE_TOOLTIP_EMPLOYER_SALARY: "Salary: [CourtPositionType.GetEmployerSalaryTextFor( GetPlayer )|V]" + COURT_POSITION_TYPE_TOOLTIP_EMPLOYEE_SALARY: "Salary: [CourtPositionType.GetEmployeeSalaryTextFor( GetPlayer )|V]" + COURT_POSITION_TYPE_TOOLTIP_REVOKE_COST: "Revocation cost: [CourtPositionType.GetRevokeCostText|V]" + + COURT_POSITION_SALARY_BREAKDOWN_BASE:0 "Base Salary" + + COURT_POSITION_TASK_COST_BREAKDOWN_BASE: "[court_position_task_short|E] Cost" + COURT_POSITION_TASK: "[court_position_task_short|E]" + COURT_POSITION_TASK_HEADER: "#T [CourtPositionTaskType.GetName]#!" + COURT_POSITION_TASK_CLICK_TT: "[SelectLocalization( CourtPosition.IsActiveTask( CourtPositionTaskType.Self ), 'ACTIVE_COURT_POSITION_TASK_CLICK_TT', 'POTENTIAL_COURT_POSITION_TASK_CLICK_TT' )]" + ACTIVE_COURT_POSITION_TASK_CLICK_TT: "Click to deactivate [CourtPositionTaskType.GetName]" + POTENTIAL_COURT_POSITION_TASK_CLICK_TT: "Click to activate [CourtPositionTaskType.GetName]" + ACTIVE_COURT_POSITION_TASK_TT: "My [CourtPosition.GetPositionType.GetNameNoTooltip] will stop performing the [CourtPositionTaskType.GetName|V] [court_position_task_short|e]." + POTENTIAL_COURT_POSITION_TASK_TT: "My [CourtPosition.GetPositionType.GetNameNoTooltip] will actively perform the [CourtPositionTaskType.GetName|V] [court_position_task_short|e]." + COURT_POSITION_NO_ACTIVE_TASK: "#weak Regular duties #!" + COURT_POSITION_NO_ACTIVE_TASK_DESCRIPTION: "#T Regular duties#!\nThe [CourtPosition.GetNameNoTooltip] will perform only their regular duties." + COURT_POSITION_NO_ACTIVE_TASK_COST: "@gold_icon! #weak 0 #!" + + COURT_POSITION_TASK_EFFECTS_HEADER: "#S Effects#!\n" + COURT_POSITION_TASK_EMPLOYER_EFFECTS: "#S Effect on [liege|E]:#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerModifierDescription( CourtPosition.Self )]#!" + COURT_POSITION_TASK_EMPLOYER_COURT_EFFECTS: "#S Effect on [liege|E]'s [court|E]:#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerCourtModifierDescription( CourtPosition.Self )]#!" + COURT_POSITION_TASK_EMPLOYEE_EFFECTS: "#S Effect on [CourtPositionType.GetName]:#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployeeModifierDescription]#!" + COURT_POSITION_TASK_START_EFFECTS: "#S When started:#!#indent_newline:2 \n[CourtPositionTaskType.GetOnStartEffectDesc( CourtPosition.Self )]#!" + COURT_POSITION_TASK_END_EFFECTS: "#S When stopped:#!#indent_newline:2 \n[CourtPositionTaskType.GetOnEndEffectDesc( CourtPosition.Self )]#!" + COURT_POSITION_TASK_COST: "#S Cost (per month):#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerCostText( CourtPosition.GetEmployer.Self )]#!" + + COURT_POSITION_TASK_HINT: "Potential [court_position_tasks_short|E]:" + COURT_POSITION_TASK_GENERIC_TT: "My [CourtPositionType.GetNameNoTooltip] will actively perform the [CourtPositionTaskType.GetName|V] [court_position_task_short|e]." + COURT_POSITION_TASK_EMPLOYER_GENERIC_EFFECTS: "#S Effect on [liege|E]:#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerModifierGenericDescription]#!" + COURT_POSITION_TASK_EMPLOYER_COURT_GENERIC_EFFECTS: "#S Effect on [liege|E]'s [court|E]:#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerCourtModifierGenericDescription]#!" + COURT_POSITION_TASK_START_GENERIC_EFFECTS: "#S When started:#!#indent_newline:2 \n[CourtPositionTaskType.GetOnStartEffectGenericDesc]#!" + COURT_POSITION_TASK_END_GENERIC_EFFECTS: "#S When stopped:#!#indent_newline:2 \n[CourtPositionTaskType.GetOnEndEffectGenericDesc]#!" + COURT_POSITION_TASK_GENERIC_COST: "#S Cost (per month):#!#indent_newline:2 \n[CourtPositionTaskType.GetEmployerCostText( GetPlayer )]#!" + + COURT_POSITION_TYPE_EMPLOYER_COURT_EFFECTS: "#S Effect on [GetPlayer.Custom('GetCourtiersTypeConcept')|U]:#!#indent_newline:2 \n[CourtPositionType.GetEmployerCourtModifierDescription]#!" + COURT_POSITION_EMPLOYER_COURT_EFFECTS: "#S Effects on [Character.Custom('GetCourtOwnerConcept')]'s [Character.Custom('GetRealmOrDomicileConcept')]:#!#indent_newline:2 \n[CourtPosition.GetEmployerCourtBonuses]#!" + COURT_POSITION_APPOINT_EMPLOYER_COURT_EFFECTS: "#S Effects on [GetPlayer.Custom('GetCourtOwnerConcept')]'s [GetPlayer.Custom('GetRealmOrDomicileConcept')]:#!#indent_newline:2 \n[AppointCourtPositionView.GetLiegeCourtModifierForPositionType( AppointCourtPositionView.GetSelectedCharacter.Self )]#!" + + physician_treat_epidemic: "Control Plagues" + physician_treat_epidemic_desc: "This character is tasked with increasing the [epidemic_resistance|E] of every [barony|E] owned by their [liege|E]." + physician_guard_family: "Advanced Research" + physician_guard_family_desc: "This character is tasked with assisting their [liege|E]'s learning." + physician_improve_self: "Improve Skills" + physician_improve_self_desc: "This character is focusing on improving their skills as a physician." + physician_improve_self_tt: "Every month this character has a chance of gaining [GetTrait('lifestyle_physician').GetName( root_scope )] [trait_level_track_xp|E] or [learning_i][learning_skill|E]" + physician_improve_self_fallback_tt: "Every month this character has a chance of gaining [GetTrait('lifestyle_physician').GetName( GetNullCharacter )] [trait_level_track_xp|E] or [learning_i][learning_skill|E]" + high_almoner_attend_poor: "Divine Charity" + high_almoner_attend_poor_desc: "This character is tasked with arranging charity in your name." + chronicler_promote_legend_realm: "Extol Domestic Legend" + chronicler_promote_legend_realm_desc: "This character is tasked with glorifying their [liege|E]'s [legend|E], amplifying its spread." + culture_era_late_medieval_salary_mod:0 "#V $culture_era_late_medieval$#! [era|E]" + culture_era_high_medieval_salary_mod:0 "#V $culture_era_high_medieval$#! [era|E]" + culture_era_early_medieval_salary_mod:0 "#V $culture_era_early_medieval$#! [era|E]" + esteemed_hospitality_salary_mod:0 "#V $tradition_esteemed_hospitality_name$#! [tradition|E]" + empire_salary_mod:0 "[emperor|E]" + tribal_salary_mod:0 "[tribal|E]" + nomad_salary_mod: "[nomad|E]" + small_realm_salary_mod:0 "Significant [realm_size|E] #low (30+)#!" + medium_realm_salary_mod:0 "Large [realm_size|E] #low (60+)#!" + large_realm_salary_mod:0 "Very Large [realm_size|E] #low (90+)#!" + enormous_realm_salary_mod:0 "Enormous [realm_size|E] #low (120+)#!" + holds_court_position_opinion:0 "$POSITION$: $VALUE|=+$" + + COURT_POSITION_APTITUDE_TOOLTIP_HEADER:0 "Aptitude" + COURT_POSITION_aptitude_description_position:1 "[aptitude|e]: [CourtPosition.GetAptitudeText|V]" + COURT_POSITION_aptitude_breakdown:0 "[CHARACTER.GetShortUINameNoTooltip]'s [aptitude|e] as a $COURT_POSITION$ is affected by:" + COURT_POSITION_aptitude_character_possessive:0 "[Character.GetShortUINameNoTooltip]'s [aptitude|e]:" + + court_position_skill_learning:0 "[learning|E] Skill" + court_position_skill_martial:0 "[martial|E] Skill" + court_position_skill_prowess:0 "[prowess|E] Skill" + court_position_skill_diplomacy:0 "[diplomacy|E] Skill" + court_position_skill_stewardship:0 "[stewardship|E] Skill" + court_position_skill_intrigue:0 "[intrigue|E] Skill" + court_position_skill_all: "Sum of all [skills|E]" + court_position_languages:0 "Known [languages|E]" + court_position_landed_penalty:0 "Busy ruling" + court_position_imprisoned_penalty: "Imprisoned" + court_position_skill_health_good:0 "Excellent [health|E]" + court_position_skill_health:0 "Good [health|E]" + court_position_skill_health_low:0 "Low [health|E]" + court_position_physician_3_trait:1 "$court_position_physician_1_trait$" + court_position_physician_2_trait:1 "$court_position_physician_1_trait$" + court_position_physician_1_trait:1 "[GetTrait('lifestyle_physician').GetName( ROOT.Char )]" + court_position_mystic_3_trait:1 "$court_position_mystic_1_trait$" + court_position_mystic_2_trait:1 "$court_position_mystic_1_trait$" + court_position_mystic_1_trait:1 "[GetTrait('lifestyle_mystic').GetName( ROOT.Char )]" + court_position_hunter_3_trait:1 "$court_position_hunter_1_trait$" + court_position_hunter_2_trait:1 "$court_position_hunter_1_trait$" + court_position_hunter_1_trait:1 "[GetTrait('lifestyle_hunter').GetName( ROOT.Char )]" + court_position_reveler_3_trait:0 "$court_position_reveler_1_trait$" + court_position_reveler_2_trait:0 "$court_position_reveler_1_trait$" + court_position_reveler_1_trait:0 "[GetTrait('lifestyle_reveler').GetName( ROOT.Char )]" + court_position_intellect_good_3_trait:0 "[GetTrait('intellect_good_3').GetName( ROOT.Char )]" + court_position_intellect_good_2_trait:0 "[GetTrait('intellect_good_2').GetName( ROOT.Char )]" + court_position_intellect_good_1_trait:0 "[GetTrait('intellect_good_1').GetName( ROOT.Char )]" + court_position_physique_good_3_trait: "[GetTrait('physique_good_3').GetName( ROOT.Char )]" + court_position_physique_good_2_trait: "[GetTrait('physique_good_2').GetName( ROOT.Char )]" + court_position_physique_good_1_trait: "[GetTrait('physique_good_1').GetName( ROOT.Char )]" + court_position_strong_trait: "[GetTrait('strong').GetName( ROOT.Char )]" + court_position_loyal_trait: "[GetTrait('loyal').GetName( ROOT.Char )]" + court_position_patient_trait:0 "[GetTrait('patient').GetName( ROOT.Char )]" + court_position_calm_trait: "[GetTrait('calm').GetName( ROOT.Char )]" + court_position_impatient_trait:0 "[GetTrait('impatient').GetName( ROOT.Char )]" + court_position_generous_trait:0 "[GetTrait('generous').GetName( ROOT.Char )]" + court_position_greedy_trait:0 "[GetTrait('greedy').GetName( ROOT.Char )]" + court_position_profligate_trait:0 "[GetTrait('profligate').GetName( ROOT.Char )]" + court_position_scholar_trait:0 "[GetTrait('scholar').GetName( ROOT.Char )]" + court_position_shrewd_trait:0 "[GetTrait('shrewd').GetName( ROOT.Char )]" + court_position_theologian_trait: "[GetTrait('theologian').GetName( ROOT.Char )]" + court_position_architect_trait:0 "[GetTrait('architect').GetName( ROOT.Char )]" + court_position_architect_study_experience:0 "Has studied books on architecture" + court_position_gregarious_trait:0 "[GetTrait('gregarious').GetName( ROOT.Char )]" + court_position_diplomat_trait:0 "[GetTrait('diplomat').GetName( ROOT.Char )]" + court_position_poet_trait:0 "[GetTrait('lifestyle_poet').GetName( ROOT.Char )]" + court_position_no_poet_trait: "Does #bold not#! have the [GetTrait('lifestyle_poet').GetName( ROOT.Char )] [trait|E]" + court_position_blademaster_3_trait:1 "$court_position_blademaster_1_trait$" + court_position_blademaster_2_trait:1 "$court_position_blademaster_1_trait$" + court_position_blademaster_1_trait:1 "[GetTrait('lifestyle_blademaster').GetName( ROOT.Char )]" + court_position_shieldmaiden_trait:0 "[GetTrait('shieldmaiden').GetName( ROOT.Char )]" + court_position_brave_trait:0 "[GetTrait('brave').GetName( ROOT.Char )]" + court_position_craven_trait:0 "[GetTrait('craven').GetName( ROOT.Char )]" + court_position_blind_trait:0 "[GetTrait('blind').GetName( ROOT.Char )]" + court_position_infirm_trait:0 "[GetTrait('infirm').GetName( ROOT.Char )]" + court_position_maimed_trait:0 "[GetTrait('maimed').GetName( ROOT.Char )]" + court_position_wounded_3_trait:0 "[GetTrait('wounded_3').GetName( ROOT.Char )]" + court_position_wounded_2_trait:0 "[GetTrait('wounded_2').GetName( ROOT.Char )]" + court_position_administrator_trait:0 "[GetTrait('administrator').GetName( ROOT.Char )]" + court_position_family_first_trait: "[GetTrait('family_first').GetName( ROOT.Char )]" + court_position_shy_trait:0 "[GetTrait('shy').GetName( ROOT.Char )]" + court_position_gluttonous_trait:0 "[GetTrait('gluttonous').GetName( ROOT.Char )]" + court_position_comfort_eater_trait:0 "[GetTrait('comfort_eater').GetName( ROOT.Char )]" + court_position_inappetetic_trait:0 "[GetTrait('inappetetic').GetName( ROOT.Char )]" + court_position_torturer_trait:0 "[GetTrait('torturer').GetName( ROOT.Char )]" + court_position_sadistic_trait:0 "[GetTrait('sadistic').GetName( ROOT.Char )]" + court_position_callous_trait: "[GetTrait('callous').GetName( ROOT.Char )]" + court_position_fickle_trait: "[GetTrait('fickle').GetName( ROOT.Char )]" + court_position_clergy_trait:0 "Is part of the [clergy|E]" + court_position_completed_inspiration:0 "Has completed an [inspiration|E]" + court_position_high_skills_trait:0 "Very skilled" + court_position_gardener_trait:0 "[GetTrait('lifestyle_gardener').GetName( ROOT.Char )]" + court_position_herbalist_trait:0 "[GetTrait('lifestyle_herbalist').GetName( ROOT.Char )]" + court_position_overseer_trait:0 "[GetTrait('overseer').GetName( ROOT.Char )]" + court_position_organizer_trait: "[GetTrait('organizer').GetName( ROOT.Char )]" + court_position_gallant_trait:0 "[GetTrait('gallant').GetName( ROOT.Char )]" + court_position_tradition_music_theory:0 "$tradition_music_theory_name$ [culture_tradition|E]" + court_position_just_trait:0 "[GetTrait('just').GetName( ROOT.Char )]" + court_position_arbitrary_trait:0 "[GetTrait('arbitrary').GetName( ROOT.Char )]" + court_position_temperate_trait:0 "[GetTrait('temperate').GetName( ROOT.Char )]" + court_position_tradition_culinary_art:0 "$tradition_culinary_art_name$ [culture_tradition|E]" + court_position_compassionate_trait:0 "[GetTrait('compassionate').GetName( ROOT.Char )]" + court_position_avaricious_trait:0 "[GetTrait('avaricious').GetName( ROOT.Char )]" + court_position_schemer_trait: "[GetTrait('schemer').GetName( ROOT.Char )]" + court_position_trusting_trait:0 "[GetTrait('trusting').GetName( ROOT.Char )]" + court_position_deceitful_trait:0 "[GetTrait('deceitful').GetName( ROOT.Char )]" + court_position_honest_trait:0 "[GetTrait('honest').GetName( ROOT.Char )]" + court_position_stubborn_trait:0 "[GetTrait('stubborn').GetName( ROOT.Char )]" + court_position_paranoid_trait:0 "[GetTrait('paranoid').GetName( ROOT.Char )]" + court_position_reclusive_trait:0 "[GetTrait('reclusive').GetName( ROOT.Char )]" + court_position_athletic_trait:0 "[GetTrait('athletic').GetName( ROOT.Char )]" + court_position_zealous_trait: "[GetTrait('zealous').GetName( ROOT.Char )]" + court_position_murderer_trait: "[GetTrait('murderer').GetName( ROOT.Char )]" + court_position_order_member_trait: "[GetTrait('order_member').GetName( ROOT.Char )]" + court_position_faith_warrior_trait: "[GetTrait('faith_warrior').GetName( ROOT.Char )]" + court_position_diligent_trait:0 "[GetTrait('diligent').GetName( ROOT.Char )]" + court_position_lazy_trait:0 "[GetTrait('lazy').GetName( ROOT.Char )]" + court_position_reveler_trait: "[GetTrait('lifestyle_reveler').GetName( ROOT.Char )]" + court_position_flagellant_trait: "[GetTrait('flagellant').GetName( ROOT.Char )]" + court_position_seducer_trait: "[GetTrait('seducer').GetName( ROOT.Char )]" + court_position_improvident_trait: "[GetTrait('improvident').GetName( ROOT.Char )]" + court_position_strategist_trait: "[GetTrait('strategist').GetName( ROOT.Char )]" + court_position_logistician_trait:0 "[GetTrait('logistician').GetName( ROOT.Char )]" + court_position_forder_trait:0 "[GetTrait('forder').GetName( ROOT.Char )]" + court_position_lots_of_travel:0 "Travel Experience" + court_position_pilgrim_trait:0 "[GetTrait('pilgrim').GetName( ROOT.Char )]" + court_position_hajjaj_trait:0 "[GetTrait('hajjaj').GetName( ROOT.Char )]" + court_position_adventurer_trait:0 "[GetTrait('adventurer').GetName( ROOT.Char )]" + court_position_clubfooted_trait:0 "[GetTrait('clubfooted').GetName( ROOT.Char )]" + court_position_incapable_trait:0 "[GetTrait('incapable').GetName( ROOT.Char )]" + court_position_flexible_leader_trait:0 "[GetTrait('flexible_leader').GetName( ROOT.Char )]" + court_position_forest_fighter_trait:0 "[GetTrait('forest_fighter').GetName( ROOT.Char )]" + court_position_open_terrain_expert_trait:0 "[GetTrait('open_terrain_expert').GetName( ROOT.Char )]" + court_position_rough_terrain_expert_trait:0 "[GetTrait('rough_terrain_expert').GetName( ROOT.Char )]" + court_position_desert_warrior_trait:0 "[GetTrait('desert_warrior').GetName( ROOT.Char )]" + court_position_jungle_stalker_trait:0 "[GetTrait('jungle_stalker').GetName( ROOT.Char )]" + court_position_winter_soldier_trait:0 "[GetTrait('winter_soldier').GetName( ROOT.Char )]" + court_position_commander_traits: "Has any [commander_trait|E]" + court_position_whole_of_body_trait:0 "[GetTrait('whole_of_body').GetName( ROOT.Char )]" + court_position_traveler_trait:0 "[GetTrait('lifestyle_traveler').GetName( ROOT.Char )]" + court_position_traveler_trait_experienced:0 "[GetTrait('lifestyle_traveler').GetName( ROOT.Char )]" + court_position_traveler_trait_experienced_danger:0 "[GetTrait('lifestyle_traveler').GetName( ROOT.Char )]" + court_position_humble_trait: "[GetTrait('humble').GetName( ROOT.Char )]" + court_position_arrogant_trait: "[GetTrait('arrogant').GetName( ROOT.Char )]" + court_position_wrathful_trait: "[GetTrait('wrathful').GetName( ROOT.Char )]" + court_position_reaver_trait: "[GetTrait('reaver').GetName( ROOT.Char )]" + court_position_military_engineer_trait: "[GetTrait('military_engineer').GetName( ROOT.Char )]" + court_position_aggressive_attacker_trait: "[GetTrait('aggressive_attacker').GetName( ROOT.Char )]" + court_position_unyielding_defender_trait: "[GetTrait('unyielding_defender').GetName( ROOT.Char )]" + court_position_reckless_trait: "[GetTrait('reckless').GetName( ROOT.Char )]" + court_position_holy_warrior_trait: "[GetTrait('holy_warrior').GetName( ROOT.Char )]" + court_position_cautious_leader_trait: "[GetTrait('cautious_leader').GetName( ROOT.Char )]" + court_position_ambitious_trait: "[GetTrait('ambitious').GetName( ROOT.Char )]" + court_position_beastmaster_modifier:0 "$ep2_beastmaster_modifier$" + court_position_speed:0 "[travel_speed|E] Contribution" + court_position_safety:0 "[travel_safety|E] Contribution" + court_position_soulmate: "Is your [soulmate|E]" + court_position_best_friend: "Is your [best_friend|E]" + court_position_friend: "Is your [friend|E]" + court_position_improved_by_camp_fire_capering_fools: "[GetDomicileBuilding('camp_fire_capering_fools').GetName]" + seneschal_improve_court_aptitude_desc: "[GetCourtPositionType('seneschal_court_position').GetName()] Organizing Court" + yeke_jarquchi_improve_court_aptitude_desc: "[GetCourtPositionType('yeke_jarquchi_court_position').GetName()] Organizing Court" + court_position_merit_level: "[merit_level|E]" + court_position_disciples: "[disciples|E]" + court_position_your_disciple: "Your [disciple|E]" + court_position_tgp_dynasty_legacy: "[GetDynastyPerk( 'tgp_chinese_legacy_5' ).GetName]" + court_position_surveyor_trait: "[GetTrait('lifestyle_surveyor').GetName( ROOT.Char )]" + + court_position_poet_is_advancement: "Member of [GetSituation('dynastic_cycle').GetTopParticipantGroupByKey( 'advancement_movement' ).GetName]" + court_position_liege_is_advancement: "Liege is a member of [GetSituation('dynastic_cycle').GetTopParticipantGroupByKey( 'advancement_movement' ).GetName]" + court_position_tradition_poetry:0 "$tradition_poetry_name$ [culture_tradition|E]" + court_position_tradition_horse_lords:0 "$tradition_horse_lords_name$ [culture_tradition|E]" + court_position_tradition_caravaneers:0 "$tradition_caravaneers_name$ [culture_tradition|E]" + court_position_tradition_saharan_nomads:0 "$tradition_saharan_nomads_name$ [culture_tradition|E]" + court_position_tradition_desert_nomads:0 "$tradition_desert_nomads_name$ [culture_tradition|E]" + + court_physician_court_position:0 "Personal Physician" + + court_physician_tradition_bonus:0 "From [culture_tradition|E]" + court_physician_court_position_desc:1 "The $court_physician_court_position$ is responsible for the health and well-being of the [court|E] they are in. They will treat disease and suture wounds to the best of their abilities." + court_physician_employer_custom_effect_description:4 "$BULLET$Performs [medical_treatments|E]" + court_physician_not_employed_or_away_tt: "You do not have a [GetCourtPositionType('court_physician_court_position').GetName()], or they are not with you" + + hire_physician_decision:0 "Search for Physician" + hire_physician_decision_tooltip:3 "Your servants will suggest a number of suitable candidates for the position of [GetCourtPositionType('court_physician_court_position').GetName()]" + hire_physician_decision_desc: "A $court_physician_court_position$ is essential to care for the sick and wounded at my [ROOT.Char.Custom('GetCourtLower')]. I will ask my servants to bring forth a number of suitable candidates." + hire_physician_decision_effect_tooltip:4 "You will be presented with a group of [GetCourtPositionType('court_physician_court_position').GetName()] candidates and may hire one of them for a fee and a monthly salary of [gold_i][SCOPE.ScriptValue('court_position_physician_salary')]" + hire_physician_decision_confirm:0 "Start the search" + + antiquarian_employer_custom_effect_description: "[SelectLocalization( HasDlcFeature( 'court_artifacts' ), 'antiquarian_employer_custom_effect_reforge_description', '' )]$BULLET$Unlocks the #V $commission_artifact_decision$#! [decision|E]\n$BULLET$Protects [artifacts|E] during [sieges|E] and [raids|E]" + antiquarian_employer_custom_effect_reforge_description: "$BULLET$Enables you to [reforge|E] [artifacts|E]\n" + + chief_eunuch_court_position:1 "Chief Eunuch" + chief_eunuch_court_position_desc:1 "The $chief_eunuch_court_position$ is a trusted servant responsible for the eunuchs at court. Not much goes on that they don't hear about, both among the servants and the royals." + keeper_of_swans_court_position:0 "Keeper of the Swans" + keeper_of_swans_court_position_desc:1 "The $keeper_of_swans_court_position$ is in charge of the royal swans. Keeping count on the number of feathered marvels that their Liege lays claim to and providing them care; this position comes with grave responsibilities." + + master_of_horse_court_position:0 "Master of the Horse" + master_of_horse_court_position_desc:1 "The $master_of_horse_court_position$ is responsible for their Liege's majestic steeds and stables. They have their work cut out for them since a well-kept horse is a boon both on the battlefield and on the road." + master_of_horse_oversee_breeding: "Oversee Breeding" + master_of_horse_oversee_breeding_desc: "This character is tasked with overseeing the breeding of the royal stables." + master_of_horse_mightiest_warhorse: "Warhorse Grooming" + master_of_horse_mightiest_warhorse_desc: "Only the best of steeds is worthy of a warlike ruler." + + court_jester_court_position:0 "Court Jester" + court_jester_employer_custom_effect_description:1 "$BULLET$Unlocks the #V $jester_entertainment_decision$#! [decision|E]" + court_jester_court_position_desc:1 "A $court_jester_court_position$ – a fool – is there to entertain both their Liege and any guests visiting the court. While a clever turn of phrase can be appreciated from time to time a nasty fall always wins laughter." + master_of_hunt_court_position:0 "Master of the Hunt" + master_of_hunt_court_position_nomadic: "Master of the Chase" + master_of_hunt_employer_custom_effect_description:4 "$BULLET$[GetActivityType('activity_hunt').GetName] [hunt_success_chance_no_prefix|E] increases with [aptitude|E]" + master_of_hunt_employee_custom_effect_description: "Increased [hunt_success_chance_no_prefix|E] in [GetActivityType('activity_hunt').GetName]" + master_of_hunt_court_position_desc:1 "The $master_of_hunt_court_position$ is responsible for any hunting parties that members of their Liege's court arrange. They are also in charge of the kennels and the dogs within it." + master_of_hunt_court_position_nomadic_desc: "The $master_of_hunt_court_position_nomadic$ is responsible for great hunting parties, and ensuring a successful hunt for their liege." + high_almoner_court_position:0 "High Almoner" + high_almoner_court_position_desc:1 "The $high_almoner_court_position$ is in charge of distributing alms to the deserving poor and other subjects in need." + cupbearer_court_position:0 "Cup-Bearer" + cupbearer_employer_custom_effect_description:3 "$BULLET$Chance of stopping Poison [GetScheme('murder').GetTypeName] [schemes|E]#!" + cupbearer_court_position_desc:1 "A $cupbearer_court_position$ is responsible for pouring drinks at the royal table and to make sure that no one's cup ever runs dry." + + seneschal_court_position:0 "Seneschal" + seneschal_court_position_desc:1 "The $seneschal_court_position$ serves an important role in the day-to-day life of the royal household, administering the servants and keeping everything running smoothly." + seneschal_improve_court: "Organize Court" + seneschal_improve_court_desc: "This character is organizing the court, to ensure everyone are doing their job." + seneschal_improve_court_task_tt: "@aptitude:4:color_green![aptitude|E] of other [court_positions|E]: #p +[SCOPE.ScriptValue('seneschal_improve_court_value')|0]#!" + seneschal_improve_court_task_fallback_tt: "@aptitude:4:color_green![aptitude|E] of other [court_positions|E]: #p +2/+10#!" + seneschal_improve_domain: "Manage Domain" + seneschal_improve_domain_desc: "This character is tasked with handling the realm of their liege." + seneschal_handling_estate: "Handle the Estate" + seneschal_handling_estate_desc: "This character is tasked with taking care of their liege's estate." + + antiquarian_court_position:0 "Antiquarian" + antiquarian_court_position_desc:2 "The $antiquarian_court_position$ is responsible for the upkeep, care, and procurement of artifacts." + + court_tutor_court_position:0 "Tutor" + court_tutor_court_position_desc:1 "The $court_tutor_court_position$ is in charge of the [education|E] of all children at court, and their skill will influence how much they influence the students. Children can still have individual [guardians|E]." + court_tutor_employer_custom_effect_description:3 "$BULLET$Acts as [guardian|E] for [children|E] without one\n$BULLET$Unlocks the #V $make_child_learn_language_interaction$#! [interaction|E]" + court_tutor_improve_others: "Teach Court" + court_tutor_improve_others_desc: "This character is tasked with assisting the rest of the court." + court_tutor_improve_others_title: "Taught by [ROOT.Char.GetName]" + court_tutor_improve_others_notification_desc: "[target_character.GetShortUIName|U] [CharHaveHas( target_character )] improved [CharYourHerHis( target_character )] skills with the help of [ROOT.Char.GetShortUIName]" + court_tutor_improve_others_fallback_tt: "[liege|E], liege's [heir|E], or other [court_position|E] holders at [court|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E] or [traits|E] every month" + court_tutor_teach_kids: "Educate Children" + court_tutor_teach_kids_desc: "This character is going above and beyond in their duty to educate the children of the court." + court_tutor_teach_kids_title: "Tutor Educates Child" + court_tutor_teach_kids_notification_desc: "Your [court_owner.Custom2('RelationToMeShort', SCOPE.sC('child') )] has been taught by [court_tutor_scope.GetShortUIName]" + court_tutor_teach_kids_notification_desc_you: "You have been taught by [court_tutor_scope.GetShortUIName]" + court_tutor_teach_kids_tt: "[children|E] at [court|E] have a chance to have one of their [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E] increased by #p +1#! or #p +2#! every year" + + royal_architect_court_position:0 "Royal Architect" + royal_architect_court_position_desc:1 "The $royal_architect_court_position$ oversees any prestigious building projects within the realm; not a brick is laid, nor a second spent, without their express permission." + royal_architect_fortify_lands: "Fortify Lands" + royal_architect_fortify_lands_desc: "This character is tasked with ensuring the safety of their liege's lands and people." + royal_architect_public_works: "Public Works" + royal_architect_public_works_desc: "This character is tasked with managing the development of the capital city." + + court_poet_court_position:0 "Court Poet" + court_poet_employer_custom_effect_description:2 "$BULLET$May randomly become [inspired|E]" + court_poet_court_position_desc:1 "The $court_poet_court_position$ is a connoisseur of words and verse, providing their Liege and all at court with entertainment, intellectual stimulation, and emotional experiences." + poet_inspired_message:0 "Inspiration Strikes!" + poet_inspired_effect:0 "Your [GetCourtPositionType('court_poet_court_position').GetName()] [inspired_poet.GetFirstName] gained an [inspiration|E]" + courtier_inspired_message: "$poet_inspired_message$" + courtier_inspired_effect: "Your [courtier|E] [inspired_courtier.GetFirstName] gained an @inspiration_icon![inspiration|E]" + court_poet_skald: "Court Skald" + + bodyguard_court_position:0 "Bodyguard" + bodyguard_court_position_nomadic: "Kheshig" + bodyguard_employer_custom_effect_description:3 "$BULLET$Has a chance to prevent Assassination [GetScheme('murder').GetTypeName] [schemes|E]#!\n#indent_newline:3 $BULLET$Reduces your risk to die or be captured in [battles|E] you're both fighting in#!#!" + stooge_employer_custom_effect_description: "$BULLET$Unlocks special options in events\n#indent_newline:3 $BULLET$Unlocks the $humiliate_the_stooge_decision$ [decision|E]#!#!" + bodyguard_court_position_desc:1 "A $bodyguard_court_position$ is the final line of defense against any and all attackers. Where their charge goes they follow, and they will not hesitate to put themselves in the way of any danger that might be lurking out there." + bodyguard_court_position_nomadic_desc: "A $bodyguard_court_position_nomadic$ has the honor of defending their liege, both during battle and at peace. Split into a day guard and a night guard, they are ready to put their life on the line at all times." + + champion_court_position:1 "Personal Champion" + champion_employer_custom_effect_description:3 "$BULLET$Can take your place in some [single_combat_duel_plural|E]\n[AddLocalizationIf( HasDlcFeature( 'tours_and_tournaments' ), 'champion_employer_custom_effect_description_TOTO_DLC' )]" + champion_employer_custom_effect_description_TOTO_DLC:1 "$BULLET$Earns you [prestige|E] when competing in a [GetActivityType( 'activity_tournament' ).GetName]" + champion_court_position_desc:1 "A $champion_court_position$ is a skilled and deadly fighter that can represent their Liege in duels." + champion_compete_task: "Compete in Name" + champion_compete_task_desc: "This character is actively taking part in local tournaments around the realm in their liege's name." + champion_exercise_ruler: "Exercise with Ruler" + champion_exercise_ruler_desc: "This character is tasked with ensuring their liege is healthy and in shape." + champion_exercise_ruler_fallback_tt: "[liege|E] may gain [prowess_i][prowess_skill|E] every month" + champion_exercise_ruler_title: "Exercise with [ROOT.Char.GetShortUIName]" + champion_exercise_ruler_notification_desc: "[liege.GetShortUIName|U] [CharHaveHas( liege )] been taught by [ROOT.Char.GetShortUIName]" + champion_improve_self: "Improve Skills" + champion_improve_self_desc: "This character is focusing on improving their skills as a personal champion." + champion_improve_self_fallback_tt: "Every month this character has a chance of gaining [GetTrait('tourney_participant').GetName( GetNullCharacter )] [trait_level_track_xp|E] or [prowess_i][prowess_skill|E]" + + court_musician_court_position:0 "Court Musician" + court_musician_employer_custom_effect_description:2 "$BULLET$Increases [opinion|E] gain when hosting a [GetActivityType('activity_feast').GetName]" + court_musician_court_position_desc:1 "A $court_musician_court_position$ is an artist who sings and plays instruments to entertain their Liege and the court." + food_taster_court_position:0 "Food Taster" + food_taster_employer_custom_effect_description:3 "$BULLET$Chance of stopping Poison [GetScheme('murder').GetTypeName] [schemes|E]#!" + food_taster_court_position_desc:1 "A $food_taster_court_position$ has the solemn duty to ensure that their Liege's plate never is touched by poison, and if some nefarious powder or liquid nevertheless makes it into the meal... Well, that's why the food taster has to taste the food before the meal begins." + lady_in_waiting_court_position:0 "Lady-in-waiting" + lady_in_waiting_court_position_desc:1 "A $lady_in_waiting_court_position$ is an assistant and companion to a Queen or Empress, attending to her every need and fulfilling every whim." + + executioner_court_position:0 "Executioner" + executioner_employer_custom_effect_description:2 "$BULLET$Can publicly [execute|E] [prisoners|E] for increased [control|E] and [county_opinion|E]\n@warning_icon! #X The character's crimes are forgiven#!" + executioner_court_position_desc:1 "Executioners are criminals who, in exchange for their freedom, have to execute any and all enemies to the throne. Some would call it an honor, some a burden." + executioner_terrify_court: "Terrify Court" + executioner_terrify_court_desc: "This character is paraded around in court to ensure that everyone knows that they are only one step away from the chopping block." + + garuda_court_position:0 "Garuda" + garuda_employer_custom_effect_description:1 "$BULLET$Reduces your risk to die or be captured in battles you're both fighting in" + garuda_court_position_desc:0 "This knight has sworn to fulfill the will of his liege or die trying. Just as the mythological $garuda_court_position$ bird bore the weight of Vishnu, the $garuda_court_position$ warriors bear the sovereignty of the monarch." + court_gardener_court_position:0 "Court Gardener" + court_gardener_court_position_desc:0 "The $court_gardener_court_position$ is responsible for the well-being of the gardens belonging to their liege, pouring time and skill into making them truly flourish." + chief_qadi_court_position:0 "Chief Qadi" + chief_qadi_court_position_desc:0 "The $chief_qadi_court_position$ is the ultimate judge of the realm, responsible for applying Islamic law in various disputes and legal matters." + cultural_emissary_court_position:0 "Cultural Emissary" + cultural_emissary_court_position_desc:0 "The purpose of the $cultural_emissary_court_position$ is to promote understanding between different cultures by way of celebration and reverence." + court_artificer_court_position:0 "Court Artificer" + court_artificer_court_position_desc:0 "A $court_artificer_court_position$ is someone who's proven themselves able to craft great things. While they mostly lull around in your court, the hope is for inspiration to strike once more." + court_artificer_employer_custom_effect_description:2 "$BULLET$Has a chance to become [inspired|E] again (based on [aptitude|E])\n@alert_icon! #alert_trial Will leave the [court|E] if fired#!" + court_artificer_inspired_effect:0 "Your [GetCourtPositionType('court_artificer_court_position').GetName()] [artificer.GetFirstName] gained an [inspiration|E]" + has_an_inspiration:0 "Has an active [inspiration|E]" + has_a_completed_inspiration:0 "Has previously completed an [inspiration|E]" + COURT_POSITIONS_YOUR_SALARY:0 "$COURT_POSITION$" + does_not_have_a_full_time_job:0 "Is #bold not#! already employed in a full time [court_position|E] or as a [councillor|E]" + none_does_not_have_a_full_time_job: "They are #bold not#! already employed as a [councillor|E], camp [officer|E], or in a full time [court_position|E]" + IS_NOT_APPLICABLE_DIARCH_COURT_POSITION: "They are #bold not#! currently [sharing_power|E] or in a [line_of_succession|E] to [share_power|E]" + IS_NOT_GONE_ADVENTURING: "They have #bold not#! gone adventuring" + none_has_no_particular_noble_roots_trigger: "They are [lowborn|E] or of an insignificant [dynasty|E]" + faith_allows_recruitment_court_position: "They are #bold not#! [clergy|E], or their [liege|E]'s faith allows recruitment of [clergy|E]" + is_imprisoned_court_position_executioner: "They are imprisoned and #bold not#! currently employed as an [GetCourtPositionType('executioner_court_position').GetName()]" + faith_allows_master_assassin: "Their [faith|E]:\n$BULLET$Has the [GetFaithDoctrine('tenet_fp3_fedayeen').GetBaseName] [core_tenet|E]\n$BULLET$Does #bold not#! have the [GetFaithDoctrine('tenet_pacifism').GetBaseName] [core_tenet|E] or the [GetFaithDoctrine('tenet_dharmic_pacifism').GetBaseName] [core_tenet|E]" + is_not_a_ceremonial_liege_trigger: "They are #bold not#! a [ceremonial_liege|E]" + + clan_tax_collector_court_position: "Tax Collector" + clan_tax_collector_court_position_desc: "The $clan_tax_collector_court_position$ is tasked with organizing and collecting taxes, making sure that [clan|E] [vassals|E] pay their due diligence." + court_position_khvarenah_legacy_4: "Employer's [dynasty|E] has [GetDynastyPerk( 'fp3_khvarenah_legacy_4' ).GetName]" + court_position_khvarenah_legacy_1: "[dynasty|E] has [GetDynastyPerk( 'fp3_khvarenah_legacy_1' ).GetName]" + court_position_innovation_mural_sextant: "[dynasty|E] has $fp3_innovation_mural_sextant$" + capable_magistrates_modifier: "Capable Magistrates" + opinion_of_liege: "Opinion of [liege|E]" + + cave_hermit_court_position:0 "Garden Hermit" + cave_hermit_court_position_desc:0 "The $cave_hermit_court_position$ is someone that will inhabit your castle grounds and entertain your guests with prophecies and riddles. Some say they may be actual mystics." + cave_hermit_court_position_tt:0 "You've found a #V [GetCourtPositionType( 'cave_hermit_court_position' ).GetName()]#! during your [travels|E]" + + travel_leader_court_position:0 "Caravan Master" + travel_leader_court_position_desc:0 "The $travel_leader_court_position$ assists you when traveling and takes charge of all itineraries. They aim to ensure you arrive at your destination safely and on-time." + + hire_travel_leader_decision:0 "Search for $travel_leader_court_position$" + hire_travel_leader_decision_tooltip:0 "Your servants will suggest a number of suitable candidates for the position of [GetCourtPositionType('travel_leader_court_position').GetName()]" + travel_leader_court_position_custom_desc: "$EFFECT_LIST_BULLET$Provides @travel_safety_icon![travel_safety|E] and @travel_speed_icon![travel_speed|E] during [travels|E]" + hire_travel_leader_decision_desc:0 "A good $travel_leader_court_position$ is the key to a successful journey. I will request for a number of suitable candidates to be suggested." + hire_travel_leader_decision_confirm:0 "Start the search" + caravan_master_prepare_travels: "Stock Up for Travels" + caravan_master_prepare_travels_desc: "This character is tasked with preparing for their liege's next journey." + caravan_master_prepare_travels_tt: "@travel_safety_icon![travel_safety|E] and @travel_speed_icon![travel_speed|E] will be increased by #P +[SCOPE.ScriptValue('caravan_master_prepare_travels_current_value')]#! next time you [travel|E] #weak (This value is increased by #P +[SCOPE.ScriptValue('caravan_master_prepare_travels_change_value')]#! every month, up to #P +[SCOPE.ScriptValue('caravan_master_prepare_travels_max_value')]#!)#!" + caravan_master_prepare_travels_fallback_tt: "@travel_safety_icon![travel_safety|E] and @travel_speed_icon![travel_speed|E] will be increased by #P +[SCOPE.ScriptValue('caravan_master_prepare_travels_current_value_employer')]#! next time you [travel|E] #weak (The value is increased by #P +0.3/+2#! every month, up to #P +3/+20#!)#!" + prepare_travels_modifier: "Prepared Journey" + prepare_travels_modifier_desc: "A caravan master prepared for this travel ahead of time." + prepare_travels_modifier_scale_desc: "\t#weak Increased by Caravan Master Court Position Task#!" + MODIFIER_DEFINITION_PREPARE_TRAVELS_VALUE: "\n#emp Multiplier:#! #bold $MULTIPLIER|0$#!" + caravan_master_prepare_armies: "Prepare Armies" + caravan_master_prepare_armies_desc: "This character is tasked with preparing the armies for their forays into foreign realms." + caravan_master_improve_self: "Improve Skills" + caravan_master_improve_self_desc: "This character is focusing on improving their skills as a caravan master." + caravan_master_improve_self_tt: "Every month this character has a chance of gaining [GetTrait('lifestyle_traveler').GetName( root_scope )] [trait_level_track_xp|E], [martial_i][martial_skill|E], or [stewardship_i][stewardship_skill|E]" + caravan_master_improve_self_fallback_tt: "Every month this character has a chance of gaining [GetTrait('lifestyle_traveler').GetName( GetNullCharacter )] [trait_level_track_xp|E], [martial_i][martial_skill|E], or [stewardship_i][stewardship_skill|E]" + + wet_nurse_court_position: "Wet Nurse" + wet_nurse_court_position_desc: "A $wet_nurse_court_position$ is a caretaker of your [children|E] and child [hostages|E]." + wet_nurse_employer_custom_effect_description: "$BULLET$[influence_ward_personality|E] Acceptance: #P +10#!\n$BULLET$Reduces chance for [children|E] to contract [illnesses|E]\n$BULLET$Possibility for [child|E] development events" + find_wet_nurse_decision: "Search for $wet_nurse_court_position$" + find_wet_nurse_decision_desc: "A $wet_nurse_court_position$ is a symbol of the court's wealth and prosperity: a woman tasked with nursing children, shielding them from disease, and minding their development. A hale and healthful candidate is essential." + find_wet_nurse_decision_tooltip: "Your servants will suggest a number of suitable candidates for the position of [GetCourtPositionType('wet_nurse_court_position').GetName()]" + find_wet_nurse_decision_confirm: "Start the search" + court_position_has_child: "Has a child" + wet_nurse_age_tt: "They are under the age of #V 46#!" + wet_nurse_instill_virtue: "Instill Virtue" + wet_nurse_instill_virtue_desc: "This character is teaching kids at court what kind of behavior is expected from them." + wet_nurse_instill_virtue_notification_desc: "[ROOT.Char.GetShortUIName] taught [child_character.GetShortUIName] how to behave like a proper [notification_character.GetFaith.GetAdherentName]" + wet_nurse_instill_virtue_fallback_tt: "[children|E] at [court|E] may gain a [virtuous|E] [trait|E] every month" + wet_nurse_promote_relationships: "Promote Friendship" + wet_nurse_promote_relationships_desc: "This character is tasked with ensuring a healthy environment where the children at court can thrive." + wet_nurse_promote_relationships_fallback_tt: "[children|E] at [court|E] may gain [opinion_i][opinion|E] with one another, become [friends|E], or stop being [bullies|E]" + wet_nurse_promote_competition: "Encourage Competition" + wet_nurse_promote_competition_desc: "This character is tasked with ensuring the best have the chance to thrive — even at the cost of the other children if need be." + wet_nurse_promote_competition_fallback_tt: "[children|E] at [court|E] may gain [intrigue_i][intrigue_skill|E] or [prowess_i][prowess_skill|E], but at the cost of [opinion_i][opinion|E] with other children" + + ALL_COURT_POSITIONS_FILTER: "All positions" + COURT_POSITION_HAS_TASKS_FILTER: "Positions with tasks" + + chronicler_court_position: "Court Chronicler" + chronicler_court_position_nomadic_tribal: "Storyteller" + court_position_chronicler: "[GetCourtPositionType('chronicler_court_position').GetName()]" + chronicler_court_position_desc: "The $chronicler_court_position$ is tasked with dedicating the deeds of their employer to paper." + chronicler_court_position_nomadic_tribal_desc: "A $chronicler_court_position_nomadic_tribal$ has the honor of sharing their liege's greatest exploits and tales far and wide." + chronicler_generate_seeds: "Search for Legends" + chronicler_generate_seeds_desc: "Your $chronicler_court_position$ will search the records to find reasons to immortalize you as a legend." + yearly_legend_seed_tt: "Every year you will have a random chance to gain a [legend_seed|E]. Higher levels of [aptitude|E] will increase the chances of this occurring." + chronicler_espouse_legend: "Commend Legend Abroad" + chronicler_espouse_legend_desc: "This character will travel your realm and beyond to convince [vassals|E] and neighboring [rulers|E] to make your legend their [promoted_legend|E]" + yearly_legend_spread_tt: "Every year, one of your [vassals|E] or neighboring [rulers|E] may make your legend their [promoted_legend|E]. Higher levels of [aptitude|E] will increase the chances of this occurring." + + court_position_tourney_participant_trait: "$tourney_participant_horse$" + charioteer_court_position: "Champion Charioteer" + charioteer_court_position_desc: "The $charioteer_court_position$ is a professional chariot racer, sponsored by their employer." + charioteer_employer_custom_effect_description: "$BULLET$Placing 3rd or higher during a [GetActivityType( 'activity_chariot_race' ).GetName] grants [influence|E]" + + bookmaker_court_position: "Bookmaker" + bookmaker_court_position_desc: "The $bookmaker_court_position$ is a professional bookkeeper for handling gambling at [GetActivityType( 'activity_chariot_race' ).GetName]." + bookmaker_employer_custom_effect_description: "$BULLET$Reduces the cost of hosting a [GetActivityType( 'activity_chariot_race' ).GetName] (based on [aptitude|E])\n$BULLET$Provides [gold|E] from bets placed during a [GetActivityType( 'activity_chariot_race' ).GetName]" + + bookmaker_cook_the_books: "Cook the Books" + bookmaker_cook_the_books_desc: "This character will ensure that betting outcomes at a [GetActivityType('activity_chariot_race').GetName] are always in your favor" + bookmaker_cook_the_books.tt: "During the next [GetActivityType('activity_chariot_race').GetName] that you host, your [GetCourtPositionType('bookmaker_court_position').GetName()] will employ some creative arithmetic to lower the amount of [gold|E] paid out for successful wagers — meaning more for the crown." + + bookmaker_distribute_bribes: "Distribute Bribes" + bookmaker_distribute_bribes_desc: "This character will distribute bribes discreetly on your behalf, increasing your influence across the realm." + + charioteer_training: "Chariot Training" + charioteer_training_desc: "This character will train day and night to improve their skills as a charioteer, and gain valuable experience." + charioteer_training_tt: "$charioteer_court_position$ will gain experience in their #high Charioteer#! [trait|E] over time" + + court_position_fickle: "[GetTrait('fickle').GetName( ROOT.Char )]" + court_position_varangian_trait: "[GetTrait('varangian').GetName( ROOT.Char )]" + court_position_fp1_coastal_warriors: "Their [culture|E] has the [GetCultureTradition('tradition_fp1_coastal_warriors').GetName] [tradition|E]" + court_position_hird: "Their [culture|E] has the [GetCultureTradition('tradition_hird').GetName] [tradition|E]" + court_position_fp1_performative_honour: "Their [culture|E] has the [GetCultureTradition('tradition_fp1_performative_honour').GetName] [tradition|E]" + + akolouthos_court_position:0 "Akolouthos" + akolouthos_employer_custom_effect_description: "$BULLET$Increases [GetTrait('varangian').GetName( GetNullCharacter )] [GetCourtPositionType('bodyguard_court_position').GetName()] [aptitude|E] (based on [aptitude|E])\n$BULLET$More eligible [courtiers|E] gain the [GetTrait('varangian').GetName( GetNullCharacter )] and [GetTrait('loyal').GetName( GetNullCharacter )] [traits|E]\n$BULLET$More Varangians will appear\n@warning_icon! #X The Varangians will claim some [gold_i] Gold after the Basileus's death.#!" + akolouthos_court_position_desc: "The $akolouthos_court_position$ commands much of the Byzantine imperial guard, including the famed Varangians, who are most willing to die honorably for their master." + akolouthos_founded_varangians_trigger_tt: "You have founded the Varangians" + + court_position_akolouthos_bonus: "[GetCourtPositionType('akolouthos_court_position').GetName()]" + + court_brewmaster_court_position: "Court Brewmaster" + court_brewmaster_court_position_desc: "The $court_brewmaster_court_position$ is a representative chosen to interact directly with the brewers of the realm, to ensure the liege can get their hands on the best of brews." + court_brewmaster_employer_custom_effect_description: "$BULLET$[GetActivityType( 'activity_feast' ).GetName] costs reduced by #positive_value @gold_icon!-5%#! to #positive_value @gold_icon!-25%#! (based on [aptitude|E])\n$BULLET$[GetActivityType( 'activity_feast' ).GetName] rewards increased by #positive_value +5%#! to #positive_value +25%#! (based on [aptitude|E])" + court_brewmaster_requirement_tt: "A [barony|E] in your [domain|E] has a #color_white [GetBuilding('breweries_01').GetName]#! [building|E] or one of its upgrades" + court_brewmaster_popular_opinion: "Empty the Cellars" + court_brewmaster_popular_opinion_desc: "Increase production across the realm so we can regularly share some of our better brews with our people." + court_brewmaster_court_opinion: "Share with the Court" + court_brewmaster_court_opinion_desc: "Bring out some of the best brews so the court can see what we have." + court_brewmaster_experimental_brew: "Experimental Brew" + court_brewmaster_experimental_brew_desc: "The brewmaster has put together something truly unique and memorable, though... Not necessarily good." + court_brewmaster_experimental_brew_tt: "You gain an #color_yellow Experimental Brew#! for #color_white 6 months#!\n#color_yellow Experimental Brew#! will be changed every #color_white 6 months#!" + court_brewmaster_explanation: "[GetCourtPositionType('court_brewmaster_court_position').GetName]" + court_brewmaster_task_cooldown: "This task cannot be initiated until #color_white [GetCurrentDateWithDiff( GetVarTimeRemaining( liege.MakeScope, 'experimental_brew_cooldown') )]#!" + + court_position_palace_politics: "[GetCultureTradition('tradition_ep3_palace_politics').GetName]" + court_position_north_germanic: "Their culture is of $heritage_north_germanic_name$ [heritage|E]" + court_position_west_germanic: "Their culture is of $heritage_west_germanic_name$ [heritage|E]" + court_position_not_same_culture_heritage: "Different [heritage|E] from [liege|E]'s [culture|E]" + court_position_not_same_culture_language: "Different [language|E] from [liege|E]'s [culture|E]" + + eparch_court_position: "Eparch" + eparch_court_position_desc: "The Eparch is the main administrator and ultimate authority of the capital, second only to the reigning monarch." + eparch_appease_populace: "Appease Populace" + eparch_appease_populace_desc: "The [GetCourtPositionType('eparch_court_position').GetNameNoTooltip()] will attend to the needs of the citizens of the capital." + eparch_support_troops: "Support Troops" + eparch_support_troops_desc: "The [GetCourtPositionType('eparch_court_position').GetNameNoTooltip()] will oversee the organization of the local garrisons and ensure an effective command." + eparch_enforce_public_order: "Enforce Public Order" + eparch_enforce_public_order_desc: "The [GetCourtPositionType('eparch_court_position').GetNameNoTooltip()] will have soldiers patrol the streets to keep the peace and secure public order no matter the cost." + eparch_development: "Develop Capital" + eparch_development_desc: "The [GetCourtPositionType('eparch_court_position').GetNameNoTooltip()] will put the city's administrators to good use to develop and improve the city." + eparch_base_desc: "$EFFECT_LIST_BULLET$[governor_efficiency|E]" + eparch_base_family_desc: "$EFFECT_LIST_BULLET$[governor_efficiency|E] for owners of [estates|E] located in the [capital|E]" + eparch_terrible_desc: "$eparch_base_desc$: #P +2%#!\n$eparch_base_family_desc$: #P +1%#!" + eparch_poor_desc: "$eparch_base_desc$: #P +4%#!\n$eparch_base_family_desc$: #P +2%#!" + eparch_average_desc: "$eparch_base_desc$: #P +6%#!\n$eparch_base_family_desc$: #P +3%#!" + eparch_good_desc: "$eparch_base_desc$: #P +8%#!\n$eparch_base_family_desc$: #P +4%#!" + eparch_excellent_desc: "$eparch_base_desc$: #P +10%#!\n$eparch_base_family_desc$: #P +5%#!" + eparch_range_desc: "$eparch_base_desc$: #P +2%#! to #P +10%#! (based on [aptitude|E])\n$eparch_base_family_desc$: #P +1%#! to #P +5%#! (based on [aptitude|E])" + eparch_distance_trigger_desc: "Governs a [GetPlayer.Custom( 'GetProvinceConcept' )] close to the [capital|E]" + eparch_custom_effect_desc: "$EFFECT_LIST_BULLET$The [GetCourtPositionType('eparch_court_position').GetNameNoTooltip()] will oversee the capital's administration" + eparch_capital_has_grain_dole_desc: "The [capital|E] has [GetModifier('panem_et_circenses_county_modifier').GetNameWithTooltip]" + eparch_capital_bureau: "[GetBuilding('capital_bureau_02').GetTypeName] [building|E] line" + +#CAMP OFFICERS + landless_government_tt: "You are an [adventurer|E]" + camp_with_following_buildings_tt: "You have a [camp|E] with one of the following [buildings|E]:" + officer_positions: "[officer|E] positions" + second_camp_officer: "Second" + second_camp_officer_desc: "A $second_camp_officer$ is the most trusted officer at domicile, aiding the leader as next-in-command. They are responsible for orders and organization in the leader's absence." + second_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('camp_main_01').GetName]" + + quartermaster_camp_officer: "Storekeeper" + quartermaster_camp_officer_desc: "The $quartermaster_camp_officer$ is responsible for ensuring the domicile is well fed and watered. They manage, safeguard, and distribute the provisions as needed." + quartermaster_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('supply_tent_01').GetName]" + + armorer_camp_officer: "Armorer" + armorer_camp_officer_desc: "The $armorer_camp_officer$ is a smith who specializes in helmets and maile. They are responsible for making and mending the garb of the men-at-arms and horses." + armorer_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('supply_tent_smithy').GetName]" + + chief_forager_camp_officer: "Chief Forager" + chief_forager_camp_officer_desc: "The $chief_forager_camp_officer$ is tasked with supplementing the domicile's provisions. They are responsible for organizing parties to gather fare from the local area." + chief_forager_camp_officer_employer_custom_effect_description: "$BULLET$May aid in Gather Provisions [decisions|E]" + chief_forager_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('supply_tent_reserve_provisions').GetName]" + + master_thief_camp_officer: "Master Thief" + master_thief_camp_officer_desc: "The $master_thief_camp_officer$ is a rogue tasked with the varied and morally dubious arts of burglary. They may ensure access to objects otherwise out of reach." + master_thief_camp_officer_employer_custom_effect_description: "$BULLET$Unlocks $steal_back_artifact$ [interaction|E]" + master_thief_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('supply_tent_subdued_gear').GetName]" + + head_porter_camp_officer: "Head Porter" + head_porter_camp_officer_desc: "The $head_porter_camp_officer$ is in charge of transporting the domicile and all its provisions. They ensure everything arrives at the next destination in one piece." + head_porter_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_01').GetName]" + + head_groom_camp_officer: "Head Groom" + head_groom_camp_officer_desc: "The $head_groom_camp_officer$ is charged with the livery of the domicile's horses and beasts of burden. They are responsible for the animal's provender, care, and tack." + head_groom_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_ample_steeds').GetName]" + + huntperson_camp_officer: "Huntsman" + huntperson_camp_officer_desc: "The $huntperson_camp_officer$ is an acolyte in the ways of the horn, hound, and bow. They are responsible for planning and leading the domicile's hunting expeditions." + huntperson_camp_officer_employer_custom_effect_description: "$BULLET$[GetActivityType('activity_hunt').GetName] [hunt_success_chance_no_prefix|E] increases with [aptitude|E]\n$BULLET$Improves [martial|E] [education|E] outcomes for all [children|E] in your domicile\n$BULLET$May aid in Gather Provisions [decisions|E]" + huntperson_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_trackers').GetName]" + + kennelperson_camp_officer: "Kenneler" + kennelperson_camp_officer_desc: "The $kennelperson_camp_officer$ is tasked with the care and training of the domicile's pack of hounds. They keep the dogs healthy and well fed — most of the time." + kennelperson_camp_officer_employer_custom_effect_description: "$BULLET$Enables Toss to Dogs [execution|E] [prisoners|E] method" + kennelperson_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_kennel').GetName]" + + chief_engineer_camp_officer: "Chief Engineer" + chief_engineer_camp_officer_desc: "The $chief_engineer_camp_officer$ is responsible for all tasks requiring a knowledge of mechanisms and machinery. They build and repair siege weapons, and instruct the men in their use." + chief_engineer_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_siege_engineers').GetName]" + + witness_camp_officer: "Witness" + witness_camp_officer_desc: "The $witness_camp_officer$ has the solemn task of recording the deeds and rightful claims of the domicile's leader. They attest to the great deeds and struggles of the domicile." + witness_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_proof_of_claims').GetName]" + + person_haggler_camp_officer: "Man-Haggler" + person_haggler_camp_officer_desc: "The $person_haggler_camp_officer$ is responsible for valuable prisoners, and extracting the greatest possible profit from them. They look to the captives, and handle the ransom negotiations." + person_haggler_camp_officer_employer_custom_effect_description: "$BULLET$[gold|E] gain from ransoming [prisoners|E]: [gold_i]#P +7%#! to [gold_i]#P +33%#! (based on [aptitude|E])\n$BULLET$[gold|E] to pay to ransom your [followers|E]: [gold_i]#P -9%#! to [gold_i]#P -33%#! (based on [aptitude|E])" + person_haggler_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_ransom_cages').GetName]" + + person_haggler_aptitude_effect_1: "$BULLET$ [gold_i][gold|E] from ransoming [prisoners|E]: #P +7%#!\n$BULLET$[gold_i][gold|E] to ransom your [followers|E]: #P -9%#!" + person_haggler_aptitude_effect_2: "$BULLET$ [gold_i][gold|E] from ransoming [prisoners|E]: #P +13%#!\n$BULLET$[gold_i][gold|E] to ransom your [followers|E]: #P -17%#!" + person_haggler_aptitude_effect_3: "$BULLET$ [gold_i][gold|E] from ransoming [prisoners|E]: #P +20%#!\n$BULLET$[gold_i][gold|E] to ransom your [followers|E]: #P -23%#!" + person_haggler_aptitude_effect_4: "$BULLET$ [gold_i][gold|E] from ransoming [prisoners|E]: #P +27%#!\n$BULLET$[gold_i][gold|E] to ransom your [followers|E]: #P -29%#!" + person_haggler_aptitude_effect_5: "$BULLET$ [gold_i][gold|E] from ransoming [prisoners|E]: #P +33%#!\n$BULLET$[gold_i][gold|E] to ransom your [followers|E]: #P -33%#!" + + camp_cook_camp_officer: "Chief Cook" + camp_cook_camp_officer_desc: "The $camp_cook_camp_officer$ rustles up hearty grub, keeping the domicile well fed and in good spirits. They are also responsible for preparing the officers' meals." + camp_cook_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('mess_tent_01').GetName]" + + master_bard_camp_officer: "Master Bard" + master_bard_camp_officer_desc: "The $master_bard_camp_officer$ entertains the domicile and its officers with ballads and tall tales. Their efforts may also go some way to immortalizing an adventurer's grand deeds." + master_bard_camp_officer_employer_custom_effect_description: "$BULLET$Unlocks $send_poem_interaction$ [interaction|E]" + master_bard_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('camp_fire_trailing_musicians').GetName]" + + stooge_camp_officer: "Stooge" + stooge_camp_officer_desc: "The $stooge_camp_officer$ is the involuntary focus of the domicile's irritation and cruel humor. Their maltreatment is a great source of morale and the origin of many risible fireside yarns." + master_of_arms_camp_officer: "Master of Arms" + master_of_arms_camp_officer_desc: "The $master_of_arms_camp_officer$ is tasked with keeping the fighting men in line, both at domicile and on the battlefield. They are responsible for discipline and training." + master_of_arms_employer_custom_effect_description: "$BULLET$Unlocks $train_for_tournament_decision_name$ [decision|E]#!" + master_of_arms_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_01').GetName]" + + light_cavalry_captain_camp_officer: "Light Cavalry Captain" + light_cavalry_captain_camp_officer_desc: "The $light_cavalry_captain_camp_officer$ is commander of the domicile's swiftest horsemen. They are responsible for the contingent's leadership, training, and tactics." + light_cavalry_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_horse_run').GetName]" + + camelry_captain_camp_officer: "Camelry Captain" + camelry_captain_camp_officer_desc: "The $camelry_captain_camp_officer$ commands the domicile's camel-riders. They are responsible for the contingent's leadership, training, and tactics." + camelry_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_camel_run').GetName]" + + elephantry_captain_camp_officer: "Elephantry Captain" + elephantry_captain_camp_officer_desc: "The $elephantry_captain_camp_officer$ commands the domicile's mahouts. They are responsible for the contingent's leadership, training, and tactics." + elephantry_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_elephantry_reserve').GetName]" + + heavy_cavalry_captain_camp_officer: "Heavy Cavalry Captain" + heavy_cavalry_captain_camp_officer_desc: "The $heavy_cavalry_captain_camp_officer$ commands the domicile's armored chargers. They are responsible for the contingent's leadership, training, and tactics." + heavy_cavalry_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_nightly_barding_drills').GetName]" + + horse_archer_captain_camp_officer: "Horse Archer Captain" + horse_archer_captain_camp_officer_desc: "The $horse_archer_captain_camp_officer$ commands the domicile's mounted skirmishers. They are responsible for the contingent's leadership, training, and tactics." + horse_archer_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_life_in_the_saddle').GetName]" + + archer_captain_camp_officer: "Archer Captain" + archer_captain_camp_officer_desc: "The $archer_captain_camp_officer$ commands the domicile's bowmen. They are responsible for the contingent's leadership, training, and tactics." + archer_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_the_stump').GetName]" + + heavy_infantry_captain_camp_officer: "Heavy Infantry Captain" + heavy_infantry_captain_camp_officer_desc: "The $heavy_infantry_captain_camp_officer$ commands the domicile's armored battle-line. They are responsible for the contingent's leadership, training, and tactics." + heavy_infantry_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_personal_bouts').GetName]" + + light_infantry_captain_camp_officer: "Light Infantry Captain" + light_infantry_captain_camp_officer_desc: "The $light_infantry_captain_camp_officer$ commands the domicile's skirmishers. They are responsible for the contingent's leadership, training, and tactics." + light_infantry_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_training_circle').GetName]" + + pike_captain_camp_officer: "Pike Captain" + pike_captain_camp_officer_desc: "The $pike_captain_camp_officer$ commands of the spear lines. They are responsible for the contingent's leadership, training, and tactics." + pike_captain_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_mock_battle_drills').GetName]" + + master_of_spoils_camp_officer: "Master of Spoils" + master_of_spoils_camp_officer_desc: "The $master_of_spoils_camp_officer$ is responsible for the collection and distribution of the domicile's booty. They ensure the spoils of war are properly divided between the men." + master_of_spoils_camp_officer_employer_custom_effect_description: "$BULLET$Increases [gold_i][gold|E], [prestige_i][prestige|E], and [piety_i][piety|E] gain from winning [battles|E] and [sieges|E] (based on [aptitude|E])\n$BULLET$Increases the chance of stealing an [artifact|E] after a [siege|E] (based on [aptitude|E])" + master_of_spoils_captain_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('proving_grounds_lockwagon').GetName]" + + court_position_eunuch_trait: "[GetTrait('eunuch_1').GetName( ROOT.Char )]" + court_position_beardless_eunuch_trait: "[GetTrait('beardless_eunuch').GetName( ROOT.Char )]" + court_position_eunuch_falsetto: "[GetTrait('beardless_eunuch').GetName( ROOT.Char )]'s Falsetto" + court_position_traveling_friend: "Traveling comrade holds another [court_position|E]" + camp_priest_camp_officer: "domicile Priest" + camp_priest_camp_officer_desc: "The $camp_priest_camp_officer$ offers spiritual support to the domicile." + camp_priest_camp_officer_parameter_tt: "$camp_with_following_buildings_tt$\n$BULLET$[GetDomicileBuilding('baggage_train_shrine').GetName]" + + laureate_camp_officer: "Laureate" + laureate_camp_officer_desc: "The $laureate_camp_officer$ is a live-in verse writer for all occasions. Their work is known far and wide, and brings in plenty of eager poets to learn at their feet." + laureate_camp_officer_employer_custom_effect_description: "$master_bard_camp_officer_employer_custom_effect_description$\n$BULLET$Enables the Invite Poets [decision|E]" + + court_position_bodyguard_modifier: "[GetPerk('praetorian_guard_perk').GetName( GetNullCharacter )]" + court_position_bodyguard_liege_modifier: "Employer has [GetPerk('praetorian_guard_perk').GetName( GetNullCharacter )]" + + # BP3 + court_position_travel_companion_modifier: "[GetPerk('travel_companion_perk').GetName( GetNullCharacter )]" + court_position_travel_companion_liege_modifier: "Employer has [GetPerk('travel_companion_perk').GetName( GetNullCharacter )]" + gracious_host_impeccable_guest_perk_bonus: "[GetPerk('gracious_host_impeccable_guest_perk').GetName( GetNullCharacter )]" + + # MPO + court_astrologer_court_position: "Stargazer" + court_astrologer_court_position_desc: "The $court_astrologer_court_position$ searches the skies to predict what fate may be upon us." + court_astrologer_employer_custom_effect_description: "$BULLET$Enables the #EMP $mpo_divination_decision$#! [decision|E]#!\n$BULLET$Enables the #EMP $mpo_decision_fertility_dance$#! [decision|E]#!" + court_position_mongolic: "Their culture is of $heritage_mongolic_name$ [heritage|E]" + court_position_turkic: "Their culture is of $heritage_turkic_name$ [heritage|E]" + court_position_nomadic: "Their government is [GetGovernment( 'nomad_government' ).GetName]" + court_position_not_kurultai: "They are not a [kurultai_member|E]" + court_astrologer_guide_shepherds: "Guide Shepherds" + court_astrologer_guide_shepherds_desc: "This character is aiding the herders and shepherds of the realm to find the best grazing lands." + court_astrologer_guide_shepherds_tt: "[GetGovernment( 'herder_government' ).GetName] [vassals|E] or [tributaries|E] may gain the [GetTrait('lifestyle_seasoned_pastor').GetName(GetNullCharacter)] [trait|E] or [county_fertility|E]" + court_astrologer_guide_shepherds_trigger_tt: "No [GetGovernment( 'herder_government' ).GetName] [vassals|E]" + court_astrologer_handling_weather: "Oversee Preparations" + court_astrologer_handling_weather_desc: "This character is tasked with ensuring the best outcome for the season, either by utilizing the effects of the good weather or mitigating the effects of the bad weather." + court_astrologer_handling_weather_tt: "Effect due to [liege.GetCapitalLocation.GetCounty.GetSubRegionInSituation( tooltip_season ).GetCurrentPhase.GetName|V] in [liege.GetCapitalLocation.GetName|V]:\n\t$BULLET$" + court_astrologer_handling_weather_trigger_tt: "Your [capital|E] is outside of a Migration [situation|E]" + court_astrologer_handling_weather_abundant_grazing: "$court_astrologer_handling_weather_tt$$MOD_HERD_GAIN$: #P +15%#!" + court_astrologer_handling_weather_everlasting_summer: "$court_astrologer_handling_weather_tt$[vassal|E] [opinion|E]: #P +10#!" + court_astrologer_handling_weather_blue_sky: "$court_astrologer_handling_weather_tt$[piety|E]: [piety_i]#P +3.0#!/month" + court_astrologer_handling_weather_white_zud: "$court_astrologer_handling_weather_tt$$MOD_MONTHLY_COUNTY_FERTILITY_GROWTH$: #P +20%#!" + court_astrologer_handling_weather_cold_zud: "$court_astrologer_handling_weather_tt$$MOD_MONTHLY_COUNTY_FERTILITY_GROWTH$: #P +0.25#!" + court_astrologer_handling_weather_severe_drought: "$court_astrologer_handling_weather_tt$$MOD_MONTHLY_COUNTY_FERTILITY_DECLINE$: #P -30%#!" + court_astrologer_handling_weather_havsarsan_zud: "$court_astrologer_handling_weather_tt$$game_concept_domicile_travel_speed$: #P +33%#!" + court_astrologer_abundant_grazing_modifier: "$court_astrologer_handling_weather$: $situation_steppe_abundant_grazing_season$" + court_astrologer_warm_nights_modifier: "$court_astrologer_handling_weather$: $situation_steppe_warm_nights_season$" + court_astrologer_sky_blessing_modifier: "$court_astrologer_handling_weather$: $situation_steppe_sky_blessing_season$" + court_astrologer_white_zud_modifier: "$court_astrologer_handling_weather$: $situation_steppe_white_zud_season$" + court_astrologer_cold_zud_modifier: "$court_astrologer_handling_weather$: $situation_steppe_cold_zud_season$" + court_astrologer_severe_drought_modifier: "$court_astrologer_handling_weather$: $situation_steppe_severe_drought_season$" + court_astrologer_havsarsan_zud_modifier: "$court_astrologer_handling_weather$: $situation_steppe_havsarsan_zud_season$" + + boyan_court_position: "Noyan" + boyan_court_position_fallback: "General" + boyan_court_position_desc: "A $boyan_court_position$ is one of the leading generals in their liege's armies, ensuring success in battle." + boyan_court_position_fallback_desc: "The $boyan_court_position_fallback$ is in charge of segments of their liege's armies, ensuring success in battle." + boyan_impress_vassals: "Cow Vassals" + boyan_impress_vassals_desc: "This character is tasked with putting vassals back in line." + boyan_impress_vassals_tt: "[vassal|E] [faction_commitment|E]: #P -20#!" + boyan_prepare_raids: "Prepare Raids" + boyan_prepare_raids_desc: "This character is preparing their liege's armies to raid far away realms." + boyan_validity_trigger_tt: "[martial_i][martial|E] is #high 12#! or above" + + siege_engineer_court_position: "Siege Engineer" + siege_engineer_court_position_desc: "A $siege_engineer_court_position$ is usually a foreign agent recruited to the Steppes for their expertise in siege warfare." + siege_engineer_build_equipment: "Build Siege Equipment" + siege_engineer_build_equipment_desc: "This character is focusing on building siege equipment for their liege." + siege_engineer_build_equipment_tt: "Every month there's a small chance to gain a [siege_weapon|E] [men_at_arms|E]" + siege_engineer_build_equipment_trigger_tt: "Already have a fully built [siege_weapon|E] [men_at_arms|E]" + siege_engineer_build_equipment_trigger_tt_2: "No room for more [men_at_arms|E]" + + yurtchi_court_position: "Yurtchi" + yurtchi_court_position_fallback: "Quartermaster" + yurtchi_court_position_desc: "A $yurtchi_court_position$ oversees the organization of and the well-being of the clan, as well as ensuring that it is well-equipped for battle." + yurtchi_court_position_fallback_desc: "The $yurtchi_court_position_fallback$ ensures the clan is equipped to move at a moment's notice, as well as equipped for battle." + yurtchi_lean_times: "Embrace Frugality" + yurtchi_lean_times_desc: "This character is undertaking measures to limit the spending of the clan." + yurtchi_prosperous_times: "Commence with Revelry" + yurtchi_prosperous_times_desc: "This character is ensuring the happiness of the clan, even at a heavy cost." + yurtchi_validity_trigger_tt: "[stewardship_i][stewardship|E] is #high 12#! or above" + + cherbi_court_position: "Cherbi" + cherbi_court_position_fallback: "Chief Bodyguard" + cherbi_court_position_desc: "A $cherbi_court_position$ oversees the $bodyguard_court_position_nomadic$, guaranteeing the safety of their liege. As the head of their liege's safety, it is one of the most prestigious positions in the clan." + cherbi_court_position_fallback_desc: "The $cherbi_court_position_fallback$ is in charge of the safety of their liege, an equally prestigious and dangerous position." + cherbi_custom_modifier: "$BULLET$[GetCourtPositionType('bodyguard_court_position').GetName|U] [aptitude|E]: [aptitude_i]" + cherbi_custom_modifier_range: "$cherbi_custom_modifier$#P 1-15#! (based on [aptitude|E])" + cherbi_custom_modifier_terrible: "$cherbi_custom_modifier$#P 1#!" + cherbi_custom_modifier_poor: "$cherbi_custom_modifier$#P 4#!" + cherbi_custom_modifier_average: "$cherbi_custom_modifier$#P 7#!" + cherbi_custom_modifier_good: "$cherbi_custom_modifier$#P 10#!" + cherbi_custom_modifier_excellent: "$cherbi_custom_modifier$#P 15#!" + court_position_bodyguard_cherbi_modifier: "[GetCourtPositionType('cherbi_court_position').GetName|U] [aptitude|E]" + cherbi_double_the_guard: "Double the Guard" + cherbi_double_the_guard_desc: "This character is tasked with the safety of their liege, at #bold any#! cost." + cherbi_validity_trigger_tt: "[prowess_i][prowess|E] is #high 12#! or above" + + yeke_jarquchi_court_position: "Yeke Jarquchi" + yeke_jarquchi_court_position_fallback: "Chief Law Overseer" + yeke_jarquchi_court_position_turkic: "El Ögäsi" + yeke_jarquchi_court_position_desc: "A $yeke_jarquchi_court_position$ oversees the law of the land, the Yassa. As the eyes of their liege, they make certain all follow the rules of the clan." + yeke_jarquchi_court_position_fallback_desc: "The $yeke_jarquchi_court_position_fallback$ is the one ensuring the laws of their liege are followed all throughout the realm." + yeke_jarquchi_court_position_turkic_desc: "The $yeke_jarquchi_court_position_turkic$ is the one ensuring the laws of their liege are followed all throughout the realm." + yeke_jarquchi_custom_modifier: "$BULLET$[obedience_threshold|E]: [obedience_i]" + yeke_jarquchi_custom_modifier_range: "$yeke_jarquchi_custom_modifier$#P -1#! to #P -5#! (based on [aptitude|E])" + yeke_jarquchi_custom_modifier_terrible: "$yeke_jarquchi_custom_modifier$#P -1#!" + yeke_jarquchi_custom_modifier_poor: "$yeke_jarquchi_custom_modifier$#P -2#!" + yeke_jarquchi_custom_modifier_average: "$yeke_jarquchi_custom_modifier$#P -3#!" + yeke_jarquchi_custom_modifier_good: "$yeke_jarquchi_custom_modifier$#P -4#!" + yeke_jarquchi_custom_modifier_excellent: "$yeke_jarquchi_custom_modifier$#P -5#!" + court_position_jarquchi_obedience_modifier: "[GetCourtPositionType('yeke_jarquchi_court_position').GetName|U] [aptitude|E]" + yeke_jarquchi_culture_acceptance: "Blend Cultures" + yeke_jarquchi_culture_acceptance_desc: "This character is ensuring that all who live in the realm will leave in peace, irrelevant of their traditions and customs." + yeke_jarquchi_culture_acceptance_tt: "[cultural_acceptance|E] will be increased by [liege.Custom('GetAptitudeYekeJarquchiLoc')] between [liege.GetCulture.GetName] and other [cultures|E] in the [realm|E] every year #weak (max #V 50#!)#!" + yeke_jarquchi_aptitude: "[ROOT.Char.MakeScope.ScriptValue('yeke_jarquchi_aptitude_tooltip')|P0]" + yeke_jarquchi_missing_aptitude: "#P 2-10#! (based on [aptitude|E])" + yeke_jarquchi_culture_acceptance_trigger_tt: "All [counties|E] in the [realm|E] are [liege.GetCulture.GetName]" + culture_acceptance_desc_yeke_jarquchi: "[liege.GetName] promoted this [culture|E] in [liege.GetHerHis] [realm|E]" + yeke_jarquchi_validity_trigger_tt: "[diplomacy_i][diplomacy|E] is #high 12#! or above" + + foreign_emissary_court_position: "Foreign Emissary" + foreign_emissary_court_position_desc: "A $foreign_emissary_court_position$ is recruited from afar to impress their liege's court with exotic stories, and to act as a diplomat to neighboring leaders." + court_position_different_culture: "They are of a different [culture|E]" + foreign_emissary_culture_acceptance_tt: "[cultural_acceptance|E] will be increased by [liege.Custom('GetAptitudeForeignEmissaryLoc')] between [liege.GetCulture.GetName] and [tributary|E] [cultures|E] every year #weak (max #V 50#!)#!" + foreign_emissary_aptitude: "[ROOT.Char.MakeScope.ScriptValue('foreign_emissary_aptitude_tooltip')|P0]" + foreign_emissary_missing_aptitude: "#P 2-10#! (based on [aptitude|E])" + foreign_emissary_culture_acceptance: "Accommodate Tributaries" + foreign_emissary_culture_acceptance_desc: "This character will make certain that the tributaries will fall in line with their suzerain, with whatever means necessary." + culture_acceptance_desc_foreign_emissary: "[liege.GetName] accomodated [liege.GetHerHis] tributaries of this [culture|E]" + foreign_emissary_culture_acceptance_trigger_tt: "No [tributaries|E] of another [culture|E]" + + keeper_of_the_horses_court_position: "Keeper of the Horses" + keeper_of_the_horses_court_position_desc: "The $keeper_of_the_horses_court_position$ is a prestigious position in charge of their liege's steeds and stables." + +# TGP + court_position_confucian_education_trait: "[GetTrait('confucian_education').GetName( ROOT.Char )]" + + court_physician_celestial_imperial: "Palace Physician" + court_physician_celestial_imperial_desc: "The $court_physician_celestial_imperial$ is responsible for the health and well-being of the [court|E] they are in. They will treat disease and suture wounds to the best of their abilities." + court_physician_celestial: "Master Physician" + court_physician_celestial_desc: "The $court_physician_celestial$ is responsible for the health and well-being of the [court|E] they are in. They will treat disease and suture wounds to the best of their abilities." + court_astrologer_celestial_imperial: "Grand Astrologer" + court_astrologer_celestial_imperial_desc: "The $court_astrologer_celestial_imperial$ searches the skies to predict what fate may be upon us." + court_astrologer_celestial: "Diviner" + court_astrologer_celestial_desc: "The $court_astrologer_celestial$ searches the skies to predict what fate may be upon us." + travel_leader_celestial_imperial: "Clearer of the Way" + travel_leader_celestial_imperial_desc: "The $travel_leader_celestial_imperial$ assists you when traveling and takes charge of all itineraries. They aim to ensure you arrive at your destination safely and on-time." + travel_leader_celestial: "Forward Scout" + travel_leader_celestial_desc: "The $travel_leader_celestial$ assists you when traveling and takes charge of all itineraries. They aim to ensure you arrive at your destination safely and on-time." + antiquarian_celestial: "Keeper of Treasures" + antiquarian_celestial_desc: "The $antiquarian_celestial$ is responsible for the upkeep, care, and procurement of artifacts." + seneschal_celestial: "Chief Administrator" + seneschal_celestial_desc: "The $seneschal_celestial$ serves an important role in the day-to-day life of the royal household, administering the servants and keeping everything running smoothly." + court_tutor_celestial: "Erudite Instructor" + court_tutor_celestial_desc: "The $court_tutor_celestial$ is in charge of the [education|E] of all children at court, and their skill will influence how much they influence the students. Children can still have individual [guardians|E]." + chief_eunuch_celestial_imperial: "Palace Attendant" + chief_eunuch_celestial_imperial_desc: "The $chief_eunuch_celestial_imperial$ is a trusted servant responsible for the eunuchs at court. Not much goes on that they don't hear about, both among the servants and the royals." + chief_eunuch_celestial: "Eunuch Attendant" + chief_eunuch_celestial_desc: "The $chief_eunuch_celestial$ is a trusted servant responsible for the eunuchs at court. Not much goes on that they don't hear about, both among the servants and the royals." + master_of_horse_celestial_imperial: "Prefect of the Stables" + master_of_horse_celestial_imperial_desc: "The $master_of_horse_celestial_imperial$ is responsible for their Liege's majestic steeds and stables. They have their work cut out for them since a well-kept horse is a boon both on the battlefield and on the road." + master_of_horse_celestial: "Stablemaster" + master_of_horse_celestial_desc: "The $master_of_horse_celestial$ is responsible for their Liege's majestic steeds and stables. They have their work cut out for them since a well-kept horse is a boon both on the battlefield and on the road." + master_of_hunt_celestial: "Supervisor of Hunts" + master_of_hunt_celestial_desc: "The $master_of_hunt_celestial$ is responsible for any hunting parties that members of their Liege's court arrange. They are also in charge of the kennels and the dogs within it." + cave_hermit_celestial: "Sagacious Recluse" + cave_hermit_celestial_desc: "The $cave_hermit_celestial$ is someone that will inhabit your castle grounds and entertain your guests with prophecies and riddles. Some say they may be actual mystics." + court_gardener_celestial_imperial: "Chief Gardener" + court_gardener_celestial_imperial_desc: "The $court_gardener_celestial_imperial$ is responsible for the well-being of the gardens belonging to their liege, pouring time and skill into making them truly flourish." + court_gardener_celestial: "Gardener" + court_gardener_celestial_desc: "The $court_gardener_celestial$ is responsible for the well-being of the gardens belonging to their liege, pouring time and skill into making them truly flourish." + chronicler_celestial_imperial: "Grand Scribe" + chronicler_celestial_imperial_desc: "The $chronicler_celestial_imperial$ is tasked with dedicating the deeds of their employer to paper." + chronicler_celestial: "Recorder" + chronicler_celestial_desc: "The $chronicler_celestial$ is tasked with dedicating the deeds of their employer to paper." + champion_celestial_imperial: "Tiger-Brave Gentleman" + champion_celestial_imperial_desc: "A $champion_celestial_imperial$ is a skilled and deadly fighter that can represent their Liege in duels." + champion_celestial: "Tiger-Brave Soldier" + champion_celestial_desc: "A $champion_celestial$ is a skilled and deadly fighter that can represent their Liege in duels." + court_brewmaster_celestial: "Wine Steward" + court_brewmaster_celestial_desc: "The $court_brewmaster_celestial$ is a representative chosen to interact directly with the brewers of the realm, to ensure the liege can get their hands on the best of brews." + lady_in_waiting_celestial_imperial: "Palace Lady" + lady_in_waiting_celestial_imperial_desc: "A $lady_in_waiting_celestial_imperial$ is an assistant and companion to a Queen or Empress, attending to her every need and fulfilling every whim." + lady_in_waiting_celestial: "Chambermaid" + lady_in_waiting_celestial_desc: "A $lady_in_waiting_celestial$ is an assistant and companion to a Queen or Empress, attending to her every need and fulfilling every whim." + royal_architect_celestial: "Master Craftsman" + royal_architect_celestial_desc: "The $royal_architect_celestial$ oversees any prestigious building projects within the realm; not a brick is laid, nor a second spent, without their express permission." + court_poet_celestial: "Poet Laureate" + court_poet_celestial_desc: "The $court_poet_celestial$ is a connoisseur of words and verse, providing their Liege and all at court with entertainment, intellectual stimulation, and emotional experiences." + court_musician_celestial_imperial: "Master of Music" + court_musician_celestial_imperial_desc: "A $court_musician_celestial_imperial$ is an artist who sings and plays instruments to entertain their Liege and the court." + court_musician_celestial: "Musician" + court_musician_celestial_desc: "A $court_musician_celestial$ is an artist who sings and plays instruments to entertain their Liege and the court." + bodyguard_celestial_imperial: "Imperial Guardsman" + bodyguard_celestial_imperial_desc: "A $bodyguard_celestial_imperial$ is the final line of defense against any and all attackers. Where their charge goes they follow, and they will not hesitate to put themselves in the way of any danger that might be lurking out there." + bodyguard_celestial: "Household Guardsman" + bodyguard_celestial_desc: "A $bodyguard_celestial$ is the final line of defense against any and all attackers. Where their charge goes they follow, and they will not hesitate to put themselves in the way of any danger that might be lurking out there." + court_artificer_celestial_imperial: "Palace Artisan" + court_artificer_celestial_imperial_desc: "A $court_artificer_celestial_imperial$ is someone who's proven themselves able to craft great things. While they mostly lull around in your court, the hope is for inspiration to strike once more." + court_artificer_celestial: "Artisan" + court_artificer_celestial_desc: "A $court_artificer_celestial$ is someone who's proven themselves able to craft great things. While they mostly lull around in your court, the hope is for inspiration to strike once more." + + grand_preceptor_court_position: "Grand Preceptor" + grand_preceptor_court_position_desc: "The $grand_preceptor_court_position$'s is the moral pillar of their court, their duty to serve as a beacon of righteousness for all others to admire and emulate." + grand_preceptor_court_position_task_instill_righteousness: "Imbue with Moral Righteousness" + grand_preceptor_court_position_task_instill_righteousness_desc: "The $grand_preceptor_court_position$ will apply themselves to the moral cultivation of their liege." + grand_preceptor_court_position_task_propagate_civic_virtue: "Propagate Civic Virtue" + grand_preceptor_court_position_task_propagate_civic_virtue_desc: "The $grand_preceptor_court_position$ will take a leading role in the propagation of moral virtue among the general population." + grand_preceptor_court_position_task_exalt_imperial_deeds: "Exalt Imperial Deeds" + grand_preceptor_court_position_task_exalt_imperial_deeds_desc: "As $grand_preceptor_court_position$, this character's words carry immense moral authority, and many are those willing to accept their statements as truth." + + grand_preceptor_powerfuL_family_score_desc: "$grand_preceptor_court_position$" + + grand_guardian_court_position: "Grand Guardian" + grand_guardian_court_position_desc: "The $grand_guardian_court_position$ is the sword and shield of the realm, revered for their martial experience and strategic insight." + grand_guardian_court_position_task_guard_the_capital: "Guard the Capital" + grand_guardian_court_position_task_guard_the_capital_desc: "The $grand_guardian_court_position$ will take charge of the protection of the imperial capital's security." + grand_guardian_court_position_task_shield_the_realm: "Shield the Realm" + grand_guardian_court_position_task_shield_the_realm_desc: "The $grand_guardian_court_position$ will apply their formidable strategic skills to the defense of the realm as a whole." + grand_guardian_court_position_task_instill_martial_discipline: "Instill Martial Discipline" + grand_guardian_court_position_task_instill_martial_discipline_desc: "The $grand_guardian_court_position$ will endeavor to instill the accumulated lessons of their distinguished career on those who lack the privilege of experience." + grand_guardian_guard_the_capital_modifier: "Protected by the Grand Guardian" + MODIFIER_DEFINITION_VALUE_GRAND_GUARDIAN_APTITUDE: " \t#weak Increase per $grand_guardian_court_position$ [aptitude|E] level#!" + + grand_guardian_powerfuL_family_score_desc: "$grand_guardian_court_position$" + + grand_mentor_court_position: "Grand Mentor" + grand_mentor_court_position_desc: "The $grand_mentor_court_position$ attends to the edification of the ruling family, and is tasked with the weighty duty of ensuring that the next generation lives up to the august examples of their forebears." + + grand_mentor_court_position_task_edify_heirs: "Instruct Imperial Heirs" + grand_mentor_court_position_task_edify_heirs_desc: "The $grand_mentor_court_position$ will dedicate their days to the diligent cultivation of the next generation." + grand_mentor_edify_heirs_tt: "Every month, members of the ruling [house|E] who are [courtiers|E] or [direct_vassals|E] of the [liege|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E]" + grand_mentor_edify_heirs_fallback: "Every month, members of the ruling [house|E] who are [courtiers|E] or [direct_vassals|E] of the [liege|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E]" + + grand_mentor_court_position_task_teach_liege: "Edify the Emperor" + grand_mentor_court_position_task_teach_liege_desc: "The $grand_mentor_court_position$ will exclusively attend to the edification of their liege." + grand_mentor_teach_liege_tt: "Every month, the [liege|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E]" + grand_mentor_teach_liege_fallback: "Every month, the [liege|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E]" + + grand_mentor_court_position_task_train_officials: "Cultivate Meritorious Officials" + grand_mentor_court_position_task_train_officials_desc: "The $grand_mentor_court_position$ will see to it that the officials of the realm possess skills in equal measure to their wisdom and virtue." + grand_mentor_train_officials_tt: "Every month, a [court_position|E] holder or [direct_vassal|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E], or [merit|E]" + grand_mentor_train_officials_fallback: "Every month, a [court_position|E] holder or [direct_vassal|E] may gain [diplomacy_i][stewardship_i][learning_i][martial_i][skills|E], [GetTrait('governor').GetName( GetPlayer )] or [GetTrait('confucian_education').GetName( GetPlayer )] [trait_level_track_xp|E], or [merit|E]" + + grand_mentor_mentoring_title: "Mentoring [target_character.GetFullNameNoTooltip]" + grand_mentor_mentoring_notification_desc: "[ROOT.Char.GetShortUIName|U] have improved [target_character.GetTitledFirstNamePossessive] skills" + + grand_mentor_powerfuL_family_score_desc: "$grand_mentor_court_position$" + + fire_dragon_engineer_court_position: "Fire Dragon Engineer" + fire_dragon_engineer_court_position_desc: "The $fire_dragon_engineer_court_position$ is a master of firearms, furnishing troops with formidable flame-belching instruments of war." + fire_dragon_engineer_court_position_forge_fire_dragons: "Forge Fire Dragons" + fire_dragon_engineer_court_position_forge_fire_dragons_desc: "The $fire_dragon_engineer_court_position$ will focus their energies on the forging of firearms, keeping an abundant arsenal ever at the ready." + fire_dragon_engineer_court_position_command_artillery: "Command Artillery" + fire_dragon_engineer_court_position_command_artillery_desc: "The $fire_dragon_engineer_court_position$ will personally oversee the deployment and employment of their instruments of destruction on the battlefield." + + keeper_of_the_harem_court_position: "Keeper of the Harem" + keeper_of_the_harem_court_position_desc: "The $keeper_of_the_harem_court_position$ occupies a position of no small importance in the imperial harem, supervising everything from the concubines' garments to the auspicious scheduling of imperial intercourse." + + keeper_of_the_harem_court_position_task_maintain_decorum: "Maintain Harem Decorum" + keeper_of_the_harem_court_position_task_maintain_decorum_desc: "The $keeper_of_the_harem_court_position$ will focus on suppressing the venomous intrigues of the harem and shielding it from the untoward attentions of the outside world." + keeper_of_the_harem_maintaining_decorum.tt: "The $keeper_of_the_harem_court_position$ will significantly impede [schemes|E] targeting members of the harem." + + keeper_of_the_harem_court_position_task_attend_to_wellness: "Attend to Concubines' Wellness" + keeper_of_the_harem_court_position_task_attend_to_wellness_desc: "The $keeper_of_the_harem_court_position$ will pay special attention to the health and well-being of the harem, treating the ill and easing their burdens." + keeper_of_the_harem_attend_to_wellness.tt: "The $keeper_of_the_harem_court_position$ will look for and tend to an ill member of the harem every month, alleviating their stress and the symptoms that ail them." + + keeper_of_the_harem_court_position_task_select_palace_beauties: "Select Palace Beauties" + keeper_of_the_harem_court_position_task_select_palace_beauties_desc: "The $keeper_of_the_harem_court_position$ will periodically review the composition of the harem, gracefully retiring the aged and childless while recruiting talented and fair substitutes." + keeper_of_the_harem_select_palace_beauties.tt: "Every year, the $keeper_of_the_harem_court_position$ will potentially retire one aged and childless concubine and recruit one new concubine to the harem." + + court_guru_court_position: "Guru" + court_guru_court_position_desc: "A guru serves as both counselor and sage, advising rulers on earthly concerns and sacred truths." + guru_teach_learning: "Enlighten the Mind" + guru_teach_learning_desc: "The guru shares sacred texts and scholarly wisdom to sharpen their liege's intellect." + guru_teach_diplomacy: "Refine the Tongue" + guru_teach_diplomacy_desc: "The guru instructs in courtly speech, measured silence, and the art of graceful persuasion." + guru_teach_intrigue: "Sharpen the Senses" + guru_teach_intrigue_desc: "Through parables and subtle games, the guru trains the ruler to see hidden motives and deceive with poise." + + court_brahmin_court_position: "Court Brahmin" + court_brahmin_court_position_desc: "A venerable priest found in Hindu and Buddhist courts alike, the Court Brahmin is responsible for performing rituals, overseeing ceremonies, and promoting the legitimacy of the ruler." + court_brahmin_court_position_task_increase_tribute: "Increase Tribute" + court_brahmin_court_position_task_increase_tribute_desc: "This character will diligently tend to amplifying the flow of wealth from tributary to suzerain." + + khlon_glan_court_position: "Khlon Glan" + khlon_glan_court_position_desc: "The Khlon Glan is a high-ranking official, in charge of managing the realm's storehouses and military supplies." + khlon_glan_assist_provisioning: "Develop Capital" + khlon_glan_assist_provisioning_desc: "This character is focusing on improving the Mandala capital." + + favored_minister_court_position: "Favored Minister" + favored_minister_court_position_desc: "The $favored_minister_court_position$ is the chosen favorite [councillor|E] of a [celestial|E] [son_of_heaven|E] and is granted the freedom to run their ministry as they wish." + favored_minister_employee_custom_desc: "[personal_movement_power|E]: [movement_power_i][EmptyScope.ScriptValue('favored_minister_movement_power_bonus_value')|+=0%]" + favored_minister_desc: "[GetCourtPositionType( 'favored_minister_court_position' ).GetName()]" + + keeper_of_the_horses_validity_trigger_tt: "[prowess_i][prowess|E] is #high 12#! or above" + + minister_bureaucrat_court_position: "Department Aide" + minister_bureaucrat_court_position_desc: "Within the upper echelons of the celestial government, a large array of bureaucrats is required. Hand-picked by the head of each department, they ensure everything runs smoothly." + minister_bureaucrat_court_position_mod_desc: "$EFFECT_LIST_BULLET$The Aide improves various [ministry|E] related tasks, such as [great_projects|E] (based on [aptitude|E])" diff --git a/localization/english/replace/dlc/ep3/ep3_governance_l_english.yml b/localization/english/replace/dlc/ep3/ep3_governance_l_english.yml new file mode 100644 index 00000000..b0980a7b --- /dev/null +++ b/localization/english/replace/dlc/ep3/ep3_governance_l_english.yml @@ -0,0 +1,563 @@ +l_english: + governor_tax_scheme: "Collect Taxes" + governor_tax_scheme_desc_general: "In a Collect Taxes [scheme|E], you attempt to gather intelligence about missing taxes, and make the suspected village pay up." + governor_tax_scheme_desc: "Taxes are carefully collected and noted down for every district and village, making it possible to see when taxes have been, in fact, paid as required. And, more importantly, when payments are #EMP missing#!." + governor_tax_scheme_action: "Collect Taxes in" + governor_tax_scheme_invalidated_title: "$governor_tax_scheme$ Scheme Invalidated" + msg_governance_contract_appear.t: "New Governance Issue" + msg_governance_contract_appear.desc: "A [new_governance_issue.GetType.GetName|V] [governance_issue|E] has appeared in [target_province.GetName], within the [target_province.GetCounty.GetTitle.GetName]" + task_contract_governance_desc_title: "My judgment as an Official is needed!" + + overdue_taxes_contract: "Overdue Taxes" + overdue_taxes_desc: "Whether by conspiracy, deprivation or sheer negligence, a village in this region has failed to send the share of their produce owed as taxes." + overdue_taxes_desc_title: "$task_contract_governance_desc_title$" + hoarding_mayor_contract: "Hoarding Mayor" + hoarding_mayor_desc: "The mayor of this barony is gathering, and hoarding, a lot more gold than one would expect. The mayor may not be sending enough taxes upwards, or perhaps isn't investing enough into the city itself." + hoarding_mayor_desc_title: "$task_contract_governance_desc_title$" + bountiful_harvest_contract: "Bountiful Harvest" + bountiful_harvest_desc: "Reports of wondrous plenty, of tall crops and verdant fields, come in from across the [GetPlayer.Custom('GetProvinceConceptNoTooltip')]. Such a significant boon ought to be put to good use. Leave not the crops to spoil!" + bountiful_harvest_desc_title: "$task_contract_governance_desc_title$" + rampant_bandits_contract: "Rampant Bandits" + rampant_bandits_desc: "Outlaws and unruly nomads beset this region of your [GetPlayer.Custom('GetProvinceConceptNoTooltip')]. For locals to be safe, for traders to move freely: they need to be dealt with." + rampant_bandits_desc_title: "$task_contract_governance_desc_title$" + + governor_contract_event.1000.t: "Overdue Taxes" + governor_contract_event.1000.desc: "My clerks insist that a village in [tax_destination.GetName] is significantly behind with their taxes.\n\nIt would be a serious neglect of my duty to ignore the matter. The ledgers make it clear: taxes #EMP are#! missing. Shipments were never sent.\n\nAt the moment, the cause of these omissions is unknown. This matter may be one for officials... or one for soldiers." + governor_contract_event.1000.a: "Let's launch an investigation!" + governor_contract_event.1001.desc: "My entourage struggles along an ill-maintained country path, amidst scattered [ROOT.Char.GetCurrentLocation.Custom('get_region_flower_type_plural')] and the occasional [ROOT.Char.Custom('RegionalFarmAnimal')]... my destination, the tax-owing village, really is quite rustic and #EMP quite#! unremarkable — despite being not a day's journey from [tax_destination.GetName] proper.\n\nA few of the locals, dressed in their distinctive traditional garb, have gathered at the village center. I am welcomed peaceably, though without warmth.\n\nI must consider how to approach my investigation." + governor_contract_event.1001.a: "An inquisitive method will serve me best." + governor_contract_event.1001.b: "Let's look around and see what comes to light." + governor_contract_event.1001.a_tt: "Travel to [tax_destination.GetName] and investigate the issue" + governor_contract_event.1001.success: "Your investigation is a success" + governor_contract_event.1001.failure: "Your investigation is a failure" + governor_contract_event.1001.a.success: "I persuade the villagers to talk" + governor_contract_event.1001.a.failure: "I am unable to learn anything from the villagers" + governor_contract_event.1001.b.success: "I inspect the village and learn what I need" + governor_contract_event.1001.b.failure: "I am unable to learn what I need from the village" + governor_contract_event.1003.t: "Overdue Taxes: Success" + governor_contract_event.1003.desc_diplomacy: "Speaking with the villagers proved unexpectedly fruitful!\n\nHeads of kin were eager to list the members of their families, and gladly extolled the productivity of their plots. Some even #EMP boasted#! of their livestock! Farmers led me about their fields, explaining how much they could expect to gain from the harvest." + governor_contract_event.1003.desc_stewardship: "Taking careful stock of every [ROOT.Char.Custom('RegionalFarmAnimal')], every stalk of barley, every homespun blanket and clay pot has yielded a good estimate of the taxes these serfs #EMP ought#! to pay." + governor_contract_event.1003.desc_outro: "\n\nSome unexplained oversight, unintentional or intentional, seems the cause of this village's failure to pay their dues. But one task remains: deciding how best to remedy the situation..." + governor_contract_event.1003.a: "Gather what produce we can, and sell half to better-develop the area." + governor_contract_event.1003.b: "They shall pay in full. And not a #EMP single#! kernel less." + governor_contract_event.1003.c: "These decent people need pay only in part." + governor_contract_event.1003.d: "Stationing a garrison here will encourage proper payment." + governor_contract_event.1003.e: "Let's assign an administrator to oversee the village." + governor_contract_event.1003.f: "A tax relief might help these people flourish?" + governor_contract_event.1004.t: "Overdue Taxes: Failure" + governor_contract_event.1004.desc: "Though I peer into cellars and granaries, though I ride about the fields, cajole with village leaders... there is no sign of withheld wealth anywhere in this hamlet. The villagers, by all appearances, are truly, utterly poor and unable to provide what they owe.\n\nWithout evidence that I have been cheated, little remains for me to do here. My ledgers must simply absorb the loss." + governor_contract_event.1004.a: "#EMP Tarnation!#!" + + governor_contract_event.1010.t: "Hoarding Mayor" + governor_contract_event.1010.desc: "I have received a number of reports that [hoarding_mayor.GetTitledFirstName], who is overseeing [mayor_destination.GetName], is keeping the vast majority of the city's taxes for [hoarding_mayor.GetHerselfHimself].\n\nWhile it is expected that a mayor may indeed keep any leftover taxes, the amounts reported are #EMP excessive#!. They easily border on the corrupt. And, to worsen the matter: [hoarding_mayor.GetHerHis] actions reflects quite poorly upon #EMP me#!!" + governor_contract_event.1010.a: "I shall have to resolve this in person." + governor_contract_event.1010.a_tt: "Travel to [mayor_destination.GetName] and speak to the mayor" + governor_contract_event.1012.a_tt: "You start traveling again" + governor_contract_event.1011.desc_intro: "I waste little time upon my arrival in [mayor_destination.GetName] and ride swiftly for the mayor's residence. I barge in, unannounced, and I am at once rewarded by my spectacle.\n\n" + governor_contract_event.1011.desc_upset: "[hoarding_mayor.GetFirstName] stares at me, for a short moment dumbfounded, before recovering [hoarding_mayor.GetHerselfHimself]. As [hoarding_mayor.GetSheHe] listens to my accusations, a scowl spreads on the minister's face.\n\n"Such vile allegations! I could..." [hoarding_mayor.GetFirstNameNoTooltip] pauses and takes a deep breath. "Fine. How do you suggest we proceed?"" + governor_contract_event.1011.desc_fear: "Startled, [hoarding_mayor.GetFirstName] spills [hoarding_mayor.GetHerHis] drink all over [hoarding_mayor.GetHerselfHimself] — clearly taken aback at my mere presence! [hoarding_mayor.GetHerHis|U] face grows paler and paler as I outline my accusations.\n\n"Wait! Please! Surely, this is but a misunderstanding. We can make things right, can we not?"" + governor_contract_event.1011.desc_worried: "[hoarding_mayor.GetFirstName] turns and gapes at me, speechless. [hoarding_mayor.GetSheHe|U] steadies [hoarding_mayor.GetHerselfHimself] with a hand on the table as I berate [hoarding_mayor.GetHerHim], hurling accusation after accusation.\n\n"I... I am sure there is a misunderstanding, but I will of course help you resolve the situation! In any manner you see fit!"" + governor_contract_event.1011.a: "Invest in the city. I will take care of any remaining coin." + governor_contract_event.1011.b: "You will give #EMP all#! excess coin to me." + governor_contract_event.1011.c: "Use it well. Invest in local infrastructure." + governor_contract_event.1011.d: "Give it back to the people by arranging festivities." + governor_contract_event.1011.e: "I'm afraid only a harsh punishment will do." + governor_contract_event.1011.f: "I could let this go... but do not forget it." + governor_contract_event.1012.t: "Governance Issue: Cancel Travel" + governor_contract_event.1012.desc: "I will not be able to do much about the current issue without traveling to its location. I am expected to handle this sort of problem directly, but perhaps I need to look the other way and focus my attention on more urgent matters..." + governor_contract_event.1012.a: "On second thought, let's go!" + governor_contract_event.1012.b: "I have more important matters to deal with." + + governor_contract_event.1020.t: "Bountiful Harvest" + governor_contract_event.1020.desc: "[ROOT.Char.GetFaith.FertilityGodName] has been kind to us! In many of [ROOT.Char.GetPrimaryTitle.GetNameNoTierPossessive] villages, seemingly endless sheaves of grain are collected from fields well-watered by steady rains. And such [ROOT.Char.Custom('RegionalRootVegetablePlural')]! A significantly larger yield than last harvest is joyfully anticipated.\n\nThis is, of course, very good news. I must organize an extraordinary workforce and see to the logistics as soon as possible.\n\nNow, where shall my wagons carry these great heaps of [ROOT.Char.Custom('GetSeason')] produce...?" + governor_contract_event.1020.a: "Have it distributed equally across the province." + governor_contract_event.1020.b: "Distribute it alongside the regular grain." + governor_contract_event.1020.c: "The provincial capital must benefit." + governor_contract_event.1020.d: "Let's donate it to charity and those in need." + governor_contract_event.1020.e: "Fill the granaries and sell the excess." + governor_contract_event.1020.f: "Move #EMP all#! of it to my estate." + harvest_claim_it_yourself_estate_tt: "Amount is increased by #P +[EmptyScope.ScriptValue('estate_granary_gold_bonus_value')|+0%]#! due to the [GetDomicileBuilding('storage_granary_03').GetName] in your [estate|E]" + + governor_contract_event.1030.t: "Rampant Bandits" + governor_contract_event.1030.desc: "I read the report again. #EMP Bandits#!, to whom my law-abiding taxpayers are but fat sheep for the shearing!\n\nAnd indeed, the rough outlaws have put my people to the blade... villages terrorized, caravans lost.\n\nA particularly nasty group of the cutthroats have established a firm foothold in the [task_contract_location.GetProvince.GetTerrain.GetNameNoTooltip|l] near [bandit_destination.GetName]. Until they are flushed out, the region will remain uncontrollable." + governor_contract_event.1030.a: "Gather a contingent of soldiers. We leave at once!" + governor_contract_event.1030.b: "They will be dealt with in time..." + governor_contract_event.1031.desc: "The denizens of [bandit_destination.GetName] gladly lead us right to the mouth of the [ROOT.Char.Custom('RegionalFerociousAnimal')]'s den... the encampment of outlaws lies just beyond, obscured by brush and broken terrain.\n\nFrom what I hear, I judge these foes to be nomadic warriors: tough folk living on the fringes of settled society, so flush on the wealth of my land that they've turned their raiding foray into an extended stay.\n\nThe foe is not yet alerted to my posse's presence. We have the opportunity to strike however I see fit." + governor_contract_event.1031.a: "Charge! We'll take them by surprise!" + governor_contract_event.1031.b: "Let's lay out a tactic before we attack." + governor_contract_event.1031.c: "Luring them into a trap could save us a lot of trouble." + governor_contract_event.1031.success: "You succeed and defeat the bandits" + governor_contract_event.1031.failure: "You fail and the bandits escape" + governor_contract_event.1031.b.success: "Your tactic is a triumph" + governor_contract_event.1031.b.failure: "Your choice of tactics leaves a lot to be desired" + governor_contract_event.1031.c.success: "Your trap is flawless" + governor_contract_event.1031.c.failure: "Your trap outsmarts no one" + governor_contract_event.1032.desc_tactical: "My undisciplined foe cannot hope to stand before well-trained troops! Their projectiles streak now not towards unguarded peasant flesh; they thud harmlessly into the shields of our battle-line. The criminals break off to flee, but riders on our flanks cut off all retreat.\n\nI gaze upon the dead. I consider the captured survivors." + governor_contract_event.1032.desc_trap: "Mine is a most cunning trap.\n\nA half-naked young soldier, with a stolen dinner in hand, races back towards us; the outlaws, the #EMP halfwits#!, chase right after! We leap from hiding — howling, the terrified foe recognize their mistake — and we fall upon them! Moments from death, the nomads surrender to my troops.\n\nThis group of criminals is rendered harmless, helpless." + governor_contract_event.1032.desc_charge: "A thunderous charge is an unpleasant surprise for any enemy, but the garbled screams of my criminous foes speak to how #EMP truly#! unprepared they are!\n\nThe hand-to-hand fighting between my heavily-armed troops and the half-dressed warriors staggering to their mounts lasts but a few moments. The surviving nomads are then neatly lined up in front of me." + governor_contract_event.1032.desc_outro: "\n\nThey are at my mercy." + governor_contract_event.1032.a: "Return the stolen goods; put the criminals to work." + governor_contract_event.1032.b: "Pardon their crimes." + governor_contract_event.1032.c: "How about earning honest coin for a living?" + governor_contract_event.1032.d: "They'll have to pay a fine." + governor_contract_event.1032.e: "Hang them." + governor_contract_event.1032.f: "Confiscate anything of value and have them imprisoned." + governor_contract_event.1033.desc: "[ROOT.Char.Custom('CulturalCurse')|U]!\n\nMy soldiers' attack was given away by frightened birds; we came at our foe as swiftly as we could, but the clever nomads were on their horses and spurring hard almost instantly!\n\nA few of the fleeing brigands were caught and struck dead... but far too few to dissuade the rest from further robbery and raiding.\n\nExhausted, we must head home." + governor_contract_event.1033.a: "Let's forget this incident." + governor_contract_event.1038.desc: "These bandits are unlikely to depart peaceably. The people of [bandit_destination.GetName] could suffer their attacks for quite some time, unless I interfere.\n\nBesides, as an appointed official, their safety is my responsibility." + governor_contract_event.1038.a: "I have to protect these people!" + governor_contract_event.1038.b: "The people will have to fend for themselves." + governor_contract_event.1038.a_tt: "Travel to [bandit_destination.GetName] and deal with the bandits" + + discontent_soldiers: "Discontent Soldiers" + discontent_soldiers_contract: "$discontent_soldiers$" + discontent_soldiers_desc: "Discontentment spreads through your troops. Guards mutter at their posts. Minor officers care little for discipline." + discontent_soldiers_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2000.t: "$discontent_soldiers$" + governor_contract_event.2000.desc: "The tidings from my outposts, from the provincial troops under my command, are all in agreement: discontent grows among the soldiers. Their deployments are too long, their pay too low, the local whores too ugly, the encampments too rough...\n\nFor those living in a military camp, the causes to complain are always many, but even with a small intervention I could hope to improve their spirits... it would certainly go a long way to increase my popularity, and the safety of my position." + governor_contract_event.2000.a: "I'll grant every senior officer a land plot." + governor_contract_event.2000.b: "They don't have it as bad as [other_gov.GetTitledFirstNamePossessiveNoTooltip] troops!" + governor_contract_event.2000.c: "They have earned some time off." + governor_contract_event.2000.d: "They shall be punished for their insubordination!" + governor_contract_event.2000.e: "More money will make them happy." + ep3_settled_troops_province_modifier: "Settled Troops" + ep3_settled_troops_province_modifier_desc: "The officers of the troops stationed in this province have received local plots of land to settle." + ep3_longer_breaks_province_modifier: "Troops on Break" + ep3_longer_breaks_province_modifier_desc: "The troops stationed in this province have been granted longer breaks to increase morale." + ep3_better_paid_soldiers_modifier: "Incentivized Troops" + ep3_better_paid_soldiers_modifier_desc: "This character is known for paying their troops more than needed, and happy troops are effective troops." + + inept_mayor: "Inept Mayor" + inept_mayor_contract: "$inept_mayor$" + inept_mayor_desc: "This key official has proven almost wholly incompetent. Local nobles, the common mob, and even your own ministers grow increasingly dissatisfied." + inept_mayor_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2010.t: "$inept_mayor$" + governor_contract_event.2010.desc: "I pore over the litany of complaints sent from [mayor_destination.GetName], noting accusations against "that [inept_mayor.Custom2('InsultNoun', ROOT.Char)], [inept_mayor.GetFirstName]"; how, with "[inept_mayor.Custom2('InsultAdjective', ROOT.Char)] criminality," [inept_mayor.GetSheHe] has allegedly drained the [inept_mayor.GetPrimaryTitle.GetTierAsNameNoTooltip|l] of funds.\n\nThere is, indeed, something deeply #EMP wrong#! with the city's contability: wealth seems to disappear from the balance inexplicably, the numbers of state-paid officials change day by day, and the documentation on land ownership is littered with inconsistencies." + governor_contract_event.2010.a: "I should pay [mayor_destination.GetNameNoTooltip] a visit." + governor_contract_event.2011.desc_intro: "When I reach [mayor_destination.GetName], I hurry into the offices of the local mayor, [inept_mayor.GetFirstName]. Seemingly taken by surprise, the bureaucrat quickly shoos [inept_mayor.GetHerHis] servants away. Ledgers are clutched in their arms.\n\n"I've come to verify your administration's contability," I state, solemnly frowning." + governor_contract_event.2011.desc_fear: "\n\n"Is it about, uh, that consignment of grain?" stutters the mayor. "The silk import? Yes, my contacts are a little unorthodox, but they've been pardoned for their crimes! Well... #EMP most of them.#! I'll undo these orders, my [ROOT.Char.GetTitleAsName], all of them; you needn't worry!"" + governor_contract_event.2011.desc_upset: "\n\n"My [ROOT.Char.GetTitleAsName], surely you cannot doubt my utter devotion to my position? My well-tested competence?!" The mayor puffs [inept_mayor.GetHerselfHimself] up, sizing me up for a confrontation.\n\nBut I am [inept_mayor.GetHerHis] superior." + governor_contract_event.2011.desc_worried: "\n\n"Troublesome news, my [ROOT.Char.GetTitleAsName]?" [inept_mayor.GetFirstNameNoTooltip] chuckles unconvincingly, "The local grandees have swollen tongues and vivid imaginations; best to simply avoid the noisier ones..."" + governor_contract_event.2011.a: "Show me the ledgers." + governor_contract_event.2011.b: "You are unworthy of your post." + governor_contract_event.2011.c: "I am calling in my experts from the capital." + governor_contract_event.2011.d: "You'll personally pay for all losses!" + ep3_mismanaged_administration_modifier: "Incompetence in Administration" + ep3_mismanaged_administration_modifier_desc: "One of the main centers in this county is so deeply mismanaged that the whole area is suffering." + + prov_investment: "Provincial Investment" + prov_investment_contract: "$prov_investment$" + prov_investment_desc: "An opportunity has presented itself for you to invest in the capital of your governorship." + prov_investment_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2020.t: "$prov_investment$" + governor_contract_event.2020.desc: "How good it feels when diligent governorship meets fine results!\n\nThe treasury of [ongoing_destination.GetName] is filled to the brim, and I have been tasked by the central administration with reinvesting the surplus locally." + governor_contract_event.2020.a: "Infrastructure is the key to success." + governor_contract_event.2020.b: "Doing the work of [ROOT.Char.GetFaith.HighGodName] on earth is a privilege." + governor_contract_event.2020.c: "Let's erect a grand statue in [emperor.GetTitledFirstNamePossessiveNoTooltip] name!" + governor_contract_event.2020.c_tt: "Unfortunately, that implies #EMP reappropriating#! construction materials from all over the area..." + governor_contract_event.2020.d: "The local traders could use the extra help." + governor_contract_event.2020.e: "Our brave soldiers deserve better!" + governor_contract_event.2020.f: "Food for the people is the solution!" + governor_contract_event.2021.t: "$prov_investment$: Success" + governor_contract_event.2021.desc_infrastructure: "The busiest thoroughfares in [task_contract_location.GetNameNoTier] are the first to be renewed. My hired laborers toil and, with exemplary pay on offer, progress is swift." + governor_contract_event.2021.desc_church: "The plans for [task_contract_location.GetNameNoTierPossessive] new [ROOT.Char.GetFaith.HouseOfWorship] are an immaculate image of divine inspiration, though — compared to the great holy places of the world — ours is but a humble site. Let the faithful be gathered together!" + governor_contract_event.2021.desc_monument: "The visage of [emperor.GetFaith.WealthGodName], one of [emperor.GetTitledFirstNamePossessive] chief patrons, is lovingly — and quite flatteringly — recreated by my artisans. The great sovereign's name is inscribed below... as is mine." + governor_contract_event.2021.desc_traders: "Goods come flooding in! Commerce thrives, fed merely by my pronouncement of relief on a few key tariffs. Now, to clear stinking livestock from that unused end of the local forum..." + governor_contract_event.2021.desc_military: "The sounds of celebratory revelry drift up from the barracks; with the wealth I've heaped upon them, the loyalty and fighting fitness of my troops is most assured! My captains lead the rest in chanting out my name." + governor_contract_event.2021.desc_food: "Even the lowest of beggars in [task_contract_location.GetNameNoTier] sleeps with a full stomach tonight. My distribution of grain has bright-faced families hoisting sheaves up to the rafters; all the region smells of fresh-baked bread." + governor_contract_event.2021.desc: "\n\nThis choice of investment proved sagacious. With but early results on display, I am already praised and feted by the people under my care." + governor_contract_event.2021.a: "A job well done." + governor_contract_event.2022.t: "$prov_investment$: Failure" + governor_contract_event.2022.desc_monument: "I have informed the capital's administration of my newest monument, the jewel-ornamented statue of ostentatious grandeur... and I've heard nothing in return. [emperor.GetTitledFirstName] does not deign to honor me for my act of fealty, if indeed [emperor.GetSheHe] knows of it at all." + governor_contract_event.2022.desc_traders: "With my adjustment of taxes and tariffs, traders crow in delight at new profits... but we see no increase in revenue. What's more, local artisans and laborers complain of my administration: in the face of newly-cheapened imports, they struggle to offload their goods." + governor_contract_event.2022.desc_military: "The troops were not quite #EMP level-headed#! with regards to their sudden bonus in salary... with wild abandon, they threw their pay into an orgy of unsavory revels.\n\nNow, beloved captains face criminal charges, soldiers bear wounds from brawling with the locals, and for all I am somehow held to blame" + governor_contract_event.2022.desc: "\n\nThis, sadly, has not played out as I expected. And my province's surplus is lost." + governor_contract_event.2022.a: "Unfortunate." + governor_contract_event.2020.success: "The investment is a success" + governor_contract_event.2020.failure: "The investment is a failure" + ep3_contract_infrastructure_modifier: "Developing Infrastructure" + ep3_contract_infrastructure_modifier_desc: "Roads, messenger stations, water provision, and all a county needs to grow." + ep3_food_distribution_modifier: "Food Distribution" + ep3_food_distribution_modifier_desc: "A surplus of money in the local government has been used to import cheap food for the wider populace." + ep3_invested_military_modifier: "Improved Military" + ep3_invested_military_modifier_desc: "A significant amount of gold has been invested into the troops stationed in this county." + + raiding_peasants: "Raiding Peasants" + raiding_peasants_contract: "$raiding_peasants$" + raiding_peasants_desc: "A self-organized band of peasants has been raiding our lands from across the border." + raiding_peasants_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2030.t: "$raiding_peasants$" + governor_contract_event.2030.desc: "Concerning news have come from [ongoing_destination.GetName].\n\nApparently, a group of local peasants has taken up arms and, in unruly gangs, ventured beyond our borders into [neighbor.GetCulture.GetNameNoTooltip] territory.\n\nThe practice itself is unlikely to cause diplomatic concerns, but military actions — and the possession of weapons — are a prerogative of the army. Any violation of the law, therefore, must be investigated." + governor_contract_event.2030.a: "I need to see it for myself." + governor_contract_event.2030.a.tt: "You travel to [ongoing_destination.GetNameNoTooltip]" + governor_contract_event.2031.desc: "When I reach [ongoing_destination.GetName], my information prove to be correct. It doesn't take my guards long to round up a considerable group of locals, all in possession of unauthorized weapons.\n\n"We need them to defend ourselves and our families!" they protest. "Those [neighbor.GetCulture.GetNameNoTooltip] scoundrels can't be trusted! They need to learn to stay well away from us!"" + governor_contract_event.2031.a: "You shall all work for me — legally." + governor_contract_event.2031.b: "Banditry is punished with death." + governor_contract_event.2031.c: "Do you need any #EMP unofficial#! help?" + governor_contract_event.2031.d: "You are supposed to be working your fields." + governor_contract_event.2031.e: "Give me all the gold you raided and you can go!" + ep3_peasant_border_raids_modifier: "Peasants' Border Raids" + ep3_peasant_border_raids_modifier_desc: "The local peasants have armed themselves and are actively protecting their borders." + ep3_peasant_workers_modifier: "Back to the Fields" + ep3_peasant_workers_modifier_desc: "The local militia has been disbanded and the peasants sent back to the fields." + + wild_predators: "Predatory Beasts" + wild_predators_contract: "$wild_predators$" + wild_predators_desc: "Wild beasts eat the animals of a local game preserve and harry the locals. Sightings are oft reported near their villages; bloody incidents in their paddocks." + wild_predators_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2040.t: "$wild_predators$" + governor_contract_event.2040.desc: "The news from [ongoing_destination.GetName] is dire, and fearfully told.\n\nLocal wildlife are becoming scarcer and scarcer, their numbers collapsing due to a growing [ROOT.Char.Custom('RegionalFerociousAnimal')] presence. These fiends, made braver by their mounting numbers, are not content with depopulating the wilderness, but can now be seen lurking around my people's settlements.\n\nLivestock and children are closely watched, but still... the outskirts of [ongoing_destination.GetName] are not safe." + governor_contract_event.2040.a: "I need to do something." + governor_contract_event.2041.desc: "My arrival in [ongoing_destination.GetName] is amidst tragedy and worry. Locals mutter that — in the safety of an enclosure — a prize [ROOT.Char.Custom('RegionalFarmAnimal')] was recently torn apart by an enormous [ROOT.Char.Custom('RegionalFerociousAnimal')].\n\nA quick ride about the region proves this information reliable; wild game is rare to see, and the signs of [ROOT.Char.Custom('RegionalFerociousAnimal')] attacks are everywhere.\n\nThey say an infant is missing. They say tiny, shattered bones were found." + governor_contract_event.2041.a: "I know just the right professionals." + governor_contract_event.2041.a.tt: "You send in expert poisoners to selectively kill the out-of-control predators with bait" + governor_contract_event.2041.b: "I shall hunt the creatures myself!" + governor_contract_event.2041.c: "We need more hunters." + governor_contract_event.2041.d: "The local peasants can handle it." + governor_contract_event.2041.e: "I've always wanted an exotic pet..." + governor_contract_event.2041.e.tt: "Send your guards to capture as many animals as they can" + governor_contract_event.2041.f: "Just import and release more prey!" + governor_contract_event.2041.b.success: "The great hunt goes well" + governor_contract_event.2041.b.fail: "Your hunting party descends into chaos" + governor_contract_event.2041.c.success: "Many trappers come to claim the beasts" + governor_contract_event.2041.c.fail: "Few take interest in stalking a [ROOT.Char.Custom('RegionalFerociousAnimal')]" + governor_contract_event.2041.d.success: "Local bushcraft prevails" + governor_contract_event.2041.d.fail: "The peasants are but fodder" + governor_contract_event.2041.e.success: "Every last [ROOT.Char.Custom('RegionalFerociousAnimal')] is caged" + governor_contract_event.2041.e.fail: "Your pens remain empty" + + governor_contract_event.2042.desc: "Victory!\n\n[ongoing_destination.GetName] is free of the wilderness's terrors, purged of its [ROOT.Char.Custom('RegionalFerociousAnimal')] problem — my determined intervention has delivered the commoners from fear!\n\nIn the [ongoing_destination.GetTerrain.GetNameNoTooltip|l] where I stand, [ROOT.Char.GetFaith.HighGodNamePossessive] innocent grazing creatures, his skittish plant-eaters, will soon range freely once again." + governor_contract_event.2042.a: "I take full credit for this success." + governor_contract_event.2043.desc: "Gnashing teeth, claws like spear-heads, great slobbering maws just behind — blind with terror, we flee the [ongoing_destination.GetTerrain.GetNameNoTooltip|l] of [ongoing_destination.GetName], hardly escaping with our lives!\n\nThe [ROOT.Char.Custom('RegionalFerociousAnimal')] menace here is truly unstoppable. Perhaps it is, even, the wild servants of [ROOT.Char.GetFaith.DevilName] who haunt this hamlet?\n\n[ROOT.Char.Custom('CulturalCurse')|U]! I can only depart, leaving the locals to be terrorized by the creatures..." + governor_contract_event.2043.a: "I can only hope they start eating #EMP each other...#!" + ep3_abundant_game_modifier: "Abundant Game" + ep3_abundant_game_modifier_desc: "Game is abundant in this area, making Hunts more successful." + ep3_wild_predators_modifier: "$wild_predators$" + ep3_wild_predators_modifier_desc: "An abundance of wild predators prowls in these lands, killing peasants and game alike." + ep3_ferocious_pets_modifier: "Ferocious Pets" + ep3_ferocious_pets_modifier_desc: "This character has developed an expensive taste for ferocious pets." + + evil_presence: "An Evil Presence" + evil_presence_contract: "$evil_presence$" + evil_presence_desc: "Terrified commoners claim to be persecuted by an evil presence. Unable to comfort this beleaguered flock, local clerics request your intervention." + evil_presence_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2050.t: "$evil_presence$" + governor_contract_event.2050.desc: "The local [ongoing_destination.GetCounty.GetFaith.PriestNeuterPlural] of [ongoing_destination.GetName] write to me, panicky, snatching at my attention with dire warnings of violence-to-come.\n\nThe local populace is in a frenzy over a series of suspicious events: ill omens, such as" + governor_contract_event.2051.desc_a: "spoiled fish," + governor_contract_event.2051.desc_b: "fevers," + governor_contract_event.2051.desc_c: "fighting spouses," + governor_contract_event.2051.desc_d: "children waking up screaming in the night," + governor_contract_event.2051.desc_e: "mass headaches," + governor_contract_event.2051.desc_f: "failed hunts," + governor_contract_event.2051.desc_g: "sick cows," + governor_contract_event.2051.desc_h: "ruined production," + governor_contract_event.2051.desc_i: "ruined fields," + governor_contract_event.2051.desc_l: "and weird apparitions of dogs." + governor_contract_event.2051.desc_m: "and weird apparitions of horses." + governor_contract_event.2051.desc_n: "and weird apparitions of eagles." + governor_contract_event.2051.desc_o: "and weird apparitions of cats." + governor_contract_event.2051.desc_p: "and weird apparitions of frogs." + governor_contract_event.2051.desc_q: "and weird apparitions of snakes." + governor_contract_event.2051.desc_end: "\n\nThe people are terrified that a devil — or some other unnameable evil — has taken up residence amidst them." + governor_contract_event.2050.a: "I suppose an investigation is required." + governor_contract_event.2051.desc: "The good people of [ongoing_destination.GetName] are out of their minds with terror.\n\nPanic and paranoia run high. At shabby tenements and the local magistrate's [ROOT.Char.Custom('ResidenceBuilding')] alike, my entourage is met with barred doors, accusations against friends and kin of the most horrible practices, and honest citizens who see monsters in every shadow. Productive activities are practically suspended.\n\nOne way or another, this state of affairs must be ended. Without any faith in [ongoing_destination.GetCounty.GetFaith.HighGodNamePossessive] protection... the threads of this society can hardly fray any further." + governor_contract_event.2051.a: "I'll request an official exorcist from the capital." + governor_contract_event.2051.b: "Bring in a renowned [ROOT.Char.GetFaith.PriestNeuter] for an exorcism." + governor_contract_event.2051.c: "There must be an evil sorcerer!" + governor_contract_event.2051.d: "What do your elders suggest?" + governor_contract_event.2051.e: "You are just seeing things. Nonsense." + ep3_church_investigation_modifier: "Church Investigation" + ep3_church_investigation_modifier_desc: "The Church has gotten involved in an investigation on potential users of demonic magic." + ep3_rationalist_gov_modifier: "Rationalist" + ep3_rationalist_gov_modifier_desc: "This character has a reputation for valuing reason above religion, a somewhat unpopular opinion." + ep3_local_practices_modifier: "Traditional Practices Upheld" + ep3_local_practices_modifier_desc: "The local governor has openly supported the traditional practices — some call them superstitions — to deal with devils." + + miraculous_healing: "Miraculous Healing" + miraculous_healing_contract: "$miraculous_healing$" + miraculous_healing_desc: "A local invalid receives many donations of relics and valuables, and each time claims to be restored to health by divine grace. Almsgivers grow increasingly ill-amused." + miraculous_healing_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2060.t: "$miraculous_healing$" + governor_contract_event.2060.desc: "An interesting case, and a most unusual individual, are brought before me for judgment.\n\nThis [scammer.GetWomanMan], [scammer.GetName], is accused of being a false invalid: a huckster who makes a living hoodwinking the faithful. [scammer.GetSheHe|U] [scammer.Custom('quirk_pos_present')], charmingly, as the donated relics are laid out before me.\n\nWitnesses attest to seeing this "blind" man by the stoop of their [ROOT.Char.GetFaith.HouseOfWorshipPlural], appealing to their good natures; [scammer.GetSheHe] warms the hearts of congregations by being miraculously healed, again and again... but only after receiving coins or holy items." + governor_contract_event.2060.a: "This scammer will be punished in an exemplary way." + governor_contract_event.2060.b: "I could use someone with your #EMP creativity#!." + governor_contract_event.2060.c: "Hand the relics back, and I can forget this ever happened." + governor_contract_event.2060.d: "A solid fine is an adequate punishment." + governor_contract_event.2060.e: "The only possible penance is prison." + governor_contract_event.2060.f: "[ROOT.Char.GetFaith.HighGodName] works in mysterious ways." + + buried_treasure: "Buried Treasure" + buried_treasure_contract: "$buried_treasure$" + buried_treasure_desc: "A local peasant has found a hoard of buried gold, and a dispute has risen as to who it belongs to." + buried_treasure_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2070.t: "$buried_treasure$" + governor_contract_event.2070.desc: "The elders of a small community near [ongoing_destination.GetName] have contacted me to make a decision about a rare event.\n\nA peasant family has unearthed a substantial hoard of gold coins while working the fields! Their neighbors promptly broke into factions: some believe that the gold should go to the finders, while others argue for the windfall be shared by the whole village.\n\nThe word of a higher authority could slake the greed of these simple folk, and spare them descending into petty violence." + governor_contract_event.2070.a: "A most curious occurrence indeed!" + governor_contract_event.2071.desc: "Upon reaching [ongoing_destination.GetName], I am introduced to the chief treasure-finding peasant — a [peasant.GetWomanMan] named [peasant.GetFirstName] — and the treasure itself.\n\n" + governor_contract_event.2071.desc.byz: "It is an ancient-looking chest filled to the brim with golden [Glossary( 'aurei', 'AUREUS_GLOSS')], all coined under the same emperor. To make an educated guess, this could be the treasury of some ancient legion; perhaps, even a year's worth of pay." + governor_contract_event.2071.desc.fallback: "It is a modest-looking chest filled to the brim with an assortment of golden coins minted throughout the region in different periods. My guess would be that the peasant has come across a buried stash from some long-dead crew of outlaws." + governor_contract_event.2071.desc.end: "\n\n[peasant.GetFirstNameNoTooltip] — and seemingly every serf of [peasant.GetHerHis] community — watches expectantly, breathlessly: "What's to be done with the treasure, wise [ROOT.Char.GetTitleAsName]?"" + governor_contract_event.2071.a: "Reinvest the gold in your own community." + governor_contract_event.2071.b: "All special gains must be taxed. #EMP Heavily.#!" + governor_contract_event.2071.c: "What's found on public land belongs to the realm." + governor_contract_event.2071.d: "The treasure is legally yours to do as you please." + governor_contract_event.2071.e: "This treasure belongs to the whole community." + AUREUS_GLOSS: "The aureus was a gold coin regularly issued from the Late Roman Republic up to the early 4th century AD, when it was replaced by the solidus. Originally, an aureus was worth 25 silver denarii but, due to the Late Empire's rampaging inflation, the new solidus was worth a whole 275000 denarii!" + ep3_treasure_invest_modifier: "Treasure Invested" + ep3_treasure_invest_modifier_desc: "A hoard of gold has been transformed into local investments, to the benefit of the whole county." + ep3_treasure_distributed_modifier: "Treasure Distributed" + ep3_treasure_distributed_modifier_desc: "The local populace enjoys some prosperity from the redistribution of an uncovered treasure." + + public_land: "Public Land" + public_land_contract: "$public_land$" + public_land_desc: "With blatant disregard for the traditional rights of the commoners, a local magnate is illegally hoarding lands." + public_land_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2080.t: "$public_land$" + governor_contract_event.2080.desc: "According to the reports from [ongoing_destination.GetName], a local magnate, [magnate.GetTitledFirstName], has been using every trick in the book to increase the extension of the lands [magnate.GetSheHe] owns directly.\n\nClearly, not all such methods are legal, and some are plainly #EMP distasteful#!." + governor_contract_event.2080.a: "I should intervene." + governor_contract_event.2081.desc: "Upon my arrival in [ongoing_destination.GetName], I'm immediately received by [magnate.GetTitledFirstName] in [magnate.GetHerHis] manse.\n\n"Let's not speak of frivolities," I open sternly. "A good plenty of irregularities and illegal deals emerge when one considers closers your recent land acquisitions."\n\n[magnate.GetFirstNameNoTooltip] is sheepish, but unrepentant. "#EMP My good friend#!, you know how these things are... there is such bureaucracy, and the unschooled peasants are so very ignorant and slow to grasp the law. One wishes sometimes to swiftly see their business through! Can you blame me for this?"" + governor_contract_event.2081.a: "The land shall be divided among small landowners." + governor_contract_event.2081.b: "$ep3_land_confiscate_modifier_desc$" + governor_contract_event.2081.c: "I could forget the accident for the right #EMP donation#!..." + governor_contract_event.2081.d: "Let's pretend this never happened, #EMP friend#!!" + governor_contract_event.2081.e: "Keep the land, but let the locals cultivate it." + ep3_lands_reinstated_modifier: "Small Landowners" + ep3_lands_reinstated_modifier_desc: "The presence of small landowners has been reinstated in the area." + ep3_land_confiscate_modifier: "Confiscated Lands" + ep3_land_confiscate_modifier_desc: "This is the perfect spot to expand my estate!" + + mad_prophet: "The Mad Prophet" + mad_prophet_contract: "$mad_prophet$" + mad_prophet_desc: "A self-declared prophet is terrorizing a whole county with their doomsday predictions." + mad_prophet_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2090.t: "$mad_prophet$" + governor_contract_event.2090.desc: "I have received troublesome news from [ongoing_destination.GetName].\n\nApparently, the [ongoing_destination.GetTitle.GetTierAsNameNoTooltip|l] is in turmoil because some self-declared prophet has been spreading panic with outrageous predictions about the imminence of the End of Days.\n\nThey are most likely just the ravings of a lunatic, but when these ravings compromise public security and order, it is my duty to intervene." + governor_contract_event.2090.a: "I need to investigate the situation." + governor_contract_event.2091.desc: ""#EMP THE END IS NIGH! REPENT! REPENT NOW OR BE SMITED!#!"\n\nWhen I arrive in [ongoing_destination.GetName], I easily find the prophet. Pushing through awed and bemused serfs, I trace the sound of screeching to its source.\n\nA [prophet.GetWomanMan] in rags berates the uneasy and terrified crowd with divinely-inspired ire. [prophet.GetNamePossessive] words make real their suspicions of the unknown; [prophet.GetSheHe] speaks to their fear of chaos, their dread of [prophet.GetFaith.NegativeAfterLife], and our common belief in the end of all things." + governor_contract_event.2091.a: "Everything is under control!" + governor_contract_event.2091.a.tt: "Your authority, skilled rhetorics, and calming presence manage to get the crowd under control." + governor_contract_event.2091.b: "We must shut [prophet.GetHerHim] up." + governor_contract_event.2091.c: "Guards, arrest the troublemaker." + governor_contract_event.2091.d: "You are wrong, [prophet.GetFirstNameNoTooltip], and I'll prove it to you!" + governor_contract_event.2091.e: "Only prayer can save us." + governor_contract_event.2091.e.tt: "You organize a great religious procession." + governor_contract_event.2091.f: "The local clergy can handle this." + governor_contract_event.2092.desc_persecute: "I'm glad to observe that my guards have succeeded in dispersing the crowd and putting an end to this whole nonsense.\n\nThe citizens of [ongoing_destination.GetName] can rest assured that they live in a civilized, devoted, and strong empire, immune to superstitions and safe from disorders!" + governor_contract_event.2092.desc_debate: ""... And this proves conclusively that the end is #EMP not#! near at all, and that [ROOT.Char.GetFaith.HighGodNamePossessive] wrath is #EMP not#! upon us."\n\nThe prophet is left speechless at my cultured disquisition; the crowd claps, appreciating a good religious debate, before heading back home." + governor_contract_event.2092.a: "I love a job well done!" + governor_contract_event.2093.desc_persecute: "Unfortunately, sending the guards in was not the right choice.\n\nThe terrified populace crowded around the prophet to protect [prophet.GetHerHim], and many — both soldiers and civilians — got hurt in the ensuing brawl.\n\nThe trouble-making prophet managed to slip away from the chaos, and disappear without a trace." + governor_contract_event.2093.desc_debate: ""So, by the nature of [ROOT.Char.GetFaith.HighGodName]... No — the word is #EMP essence#!, right? Or is it energy? Anyway, what is cannot not be. Or something..."\n\nI don't need to see the confusion on the faces of the people in front of me, nor to hear the chuckles from my adversary to know that I only made a fool of myself.\n\nI'm sure the locals will manage the issue by themselves. I'm leaving." + governor_contract_event.2093.a: "A shameful display." + ep3_religiously_pacified_modifier: "Religiously Pacified" + ep3_religiously_pacified_modifier_desc: "The local population's faith and trust in the institutions have been strengthened by their effective intervention against a budding doom cult." + ep3_doom_repressed_modifier: "Prophet's Cult Persecuted" + ep3_doom_repressed_modifier_desc: "A doom cult led by a mad prophet has been eradicated by force." + ep3_religious_debate_modifier: "Won Religious Debate" + ep3_religious_debate_modifier_desc: "This character shone in a religious debate against a mad prophet, showing to the people the wrong in their ways." + + titles_sale: "Titles for Sale" + titles_sale_contract: "$titles_sale$" + titles_sale_desc: "A cleric is reported to be selling religious titles and offices to the highest bidder. A highly illegal practice." + titles_sale_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2100.t: "$titles_sale$" + governor_contract_event.2100.desc: "The case I'm asked to judge today is quite delicate: a local [priest.GetFaith.PriestNeuter] has been caught offering religious titles and offices to the unqualified children of local notables.\n\nThe [priest.GetWomanMan], [priest.GetName], fills [priest.GetHerHis] purse at [priest.GetFaith.HighGodNamePossessive] and [priest.GetHerHis] superiors' expense.\n\nThe practice is — obviously — very illegal. Because of the religious nature of the crime itself and of the parties involved, it is also rather controversial. There is great risk that, by my necessary intervention in their affairs, the clergy will be displeased." + governor_contract_event.2100.a: "The gold should be donated to religious institutions." + governor_contract_event.2100.b: "The illegally-acquired gold is hereby confiscated." + governor_contract_event.2100.c: "Repent! And return the money to your buyers." + governor_contract_event.2100.d: "I could use a favor from someone like you..." + ep3_repayed_church_titles_modifier: "Repurposed Gold" + ep3_repayed_church_titles_modifier_desc: "The gold accumulated through the illegal sale of religious offices has been put to good use by its legitimate religious owners." + + hungry_times: "Hungry Times" + hungry_times_contract: "$hungry_times$" + hungry_times_desc: "A recent pestilence has caused a famine, which has pushed some locals to #EMP desperate#! measures to surive." + hungry_times_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2110.t: "$hungry_times$" + governor_contract_event.2110.desc: "The news from [ongoing_destination.GetName] is particularly troubling.\n\nThe government's measures to aid the area after a recent pestilence were seemingly inadequate; a famine has struck the local settlements. Some denizens were driven to desperate, abhorrent practices to survive." + governor_contract_event.2110.desc_murder: "\n\nAccording to this report, several peasants have been caught killing and butchering their fellow humans to consume their flesh!" + governor_contract_event.2110.desc_cannibal: "\n\nAccording to this report, several peasants have been caught consuming the flesh of their fellow humans who died from starvation!" + governor_contract_event.2110.desc_animal: "\n\nAccording to this report, several peasants have been caught killing and consuming religiously unclean animals, thus attracting the ire of the local clergy." + governor_contract_event.2110.a: "I need to hear more about this." + governor_contract_event.2111.desc: "When I reach [ongoing_destination.GetName], the accused await in chains, their eyes downcast, their garments rent and bloodied.\n\nThe defendants, led by [cannibal.GetFirstName], chained and trembling, with their eyes downcast, are roared at by a great, skeletal-faced crowd. Bony fists are shaken; thin voices roar for an exemplary punishment.\n\nI am shown the evidence... split femurs and rotten, severed heads. Something horrible happened here; it was truly an abomination before [ROOT.Char.GetFaith.HighGodName]." + governor_contract_event.2111.a: "I should have never left this community alone." + governor_contract_event.2111.b: "The most desperate of crimes call for the greatest forgiveness." + governor_contract_event.2111.c: "The culprits shall pay. So says the law." + governor_contract_event.2111.d: "The whole community is tainted by this abomination!" + governor_contract_event.2111.e: "Such heinous crimes deserve my undivided attention." + ep3_rebuild_effort_modifier: "Concerted Rebuilding Effort" + ep3_rebuild_effort_modifier_desc: "The local governor is focusing on rebuilding this area after it was hit hard by an epidemic." + ep3_tight_control_modifier: "Tight Control" + ep3_tight_control_modifier_desc: "Some #EMP unfortunate#! episodes in this county forced the governor to put it all under special observation." + + wartime_measures: "Wartime Measures" + wartime_measures_contract: "$wartime_measures$" + wartime_measures_desc: "My liege is at war. An official request has just reached me from the capital: provide all possible support to passing troops." + wartime_measures_desc_title: "$task_contract_governance_desc_title$" + governor_contract_event.2120.t: "$wartime_measures$" + governor_contract_event.2120.desc: "An official-looking letter, bearing the sigil of the [ROOT.Char.GetLiege.GetTitleAsNameNoTooltip] [ROOT.Char.GetLiege.GetHerselfHimself], awaits in my office today:\n\n"The invincible armies of our [ROOT.Char.GetLiege.GetPrimaryTitle.GetBaseNameNoTier] march against the deplorable foe. And should friendly troops cross into the lands assigned to your governorship, you stand ordered to provide all appropriate comfort and support.\n\nIn these times of hardship, the [ROOT.Char.GetLiege.GetTitleAsNameNoTooltip] most appreciates the sacrifices of [ROOT.Char.GetLiege.GetHerHis] [ROOT.Char.GetLiege.GetCulture.GetName] subjects."" + governor_contract_event.2120.a: "Naturally, we shall offer our complete support!" + governor_contract_event.2120.b: "Our supplies are at the [ROOT.Char.GetLiege.GetTitleAsNamePossessiveNoTooltip] service." + governor_contract_event.2120.c: "We shall arrange lodgings for the troops." + governor_contract_event.2120.d: "I'm sure some gold will help." + governor_contract_event.2120.e: "Our lookouts will support the military effort." + governor_contract_event.2120.f: "It's more important to support our people through the war." + ep3_war_support_modifier: "War Support" + ep3_war_support_modifier_desc: "No effort has been spared in this county to support the liege's wars." + ep3_war_supplies_modifier: "War Supplies" + ep3_war_supplies_modifier_desc: "This county is directing all resources to support transiting troops." + ep3_war_lodgings_modifier: "War Lodgings" + ep3_war_lodgings_modifier_desc: "This county is ensuring allied troops are well taken care of." + ep3_war_lookout_modifier: "War Lookouts" + ep3_war_lookout_modifier_desc: "An organized system of lookouts protects this county." + ep3_war_compensations_modifier: "War Compensations" + ep3_war_compensations_modifier_desc: "This county is receiving specific support to keep thriving despite any ongoing war." + + admin_contract_invalidated_title: "[GetPlayer.Custom('GetContractOrIssue')] Invalidated" + admin_contract_invalidated_desc: "Ongoing [governance_issue|E] has been invalidated" + + governor_scheme_success_chance_desc: "Successfully completing this [contract_scheme|E] will result in you being rewarded for your efforts." + governor_trait_desc: "[GetTrait('governor').GetName( GetNullCharacter )] [trait|E]: $VALUE|=+0$" + governor_trait_desc_short: "[GetTrait('governor').GetName( GetNullCharacter )] [trait|E]" + governor_trait_with_character_desc: "[GetTrait('governor').GetName( ROOT.Char )] [trait|E]: $VALUE|=+0$" + administrator_trait_desc: "[GetTrait('administrator').GetName( GetNullCharacter )] [trait|E]: $VALUE|=+0$" + overseer_trait_desc: "[GetTrait('overseer').GetName( GetNullCharacter )] [trait|E]: $VALUE|=+0$" + + ep3_governance_tax_relief: "Tax Relief" + ep3_governance_tax_relief_desc: "This county has been granted a tax relief by the region's governor, much to the satisfaction of the local populace." + ep3_governance_stationed_troops: "Reinforced Garrison" + ep3_governance_stationed_troops_desc: "On order of the governor, this holding has a reinforced garrison to ensure a productive environment." + ep3_governance_festivities: "Arranged Festivities" + ep3_governance_festivities_desc: "A local official has been #EMP persuaded#! to host a number of fairs and festivals." + ep3_governance_infrastructure: "Improved Infrastructure" + ep3_governance_infrastructure_desc: "A local official has spent a lot of funds to improve the area's infrastructure." + ep3_governance_harvest: "Grain Distribution" + ep3_governance_harvest_desc: "This county is benefiting from grain being distributed to the people, at the behest of the local governor." + ep3_governance_great_harvest: "Great Grain Distribution" + ep3_governance_great_harvest_desc: "This county is benefiting from a significant distribution of grain, organized by the local governor." + ep3_governance_mercenary_troops: "Mercenary Troops" + ep3_governance_mercenary_troops_desc: "This character has recruited a number of former bandits as mercenaries, despite what others may think." + ep3_governance_workforce: "Conscripted Workforce" + ep3_governance_workforce_desc: "This county has large numbers of people drafted into a workforce serving the community." + ep3_governance_rampant_bandits: "Rampant Bandits" + ep3_governance_rampant_bandits_desc: "This county is plagued by bandits; violent attackers against travelers and merchants are commonplace." + + SCHEME_TIER_DIFFICULTY: "[task_contract_tier|E]: $VALUE|+=0$" + admin_contract_success_tt_trait: "You may gain the [GetTrait('governor').GetName( GetNullCharacter )] [trait|E]" + admin_contract_success_tt_xp: "[trait_level_track_xp|E] in the [GetTrait('governor').GetName( GetNullCharacter )] [trait|E]" + admin_contract_success_tt_rewards: "You may choose between an assortment of rewards, including:#indent_newline:3 \n$EFFECT_LIST_BULLET$$admin_contract_success_tt_xp$\n$EFFECT_LIST_BULLET$[gold_i|E][gold|E]\n$EFFECT_LIST_BULLET$[influence_i|E][influence|E]\n$EFFECT_LIST_BULLET$[prestige_i|E][prestige|E]\n$EFFECT_LIST_BULLET$[piety_i|E][piety|E]\n$EFFECT_LIST_BULLET$Improvements to your [counties|E] or [holdings|E][AddLocalizationIf( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_has_merit' ), 'admin_contract_merit_bullet' )]#!" + admin_contract_merit_bullet: "\n$EFFECT_LIST_BULLET$[merit_i|E][merit|E]" + admin_contract_failure_tt: "You may suffer minor penalties, such as losing [prestige_i|E][prestige|E] or [influence_i|E][influence|E]" + has_active_governance_issue: "You already have an ongoing [governance_issue|E]" + + task_contract_reward_effect_taxes_governor_desc: "Potential Outcome:" + task_contract_reward_effect_taxes_paid_in_full_desc: "$label_success_standard$" + task_contract_reward_effect_taxes_paid_partially_desc: "$label_success_standard$" + task_contract_reward_effect_taxes_station_troops_desc: "$label_success_standard$" + task_contract_reward_effect_taxes_assign_administrator_desc: "$label_success_standard$" + task_contract_reward_effect_taxes_lower_taxes_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_governor_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_claim_gold_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_invest_in_buildings_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_hold_festivities_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_reprimand_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_hook_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_governor_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_distribute_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_capital_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_charity_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_sell_excess_desc: "$label_success_standard$" + task_contract_reward_effect_harvest_claim_it_yourself_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_governor_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_pardon_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_recruit_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_payment_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_execute_desc: "$label_success_standard$" + task_contract_reward_effect_bandit_gold_desc: "$label_success_standard$" + task_contract_reward_effect_soldiers_land_desc: "$label_success_standard$" + task_contract_reward_effect_soldiers_rival_desc: "$label_success_standard$" + task_contract_reward_effect_soldiers_break_desc: "$label_success_standard$" + task_contract_reward_effect_soldiers_punish_desc: "$label_success_standard$" + task_contract_reward_effect_soldiers_pay_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_in_govt_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_in_fire_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_in_help_desc: "$label_success_standard$" + task_contract_reward_effect_mayor_in_punish_desc: "$label_success_standard$" + task_contract_reward_effect_invest_infrastructure_desc: "$label_success_standard$" + task_contract_reward_effect_invest_monument_desc: "$label_success_standard$" + task_contract_reward_effect_invest_traders_desc: "$label_success_standard$" + task_contract_reward_effect_invest_military_desc: "$label_success_standard$" + task_contract_reward_effect_invest_food_desc: "$label_success_standard$" + task_contract_reward_effect_invest_church_desc: "$label_success_standard$" + task_contract_reward_effect_peasant_enroll_desc: "$label_success_standard$" + task_contract_reward_effect_peasant_punish_desc: "$label_success_standard$" + task_contract_reward_effect_peasant_encourage_desc: "$label_success_standard$" + task_contract_reward_effect_peasant_work_desc: "$label_success_standard$" + task_contract_reward_effect_peasant_take_desc: "$label_success_standard$" + task_contract_reward_effect_predators_poisoners_desc: "$label_success_standard$" + task_contract_reward_effect_predators_hunt_desc: "$label_success_standard$" + task_contract_reward_effect_predators_hunters_desc: "$label_success_standard$" + task_contract_reward_effect_predators_locals_desc: "$label_success_standard$" + task_contract_reward_effect_predators_capture_desc: "$label_success_standard$" + task_contract_reward_effect_predators_preys_desc: "$label_success_standard$" + task_contract_reward_effect_presence_official_desc: "$label_success_standard$" + task_contract_reward_effect_presence_exorcize_desc: "$label_success_standard$" + task_contract_reward_effect_presence_sorcerer_desc: "$label_success_standard$" + task_contract_reward_effect_presence_local_desc: "$label_success_standard$" + task_contract_reward_effect_presence_rationalize_desc: "$label_success_standard$" + task_contract_reward_effect_healing_example_desc: "$label_success_standard$" + task_contract_reward_effect_healing_hire_desc: "$label_success_standard$" + task_contract_reward_effect_healing_relic_desc: "$label_success_standard$" + task_contract_reward_effect_healing_fine_desc: "$label_success_standard$" + task_contract_reward_effect_healing_imprison_desc: "$label_success_standard$" + task_contract_reward_effect_healing_faith_desc: "$label_success_standard$" + task_contract_reward_effect_treasure_invest_desc: "$label_success_standard$" + task_contract_reward_effect_treasure_tax_desc: "$label_success_standard$" + task_contract_reward_effect_treasure_commandeer_desc: "$label_success_standard$" + task_contract_reward_effect_treasure_acknowledge_desc: "$label_success_standard$" + task_contract_reward_effect_treasure_distribute_desc: "$label_success_standard$" + task_contract_reward_effect_land_reinstate_desc: "$label_success_standard$" + task_contract_reward_effect_land_confiscate_desc: "$label_success_standard$" + task_contract_reward_effect_land_bribe_desc: "$label_success_standard$" + task_contract_reward_effect_land_favor_desc: "$label_success_standard$" + task_contract_reward_effect_land_people_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_reassure_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_persecute_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_arrest_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_debate_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_ceremonies_desc: "$label_success_standard$" + task_contract_reward_effect_prophet_clergy_desc: "$label_success_standard$" + task_contract_reward_effect_titles_repay_desc: "$label_success_standard$" + task_contract_reward_effect_titles_commandeer_desc: "$label_success_standard$" + task_contract_reward_effect_titles_back_desc: "$label_success_standard$" + task_contract_reward_effect_titles_bribe_desc: "$label_success_standard$" + task_contract_reward_effect_hungry_support_desc: "$label_success_standard$" + task_contract_reward_effect_hungry_amnesty_desc: "$label_success_standard$" + task_contract_reward_effect_hungry_punish_desc: "$label_success_standard$" + task_contract_reward_effect_hungry_persecute_desc: "$label_success_standard$" + task_contract_reward_effect_hungry_control_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_support_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_supplies_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_lodgings_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_gold_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_lookouts_desc: "$label_success_standard$" + task_contract_reward_effect_wartime_compensations_desc: "$label_success_standard$" + + admin_request_choose_opportunity: "This situation allows you to choose an outcome" + overdue_taxes_request: "Solve the situation potentially using your [diplomacy|E] or [stewardship|E]" + hoarding_mayor_request: "$admin_request_choose_opportunity$" + bountiful_harvest_request: "$admin_request_choose_opportunity$" + rampant_bandits_request: "Solve the situation potentially using your [martial|E] or [intrigue|E]" + discontent_soldiers_request: "$admin_request_choose_opportunity$" + inept_mayor_request: "$admin_request_choose_opportunity$" + prov_investment_request: "Solve the situation potentially using your [martial|E], [stewardship|E] or [intrigue|E]" + raiding_peasants_request: "$admin_request_choose_opportunity$" + wild_predators_request: "Solve the situation potentially using your [martial|E], [stewardship|E] or [prowess|E]" + evil_presence_request: "$admin_request_choose_opportunity$" + miraculous_healing_request: "$admin_request_choose_opportunity$" + buried_treasure_request: "$admin_request_choose_opportunity$" + public_land_request: "$admin_request_choose_opportunity$" + mad_prophet_request: "Solve the situation potentially using your [martial|E] or [learning|E]" + titles_sale_request: "$admin_request_choose_opportunity$" + hungry_times_request: "$admin_request_choose_opportunity$" + wartime_measures_request: "Solve the situation potentially using your [martial|E] or [stewardship|E]" + task_contract_location_not_in_realm: "You are not the [GetPlayer.Custom('GetGovernorConcept')] of [task_contract_possessive|E] location" diff --git a/localization/english/replace/dynasties/zz_NEOW_dynasty_names_l_english.yml b/localization/english/replace/dynasties/zz_NEOW_dynasty_names_l_english.yml index 331b91f4..c22af93c 100644 --- a/localization/english/replace/dynasties/zz_NEOW_dynasty_names_l_english.yml +++ b/localization/english/replace/dynasties/zz_NEOW_dynasty_names_l_english.yml @@ -28,6 +28,7 @@ dynn_leroux:0 "Leroux" dynn_belpois:0 "Belpois" dynn_giry:0 "Giry" + dynn_britannia_kohn:0 "Kohn" dynn_eiffel:0 "Eiffel" dynn_spatstony:0 "Spatstony" dynn_millardet:0 "Millardet" diff --git a/localization/english/replace/game_concepts_l_english.yml b/localization/english/replace/game_concepts_l_english.yml new file mode 100644 index 00000000..d7dd272b --- /dev/null +++ b/localization/english/replace/game_concepts_l_english.yml @@ -0,0 +1,2703 @@ +l_english: + test_text_to_use_explanation:0 "The word [primary_title|E] is a game concept." + game_concept_vassal:0 "Vassal" + game_concept_vassals:0 "Vassals" + game_concept_vassalage:0 "Vassalage" + game_concept_vassal_possessive:0 "Vassal's" + game_concept_vassals_possessive:0 "Vassals'" + game_concept_direct_vassal:0 "Direct Vassal" + game_concept_direct_vassals:0 "Direct Vassals" + game_concept_direct_vassal_desc:0 "Your $game_concept_direct_vassals$ are the [vassals|E] that serve under you personally. Vassals-of-vassals are #emphasis not#! included." + game_concept_vassalize:0 "Vassalize" + game_concept_vassalization:0 "Vassalization" + game_concept_vassal_desc:1 "A $game_concept_vassal$ is a [ruler|E] who has sworn fealty to another ruler — their [liege|E].\n\nThe $game_concept_vassal$ provides their liege with [levies|E] and [taxes|E] — their [obligations|E] — in exchange for protection.\n\nIf a $game_concept_vassal$'s [opinion|E] of their liege is low, they may join [factions|E], or [scheme|E] to replace their liege with someone else." + game_concept_ruler:0 "Ruler" + game_concept_rulers:0 "Rulers" + game_concept_rulerpossessive:0 "Ruler's" + game_concept_ruler_desc:1 "A $game_concept_ruler$ is a [character|E] who holds at least one [title|E]." + game_concept_title:0 "Title" + game_concept_title_i: "@titles_icon!" + game_concept_titles:0 "Titles" + game_concept_titlepossessive:0 "Title's" + game_concept_title_desc:1 "A $game_concept_title$ is essentially a certificate of land ownership.\n\nThe smallest unit of land on the map is the [barony|E]. Baronies are organized into larger areas called [counties|E]. Counties [de_jure|E] belong to a [duchy|E], duchies to a [kingdom|E], and Kingdoms to an [empire|E].\n\nDuchies, Kingdoms and Empires do not always have a [holder|E], but are Titles that can be [created|E] by a ruler who controls enough of the corresponding territory." + game_concept_holder:0 "Holder" + game_concept_holders:0 "Holders" + game_concept_holder_possessive:0 "Holder's" + game_concept_holders_possessive:0 "Holders'" + game_concept_hold:0 "Hold" + game_concept_holder_desc:1 "A [title|E]'s $game_concept_holder$ is the character who owns the title. [barony|E] and [county|E] titles will always have $game_concept_holders$ once settled, whereas [duchy|E], [kingdom|E] and [empire|E] titles might not have been created yet. As a further caveat, the $game_concept_holder$ of a high-level Title might not actually control any territory within the Title's [de_jure|E] area.\n\nHolding higher-tier Titles allows you to have higher-tier [vassals|E]. For example, Dukes can have Counts as Vassals, and Kings can have Dukes." + game_concept_de_jure:0 "De Jure" + game_concept_de_jure_desc:1 "Most [titles|E] of are considered part of a higher-Tier Title $game_concept_de_jure$ ('by law').\n\nFor example, a [ruler|E] may be [king|E] of England, but their [realm|E] does not yet contain all the lands that are legally considered to be part of England.\n\nThe [holder|E] of a [duchy|E], [kingdom|E], or [empire|E] always has a [casus_belli|E] to seize control of its $game_concept_de_jure$ constituent titles.\n\n[vassals|E] will also decide who their [rightful_liege|E] is based on what Title their [primary_title|E] is De Jure a part of." + game_concept_de_jure_drift:0 "De Jure Drift" + game_concept_de_jure_drift_drifted:0 "Drifted" + game_concept_de_jure_drift_drift:0 "Drift" + game_concept_de_jure_drifting: "De Jure Drifting" + game_concept_de_jure_drift_desc:1 "$game_concept_de_jure_drift_desc_part_1$\n\n$game_concept_de_jure_drift_desc_part_2$" + game_concept_de_jure_drift_desc_part_1:0 "A slow process by which a [title|E]'s [de_jure|E] [liege|E] can change. It occurs naturally when a [duchy|E] or [kingdom|E] is completely controlled by a [ruler|E] who does not hold the territory's de jure liege title.\n\nThis process can be sped up by assigning your [chancellor|E] to the appropriate [councillor_task|E] #weak ($task_integrate_title$)#!. Duchies can only $game_concept_de_jure_drift$ into Kingdoms, and Kingdoms can only Drift into [empires|E].\n\nLetting titles De Jure Drift into your [primary_title|E] is a good way to get rid of the [rightful_liege|E] penalty." + game_concept_de_jure_drift_desc_part_2:0 "#weak Example: The Duchy of $d_northumberland$ is de jure part of $k_england$, but the territory of the duchy is entirely within $k_scotland$. Since the King of $k_scotland$ does not also hold $k_england$, the duchy will start to $game_concept_de_jure_drift$ toward becoming a part of $k_scotland$.#!" + game_concept_primary_title:0 "Primary Title" + game_concept_primary_titles:0 "Primary Titles" + game_concept_primary_title_desc:0 "A [rulerpossessive|E] $game_concept_primary_title$ is their highest-ranked [title|E] that they identify most closely with, determining their Coat of Arms and the name of their [realm|E].\n\nIf you control multiple titles of the same tier, you can choose which one should be your $game_concept_primary_title$." + game_concept_recently_acquired_holding:0 "Recently Acquired Holding" + game_concept_recently_acquired_holdings:0 "Recently Acquired Holdings" + game_concept_recently_acquired_holding_desc:0 "[holdings|E] acquired in the last year that put a ruler above their [domain_limit|E] do not cause penalties to their other holdings, but also provide no [taxes|E] or [levies|E]." + game_concept_domain_size:0 "Domain Size" + game_concept_domain_size_desc:0 "A character's $game_concept_domain_size$ reflects how many [barony|E] and [county|E] [titles|E] they personally hold." + game_concept_levies:0 "Levies" + game_concept_levy:0 "Levy" + game_concept_levies_desc:2 "The bulk of most [armies|E] is made up of $game_concept_levies$.\n\nEach [holding|E] provides a set number of $game_concept_levies$ to their [holder|E]. [vassals|E] in turn provide a part of their $game_concept_levies$ to their [liege|E].\n\n$game_concept_levies$ are made up of mostly poorly-armed fighters #weak (peasant militias, ruffians, local sellswords, destitute nobles, minor landowners, etc.)#! and are considered their own unit type.\n\nA $game_concept_levy$ has [GetDefine('NCombat', 'LEVY_ATTACK')|0] [damage|E] and [GetDefine('NCombat', 'LEVY_TOUGHNESS')|0] [toughness|E]. The other type of [soldiers|E] in the game are [men_at_arms|E] — expensive trained professionals." + game_concept_vassal_obligations:0 "Vassal Obligations" + game_concept_obligations:1 "Obligations" + game_concept_obligation:0 "Obligation" + game_concept_vassal_obligations_desc:4 "$game_concept_vassal_obligations$ define how much [tax|E] and how many [levies|E] a [vassal|E] provides to their [liege|E]. A Vassal's [government_form|E] determines how their $game_concept_obligations$ are modified.\n\n#weak For example, [GetGovernment('feudal_government').GetName] and [GetGovernment('clan_government').GetName] [vassals|E] $game_concept_obligations$ depend on their [vassal_contract|E], while [GetGovernment('administrative_government').GetName] Vassal's depend on their [province_administration|E]." + game_concept_contract:0 "Contract" + game_concept_crown_authority:0 "Crown Authority" + game_concept_crown_authority_desc:1 "$game_concept_crown_authority$ represents the general power that a [ruler|E] wields over their [vassals|E].\n\nThere are four levels of $game_concept_crown_authority$; [autonomous_vassals|E], [limited|E], [high|E], and [absolute|E]. Increasing $game_concept_crown_authority$ costs an amount of [prestige|E] depending on the level and the ruler's [learning_skill|E].\n\n#weak Vassals dislike higher levels of $game_concept_crown_authority$, and lowering it is the primary goal of [Concept( 'liberty_faction', 'Liberty Factions' )|E].#!" + game_concept_autonomous_vassals:0 "Autonomous Vassals" + game_concept_autonomous_vassals_crown_authority:0 "Autonomous Vassals Crown Authority" + game_concept_autonomous_vassals_crown_authority_desc:0 "'$game_concept_autonomous_vassals$' is the lowest level of [crown_authority|E]. At this level, [vassals|E] have no [opinion|E] penalty toward their [liege|E], and the liege only has basic power over them." + game_concept_limited:0 "Limited" + game_concept_limited_crown_authority:0 "Limited Crown Authority" + game_concept_limited_crown_authority_desc:1 "'$game_concept_limited_crown_authority$' is the second to lowest level of [crown_authority|E]. [vassals|E] have a #N -10#! [opinion|E] penalty toward their [liege|E], and the liege may [revoke|E] [titles|E] and [retract|E] a vassal's vassals. The [ruler|E] can change between available Partition [succession_laws|E]." + game_concept_high:0 "High" + game_concept_high_crown_authority:0 "High Crown Authority" + game_concept_high_crown_authority_desc:2 "$game_concept_high_crown_authority$ is the second to highest level. [vassals|E] have a #N -20#! [opinion|E] penalty toward their [liege|E].\n\nAt this level — in addition to the powers the liege gets at [limited_crown_authority|E] — vassals under the same liege can no longer wage war against each other, the ruler can change between all available [succession_laws|E], and vassals' [titles|E] cannot be inherited by rulers outside the liege's [realm|E].\n\nLastly, refusing title [revocation|E] or vassal [retraction|E] is considered a [crime|E] even if the liege lacks sufficient justification." + game_concept_absolute:0 "Absolute" + game_concept_absolute_crown_authority:0 "Absolute Crown Authority" + game_concept_absolute_crown_authority_desc:2 "$game_concept_absolute_crown_authority$ is the highest level of [crown_authority|E]. [vassals|E] have a #N -30#! [opinion|E] penalty toward their [liege|E].\n\nAt this level — in addition to the effects of [high|E] and [limited|E] Crown Authority — the ruler can pick a [designated_heir|E] at a [prestige|E] cost.\n\nFurthermore, vassals cannot declare war even against foreign rulers." + game_concept_tribal_authority:0 "Tribal Authority" + game_concept_tribal_authority_desc:2 "$game_concept_tribal_authority$ represents the general influence that a [tribal|E] [ruler|E] wields over their [vassals|E]. Compared to [crown_authority|E], it offers fewer powers and at later levels.\n\nThere are four levels of $game_concept_tribal_authority$: [disparate_tribes|E], [limited_tribal|E], [high_tribal|E], and [absolute_tribal|E]. Increasing $game_concept_tribal_authority$ costs an amount of [prestige|E] depending on the level and the ruler's [learning_skill|E], but is generally more expensive than increasing crown authority.\n\n#weak Vassals dislike higher levels of $game_concept_tribal_authority$, and lowering it is the primary goal of any [liberty_faction|E].#!" + game_concept_disparate_tribes:0 "Disparate Tribes" + game_concept_disparate_tribes_tribal_authority:0 "Disparate Tribes Tribal Authority" + game_concept_disparate_tribes_tribal_authority_desc:0 "$game_concept_disparate_tribes$ is the lowest level of [tribal_authority|E]. At this level, [vassals|E] have no [opinion|E] penalty towards their [liege|E], and the liege lacks any power over them other than the ability to demand [levies|E] and [taxes|E]." + game_concept_limited_tribal:0 "Limited" + game_concept_limited_tribal_authority:0 "Limited Tribal Authority" + game_concept_limited_tribal_authority_desc:0 "$game_concept_limited_tribal_authority$ is the second-lowest level of [tribal_authority|E]. [vassals|E] have a #N -10#! [opinion|E] penalty towards their [liege|E], and the liege may now [imprison|E] [characters|E] in their [realm|E]." + game_concept_high_tribal:0 "High" + game_concept_high_tribal_authority:0 "High Tribal Authority" + game_concept_high_tribal_authority_desc:0 "$game_concept_high_tribal_authority$ is the second-highest level of [tribal_authority|E]. [vassals|E] have a #N -20#! [opinion|E] penalty toward their [liege|E].\n\nAt this level, as well as the ability to [imprison|E] [characters|E], the liege may [revoke|E] [titles|E] and [retract|E] a vassal's vassals." + game_concept_absolute_tribal:0 "Absolute" + game_concept_absolute_tribal_authority:0 "Absolute Tribal Authority" + game_concept_absolute_tribal_authority_desc:0 "$game_concept_absolute_tribal_authority$ is the highest level of [tribal_authority|E]. [vassals|E] have a #N -30#! [opinion|E] penalty towards their [liege|E].\n\nAt this level, in addition to the effects of [limited_tribal|E] and [high_tribal_authority|E], rulers can now settle and become [feudal|E].\n\nUnreformed [tribal|E] [GetReligionFamily('rf_pagan').GetName] rulers require this law to reform their [faith|E]." + game_concept_powerful_vassal:0 "Powerful Vassal" + game_concept_powerful_vassal_powerful:0 "Powerful" + game_concept_powerful_vassals:0 "Powerful Vassals" + game_concept_powerful_vassal_possessive:0 "Powerful Vassal's" + game_concept_powerful_vassal_desc:1 "'$game_concept_powerful_vassals$' are the handful of [vassals|E] with the most [soldiers|E] and highest [income|E]. You need to pay careful attention to these vassals, because they expect to hold a seat on your [council|E] and will have significantly lower [opinion|E] of you if they do not.\n\nChanging a [succession_law|E] requires all $game_concept_powerful_vassals$ to either have a positive [opinion|E] of you, be [cowed|E] by you, or be [imprisoned|E]." + game_concept_realm_law:0 "Realm Law" + game_concept_realm_law_desc:0 "Laws that are applied to this character's realm, such as the level of [crown_authority|E] or [tribal_authority|E]." + game_concept_title_law:0 "Title Law" + game_concept_title_laws:0 "Title Laws" + game_concept_title_law_desc:1 "[titles|E] can be given a [title_specific_succession|E] Law that is specific to that Title. This Law will dictate different rules for succession than other titles held by the same character." + game_concept_strong_vassal:0 "Strong Vassal" + game_concept_strong_vassals:0 "Strong Vassals" + game_concept_strong_vassal_desc:0 "A $game_concept_strong_vassal$ is a [vassal|E] who approaches or exceeds their [liege|E] in power, incurring an [opinion|E] penalty. #weak They see their liege as weak and ill-suited to rule the realm.#!" + game_concept_domain_limit:0 "Domain Limit" + game_concept_domain_limit_desc:0 "The $game_concept_domain_limit$ determines how many [holdings|E] you can legally have in your [domain|E]. The $game_concept_domain_limit$ is affected by many things, such as your [stewardship_skill|E], [succession_law|E] and the tier of your [primary_title|E].\n\nAlthough you can go above your $game_concept_domain_limit$, doing so will lower your [income|E] and [vassal|E] [opinions|E]." + game_concept_vassal_limit:0 "Vassal Limit" + game_concept_vassal_limit_desc:2 "The $game_concept_vassal_limit$ determines how many [direct_vassals|E] you can legally have (excluding [barony|E]-tier vassals).\n\nAlthough you can go above your $game_concept_vassal_limit$, doing so will lower the [taxes|E] and [levies|E] your vassals provide, and you may be better off [transferring|E] some vassals to stay below the limit." + game_concept_leasing:0 "Leasing" + game_concept_lease:0 "Lease" + game_concept_leases:0 "Leases" + game_concept_leased:0 "Leased" + game_concept_lessee:0 "Lessee" + game_concept_leasing_desc:1 "Minor [baronies|E] can be $game_concept_leased$ out to [holy_orders|E] or [clergy|E]. Leased baronies provide [taxes|E] and [levies|E] to the [lessee|E] rather than the [holder|E].\n\nA holy order can lease [castle_holdings|E], while clergy can lease [temple_holdings|E].\n\nLeased [holdings|E] are still considered part of the holder's [realm|E]. [county_capitals|E] cannot be leased." + game_concept_succession:0 "Succession" + game_concept_succession_desc:1 "$game_concept_succession$ occurs when a [ruler|E] dies, dividing their [gold|E] and [titles|E] among their [heirs|E] according to the [succession_laws|E].\n\nPlayers will keep playing as their [player_heir|E] even if some titles are lost to other characters.\n\nIf there is no player heir, the game will end.\n\n#weak Some rare circumstances can force a Succession to occur even before a ruler dies, such as losing an [excommunication_war|E]. Legally speaking, however, Rulers may not choose to abdicate on their own.#!" + game_concept_heir:0 "Heir" + game_concept_heirs:0 "Heirs" + game_concept_heir_possessive: "Heir's" + game_concept_heir_desc:3 "An Heir is a Character that stands to inherit one or more [titles|E].\n\nEvery held [title|E] has an $game_concept_heir$, determined by the [succession_laws|E] of its current [holder|E]. When the current Holder of the Title dies, or otherwise triggers a [succession|E], the Title's current $game_concept_heir$ will inherit it.\n\nNote that Titles held by the same [ruler|E] can have different $game_concept_heirs$. Most notably, the [primary_title|E] is inherited by the [primary_heir|E] and players will keep playing as their [player_heir|E]." + game_concept_primary_heir:0 "Primary Heir" + game_concept_primary_heirs:0 "Primary Heirs" + game_concept_primary_heir_possessive: "Primary Heir's" + game_concept_primary_heir_desc:0 "The $game_concept_primary_heir$ is the character who will inherit the [primary_title|E] of a [ruler|E] on [succession|E]. This is usually — but not always — the same character as the [player_heir|E]." + game_concept_player_heir:0 "Player Heir" + game_concept_player_heir_desc:1 "The $game_concept_player_heir$ is the [heir|E] that a player will keep playing as on [succession|E].\n\nThe $game_concept_player_heir$ is usually the same as the [primary_heir|E], but if the [succession_law|E] of your [primary_title|E] dictates that it should go to a character outside of your [dynasty|E], you will instead keep playing as the dynastic heir to your second highest-tier title (or third, fourth, etc.).\n\nThis situation is common when your $game_concept_player_heir$ is voted out under an elective succession law." + game_concept_title_heir:0 "Title Heir" + game_concept_title_heirs:0 "Title Heirs" + game_concept_title_heir_desc:0 "The Title Heir is the [heir|E] to a specific [title|E] with its own [title_succession|E]. They will receive that Title when the current [holder|E] dies." + game_concept_realm_heir:0 "Realm Heir" + game_concept_realm_heirs:0 "Realm Heirs" + game_concept_realm_heir_desc:0 "A Realm Heir is one of the [heirs|E] of a [realm|E], and will receive either all or some of the [titles|E] held by the [ruler|E] of that Realm when that Ruler dies.\n\nA Realm may have one or more Realm Heirs depending on its [succession_law|E]." + game_concept_disinherit:0 "Disinherit" + game_concept_disinherited:0 "Disinherited" + game_concept_disinheriting:0 "Disinheriting" + game_concept_disinherits:0 "Disinherits" + game_concept_disinherit_desc:1 "A [dynast|E] may disinherit a member of their [dynasty|E] at the cost of [dynasty_prestige|E].\n\nThis will remove the dynasty member from any regular [line_of_succession|E] of any titles that are currently held by other dynasty members." + game_concept_council:0 "Council" + game_concept_council_i: "@council_icon!" + game_concept_council_desc:0 "The $game_concept_council$ consists of six [councillors|E] who assist their [ruler|E] in the administration of the [realm|E]. As the heads of their respective departments, they can be assigned various important [councillor_tasks|E]." + game_concept_councillor:0 "Councillor" + game_concept_councillors:0 "Councillors" + game_concept_councillor_desc:2 "Councillors are the primary assistants of any [ruler|E], and make up the [council|E]. There are six positions on the council: [chancellor|E], [marshal|E], [steward|E], [spymaster|E], [court_chaplain|E] (or [realm_priest|E]), and finally your [spouse|E].\n\nEach is in charge of a department that can be given different [councillor_tasks|E] to perform.\n\n[powerful_vassals|E] will be upset if not appointed to one of these positions, meaning you often have to make a choice between placating a powerful vassal or appointing someone who is actually competent.\n\nServing as a Councillor to your [liege|E] gives you a bonus, which increases with the [rank|E] of the Liege." + game_concept_councillor_task:0 "Councillor Task" + game_concept_councillor_tasks:0 "Councillor Tasks" + game_concept_councillor_task_desc:1 "$game_concept_councillor_tasks$ are important jobs that can be given to your [councillors|E]. These tasks can either be general or specifically target a [county|E] or [court|E].\n\nIf you have a [relation|E] with a Councillor, Tasks with a completion time may take more or less time.\n\n#weak Note that councillors are not physically present to perform these tasks, but merely lead the efforts.#!" + game_concept_councillor_task_possible_side_effects:0 "Possible Side Effects" + game_concept_councillor_task_possible_side_effects_desc:2 "A [councillor_task|E] may have unexpected consequences over time. These may be good or bad, with positive effects being more likely the higher the Councillor's relevant [skill|E], and negative effects being more likely the lower the relevant Skill is." + game_concept_chancellor:0 "Chancellor" + game_concept_chancellors:0 "Chancellors" + game_concept_chancellor_desc:0 "The $game_concept_chancellor$ is the [councillor|E] in charge of diplomatic efforts, both inside and outside the [realm|E]." + game_concept_steward:0 "Steward" + game_concept_stewards:0 "Stewards" + game_concept_steward_desc:0 "The $game_concept_steward$ is the [councillor|E] in charge of [domain|E] administration, for example matters of [taxation|E], [culture|E] and [development|E]." + game_concept_marshal:0 "Marshal" + game_concept_marshals:0 "Marshals" + game_concept_marshal_desc:0 "The $game_concept_marshal$ is your chief [commander|E] and the [councillor|E] in charge of military matters in general." + game_concept_spymaster:0 "Spymaster" + game_concept_spymaster_desc:1 "The $game_concept_spymaster$ is your [councillor|E] in charge of matters of intrigue and intelligence. Beware of having a disloyal Spymaster, for they can easily conceal and participate in a [GetScheme('murder').GetTypeName] against you and your close family!" + game_concept_court_chaplain:0 "Court Chaplain" + game_concept_court_chaplains:0 "Court Chaplains" + game_concept_court_chaplain_desc:0 "The $game_concept_court_chaplain$ is the [councillor|E] in charge of religious and spiritual affairs in [faiths|E] with the [GetFaithDoctrine('doctrine_theocracy_lay_clergy').GetBaseName] [doctrine|E].\n\nFaiths with the [GetFaithDoctrine('doctrine_theocracy_temporal').GetBaseName] Doctrine have the far more powerful (and troublesome) [realm_priest|E] instead of a $game_concept_court_chaplain$." + game_concept_realm_priest:0 "Realm Priest" + game_concept_realm_priests:0 "Realm Priests" + game_concept_realm_priest_possessive:0 "Realm Priest's" + game_concept_realm_priest_desc:0 "A $game_concept_realm_priest$ is a [councillor|E] in charge of religious and spiritual affairs in [faiths|E] with the [GetFaithDoctrine('doctrine_theocracy_temporal').GetBaseName] [doctrine|E].\n\nUnlike their [GetFaithDoctrine('doctrine_theocracy_lay_clergy').GetBaseName] equivalent ([court_chaplains|E]), $game_concept_realm_priests$ automatically [lease|E] all [temple_holdings|E] in a [ruler|E]'s [domain|E], and also receive a portion of [taxes|E] and [levies|E] from [vassal|E] $game_concept_realm_priests$.\n\n$game_concept_realm_priests$ provide their [liege|E] with Levies and Taxes if they have a positive Opinion of them. The higher the [opinion|E] of their [liege|E], the more they will provide.\n\n$game_concept_realm_priests$ with a low Opinion of their Liege will not provide them with any Taxes or Levies, and might cause problems." + game_concept_law:0 "Law" + game_concept_laws:0 "Laws" + game_concept_law_i: "@law_icon!" + game_concept_law_desc: "A [realm_possessive|E] Laws are what determine how that Realm is structured.\n\nThe most fundamental of these is the Realm's [crown_authority|E] (or [tribal_authority|E] for [tribes|E], [imperial_bureaucracy|E] for [administrative|E] and [nomadic_authority|E] for [nomads|E]), as those Laws determine how [lieges|E] and [vassals|E] interact on a regular basis.\n\nThough less impactful on the day-to-day life of [rulers|E] in a Realm, [succession_laws|E] and [title_laws|E] are still very important to consider for [succession|E]." + game_concept_succession_law:0 "Succession Law" + game_concept_succession_laws:0 "Succession Laws" + game_concept_succession_law_desc:2 "Every [ruler|E] has a main Succession Law that determines what happens to their [titles|E] on [succession|E].\n\nIn addition, an individual Title can sometimes have its own [title_succession|E] Law that takes precedence over the default one. For example, the Holy Roman Empire might be Elective even though the emperor has Partition as main Succession Law.\n\nYou can only change Succession Law when at the appropriate level of [crown_authority|E]." + game_concept_religious_head_succession_law:0 "Head of Faith Succession Law" + game_concept_religious_head_succession_law_short:0 "Head of Faith Law" + game_concept_religious_head_succession_laws:0 "Head of Faith Succession Law" + game_concept_religious_head_succession_laws_short:0 "Head of Faith Laws" + game_concept_religious_head_succession_law_desc:0 "[rulers|E] who are also [heads_of_faith|E] have an additional realm [succession|E] law, requiring that their [heir|E] be of the same [faith|E] as them. This can never be changed, and $game_concept_head_of_faith$ [titles|E] cannot have separate [title_succession|E]. The only way to remove this type of realm law is for an external force to destroy the [head_of_faith|E] $game_concept_title$." + game_concept_opinion:0 "Opinion" + game_concept_opinions:0 "Opinions" + game_concept_opinion_i:0 "@opinion_icon!" + game_concept_opinion_desc:1 "Every Character has a one-way $game_concept_opinion$ of every other Character, represented by a value ranging from #N -100#! to #P +100#!.\n\nThe Opinion that another character has of you is of crucial importance, for it will drive their behavior!\n\nYou should be especially wary of the Opinions of your [powerful_vassals|E], [spymaster|E] and [spouse|E]." + game_concept_faction:0 "Faction" + game_concept_factions:0 "Factions" + game_concept_faction_desc:0 "A $game_concept_faction$ is a group of [vassals|E] with common political interests. The local population of [counties|E] can also join certain types of Factions, such as the Peasant Faction.\n\nFactions become dangerous once their [faction_discontent|E] reaches a certain point, at which time they will issue an ultimatum.\n\nIf the [liege|E] does not comply, the Faction will rise up in revolt, sparking a [civil_war|E]." + game_concept_faction_discontent:0 "Discontent" + game_concept_discontent:0 "Discontent" + game_concept_faction_discontent_desc:1 "$game_concept_faction_discontent$ is a measure of how close a [faction|E] is to issuing an ultimatum.\n\nIf a Faction's [military_power|E] is at the threshold, Discontent will increase every month. If Military Power is below the threshold, Discontent will decrease. Very powerful Factions will have their Discontent rise quickly." + game_concept_military_power:0 "Military Power" + game_concept_faction_military_power:0 "Faction Military Power" + game_concept_faction_military_power_desc:0 "$game_concept_faction_military_power$ is a measure of the total military strength of a [faction|E] relative to their target.\n\nEach individual faction member adds their full strength to the Faction as long as they remain in the Faction. If the faction target is the [liege|E] of a member, the strength of the member is also subtracted from the relative power of the liege." + game_concept_scheme:0 "Scheme" + game_concept_scheming:0 "Scheming" + game_concept_schemes:0 "Schemes" + game_concept_scheme_desc:3 "A $game_concept_scheme$ is a long-term attempt to affect the world around you. $game_concept_schemes$ can target [characters|e], [titles|e], [cultures|e] and [faiths|e], and come in four types: [personal|e], [scheme_hostile|e], [political|e], and [contract_schemes|e].\n\nYour $game_concept_scheme$'s [success_chance|e] grows over time depending on how proficient you are in the associated [skill|e], and can also be impacted by the [agents|e] you plot your $game_concept_scheme$ with.\n\n#WEAK [secret_schemes|e] are hidden from their target but can be discovered if their [secrecy|e] is low. #!" + game_concept_scheme_countermeasure: "Countermeasure Focus" + game_concept_scheme_countermeasures: "Countermeasure Focuses" + game_concept_scheme_countermeasure_countermeasure: "Countermeasure" + game_concept_scheme_countermeasure_countermeasures: "Countermeasures" + game_concept_scheme_countermeasure_desc: "When you suspect that a [scheme|e] is targeting you, you can do something about it by directing all your defenses against one type of $game_concept_scheme$ at the cost of others.\n\nBecause of this, only one can be active at a time. Strengthening defenses in one area involves drawing attention away from another.\n\nThey can be used to reduce [secrecy|E] or adjust the [success_chance|E] of different groups of $game_concept_schemes$. They may buy you time or shore up your defenses, but come with drawbacks that mean you do not want to have one active at all times." + game_concept_scheme_precaution: "Extra Measure" + game_concept_scheme_precautions: "Extra Measures" + game_concept_scheme_precaution_precaution: "Measure" + game_concept_scheme_precaution_precautions: "Measures" + game_concept_scheme_precaution_desc: "Not every [character|E] can pull off a $game_concept_scheme$ with [skill|E] alone — when the [scheme_target_target|E] is too tough, paying for $game_concept_scheme_precautions$ can help to compensate for one weakness at the expense of another.\n\n#WEAK $game_concept_scheme_precaution_precautions$ are optional: use them tactically.#!" + game_concept_personal_scheme:0 "Personal Scheme" + game_concept_personal_schemes:0 "Personal Schemes" + game_concept_personal:0 "Personal" + game_concept_personal_scheme_desc: "$game_concept_personal_schemes$ are [schemes|E] that aim to induce a status between the [scheme_owner|E] and the [scheme_target|E].\n\nExamples of $game_concept_personal_schemes$ are:\n$BULLET_WITH_TAB$[GetScheme('sway').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('befriend').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('seduce').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('elope').GetTypeName]" + game_concept_scheme_owner:0 "Scheme Owner" + game_concept_schemer:0 "Schemer" + game_concept_scheme_owners:0 "Scheme Owners" + game_concept_scheme_owner_owner: "Owner" + game_concept_scheme_owner_desc:0 "A $game_concept_scheme$'s $game_concept_scheme_owner_owner$ is the [character|E] scheming against the [scheme_target|E].\n\n#WEAK For example, the would-be killer in a [GetScheme('murder').GetTypeName] $game_concept_scheme$.#!" + game_concept_scheme_target:0 "Scheme Target" + game_concept_scheme_targets:0 "Scheme Target's" + game_concept_scheme_target_target:0 "Target" + game_concept_scheme_target_desc:0 "A $game_concept_scheme$'s $game_concept_scheme_target_target$ is the [character|E] being schemed against by the [scheme_owner|E].\n\n#WEAK For example, the potential victim in a [GetScheme('murder').GetTypeName] $game_concept_scheme$.#!" + game_concept_secret_scheme:0 "Secret Scheme" + game_concept_secret_scheme_single:0 "Secret" + game_concept_secret_schemes:0 "Secret Schemes" + game_concept_secret_scheme_desc:0 "A $game_concept_secret_scheme$ is a [scheme|E] that progresses unbeknownst to the [scheme_target|E].\n\nHowever, it can be discovered, causing a reduction in [success_chance|E], and increasing the likelihood that the [scheme_owner|E] is discovered when the Scheme executes.\n\n[agents|E] that are recruited to a $game_concept_secret_scheme$ have a chance of being [agent_discovery_discovered|E]." + game_concept_agent:0 "Agent" + game_concept_agents:0 "Agents" + game_concept_agent_i:0 "@scheme_agent_icon!" + game_concept_agents_desc:3 "An $game_concept_agent$ is a participant in a [scheme|E], who can provide one of three benefits. They can increase [success_chance|e], reduce [scheme_speed_single|e], or improve [secrecy|e]. Only the target's [courtiers|E], [guests|E], and [direct_vassals|E] can be recruited as Agents.\n\nFor [scheme_hostile|E] Schemes, having agents close to the target is very important. For example [councillors|E] or [close_family|E] of the Scheme Target contribute more to $game_concept_scheme_speed_single$ and $game_concept_success_chance$.\n\nBeing an $game_concept_agent$ in a [hostile_scheme|e] is a [crime|E], and $game_concept_agent$ risk being [agent_discovery_discovered|E]." + game_concept_agent_discovery:0 "Agent Discovery" + game_concept_agent_discovery_discovered:0 "Discovered" + game_concept_agent_discovery_desc:1 "Discovered [secret_scheme|E] [agents|E] may be seen as [criminals|E] by their [liege|E], and are likely to be [imprisoned|E] if so." + game_concept_scheme_discovery_chance:0 "Scheme Discovery Chance" + game_concept_scheme_discovery_chance_desc:0 "This number is directly deducted from the [secrecy|E] score of any [secret_scheme|E] against you or your [courtiers|E].\n\n#WEAK $game_concept_secrecy$ is checked when a $game_concept_scheme$ is executed, and at a reduced rate once per month.#!" + game_concept_predicted_scheme_difficulty: "Predicted Scheme Difficulty" + game_concept_predicted_difficulty: "Predicted Difficulty" + game_concept_predicted_scheme_difficulty_desc: "Many factors go into a successful [scheme|E], some of which can not be known until it begins and [agents|E] are recruited.\n\nThough any $game_concept_scheme$ is possible, many can be costly.\n\nThe five levels of difficulty are:\n$EFFECT_LIST_BULLET$$scheme_odds_prediction_level_excellent$ #WEAK — likely to be easy, fast, and silent#!\n$EFFECT_LIST_BULLET$$scheme_odds_prediction_level_high$ #WEAK — minimal effort required#!\n$EFFECT_LIST_BULLET$$scheme_odds_prediction_level_medium$ #WEAK — a few bribes may be needed#!\n$EFFECT_LIST_BULLET$$scheme_odds_prediction_level_low$ #WEAK — success will be expensive#!\n$EFFECT_LIST_BULLET$$scheme_odds_prediction_level_abysmal$ #WEAK — success is unlikely and costly#!" + game_concept_prevented_murder:0 "Prevented Murder" + game_concept_prevented_murder_prevent:0 "Prevent" + game_concept_prevented_murder_desc:2 "Rarely, certain situations in the life of the [scheme_target_target|E] of a [GetScheme('murder').GetTypeName] may cause the [scheme|E] to fail in the final stages of its execution.\n\nThis overrides [success_chance|E].\n\n#WEAK Examples include intervention by a bodyguard, a foodtaster, a shieldmaiden, or a loyal pet.#!" + game_concept_political_scheme: "Political Scheme" + game_concept_political_schemes: "Political Schemes" + game_concept_political: "Political" + game_concept_political_scheme_desc: "[SelectLocalization( HasDlcFeature( 'all_under_heaven' ), 'game_concept_political_scheme_desc_tgp', 'game_concept_political_scheme_desc_default' )]" + game_concept_political_scheme_desc_default: "$game_concept_political_schemes$ includes all [schemes|E] used exclusively by [administrative_governments|E]. They include:\n$BULLET_WITH_TAB$[GetScheme('challenge_status').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('depose').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('expand_power_base').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('generate_claim').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('promote').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('slander').GetTypeName]\n" + game_concept_political_scheme_desc_tgp: "$game_concept_political_schemes$ includes [schemes|E] that are chiefly of a political and bureaucratic nature, commonly used by the [administrative|E] and [mandala_government|E] types.\n\nAdministrative Political Schemes:\n$BULLET_WITH_TAB$[GetScheme('challenge_status').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('depose').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('expand_power_base').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('generate_claim').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('promote').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('slander').GetTypeName]\n\nMandala Political Schemes:\n$BULLET_WITH_TAB$[GetScheme('coerce_tributary').GetTypeName]\n" + game_concept_hostile_scheme:0 "Hostile Scheme" + game_concept_scheme_hostile:0 "Hostile" + game_concept_hostile_schemes:0 "Hostile Schemes" + game_concept_hostile_scheme_desc:5 "$game_concept_hostile_schemes$ are [schemes|E] that aim to cause harm to a [character|E]. Most $game_concept_hostile_schemes$ make use of [secrecy|E].\n\nExamples of $game_concept_hostile_schemes$ are:\n$BULLET_WITH_TAB$[GetScheme('murder').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('abduct').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('claim_throne').GetTypeName]\n$BULLET_WITH_TAB$[GetScheme('fabricate_hook').GetTypeName]" + game_concept_scheme_phase: "Scheme Phase" + game_concept_scheme_phases: "Scheme Phases" + game_concept_scheme_phase_phase: "Phase" + game_concept_scheme_phase_phases: "Phases" + game_concept_scheme_phase_desc: "A $game_concept_scheme_phase_phase$ is the length of time it takes to boost [scheme_success_chance|E] #EMP once#!.\n\nEach $game_concept_scheme_phase_phase$ the $game_concept_scheme$ will gain an [scheme_opportunity_opportunity|e]. The [scheme_speed_single|e] can be shortened by appointing [agents|e], and is increased by the [scheme_resistance|e] of the target." + game_concept_secret:0 "Secret" + game_concept_secrets:0 "Secrets" + game_concept_secret_desc:0 "$game_concept_secrets$ are things that characters do not wish others to know because they are embarrassing, immoral or outright [criminal|E].\n\nSecrets can be discovered through the '$task_find_secrets$' [councillor_task|E] for the [spymaster|E]. Once you know someone's $game_concept_secret$, you can [blackmail|E] the character to gain a [hook|E]." + + +#RANKS/TIERS + game_concept_barony: "Barony" + game_concept_baronies: "Baronies" + game_concept_barons: "Barons" + game_concept_baron: "Baron" + game_concept_barony_desc: "A $game_concept_barony$ is a [title|E] of the lowest [title_tier|E].\n\n$game_concept_baronies$ have the smallest footprint on the map, organized into larger [counties|E].\n\n$game_concept_barony$ $game_concept_titles$ must always have a [holder|E] if they contain a [holding|E]." + game_concept_baron_desc: "A $game_concept_baron$ is a [ruler|E] whose [primary_title|E] is a [barony|E].\n\nTheir [rank|E] is the lowest possible, directly below [counts|E]. As such, they cannot have [vassals|E] and any non-$game_concept_baron$ can be their [liege|E]." + + game_concept_county: "County" + game_concept_counties: "Counties" + game_concept_count: "Count" + game_concept_counts: "Counts" + game_concept_county_desc: "A $game_concept_county$ is a [title|E] one [title_tier|E] below a [duchy|E] and one above a [barony|E].\n\nThe $game_concept_title$ includes the [county_capital|E] in the $game_concept_county$, as well as [de_jure|E] rights to all the [baronies|E] in the $game_concept_county$.\n\n$game_concept_counties$ always have [holders|E] because $game_concept_county_capitals$ cannot be destroyed." + game_concept_count_desc: "A $game_concept_count$ is a [ruler|E] whose [primary_title|E] is a [county|E].\n\nTheir [rank|E] is only above [barons|E] and directly below [dukes|E], and as such they can have $game_concept_barons$ as [vassals|E], and a $game_concept_duke$ or above as their [liege|E]." + + game_concept_duchy: "Duchy" + game_concept_duchies: "Duchies" + game_concept_duke: "Duke" + game_concept_dukes: "Dukes" + game_concept_duchy_desc: "A $game_concept_duchy$ is a [title|E] one [title_tier|E] below a [kingdom|E] and one above a [county|E].\n\nThe [holder|E] of a $game_concept_duchy$ has [de_jure|E] rights to its constituent $game_concept_counties$ and can have [counts|E] as [vassals|E].\n\nDuchies may be dormant and have no current Holder. Such $game_concept_title_succession$ can be created by a [ruler|E] who controls at least half of its $game_concept_counties$." + game_concept_duke_desc: "A $game_concept_duke$ is a [ruler|E] whose [primary_title|E] is a [duchy|E].\n\nTheir [rank|E] is directly above [counts|E] and directly below [kings|E], and as such they can have $game_concept_counts$ as [vassals|E], and a $game_concept_king$ or above as their [liege|E]." + + game_concept_kingdom: "Kingdom" + game_concept_kingdoms: "Kingdoms" + game_concept_king: "King" + game_concept_kings: "Kings" + game_concept_kingdom_desc: "A $game_concept_kingdom$ is a [title|E] one [title_tier|E] below a [empire|E] and one above a [duchy|E].\n\nThe [holder|E] of a $game_concept_kingdom$ has [de_jure|E] rights to its constituent territory.\n\n$game_concept_kingdoms$ may be dormant and have no current $game_concept_holder$. Such $game_concept_titles$ can be created by a [ruler|E] who controls at least half of the [counties|E] within." + game_concept_king_desc: "A $game_concept_king$ is a [ruler|E] whose [primary_title|E] is a [kingdom|E].\n\nTheir [rank|E] is directly above [dukes|E] and directly below [emperors|E], and as such they can have $game_concept_dukes$ and below as [vassals|E], and an $game_concept_emperor$ or above as their [liege|E]." + + game_concept_empire: "Empire" + game_concept_empires: "Empires" + game_concept_emperor: "Emperor" + game_concept_emperors: "Emperors" + game_concept_empire_desc: "An $game_concept_empire$ is a [title|E] one [title_tier|E] below a [hegemony|E] and one above a [kingdom|E].\n\nThe [holder|E] of an Empire has [de_jure|E] rights to its constituent territory and can have [kings|E] as [vassals|E].\n\n$game_concept_empires$ can be dormant and have no current $game_concept_holder$. Such $game_concept_titles$ can be created by a [ruler|E] who controls more than 80% of the [counties|E] within." + game_concept_emperor_desc: "An $game_concept_emperor$ is a [ruler|E] whose [primary_title|E] is an [empire|E].\n\nTheir [rank|E] is directly above [kings|E] and directly below [hegemons|E], and as such they can have $game_concept_kings$ and below as [vassals|E], and only a $game_concept_hegemon$ as their [liege|E]." + + game_concept_hegemony: "Hegemony" + game_concept_hegemonies: "Hegemonies" + game_concept_hegemon: "Hegemon" + game_concept_hegemons: "Hegemons" + game_concept_hegemony_desc: "A $game_concept_hegemony$ is a [title|E] of the highest [title_tier|E].\n\nThe [holder|E] of a $game_concept_hegemony$ has [de_jure|E] rights to its constituent territory and can have [emperors|E] as [vassals|E]." + game_concept_hegemon_desc: "A $game_concept_hegemon$ is a [ruler|E] whose [primary_title|E] is a [hegemony|E].\n\nTheir [rank|E] is the highest possible, directly above [emperors|E]. As such, they can have any non-$game_concept_hegemons$ as their [vassals|E], and they can never have a [liege|E]." + + + game_concept_culture:0 "Culture" + game_concept_cultures:0 "Cultures" + game_concept_culture_possessive: "Culture's" + game_concept_cultural:0 "Cultural" + game_concept_culture_desc:1 "$game_concept_culture$ represents the language and customs of a Character or [county|E].\n\nCharacters of different Cultures will have lower [opinions|E] of each other. This penalty can be reduced by increasing [cultural_acceptance|E]." + game_concept_culture_i: "@culture_icon!" + game_concept_religion:0 "Religion" + game_concept_religions:0 "Religions" + game_concept_religion_desc: "A $game_concept_religion$ can consist of many different denominations, called [faiths|E]. Religions, in turn, belong to one of four larger [religious_families|E]; [GetReligionFamily('rf_abrahamic').GetName], [GetReligionFamily('rf_eastern').GetName], [GetReligionFamily('rf_sinitic').GetName] or [GetReligionFamily('rf_pagan').GetName]." + game_concept_heresy:0 "Heresy" + game_concept_heresies:0 "Heresies" + game_concept_heresy_desc:0 "When the [fervor|E] of a [faith|E] is low, an outbreak of Heresy might occur. When that happens, a [ruler|E] of the low-Fervor Faith will convert to another Faith, becoming a [GetTrait('heresiarch').GetName( GetNullCharacter )]. They will then spread their new Faith to their [counties|E] and [vassals|E].\n\nIf an outbreak is minor, it will stop there. If it is a major outbreak, more rulers in the same area will convert. If you're in that area, you also get the choice to convert, should you so desire." + game_concept_faith:0 "Faith" + game_concept_faiths:0 "Faiths" + game_concept_faithpossessive:0 "Faith's" + game_concept_faith_desc:0 "A Faith is a specific denomination of a larger [religion|E]. All characters and [counties|E] have a Faith just as they have a [culture|E].\n\nEach Faith is defined by a set of [doctrines|E] with far-reaching consequences for its adherents.\n\nEach Faith also has a [fervor|E] value which controls how vulnerable it is to [heresy|E] ([rulers|E] and Counties converting to other Faiths within the same Religion)." + game_concept_tolerance:0 "Tolerance" + game_concept_tolerate:0 "Tolerate" + game_concept_tolerates:0 "Tolerates" + game_concept_fervor:0 "Fervor" + game_concept_fervor_desc:2 "The $game_concept_fervor$ of a [faith|E] ranges from #V 0#! to #V 100%#!. Low $game_concept_fervor$ makes it easier for [rulers|E] to create new faiths of their own and increases the likelihood of [counties|E] and characters converting to other faiths, including [heresies|E]. High $game_concept_fervor$ increases County conversion speed.\n\n$game_concept_fervor$ changes naturally with time. Smaller Faiths tend to have higher Fervor. Larger Faiths tend to have low $game_concept_fervor$.\n\nWaging Great Holy Wars and successful Holy Wars will decrease $game_concept_fervor$. Being the target will increase $game_concept_fervor$. Outbreaks of [heresy|E] will increase $game_concept_fervor$ significantly." + game_concept_doctrine:0 "Doctrine" + game_concept_doctrines:0 "Doctrines" + game_concept_doctrines_desc:1 "Doctrines could be considered religious laws that determine what is acceptable behavior within a [faith|E]." + game_concept_gender_doctrines:0 "Gender Doctrines" + game_concept_gender_doctrines_desc:0 "These [doctrines|E] determine which [gender_laws|E] are available to characters of the [faith|E].\n\nIt also determines certain additional rules, such as what [claims|E] can be inherited, who can be [commanders|E] and [knights|E], and to which of their parents' [house|E] a [bastard|E] will belong.\n\nThe Gender Doctrines are:\n$BULLET_WITH_TAB$Male Dominated\n$BULLET_WITH_TAB$Equal\n$BULLET_WITH_TAB$Female Dominated" + game_concept_realm_capital:0 "Realm Capital" + game_concept_realm_capitals:0 "Realm Capitals" + game_concept_realm_capital_possessive: "Realm Capital's" + game_concept_capital:0 "Capital" + game_concept_capitals: "Capitals" + game_concept_capital_possessive: "Capital's" + game_concept_realm_capital_desc:0 "The $game_concept_realm_capital$ is the [holding|E] where a [ruler|E] and their [court|E] resides. This Holding has a [tax|E] bonus, and is always inherited by the [primary_heir|E].\n\n[occupying|E] the Realm Capital of an enemy in a war gives a significant amount of [war_score|E] and sometimes lets you [imprison|E] members of the enemy's family." + game_concept_county_capital:0 "County Capital" + game_concept_county_capitals:0 "County Capitals" + game_concept_county_capital_desc:0 "The $game_concept_county_capital$ is the main [holding|E] of a [county|E]. This Holding can never be destroyed or [leased|E] out and is always owned by the [ruler|E] who holds the County [title|E].\n\nCounty Capitals allows the construction of an additional [building|E] compared to a lesser Holding." + game_concept_de_jure_capital:0 "De Jure Capital" + game_concept_de_jure_capital_desc:1 "The $game_concept_de_jure_capital$ of a [title|E] is the [county|E] that was its historical capital. You can always choose to move your [realm_capital|E] to your [primary_title|E]'s $game_concept_de_jure_capital$, even if it has already been moved." + game_concept_capital_duchy:0 "Capital Duchy" + game_concept_capital_duchy_desc:1 "The $game_concept_capital_duchy$ Modifier increases the amount of [levies|E] you get out of all [holdings|E] you hold within the same [de_jure|E] [duchy|E] as your [capital|E]. It also gives a bonus to all [stationed|E] [men_at_arms|E]. For this modifier to be active, you need to personally hold the associated Duchy.\n\nThis modifier does not stack with Realm Capital bonus." + game_concept_liege:0 "Liege" + game_concept_lieges:1 "Lieges" + game_concept_liege_possessive:0 "Liege's" + game_concept_liege_desc:0 "A $game_concept_liege$ is a [ruler|E] with at least one [vassal|E]. Lieges may themselves be Vassals to even higher ranked Rulers, and so on." + game_concept_rightful_liege:0 "Rightful Liege" + game_concept_rightful_liege_desc:1 "$game_concept_rightful_liege_desc_part1$\n\n$game_concept_rightful_liege_desc_part2$" + game_concept_rightful_liege_desc_part1:1 "The $game_concept_rightful_liege$ of a [vassal|E] is the [ruler|E] who holds the direct [de_jure|E] [liege|E] [title|E] of the $game_concept_vassal$'s [primary_title|E]. If a $game_concept_vassal$ is not under their $game_concept_rightful_liege$, they will contribute less [taxes|E] and [levies|E] as well as suffer an [opinion|E] penalty towards their $game_concept_liege$. Holding a higher-[title_tier|E] $game_concept_title$ of the same $game_concept_de_jure$ results in lessened penalties.\n\nAn exception to this is [dukes|E] that are part of an [empire|E]'s $game_concept_de_jure$ hierarchy and directly vassalized to their $game_concept_emperor$, which still contribute fully, exactly as if the $game_concept_emperor$ held their $game_concept_de_jure$ [kingdom|E] $game_concept_title$." + game_concept_rightful_liege_desc_part2:0 "#weak Example: The Count of $c_dunbar$ is a direct vassal of the King of $k_england$. Since the King is neither Duke of $d_lothian$, King of $k_scotland$, nor Emperor of $e_britannia$, the Count of $c_dunbar$ only contributes a tiny amount of their taxes and levies.\n\nThe Count of $c_norfolk$ is also a direct vassal of the King of $k_england$. The King does not hold the Duchy of $d_norfolk$, so the Count also contributes reduced taxes and levies. However, because the $k_england$ is the De Jure Kingdom of $c_norfolk$, the Count of $c_norfolk$ still contributes significantly more tax and levies to the King than the Count of $c_dunbar$ does.#!" + game_concept_megaduke_penalty:0 "Overextension" + game_concept_megaduke_penalty_desc:1 "When you have more than [GetDefine('NCharacter', 'MAX_COUNTIES_IN_REALM_AS_DUKE')] [counties|E] in your [realm|E] as a [duke|E], you suffer an $game_concept_megaduke_penalty$ Penalty, reducing your [tax|E] income.\n\nBecoming [king|E] or [emperor|E] [rank|E] removes this penalty." + game_concept_top_liege:0 "Top Liege" + game_concept_top_lieges: "Top Lieges" + game_concept_top_liege_possessive: "Top Liege's" + game_concept_top_liege_desc:0 "The '$game_concept_top_liege$' is the [liege|E] at the top of the [vassal|E] hierarchy.\n\nThey are fully [independent|E] [rulers|E] and answer to no mortal." + game_concept_top_realm:0 "Top Realm" + game_concept_top_realm_desc:0 "The '$game_concept_top_realm$' is the [realm|E] of the [top_liege|E]." + game_concept_domain:0 "Domain" + game_concept_domains:0 "Domains" + game_concept_domain_i: "@domain_icon!" + game_concept_domain_desc:0 "A [ruler|E]'s $game_concept_domain$ is the collection of all [holdings|E] that they personally own.\n\nThe fairly static [domain_limit|E] means that Rulers have to rely on [vassals|E] to increase the size of their [realm|E] beyond a certain point." + game_concept_regiment:0 "Regiment" + game_concept_regiments:0 "Regiments" + game_concept_regiment_desc:1 "A $game_concept_regiment$ is a group of [soldiers|E] of a single type (e.g., archers, footmen, or [levies|E]). Although $game_concept_levies$ are organized into $game_concept_regiments$, the ones of real interest are the [men_at_arms|E]." + game_concept_realm:0 "Realm" + game_concept_realms:0 "Realms" + game_concept_realm_possessive: "Realm's" + game_concept_realm_desc:0 "A $game_concept_realm$ is all the land that a [ruler|E] controls either directly or through [vassals|E] (in contrast to a [domain|E], which is only the [holdings|E] personally owned by a Ruler)." + game_concept_gold:0 "Gold" + game_concept_gold_desc:0 "'Gold' really represents all liquid assets of a Character; their wealth. It can be spent on many things, most notably constructing [buildings|E], paying for [regiments|E], and creating [titles|E]." + game_concept_gold_i:0 "@gold_icon!" + game_concept_income:0 "Income" + game_concept_income_desc:0 "There are many sources of [gold|E], but the two most important ones are [taxation|E] of your own [holdings|E] and of your [vassals|E]." + game_concept_trait:0 "Trait" + game_concept_traits:0 "Traits" + game_concept_trait_desc:0 "A Character's $game_concept_traits$ describe their personality, quirks, deeds and state of being.\n\nTraits can have many effects, but many affect the [skills|E] of a Character.\n\nPersonality traits also greatly affect how characters can be expected to behave. Acting against your own Personality causes [stress|E].\n\nSome Traits are [congenital|E] and can be inherited by offspring." + game_concept_spouse:0 "Spouse" + game_concept_spouses:0 "Spouses" + game_concept_spouse_possessive: "Spouse's" + game_concept_spouse_desc:1 "A $game_concept_spouse$ is a Character's husband or wife; the result of a [marriage|E].\n\nIn order to have legitimate offspring and produce [heirs|E], you should have a Spouse or [concubine|E] (though [bastards|E] can be legitimized).\n\nThe only way of forging an [alliance|E] is through marriage or [betrothal|E]; your own or that of a close relative.\n\nYour (main) Spouse is also a member of your [council|E] and can perform many useful [councillor_tasks|E].\n\n[faith|E] [doctrines|E] determine how many $game_concept_spouses$ you can have and how they can be [divorced|E]." + game_concept_primary_spouse:0 "Primary Spouse" + game_concept_primary_spouse_desc:0 "In [GetFaithDoctrine('doctrine_polygamy').GetBaseName] [faiths|E], [rulers|E] must choose one of their [spouses|E] to be their $game_concept_primary_spouse$. A ruler's $game_concept_primary_spouse$ gains increased [fertility|E] with them, increased [opinion|E] of them, and may serve on their [council|E]." + game_concept_available_spouse:0 "Available Spouse" + game_concept_available_spouse_desc:1 "In order to serve on a ruler's [council|E], a [spouse|E] must be available to carry out the responsibilities of that role.\n\nVarious circumstances can prevent a $game_concept_spouse$ from fulfilling these responsibilities, but several of the most common ones include:\n$BULLET_WITH_TAB$Being the [ruler|E] of their own [realm|E]\n$BULLET_WITH_TAB$Residing in another Ruler's [court|E]\n$BULLET_WITH_TAB$Being [imprisoned|E], either at home or abroad\n$BULLET_WITH_TAB$Having the [GetTrait('incapable').GetName( GetNullCharacter )] [trait|E]\n\nIf an unavailable Spouse becomes available again, they will automatically resume their duties on the Council.\n\nSpouses who are Rulers in their own right can still serve on the Council if they are your [direct_vassals|E], but otherwise will never be considered available." + game_concept_holding:0 "Holding" + game_concept_holdings:0 "Holdings" + game_concept_holding_desc:0 "A $game_concept_holding$ is the central settlement of a [barony|E] or [county_capital|E].\n\nIt provides [taxes|E] and [levies|E] to its [holder|E], depending on its [holding_type|E]. The collection of Holdings personally owned by a [ruler|E] is called a [domain|E]." + game_concept_holding_type:0 "Holding Type" + game_concept_holding_types:0 "Holding Types" + game_concept_holding_type_desc:2 "There are four types of [holdings|E]: [castles|E], [cities|E], [tribes|E], and [temples|E]. Each type allows different types of [buildings|E]. A [ruler|E]'s [government_form|E] determines which types of Holding the Ruler can personally own without penalty. In the case of Temples, the [doctrines|E] of their [faith|E] may also play a role." + game_concept_castle_holding:0 "Castle Holding" + game_concept_castle:0 "Castle" + game_concept_castles:0 "Castles" + game_concept_castle_holdings:0 "Castle Holdings" + game_concept_castle_holding_desc:0 "Castles are the most heavily fortified [holding_type|E] and the standard type for [feudal|E], [clan|E] and [tribal|E] [rulers|E], as well as [holy_orders|E]. They tend to provide more [levies|E] than [taxes|E]." + game_concept_temple_holding:0 "Temple Holding" + game_concept_temple:0 "Temple" + game_concept_temples:0 "Temples" + game_concept_temple_holdings:0 "Temple Holdings" + game_concept_temple_holding_desc:0 "Temples are a [holding_type|E] that can be held by members of the [clergy|E] as [church_property|E] (the [theocratic|E] [government_form|E]). However, in [faiths|E] with the [GetFaithDoctrine('doctrine_theocracy_lay_clergy').GetBaseName] [doctrine|E], anyone can hold Temples without penalty.\n\nTemples provide a fairly even mix of [levies|E] and [taxes|E]." + game_concept_city_holding:0 "City Holding" + game_concept_city:0 "City" + game_concept_cities:0 "Cities" + game_concept_city_holdings:0 "City Holdings" + game_concept_tribal_holding:0 "Tribal Holding" + game_concept_tribal_holdings:0 "Tribal Holdings" + game_concept_tribal_holding_desc:0 "Tribes are poor in [taxes|E] but rich in [levies|E], [prestige|E], and [men_at_arms|E] upgrades. They have limited upgrade potential and, while strong early, quickly dwindle in power the longer time progresses. Only [tribal|E] characters can hold them without penalties.\n\nIf a Tribe exists in a [county|E], no other [holdings|E] can be built. [feudal|E] rulers will have to spend [gold|E] to transform Tribes into [castles|E]." + game_concept_tribe:0 "Tribe" + game_concept_tribes:0 "Tribes" + game_concept_city_holding_desc:1 "Cities are the wealthiest [holding_type|E], favoring [taxes|E] over [levies|E]. They are associated with [republics|E], and holding them as any of the playable [government_forms|E] will always incur a penalty." + game_concept_rally_point:0 "Rally Point" + game_concept_rally_points:0 "Rally Points" + game_concept_rally_point_desc:0 "A $game_concept_rally_point$ is a mustering ground for the [levies|E] and [men_at_arms|E] under your command.\n\nIn times of [war|E], you can call up your [soldiers|E] at a Rally Point to gather an [army|E].\n\nThe Levies assigned to a Rally Point must come from either your own [domain|E] or your [vassals|E]. Rally Points can be reorganized, split and merged as you see fit." + game_concept_piety:0 "Piety" + game_concept_pious:0 "Pious" + game_concept_piety_i:1 "[GetLocalPlayerPietyTextIcon]" + game_concept_piety_desc:1 "$game_concept_piety$ represents the virtue of a Character.\n\nActing piously (according to the [doctrines|E] of their [faith|E]) will increase a Character's Piety, such as going on a [GetActivityType('activity_pilgrimage').GetName].\n\nPiety can be spent on various religious matters depending on [government_form|E], Doctrines, etc.\n\nEach time a Character gains $game_concept_piety$, they also progress towards the next [piety_level|E]." + game_concept_piety_experience:0 "Devotion" + game_concept_piety_experience_desc:0 "Each point of Devotion a character gets increases their progress towards the next [piety_level|E]. When a character gains [piety|E] they also gain an equal amount of Devotion." + game_concept_maximum_piety_level: "Maximum Level of Devotion" + game_concept_maximum_piety_level_desc: "The $game_concept_maximum_piety_level$ represents the highest [piety_level|E] that a [ruler|E] may achieve in their lifetime. By default, this level is [GetModifier( 'piety_level_5' ).GetNameWithTooltip|L].[AddLocalizationIf( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_is_mandala' ), 'maximum_piety_level_mandala')]" + maximum_piety_level_mandala: "\n\nHowever, when a [mandala|E] [ruler|E] dies in a manner acceptable to their [aspect|E], after reaching [GetModifier( 'piety_level_5' ).GetNameWithTooltip|L], that Ruler's [heir|E] develops the ability to progress to the next Level of Devotion until reaching [GetModifier( 'piety_level_8' ).GetNameWithTooltip|L]." + game_concept_piety_level: "Level of Devotion" + game_concept_piety_levels: "Level(s) of Devotion" + additional_mandala_government_piety_levels: "The [mandala|E] [government|E] can unlock additional Levels of Devotion after [GetModifier( 'piety_level_5' ).GetNameWithTooltip|L] up to, and including, [GetModifier( 'piety_level_8' ).GetNameWithTooltip|L]. To achieve that degree of divinity their Devotion needs to be proven over generations." + game_concept_piety_level_desc: "A Character's $game_concept_piety_level$ is a measure of how virtuous and devout they are, as well as their standing with other members of their [faith|E].\n\nEvery time a Character gains [piety|E], they also progress toward the next Level of Devotion.\n\n[AddLocalizationIf( HasDlcFeature( 'all_under_heaven' ), 'additional_mandala_government_piety_levels' )]\n\nThe Levels are:\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_0' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_1' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_2' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_3' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_4' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_5' ).GetNameWithTooltip|L][AddLocalizationIf( HasDlcFeature( 'all_under_heaven' ), 'game_concept_additional_piety_level_desc' )]" + game_concept_additional_piety_level_desc: "\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_6' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_7' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'piety_level_8' ).GetNameWithTooltip|L]" + game_concept_prestige:0 "Prestige" + game_concept_prestigious:0 "Prestigious" + game_concept_prestige_i:0 "@prestige_icon!" + game_concept_prestige_desc:0 "$game_concept_prestige$ represents a Character's fame and social standing.\n\nPrestige can be spent on various worldly matters depending on [government_form|E], [doctrines|E], et cetera.\n\nEvery time a Character gains Prestige, they also progress toward the next [prestige_level|E]." + game_concept_prestige_experience_i: "$game_concept_prestige_i$" + game_concept_prestige_experience:0 "Fame" + game_concept_prestige_experience_desc:0 "Each point of Fame a character gets increases their progress towards the next [prestige_level|E]. When a character gains [prestige|E] they also gain an equal amount of Fame." + game_concept_prestige_level:0 "Level of Fame" + game_concept_prestige_levels:0 "Levels of Fame" + game_concept_prestige_level_desc:2 "A Character's $game_concept_prestige_level$ measures their general reputation, and how well perceived they are by everyone.\n\nEach time a Character gains [prestige|E], they also progress towards the next $game_concept_prestige_level$.\n\nThe Levels are:\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_0' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_1' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_2' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_3' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_4' ).GetNameWithTooltip|L]\n$EFFECT_LIST_BULLET$[GetModifier( 'prestige_level_5' ).GetNameWithTooltip|L]" + game_concept_dynast:1 "Dynasty Head" + game_concept_dynast_desc: "A $game_concept_dynast$ is the [house_head|E] that heads the entire [dynasty|E] and all of its [houses|E].\n\nThe Dynasty Head wields certain unique powers over the members of the Dynasty, known as [dynast_interactions|E]. The $game_concept_dynast$ also picks [dynasty_perks|E] for the $game_concept_dynasty$.\n\nNormally, the $game_concept_dynast$ is the $game_concept_house_head$ that can have the most [soldiers|E]. If all $game_concept_house_heads$ have the [administrative|E] [government|E], the $game_concept_dynast$ is instead whoever has the highest [powerful_family_rating|E]." + game_concept_dynasty:0 "Dynasty" + game_concept_dynasties:0 "Dynasties" + game_concept_dynastic:0 "Dynastic" + game_concept_dynasty_members:0 "Dynasty Members" + game_concept_dynasty_desc:1 "A $game_concept_dynasty$ is a group of [noble|E] descendants of a [landed|E] ancestor; the founder of the Dynasty. The original [house|E] can split into new ones ([cadet_branches|E]), all still members of the wider Dynasty.\n\nWhen your Character dies, you must have a [player_heir|E], or the game will end (though you can pick another ruler and continue playing in the same world).\n\nMuch like [prestige|E] for characters, dynasties have [dynasty_prestige|E]." + game_concept_dynast_interaction:0 "Dynasty Head Interaction" + game_concept_dynast_interactions:0 "Dynasty Head Interactions" + game_concept_dynast_interaction_desc:0 "Interactions that are uniquely available to the [dynast|E] of a [dynasty|E], against other members of that dynasty.\n\nThey cost [dynasty_prestige|E] to use." + game_concept_dynasty_prestige:0 "Renown" + game_concept_dynasty_prestige_i:0 "@dynasty_prestige_icon!" + game_concept_renown: "$game_concept_dynasty_prestige$" + game_concept_dynasty_prestige_desc:0 "$game_concept_dynasty_prestige$ is much like [prestige|E], but shared by an entire [dynasty|E].\n\nA Dynasty gains $game_concept_dynasty_prestige$ for the following:\n$BULLET_WITH_TAB$ The number of currently living members\n$BULLET_WITH_TAB$ The number of [rulers|E]\n$BULLET_WITH_TAB$ The number of [spouses|E] to other Rulers\nNote that a Ruler will not generate $game_concept_dynasty_prestige$ should they have any [liege|E] of the same Dynasty.\n\nAs with Prestige, $game_concept_dynasty_prestige$ also counts towards increasing your [dynasty_prestige_level|E].\n\n$game_concept_dynasty_prestige$ can be spent by the [dynast|E] in order to unlock [dynasty_perks|E] and influence the members of the Dynasty in various ways.\n\n#weak A Dynasty spread far and wide between several different [realms|E] will generate more $game_concept_dynasty_prestige$ than a Dynasty concentrated within a single Realm.#!" + game_concept_dynasty_prestige_level:0 "Level of Splendor" + game_concept_dynasty_prestige_level_desc:1 "$game_concept_dynasty_prestige_level$ is a measure of how famous a [dynasty|E] is. Level progress is made whenever your Dynasty gains [dynasty_prestige|E]. Characters get an amount of initial [prestige|E] when they are born depending on their $game_concept_dynasty_prestige_level$. Similarly, [spouses|E] gain some Prestige from each other's Dynasty when they [marry|E].\n\nThe levels are:\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_0|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_1|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_2|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_3|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_4|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_5|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_6|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_7|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_8|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_9|E]\n$EFFECT_LIST_BULLET$[dynasty_prestige_level_10|E]" + game_concept_house:0 "House" + game_concept_houses:0 "Houses" + game_concept_house_possessive: "House's" + game_concept_house_desc:1 "A $game_concept_house$ is a branch of members on the bigger tree of a [dynasty|E]. Houses are created by [rulers|E] who no longer wish to answer to their current [house_head|E] and would rather be the Head of a new House.\n\nAlthough Houses have their own names and Coats of Arms, they still share [dynasty_prestige|E], and other members of the Dynasty can still be your [player_heir|E]." + game_concept_house_head:0 "House Head" + game_concept_house_heads:0 "House Heads" + game_concept_house_heads_possessive: "House Head's" + game_concept_house_head_head:0 "Head" + game_concept_house_head_heads: "Heads" + game_concept_house_head_desc: "Every [house|E] within a [dynasty|E] has a $game_concept_house_head$, who wields certain unique powers over the members of the House.\n\nNotably, the $game_concept_house_head$ can legitimize [bastards|E], call the members of the House to [war|E] and demand conversion of [landed|E] members. The $game_concept_house_head$ also gets a [weak_hook|E] on all members of their House that are born while they are in power.\n\nWhen they die, their [primary_heir|E] becomes the new $game_concept_house_head$.\n\n[clan_house_heads|E] have special rules and privileges." + game_concept_clan_house_head: "Clan House Head" + game_concept_clan_house_heads: "Clan House Heads" + game_concept_clan_house_head_head: "$game_concept_house_head_head$" + game_concept_clan_house_head_desc: "A $game_concept_clan_house_head$ is in many ways like a normal [house_head|E], but differs in some notable ways.\n\n$game_concept_clan_house_heads$ do not get a [weak_hook|E] on all the members of their [house|E]. They have more influence over [house_unity|E] than other house members. Additionally, any house member may challenge a $game_concept_clan_house_head$ for superiority to become the $game_concept_house_head$ themself." + game_concept_denounce:0 "Denounce" + game_concept_denouncement:0 "Denouncement" + game_concept_denounce_desc:1 "A [dynast|E] may denounce a member of their [dynasty|E] for a cost of [dynasty_prestige|E].\n\nAny member of the same dynasty (including the Dynasty Head themselves) will gain an [imprisonment_reason|E] against the denounced member." + game_concept_hook:0 "Hook" + game_concept_hooks:0 "Hooks" + game_concept_hooked:0 "Hooked" + game_concept_hook_i:0 "@cs_weak_hook_icon!" + game_concept_hook_desc:1 "A $game_concept_hook$ is a general term for a relationship between characters where one can get the other to do their will.\n\nThere are two types, [weak_hooks|E] and [strong_hooks|E], which are acquired in different ways.\n\n$game_concept_hooks$ can be used to force through many interactions, for example [marriage|E] proposals and [vassal_contract|E] changes." + game_concept_weak_hook:0 "Weak Hook" + game_concept_weak_hooks:0 "Weak Hooks" + game_concept_weak_hook_desc:1 "A $game_concept_weak_hook$ is a fairly common [hook|E] that you might have on a character who owes you a favor, or that you have manipulated to do your will.\n\nWhile there are many interactions where a $game_concept_weak_hook$ can be used, for example in [marriage|E] proposals, they cannot be used to force someone to become your [agent|E] in a [GetScheme('murder').GetTypeName] and do not provide a passive benefit #weak (for that, a [strong_hook|E] is necessary.)#!\n\nEvery child born to a [noble|E] [house|E] also owes the [house_head|E] an initial $game_concept_weak_hook$.\n\nOnce a $game_concept_weak_hook$ is used, it is #emphasis spent.#!" + game_concept_perpetual_hook: "Perpetual Hook" + game_concept_perpetual_hooks: "Perpetual Hooks" + game_concept_perpetual_hook_desc: "A $game_concept_perpetual_hook$ is a [hook|E] that you might have on a character who owes you a favor, or that you have manipulated to do your will.\n\nThey cannot be used to force someone to become your [agent|E] in a [GetScheme('murder').GetTypeName] and do not provide a passive benefit #weak (for that, a [strong_hook|E] is necessary.)#!\n\n$game_concept_perpetual_hooks$ are not spent when used, but instead go on a cooldown before they can be used again.#!" + + game_concept_strong_hook:0 "Strong Hook" + game_concept_strong_hooks:0 "Strong Hooks" + game_concept_strong_hook_i: "@unspent_strong_hook_icon!" + game_concept_strong_hook_desc:2 "A $game_concept_strong_hook$ is a very powerful [hook|E] that you might have on a character who you have [blackmailed|E].\n\n$game_concept_strong_hooks$ are much more powerful than [weak_hooks|E], and can force someone to do terrible deeds for you — such as to become your [agent|E] in a [GetScheme('murder').GetTypeName] #weak (in addition to everything a $game_concept_weak_hook$ can do!)#!\n\nA $game_concept_strong_hook$ also prevents the target from taking any hostile actions towards the holder.\n\n$game_concept_strong_hooks$ are not spent when used, but instead go on a cooldown before they can be used again. The passive effect is not lost when the Hook is used." + game_concept_favor:0 "Favor" + game_concept_favors:0 "Favors" + game_concept_favor_desc:0 "Characters can owe each other $game_concept_favors$, which is considered a type of [hook|E].\n\nFavors can be gained in many ways, but often through various scripted events. Every child born to a [noble|E] [house|E] also owes the [house_head|E] an initial Favor." + game_concept_blackmail:0 "Blackmail" + game_concept_blackmailed:0 "Blackmailed" + game_concept_blackmailing:0 "Blackmailing" + game_concept_blackmail_desc:1 "If you know another Character's [criminal|E] [secret|E], you may use a $game_concept_blackmail$ [character_interaction|E] to potentially gain a [hook|E] on them.\n\nThe strength of this Hook varies with the severity of the Secret, which in turn is often determined by [doctrines|E]." + game_concept_manipulation:0 "Manipulation" + game_concept_manipulation_desc:0 "$game_concept_manipulation$ is a form of [hook|E] where you have managed to manipulate the mind of another character in some way in order to get them to do your will." + game_concept_soldier:0 "Soldier" + game_concept_soldiers:0 "Soldiers" + game_concept_soldier_i:0 "@soldier_icon!" + game_concept_soldiers_desc:0 "$game_concept_soldiers$ is a collective term for the troops in a [regiment|E] or an [army|E], whether they are [levies|E], [men_at_arms|E], or [knights|E].\n\nHaving the most $game_concept_soldiers$ helps win [battles|E] and [sieges|E]." + game_concept_health:0 "Health" + game_concept_healthy: "Healthy" + game_concept_health_desc:1 "$game_concept_health$ measures how likely a Character is to die by [illnesses|E] and old age.\n\nOld characters have a chance to lose health every year, increasing the older they are." + game_concept_child_health: "Child Health" + game_concept_child_health_desc: "Certain [traits|E], such as [GetTrait('measles').GetName( GetNullCharacter )], are especially dangerous to [children|E].\n\nAny penalty to $game_concept_child_health$ stacks with regular penalties to [health|E], even from the same Trait." + game_concept_adult_health: "Adult Health" + game_concept_adult_health_desc: "Certain [traits|E], such as [GetTrait('ill').GetName( GetNullCharacter )], are more dangerous for [adults|E].\n\nAny penalty to $game_concept_adult_health$ stacks with regular penalties to [health|E], even from the same Trait." + game_concept_elderly_health: "Elderly Health" + game_concept_elderly_health_desc: "Certain [traits|E], such as [GetTrait('pneumonic').GetName( GetNullCharacter )], are more dangerous for those of at least [GetDefine( 'NCharacter', 'FEMALE_ELDERLY_AGE' )|V] years of age.\n\nAny penalty to $game_concept_elderly_health$ stacks with regular penalties to [health|E], even from the same Trait." + game_concept_character_death:0 "Character Death" + game_concept_character_death_death:0 "Death" + game_concept_character_death_deaths: "Deaths" + game_concept_character_death_dying:0 "Dying" + game_concept_character_death_die:0 "Die" + game_concept_character_death_dies:0 "Dies" + game_concept_character_death_desc:1 "Death triggers [succession|E], which is important for [rulers|E].\n\nIf a Player Character dies, the player will continue playing as their [player_heir|E] — or be faced with a Game Over, if they have no valid heir." + game_concept_death_natural_causes: "Natural Causes" + game_concept_death_natural_cause: "Natural Cause" + game_concept_death_natural_causes_desc: "Passing on peacefully is the key to dying of $game_concept_death_natural_causes$. For this purpose, old age and chronic diseases are the main ways to leave this world." + game_concept_death_religion: "Religion" + game_concept_death_religious: "Religious" + game_concept_death_religion_desc: "Being passed into the next world by heathens and the sacrilegious dispatching of your mortal coil — martyrdom, crucifixion — remaining true to your faith to the very end, what more genuine way is there to pass on." + game_concept_death_combat: "Combat" + game_concept_death_combat_desc: "Receiving a fatal blow while partaking in a battle, dueling or other martial-related contests, such as Tournaments, are the main ways of passing on in a $game_concept_death_combat$ manner." + game_concept_death_murder: "Murder" + game_concept_death_murder_desc: "Death finally catching up to you by being murdered — a death in deceit. The way you lived; the way you died." + game_concept_fertility:0 "Fertility" + game_concept_fertility_desc:0 "$game_concept_fertility$ measures how able a Character is to produce children." + game_concept_life_expectancy:0 "Life Expectancy" + game_concept_life_expectancy_desc:0 "$game_concept_life_expectancy$ is the number of years a character is expected to live before dying of natural causes.\n\nA high $game_concept_life_expectancy$ will make characters visibly age slower and be able to produce [children|E] for longer." + game_concept_betrothal:0 "Betrothal" + game_concept_betrothals:0 "Betrothals" + game_concept_betrothed:0 "Betrothed" + game_concept_betrothal_desc:1 "[SelectLocalization( HasDlcFeature( 'tours_and_tournaments' ), 'game_concept_betrothal_desc_TOTO_DLC', 'game_concept_betrothal_desc_NO_TOTO_DLC' )]" + game_concept_betrothal_desc_NO_TOTO_DLC:0 "A $game_concept_betrothal$ is a promise of a future [marriage|E] that can be made when either party is not yet an [adult|E].\n\nBetrothals can grant [alliances|E] just like Marriages, but can easily be broken. Upon adulthood, the Betrothal can be converted into a proper Marriage." + game_concept_betrothal_desc_TOTO_DLC:0 "A $game_concept_betrothal$ is a promise of a future [marriage|E]. It can be made when either party is not yet an [adult|E], or when a [GetActivityType( 'activity_wedding' ).GetName] is [grand_wedding_promised|E].\n\nBetrothals can grant [alliances|E] just like Marriages. Regular Betrothals can last as long as needed and be easily broken. They can be converted into a proper Marriage upon adulthood, while Grand Wedding Betrothals are converted into a Marriage by completing a [GetActivityType( 'activity_wedding' ).GetName]." + game_concept_marriage:0 "Marriage" + game_concept_marriages:0 "Marriages" + game_concept_marry:0 "Marry" + game_concept_marries:0 "Marries" + game_concept_married:0 "Married" + game_concept_marrying:0 "Marrying" + game_concept_marriage_desc:3 "$game_concept_marriages$ are a union between two [spouses|E], and are (alongside [betrothals|E]) the main way to forge an [alliance|E] with another [ruler|E].\n\n$game_concept_spouses$ may also produce [legitimate|E] children, who can be [bred|E] and raised as suitable [heirs|E].\n\n$game_concept_marriages$ only end when one $game_concept_spouse$ dies or [divorces|E] the other.[SelectLocalization( HasDlcFeature( 'tours_and_tournaments' ), 'game_concept_marriage_desc_TOTO_DLC', '' )]" + game_concept_marriage_desc_TOTO_DLC:0 "\n\nHosting a [GetActivityType( 'activity_wedding' ).GetName] greatly increases the acceptance of a Marriage proposal." + game_concept_concubinage:0 "Concubinage" + game_concept_concubine:0 "Concubine" + game_concept_concubines:0 "Concubines" + game_concept_concubine_male:0 "Concubine" + game_concept_concubine_female:0 "Concubine" + game_concept_concubinage_desc:1 "A Concubine is of lesser status than a [spouse|E], allowed in [faiths|E] with the [GetFaithDoctrine('doctrine_concubines').GetBaseName] [doctrine|E].\n\nUnlike [marriage|E], Concubinage does not yield [alliances|E]. Concubines can also be set aside at will, without the complications of a [divorce|E]. The children of Concubines are considered [legitimate|E].\n\nConcubinage is mutually exclusive with [GetFaithDoctrine('doctrine_polygamy').GetBaseName]." + game_concept_bastard:0 "Bastard" + game_concept_bastards:0 "Bastards" + game_concept_bastard_desc:1 "$game_concept_bastards$ are illegitimate children born out of wedlock. As such, they are barred from inheriting [titles|E]. However, their parents can [Concept( 'legitimized', 'legitimize' )|E] their child with the approval of their [house_head|E].\n\nWhich [house|E] a bastard belongs to is determined by the [doctrines|E] of their parents' [faiths|E] when they are born.\n\nIf Bastards are granted Titles or have children of their own, they will found a new [dynasty|E]." + game_concept_legitimized_bastard:0 "Legitimized Bastard" + game_concept_legitimized:0 "Legitimized" + game_concept_legitimized_bastard_desc:0 "A [bastard|E] may be Legitimized, either at birth, or as a [character_interaction|E] later, depending on approval from their [house_head|E].\n\nA Legitimized Bastard has the same right of inheritance as [legitimate|E] children, but the stain of bastardy will follow them throughout their life." + game_concept_bastardy: "Bastardy" + game_concept_bastardy_desc: "$game_concept_bastard_desc$" + game_concept_real_father:0 "Real Father" + game_concept_real_father_desc:0 "A character's real father. For most characters, this is the character widely acknowledged as their father, but for secret bastards, it is someone else." + game_concept_legitimate:0 "Legitimate" + game_concept_legitimate_desc:0 "Children born of [married|E] parents are considered $game_concept_legitimate$, as opposed to [bastards|E] who may not inherit any [titles|E]. The children of [concubines|E] are also considered [legitimate|E], though of slightly lower status." + game_concept_matrilineal:0 "Matrilineal" + game_concept_matrilineally:0 "Matrilineally" + game_concept_matrilineal_desc:0 "In a $game_concept_matrilineal$ [marriage|E], children will be born into their mother's [house|E] instead of their father's." + game_concept_patrilineal:0 "Patrilineal" + game_concept_patrilineal_desc:0 "In a $game_concept_patrilineal$ [marriage|E], children will be born into their father's [house|E]." + game_concept_divorce:0 "Divorce" + game_concept_divorced:0 "Divorced" + game_concept_divorcing:0 "Divorcing" + game_concept_divorces:0 "Divorces" + game_concept_divorce_desc:0 "[married|E] [spouses|E] can arrange a $game_concept_divorce$, although the rules, requirements and consequences depend on the [doctrines|E] of their [faiths|E].\n\n[concubines|E] can simply be set aside at will." + game_concept_stress:0 "Stress" + game_concept_stress_i:0 "@stress_icon!" + game_concept_stress_gain_i:0 "@stress_gain_icon!" + game_concept_stress_loss_i:0 "@stress_loss_icon!" + game_concept_stress_loss: "Stress Loss" + game_concept_stress_critical_i:0 "@stress_critical_icon!" + game_concept_stress_desc:2 "Characters gain Stress when taking actions that conflict with their [personality_traits|E].\n\nCharacters who gain enough Stress will also gain a [stress_level|E], causing various negative effects on their mental health that persist until they manage to reduce their Stress.\n\nA straight-forward way to relieve Stress is to partake in [activities|E] such as a [GetActivityType( 'activity_hunt' ).GetName]." + game_concept_adult:0 "Adult" + game_concept_adults:0 "Adults" + game_concept_adulthood:0 "Adulthood" + game_concept_adult_desc:0 "An $game_concept_adult$ is a character of at least #V 16#! years of age." + game_concept_child:0 "Child" + game_concept_children:0 "Children" + game_concept_child_possessive: "Child's" + game_concept_child_desc:1 "A $game_concept_child$ is a character younger than #V 16#!." + game_concept_eligible_child:0 "Eligible Child" + game_concept_eligible_children:0 "Eligible Children" + game_concept_eligible_child_desc:0 "$game_concept_eligible_children$ are, by law, allowed to inherit their parent's [titles|E].\n\n[bastards|E] are not considered eligible, as well as children of certain genders under specific [gender_laws|E]." + game_concept_alliance:0 "Alliance" + game_concept_alliances:0 "Alliances" + game_concept_allies:0 "Allies" + game_concept_allied:0 "Allied" + game_concept_ally:0 "Ally" + game_concept_ally_i:0 "@alliance_icon!" + game_concept_alliance_desc:2 "An $game_concept_alliance$ is a diplomatic relation between two [rulers|E]. [independent|E] Rulers can call on $game_concept_allies$ to join each others [wars|E].\n\nAlliances are created and maintained through a [marriage|E] or [betrothal|E], as long as the two characters that are wed are closely enough related to the two Rulers. For example, if a [king|E] marries off his daughter to another King's son, the two Kings become $game_concept_allies$.\n\n[lieges|E] can also create $game_concept_alliances$ with their [vassals|E]. The Liege cannot call the Vassal to War, but it prevents them from joining [factions|E]." + game_concept_war:0 "War" + game_concept_wars:0 "Wars" + game_concept_war_desc:0 "Armed conflict is the most straightforward way to expand your [realm|E]. However, declaring $game_concept_war$ requires a justification for doing so, called a [casus_belli|E]. You cannot achieve more with a $game_concept_war$ than the selected casus belli permits.\n\nWars are won by defeating enemy [armies|E] in [battle|E] and [occupying|E] enemy [holdings|E]. Doing so will accrue [war_score|E], eventually forcing the enemy to accept [defeat|E] in the [peace_offer|E].\n\nRegardless of the outcome of a $game_concept_war$, the attacker gains a [truce|E] toward the defender for a time, but the defender is free to declare a new war immediately." + game_concept_civil_war:0 "Civil War" + game_concept_civil_wars:0 "Civil Wars" + game_concept_raid:0 "Raid" + game_concept_raids:0 "Raids" + game_concept_raiding:0 "Raiding" + game_concept_raider:0 "Raider" + game_concept_raiders:0 "Raiders" + game_concept_raided:0 "Raided" + game_concept_raid_desc:0 "[armies|E] can be raised as $game_concept_raiders$ from [rally_points|E]. $game_concept_raiders$ can move into neighboring lands and pillage them for [gold|E].\n\nIn order to $game_concept_raid$, a Raiding Army must stop in a [holding|E] owned by a foreign [ruler|E] and choose to start Raiding — upon doing so they will be stuck Raiding for a some time, after which they will get Gold and pillage the Holding.\n\nGold will be stored on the Army, and only added to the treasury when they arrive home. If you defeat a Raiding Army carrying Gold you will take it, and they will be unable to Raid you for some time.\n\nOnly some Rulers are allowed to $game_concept_raid$, most notably [tribal|E] and [GetGovernment( 'nomad_government' ).GetName] Rulers.\n\nSpecific [raid_intents|E] can be set to obtain different rewards." + game_concept_raid_i: "@raid_icon!" + game_concept_loot: "Loot" + game_concept_loot_desc: "If a [holding|E] is [Concept( 'raid', 'Raided' )|E], [occupied|E] in a [siege|E], or engaged in [trading|E], the attacker or [trader|E] will get an amount of [gold|E] equal to the $game_concept_loot$. The more prosperous a [holding|E] is, the more $game_concept_loot$ it will have.\n\nA Holding which has been Raided, Sieged, or Bartered with recently will not have any Loot." + game_concept_loot_i: "@loot_icon!" + + game_concept_barter: "Trade" + game_concept_barter_i: "@barter_icon!" + game_concept_barter_desc: "[GetGovernment( 'wanua_government' ).GetName] and [GetGovernment( 'landless_minority_government' ).GetName] [rulers|E] can raise [traders|E] to gain [gold|E] through peaceful means. Trading works similarly to [raiding|E], with some key differences — it is not a [hostile_army|E] action, and you need [trade_goods|E].\n\nYou need #V 2#! Trade Goods to gain #V 1#! [loot|E] from a [holding|E]. If you have too little, nothing will happen.\n\nBartering is a friendly action, and the targeted holding will gain [GetModifier('recently_bartered_modifier').GetNameWithTooltip] upon completion. Unlike Raiding, you can freely Barter in the lands of your [tributaries|E] and [suzerain|E]." + game_concept_bartering: "Trading" + game_concept_bartered: "Traded" + game_concept_barterer: "Trader" + game_concept_barterers: "Traders" + game_concept_barters: "Traders" + game_concept_barterer_desc: "[GetGovernment( 'wanua_government' ).GetName] and [GetGovernment( 'landless_minority_government' ).GetName] [rulers|E] can [trade|E] by raising their [armies|E] as $game_concept_barterers$. They work similarly to [raiders|E], except that they will not be [hostile_army|E] to the [holder|E] of the targeted [holding|E].\n\nRaiding Armies of other Rulers can fight Barterers and steal their [loot|E]." + game_concept_barter_goods: "Trade Goods" + game_concept_barter_goods_desc: "Trade Goods — represent various types of wares used to [trade|E] and upkeep [armies|E] by [GetGovernment( 'wanua_government' ).GetName] and [GetGovernment( 'landless_minority_government' ).GetName] [rulers|E]." + game_concept_barter_goods_i: "@barter_goods_icon!" + + game_concept_revolt:0 "Revolt" + game_concept_revolts:0 "Revolts" + game_concept_revolting:0 "Revolting" + game_concept_civil_war_desc:0 "A [war|E] where one or more [vassals|E] and/or [counties|E] rise in revolt against their [liege|E]. They are most commonly the result of a [faction|E] whose demands have not been met.\n\nLosing a $game_concept_civil_war$ often has consequences that are more severe than the original demands of the rebelling faction." + game_concept_casus_belli:0 "Casus Belli" + game_concept_casus_bellis:0 "Casus Bellis" + game_concept_casus_belli_desc:1 "A $game_concept_casus_belli$ ('Cause for War') required to declare [war|E] on another [ruler|E].\n\nThe $game_concept_casus_belli$ specifies what the War is about, usually a specific territory — the [war_target|E]. It is not possible to gain anything more than the $game_concept_casus_belli$ allows, regardless of how soundly the enemy is defeated.\n\nOne of the most important Casus Bellis are [claims|E], whether they come from [succession|E] or the [fabricate_claim|E] Task." + game_concept_war_score:0 "War Score" + game_concept_war_score_desc:1 "A measure of which side is winning in a [war|E]. It goes from #N -100#! to #P 100#!, with e.g. #N -25#! for one side being #P 25#! for the other. At #P 100#! War Score, you can force the other side to accept your [peace_offer|E].\n\nWar Score can be gained by:\n$EFFECT_LIST_BULLET$ Defeating [armies|E] in [battle|E]\n$EFFECT_LIST_BULLET$ [imprisoning|E] the enemy [ruler|E] or their [heirs|E] (not including their [allies|E])\n$EFFECT_LIST_BULLET$ [occupying|E] enemy [holdings|E] (especially within the [war_target|E])\n$EFFECT_LIST_BULLET$ Occupying the enemy's [realm_capital|E]\n$EFFECT_LIST_BULLET$ Controlling all [objectives|E] for an extended period of time" + game_concept_war_target:0 "War Target" + game_concept_war_targets:0 "War Targets" + game_concept_war_target_desc:0 "A region on the map targeted by a [casus_belli|E] in a [war|E]. If the casus belli does not target a specific region, the [realm_capital|E] of the defender is the $game_concept_war_target$.\n\nThe attacking side gains more [war_score|E] by [occupying|E] [holdings|E] within the $game_concept_war_target$. Conversely, the defender will — after an initial grace period — start accruing war score for holding on to all [counties|E] in the $game_concept_war_target$ region." + game_concept_occupation:0 "Occupation" + game_concept_occupations:0 "Occupations" + game_concept_occupy:0 "Occupy" + game_concept_occupying:0 "Occupying" + game_concept_occupied:0 "Occupied" + game_concept_occupation_desc:0 "Occupied [holdings|E] are temporarily under the control of a hostile [ruler|E] during a [war|E]. An [army|E] standing in a [barony|E] with a hostile [fortified_holding|E] will start to [besiege|E] it if the number of [soldiers|E] in the army outnumbers the [garrison|E].\n\nIf the Siege is successful, the Holding is Occupied, which will give [war_score|E] to the Occupying side in the [war|E].\n\nOccupying a Holding does not mean it is now yours! Only territory specified by the [war_target|E] can actually change hands, and only if the Attacker [wins|E]." + game_concept_peace:0 "Peace" + game_concept_peace_offer:0 "Peace Offer" + game_concept_peace_offers:0 "Peace Offers" + game_concept_peace_desc:1 "[wars|E] can end in three types of $game_concept_peace$: [victory|E], [defeat|E], or [white_peace|E].\n\nAt #V 100%#! [war_score|E], the other side cannot refuse a Peace Offer and must accept [defeat|E].\n\nThe effects of $game_concept_victory$ or $game_concept_defeat$ depend entirely on the type of [casus_belli|E] that was used to declare the war and its associated [war_target|E]." + game_concept_victory:0 "Victory" + game_concept_win:0 "Win" + game_concept_wins:0 "Wins" + game_concept_winning:0 "Winning" + game_concept_victory_desc:0 "$game_concept_victory$ is one of three possible [peace_offers|E]. The exact outcome of Victory in a [war|E] depends on the [casus_belli|E].\n\nFor the Attacker, it typically involves the seizure of [titles|E] within the [war_target|E] region.\n\nFor the Defender, Victory usually means the attacker has to pay a large sum of gold as war reparations." + game_concept_defeat:0 "Defeat" + game_concept_defeat_desc:0 "$game_concept_defeat$ is one of three possible [peace_offers|E]. The exact outcome of Defeat in a [war|E] depends on the [casus_belli|E], but defeated Defenders typically lose [titles|E] within the [war_target|E] region, whereas defeated Attackers instead lose things like [gold|E], [prestige|E] and [piety|E]." + game_concept_white_peace:0 "White Peace" + game_concept_white_peace_desc:0 "A $game_concept_white_peace$ is one of three possible [peace_offers|E]. Sometimes, both sides will agree that the [war|E] is no longer worth pursuing.\n\nWith a White Peace, the Attacker typically still loses some [piety|E] or [prestige|E], but far less than with a humiliating [defeat|E]." + game_concept_siege:0 "Siege" + game_concept_sieges:0 "Sieges" + game_concept_besiege:0 "Besiege" + game_concept_besieging:0 "Besieging" + game_concept_besieged:0 "Besieged" + game_concept_siege_desc:0 "Siege is when an [army|E] surrounds a [fortified_holding|E] in order to starve the citizens into submission so that it can be [occupied|E]. A Siege starts automatically once an Army enters the location of a hostile Fortified Holding and stands still — if the Army outnumbers the [garrison|E].\n\nThe besieging Army can [assault|E] the Holding if its walls are Breached." + game_concept_assault:0 "Assault" + game_concept_assaults:0 "Assaults" + game_concept_assaulting:0 "Assaulting" + game_concept_assaulted:0 "Assaulted" + game_concept_assault_desc:0 "An Assault is when a [besieging|E] [army|E] attempts to storm a [fortified_holding|E] at the risk of losing a lot of [soldiers|E]. Assaults can only be attempted if the walls of the Holding have been Breached, which requires that the Army contains [siege_weapons|E]." + game_concept_fort_level:0 "Fort Level" + game_concept_fort_level_i:0 "@fort_icon!" + game_concept_fort_level_desc:0 "Some [holdings|E] are fortified and need to be [besieged|E] and [occupied|E] in order to gain control of the [county|E].\n\nThe $game_concept_fort_level$ of such [fortified_holdings|E] determines how long the Siege can be expected to last.\n\nA high $game_concept_fort_level$ will require [siege_weapons|E] in order to be $game_concept_besieged$ efficiently, although each Siege Weapon is only effective up to a certain Fort Level." + game_concept_garrison:0 "Garrison" + game_concept_garrison_desc:2 "The $game_concept_garrison$ of a [fortified_holding|E] protects it from being [besieged|E] by smaller [armies|E].\n\nThe besieging Army needs to have more [soldiers|E] than the Garrison in order for the Siege to progress.\n\nWhen a [siege|E] is lost, the $game_concept_garrison$ is set to [GetDefine('NDomain', 'HOLDING_MIN_GARRISON_COUNT')|0]. From there, the $game_concept_garrison$ refills every month depending on the [garrison_reinforcement|E] until it reaches its max capacity.\n\nWhen a [siege|E] begins, the manning of the $game_concept_garrison$ affects the required amount of [siege_progress|E]." + game_concept_garrison_reinforcement:0 "Garrison Reinforcement Rate" + game_concept_garrison_reinforcement_desc:0 "The $game_concept_garrison_reinforcement$ of a [fortified_holding|E] defines how fast the [garrison|E] recovers after losing a [siege|E].\n\nEvery month, the [garrison|E] will regain a percentage of its maximal capacity equal to the current rate. It can be increased by upgrading the [holding|E].\n\nDuring a [siege|E] however, the reinforcement is frozen and the rate set to 0." + game_concept_fortified_holding:0 "Fortified Holding" + game_concept_fortified_holdings:0 "Fortified Holdings" + game_concept_fortified_holding_desc:0 "A $game_concept_fortified_holding$ is a [holding|E] with [buildings|E] that increase its [fort_level|E]. [county_capitals|E] are always Fortified.\n\nIn order to fully [occupy|E] a [county|E], all its Fortified Holdings must be Occupied." + game_concept_army:0 "Army" + game_concept_armies:0 "Armies" + game_concept_army_desc:1 "Armies are used to win [wars|E] by engaging in [battle|E] with other armies, and to [besiege|E] and [occupy|E] enemy [fortified_holdings|E]. Armies are raised in [rally_points|E] and primarily consist of [levies|E] and [men_at_arms|E], but can also be bolstered by [mercenaries|E] and [holy_orders|E].\n\nArmies can move across water by spending an amount of [gold|E] to secure transport. They can suffer losses from [attrition|E] if the local [barony|E] is unable to adequately [supply|E] them." + game_concept_holy_order:0 "Holy Order" + game_concept_holy_orders:0 "Holy Orders" + game_concept_holy_order_i: "@government_type_holy_order!" + game_concept_holy_order_desc:1 "$game_concept_holy_orders$ are independent military organizations that work to defend and expand the influence of their [faith|E].\n\nRulers of their Faith may hire them if they are at [war|E] with a [faith_hostile|L] or [faith_evil|L] [faith|E], at a cost of [piety|E]. Once this War ends, they no longer fight for that Ruler.\n\nA $game_concept_holy_order$ may have a [holy_order_patron|E], who does not need to pay to engage their services." + game_concept_holy_order_patron:0 "Holy Order Patron" + game_concept_holy_order_patron_desc:0 "A [holy_order|E]'s $game_concept_holy_order_patron$ is a King or Emperor who shares their [faith|E] and whose [realm|E] contains their Capital.\n\nThe $game_concept_holy_order_patron$ may call upon the support of the $game_concept_holy_order$ against religious enemies for free, instead of paying [piety|E].\n\nNot all $game_concept_holy_orders$ have a $game_concept_holy_order_patron$." + game_concept_mercenary_company:0 "Mercenary Company" + game_concept_mercenaries:0 "Mercenaries" + game_concept_mercenary:0 "Mercenary" + game_concept_mercenary_i: "@government_type_mercenary!" + game_concept_mercenary_company_desc:0 "[mercenaries|E] are [soldiers|E] for hire who fight in exchange for [gold|E]. Mercenary [armies|E] come in various sizes, with different types of [men_at_arms|E] and a number of [knights|E].\n\nMercenaries sign up for #V [GetDefine('NMercenary', 'BASE_HIRE_MONTHS')] month#! contracts that can be extended for another #V [GetDefine('NMercenary', 'BASE_HIRE_MONTHS')] months#! if you are still at [war|E]. Mercenary contracts persist even if their Regiments are dismissed — they can be raised again without further cost.\n\nYou are allowed to go into [debt|E] in order to hire Mercenaries #weak (up to [GetDefine('NMercenary', 'ALLOWED_DEBT_MONTHS')] months)#!." + game_concept_mercenary_contract:0 "Mercenary Contract" + game_concept_mercenary_contracts: "Mercenary Contracts" + game_concept_mercenary_contract_desc:0 "Establishing a [mercenary|E] Contract incurs a one-time cost which allows the use of their troops for #V [GetDefine('NMercenary', 'BASE_HIRE_MONTHS')] months#!." + game_concept_hired_troops:0 "Hired Soldiers" + game_concept_hired_troops_desc:0 "Hired Soldiers are either [mercenaries|E] or [holy_orders|E]." + game_concept_commander:0 "Commander" + game_concept_commanders:0 "Commanders" + game_concept_army_commanders:0 "Army Commanders" + game_concept_commanding:0 "Commanding" + game_concept_army_commander:0 "Army Commander" + game_concept_army_commander_desc:0 "An $game_concept_army_commander$ is a Character in command of an [army|E]. Any of your [courtiers|E] or direct [vassals|E] can potentially be assigned as a Commander (subject to age, [health|E], and [doctrines|E]).\n\nIn [battle|E], the [martial_skill|E] of the Commander heavily influences the [advantage|E]. As long as there is a Commander present, additional [rolls|E] will be made in attempt to increase the $game_concept_advantage$.\n\nIn addition, [commander_traits|E] can provide an Army with many different perks, both in and out of Battle." + game_concept_commander_trait:0 "Commander Trait" + game_concept_commander_traits:0 "Commander Traits" + game_concept_commander_trait_desc:1 "$game_concept_commander_traits$ are special [traits|E] that confer useful perks to characters when acting as [army|E] [commanders|E].\n\nCommander Traits are typically acquired by children raised with the Martial [education_focus|E], but can also be gained through the [martial_lifestyle|E] and other means." + game_concept_battle_advantage:0 "Battle Advantage" + game_concept_advantage:0 "Advantage" + game_concept_battle_advantage_desc:0 "$game_concept_battle_advantage$ makes one side in [battle|E] do more damage. The higher the $game_concept_advantage$, the more damage the [soldiers|E] will do.\n\nBattles often start with one side having a higher Advantage based on [terrain|E] and the [martial_skill|E] and [commander_traits|E] of the [commander|E]. Either side may then gain additional $game_concept_advantage$ from $game_concept_commander$ [rolls|E]." + game_concept_education_trait:0 "Education Trait" + game_concept_education_traits:0 "Education Traits" + game_concept_education_trait_desc:2 "Upon reaching [adulthood|E], every character receives an $game_concept_education_trait$.\n\nThere are five types of Education Traits, each of which directly corresponds a specific [skill|E].\n\nThe quality of the [trait|E] a character receives will depend how well their [childhood_trait|E] matched the [education_focus|E] as well as the relevant Skill of their [guardian|E].\n\nA characters $game_concept_education_trait$ improves how fast they will progress in the corresponding [lifestyle|E]." + game_concept_education_focus:0 "Education Focus" + game_concept_education:0 "Education" + game_concept_educations:0 "Educations" + game_concept_educate:0 "Educate" + game_concept_educated:0 "Educated" + game_concept_education_focus_short:0 "Focus" + game_concept_education_focus_desc:1 "All [children|E] between age #V 6#! and #V 9#! can be given an $game_concept_education_focus$ geared towards one of the five [skills|E].\n\nThe Education ends with an [education_trait|E] upon reaching [adulthood|E].\n\nThe quality of the $game_concept_education_trait$ they receive will depend on how well their [childhood_trait|E] matched their Education Focus as well as the relevant Skill of their [guardian|E].\n\nWhen setting the Education Focus, you can also specify whether or not the child should be raised in the [guardian|E]'s [faith|E] and/or [culture|E]." + game_concept_childhood_trait:0 "Childhood Trait" + game_concept_childhood_trait_desc:0 "Every child gains a Childhood Trait as they are growing up, such as [GetTrait('rowdy').GetName( GetNullCharacter )] or [GetTrait('charming').GetName( GetNullCharacter )].\n\nThe gained trait is indicative of which [education_focus|E] would suit them best." + game_concept_diplomacy:0 "Diplomacy" + game_concept_diplomacy_i:0 "@skill_diplomacy_icon!" + game_concept_diplomacy_skill:0 "Diplomacy Skill" + game_concept_diplomacy_skill_desc:1 "$game_concept_diplomacy$ is a [skill|E] representing a Character's ability to charm, negotiate and persuade.\n\nDiplomacy directly affects the [opinions|E] other characters have of you. It is also used to further Diplomatic [schemes|E].\n\nThe corresponding [lifestyle|E] is the [diplomacy_lifestyle|E]." + game_concept_martial:0 "Martial" + game_concept_martial_i:0 "@skill_martial_icon!" + game_concept_martial_skill:0 "Martial Skill" + game_concept_martial_skill_desc:2 "$game_concept_martial$ [skill|E] indicates how good a Character is at waging [war|E] and leading [armies|E] in [battle|E].\n\nA high Martial Skill is important for [army_commanders|E], since it improves their [advantage|E] in [battle|E].\n\nThe corresponding [lifestyle|E] is the [martial_lifestyle|E]." + game_concept_stewardship:0 "Stewardship" + game_concept_stewardship_i:0 "@skill_stewardship_icon!" + game_concept_stewardship_skill:0 "Stewardship Skill" + game_concept_stewardship_skill_desc:1 "$game_concept_stewardship$ is a [skill|E] that helps [rulers|E] manage their [domains|E]. It directly increases [taxation|E], making it a very useful Skill for all rulers.\n\nThe corresponding [lifestyle|E] is the [stewardship_lifestyle|E]. Every [GetDefine('NDomain', 'STEWARDSHIP_SKILL_FOR_DOMAIN_LIMIT_INCREASE')] points of Stewardship increases the [domain_limit|E] by 1." + game_concept_intrigue:0 "Intrigue" + game_concept_intrigue_i:0 "@skill_intrigue_icon!" + game_concept_intrigue_skill:0 "Intrigue Skill" + game_concept_intrigue_skill_desc:1 "$game_concept_intrigue$ is a [skill|E] representing a Character's ability to understand and manipulate other characters, and to organize elaborate plots.\n\nIt is mainly used to further — and defend against — Intrigue [schemes|E].\n\nThe corresponding [lifestyle|E] is the [intrigue_lifestyle|E]." + game_concept_learning:0 "Learning" + game_concept_learning_i:0 "@skill_learning_icon!" + game_concept_learning_skill:0 "Learning Skill" + game_concept_learning_skill_desc:1 "$game_concept_learning$ is a [skill|E] measuring a Character's literacy and wisdom. The Learning Skill of a [ruler|E] affects the cost of increasing [crown_authority|E], and also yields an amount of monthly [piety|E].\n\nCharacters with high Learning can be expected to have extensive knowledge of all common scholarly endeavors, including theology, philosophy, language and mathematics.\n\nThe corresponding [lifestyle|E] is the [learning_lifestyle|E]." + PROWESS_MUSCLE_INFO:1 "Increasing prowess through natural sources #weak (not through [artifacts|E])#! will increase a Character's muscle mass." + PROWESS_MUSCLE_INFO_PERSONAL:0 "Increasing [prowess|E] will increase your muscle mass" + game_concept_prowess:0 "Prowess" + game_concept_prowess_i:0 "@skill_prowess_icon!" + game_concept_prowess_skill:0 "Prowess Skill" + game_concept_prowess_skill_desc:3 "$game_concept_prowess$ is a [skill|E] that reflects the Character's aptitude in personal combat.\n\nA high Prowess Skill means they are more likely to survive and perform well both as [knights|E] in [battles|E] and in [single_combat_duel_plural|E].\n\nEach point of Prowess gives a Knight:\n$BULLET_WITH_TAB$[damage|E]: #V [GetDefine('NCombat', 'KNIGHT_DAMAGE_PER_PROWESS')]#!\n$BULLET_WITH_TAB$[toughness|E]: #V [GetDefine('NCombat', 'KNIGHT_TOUGHNESS_PER_PROWESS')]#!\n\n$PROWESS_MUSCLE_INFO$" + game_concept_natural_prowess:0 "Natural Prowess" + game_concept_lifestyle:0 "Lifestyle" + game_concept_lifestyles:0 "Lifestyles" + game_concept_lifestyle_desc:2 "[adult|E] [rulers|E] may choose a $game_concept_lifestyle$, which will in turn allow them to select a [focus|E] and start gaining [perks|E].\n\nEach $game_concept_lifestyle$ has its own type of [experience|E], which is used to purchase $game_concept_perks$. For example, Experience in the [intrigue_lifestyle|E] is necessary to gain $game_concept_perks$ such as [GetPerk( 'dreadful_perk' ).GetName( GetNullCharacter )] or [GetPerk( 'like_weed_in_a_garden_perk' ).GetName( GetNullCharacter )].\n\nThe $game_concept_lifestyles$ are:\n$BULLET_WITH_TAB$ [diplomacy_lifestyle|E]\n$BULLET_WITH_TAB$ [stewardship_lifestyle|E]\n$BULLET_WITH_TAB$ [martial_lifestyle|E]\n$BULLET_WITH_TAB$ [intrigue_lifestyle|E]\n$BULLET_WITH_TAB$ [learning_lifestyle|E]\n$BULLET_WITH_TAB$ [wanderer_lifestyle|E]" + game_concept_lifestyle_experience:0 "Lifestyle Experience" + game_concept_experience:0 "Experience" + game_concept_lifestyle_experience_desc:0 "$game_concept_lifestyle_experience$ is accumulated passively by having a [focus|E] selected, or granted by events. There are different types of $game_concept_lifestyle_experience$, one per [lifestyle|E] category.\n\nGaining enough $game_concept_lifestyle_experience$ within a category will award a [perk|E]." + game_concept_focus:0 "Focus" + game_concept_focuses:0 "Focuses" + game_concept_focus_desc:0 "Each [lifestyle|E] contains a number $game_concept_focuses$, one of which must be chosen upon selecting the $game_concept_lifestyle$.\n\n$game_concept_focuses$ provide passive bonuses and influence the types of events that appear. #weak (E.g., having the $intrigue_temptation_focus$ will boost [fertility|E] and increase the chances of Seduction-themed events appearing.)#!\n\nCharacters can switch between $game_concept_focuses$ within the same $game_concept_lifestyle$ without losing the ability to gain experience in that $game_concept_lifestyle$." + game_concept_dynasty_perk:0 "Dynasty Legacy" + game_concept_dynasty_perks:0 "Dynasty Legacies" + game_concept_dynasty_perk_desc:0 "$game_concept_dynasty_perks$ are unlockable boons that provide powerful effects to all members of a [dynasty|E].\n\nThe [dynast|E] unlocks $game_concept_dynasty_perks$ by spending [dynasty_prestige|E], with each Legacy in the same track being progressively more expensive and powerful.\n\n$game_concept_dynasty_perks$ are slow to get, but stay with the Dynasty forever." + game_concept_perk:0 "Perk" + game_concept_perks:0 "Perks" + game_concept_perk_desc:1 "Perks are unlockable boons that provide many useful and interesting effects. They are unlocked by selecting a [focus|E] within a [lifestyle|E] and spending the associated form of [experience|E] #weak (e.g. Intrigue $game_concept_experience$ if you wish to unlock an $game_concept_intrigue_lifestyle$ $game_concept_perk$.)#!" + game_concept_decision:0 "Decision" + game_concept_decisions:0 "Decisions" + game_concept_decide:0 "Decide" + game_concept_decision_desc:1 "A $game_concept_decision$ is a special action that a [character|E] can take at their leisure.\n\nEach decision has its own set effects, which can range from minor Character changes to [empire|e]-shaking impacts.\n\nDecisions that move a Character to a specific location for a period of time are called [activities|E]." + + game_concept_activity:0 "Activity" + game_concept_activities:0 "Activities" + game_concept_activity_desc:3 "An $game_concept_activity$ is a special occasion hosted for a specific purpose, such as going on a [GetActivityType( 'activity_hunt' ).GetName] to relieve [stress|E].\n\nThe [activity_host_short|E] holds the Activity in a specific [location|E], which affects it in various ways, and everyone who attends must [travel|E] there.\n\nEvery attending Character interacts with each other by setting an [intent|E], which they try to pursue during the Activity.[SelectLocalization( HasDlcFeature( 'advanced_activities' ), 'game_concept_activity_desc_GRAND_ACTIVITY_DLC', '' )]" + game_concept_activity_desc_GRAND_ACTIVITY_DLC:0 "\n\nA regular $game_concept_activity$ such as a [GetActivityType( 'activity_feast' ).GetName] or a [GetActivityType( 'activity_hunt' ).GetName] are smaller and less impressive than [grand_activities|E]." + game_concept_activity_option:0 "Activity Option" + game_concept_activity_options:0 "Activity Options" + game_concept_activity_option_desc:0 "All [activities|E] have Options that allow you to customize the planning of your activity. Options have various costs and requirements." + game_concept_activity_type:0 "Activity Type" + game_concept_activity_types:0 "Activity Types" + game_concept_activity_type_desc:0 "Some [activities|E] and [grand_activities|E] have different types corresponding to special variants of the activity.\n\nFor example, when planning a Hunt, you may choose between Standard, Falconry, and Legendary if you fulfill the requirements for that type." + game_concept_activity_phase:1 "Activity Phase" + game_concept_activity_phases:1 "Activity Phases" + game_concept_activity_phase_desc:2 "An action phase of an activity such as a [contest|E] in a [GetActivityType( 'activity_tournament' ).GetName], [stop|E] on a [tour|E], or destination of a [pilgrimage|E] during which events occur." + game_concept_activity_phase_action:0 "Activity Phase Action" + game_concept_activity_phase_action_desc:0 "Every #V 7#! days while in an [activity|E] there is a chance of #EMP something#! happening outside of regular events. These happenings are shown in the top-right corner of the Activity window.\n\nWhat can happen depends on the [activity_type|E], for example: the [activity_host|E] can gain [prestige|E] or [activity_guest|E] [opinion|E] in a [GetActivityType('activity_feast').GetName].\n\nThere is always a chance of nothing happening, this is especially likely before the current [activity_phase|E] is [activity_state_active|E]." + game_concept_activity_state_passive:0 "Passive" + game_concept_activity_state_passive_desc:1 "An [activity|E] is in a passive phase when the host or the guests have all not yet arrived, or when they are between one [stop|E] and the next on a [tour|E]." + game_concept_activity_state_active:0 "Active" + game_concept_activity_state_active_desc:1 "When the host and guests have arrived and are engaged in an [activity|E] it is considered to be active." + game_concept_activity_host:0 "Activity Host" + game_concept_activity_host_possessive: "Activity Host's" + game_concept_activity_host_short:0 "Host" + game_concept_activity_host_desc:0 "The Host of an [activity|E] is the [ruler|E] that started it.\n\nThey choose the [activity_type|E], [location|E], [activity_options|E] and which [activity_guests_short|E] to invite." + game_concept_activity_guest:0 "Activity Guest" + game_concept_activity_guest_short:0 "Guest" + game_concept_activity_guests:0 "Activity Guests" + game_concept_activity_guests_short:0 "Guests" + game_concept_activity_attending:0 "Attending" + game_concept_activity_guest_desc:0 "A Guest at an [activity|E] is any [character|E] invited by the [activity_host|E].\n\nWhile they usually cannot affect the Activity as much as their Host, they can still pursue their [intent|E]." + game_concept_intent:1 "Intent" + game_concept_intents:0 "Intents" + game_concept_intent_desc:0 "An $game_concept_intent$ represents what a character personally seeks to accomplish at an [activity|E]; the host and guests each have their own motives and ends." + + game_concept_location:0 "Location" + game_concept_locations:0 "Locations" + game_concept_location_desc:0 "Every [character|E] has a location indicating where they currently are in the world. To get from one location to another, you must [travel|E]." + + game_concept_feast:0 "$activity_feast$" + game_concept_feast_desc:2 "An [activity|E] where rulers and courtiers in a realm gather to celebrate... one thing or another.\n\nParticipants will lose [stress|E] and increase their [opinion|E] of the host. There may also be any number of other consequences from bringing that many people together.\n\nA [ruler|E] will invite their [liege|E] and their [vassals|E] (along with various [courtiers|E]) to a $activity_feast$." + game_concept_hunt_success_chance:0 "Hunt Success Chance" + game_concept_hunt_success_chance_no_prefix:0 "Success Chance" + game_concept_hunt_success_chance_desc:1 "When setting out on a [GetActivityType('activity_hunt').GetName] there is no guarantee you will corner your quarry. The main factors are:\n$BULLET_WITH_TAB$[GetTrait('lifestyle_hunter').GetName( GetNullCharacter )] [trait_level_track_xp|E]\n$BULLET_WITH_TAB$[GetCourtPositionType('master_of_hunt_court_position').GetName()] [aptitude|E]\n$BULLET_WITH_TAB$[buildings|E], [terrain|E], and [development|E]\n$BULLET_WITH_TAB$Animal [hunt_sightings_no_prefix|E]\n\n$game_concept_hunt_success_chance$ can never be higher than #V 80#!.\n\n#weak Successful hunts end with slaying the quarry, where trophy [artifacts|E] may be gained and great [prestige_i|E][prestige|E] conferred on the hunter.#!" + game_concept_hunt_danger:0 "Hunt Peril" + game_concept_hunt_danger_no_prefix:0 "Peril" + game_concept_hunt_dangerous:0 "Perilous" + game_concept_hunt_danger_desc:1 "The unpredictability of even gentle wild beasts, coupled with the frenzy of the chase, has undone many a mighty warrior.\n\nMore $game_concept_hunt_dangerous$ animals will grant greater [prestige_i|E][prestige|E] to the hunter.\n\nThe remoteness of the wilderness and abundance of opportunity should also not be ignored when choosing guests..." + game_concept_playdate:0 "$activity_playdate$" + game_concept_playdate_desc:0 "An [activity|E] where rulers and courtiers below the age of [EmptyScope.ScriptValue('less_than_two_years_to_adulthood_value')|0V] gather to play and forget the dreariness of the day.\n\nParticipants will lose [stress|E] and increase their [opinion|E] of the host. There may also be any number of other consequences from bringing that many children together.\n\nA [ruler|E] will invite their [liege|E] and their [vassals|E] (along with various [courtiers|E]) to a $activity_playdate$." + game_concept_wedding_ceremony:0 "Ceremony" + game_concept_wedding_ceremony_desc:0 "The [activity_phase|E] in a [GetActivityType('activity_wedding').GetName] in which the [spouses|E] exchange vows and get [married|E]." + game_concept_wedding_banquet:0 "Banquet" + game_concept_wedding_banquet_desc:0 "The [activity_phase|E] in a [GetActivityType('activity_wedding').GetName] in which food and drinks are offered, and the guests enjoy the entertainment and mingle." + game_concept_wedding_night:0 "Wedding Night" + game_concept_wedding_night_desc:0 "The [activity_phase|E] in a [GetActivityType('activity_wedding').GetName] in which the [spouses|E] consummate the wedding, and the guests continue their celebration." + game_concept_grand_wedding_promise:0 "Grand Wedding Promise" + game_concept_grand_wedding_promises:0 "Grand Wedding Promises" + game_concept_grand_wedding_promised:0 "Promised" + game_concept_grand_wedding_promise_desc:0 "A [betrothal|E] with the promise attached that a [GetActivityType('activity_wedding').GetName] will be celebrated for the union of the two characters involved.\n\nThe Grand Wedding Promise will expire after 3 years. Not organizing a [GetActivityType('activity_wedding').GetName] in time or breaking the Betrothal will bear punishing consequences." + game_concept_taxes:0 "Taxes" + game_concept_tax:0 "Tax" + game_concept_taxation:0 "Taxation" + game_concept_taxes_desc:1 "$game_concept_taxes$ are the most important monthly source of [gold|E] [income|E] for [rulers|E].\n\nEvery [holding|E] a ruler has provides them with some [domain_taxes|E] every month. In addition, most [vassals|E] have an [obligation|E] to pay a portion of their own collected Taxes to their [liege|E] in the form of [liege_taxes|E]." + game_concept_dread:0 "Dread" + game_concept_dreadful:0 "Dreadful" + game_concept_dreaded:0 "Dreaded" + game_concept_dread_i: "@dread_icon!" + game_concept_dread_desc:4 "$game_concept_dread$ is a measure of how feared a [ruler|E] is.\n\nRulers increase $game_concept_dread$ by performing cruel and heinous acts such as torturing and executing [prisoners|E].\n\nDread makes it viable to play as a [tyrant|E], because unruly [vassals|E] can become [intimidated|E] or [cowed|E], making them too scared to oppose you.\n\nA character's Dread can range from 0 to 100, except for [nomads|E], who can achieve 150. Over time, their Dread will tend towards their Natural Dread, which is defined by their [personality_traits|E].\n\n#high A Dreadful [ruler] reaps the following benefits:#!\n$BULLET_WITH_TAB$[vassals] are discouraged from joining [factions|E]\n$BULLET_WITH_TAB$[vassals] are discouraged from [scheming|E]\n$BULLET_WITH_TAB$Increases [vassal] acceptance #weak (E.g. Title Revocation)#!\n$BULLET_WITH_TAB$Increases [offer_vassalization|E] acceptance\n$BULLET_WITH_TAB$Makes [electors|E] more likely to vote as you do\n$BULLET_WITH_TAB$Makes vassals unlikely to oppose [law|E] changes\n\n#weak Note that brave and bold [vassals] are less affected by Dread!#!" + game_concept_truce:0 "Truce" + game_concept_truces:0 "Truces" + game_concept_truce_desc:0 "Every [war|E] ends with a $game_concept_truce$; a period when the Attacker may not declare War again on that same [ruler|E] (the Defender is not bound by the Truce).\n\nTruces can be broken, but there is a severe penalty." + game_concept_government:0 "Government" + game_concept_governments:0 "Governments" + game_concept_government_form:0 "Government Form" + game_concept_government_forms:0 "Government Forms" + game_concept_government_desc:3 "A [ruler|E]'s $game_concept_government_form$ determines what kind of [laws|E] they have access to, as well as what [obligations|E] they have to their [liege|E] if they are not [independent|E].\n\nThe Government forms are: [feudal|E], [tribal|E], [clan|E], [theocracy|E], [republic|E], [administrative|E], [GetGovernment( 'nomad_government' ).GetName] and [herder|E]." + game_concept_feudal:0 "Feudal" + game_concept_feudal_government:0 "Feudal Government" + game_concept_feudalism:0 "Feudalism" + game_concept_feudal_i: "@government_type_feudal!" + game_concept_feudal_desc:0 "Under the Feudal [government_form|E], a [liege|E] gives their [vassals|E] [land|E] to govern in exchange for [levies|E] and [taxes|E], regulated by individual [vassal_contract|E] between Vassal and Liege." + game_concept_tribal:0 "Tribal" + game_concept_tribal_government:0 "Tribal Government" + game_concept_tribal_i: "@government_type_tribal!" + game_concept_tribal_desc:0 "Tribal realms have stunted county [development|E], cannot advance past Tribal Era [innovations|E], cannot construct new [holdings|E], and are usually unable to change their [succession_law|E].\n\nHowever, they can make use of [prestige|E] rather than [gold|E] to build their realms and hire [men_at_arms|E], and have access to more [casus_belli|E] compared to [feudal|E] Realms. Non-Tribal armies suffer a [supply_limit|E] penalty in hostile Tribal territory." + + game_concept_clan:0 "Clan" + game_concept_clans: "Clans" + game_concept_clan_government:0 "Clan Government" + game_concept_clan_i: "@government_type_clan!" + game_concept_clan_desc:1 "Clans are a [government_form|E] in which the amount of [levies|E] and [taxes|E] given to a [liege|E] by their [vassals|E] is determined by the [aptitude|E] of said Liege's [tax_collector|E]. Clans also make use of [house_unity|E]." + game_concept_theocracy:0 "Theocracy" + game_concept_theocracies:0 "Theocracies" + game_concept_theocratic:0 "Theocratic" + game_concept_theocratic_government:0 "Theocratic Government" + game_concept_theocracy_government:0 "Theocratic Government" + game_concept_theocracy_i: "@government_type_theocracy!" + game_concept_theocracy_desc:0 "$game_concept_theocracy$ is an unplayable [government_form|E] available for some [faiths|E] depending on [doctrines|E]. They are usually lead by a [head_of_faith|E] or a [landed|E] [realm_priest|E]. A Bishop might also become an [independent|E] Theocratic ruler in their own right." + + game_concept_republic:0 "Republic" + game_concept_republics:0 "Republics" + game_concept_republican:0 "Republican" + game_concept_republic_government:0 "Republican Government" + game_concept_republic_i: "@government_type_republic!" + game_concept_republic_desc:1 "$game_concept_republic_government$ is an unplayable [government_form|E] where an elected citizen rules for life — the $game_concept_government_form$ of burghers and merchants.\n\n$game_concept_republican$ [vassals|E] have static [obligations|E] that cannot be changed, and thus always provide a dependable and predictable amount of [levies|E] and [taxes|E]." + game_concept_skill:0 "Skill" + game_concept_skills:0 "Skills" + game_concept_skills_desc:0 "The Skills of a Character measure how good they are at various things.\n\nThe five main skills are: [diplomacy|E], [martial|E], [stewardship|E], [intrigue|E], [learning|E]." + game_concept_building: "Building" + game_concept_buildings: "Buildings" + game_concept_building_desc: "$game_concept_buildings$ are improvements that can be constructed in [holdings|E].\n\nMany types of Buildings can only be constructed in specific [baronies|E] or in certain [terrain|E].\n\nEach holding has a limited amount of Building slots, so a holding cannot contain all Building types. [county_capitals|E] have access to an additional Building slot.\n\n[duchy_buildings|E] and [special_buildings|E] use their own slots." + game_concept_duchy_building: "Duchy Building" + game_concept_duchy_buildings: "Duchy Buildings" + game_concept_duchy_building_desc: "$game_concept_duchy_buildings$ are powerful [buildings|E] that can only be constructed in the [de_jure_capital|E] of a [duchy|E]. Only one type can be constructed in each Duchy.\n\n$game_concept_duchy_buildings$ are only active if the owner also holds the associated Duchy [title|E].\n\nMany $game_concept_duchy_buildings$ have modifiers that affect all [holdings|E] in the Duchy, making them powerful tools for specializing your [domain|E]." + game_concept_special_building: "Special Building" + game_concept_special_buildings: "Special Buildings" + game_concept_special_building_desc: "$game_concept_special_buildings$ are unique [buildings|E] that are present in a few predetermined places around the world.\n\nExamples include ancient wonders, grand cathedrals, and notable mines. Some are already constructed at the start of the game, while others have to be constructed.\n\n$game_concept_special_buildings$ are usually very powerful, and well worth fighting for." + game_concept_great_building: "Great Building" + game_concept_great_buildings: "Great Buildings" + game_concept_great_building_desc: "$game_concept_great_buildings$ are unique [buildings|E], and are constructed as a result of [great_projects|E]. One famous example is the Great Walls of China.\n\n$game_concept_great_buildings$ are usually very powerful, but their utility is tied to specific conditions." + + game_concept_ruined_building: "Ruined Building" + game_concept_ruined: "Ruined" + game_concept_ruined_building_desc: "A building that has been $game_concept_ruined$ has been shattered, defaced or pillaged for parts by external forces.\n\nThese external forces might be things like:\n$BULLET_WITH_TAB$[natural_disasters|E][AddLocalizationIf( HasDlcFeature( 'all_under_heaven' ), 'game_concept_ruined_buildings_tgp' )]" + game_concept_ruined_buildings_tgp: "\n$BULLET_WITH_TAB$Vengeful [mandala|E] Rulers" + + game_concept_rebuilt_building: "Rebuilt Building" + game_concept_rebuilt: "Rebuilt" + game_concept_rebuilding: "Rebuilding" + game_concept_rebuilt_building_desc: "The act of rebuilding a [ruined|E] building, restoring it to its former glory." + + game_concept_economic_building: "Economic Building" + game_concept_economic_buildings: "Economic Buildings" + game_concept_economic_building_desc: "$game_concept_economic_buildings$ are [buildings|E] whose primary function is to increase their holding's [domain_income|E]." + game_concept_military_building: "Military Building" + game_concept_military_buildings: "Military Buildings" + game_concept_military_building_desc: "$game_concept_military_buildings$ are [buildings|E] whose primary function is to increase the number of [levies|E] they provide to their [holder|E]." + game_concept_fortification_building: "Fortification Building" + game_concept_fortification_buildings: "Fortification Buildings" + game_concept_fortification_building_desc: "$game_concept_fortification_buildings$ are [buildings|E] whose primary function is to either increase their holding's [fort_level|E] or provide bonus [advantage|E] for defenders." + game_concept_pious_building: "Pious Building" + game_concept_pious_buildings: "Pious Buildings" + game_concept_pious_building_desc: "$game_concept_pious_buildings$ are [buildings|E] whose primary function is to increase their holding's [piety|E]." + + game_concept_battle:0 "Battle" + game_concept_battles:0 "Battles" + game_concept_battle_desc:1 "$game_concept_battles$ start when two opposing [armies|E] enter the same [barony|E].\n\nAt the start of a $game_concept_battle$, one side usually starts with [advantage|E] dependent on factors like [terrain|E], [commander|E] and [commander_traits|E].\n\nArmies take [casualties|E] based on the amount of [damage|E] sustained. The $game_concept_battle$ enters its [aftermath|E] when no [soldiers|E] remain for one side.\n\nThe winner of a $game_concept_battle$ is awarded [war_score|E] dependent on the magnitude of the victory." + game_concept_aftermath:0 "Aftermath" + game_concept_aftermath_desc:1 "The $game_concept_aftermath$ phase of a [battle|E] occurs whenever one side has won. The victor will attempt to run down as many [Concept( 'retreat', 'Retreating' )|E] [soldiers|E] as possible.\n\n[men_at_arms|E] with high [pursuit|E] are able to kill more $game_concept_soldiers$ during the $game_concept_aftermath$, while $game_concept_men_at_arms$ with high [screen|E] will protect friendly [soldiers|E]." + game_concept_casualty:0 "Casualty" + game_concept_casualties:0 "Casualties" + game_concept_casualty_desc:0 "[armies|E] will sustain a certain amount of $game_concept_casualties$ during a [battle|E] dependent on the amount of [damage|E] taken.\n\nWhen [soldiers|E] are removed from a $game_concept_battle$, they will be considered to be either [routed_soldiers|E] or [dead_soldiers|E]." + game_concept_retreat:0 "Retreat" + game_concept_retreats:0 "Retreats" + game_concept_retreat_desc:0 "An [army|E] will $game_concept_retreat$ if it loses a [battle|E]. Armies can also be ordered to $game_concept_retreat$ during $game_concept_battles$. While Retreating, the $game_concept_army$ cannot disband or be given new movement orders." + game_concept_illness:0 "Illness" + game_concept_ill:0 "Ill" + game_concept_sick:0 "Sick" + game_concept_sickness:0 "Sickness" + game_concept_illnesses:0 "Illnesses" + game_concept_diseases:0 "Diseases" + game_concept_illness_desc:0 "Illnesses are a kind of negative [traits|E] that lower a Character's [health|E]. Illness Traits can last for varying amounts of time and differ greatly in lethality." + game_concept_medical_treatments:0 "Medical Treatments" + game_concept_medical_treatments_desc:1 "When a character becomes [ill|E] or [GetTrait('wounded_1').GetName( GetNullCharacter )] a Medical Treatment can help them recover faster.\n\nThe one responsible for treating you and your [courtiers|E] is the [GetCourtPositionType('court_physician_court_position').GetName()]. Try to always have one employed if you can afford their salary.\n\nThe more treatments a $court_physician_court_position$ performs, the more their skill will grow, granting them [GetTrait('lifestyle_physician').GetName( GetNullCharacter )] [traits|E]." + game_concept_combat_width:0 "Combat Width" + game_concept_combat_width_desc:1 "$game_concept_combat_width$ indicates how many [soldiers|E] from each side may fight each other concurrently in [battle|E], and may be affected by factors such as [terrain|E].\n\nThis prevents one side from completely overwhelming the other and is determined at the start of the Battle." + game_concept_roll:0 "Roll" + game_concept_rolls:0 "Rolls" + game_concept_combat_roll:0 "Battle Roll" + game_concept_advantage_roll:0 "Advantage Roll" + game_concept_advantage_rolls:0 "Advantage Rolls" + game_concept_combat_roll_desc:0 "[advantage|E] Rolls are made by each [commander|E] during [battle|E]. These are done on a scale from 0-10 and are completely random, but can have a decisive effect on the outcome of the $game_concept_battle$." + game_concept_terrain:0 "Terrain" + game_concept_terrains: "Terrains" + game_concept_terrain_desc:1 "Each [barony|E] has a specific dominant Terrain which can affect things like [supply|E], movement speed of [armies|E], the efficacy of the various types of [men_at_arms|E] [regiments|E] in [battle|E] and the [buildings|E] that can be constructed there.\n\nMany [commander_traits|E] also deal with Terrain." + game_concept_independent_ruler:0 "Independent Ruler" + game_concept_independent_rulers: "Independent Rulers" + game_concept_independent_ruler_desc:0 "$game_concept_independent$ [rulers|E] have no [liege|E] and thus enjoy greater freedom of action (e.g. in declaring [wars|E]).\n\nHowever, unlike [vassals|E] they can also be directly attacked by foreign [rulers|E]." + game_concept_independent:0 "Independent" + game_concept_unlanded:0 "Unlanded" + game_concept_unlanded_desc:0 "$game_concept_unlanded$ Characters have no [holdings|E] in their [domain|E], but can theoretically still be [rulers|E] of a sort. For example, this can be the case for [heads_of_faith|E] and the Grand Masters of [holy_orders|E]." + game_concept_landed:0 "Landed" + game_concept_land:0 "Land" + game_concept_landed_desc:0 "A $game_concept_landed$ Character is a [ruler|E] who owns [holdings|E]. Except in [theocracies|E] and [republics|E], [commoners|E] automatically become [nobles|E] when they are landed, founding a new [dynasty|E]." + game_concept_head_of_faith:0 "Head of Faith" + game_concept_heads_of_faith:0 "Heads of Faith" + game_concept_head_of_faith_desc:0 "A $game_concept_head_of_faith$ is the formal leader of a [faith|E]. The powers and nature of the $game_concept_head_of_faith$ depends on the [doctrines|E] of the Faith.\n\nSome Faiths have a [spiritual_head_of_faith|E] #weak (e.g. the Pope)#!, some a [temporal_head_of_faith|E] #weak (e.g. a Caliph)#!, and some do not have a $game_concept_head_of_faith$ at all." + game_concept_spiritual_head_of_faith:0 "Spiritual Head of Faith" + game_concept_head_of_faith_spiritual:0 "Spiritual" + game_concept_spiritual_head_of_faith_desc:0 "A [GetFaithDoctrine('doctrine_spiritual_head').GetBaseName] [head_of_faith|E] is [theocratic|E] and does not have to be [landed|E] #weak (although they can be)#!.\n\n$game_concept_head_of_faith_spiritual$ $game_concept_heads_of_faith$ usually have access to interactions such as being able to grant [claims|E] or [gold|E].\n\nShould the [doctrines|E] of the [faith|E] allow for [great_holy_wars|E] then they will be [great_holy_war_undirected|E] #weak (e.g. Crusades)#!." + game_concept_temporal_head_of_faith:0 "Temporal Head of Faith" + game_concept_head_of_faith_temporal:0 "Temporal" + game_concept_temporal_head_of_faith_desc:0 "A [GetFaithDoctrine('doctrine_temporal_head').GetBaseName] [head_of_faith|E] acts much like a normal [ruler|E], with the $game_concept_head_of_faith$ [title|E] being destroyed should they lose all their land.\n\nShould the [doctrines|E] of the [faith|E] allow for [great_holy_wars|E] they will be [great_holy_war_directed|E] #weak (e.g. Jihads)#!." + game_concept_routed_soldiers:0 "Routed Casualties" + game_concept_routed_soldiers_desc:1 "In [battle|E], most [casualties|E] are actually $game_concept_routed_soldiers$ and not dead or badly wounded. Unlike [dead_soldiers|E], these [soldiers|E] will live to fight another day and return to the [army|E] after the $game_concept_battle$ is concluded. They can still be ridden down by the winning side during the [aftermath|E] of a $game_concept_battle$, including if the $game_concept_army$ voluntarily [retreats|E]." + game_concept_dead_soldiers:1 "Fatal Casualties" + game_concept_dead_soldiers_desc:0 "During [battle|E], many (but usually not most) [soldiers|E] are killed or too badly wounded to ever fight again. These are permanent [casualties|E] as opposed to merely [routed_soldiers|E]." + game_concept_title_claim:0 "Title Claim" + game_concept_title_claims:0 "Title Claims" + game_concept_claims:0 "Claims" + game_concept_claim:0 "Claim" + game_concept_claimed:0 "Claimed" + game_concept_claim_i:1 "@pressed_claim!" + game_concept_title_claim_desc:0 "A $game_concept_claim$ on a [title|E] represents a legal right to own it and provides a [casus_belli|E] to conquer it through [war|E]. Claims also provide a valid reason to [revoke|E] [titles|E] off [vassal|E] [holders|E].\n\nClaims are usually given to [rulers|E] whenever they lose control of Titles to someone else, but can also be created through the [fabricate_claim_short|E] Task.\n\nFurthermore, each child (even [bastards|E]) of a ruler has an [implicit_claim|E] on all of that ruler's [titles|E]. If they do not inherit that title from the [ruler] when they die, those [implicit_claims] will convert to [pressed_claims|E], which can then be inherited by their own children as [unpressed_claims|E]." + game_concept_pressed_claim:0 "Pressed Claim" + game_concept_pressed_claims:0 "Pressed Claims" + game_concept_pressed_claim_i:1 "@pressed_claim!" + game_concept_pressed:0 "Pressed" + game_concept_pressed_claim_desc:0 "$game_concept_pressed$ [claims|E] are considered legally strong, and are inherited as [unpressed_claims|E] by the children of the [claimant|E]." + game_concept_unpressed_claim:0 "Unpressed Claim" + game_concept_unpressed_claims:0 "Unpressed Claims" + game_concept_unpressed_claim_i:1 "@unpressed_claim!" + game_concept_unpressed:0 "Unpressed" + game_concept_unpressed_claim_desc:0 "$game_concept_unpressed$ [claims|E] are legally tenuous, and are not inherited by the children of the [claimant|E].\n\nHowever, Unpressed Claims become [pressed|E] if they are used in a [casus_belli|E] to declare [war|E] — even if the war ends in a [white_peace|E]." + game_concept_implicit_claim:0 "Implicit Claim" + game_concept_implicit_claims:0 "Implicit Claims" + game_concept_implicit_claim_i:1 "@implicit_claim!" + game_concept_implicit_claim_desc:2 "$game_concept_implicit_claims$ are [claims|E] that are given to [eligible_children|E] on all [titles|E] held by their parents. If a parent loses a [title|E], the child's $game_concept_implicit_claim$ will be removed too." + game_concept_claimant:0 "Claimant" + game_concept_claimants:0 "Claimants" + game_concept_claimant_possessive: "Claimant's" + game_concept_claimant_desc:0 "A $game_concept_claimant$ is a person with one or more [claims|E] to [titles|E]. [ruler|E] Claimants can press these by using the Claim [casus_belli|E] to declare [wars|E].\n\nThis Casus Belli can also be used to press the Claims of [vassals|E] and even [unlanded|E] characters in your [realm|E].\n\nClaimants can also lead [factions|E] — even if they do not reside in your Realm." + game_concept_renounce:0 "Renounce" + game_concept_renounced:0 "Renounced" + game_concept_renounce_desc:0 "[prisoners|E] can be released in return for Renouncing all [claims|E] on [titles|E] within your [realm|E].\n\nHowever, children of the current [holder|E] can never lose their Claims as long as the Holder is still alive." + game_concept_court:0 "Court" + game_concept_courts:0 "Courts" + game_concept_court_desc: "Every [ruler|E] has a $game_concept_court$, consisting of various [unlanded|E] Characters who serve their [liege|E].\n\nUsually, these [courtiers|E] consists of the Ruler's family and a mix of unrelated but potentially useful [nobles|E] and commoners." + game_concept_courtier:0 "Courtier" + game_concept_courtiers:0 "Courtiers" + game_concept_courtier_desc:2 "A $game_concept_courtier$ is an [unlanded|E] character who serves a [ruler|E] in their [court|E].\n\nCourtiers can:\n$BULLET_WITH_TAB$Serve as [councillors|E]\n$BULLET_WITH_TAB$Serve in [court_positions|E]\n$BULLET_WITH_TAB$Serve in [armies|E] as [commanders|E] or [knights|E]\n$BULLET_WITH_TAB$Become their Ruler's [vassal|E] if granted a [title|E]\n$BULLET_WITH_TAB$Let their Ruler press their [claims|E] in [war|E]\n\n#WEAK [adventurers|E] have [followers|E] instead of $game_concept_courtiers$ — they serve the same role, albeit generally smellier and with more mud.#!" + game_concept_court_guest:0 "Court Guest" + game_concept_guest:0 "Guest" + game_concept_guests:0 "Guests" + game_concept_court_guest_desc:0 "[wanderers|E] sometimes show up in [court|E] as Guests. They will only stay for a limited time, but can be recruited as permanent [courtiers|E] by the [ruler|E]." + game_concept_wanderer:0 "Wanderer" + game_concept_wanderers:0 "Wanderers" + game_concept_wanderer_desc:0 "Characters who do not belong to a [court|E] or hold any [titles|e] are called Wanderers. They travel the world, visiting Courts as [guests|E] along the way. Wanderers might become [mercenary|E] Captains, leaders of [holy_orders|E], [clergy|E] members, or [city|E] holders." + + game_concept_court_host:0 "Court Host" + game_concept_court_host_desc:2 "A $game_concept_court_host$ is a [ruler|E] who is not the liege of a character, yet still has them in their [court].\n\nThere are several possible reasons this can occur, such as [wanderers|E] visiting a Ruler or [wards|E] staying in the same Court as their [guardian|E]." + game_concept_host:0 "Host" + game_concept_hosting: "Hosting" + game_concept_noble:0 "Noble" + game_concept_nobles:0 "Nobles" + game_concept_nobleman:0 "Nobleman" + game_concept_noblemen:0 "Noblemen" + game_concept_noblewoman:0 "Noblewoman" + game_concept_noblewomen:0 "Noblewomen" + game_concept_nobility:0 "Nobility" + game_concept_noble_desc:0 "$game_concept_nobles$ are characters who are members of a [dynasty|E]. Characters without a Dynasty are considered lowborn [commoners|E]." + game_concept_commoner:0 "Commoner" + game_concept_lowborn:0 "Lowborn" + game_concept_commoners:0 "Commoners" + game_concept_commoner_desc:0 "A $game_concept_commoner$ or $game_concept_lowborn$ Character is not a member of a [noble|E] [dynasty|E]. They can, however, still be powerful [rulers|E] of [theocracies|E] and [republics|E].\n\nIf a Commoner becomes [landed|E], they immediately become Nobles and found their own [dynasties|E] (except in [republics|E] and [theocracies|E], which are largely run by Commoners)." + game_concept_martial_lifestyle:0 "Martial Lifestyle" + game_concept_martial_lifestyle_i: "@martial_lifestyle_icon!" + game_concept_martial_lifestyle_desc:0 "The $game_concept_martial_lifestyle$ is suitable for Characters who want to improve their [men_at_arms|E] and [knights|E], boost [control|E] in their [domain|E], or increase their chances to win [wars|E]." + game_concept_intrigue_lifestyle:0 "Intrigue Lifestyle" + game_concept_intrigue_lifestyle_i: "@intrigue_lifestyle_icon!" + game_concept_intrigue_lifestyle_desc:0 "The $game_concept_intrigue_lifestyle$ is suitable for Characters who want to succeed in [schemes|E], gain [dread|E], or Seduce others with ease." + game_concept_intrigue_lqwuljxh:0 "Lqwuljxh" + game_concept_intrigue_9_14_20_18_9_7_21_5:0 "9 14 20 18 9 7 21 5" + game_concept_intrigue_rigueint:0 "Rigueint" + game_concept_diplomacy_lifestyle:0 "Diplomacy Lifestyle" + game_concept_diplomacy_lifestyle_i: "@diplomacy_lifestyle_icon!" + game_concept_diplomacy_lifestyle_desc:0 "The $game_concept_diplomacy_lifestyle$ is suitable for Characters who want to gain [claims|E] and [casus_bellis|E], increase their [prestige|E], or gain boons from Family and Friends." + game_concept_stewardship_lifestyle:0 "Stewardship Lifestyle" + game_concept_stewardship_lifestyle_i: "@stewardship_lifestyle_icon!" + game_concept_stewardship_lifestyle_desc:0 "The $game_concept_stewardship_lifestyle$ is suitable for Characters who want to improve their [domain|E], appease their [liege|E] and [vassals|E], or gain a lot of [gold|E]." + game_concept_learning_lifestyle:0 "Learning Lifestyle" + game_concept_learning_lifestyle_i: "@learning_lifestyle_icon!" + game_concept_learning_lifestyle_desc:0 "The $game_concept_learning_lifestyle$ is suitable for Characters who want to live long and healthy lives, gain [piety|E], or gain additional bonuses from their [faith|E]." + game_concept_wanderer_lifestyle: "Wandering Lifestyle" + game_concept_wanderer_lifestyle_desc: "The $game_concept_wanderer_lifestyle$ is suitable for Characters who want to see [points_of_interest|E], or gain additional bonuses from [traveling|E]." + game_concept_crime:0 "Crime" + game_concept_crimes:0 "Crimes" + game_concept_criminal:0 "Criminal" + game_concept_criminals:0 "Criminals" + game_concept_crime_i:0 "@crime_icon!" + game_concept_crime_desc:2 "$game_concept_crimes$ are actions that society views as objectionable enough to be worthy of punishment.\n\nCrimes may be secular (such as a [vassal|E] [revolting|E] against their [liege|E]) or religious (any kind of [shunned|E] behavior that is made illegal by [doctrine|E]). Secular crimes can only be punished by the character(s) who were harmed by the offense, but any [ruler|E] can punish their subjects for religious Crimes.\n\nAll crimes give Rulers a valid reason to [imprison|E] $game_concept_criminals$, and, depending on the severity of the Crime, to [revoke|E] their [titles|E], [banish|E], [torture|E], or [execute|E] them. Each Crime can only be punished by a Ruler once, though some Crimes will give the Criminal a negative [fame_trait|E] that they will carry to their grave.\n\nSometimes characters get away with Crimes, which are then [secrets|E] that can be uncovered by other characters and used for [blackmail|E]." + + game_concept_shunned:0 "Shunned" + game_concept_shunned_desc:1 "Many [faiths|E] have [doctrines|E] which designate certain behaviors as Shunned. Depending on the specific Doctrine, these behaviors may also be considered [criminal|E].\n\nCharacters who are caught practicing behaviors that are Shunned by their Faith lose a [piety_level|E] and gain a corresponding [fame_trait|E]; this Trait will be disliked by everyone whose Faith considers that behavior to be either Shunned or Criminal.\n\nExamples of Shunned behaviors include:\n$EFFECT_LIST_BULLET$[GetTrait('fornicator').GetName( GetNullCharacter )]\n$EFFECT_LIST_BULLET$[GetTrait('adulterer').GetName( GetNullCharacter )]\n$EFFECT_LIST_BULLET$[GetTrait('deviant').GetName( GetNullCharacter )]\n$EFFECT_LIST_BULLET$[GetTrait('sodomite').GetName( GetNullCharacter )]\n$EFFECT_LIST_BULLET$[GetTrait('kinslayer_3').GetName( GetNullCharacter )]\n$EFFECT_LIST_BULLET$[GetTrait('witch').GetName( GetNullCharacter )]" + game_concept_refuse_conversion_crime:0 "Refuse Conversion" + game_concept_refusing_conversion_crime:0 "Refusing Conversion" + game_concept_refused_conversion_crime:0 "Refused Conversion" + game_concept_refuse_conversion_crime_desc:2 "Refusing to convert will be considered a [crime|E] if:\n$EFFECT_LIST_BULLET$The refusing [character|E] is of the same [religion|E] as the $game_concept_character$ making the demand\n$EFFECT_LIST_BULLET$The $game_concept_religion$ has [heresies|E]\n$EFFECT_LIST_BULLET$The [faith|E] of the $game_concept_character$ making the demand is [faith_hostile|E] or more towards the refusing $game_concept_character$'s $game_concept_faith$" + game_concept_prison:0 "Prison" + game_concept_imprisons:0 "Imprisons" + game_concept_imprison:0 "Imprison" + game_concept_imprisoning:0 "Imprisoning" + game_concept_imprisoned:0 "Imprisoned" + game_concept_imprisonment:0 "Imprisonment" + game_concept_prisons:0 "Prisons" + game_concept_prisoner:0 "Prisoner" + game_concept_prisoners:0 "Prisoners" + game_concept_jailor:0 "Jailor" + game_concept_prison_desc: "[landed|E] [rulers|E] can keep other Characters as Prisoners, either in their [dungeon|E] or under simple [house_arrest|E]. In a [camp|E] all Prisoners are kept in the [stockade|E]. Characters risk imprisonment in [battle|E] or at the end of a [siege|E].\n\nCharacters can also arrest anyone inside their own [realm|E], or [camp|E]. However, this is viewed as [tyrannical|E] unless the Character is guilty of a [crime|E].\n\nPrisoners are at your mercy and can be [executed|E], [tortured|E], Ransomed or simply Released." + game_concept_dungeon: "Dungeon" + game_concept_stockade: "Stockade" + game_concept_dungeons: "Dungeons" + game_concept_stockades: "Stockades" + game_concept_dungeon_desc: "[imprisoned|E] Characters kept in the $game_concept_dungeon$ or $game_concept_stockade$ suffer from increasing [stress|E] as well as a [health|E] penalty. In time, they are likely to die from [illness|E] or suffer mental breaks.\n\nFor [landed|E] [rulers|E], [commoners|E] are automatically imprisoned in the Dungeon, but can be moved to [house_arrest|E]." + game_concept_stockade_desc: "$game_concept_dungeon_desc$" + game_concept_house_arrest:0 "House Arrest" + game_concept_house_arrest_desc:0 "$game_concept_house_arrest$ is a lenient form of [prison|E] where Characters suffer from no ill effects except boredom. However, [rulers|E] may throw them into the [dungeon|E], though it lowers the [opinions|E] of the Prisoner's [close_family|E].\n\nCaptured [nobles|E] are automatically put in [house_arrest|E]." + game_concept_tyranny:0 "Tyranny" + game_concept_tyrant:0 "Tyrant" + game_concept_tyrannical:0 "Tyrannical" + game_concept_tyranny_desc:0 "Many actions of a [ruler|E] are considered $game_concept_tyrannical$ — against the law or religious [doctrine|E]. For example, [imprisoning|E] or [revoking|E] [titles|E] off someone who has committed no [crime|E] is considered Tyrannical.\n\nTyranny acts as a blanket [opinion|E] modifier for all characters in the [realm|E]." + game_concept_execute:0 "Execute" + game_concept_executed:0 "Executed" + game_concept_executing:0 "Executing" + game_concept_execution:0 "Execution" + game_concept_executions:0 "Executions" + game_concept_execute_desc:1 "[imprisoned|E] Characters can be $game_concept_executed$. This is considered [tyrannical|E] unless their imprisoner has an [execute_reason|E].\n\nExecutions increase your [dread|E] and are never well received by the [close_family|E] of the unfortunate target." + game_concept_torture:0 "Torture" + game_concept_tortured:0 "Tortured" + game_concept_torturing:0 "Torturing" + game_concept_torture_desc:0 "[imprisoned|E] Characters can be $game_concept_tortured$, damaging their [health|E] or even maiming them in different ways.\n\nTorture can relieve [stress|E] for [GetTrait('callous').GetName( GetNullCharacter )] and [GetTrait('sadistic').GetName( GetNullCharacter )] Characters, but causes Stress for those of a kind nature.\n\nTorturing [rulers|E] can also increase your [dread|E]." + game_concept_banish:0 "Banish" + game_concept_banished:0 "Banished" + game_concept_banishment:0 "Banishment" + game_concept_banishment_desc:1 "[imprisoned|E] Characters can be $game_concept_banished$ from the [realm|E], which is arguably the harshest form of punishment. $game_concept_banished$ [landed|E] Rulers are deposed, while $game_concept_banished$ [courtiers|E] have their assets seized.\n\nBanishment without a reason (e.g. some severe [crime|E]) is considered extremely [tyrannical|E]." + game_concept_revoke:0 "Revoke" + game_concept_revoked:0 "Revoked" + game_concept_revoking:0 "Revoking" + game_concept_revocation:0 "Revocation" + game_concept_revocations:0 "Revocations" + game_concept_revoke_desc:0 "At [limited_crown_authority|E] or higher, [rulers|E] can $game_concept_revoke$ the [titles|E] of their [vassals|E], but unless the Vassal is [imprisoned|E] this is a risky proposition, for the Vassal may refuse and rise up in rebellion.\n\nTitle Revocation is considered [tyrannical|E] unless the Vassal is guilty of a fairly severe [crime|E]." + game_concept_retract:0 "Retract" + game_concept_retracted:0 "Retracted" + game_concept_retracting:0 "Retracting" + game_concept_retraction:0 "Retraction" + game_concept_retractions:0 "Retractions" + game_concept_retract_desc:0 "At [limited_crown_authority|E] or higher, [rulers|E] can $game_concept_retract$ the [vassal|E] of a Vassal, but unless the latter is [imprisoned|E] this is risky, for the Vassal may refuse and rise up in rebellion.\n\nVassal Retraction is considered [tyrannical|E] unless the target is guilty of a fairly severe [crime|E]." + game_concept_transfer:0 "Transfer" + game_concept_transferred:0 "Transferred" + game_concept_transferring:0 "Transferring" + game_concept_transfer_desc:0 "[rulers|E] can $game_concept_transfer$ one of their [vassals|E] to another Vassal, as long as the former is of lower rank than the latter. This is a good way of raising a Vassal's [opinion|E], particularly if the Transferred vassal is [de_jure|E] part of their [realm|E]." + game_concept_men_at_arms:0 "Men-at-Arms" + game_concept_men_at_arms_desc:1 "$game_concept_men_at_arms$ are professional [soldiers|E] superior to [levies|E].\n\nThe player has direct control over the composition and size of their Men-at-Arms [regiments|E].\n\nDifferent types of Men-at-Arms are good or bad in different types of [terrain|E]. Each type also [counters|E] another type.\n\nMen-at-Arms can be [stationed|E] in [holdings|E] to increase their effectiveness." + game_concept_skirmishers:0 "Skirmishers" + game_concept_skirmisher:0 "Skirmisher" + game_concept_skirmishers_desc:0 "Skirmishers are [men_at_arms|E] who are lightly armed and skilled in harassing the enemy.\n\nWhile each kind of Skirmisher is unique, they generally [counter|E] [heavy_infantry|E], and are in turn Countered by [archers|E]." + game_concept_archers:0 "Archers" + game_concept_archer:1 "Archer" + game_concept_archers_desc:0 "Archers are [men_at_arms|E] who fight on foot with ranged weapons.\n\nWhile each kind of Archer is unique, they generally [counter|E] [skirmishers|E], and are in turn Countered by [heavy_cavalry|E] and [light_cavalry|E]." + game_concept_light_cavalry:0 "Light Cavalry" + game_concept_light_cavalry_desc:0 "Light Cavalry are mounted [men_at_arms|E] who excel at scouting and pursuing the enemy.\n\nWhile each kind of Light Cavalry is unique, they generally [counter|E] [archers|E], and are in turn Countered by [spearmen|E].\n\nLight Cavalry are also often strong on flat [terrain|E].\n\nIn comparison with [heavy_cavalry|E], they are usually better at [pursuit|E] and [screen|E]." + game_concept_heavy_cavalry:0 "Heavy Cavalry" + game_concept_heavy_cavalry_desc:0 "Heavy Cavalry are mounted, heavily armored [men_at_arms|E]\n\nWhile each kind of Heavy Cavalry is unique, they generally [counter|E] [archers|E], and are in turn Countered by [spearmen|E].\n\nHeavy Cavalry are also often strong on flat [terrain|E].\n\nIn comparison with [light_cavalry|E], they are usually stronger at raw [damage|E] and [toughness|E]." + game_concept_spearmen:0 "Spearmen" + game_concept_spearmen_desc:0 "Spearmen are [men_at_arms|E] who fight on foot with various polearms.\n\nWhile each kind of Spearman is unique, they generally [counter|E] [heavy_cavalry|E] and [light_cavalry|E], and are in turn Countered by [heavy_infantry|E].\n\nSpearmen are also often strong on hilly and mountainous [terrain|E]." + game_concept_heavy_infantry:0 "Heavy Infantry" + game_concept_heavy_infantry_desc:0 "Heavy Infantry are [men_at_arms|E] who fight on foot, with heavier armor and weapons.\n\nWhile each kind of Heavy Infantry is unique, they generally [counter|E] [spearmen|E], and are in turn Countered by [skirmishers|E]." + game_concept_archer_cavalry:0 "Archer Cavalry" + game_concept_archer_cavalry_desc:0 "$game_concept_archer_cavalry$ are mounted [men_at_arms|E] equipped with ranged weapons.\n\nWhile each kind of $game_concept_archer_cavalry$ is unique, they generally [counter|E] [heavy_infantry|E], and are in turn Countered by [archers|E] equipped with crossbows.\n\n$game_concept_archer_cavalry$ are also often strong on flat [terrain|E], particularly Steppe." + game_concept_camel_cavalry:0 "Camel Cavalry" + game_concept_camel_cavalry_desc:0 "$game_concept_camel_cavalry$ are mounted [men_at_arms|E] that, similar to [light_cavalry|E], excel at scouting and pursuing the enemy.\n\nThey generally [counter|E] $game_concept_light_cavalry$ and are in turn Countered by [spearmen|E].\n\n$game_concept_camel_cavalry$ are often strong in Desert and Dryland [terrain|E]." + game_concept_elephant_cavalry:0 "Elephant Cavalry" + game_concept_elephant_cavalry_desc:0 "$game_concept_elephant_cavalry$ are mounted, often armored [men_at_arms|E].\n\nWhile each kind of $game_concept_elephant_cavalry$ is unique, they are generally a strong [counter|E] to infantry units, and are in turn Countered by [spearmen|E].\n\n$game_concept_elephant_cavalry$ are also often strong in Jungle [terrain|E]." + game_concept_gunpowders: "Handgunners" + game_concept_gunpowder: "Handgunner" + game_concept_gunpowder_desc: "Handgunners are [men_at_arms|E] who are armed with potent gunpowder weapons.\n\nWhile each kind of Handgunner is unique, they generally [counter|E] [heavy_infantry|E], and are in turn Countered by [heavy_cavalry|E] and [light_cavalry|E]." + game_concept_peasant_militia: "Peasant Militia" + game_concept_peasant_militias: "Peasant Militias" + game_concept_peasant_militia_desc: "Peasant Militias are [men_at_arms|E] who are armed with pitchforks and spears.\n\nWhile each kind of Militia is unique, they generally [counter|E] [heavy_cavalry|E] and [light_cavalry|E], and are in turn Countered by [heavy_infantry|E].\n\nPeasant Militias are strong in mountainous and fertile [terrain|E]." + game_concept_special_troops:0 "Special Soldiers" + game_concept_special_troops_desc:0 "$game_concept_special_troops$ are not like regular [armies|E], as they are not raised from a [holding|E]. $game_concept_special_troops$ can be gained through Events, and represent various things such as retinues, ravenous hordes and ambitious peasantry.\n\nNormally they do not cost maintenance, and do not reinforce. Use them wisely if you have them.\n\nSeveral historical [rulers|E] start with $game_concept_special_troops$." + game_concept_line:0 "Line" + game_concept_line_of_succession:0 "Line of Succession" + game_concept_line_of_succession_desc:0 "The Line of Succession is the order in which certain characters stand to inherit certain [titles|E], determined by the [succession_law|E]." + game_concept_counter:0 "Counter" + game_concept_counters:0 "Counters" + game_concept_men_at_arms_counter:0 "Men-at-Arms Counter" + game_concept_men_at_arms_counter_desc:0 "Most [men_at_arms|E] are able to $game_concept_counter$ another type of $game_concept_men_at_arms$.\n\nWhen a [regiment|E] is Countered, its effectiveness during a [battle|E] is decreased. The more a $game_concept_regiment$ is outnumbered by its $game_concept_counter$, the higher the penalty." + game_concept_intimidated:0 "Intimidated" + game_concept_intimidated_i:0 "@intimidated_icon!" + game_concept_intimidated_desc:1 "Characters who greatly fear another character are Intimidated by them. This is usually caused by [dread|E] and/or a cowardly personality.\n\nIntimidated characters are less likely to initiate hostile actions against the character they fear, including joining or starting [factions|E].\n\nCharacters who are even more fearful are marked as [cowed|E]." + game_concept_cowed:1 "Terrified" + game_concept_terrified_i:0 "@terrified_icon!" + game_concept_cowed_desc:2 "Terrified Characters are paralyzed by fear of another character and will rarely take any hostile actions against that character, including starting [factions|E].\n\nCharacters are Terrified or [intimidated|E] by [dread|E] and/or a cowardly personality." + game_concept_provisions: "Provisions" + game_concept_provision: "Provision" + game_concept_provisions_i: "@provisions_icon!" + game_concept_provisions_desc: "$game_concept_provisions$ represent the total amount of food, water, and shelter a [camp|E] can provide.\n\n$game_concept_camps$ lose $game_concept_provisions$ while moving [location|E]. Exactly how much is affected by size of their [men_at_arms|E], the [terrain|E] moved across, and what [officers|E] are currently hired.\n\n$game_concept_camp$ followers running low on $game_concept_provisions$ will start suffering [privation|E] events: starting with [characters|E] quickly losing [opinion|E] of their leader, escalating rapidly to starvation and death.\n\n#WEAK $game_concept_provisions$ can be refilled when stationary by requesting them from [contact_list_contacts|E], taking a [decision|E], or as [task_contract|E] rewards.#!" + game_concept_privation: "Privation" + game_concept_privation_desc: "When a [camp|E] is stationary, they can sustain themselves with bartering food for odd jobs, hunting, foraging, or fishing where allowed and possible, and generally #EMP just#! about treading water on their supply situation.\n\nAs soon as they have to start [traveling|E], they're entirely reliant on their $game_concept_provisions$ to survive, since they cannot both move and obtain sufficient food. As $game_concept_provisions$ run low (then run #EMP out#!), tempers will flare and [followers|E] will starve.\n\nWhen this happens, [characters|E] will begin to leave the $game_concept_camp$, negative [modifiers|E] are increasingly applied, and those who remain will eventually mutiny or die." + game_concept_supply:0 "Supply" + game_concept_supply_state:0 "Supply State" + game_concept_supply_desc:1 "$game_concept_supply$ is the amount of food and equipment an [army|E] carries. Armies will begin losing $game_concept_supply$ when their size goes above the [supply_limit|E] of their current location.\n\nArmies that are running low on $game_concept_supplies$ will suffer an [advantage|E] penalty in [battle|E], and when they run out completely they will begin suffering from [attrition|E].\n\nSupply increases over time as long as the Army remains below the $game_concept_supply_limit$ in friendly territory." + game_concept_supplied:0 "Supplied" + game_concept_supplies:0 "Supplies" + game_concept_supply_limit_mult:0 "Supply Limit Multiplier" + game_concept_supply_limit:0 "Supply Limit" + game_concept_supply_limit_desc:0 "The $game_concept_supply_limit$ dictates the amount of [soldiers|E] you may have in a [barony|E], as determined by the Barony's [terrain|E] and [development|E].\n\nShould your total [army|E] size go above the $game_concept_supply_limit$, your $game_concept_armies$ will lose [supply|E] and eventually suffer from [attrition|E]." + game_concept_attrition:0 "Attrition" + game_concept_attrition_desc:1 "[armies|E] can suffer from $game_concept_attrition$, which is when [soldiers|E] are lost due to desertion, disease or starvation.\n\n$game_concept_attrition$ occurs when an Army is out of [supplies|E], besieging a [fortified_holding|E], or moving from one hostile [county|E] into another if the target location doesn't border a $game_concept_county$ already under control." + game_concept_attrition_i: "@attrition_icon!" + game_concept_objectives:0 "Objectives" + game_concept_objectives_desc:1 "Certain parts of an enemy [realm|E] (usually the [realm_capital|E] and the [holdings|E] in the [war_target|E] region of a [war|E]) are considered $game_concept_objectives$. By [occupying|E] $game_concept_objectives$, you start gaining 'ticking' [war_score|E].\n\nFor the Defender, [war_score|E] starts to tick up (after an initial period of time) if the Attacking side can be prevented from Occupying any $game_concept_objectives$." + game_concept_war_contribution:0 "War Contribution" + game_concept_contribution:0 "Contribution" + game_concept_contribute:0 "Contribute" + game_concept_war_contribution_desc:1 "[rulers|E] who are helping their [allies|E] in a [war|E] gain $game_concept_war_contribution$ depending on the number and size of [battles|E] they fight in, as well as the number of [holdings|E] they manage to [occupy|E].\n\nAfter a war ends, each Contributor is rewarded in relation to their Contribution. The exact spoils depend on the war's [casus_belli|E], but is typically [gold|E], [prestige|E] or [piety|E].\n\nNote that Contribution increases even from losing Battles." + game_concept_scheme_speed: "Scheme Phase Length" + game_concept_scheme_speed_single: "Phase Length" + game_concept_scheme_speed_i: "@scheme_phase_duration_icon!" + game_concept_scheme_speed_desc: "$game_concept_scheme_speed_single$ refers to how many days it takes to complete a single [scheme_phase|e]. Speed is affected by your [skill|E], [agents|E], and your [spymaster|E], as well as by the '$task_support_schemes$' [councillor_task|E] if the Scheme is [scheme_hostile|E].\n\n#WEAK A lower $game_concept_scheme_speed_single$ is beneficial because it will cause a [scheme|e] to progress faster." + game_concept_scheme_resistance:0 "Scheme Resistance" + game_concept_scheme_resistance_single:0 "Resistance" + game_concept_hostile_scheme_resistance:0 "Hostile Scheme Resistance" + game_concept_scheme_resistance_desc:1 "The $game_concept_scheme_resistance$ of a [character|E] slows down $game_concept_schemes$ against them.\n\nThe [scheme_speed|E] of the [scheme_owner|E] is reduced by this value, increasing the time it takes for the $game_concept_scheme$ to gain [scheme_opportunity_opportunities|E].\n\n#WEAK $game_concept_scheme_resistance$ is increased by the corresponding [skill|E] of the [scheme_target|E] and their [spymaster|E], as well as by the '$task_disrupt_schemes$' [councillor_task|E] (if the Scheme is [scheme_hostile|E]).#!" + game_concept_scheme_success_chance:0 "Scheme Success Chance" + game_concept_success_chance:0 "Success Chance" + game_concept_success_chance_i: "@scheme_success_icon!" + game_concept_scheme_success_chance_desc:0 "The $game_concept_success_chance$ of a [scheme|e] determines how likely it is for it to succeed when executed.\n\nA $game_concept_scheme$'s $game_concept_success_chance$ will [scheme_growth_grow|E] over time, and is based on the assigned [agents|e] as well as an associated [skill|e]. $game_concept_success_chance$ is limited by [scheme_potential|e]. No $game_concept_scheme$ can ever exceed a 95% $game_concept_success_chance$, except for [contract_schemes|e].\n\n#WEAK [secret_schemes|e] have a risk of being discovered by target. If that happens your $game_concept_success_chance$ will be heavily reduced. #!" + game_concept_scheme_growth: "Scheme Growth" + game_concept_success_chance_growth_i: "@scheme_success_growth_icon!" + game_concept_scheme_growth_growth: "Growth" + game_concept_scheme_growth_desc: "Every [scheme_phase_phase|E], a $game_concept_scheme$'s [success_chance|E] is increased by this value, until the maximum current [scheme_potential_potential|E] is hit.\n\n#WEAK For instance, if a $game_concept_scheme$ currently has 50% $game_concept_success_chance$, a $game_concept_scheme_potential_potential$ of 54%, and a $game_concept_scheme_growth_growth$ of 3%, then after one $game_concept_scheme_phase_phase$ has gone by, it'll have 53% $game_concept_success_chance$.\n\nSince $game_concept_scheme_growth_growth$ is still capped by $game_concept_scheme_potential_potential$, after the next phase, the $game_concept_scheme$ would only have 54% $game_concept_success_chance$.#!" + game_concept_scheme_growth_grow: "grow" + game_concept_scheme_growth_grow_desc: "$game_concept_scheme_growth_desc$" + game_concept_scheme_potential: "Scheme Potential" + game_concept_scheme_potential_potential: "Potential" + game_concept_success_chance_max_i: "@scheme_success_max_icon!" + game_concept_scheme_potential_desc: "A [scheme|e] has a [success_chance|e], a percentage value that determines its outcome, reached via [scheme_growth|E]. This is limited by $game_concept_scheme_potential$, which serves as the upper bound of a $game_concept_scheme$.\n\n$game_concept_scheme_potential$ can be increased by hiring appropriate [agents|e], but can never exceed 95%, except for [contract_schemes|e].\n\n#WEAK Harmonious $game_concept_agents$ may give further bonus [modifiers|E] via events.\n\nExcess $game_concept_success_chance$ above a $game_concept_scheme$'s $game_concept_scheme_potential_potential$ is lost.#!" + game_concept_secrecy:0 "Secrecy" + game_concept_secrecy_i: "@scheme_secrecy_icon!" + game_concept_secrecy_desc:1 "The $game_concept_secrecy$ of a [hostile_scheme|e] determines how likely it is for it to remain undetected from the [scheme|e] target.\n\nThe $game_concept_secrecy$ of a $game_concept_scheme$ will have an initial immunity period where it is unable to be discovered. After this period, the $game_concept_scheme$ will be at risk of being discovered every month through a [scheme_breach_short|e]. Your [agents|e] can greatly impact how well you are able to keep your $game_concept_scheme$ secret.\n\n#WEAK A $game_concept_scheme$ with a $game_concept_secrecy$ of 80% has a 20% chance to be discovered on execution, and a 2% chance to be discovered each month it continues.#!" + game_concept_secrecy_grace: "Grace" + game_concept_secrecy_grace_desc.boilerplate: "Most $game_concept_schemes$ have a grace period of around ~[EmptyScope.ScriptValue('secrecy_grace_period_value')] months before they can be discovered monthly." + game_concept_secrecy_grace_desc: "$game_concept_secrecy_grace_desc.boilerplate$\n\nAfter the grace period is over, $game_concept_schemes$ may be discovered monthly, causing a [scheme_breach_short|E]. This is at a far reduced rate than when the scheme is executed, but checked significantly more frequently." + game_concept_county_development:0 "Development" + game_concept_development_i:0 "@development_icon!" + game_concept_development:0 "Development" + game_concept_county_development_desc:0 "$game_concept_county_development$ is a measure of the local infrastructure and technological advancement in a [county|E]. \n\nHigher $game_concept_county_development$ increases the [levies|E], [taxes|E], and [supply_limit|E] gained from a $game_concept_county$." + game_concept_county_development_growth:0 "Development Growth" + game_concept_development_growth:0 "Development Growth" + game_concept_county_development_growth_desc:0 "$game_concept_county_development_growth$ measures how far along the [county|E] is towards increasing its [development|E].\n\nAt 100 $game_concept_county_development_growth$, the $game_concept_county_development$ increases by 1." + game_concept_existing_development:0 "Existing Development" + game_concept_existing_development_desc:1 "The [develop_county|E] steward task suffers from diminishing returns. The more [development|E] a [county] already has, the more [development_growth|E] is penalized.\n\nBy default, [counties] reach the maximum [existing_development] penalty at 10 [development|E]. Each [era|E] has an [innovation|E] which significantly increases this limit, going all the way up to 90 [development|E] in the $culture_era_late_medieval$ [era].\n\nInnovations that affect the $game_concept_existing_development$ modifier:\n$EFFECT_LIST_BULLET$ $innovation_development_01$\n$EFFECT_LIST_BULLET$ $innovation_development_02$\n$EFFECT_LIST_BULLET$ $innovation_development_03$\n$EFFECT_LIST_BULLET$ $innovation_development_04$" + game_concept_county_control:0 "County Control" + game_concept_control:0 "Control" + game_concept_control_i:0 "@control_icon!" + game_concept_county_control_desc:0 "$game_concept_county_control$ measures the grip that the government has on the population of a [county|E]. It is crucial especially for collecting [taxes|E] from the [holdings|E].\n\nWhen a County changes hands through [war|E], Control goes down drastically, which is a good reason to vassalize the current [holder|E] instead (if the [casus_belli|E] allows). County Control can also be damaged by [sieges|E] and [Concept( 'peasant_faction', 'Peasant Uprisings' )|E].\n\nLow Control may lead to [county_corruption|E], and the primary way of increasing Control is a [councillor_task|E] available to your [marshal|E]." + game_concept_absolute_control:0 "Absolute Control" + game_concept_absolute_control_short: "Absolute" + game_concept_absolute_control_desc:1 "$game_concept_absolute_control$ is a special state of [control|E] enabled by the $absolute_control_perk_name$ [perk|E], denoting that the ruler has an iron grip over the population.\n\nWhenever $game_concept_control$ is at #V 100#!, it will instead display as '$ABSOLUTE_COUNTY_CONTROL$' and give additional bonuses to [taxes|E] and [levies|E]." + game_concept_county_corruption:0 "County Corruption" + game_concept_county_corruption_desc:0 "While a [county|E] has low [control|E] or its [holder|E] is in [debt|E], the County might acquire $game_concept_county_corruption$. These are various kinds of negative [county_modifiers|E].\n\n$game_concept_county_corruption$ will fade over time, but if the root cause persists ([debt|E] or low [control|E]), it may reappear.\n\nThe $councillor_marshal$'s $task_increase_control$ $game_concept_councillor_task$ can clear out $game_concept_county_corruption$ faster." + game_concept_county_modifier:0 "County Modifier" + game_concept_county_modifiers:0 "County Modifiers" + game_concept_county_modifier_desc:1 "$game_concept_county_modifiers$ are modifiers that affect a [county|E]'s various values.\n\n[baronies|E] can have modifiers of their own, and they can be viewed in the [holdings|E] of the $game_concept_county$." + game_concept_fleet:0 "Fleet" + game_concept_fleets:0 "Fleets" + game_concept_fleet_desc:1 "[armies|E] who move into a Sea Zone will automatically [embark|E] onto a $game_concept_fleet$. [embarking] costs a sum of [gold|E], symbolizing the procurement and construction of ships.\n\nWhile on a $game_concept_fleet$, [armies] will be able to traverse water at a rapid pace, though they will cost #V 25%#! more maintenance and will start losing [supplies|E] after #V [GetDefine('NFleet', 'ATTRITION_AFTER_DAYS')|0]#! days at sea.\n\n$game_concept_fleets$ do not engage each other in [battles|E].\n\nWhen an $game_concept_army$ disembarks, the $game_concept_fleet$ will disappear and the $game_concept_army$ will become [recently_disembarked|E]." + game_concept_domain_income:0 "Domain Income" + game_concept_domain_taxes:0 "Domain Taxes" + game_concept_domain_income_desc:1 "Your $game_concept_domain_income$ consists of the [taxes|E] that you collect from your own [domain|E]. The amount collected depends on the local [control|E] and [development|E] levels." + game_concept_vassal_taxes:0 "Vassal Taxes" + game_concept_vassal_taxes_desc:1 "Your $game_concept_vassal_taxes$ consist of the [taxes|E] that you receive from you [vassals|E]. The amount depends on the each Vassal's [obligations|E].\n\nFrom your Vassals' point of view, these same taxes are called [liege_taxes|E] to distinguish them from any $game_concept_vassal_taxes$ they collect from their own $game_concept_vassals$." + game_concept_tributary_taxes: "Tributary Taxes" + game_concept_tributary_taxes_desc: "Your $game_concept_tributary_taxes$ consist of the [taxes|E] that you receive from your [tributaries|E]. The amount depends on each Tributary's [obligations|E].\n\nFrom your Tributaries' point of view, these same taxes are called [suzerain_taxes|E] to distinguish them from any $game_concept_tributary_taxes$ they collect from their own $game_concept_tributaries$." + game_concept_liege_taxes:0 "Liege Taxes" + game_concept_liege_taxes_desc:1 "Your $game_concept_liege_taxes$ are the [taxes|E] that you must pay to your [liege|E] as part of your [obligations|E]. You do not pay any $game_concept_liege_taxes$ if you are [independent|E].\n\nFrom your Liege's point of view, these same taxes are instead called [vassal_taxes|E] to distinguish them from any taxes they may owe to their own $game_concept_liege$." + game_concept_suzerain_taxes: "Suzerain Taxes" + game_concept_suzerain_taxes_desc: "Your $game_concept_suzerain_taxes$ are the [taxes|E] that you must pay to your [suzerain|E] as part of your [obligations|E].\n\nFrom your Suzerain's point of view, these same taxes are instead called [tributary_taxes|E] to distinguish them from any taxes they may owe to their own $game_concept_suzerain$." + game_concept_usurp_title:0 "Usurp Title" + game_concept_usurp:0 "Usurp" + game_concept_usurped:0 "Usurped" + game_concept_usurpation:0 "Usurpation" + game_concept_usurp_title_desc:1 "A [title|E] held by a foreign [ruler|E] can usually be Usurped if more than #V 50%#! of its [de_jure|E] [counties|E] are within your [realm|E]. This process gives the [title|E] to you, which is particularly important for ensuring you are the [rightful_liege|E] of your [vassals|E].\n\nUsurpation is more difficult if the current holder's [faith|E] is hostile to yours; in this case usurpation is only possible if the holder no longer possesses any of its [de_jure|E] [counties|E] inside his Realm." + game_concept_close_family:0 "Close Family" + game_concept_close_family_members:0 "Close Family Members" + game_concept_close_family_member:0 "Close Family Member" + game_concept_close_family_desc:0 "The Close Family of a character includes:\n$BULLET_WITH_TAB$Parents\n$BULLET_WITH_TAB$Grandparents\n$BULLET_WITH_TAB$Children\n$BULLET_WITH_TAB$Grandchildren\n$BULLET_WITH_TAB$Siblings" + game_concept_extended_family:0 "Extended Family" + game_concept_extended_family_members:0 "Extended Family Members" + game_concept_extended_family_desc:0 "The Extended Family of a character includes:\n$BULLET_WITH_TAB$Cousins\n$BULLET_WITH_TAB$Uncles\n$BULLET_WITH_TAB$Aunts\n$BULLET_WITH_TAB$Nephews\n$BULLET_WITH_TAB$Nieces" + game_concept_family:0 "Family" + game_concept_family_members:0 "Family Members" + game_concept_family_member:0 "Family Member" + game_concept_family_desc:0 "A character's family consists of their [close_family_members|E] and [extended_family_members|E]." + game_concept_kinslayer:0 "Kinslayer" + game_concept_kinslayers:0 "Kinslayers" + game_concept_kinslaying:0 "Kinslaying" + game_concept_kinslaying_desc:0 "A Kinslayer is a Character who is known to have slain a [family_member|E]. Some [faiths|E] view kinslaying as [criminal|E].\n\nThe three Kinslaying traits are:\n$BULLET_WITH_TAB$[GetTrait('kinslayer_3').GetName( GetNullCharacter )] — Given to those who kill [close_family|E]\n$BULLET_WITH_TAB$[GetTrait('kinslayer_2').GetName( GetNullCharacter )] — Given to those who kill [extended_family|E]\n$BULLET_WITH_TAB$[GetTrait('kinslayer_1').GetName( GetNullCharacter )] — Given to those who kill a member of their [dynasty|E]" + game_concept_gender_law:0 "Gender Law" + game_concept_gender_laws:0 "Gender Laws" + game_concept_gender_law_desc:0 "Every [ruler|E] has a main Gender Law that determines who their [titles|E] can pass to on [succession|E]. Gender Laws also affect who can command [armies|E] and the eligibility of having multiple [spouses|E] or [concubines|E].\n\nAvailable Gender Laws depend on the 'View on Gender' [doctrine|E] of the [faith|E]." + game_concept_depose:0 "Depose" + game_concept_deposed:0 "Deposed" + game_concept_depose_desc:0 "[rulers|E] can be Deposed as a result of [faction|E] demands or special events. Their [heirs|E] will inherit their [titles|E] even though the old ruler is still alive." + game_concept_virtue:0 "Virtue" + game_concept_virtues:0 "Virtues" + game_concept_virtuous:0 "Virtuous" + game_concept_virtue_desc:1 "Every [faith|E] considers certain [traits|E] to be Virtuous. Characters with these Traits gain [opinion|E] bonuses from all characters who consider those traits Virtuous, even if they do not share the same Faith. In addition, Characters who have Traits that their own Faith considers Virtuous will gain bonus [piety|E] every month.\n\nExactly what traits are considered to be Virtues varies from Faith to Faith, but is typically determined by a combination of that Faith's [core_tenets|E] and the [religion|E] the Faith belongs to." + game_concept_sin:0 "Sin" + game_concept_sins:0 "Sins" + game_concept_sinful:0 "Sinful" + game_concept_sin_desc:1 "Every [faith|E] considers certain [traits|E] to be Sinful. Characters with these Traits incur [opinion|E] penalties from all characters who consider those traits Sinful, even if they do not share the same Faith. In addition, Characters who have Traits that their own Faith considers Sinful will lose [piety|E] every month.\n\nExactly what traits are considered to be Sins varies from Faith to Faith, but is typically determined by a combination of that Faith's [core_tenets|E] and the [religion|E] the Faith belongs to." + game_concept_excommunicate:0 "Excommunicate" + game_concept_excommunicated:0 "Excommunicated" + game_concept_excommunication:0 "Excommunication" + game_concept_excommunication_desc:0 "Characters who are [GetTrait('excommunicated').GetName( GetNullCharacter )] by their [head_of_faith|E] are seen as [criminals|E] by other characters of their [faith|E].\n\n[independent|E] [rulers|E] who have been [GetTrait('excommunicated').GetName( GetNullCharacter )] may have an [excommunication_war|E] declared on them.\n\nExcommunication can be removed either by asking the [head_of_faith|E] for forgiveness or by switching to a different [faith|E]." + game_concept_legalism:0 "Legalism" + game_concept_legalistic:0 "Legalistic" + game_concept_legalism_desc:1 "A [core_tenet|E] emphasizing legal practice and tradition in theology and devoutness. It affects law costs and [vassal|E] [faction|E] membership based on the number of [sins|E] or [virtues|E] a [ruler|E] has." + game_concept_dynasty_prestige_level_0:0 "Base Origins" + game_concept_dynasty_prestige_level_1:0 "Obscure" + game_concept_dynasty_prestige_level_2:0 "Insignificant" + game_concept_dynasty_prestige_level_3:0 "Noteworthy" + game_concept_dynasty_prestige_level_4:0 "Reputable" + game_concept_dynasty_prestige_level_5:0 "Well-known" + game_concept_dynasty_prestige_level_6:0 "Significant" + game_concept_dynasty_prestige_level_7:0 "Famous" + game_concept_dynasty_prestige_level_8:0 "Glorious" + game_concept_dynasty_prestige_level_9:0 "Fabled" + game_concept_dynasty_prestige_level_10:0 "Legendary" + game_concept_dynasty_prestige_level_0_desc:0 "#T $game_concept_dynasty_prestige_level_0$#!\n[GetDynastyPrestigeLevelEffect('(int32)0')][GetDynastyPrestigeLevelNext('(int32)0')]" + game_concept_dynasty_prestige_level_1_desc:0 "#T $game_concept_dynasty_prestige_level_1$#!\n[GetDynastyPrestigeLevelEffect('(int32)1')][GetDynastyPrestigeLevelNext('(int32)1')]" + game_concept_dynasty_prestige_level_2_desc:0 "#T $game_concept_dynasty_prestige_level_2$#!\n[GetDynastyPrestigeLevelEffect('(int32)2')][GetDynastyPrestigeLevelNext('(int32)2')]" + game_concept_dynasty_prestige_level_3_desc:0 "#T $game_concept_dynasty_prestige_level_3$#!\n[GetDynastyPrestigeLevelEffect('(int32)3')][GetDynastyPrestigeLevelNext('(int32)3')]" + game_concept_dynasty_prestige_level_4_desc:0 "#T $game_concept_dynasty_prestige_level_4$#!\n[GetDynastyPrestigeLevelEffect('(int32)4')][GetDynastyPrestigeLevelNext('(int32)4')]" + game_concept_dynasty_prestige_level_5_desc:0 "#T $game_concept_dynasty_prestige_level_5$#!\n[GetDynastyPrestigeLevelEffect('(int32)5')][GetDynastyPrestigeLevelNext('(int32)5')]" + game_concept_dynasty_prestige_level_6_desc:0 "#T $game_concept_dynasty_prestige_level_6$#!\n[GetDynastyPrestigeLevelEffect('(int32)6')][GetDynastyPrestigeLevelNext('(int32)6')]" + game_concept_dynasty_prestige_level_7_desc:0 "#T $game_concept_dynasty_prestige_level_7$#!\n[GetDynastyPrestigeLevelEffect('(int32)7')][GetDynastyPrestigeLevelNext('(int32)7')]" + game_concept_dynasty_prestige_level_8_desc:0 "#T $game_concept_dynasty_prestige_level_8$#!\n[GetDynastyPrestigeLevelEffect('(int32)8')][GetDynastyPrestigeLevelNext('(int32)8')]" + game_concept_dynasty_prestige_level_9_desc:0 "#T $game_concept_dynasty_prestige_level_9$#!\n[GetDynastyPrestigeLevelEffect('(int32)9')][GetDynastyPrestigeLevelNext('(int32)9')]" + game_concept_dynasty_prestige_level_10_desc:0 "#T $game_concept_dynasty_prestige_level_10$#!\n[GetDynastyPrestigeLevelEffect('(int32)10')]\n\nThis is the highest Level of Splendor." + game_concept_excommunication_war:0 "Excommunication War" + game_concept_excommunicated_ruler:0 "Excommunicated Ruler" + game_concept_excommunicated_ruler_desc:1 "In an Excommunication War, the attackers are fighting to remove an [excommunicated|E] ruler from power.\n\nIf victorious, the attackers will gain a large amount of [piety|E] and the approval of their [head_of_faith|E], while the Excommunicated ruler is forced to abdicate to their [heir|E].\n\nHowever, if the Excommunicated ruler wins, their [head_of_faith|E] is forced to revoke their Excommunication, as they have proven their righteousness on the battlefield." + game_concept_holy_site:0 "Holy Site" + game_concept_holy_sites:0 "Holy Sites" + game_concept_holy_site_desc:1 "A $game_concept_holy_site$ is a [county|E] which contains a place of religious significance to a [faith|E]. $game_concept_holy_sites$ held by a Character of the correct Faith will provide an effect to everyone of that Faith, and can also allow the creation of [special_buildings|E] or [holy_orders|E]. Each Faith has a different set of $game_concept_holy_sites$." + game_concept_cultural_acceptance_i:0 "@cultural_acceptance_icon!" + game_concept_cultural_acceptance:0 "Cultural Acceptance" + game_concept_cultural_acceptance_desc:2 "Cultural Acceptance measures how accepting two [cultures|E] are of each other.\n\nPrimarily, it affects how much [opinion|E] is reduced between Characters of different Cultures. It also affects [county_opinion|E], and the cost of forming a [hybrid_culture|E].\n\nCultural Acceptance can change from many actions, most notably [wars|E], granting and revoking [titles|E], and the [accept_culture|E] [councillor_task|E].\n\nOver time, Acceptance will return to the [cultural_acceptance_baseline|E] if exceeded." + game_concept_cultural_acceptance_baseline:0 "Cultural Acceptance Baseline" + game_concept_cultural_acceptance_baseline_desc:1 "[cultural_acceptance|E] has a baseline which it will decay towards if exceeded. The baseline depends on:\n$EFFECT_LIST_BULLET$Shared [heritage|E]\n$EFFECT_LIST_BULLET$Shared [language|E]\n$EFFECT_LIST_BULLET$Shared [faith|E] and [religion|E], especially if [GetFaithDoctrine('doctrine_pluralism_pluralistic').GetBaseName] or [GetReligionFamily('rf_eastern').GetName]\n$EFFECT_LIST_BULLET$Shared [ethos|E] within the same [region|E]" + game_concept_culture_pillar:0 "Cultural Pillar" + game_concept_culture_pillars:0 "Cultural Pillars" + game_concept_culture_pillar_desc:1 "[SelectLocalization( HasDlcFeature( 'reform_culture' ), 'game_concept_culture_pillar_desc_REFORM_DLC', 'game_concept_culture_pillar_desc_NO_REFORM_DLC' )]" + game_concept_culture_pillar_desc_REFORM_DLC:0 "Pillars are qualities that reflect the origins of a [culture|E].\n\nThere are 5 distinct Cultural Pillars:\n$EFFECT_LIST_BULLET$[ethos|E]\n$EFFECT_LIST_BULLET$[heritage|E]\n$EFFECT_LIST_BULLET$[language|E]\n$EFFECT_LIST_BULLET$[martial_custom|E]\n$EFFECT_LIST_BULLET$Aesthetics\n\nOf these, Ethos, Language and Martial Customs can be changed by the [culture_head|E] through [reformation|E]." + game_concept_culture_pillar_desc_NO_REFORM_DLC:0 "Pillars are unchangeable qualities that reflect the origins of a [culture|E].\n\nThere are 5 distinct Cultural Pillars:\n$EFFECT_LIST_BULLET$[ethos|E]\n$EFFECT_LIST_BULLET$[heritage|E]\n$EFFECT_LIST_BULLET$[language|E]\n$EFFECT_LIST_BULLET$[martial_custom|E]\n$EFFECT_LIST_BULLET$Aesthetics" + game_concept_culture_tradition:0 "Cultural Tradition" + game_concept_culture_traditions:0 "Cultural Traditions" + game_concept_tradition:0 "Tradition" + game_concept_traditions:0 "Traditions" + game_concept_culture_tradition_desc:2 "Traditions represent the practices, habits, values, and ethics of individual [cultures|E].\n\nEach Tradition grants some type of bonus or special ability to [characters|E] or [counties|E] of that Culture.\n\n[SelectLocalization( HasDlcFeature( 'reform_culture' ), 'game_concept_culture_tradition_desc_REFORM_DLC', 'game_concept_culture_tradition_desc_NO_REFORM_DLC' )]\n\n$game_concept_cultures$ can have up to 6 Traditions, but most have fewer." + game_concept_culture_tradition_desc_REFORM_DLC:0 "The [culture_head|E] can establish new Traditions or replace existing ones for a Culture through [reformation|E]." + game_concept_culture_tradition_desc_NO_REFORM_DLC:0 "The [culture_head|E] can establish new Traditions for a Culture, at the cost of [prestige|E]." + + game_concept_ethos:0 "Ethos" + game_concept_ethos_desc:2 "The Ethos of a [culture|E] defines its core values, guiding principles, and general attitude of its members towards life in general.\n\nIn addition, the Ethos greatly affects the cost for a [culture_head|E] establishing new [traditions|E].[SelectLocalization( HasDlcFeature( 'reform_culture' ), 'game_concept_ethos_desc_REFORM_DLC', '' )]" + game_concept_ethos_desc_REFORM_DLC:0 "\n\nThe [culture_head|E] can replace their current $game_concept_ethos$ through [reformation|E]." + game_concept_language:0 "Language" + game_concept_languages:0 "Languages" + game_concept_language_desc:3 "A Language is the [culture_pillar|E] that determines what language the general populace of a [culture|E] speaks. $game_concept_cultures$ which speak the same language gain a permanent bonus to their [cultural_acceptance_baseline|E].\n\nA [character|E] can know one or more Languages. Knowing a language cuts the [cultural_acceptance|E] [opinion|E] penalty in half towards Characters and [counties|E] that speak it. It also discourages [faction_independence|E] and [claimant_factions|E].\n\nCharacters can learn additional languages by using the [GetScheme('learn_language').GetTypeName] [scheme|E]. Characters can comfortably learn languages up to their [language_limit|E]." + game_concept_language_limit:1 "Foreign Language Limit" + game_concept_language_limit_desc:1 "You can only comfortably remember a set amount of [languages|E]. If you exceed this limit, you will either have to forget a Language or suffer from [stress|E].\n\nThe Language spoken by your [culture|E] does not count towards this limit.\n\nThe limit is determined by:\n$EFFECT_LIST_BULLET$Everyone has a Base of #V 1#!\n$EFFECT_LIST_BULLET$Every [EmptyScope.ScriptValue('language_learning_divide_value')|V0] points of [learning_i][learning|E] increases it by #V 1#!\n$EFFECT_LIST_BULLET$The [GetPerk('open_minded_perk').GetName(GetNullCharacter)] [perk|E] increases it by #V 2#!\n$EFFECT_LIST_BULLET$The [GetPerk('smooth_operator_perk').GetName(GetNullCharacter)] [perk|E] increases it by #V 1#!\n$EFFECT_LIST_BULLET$The [GetDynastyPerk('ep1_culture_legacy_1').GetName] [dynasty_perk|E] increases it by #V 1#!" + game_concept_heritage:0 "Heritage" + game_concept_heritage_desc:0 "A Heritage is a [culture_pillar|E] that represents the common ancestry of several [cultures|E].\n\nCultures of the same Heritage generally have high [Concept( 'cultural_acceptance', 'Acceptance' )|E] of one another." + game_concept_martial_custom:0 "Martial Custom" + game_concept_martial_custom_desc:1 "Martial Custom is the [culture_pillar|E] that determines what genders can act as [commanders|E] or [knights|E].\n\nSome [traditions|E] and [doctrines|E] can modify these rules for certain [characters|E]." + game_concept_culture_intermingling:0 "Culture Intermingling" + game_concept_culture_intermingling_desc:1 "The more of two [cultures|E] that coexist in the same [realm|E], the more intermingling will happen and the Cultures will increase their [cultural_acceptance|E]." + game_concept_cultural_head:0 "Cultural Head" + game_concept_culture_head:1 "Culture Head" + game_concept_culture_head_desc:3 "A '$game_concept_culture_head$' is the [ruler|E] who has the most influence over their own [culture|E].\n\nSpecifically, the ruler with largest total number of same-culture [counties|E] within their [realm|E] will become the $game_concept_cultural_head$, regardless of where their [domain|E] is or what other-culture Counties they may possess.[AddLocalizationIf( HasDlcFeature( 'khans_of_the_steppe' ), 'game_concept_culture_head_desc_NOMAD_DLC', )]\n\nThe $game_concept_cultural_head$ can influence which [innovation|E] should be prioritized for discovery by setting the [cultural_fascination|E].\n\n[SelectLocalization( HasDlcFeature( 'reform_culture' ), 'game_concept_culture_head_desc_REFORM_DLC', 'game_concept_culture_head_desc_NO_REFORM_DLC' )]" + game_concept_culture_head_desc_NOMAD_DLC: "\n\n[nomadic|E] [rulers|E], however, will choose their $game_concept_cultural_head$ based on who has the largest [herd|E], regardless of rank. In case of settled rulers being part of the same [culture|E] as nomads, the [military_power|E] will be the deciding factor instead." + game_concept_culture_head_desc_REFORM_DLC:0 "The $game_concept_culture_head$ can also [reform|E] parts of their Culture." + game_concept_culture_head_desc_NO_REFORM_DLC:0 "The $game_concept_culture_head$ can also establish new [traditions|E] for their Culture." + game_concept_county_opinion:0 "Popular Opinion" + game_concept_county_opinion_desc:3 "The general populace of each [county|E] has an [opinion|E] of the [character|E] who holds their $game_concept_county$. If the population is unhappy, they might start or join a [peasant_faction|E] or [popular_faction|E], either of which can soon spread throughout an entire [realm|E].\n\nThe easiest way of controlling $game_concept_county_opinion$ is to ensure that the $game_concept_county$ [holder|E] is of the same [culture|E] and [faith|E] as the population.\n\n$game_concept_county_opinion$ from having a different [faith|E] is modified by both the county's [faith_hostility|E] and its [fervor|E], scaling linearly between 0 and 100 $game_concept_fervor$." + game_concept_core_tenet:1 "Tenet" + game_concept_core_tenet_desc:1 "While [doctrines|E] represent issues a [faith|E] must take a stance on, $game_concept_core_tenets$ represent the Faith's unique quirks and rites." + game_concept_core_tenets:1 "Tenets" + game_concept_holy_war:0 "Holy War" + game_concept_holy_wars:0 "Holy Wars" + game_concept_holy_war_holy:0 "Holy" + game_concept_holy_war_desc:4 "A $game_concept_holy_war$ is a special type of [war|E] waged by a [ruler|E] of one [faith|E] against a Ruler of a different Faith.\n\n$game_concept_holy_war$ are usually quite destructive, with the winner of a Holy War typically seizing all [counties|E] in the targeted area for themselves. However, if attacker's Faith is [GetFaithDoctrine('doctrine_pluralism_pluralistic').GetBaseName] or the defender has [vassals|E] of the attacker's own Faith in the targeted area, some or all Vassal Rulers in the targeted area may simply be transfered to the attacker instead.\n\nUnlike other wars, Rulers of the same Faith as the target may choose to join in their defense without the need of an [alliance|E].\n\nHoly Wars may be allowed or restricted depending on the different [religious_families|E]" + game_concept_great_holy_war:0 "Great Holy War" + game_concept_great_holy_wars:0 "Great Holy Wars" + game_concept_great_holy_war_desc:3 "A $game_concept_great_holy_war$ is a special type of [war|E] that only the [head_of_faith|E] of certain [faiths|E] can declare, with the goal of bringing an entire [kingdom|E] under the rule of their Faith.\n\n$game_concept_great_holy_wars$ target all [rulers|E] of another [religion|E] within a chosen [kingdom|E], forcing them to defend together. If victorious, all [titles|E] within the targeted Kingdom will be seized and divided between the attackers.\n\nDepending on its [doctrines|E], a Faith might have access to [directed_great_holy_wars|E], [undirected_great_holy_wars|E] or no $game_concept_great_holy_wars$ at all:\n$EFFECT_LIST_BULLET$The [GetFaithDoctrine('tenet_armed_pilgrimages').GetBaseName], [GetFaithDoctrine('tenet_struggle_submission').GetBaseName], or [GetFaithDoctrine('tenet_warmonger').GetBaseName] [core_tenets|E] are required to access to Great Holy Wars in general\n$EFFECT_LIST_BULLET$Faiths with a [GetFaithDoctrine('doctrine_temporal_head').GetBaseName] Head only have access to Directed Great Holy Wars\n$EFFECT_LIST_BULLET$Faiths with a [GetFaithDoctrine('doctrine_spiritual_head').GetBaseName] Head only have access to Undirected Great Holy Wars\n$EFFECT_LIST_BULLET$Faiths without a Head of Faith cannot declare any Great Holy Wars, even if they would normally be eligible\n\nSome Faiths have special names for their Great Holy Wars such as 'Crusade' or 'Jihad'. These Great Holy Wars differ in name only, and function as any other Great Holy War." + game_concept_directed_great_holy_war:0 "Directed Great Holy War" + game_concept_directed_great_holy_wars:0 "Directed Great Holy Wars" + game_concept_directed_great_holy_war_desc:0 "A $game_concept_directed_great_holy_war$ is declared by a $doctrine_temporal_head_name$ [head_of_faith|E] with the intention of bringing a [kingdom|E] under their own rule.\n\n[rulers|E] of their [faith|E] might choose to assist the Head of Faith, and may get rewards from doing so. Rewards include [piety|E] and potentially having their [dynasty|E] become [landed|E] within the conquered Kingdom.\n\nRulers of the targeted [religion|E] may choose to defend against this war without the need for an [alliance|E]." + game_concept_undirected_great_holy_war:0 "Undirected Great Holy War" + game_concept_undirected_great_holy_wars:0 "Undirected Great Holy Wars" + game_concept_undirected_great_holy_war_desc:0 "An $game_concept_undirected_great_holy_war$ is declared by a $doctrine_spiritual_head_name$ [head_of_faith|E] with the intention of bringing a [kingdom|E] under the rule of their [faith|E].\n\n$game_concept_undirected_great_holy_wars$ are not started immediately, instead they enter a [preparation_phase|E].\n\nBefore and during the war, rulers of the attacking Faith can choose to donate [gold|E] to the [war_chest|E].\n\nIf victorious, the targeted Kingdom will be taken and given to a character of the attacking Faith. Rewards for the attackers include [piety|E] and potentially having their [dynasty|E] become [landed|E] within the conquered Kingdom." + game_concept_preparation_phase:0 "Preparation Phase" + game_concept_preparation_phase_desc:1 "The $game_concept_preparation_phase$ is the time before an [undirected_great_holy_war|E] is declared.\n\nDuring this time, [rulers|E] of attacking [faith|E] can choose to pledge military support to the war and/or donate to the [war_chest|E].\n\nA timer will count down until the $game_concept_preparation_phase$ ends, whereupon the war will be declared.\n\nRulers of the defending [religions|E] can choose to counter-pledge their military support during this time, giving an overview of the strength of the two sides." + game_concept_war_chest:0 "War Chest" + game_concept_war_chest_desc:1 "The $game_concept_war_chest$ is a collection of [gold|E], [piety|E] and [prestige|E]. The contents are primarily used as rewards for successfully winning [undirected_great_holy_wars|E], where they are divided between the attackers based upon their participation in the [war|E].\n\nA certain portion of what's in the $game_concept_war_chest$ is also divided between the attackers as the War is declared.\n\nIf an [undirected_great_holy_war|E] is defeated, the defenders will divide the Piety and Prestige portion of the $game_concept_war_chest$ between them #weak (the Gold is lost.)#!" + game_concept_crusade:0 "Crusade" + game_concept_great_holy_war_undirected:0 "Undirected" + game_concept_crusades:0 "Crusades" + game_concept_jihad:0 "Jihad" + game_concept_great_holy_war_directed:0 "Directed" + game_concept_jihads:0 "Jihads" + game_concept_title_tier:0 "Tier" + game_concept_title_tiers:0 "Tiers" + game_concept_rank:0 "Rank" + game_concept_title_rank:1 "Rank" + game_concept_title_ranks:0 "Ranks" + game_concept_ranks:0 "Ranks" + game_concept_title_tier_desc: "The land equivalent of Title [rank|E], the $game_concept_title_tier$ determines the position of a [title|E] within the hierarchy of the game.\n\nAll Titles have a Tier, which determines the highest possible Tier of [vassals|E] that the [holder|E] can have.\n\n[hegemony|E] > [empire|E] > [kingdom|E] > [duchy|E] > [county|E] > [barony|E]." + game_concept_title_rank_desc:0 "The personal equivalent of Title [title_tier|E], $game_concept_title_rank$ determines the position of a [ruler|E] within the hierarchy of the game.\n\nAll Title Tiers have an associated Rank, which determines the highest possible Rank of [vassals|E] that the [holder|E] can have.\n\n[hegemon|E] > [emperor|E] > [king|E] > [duke|E] > [count|E] > [baron|E]." + game_concept_clergy:0 "Clergy" + game_concept_clergy_desc:1 "[court_chaplains|E], [realm_priests|E], [theocratic|E] Rulers, and anyone with the [GetTrait('devoted').GetName( GetNullCharacter )] trait are considered members of the Clergy.\n\nThe [doctrines|E] of the [faith|E] determine who can be a member of the Clergy, and whether members of the Clergy can marry, inherit land, etc." + game_concept_church_property:0 "Church Holdings" + game_concept_church_holdings:0 "Church Holdings" + game_concept_church_holding:0 "Church Holding" + game_concept_church: "Church" + game_concept_church_property_desc:0 "Church Holdings are [temples|E] under the control of a [realm_priest|E].\n\nIn [faiths|E] with the [GetFaithDoctrine('doctrine_theocracy_lay_clergy').GetBaseName] [doctrine|E], there are no Church Holdings and [temples|E] can be directly held by secular [rulers|E] without penalty." + + game_concept_temple_citadel: "Temple Citadel" + game_concept_temple_citadels: "Temple Citadels" + game_concept_temple_citadel_holding: "Temple Citadel Holding" + game_concept_temple_citadel_holdings: "Temple Citadel Holdings" + game_concept_temple_citadel_holding_desc: "Temple Citadels are a pragmatic mix of the [castle|E] fortification and the [temple|E] worship — it is the standard [holding_type|E] for [mandala|E] [rulers|E]. They provide an even amount of [levies|E], [piety|E] and [taxes|E]." + + game_concept_embarking:0 "Embarking" + game_concept_embarked:0 "Embarked" + game_concept_embarked_i:0 "@embarked_icon!" + game_concept_embark:0 "Embark" + game_concept_embarkation:0 "Embarkation" + game_concept_embarking_desc:1 "An [army|E] will automatically $game_concept_embark$ onto a [fleet|E] when given a move order into a Sea Zone, or when there is no land path to the targeted [barony|E].\n\n$game_concept_embarking$ costs a sum of [gold|E], symbolizing the procurement and construction of ships. For every #V 100#! men Embarking, a cost of #V [GetDefine('NFleet', 'EMBARK_GOLD_COST_PER_HUNDRED')|0]#! [gold_i] is paid." + game_concept_era:0 "Era" + game_concept_eras:0 "Eras" + game_concept_era_desc:1 "[innovations|E] can only be discovered if the [culture|E] has reached the requisite Era. The next Era can only start past a certain year, and if at least #V 50%#! of the Innovations of the previous Era have been discovered.\n\nRulers with [tribal_government|E] and [nomadic_government|E] can only make use of Tribal Era Innovations." + game_concept_innovation:0 "Innovation" + game_concept_innovations:0 "Innovations" + game_concept_innovation_desc:0 "Innovations are technologies and other advances that benefit all characters of a certain [culture|E]. Innovations are grouped into the [eras|E] when they can be discovered.\n\nThrough contact with neighboring Cultures, each Culture is always [spread|E] to one specific Innovation which will be discovered much quicker.\n\nIn addition, the [culture_head|E] can set another (or the same) Innovation as the [cultural_fascination|E] for an additional boost." + game_concept_cultural_fascination:0 "Cultural Fascination" + game_concept_fascination:0 "Fascination" + game_concept_cultural_fascination_desc:0 "Each Culture is always Fascinated by a specific [innovation|E], which greatly increases the speed of discovery at a rate depending on the [skills|E] of the current [culture_head|E]. Each Innovation benefits from a specific Skill.\n\nThe Cultural Head can change the Cultural Fascination freely." + game_concept_cultural_spread: "Cultural Spread" + game_concept_spread: "Spread" + game_concept_cultural_spread_desc: "Contact with other [cultures|E] that have undiscovered [innovations|E] will cause one of those $game_concept_innovations$ to be discovered more quickly. Among eligible [cultures|E] the one with the highest [cultural_acceptance|E] will be selected to Spread [innovation|E] progress." + game_concept_congenital:0 "Congenital" + game_concept_congenital_trait:0 "Congenital Trait" + game_concept_congenital_traits:0 "Congenital Traits" + game_concept_congenital_desc:0 "Certain [traits|E] are Congenital and can be inherited by offspring. Through proper [breeding|E], it is even possible to reinforce some such Traits.\n\nFor example, if both parents are [GetTrait('intellect_good_1').GetName( GetNullCharacter )], there is a chance that their children will get the even better [GetTrait('intellect_good_2').GetName( GetNullCharacter )] Trait.\n\nBase [skills|E] are not congenital." + game_concept_breeding:0 "Breeding" + game_concept_bred:0 "Bred" + game_concept_breed:0 "Breed" + game_concept_breeding_desc:2 "By arranging [marriages|E] between characters with good [congenital|E] [traits|E], it is possible to breed children with the same Traits. Lucky offspring might even get a reinforced version of such Traits.\n\nHowever, the same is true of bad Congenital Traits like [GetTrait('beauty_bad_2').GetName( GetNullCharacter )].\n\nIt might be tempting to arrange marriages between closely related characters in order to produce better Traits in your children, but this also carries the risk of [inbreeding|E] defects." + game_concept_inbreeding:0 "Inbreeding" + game_concept_inbred:0 "Inbred" + game_concept_inbreeding_desc:1 "The [children|E] of two closely related [characters|E] risk being born with a [congenital|E] defect, the most serious of which is the [GetTrait('inbred').GetName( GetNullCharacter )] [trait|E].\n\nThis is rare in the first generation, but successive $game_concept_inbreeding$ increases the risk.\n\nGenerations of $game_concept_inbreeding$ can, however, also result in the beneficial [GetTrait('pure_blooded').GetName( GetNullCharacter )] $game_concept_trait$, which (if both parents share it) makes offspring immune to birth defects due to all flaws having been [bred|E] out of the bloodline." + game_concept_cadet_branching:0 "Cadet Branching" + game_concept_cadet_branch:0 "Cadet Branch" + game_concept_cadet_branches:0 "Cadet Branches" + game_concept_cadet_branching_desc:0 "[dynasties|E] always have a founding [house|E], but in order to become [house_heads|E] themselves, [house|E] members can choose to create their own new House — a Cadet Branch.\n\nMembers of such offshoot Houses are free to do the same, eventually leading to a tree of Houses within the larger Dynasty." + game_concept_house_head_interaction:0 "House Head Interaction" + game_concept_house_head_interaction_desc:0 "Special [interactions|E] that can be made by a [house_head|E] against members of their [house|E]." + game_concept_demand_conversion:0 "Demand Conversion" + game_concept_demanding_conversion:0 "Demanding Conversion" + game_concept_demand_conversion_desc:1 "[rulers|E] who have a subject of another [faith|E] may Demand Conversion to change their subject's Faith to their own. The Ruler's [learning|E] skill and the subject's [opinion|E] of their liege are major factors in determining if the subject accepts the demand, or [Concept('refuse_conversion_crime','refuses')|E] it." + game_concept_damage:0 "Damage" + game_concept_damage_desc:1 "A [soldier|E]'s Damage determines how many [casualties|E] they can inflict upon the enemy during a [battle|E].\n\nA [levy|E] Soldier does [GetDefine('NCombat', 'LEVY_ATTACK')|0] Damage." + game_concept_toughness:0 "Toughness" + game_concept_toughness_desc:1 "A [soldier|E]'s Toughness determines how much [damage|E] they can take in [battle|E] before they become a [casualty|E].\n\nA [levy|E] Soldier has [GetDefine('NCombat', 'LEVY_TOUGHNESS')|0] Toughness." + game_concept_pursuit:0 "Pursuit" + game_concept_pursuit_desc:1 "A victorious [army|E] increases the amount of [casualties|E] they inflict in the [aftermath|E] of a [battle|E] by their $game_concept_army$'s combined $game_concept_pursuit$ value, converting [routed_soldiers|E] into [dead_soldiers|E]." + game_concept_screen:0 "Screen" + game_concept_screen_desc:0 "A defeated [army|E] reduces the amount of [casualties|E] they take in the [aftermath|E] of a [battle|E] by their Army's combined Screen value." + game_concept_siege_progress:0 "Siege Progress" + game_concept_siege_progress_desc:1 "The $game_concept_siege_progress$ indicates how close a [siege|E] is to being completed and how long the $game_concept_siege$ is expected to last. When Progress is full, the [holding|E] will become [occupied|E].\n\nThe amount of $game_concept_siege_progress$ required is affected by [fort_level|E] and the manning of the [garrison|E].\n\nProgress is gained daily and is affected by Siege Events. It can also be increased by having [siege_weapons|E], or an [army|E] that vastly outnumbers the [garrison|E]." + game_concept_siege_weapon:0 "Siege Weapon" + game_concept_siege_weapons:0 "Siege Weapons" + game_concept_siege_weapon_desc:0 "$game_concept_siege_weapons$ are [men_at_arms|E] that focus entirely on [sieges|E].\n\nThey do not have an impact on [battles|E], but will make a $game_concept_siege$ complete much faster by increasing the [siege_progress|E].\n\nHowever, $game_concept_siege_weapons$ are only effective at besieging [holdings|E] up to a certain [fort_level|E]." + game_concept_completely_controls:0 "Completely Controls" + game_concept_completely_control:0 "Completely Control" + game_concept_completely_controlled:0 "Completely Controlled" + + game_concept_complete_control:0 "Complete Control" + game_concept_complete_control_desc:2 "This condition is fulfilled when all [de_jure|E] vassal [titles|E] of the targeted title are held by either the [ruler|E] or by their [vassals|E] and none of its Counties are [occupied|E] by hostile [armies|E]." + game_concept_complete_control_region:0 "Complete Control" + game_concept_completely_controls_region:0 "Completely Controls" + game_concept_completely_control_region:0 "Completely Control" + game_concept_complete_control_region_desc:0 "This condition is fulfilled when all [counties|E] in the targeted [region|E] are held by either the ruler or by their [vassals|E] and none of its Counties are occupied by hostile armies." + game_concept_region:0 "Region" + game_concept_regions:0 "Region" + game_concept_region_desc:0 "A region constitutes a specific geographical area on the map. Unlike [de_jure|E], regions are never subject to change." + game_concept_recently_disembarked:0 "Recently Disembarked" + game_concept_recently_disembarked_desc:0 "An [army|E] will become '$game_concept_recently_disembarked$' whenever it disembarks after having been at sea. This will cause the $game_concept_army$ to suffer from an [advantage|E] penalty in [battles|E] for a certain duration." + game_concept_diplomatic_range:0 "Diplomatic Range" + game_concept_range:0 "Range" + game_concept_diplomatic_range_desc:0 "You can only interact with characters who are within Diplomatic Range. However, neighboring [realms|E] are always in range." + game_concept_mongol_empire:0 "Mongol Empire" + game_concept_mongol_empire_desc:0 "An [empire|E] [title|E] that can be created by a powerful tribal ruler on the Steppes. It enables the [mongol_invasion_casus_belli|E].\n\nThe title is created by taking the #EMP $become_greatest_of_khans_decision$#! [decision|E]." + game_concept_mongol_invasion_casus_belli:0 "Mongol Invasion Casus Belli" + game_concept_mongol_invasion_casus_belli_desc:0 "A powerful [casus_belli|E] available only to the [ruler|E] of the [mongol_empire|E].\n\nIt can target an entire [kingdom|E] [title|E] at once, and allows for rapid expansion across large swathes of land." + game_concept_hungarian_invasion_casus_belli:0 "$HUNGARIAN_INVASION_CB_NAME$ Casus Belli" + game_concept_hungarian_invasion:0 "$HUNGARIAN_INVASION_CB_NAME$" + game_concept_hungarian_invasion_casus_belli_desc:0 "A powerful [casus_belli|E] that may only be used once per campaign, total, to conquer all territories held by the target within Pannonia.\n\nOn victory, all $mogyer_collective_noun$ in the attacker's [realm|E] will move with them to Pannonia, [counties|E] #EMP and#! [vassals|E], displacing $avar$ $game_concept_counties$. Other vassals outside of Pannonia are abandoned, while $game_concept_counties$ formerly occupied or held by $mogyer_collective_noun$ are left to local petty warlords and rival steppe tribes." + game_concept_pax_romana_invasion_casus_belli: "Pax Romana Casus Belli" + game_concept_pax_romana_invasion_casus_belli_desc: "A powerful [casus_belli|E] available only to the [ruler|E] of the Roman Empire for the purpose of inaugurating a new era of [Glossary( 'Pax Romana', 'PAX_ROMANA_GLOSS' )].\n\nIt can target an entire [empire|E] [title|E] at once, and allows for rapid expansion across large swathes of land." + game_concept_eastern_roman_empire: "Eastern Roman Empire" + game_concept_eastern_roman_empire_desc: "An [empire|E] [title|E] that can be created by the holder of the Roman Empire.\n\nThe title is created by taking the #EMP $split_roman_empire_decision$#! [decision|E]." + game_concept_imperial_expedition_cb: "Imperial Expedition" + game_concept_imperial_expedition_cb_expedition: "Expedition" + game_concept_imperial_expedition_cb_desc: "An extremely powerful [casus_belli|E] usable by [co_emperors|E] in $game_concept_duumvirates$.\n\nAn $game_concept_imperial_expedition_cb$ may be launched against any [realm|E] that either borders the [empire|E] or holds lands that [de_jure|E] belong to the senior emperor.\n\nIt can (and generally will) target #BER all#! [duchies|E] that de facto border the $game_concept_empire$ or $game_concept_de_jure$ belong to it.\n\nFurther, every [governor|E] bordering the defender will be forcibly called to [war|E] as an [ally|E]. Remote $game_concept_governors$ with military [province_administrations|E] may optionally join the conflict.\n\nIf the $game_concept_war$ is won, the $game_concept_co_emperor$ must decide between:\n$EFFECT_LIST_BULLET$Turning the conquered lands over to their senior emperor for [influence|E] and [opinion|E]\n$EFFECT_LIST_BULLET$Keeping the territories for themselves (costing $game_concept_opinion$)\n$EFFECT_LIST_BULLET$Handing over most of them whilst keeping the best [duchy|E] (slightly reduced [influence|E] and [opinion|E])\n$EFFECT_LIST_BULLET$Appointing local interim $game_concept_governors$ who will be indebted to them\n\n#WEAK All rewards scale to the land taken: a large conquest earns #EMP significantly#! more $game_concept_influence$ than a small border war.#!" + game_concept_knight:0 "Knight" + game_concept_knights:0 "Knights" + game_concept_knight_i:0 "@knight_icon!" + game_concept_knights_possessive: "Knight's" + game_concept_knight_desc:4 "A $game_concept_knight$ is a [vassal|E], [courtier|E], or [follower|E] that fights directly in your [army|E].\n\nDuring [battles|E], $game_concept_knights$ use their [prowess_skill|E] to fight more effectively. A high $game_concept_prowess$ means that they will be able to inflict more damage on the enemy, and are more likely to survive or even emerge from $game_concept_battle$ unscathed.\n\n[SelectLocalization( HasDlcFeature( 'tours_and_tournaments' ), 'game_concept_knight_desc_TOTO_DLC', 'game_concept_knight_desc_NO_TOTO_DLC' )][SelectLocalization( HasDlcFeature( 'accolades' ), 'game_concept_knight_desc_ACCOLADE_DLC', '' )]#weak Knights can be known by different names depending on [culture] or [faith]. For example, $knight_champion_no_tooltip_plural$, $knight_faris_no_tooltip_plural$ or $knight_baghatur_no_tooltip_plural$.\n\nKnights represent both the character and their retinue of troops.#!" + game_concept_knight_desc_TOTO_DLC:0 "You gain [prestige|E] each time one of your $game_concept_knights$ successfully [contest_qualifies|E] for or wins a [GetActivityType( 'activity_tournament' ).GetName] [contest|E].\n\n" + game_concept_knight_desc_NO_TOTO_DLC:0 "" + game_concept_knight_desc_ACCOLADE_DLC:0 "Knights that are given an [accolade|E] become [acclaimed_knights|E].\n\n" + + + game_concept_knight_effectiveness:0 "Knight Effectiveness" + game_concept_knight_effectiveness_desc:0 "A [ruler|E]'s Knight Effectiveness determines how well their [knights|E] fight in [battle|E].\n\nAt 100%, Knights fight as normal, but at 200% they fight as if their [prowess|E] was doubled." + game_concept_short_reign:0 "Short Reign" + game_concept_short_reign_desc:0 "'Short Reign' is a decaying [opinion|E] penalty that all characters in a [realm|E] get with a new [liege|E].\n\nIn a similar way, subjects get an increasing [long_reign|E] Opinion bonus with Lieges who have ruled over them for a long time." + game_concept_long_reign:0 "Long Reign" + game_concept_long_reign_desc:0 "'Long Reign' is an increasing [opinion|E] bonus that all characters in a [realm|E] get with a [liege|E] who has ruled over them for a long time.\n\nSimilarly, subjects have a decaying [short_reign|E] Opinion penalty with new Lieges." + game_concept_troop_quality:0 "Quality" + game_concept_troop_quality_desc:0 "$game_concept_troop_quality$ gauges the power of an [army|E] relative to its number of [soldiers|E].\n\nAn $game_concept_army$ that only contains [knights|E] and [men_at_arms|E] will be of high $game_concept_troop_quality$ while an $game_concept_army$ containing a large number of [levies|E] will be of lower $game_concept_troop_quality$.\n\nThis means that a smaller $game_concept_army$ with a high $game_concept_troop_quality$ will punch well above their weight — carefully consider both the amount of Soldiers #Emphasis and#! $game_concept_troop_quality$ before engaging the enemy!" + game_concept_religious_family:0 "Religious Family" + game_concept_religious_families:0 "Religious Families" + game_concept_religious_family_desc:0 "A $game_concept_religious_family$ is a group of [religions|E]. The $game_concept_religious_family$ affects how the various Religions, and [faiths|E] therein, view each other.\n\nThe [GetReligionFamily('rf_abrahamic').GetName] Family condones [holy_wars|E] against everyone #weak (including other Abrahamics)#!. Religions are susceptible to [heresy|E].\n\nThe [GetReligionFamily('rf_eastern').GetName] Family only condones Holy Wars against other Religious Families.\n\nThe [GetReligionFamily('rf_pagan').GetName] Family condones Holy Wars against everyone, but Faiths within the Religions must be reformed to access them." + game_concept_debt: "Debt" + game_concept_debt_desc: "Debt is the state of having a negative amount of [gold_i][gold|E]. This typically happens when a [ruler|E] at war hires [mercenaries|E] without having enough Gold to cover the full cost, or when they are at war for too long.\n\n While in Debt you cannot declare new [wars|E], your [men_at_arms|E] do not reinforce, and your enemies will have an [advantage|E] over you in battle. The deeper into debt you fall, the more penalties you will get — fewer [levies|E], reduced [county_opinion|E], and your [vassals|E] will like you less.\n\nIn addition to this, various other minor destabilizing events may occur, such as gaining [county_corruption|E] in your [domain|E] [counties|E]. \n\n#help It is generally a good idea to strike your enemies while they are in Debt, as they will fight with reduced [advantage|E]!#!" + game_concept_treasury_debt: "Treasury Debt" + game_concept_treasury_debt_desc: "Treasury Debt is the state of having a negative amount of [treasury_i][treasury|E]. This typically happens when a [governor|E] at war hires [mercenaries|E] without having enough Treasury to cover the full cost, when they are at war for too long, or if they pay too much in [Concept( 'treasury_budgeting', 'Salaries' )|E] for what they collect from their [vassals|E].\n\n While in Debt you cannot declare new [wars|E], your [men_at_arms|E] that depend on Treasury do not reinforce, and your enemies will have an [advantage|E] over you in battle. The deeper into debt you fall, the more penalties you will get — fewer [levies|E], reduced [county_opinion|E], and your [vassals|E] will like you less.\n\nIn addition to this, various other minor destabilizing events may occur, such as gaining [county_corruption|E] in your [domain|E] [counties|E]. \n\n#help It is generally a good idea to strike your enemies while they are in Debt, as they will fight with reduced [advantage|E]!#!" + game_concept_beneficiary:0 "Beneficiary" + game_concept_beneficiaries:0 "Beneficiaries" + game_concept_beneficiary_desc:1 "Every participant in a [great_holy_war|E] can select a $game_concept_beneficiary$ from their [dynasty|E]. Upon victory, the $game_concept_beneficiary$ will receive lands in the targeted realm proportional to the [war_contribution|E] of their patron ruler.\n\nThe largest contributor can force their Beneficiary to receive the main title being fought over." + game_concept_papal_recipient:0 "Favored Candidate" + game_concept_papal_recipient_desc:1 "If the main target of the [great_holy_war|E] is already held or claimed by a member of the aggressor faith, they will be considered the rightful recipient of the title being fought over, unless the main [Concept( 'war_contribution', 'Contributor' )|E] decides to give precedence to their [beneficiary|E]." + game_concept_end_date:0 "End Date" + game_concept_end_date_desc:0 "1453 AD is the End Date, and upon reaching it the game will end." + + game_concept_realm_size:0 "Realm Size" + game_concept_realm_size_desc:1 "A character's $game_concept_realm_size$ is the number of [counties|E] owned by them and their [vassals|E]." + game_concept_voter_strength:0 "Voter Strength" + game_concept_voting_strength:0 "Voting Strength" + game_concept_voting_power:0 "Voting Power" + game_concept_voter_strength_desc:0 "Voter Strength represents the amount of influence that an Elector carries when voting in an elective [succession_law|E]. This value usually increases depending on a ruler's [rank|E], but other factors may come into play depending on the [titlepossessive|E] law." + game_concept_stress_level:0 "Stress Level" + game_concept_stress_levels:0 "Stress Levels" + game_concept_stressed:0 "Stressed" + game_concept_stress_level_desc:1 "Every 100 [stress|E] a character accumulates also causes them to gain a Stress Level. Stress Levels range from 0 to 3, with each level imposing increasing penalties to a character's [fertility|E] and [health|E].\n\nIn addition, as long as a character has at least 1 Stress Level, they are vulnerable to [mental_breaks|E]." + game_concept_mental_break:0 "Mental Break" + game_concept_mental_breaks:0 "Mental Breaks" + game_concept_mental_break_desc:0 "When [stress|e] overwhelms a character they will experience a Mental Break — a personal crisis in which they feel that they must do something to lower their Stress, no matter the cost.\n\nCharacters suffering from a Mental Break will have several ways that they can deal with the situation, though many of them will have negative consequences.\n\nAt low [stress_levels|E] these consequences are minor and easily managed. As Stress Level increases however, so do these consequences, eventually leading to insanity and even death." + stress_icon_tooltip:0 "$game_concept_mental_break_desc$" + + game_concept_clergy_opinion:0 "Clergy Opinion" + game_concept_clergy_opinion_desc:0 "This type of [opinion|E] only affects [clergy|E] of your own [faith|E]." + + game_concept_secular_opinion:0 "Secular Opinion" + game_concept_secular_opinion_desc:0 "This type of [opinion|E] affects all characters that are #emphasis not#! [clergy|E]." + + game_concept_title_allegiance:0 "Title Allegiance" + game_concept_title_allegiance_desc:0 "[vassals|E] can owe Allegiance to a specific [title|E] rather than the person of their [liege|E]. This can only happen if the Title has its own [succession_law|E]. On [succession|E], such Vassals will become vassals of the new Title [holder|E]." + game_concept_nominate:0 "Nominate" + game_concept_nominate_heir:0 "Nominate Heir" + game_concept_nomination:0 "Nomination" + game_concept_nominations:0 "Nominations" + game_concept_nominate_desc:1 "Under Elective [succession_laws|E], each [elector|E] can Nominate their preferred [title_heir|E]. Valid candidates and Elector voting preferences differ depending on the specific Law." + game_concept_elector:0 "Elector" + game_concept_electors:0 "Electors" + game_concept_elector_desc:1 "Electors are the characters who get to vote on their preferred [title_heir|E] under Elective [succession_laws|E]. The specific Law determines who is considered an Elector." + game_concept_attraction:0 "Attraction" + game_concept_attracted:0 "Attracted" + game_concept_attraction_desc:0 "Attraction is a type of [opinion|E] that only affects characters whose [sexuality|E] matches your gender.\n\nFor example, a [homosexual|E] man would experience this Opinion towards other men, an [asexual|E] character would not experience it towards anyone, and a [heterosexual|E] woman would experience it towards men.\n\nThis type of Opinion stops having an effect for women above [GetDefine('NCharacter', 'FEMALE_ATTRACTION_CUTOFF_AGE')] years of age, and for men above [GetDefine('NCharacter', 'MALE_ATTRACTION_CUTOFF_AGE')] years of age." + game_concept_sexuality:1 "Sexual Orientation" + game_concept_sexuality_desc:1 "A character's sexual orientation determines which other characters they are potentially [attracted|E] to.\n\nSexual orientation has no impact on who they can [marry|E], but may reduce the [fertility|E] of a wedded couple if either spouse fails to match the other's preference.\n\nThe limited sexual orientations modeled in #EMP Crusader Kings III#! include:\n$EFFECT_LIST_BULLET$[heterosexual|E]\n$EFFECT_LIST_BULLET$[homosexual|E]\n$EFFECT_LIST_BULLET$[bisexual|E]\n$EFFECT_LIST_BULLET$[asexual|E]" + sexuality_ho:0 "[homosexual|E]" + game_concept_homosexual:0 "Homosexual" + game_concept_homosexual_desc:2 "In #EMP Crusader Kings III#!, this character is attracted to characters of their own gender." + sexuality_he:0 "[heterosexual|E]" + game_concept_heterosexual:0 "Heterosexual" + game_concept_heterosexual_desc:2 "In #EMP Crusader Kings III#!, this character is attracted to characters of the opposite gender." + sexuality_bi:0 "[bisexual|E]" + game_concept_bisexual:0 "Bisexual" + game_concept_bisexual_desc:2 "In #EMP Crusader Kings III#!, this character is attracted to characters of either the same or opposite gender." + sexuality_as:0 "[asexual|E]" + game_concept_asexual:0 "Asexual" + game_concept_asexual_desc:2 "In #EMP Crusader Kings III#!, this character experiences little or no attraction to other characters regardless of gender." + sexuality_none:0 "#V None#!" + game_concept_title_succession: "Title Succession" + game_concept_title_specific_succession: "Title-Specific" + game_concept_title_succession_desc: "A [title|E] can have its own [succession_law|E], which is different from that of the [holder|E]'s [realm|E].\n\n[kingdoms|E] and [empires|E] are most likely to have a traditional $game_concept_title_succession$.\n\nThe $game_concept_holder$ of the $game_concept_title$ can add or remove Title-Specific Succession Laws, usually at the cost of [prestige|E]\n\n[domiciles|E] also have their own $game_concept_title_succession$, which cannot be removed." + + game_concept_designated_heir:1 "Designated Heir" + game_concept_designated_heir_desc:3 "The $game_concept_designated_heir$ takes priority when deciding who becomes the [realm_heir|E]." + game_concept_incest:0 "Incest" + game_concept_incestuous:0 "Incestuous" + game_concept_incest_desc:0 "Incest refers to sexual activity between close relatives.\nWhat relations are incestuous is determined by the $doctrine_consanguinity_name$ [doctrine|E] of a character's [faith|E]." + + game_concept_relation:0 "Special Relation" + game_concept_relations:0 "Special Relations" + game_concept_relationship:0 "Special Relationship" + game_concept_relation_desc:3 "$game_concept_relations$ are relationships a character has which are not bound by family or [vassalage|E]. These $game_concept_relations$ fall into several different categories, may carry [character_modifiers|E] for the character involved, and determine what things can happen between them.\n\nStandard Relations:\n$EFFECT_LIST_BULLET$ [friend|E]\n$EFFECT_LIST_BULLET$ [lover|E]\n$EFFECT_LIST_BULLET$ [rival|E]\n$EFFECT_LIST_BULLET$ [guardian|E]\n$EFFECT_LIST_BULLET$ [ward|E]\n$EFFECT_LIST_BULLET$ [mentor|E]\n$EFFECT_LIST_BULLET$ [student|E]\n$EFFECT_LIST_BULLET$ [elder|E]\n$EFFECT_LIST_BULLET$ [disciple|E]\n\nUpgraded Relations:\n$EFFECT_LIST_BULLET$ [best_friend|E]\n$EFFECT_LIST_BULLET$ [soulmate|E]\n$EFFECT_LIST_BULLET$ [nemesis|E]\n\nChildhood Relations:\n$EFFECT_LIST_BULLET$ [bully|E]\n$EFFECT_LIST_BULLET$ [victim|E]\n$EFFECT_LIST_BULLET$ [crush|E]" + + game_concept_lover:0 "Lover" + game_concept_lovers:0 "Lovers" + game_concept_lover_possessive:0 "Lover's" + game_concept_lovers_possessive:0 "Lovers'" + game_concept_lover_desc:3 "A $game_concept_lover$ is a $game_concept_relation$ indicating an ongoing amorous and sexual association between two [characters|E].\n\nAs they often take place outside the bonds of [marriage|E] or [concubinage|E], most $game_concept_lover$ $game_concept_relations$ begin as [secrets|E].\n\nIf a man and a woman are $game_concept_lovers$, the woman may become pregnant with the man's child. If they are not $game_concept_married$ (and one is not the $game_concept_concubine$ of the other), the child will be a [bastard|E], secret or otherwise.\n\n$game_concept_lovers$ who are deeply loyal and affectionate might become [soulmates|E]." + game_concept_soulmate:0 "Soulmate" + game_concept_soulmates:0 "Soulmates" + game_concept_soulmate_possessive:0 "Soulmate's" + game_concept_soulmates_possessive:0 "Soulmates'" + game_concept_soulmate_desc:0 "A $game_concept_soulmate$ is a $game_concept_relation$ indicating a deep, profound, romantic love. It is a stronger $game_concept_relation$ than a [lover|E]. A $game_concept_character$ can only have one $game_concept_soulmate$." + + game_concept_friend:0 "Friend" + game_concept_friends:0 "Friends" + game_concept_friendships: "Friendships" + game_concept_friend_possessive:0 "Friend's" + game_concept_friends_possessive:0 "Friends'" + game_concept_friendship:0 "Friendship" + game_concept_friend_desc:2 "A $game_concept_friend$ is a $game_concept_relation$ indicating close friendship and support, and can be had by both [children|E] and [adults|E].\n\n$game_concept_friends$ with a deep connection might become [best_friends|E]." + + game_concept_best_friend:0 "Best Friend" + game_concept_best_friends:0 "Best Friends" + game_concept_best_friend_possessive:0 "Best Friend's" + game_concept_best_friends_possessive:0 "Best Friends'" + game_concept_best_friend_desc:2 "A $game_concept_best_friend$ is a $game_concept_relation$ indicating lifelong dedication and support. It is a stronger $game_concept_relation$ than a [friend|E]. A [character|E] can only have one $game_concept_best_friend$." + + game_concept_rival:0 "Rival" + game_concept_rivals:0 "Rivals" + game_concept_rivalries:0 "Rivalries" + game_concept_rivalry:0 "Rivalry" + game_concept_rival_possessive:0 "Rival's" + game_concept_rivals_possessive:0 "Rivals'" + game_concept_rival_desc:2 "A $game_concept_rival$ is a $game_concept_relation$ indicating life-long resentment, if not hatred.\n\n$game_concept_rivals$ who truly despise each other might become [nemeses|E]." + + game_concept_nemesis:0 "Nemesis" + game_concept_nemeses:0 "Nemeses" + game_concept_nemesis_possessive:0 "Nemesis'" + game_concept_nemeses_possessive:0 "Nemeses'" + game_concept_nemesis_desc:1 "A $game_concept_nemesis$ is a $game_concept_relation$ indicating utter (and mutual) contempt and hatred. It is a stronger $game_concept_relation$ than a [rival|E]. A character can only have one $game_concept_nemesis$." + + game_concept_grudge: "Grudge" + game_concept_grudges: "Grudges" + game_concept_grudge_possessive: "Grudge's" + game_concept_grudges_possessive: "Grudges'" + game_concept_grudge_desc: "A $game_concept_grudge$ is a $game_concept_relation$ indicating unilateral hatred and resentment. The target of a grudge does not return the feelings and may not even know.\n\n#WEAK $game_concept_grudges$ are most commonly formed when one [character|E] does something horrible to another without even realizing they exist — for instance, a king leaving a peasant in their [dungeon|E] for forty years.#!" + + game_concept_guardian:0 "Guardian" + game_concept_guardians:0 "Guardians" + game_concept_guardian_possessive:0 "Guardian's" + game_concept_guardians_possessive:0 "Guardians'" + game_concept_guardianship:1 "Guardianship" + game_concept_guardian_desc:2 "A $game_concept_guardian$ is a [character|E] assigned to [educate|E] a [child|E] (called their [ward|E]).\n\n$game_concept_guardians$ tend to pass on their [personality_traits|E] to their $game_concept_wards$, as well as their [culture|E] and/or [faith|E], if so specified in the $game_concept_education_focus$.\n\nThe $game_concept_guardian$ can reside in a different [court|E]. Entrusting a [close_family_member|E] to the mercy of another [ruler|E] in this way will increase their [opinion|E] of you." + + game_concept_ward:0 "Ward" + game_concept_wards:0 "Wards" + game_concept_ward_possessive:0 "Ward's" + game_concept_wards_possessive:0 "Wards'" + game_concept_ward_desc:0 "A $game_concept_ward$ is a [child|E] being [educated|E] by a [guardian|E]. Each $game_concept_guardian$ can handle up to two $game_concept_wards$." + + game_concept_mentor:0 "Mentor" + game_concept_mentors:0 "Mentors" + game_concept_mentor_possessive:0 "Mentor's" + game_concept_mentors_possessive:0 "Mentors'" + game_concept_mentor_desc:0 "$game_concept_mentors$ are [characters|E] that help to improve the [skills|E] of their [student|E]. They can be gained through events when your [lifestyle|E] [focus|E] is set to a particular $game_concept_skill$." + + game_concept_student:0 "Student" + game_concept_students:0 "Students" + game_concept_student_possessive:0 "Student's" + game_concept_students_possessive:0 "Students'" + game_concept_student_desc:0 "$game_concept_students$ are [characters|E] benefiting from the advice of a [mentor|E], who is helping them to advance one of their [skills|E]. $game_concept_mentors$ are gained through events when your [lifestyle|E] [focus|E] is set to a $game_concept_skill$ they excel at." + + game_concept_bully:0 "Bully" + game_concept_bullies:0 "Bullies" + game_concept_bully_possessive:0 "Bully's" + game_concept_bullies_possessive:0 "Bullies'" + game_concept_bully_desc:0 "A $game_concept_bully$ is a cruel [child|E] who picks on another $game_concept_child$ (their [victim|E]), for fun, profit, or just boredom. Upon reaching [adulthood|E], a $game_concept_bully$ may become a [rival|E], or they may grow out of their childish hate." + + game_concept_victim:0 "Victim" + game_concept_victims:0 "Victims" + game_concept_victim_possessive:0 "Victim's" + game_concept_victims_possessive:0 "Victims'" + game_concept_victim_desc:0 "A $game_concept_victim$ is a [child|E] who is currently being harassed by another $game_concept_child$, often for reasons unclear to anyone but their [bully|E]. Upon reaching [adulthood|E], they may become [rivals|E] with their $game_concept_bully$, or learn to put the struggles of youth behind them." + + game_concept_crush:0 "Crush" + game_concept_crushes:0 "Crushes" + game_concept_crush_possessive:0 "Crush's" + game_concept_crushes_possessive:0 "Crushes'" + game_concept_crush_desc:0 "A $game_concept_crush$ is another [child|E] that this $game_concept_child$ is developing their first (rather painfully-awkward) feelings for. Upon reaching [adulthood|E], if the $game_concept_crush$ is mutual, it may blossom into becoming [lovers|E], or the [character|E] may move on with their life." + + game_concept_blood_brother: "Blood Brother" + game_concept_blood_brothers: "Blood Brothers" + game_concept_blood_brother_possessive: "Best Friend's" + game_concept_blood_brothers_possessive: "Best Friends'" + game_concept_blood_brother_desc: "A $game_concept_blood_brother$ is a special form of [friend|E] and [ally|E]. [characters|E] may only have one $game_concept_blood_brother$: this $game_concept_blood_brother$ becomes a symbolic member of their family (and, thus, must not already be [family|E]). If a $game_concept_blood_brother$'s call to [war|E] is refused, the [relation|E] will break and the two will become [rivals|E].\n\nBlood Brothers, their [children|E], and their Primary Spouses have increased mutual [opinion|E] and may negotiate [alliances|E] with one another.\n\nBlood Brotherhood is available through [nomadic_government|E], the [GetTrait('nomadic_philosophy').GetName( GetNullCharacter )] [trait|E], or via [tradition|E]." + + game_concept_modifier:0 "Modifier" + game_concept_modifiers:0 "Modifiers" + game_concept_modifier_desc:0 "A $game_concept_modifier$ is an effect that changes a value over a longer period of time. It may for example change the value of a character's [skills|E], or the [success_chance|E] of a [scheme|E].\n\nModifiers typically appear for Characters, Schemes or [counties|E]." + + game_concept_character_modifier:0 "Character Modifier" + game_concept_character_modifiers:0 "Character Modifiers" + game_concept_character_modifier_desc:2 "[modifiers|E] held by a Character, affecting their personality, [skills|E], and even [income|E]. Unlike [traits|E], $game_concept_character_modifiers$ tend to represent temporary effects." + + game_concept_critical_failure:0 "Critical Failure" + game_concept_critically_fail:0 "Critically Fail" + game_concept_critical_failure_desc:0 "Some [schemes|E] have the possibility of $game_concept_critical_failure$ during execution.\n\nExact outcomes vary, but include the $game_concept_scheme$ backfiring on the [scheme_owner_owner|E], or preventing them from attempting the same $game_concept_scheme$ against the same [scheme_target_target|E] for some time." + + game_concept_espionage:1 "$task_find_secrets$" + game_concept_espionage_desc:1 "$game_concept_espionage$ is a [councillor_task|E] performed by the [spymaster|E].\n\nIt targets a [ruler|E]'s [court|E], and tries to uncover [secrets|E] about the characters there." + + game_concept_disrupt_schemes:0 "$task_disrupt_schemes$" + game_concept_disrupt_schemes_desc:1 "$game_concept_disrupt_schemes$ is a [councillor_task|E] performed by the [spymaster|E].\n\nIt increases a [ruler|E]'s [scheme_discovery_chance|E] and slows down the hostile $game_concept_spymaster$ actions of other $game_concept_ruler$s, such as [espionage|E]." + + game_concept_increase_control:0 "$task_increase_control$" + game_concept_increase_control_desc:0 "$game_concept_increase_control$ is a [councillor_task|E] performed by the [marshal|E].\n\nIt targets a [county|E], where it increases [control|E], and removes [county_corruption|E] over time." + + game_concept_manage_guards:0 "$task_manage_guards$" + game_concept_manage_guards_desc:0 "$game_concept_increase_control$ is a [councillor_task|E] performed by the [marshal|E].\n\nIt increases [knight_effectiveness|E] and lowers [hostile_scheme|E] [success_chance|E] against the councillor's [liege|E]." + + game_concept_collect_taxes:0 "$task_collect_taxes$" + game_concept_collect_taxes_desc:0 "$game_concept_collect_taxes$ is a [councillor_task|E] performed by the [steward|E].\n\nIt increases all taxes in a character's personal [domain|E]." + + game_concept_promote_culture:0 "$task_promote_culture$" + game_concept_promote_culture_desc:1 "$game_concept_promote_culture$ is a [councillor_task|E] performed by the [steward|E].\n\nIt changes the [culture|E] of a [county|E] to match its ruler's $game_concept_culture$." + + game_concept_accept_culture:0 "$task_accept_culture$" + game_concept_promoting_cultural_acceptance:0 "Promoting Acceptance" + game_concept_accept_culture_desc:0 "$game_concept_accept_culture$ is a [councillor_task|E] performed by the [steward|E].\n\nIt increases the [cultural_acceptance|E] between the target [culture|E] and the [rulerpossessive|E] $game_concept_culture$." + + game_concept_theocratic_vassal:0 "Theocratic Vassal" + game_concept_theocratic_vassals:0 "Theocratic Vassals" + game_concept_theocratic_vassal_desc:0 "Vassals who have the [theocratic_government|E] form.\n\nHow they function is determined by a [faithpossessive|E] [doctrines|E]." + + game_concept_ducal_conquest_casus_belli:0 "Ducal Conquest Casus Belli" + game_concept_ducal_conquest:0 "Ducal Conquest" + game_concept_ducal_conquest_casus_belli_desc:0 "A [casus_belli|E] that allows the seizure of [counties|E] required to create an [uncreated_title|E] of [duchy|E] rank." + + game_concept_vassalize_casus_belli:0 "Forced Vassalization Casus Belli" + game_concept_vassalization_casus_belli:0 "Forced Vassalization" + game_concept_vassalized_casus_belli:0 "Forcefully Vassalized" + game_concept_vassalize_casus_belli_desc:3 "A [casus_belli|E] allowing for the forceful [vassalization|E] of a neighboring independent [ruler|E] of lower rank. Unlocked by the [GetPerk( 'forced_vassalage_perk' ).GetName( GetNullCharacter )] [perk|E].\n\nYou can Vassalize any Ruler that does not have more than #V [EmptyScope.ScriptValue('vassalize_default_size')|0]#! [counties|E] in their [realm|E].\n\nThis limit is increased by #P +[EmptyScope.ScriptValue('vassalize_growth_per_innovation')|0]#! for each of the following innovations:\n$EFFECT_LIST_BULLET$#V $innovation_casus_belli$#!\n$EFFECT_LIST_BULLET$#V $innovation_chronicle_writing$#!\n$EFFECT_LIST_BULLET$#V $innovation_divine_right$#!\n$EFFECT_LIST_BULLET$#V $innovation_rightful_ownership$#!" + + game_concept_title_creation:0 "Title Creation" + game_concept_create:0 "Create" + game_concept_created:0 "Created" + game_concept_create_title:0 "Create Title" + game_concept_created_title:0 "Created Title" + game_concept_uncreated_title:0 "Uncreated Title" + game_concept_title_creation_desc:2 "A [ruler|E] who controls the majority of a not-yet-created [titlepossessive|E] [de_jure|E] land will be able to create its associated Title. Creating a Title costs [gold|E], but gives [prestige|E].\n\nOnly [duchy|E], [kingdom|E] or [empire|E] tier Titles can be created.\n\nThe Issues widget contains a list of all Titles which you can currently create." + + game_concept_foreign_affairs:0 "$task_foreign_affairs$" + game_concept_foreign_affairs_desc:0 "A [councillor_task|E] performed by the [chancellor|E].\nFor an [independent|E] [ruler|E], it increases the opinion other independent rulers have of them. For a vassal, it increases the opinion that other vassals of the same [liege|E] have of them." + + game_concept_domestic_affairs:0 "$task_domestic_affairs$" + game_concept_domestic_affairs_desc:0 "A [councillor_task|E] performed by the [chancellor|E], which increases the opinion [vassals|E] in the [realm|E] have towards the [liege|E]." + + game_concept_bestow_royal_favor:0 "$task_bestow_royal_favor$" + game_concept_bestow_royal_favor_desc:0 "A [councillor_task|E] performed by the [chancellor|E], which increases the opinion a chosen [vassals|E] in the [realm|E] has towards their [liege|E]." + + game_concept_integrate_title: "$task_integrate_title$" + game_concept_integrate_title_desc: "A [councillor_task|E] performed by the [chancellor|E], which accelerates the [de_jure_drift|E] process of a [title|E]." + + game_concept_fabricate_claim:0 "$task_fabricate_claim$" + game_concept_fabricate_claim_short:0 "Fabricate Claim" + game_concept_fabricated_claims_short:0 "Fabricated Claims" + game_concept_fabricating_claims:0 "Fabricating Claims" + game_concept_fabricate_claim_desc:0 "A [councillor_task|E] performed by the [court_chaplain|E].\nTargets a [county|E], and builds progress over time. At 100% Progress, a [claim|E] can be fabricated for a cost of [gold|E]." + + game_concept_religious_relations:0 "$task_religious_relations$" + game_concept_religious_relations_desc:0 "A [councillor_task|E] performed by the [court_chaplain|E].\nIncreases same-[faith|E] [theocratic|E] rulers' opinion of the character, and increases monthly [piety|E] gain." + + game_concept_interaction:0 "Interaction" + game_concept_interactions:0 "Interactions" + game_concept_interacting: "Interacting" + game_concept_character_interaction:0 "Character Interaction" + game_concept_interaction_desc:0 "Actions taken by one character towards another. They can have a wide range of purposes and effects.\n\nSome interactions require the target character's approval, while some can be performed without it.\n\nUsually they are accessed by right-clicking on a character to access the Interaction Menu for the target character, but sometimes they are available through special interfaces." + + game_concept_offer_vassalization:0 "Offer Vassalization" + game_concept_offer_vassalization_interaction:0 "Offer Vassalization Interaction" + game_concept_offer_vassalization_desc:0 "An interaction offering [vassalage|E] to an [independent|E] [ruler|E] of lower [title_rank|E], peacefully adding them to the realm." + + game_concept_extort_subjects_decision:0 "Extort Subjects Decision" + game_concept_extort_subjects:0 "Extort Subjects" + game_concept_extort_subjects_decision_desc:0 "A [decision|E] offering different opportunities to demand extra [gold|E] from subjects, at a different cost..." + + game_concept_sell_titles_decision:0 "Sell Titles Decision" + game_concept_sell_titles:0 "Sell Titles" + game_concept_sell_titles_decision_desc:1 "A [decision|E] allowing for the sale of trivial titles — titles of a purely symbolic importance. Grants [gold|E] in exchange for [prestige|E]." + + game_concept_embrace_celibacy:0 "Embrace Celibacy" + game_concept_embrace_celibacy_decision:0 "Embrace Celibacy Decision" + game_concept_embrace_celibacy_desc:0 "A [decision|E] that allows a character to gain the [GetTrait('celibate').GetName( GetNullCharacter )] [trait|E] at will." + + game_concept_abandon_celibacy:0 "Abandon Celibacy" + game_concept_abandon_celibacy_decision:0 "Abandon Celibacy Decision" + game_concept_abandon_celibacy_desc:0 "A [decision|E] that allows a character to lose the [GetTrait('celibate').GetName( GetNullCharacter )] [trait|E] at will." + + game_concept_convert_county:0 "$task_conversion$" + game_concept_convert_county_desc:0 "A [councillor_task|E] performed by the [court_chaplain|E] which targets a [county|E] of a different faith than the [liege|E].\nProgress increases each month, and at 100%, the majority of the Target County has changed from their previous Faith to the Liege's Faith.\n\nConversion speed is affected by many factors, including the [councillor|E]'s [learning_skill|E] and the [fervor|E] of the two Faiths." + game_concept_convert: "Convert" + game_concept_converted: "Converted" + game_concept_converting: "Converting" + + game_concept_commission_epic:0 "$commission_epic_decision$" + game_concept_commission_epic_decision:0 "$commission_epic_decision$ Decision" + game_concept_commission_epic_desc:0 "A [decision|E] that lets a character trade [gold|E] for an [artifact|E], by commissioning a family epic.\nThe epic will give [dynasty_prestige|E] and can give also give other bonuses depending on your choices." + + game_concept_draw_up_new_charts:0 "$draw_up_new_charts_decision$" + game_concept_draw_up_new_charts_decision:0 "$draw_up_new_charts_decision$ Decision" + game_concept_draw_up_new_charts_desc:0 "A [decision|E] that lets a character trade [gold|E] for an [artifact|E], by commissioning a travel itinerary describing places they have visited.\nThe itinerary [artifact|E] will give different effects depending on where you have been and what choices you make." + + game_concept_local_arbitration:0 "$local_arbitration_decision$" + game_concept_local_arbitration_decision:0 "$local_arbitration_decision$ Decision" + game_concept_local_arbitration_desc:0 "A [decision|E] that lets a character improve a [county|E] in their current location." + + game_concept_exceptional_epic:0 "Exceptional Epic" + game_concept_exceptional_epic_desc:0 "A Family Epic written through the $commission_epic_decision$ Decision has a chance of being an Exceptional Epic, which confers greater bonuses than a normal epic.\n\nThe chance of the Epic being Exceptional can be affected by event choices." + + game_concept_demand_payment:0 "Demand Payment" + game_concept_demand_payment_decision:0 "Demand Payment Interaction" + game_concept_demand_payment_desc:0 "A Diplomatic Interaction that allows a character to demand payment of [gold|E] in exchange for any [hooks|E] they have." + + game_concept_independence_faction:0 "Independence Faction" + game_concept_independence_factions:0 "Independence Factions" + game_concept_faction_independence:0 "Independence" + game_concept_independence_faction_desc:1 "The $game_concept_independence_faction$ seeks independence for all its members. If successful, they will go [independent|E] from their [liege|E]." + + game_concept_liberty_faction:0 "$liberty_faction$" + game_concept_faction_liberty:0 "Liberty" + game_concept_liberty_factions:0 "Liberty Factions" + game_concept_liberty_faction_desc:1 "The $game_concept_liberty_faction$ seeks to lower the [crown_authority|E] and, if applicable, their own [vassal_contracts|E]. If successful, their [liege|E] will be unable to change the Crown Authority of the [realm|E] for some time." + + game_concept_claimant_faction:0 "$claimant_faction$" + game_concept_claimant_factions:0 "Claimant Factions" + game_concept_claimant_faction_desc:1 "The $game_concept_claimant_faction$ seeks to install a particular [claimant|E] on the throne of a [title|E] held by their [liege|E]. If successful, the Liege will have to relinquish the Title to the Claimant and the [vassal|E] structure will be updated accordingly. All [faction|E] members will gain a [hook|E] on the Claimant." + + game_concept_peasant_faction:0 "$peasant_faction$" + game_concept_peasant_factions:0 "Peasant Factions" + game_concept_peasant_faction_desc:2 "The $game_concept_peasant_faction$ is populated by [counties|E] with low [county_opinion|E]. Unlike other [factions|E], this one will always revolt even if [faction_military_power|E] is low, as peasants are generally both optimistic and illiterate... Successful Peasant Revolts will significantly lower Control in your [realm|E]." + + game_concept_escalated_peasant_faction: "Escalated $peasant_faction$" + game_concept_escalated_peasant_factions: "Escalated Peasant Factions" + game_concept_escalated_peasant_faction_desc: "The $game_concept_escalated_peasant_faction$ is populated by [counties|E] with low [county_opinion|E] that already enforced demands of a [peasant_faction|E] on one of your [vassals|E]. Lead by an infamous leader, the faction is dangerous and capable of breaking away from your [realm|E]." + + game_concept_popular_faction:0 "$populist_faction$" + game_concept_popular_factions:0 "Populist Factions" + game_concept_popular_faction_desc:0 "The $game_concept_popular_faction$ is populated by [counties|E] with low [county_opinion|E] that share a common element, such as [culture|E] or [faith|E]. They seek to break free, and choose a new [ruler|E] based on their Culture or Faith. This type of uprising is typically very dangerous." + + game_concept_buy_claim:0 "$buy_claim_interaction$" + game_concept_buy_claim_interaction:0 "$buy_claim_interaction$ Interaction" + game_concept_buy_claim_desc:2 "An Interaction that allows a character to buy [unpressed_claims|E] in exchange for [piety|E].\n\n$EFFECT_LIST_BULLET$A [vassal|E] may not buy a claim on any [liege|E]'s [title|E], and a Liege may not buy a claim on any Vassal's Title\n$EFFECT_LIST_BULLET$A [king|E] or [emperor|E] may not buy claims on Kingdom Titles, and Emperors may not buy claims on other Empires\n$EFFECT_LIST_BULLET$No one may buy a claim on their [head_of_faith|E]" + + game_concept_develop_county:0 "$task_develop_county$" + game_concept_develop_county_desc:0 "A [councillor_task|E] performed by the [steward|E]. It targets a [county|E], where it speeds up [development_growth|E] and reduces the construction time for [buildings|E]." + + game_concept_convince_dejure:0 "$task_convince_dejure$" + game_concept_convince_dejure_desc:0 "A [councillor_task|E] performed by the [steward|E]. It targets a [de_jure|E] [county|E] of the councillor's [liege|E] that is owned by an [independent|E] [ruler|E]. When the county is persuaded, they will ask their [ruler|E] to release them to their [de_jure|E] [liege|E]." + + game_concept_organize_levies: "$task_organize_levies$" + game_concept_organize_levies_desc: "A [councillor_task|E] performed by the [marshal|E]. It increases [garrison|E] Size and [levy|E] Reinforcement Rate in the [realm|E] of the councillor's [liege|E]." + + game_concept_hostile_army:0 "Hostile" + game_concept_hostile_army_desc:0 "A $game_concept_hostile_army$ [army|E] can be engaged just as if you were at [war|E] with the owner, though no [war_score|E] will be given.\n\nHostility is caused by you having conflicting interests, including:\n$BULLET_WITH_TAB$Enemies of your [liege|E]\n$BULLET_WITH_TAB$[vassals|E] of your enemies\n$BULLET_WITH_TAB$Rulers #emphasis attacking#! the same enemy" + + game_concept_war_leaders:0 "War Leaders" + game_concept_war_leader:0 "War Leader" + game_concept_war_leaders_desc:0 "The primary attacker and the primary defender of a [war|E]. Usually this is the character who instigated the war, and the [top_liege|E] of the character who holds the [war_target|E].\n\nThere are a variety of [casus_belli|E] for many different kinds of war, some with different characters as the $game_concept_war_leaders$." + + game_concept_offensive_war_opinion:0 "Offensive War Opinion" + game_concept_offensive_war_opinion_short:0 "Offensive War" + game_concept_offensive_war_opinion_desc:0 "Being the main attacker in a war will gradually cause your [vassals|E] to dislike you after [GetDefine('NCharacterOpinion', 'OFFENSIVE_WAR_PENALTY_GRACE_PERIOD')] months. [civil_wars|E] and [great_holy_wars|E] are excluded from this. Once no longer in such a war, the penalty will slowly decay." + + game_concept_at_peace_opinion:0 "At Peace Opinion" + game_concept_at_peace_opinion_short:0 "At Peace" + game_concept_at_peace_opinion_desc:1 "Characters who have the [GetFaithDoctrine('tenet_warmonger').GetBaseName] [core_tenet|E] as part of their [faith|E] will have the '$game_concept_at_peace_opinion$' instead of the [offensive_war_opinion|E] penalty.\n\nIf you are at peace for too long, your [vassals|E] will think less of you #weak (if they share your Faith).#!" + + game_concept_character:0 "Character" + game_concept_characters:0 "Characters" + game_concept_character_possessive:0 "Character's" + game_concept_characters_possessive:0 "Characters'" + game_concept_character_desc:0 "Characters are either [noble|E] or [lowborn|E], [landed|E] or [unlanded|E], each with their own set of [skills|E] and [traits|E], goals and aspirations. They come in the form of [rulers|E], [courtiers|E] and [guests|E]. As long as they are within [diplomatic_range|E], they can be interacted with." + + game_concept_highlighted_text:0 "Highlighted Text" + game_concept_highlighted_text_desc:0 "This information is here for you, whenever you are unsure about a game concept.\n\n#TUT You can even move your cursor into #EMP this#! tooltip for even more information! [highlighted_text_example|E]#!" + game_concept_highlighted_text_example:0 "Neat!" + game_concept_highlighted_text_example_desc:0 "Good job!" + + game_concept_detail_zoom:1 "$ZOOM_LEVEL_DETAILS$" + game_concept_detail_zoom_desc:1 "$ZOOM_LEVEL_DETAILS_TOOLTIP$" + game_concept_political_zoom:0 "$ZOOM_LEVEL_POLITICAL$" + game_concept_political_zoom_desc:0 "$ZOOM_LEVEL_POLITICAL_TOOLTIP$" + game_concept_paper_zoom:0 "$ZOOM_LEVEL_PAPER_MAP$" + game_concept_paper_zoom_desc:0 "$ZOOM_LEVEL_PAPER_MAP_TOOLTIP$" + + game_concept_tutorial_education_trait:0 "Education Trait" + game_concept_tutorial_education_trait_i:0 "@tutorial_education_trait_icon!" + game_concept_tutorial_education_trait_desc:0 "Petty King Murchad (your [character|E]) followed a [martial|E] [education|E]. Upon reaching adulthood, he received the trait Skilled Tactician." + + game_concept_organized:0 "Organized" + game_concept_organized_desc:0 "An Organized [faith|E] has a religious hierarchy. Worship and practices are more organized and scriptures are formalized.\n\n[GetFaithDoctrine('unreformed_faith_doctrine').GetBaseName] [GetReligionFamily('rf_pagan').GetName] Faiths can become Organized by reforming, while other Faiths are always considered Organized." + + game_concept_flowery_war:0 "Raid for Captives" + game_concept_flowery_wars:0 "Raids for Captives" + game_concept_flowery_warring:0 "Raiding for Captives" + game_concept_flowery_war_desc:1 "This is a special type of [war|E], started by a [ruler|E] whose [faith|E] practices human sacrifice. The primary goal of $game_concept_flowery_warring$ is to do battle and capture [prisoners|E] for sacrifice, with either side able to get enough [war_score|E] through combat to win without ever having to [siege|E].\n\nAt the end of the $game_concept_war$, if the victor (including the defender) follows a $game_concept_faith$ practicing human sacrifice, then they will take several $game_concept_prisoners$ from the [court|E] of the loser. If both main combatants in a $game_concept_flowery_war$ follow the same faith, then the war is considered sacred, meaning that the loser still receives (reduced) [piety|E] even in defeat.\n\nYou cannot conduct or continue a $game_concept_flowery_war$ if you have any $game_concept_prisoners$ obtained through winning a $game_concept_flowery_war$ in your [dungeon|E]." + + game_concept_partition_share:0 "Partition Share" + game_concept_partition_share_desc:1 "Under any [succession_law|E] with multiple [realm_heirs|E], a [character_possessive|E] $game_concept_partition_share$ is which [titles|E] that particular $game_concept_heir$ will inherit upon [succession|E]. Usually, this means dividing between the children of a [ruler|E], or, rarely, their siblings.\n\nTypically, depending on what type of $game_concept_succession$ is in place, $game_concept_titles$ may be divided evenly between separate [realms|E], evenly within the same $game_concept_realm$, or given mostly to the main $game_concept_heir$ while dividing the remainder evenly between any other $game_concept_heirs$." + + game_concept_banish_reason:0 "Banishment Reason" + game_concept_banish_reasons:0 "Banishment Reasons" + game_concept_banish_reason_desc:0 "A $game_concept_banish_reason$ gives a [liege|E] the opportunity to freely [banish|E] any subject they have in their [dungeon|E]. They are most often gained from the subject being a [criminal|E]." + + game_concept_imprisonment_reason:0 "Imprisonment Reason" + game_concept_imprisonment_reasons:0 "Imprisonment Reasons" + game_concept_imprisonment_reason_desc:0 "A $game_concept_imprisonment_reason$ gives a [liege|E] the opportunity to freely [imprison|E] a subject. They are most often gained from the subject being a [criminal|E]." + + game_concept_revoke_title_reason:0 "Title Revocation Reason" + game_concept_revoke_title_reasons:0 "Title Revocation Reasons" + game_concept_revoke_title_reason_desc:0 "A $game_concept_revoke_title_reason$ gives a [liege|E] the opportunity to freely [revoke|E] a [title|E] from a subject. They are most often gained from the subject being a [criminal|E]." + + game_concept_execute_reason:0 "Execution Reason" + game_concept_execute_reasons:0 "Execution Reasons" + game_concept_execute_reason_desc:1 "A $game_concept_execute_reason$ gives a [liege|E] the opportunity to freely [execute|E] a subject they have in their [dungeon|E]. They are most often gained from the subject being a [criminal|E]." + + game_concept_movement_lock:0 "Movement Lock" + game_concept_movement_locked:0 "Movement Locked" + game_concept_movement_locked_desc:0 "After an [army|E] has completed more than half of a given move order, it will not be possible to change it until they arrive at their destination." + + game_concept_extramarital_sex:0 "Extramarital Sex" + game_concept_extramarital_sex_sleeping_with:0 "sleeping with" + game_concept_extramarital_sex_desc:1 "If they are discovered, two characters engaged in extramarital sex will suffer consequences depending on their [faithpossessive|E] [doctrines|E].\n\n$EFFECT_LIST_BULLET$Each character will become known as either a [GetTrait('fornicator').GetName( GetNullCharacter )] or an [GetTrait('adulterer').GetName( GetNullCharacter )], depending on their own marital status\n$EFFECT_LIST_BULLET$If a man and a woman sleep together, it may result in a [bastard|E] pregnancy\n$EFFECT_LIST_BULLET$If the characters are of the same gender, consequences are determined by their [faithpossessive|E] $doctrine_homosexuality_name$ [doctrine|E]\n$EFFECT_LIST_BULLET$Any sexually transmitted [diseases|E] held by one character may infect the other" + + game_concept_titular_title:0 "Titular Title" + game_concept_titular_title_desc:0 "A $game_concept_titular_title$ is a [title|E] that has no [de_jure|E] land on the map. Non-Titular Titles can become Titular through [de_jure_drift|E].\n\n[mercenary|E], [head_of_faith|E] and [holy_order|E] Titles are often Titular." + + game_concept_pilgrimage:0 "Pilgrimage" + game_concept_pilgrimages:0 "Pilgrimages" + game_concept_pilgrimage_desc:2 "Characters of most [faiths|E] can choose to undertake an [activity|E] to go on a $game_concept_pilgrimage$ to a [holy_site|E]. Each [holy_site|E] has an individual grace period before you can revisit. \n\nSuch a journey may be filled with both opportunity and peril, but upon reaching their destination characters will earn [piety|E] and may receive other rewards." + + game_concept_hajj:0 "Hajj" + game_concept_hajjes:0 "Hajjes" + game_concept_hajj_desc:1 "Characters of most Islamic [faiths|E] can choose to undertake an [activity|E] to go on a $game_concept_hajj$ to Mecca as part of their $game_concept_pilgrimage$ [doctrine|E] once a year.\n\nSuch a journey may be filled with both opportunity and peril, but upon reaching the holy city characters will earn [piety|E] and may receive other rewards." + + game_concept_faith_righteous:0 "Righteous" + game_concept_faith_righteous_desc:0 "This [faith|E] is considered legitimate.\nIntermarriage is common.\n\n#S Effects:\n#![GetHostilityDescription( '(int32)0' )]" + + game_concept_faith_astray:0 "Astray" + game_concept_faith_astray_desc:0 "This [faith|E] differs in a way that is not particularly significant.\nIntermarriage may still happen.\n\n#S Effects:\n#![GetHostilityDescription( '(int32)1' )]" + + game_concept_faith_hostile:0 "Hostile" + game_concept_faith_hostile_desc:0 "This [faith|E] deviates significantly.\nIntermarriage may still happen, [holy_wars|E] can be waged.\n\n#S Effects:\n#![GetHostilityDescription( '(int32)2' )]" + + game_concept_faith_evil:0 "Evil" + game_concept_faith_evil_desc:0 "This [faith|E] is considered anathema.\nIntermarriage rarely happens, [holy_wars|E] can be waged.\n\n#S Effects:\n#![GetHostilityDescription( '(int32)3' )]" + + game_concept_faith_hostility:0 "Faith Hostility" + game_concept_faith_hostility_desc:1 "All [faiths|E] have a relation towards each other $game_concept_faith$ that is determined by how closely related they are.\n\nCloseness is decided by several factors, such as if they share [religion|E], [religious_family|E], or if the Faith has special [doctrines|E].\n\nIf two Faiths are far apart, they are often able to [holy_war|E] each other.\n\nThe following relations exist: [faith_righteous|L], [faith_astray|L], [faith_hostile|L], and [faith_evil|L]." + + game_concept_command_modifier:0 "Command Modifier" + game_concept_command_modifier_desc:0 "This [modifier|E] is only active for [commanders|E].\n\nIf a character with a Command Modifier commands an [army|E], it will get this effect." + game_concept_command_modifier_i:0 "@command_modifier_icon!" + game_concept_command_modifiers: "Command Modifiers" + + #game_concept_pic: "@test_flower!" + + game_concept_nickname:0 "Nickname" + game_concept_epithet:0 "Epithet" + game_concept_cognomen:0 "Cognomen" + game_concept_nicknames:0 "Nicknames" + game_concept_epithets:0 "Epithets" + game_concept_cognomens:0 "Cognomens" + game_concept_nickname_desc:1 "$game_concept_nicknames$, $game_concept_epithets$, and $game_concept_cognomens$ are all secondary names either taken by or attributed to [characters|E] (e.g. Charles 'the Bald'). $game_concept_nicknames$ are purely aesthetic, though the circumstances surrounding their acquisition are often dramatic or noteworthy affairs.\n\nBad $game_concept_nicknames$ will sometimes be overridden by good ones (such as William 'the Bastard' becoming William 'the Conqueror')." + + game_concept_main_phase:0 "Main Phase" + game_concept_main_phase_desc:0 "In the Main Phase of a [battle|E], [soldiers|E] and [knights|E] from the two sides fight each other.\n\nThe Main Phase ends when all troops of one side have become [casualties|E] or one side has decided to [retreat|E].\n\nAfter the Main Phase the combat enters the [aftermath|E]." + + game_concept_personality_trait:0 "Personality Trait" + game_concept_personality_traits:0 "Personality Traits" + game_concept_personality_trait_desc:1 "A $game_concept_personality_trait$ is a [trait|E] that determine a person's world-view and what actions they are most likely to take. They also affect the [opinion|E] others. One might both lose and gain new traits during one's lifetime. Acting against your own Personality causes [stress|E]." + + game_concept_lifestyle_trait:0 "Lifestyle Trait" + game_concept_lifestyle_traits:0 "Lifestyle Traits" + game_concept_lifestyle_trait_desc:1 "A $game_concept_lifestyle_trait$ is the result from picking certain [lifestyle|E] perks, [decisions|E], or [interactions|E].\n\nSome Lifestyle traits are upgradeable as the character improves their mastery of the skill. The levels range between 1-3, and the stars on the trait icon indicate the current level." + + game_concept_physical_trait:0 "Physical Trait" + game_concept_physical_traits:0 "Physical Traits" + game_concept_physical_trait_desc:1 "A $game_concept_physical_trait$ is a descriptor of a physical [trait|E] tied to their appearance or behavior, and the level of intellect a character has. Many physical features affect how [attracted|E] others are to them.\n\nThey are often [congenital|E], thus gained at birth and permanent." + + game_concept_fame_trait:0 "Fame Trait" + game_concept_fame_trait_desc:1 "A $game_concept_fame_trait$ is a special [trait|E] gained from specific circumstances and affects others' [opinion|E] of them. One can gain these traits as the results of accomplishing a positive deed, or when one's dark [secrets|E] are exposed. Others are the result of one's circumstances at birth." + + game_concept_health_trait:0 "Health Trait" + game_concept_health_trait_desc:1 "A $game_concept_health_trait$ is a [trait|E] that directly affects one's physical and mental [health|E], such as [diseases|E]. Temporary traits that affect one's bodily capabilities, such as pregnancies and wounds also falls under this category." + + game_concept_modifier_contribution:0 "Contribution" + game_concept_modifier_contributions:0 "Contributions" + game_concept_modifier_contributes:0 "Contributes" + game_concept_modifier_contribution_desc:0 "A [modifier|E] may change the $game_concept_modifier_contribution$ of your [vassals|E] [obligations|E]. This is not the same as [modifier_base_contribution|E].\n\nIf you have a [vassal] that pays you #V 1#! [gold|E] per month, and you gain a [modifier] that increases $game_concept_modifier_contribution$ by #V 10%#!, then the [vassal] instead pays you #V 1.1#! [gold]." + + game_concept_modifier_base_contribution:0 "Base Contribution" + game_concept_modifier_base_contributions:0 "Base Contributions" + game_concept_modifier_base_contributes:0 "Base Contributes" + game_concept_modifier_base_contribution_desc:0 "A [modifier|E] may change the $game_concept_modifier_base_contribution$ of your [vassals|E] [obligations|E]. This is not the same as [modifier_contribution|E].\n\nIf you have a [vassal] that has a total [income|E] of #V 10#! [gold|E] and pays you #V 1#! [gold] per month, and you gain a [modifier] that increases $game_concept_modifier_base_contribution$ by #V 10%#!, then the [vassal] instead pays you #V 2#! [gold]." + + game_concept_maneuver:0 "Maneuver" + game_concept_maneuver_desc:0 "The $game_concept_maneuver$ phase occurs at the start of a [battle|E] and indicates the time it takes before the [main_phase|E] begins, and [armies|E] engage each other in combat." + + game_concept_combat_phase:0 "Battle Phase" + game_concept_combat_phase_desc:0 "A $game_concept_combat_phase$ is one part of a [battle|E]. Battles have three distinct phases; [maneuver|E], [main_phase|E], and [aftermath|E]." + + game_concept_unreformed_pagan_combat_bonus:1 "Unreformed Pagan Combat Advantage" + game_concept_unreformed_pagan_combat_bonus_desc:1 "[GetFaithDoctrine('unreformed_faith_doctrine').GetBaseName] [GetReligionFamily('rf_pagan').GetName] [faiths|E] get a [battle|E] [advantage|E] in [counties|E] of their faith." + + game_concept_personality:0 "Personality" + game_concept_character_personality:0 "Character Personality" + game_concept_personalities:0 "Personalities" + game_concept_personality_desc:1 "Characters will act towards you and others according to their Personality, which is primarily determined by their [personality_traits|E]." + + game_concept_economical_archetype:0 "Economical Archetype" + game_concept_economical_archetype_desc:0 "A [rulerpossessive|E] Economical Archetype affects how they decide to spend their [gold_i][gold|E]. It is in large part based on their [traits|E].\n\n#low The Economical Archetypes are:#!\n$EFFECT_LIST_BULLET$[ai_warlike_personality|E]\n$EFFECT_LIST_BULLET$[ai_cautious_personality|E]\n$EFFECT_LIST_BULLET$[ai_economical_boom_personality|E]\n$EFFECT_LIST_BULLET$[ai_economical_unpredictable_personality|E]\n$EFFECT_LIST_BULLET$[ai_conqueror_personality|E]" + + game_concept_gift:0 "Gift" + game_concept_gifts:0 "Gifts" + game_concept_send_gift:0 "Send Gift" + game_concept_gift_desc:0 "Sending a Gift to another character will increase their [opinion|E] of you in exchange for [gold|E][gold_i].\n\nThe greedier the recipient, the more Gold you will have to send, and the more Opinion you will get.\n\nThe higher your [diplomacy|E], the more Opinion you will get." + + game_concept_vote_strength:0 "Vote Strength" + + game_concept_valuable_prisoner: "Valuable Prisoner" + game_concept_valuable_prisoners: "Valuable Prisoners" + game_concept_valuable_prisoner_desc:0 "A $game_concept_valuable_prisoner$ is a [prisoner|E] who provides [war_score|E] when captured during a [war|E].\n\nFor a person to be deemed a $game_concept_valuable_prisoner$, they have to be third in line or higher to inherit their war leader's primary title.\n\n$game_concept_valuable_prisoners$ are released when the war ends, unlike [prisoners_of_war|E]." + game_concept_prisoner_of_war:0 "Prisoner of War" + game_concept_prisoners_of_war:0 "Prisoners of War" + game_concept_prisoner_of_war_desc:1 "A $game_concept_prisoner_of_war$ is a [prisoner|E] who's captured during a [war|E], but not of importance to provide the captors with [war_score|E].\n\n[valuable_prisoners|E] are released when the war ends, unlike prisoners of war, but can still be ransomed for release." + + game_concept_single_combat_fight:0 "Single Combat" + game_concept_single_combat_duel:0 "Duel" + game_concept_single_combat_fight_plural:0 "Single Combats" + game_concept_single_combat_duel_plural:0 "Duels" + game_concept_single_combat_fight_sudden_death:0 "Sudden Death" + game_concept_single_combat_fight_desc:0 "In a $game_concept_single_combat_fight$, two [characters|E] fight, either to the [character_death_death|E] or to first blood. Each round, both $game_concept_characters$ select one randomly rolled option from a list, trading blows until one $game_concept_character$ gets a solid strike in, with the options available depending on your [prowess|E] and [traits|E].\n\nSome options may give special effects, and most will increase your [single_combat_success_chance|E] and [single_combat_injury_chance|E]. As $game_concept_single_combat_duel_plural$ go on, they grow more dangerous and uncertain, and it becomes easier to win or hurt yourself. After several rounds, $game_concept_single_combat_duel_plural$ enter sudden death, ending immediately with the higher $game_concept_prowess$ combatant winning.\n\nWhen fighting $game_concept_single_combat_duel_plural$, you may gain temporary [single_combat_prowess_bonus|E] or [single_combat_prowess_malus|E] [character_modifiers|E], increasing or reducing your $game_concept_prowess$ until the $game_concept_single_combat_duel$ ends." + game_concept_single_combat_success_chance:0 "Likelihood of Success" + game_concept_single_combat_success_chance_skill:0 "Duel Success" + game_concept_single_combat_success_chance_desc:0 "When fighting a $game_concept_single_combat_fight$, your $game_concept_single_combat_success_chance$ is how well you are doing in the $game_concept_single_combat_duel$. To win, you must get your $game_concept_single_combat_success_chance$ far above your opponent's.\n\nAs rounds go on, it becomes easier to win, meaning you need less lead over your opponent.\n\nThe counterpart to $game_concept_single_combat_success_chance$ is [single_combat_injury_chance|E]." + game_concept_single_combat_injury_chance:0 "Risk of Injury" + game_concept_single_combat_injury_chance_injure:0 "Injure" + game_concept_single_combat_injury_chance_injury_risk:0 "Injury Risk" + game_concept_single_combat_injury_chance_desc:0 "[characters|E] in $game_concept_single_combat_fight_plural$ run the risk of hurting themselves, either by accidentally opening their guard to their opponent, or simply injuring themselves with their own weapon. As they fight, they also build $game_concept_single_combat_injury_chance$.\n\n$game_concept_single_combat_duel_plural$ that go on longer make it easier to hurt yourself.\n\nThe counterpart to $game_concept_single_combat_injury_chance$ is [single_combat_success_chance|E]." + game_concept_single_combat_prowess_bonus:0 "Duel Edge Bonus" + game_concept_single_combat_prowess_bonus_desc:0 "As [characters|E] $game_concept_single_combat_duel$, they may gain temporary advantage, such as by leveraging [terrain|E] or special [traits|E]. This increases their [prowess|E] for the duration of the current bout, and is lost immediately after.\n\nThe opposite of $game_concept_single_combat_prowess_bonus$ is [single_combat_prowess_malus|E]." + game_concept_single_combat_prowess_malus:1 "Duel Edge Penalty" + game_concept_single_combat_prowess_malus_desc:1 "As [characters|E] $game_concept_single_combat_duel$, they may be afflicted with temporary disadvantage, often due to their opponent severely hurting or intimidating them. This decreases their [prowess|E] for the duration of the current bout, but is regained immediately after.\n\nThe opposite of $game_concept_single_combat_prowess_malus$ is [single_combat_prowess_bonus|E]." + + game_concept_game_over:0 "Game Over" + game_concept_game_over_desc:0 "The game ends when your current lineage dies out.\n\nHowever, even if the game is over for your lineage, you can still choose to play as another [ruler|E] anywhere in the world.\n\nThe game can end in two ways:\n$BULLET_WITH_TAB$You die without [player_heir|E]\n$BULLET_WITH_TAB$You reach the year 1453" + + game_concept_de_jure_partition:0 "De Jure Partition" + game_concept_de_jure_partitioned:0 "De Jure Partitioned" + game_concept_de_jure_partition_desc:0 "[realms|E] that have been $game_concept_de_jure_partitioned$ have been split into two same-[title_tier|E] [titles|E], but can still be reunited easily.\n\nEither $game_concept_title$ can [de_jure_drift_drift|E] [completely_controlled|E] [duchies|E] from the other $game_concept_title$ into its [de_jure|E] instantly via [decision|E].\n\nIf either $game_concept_title$ is ever destroyed or loses the last of its $game_concept_de_jure$ [counties|E], then the remaining $game_concept_title$ absorbs all of its $game_concept_de_jure$." + + game_concept_hybrid_culture:0 "Hybrid Culture" + game_concept_hybrid_cultures:0 "Hybrid Cultures" + game_concept_hybridize:0 "Hybridize" + game_concept_hybridized:0 "Hybridized" + game_concept_hybridizing:0 "Hybridizing" + game_concept_hybridizes:0 "Hybridizes" + game_concept_hybrid_culture_desc:0 "[SelectLocalization( HasDlcFeature( 'hybridize_culture' ), 'game_concept_hybrid_culture_desc_DLC', 'game_concept_hybrid_culture_desc_NO_DLC' )]" + game_concept_hybrid_culture_desc_DLC:1 "A $game_concept_hybrid_culture$ is a [culture|E] that was created by a [ruler|E] as the combination of two existing Cultures.\n\nThe $game_concept_hybrid_culture$ is a mixture of the two original Culture's [traditions|E], [culture_pillars|E], and Aesthetics.\n\nOnly Cultures of different [heritage|E] can form a Hybrid, and the [prestige|E] cost to do so is based on their [cultural_acceptance|E] of each other.\n\nThe higher the Cultural Acceptance, the more [counties|E] will convert when a Hybrid forms. Rulers of a Hybrid culture [promote_culture|E] much faster in Counties of its parent cultures for #V [EmptyScope.ScriptValue('culture_hybrid_cooldown')|0]#! years after it forms.\n\nNew Cultures can also appear as a [divergent_culture|E]." + game_concept_hybrid_culture_desc_NO_DLC:0 "A $game_concept_hybrid_culture$ is a [culture|E] that was formed as the combination of two other Cultures.\n\nNew Cultures can also appear as a [divergent_culture|E]." + game_concept_divergent_culture:0 "Divergent Culture" + game_concept_divergent_cultures:0 "Divergent Cultures" + game_concept_diverge:0 "Diverge" + game_concept_diverges:0 "Diverges" + game_concept_divergent_culture_desc:0 "[SelectLocalization( HasDlcFeature( 'diverge_culture' ), 'game_concept_divergent_culture_desc_DLC', 'game_concept_divergent_culture_desc_NO_DLC' )]" + game_concept_divergent_culture_desc_DLC:1 "A $game_concept_divergent_culture$ is an offshoot of an existing [culture|E], created by a [ruler|E].\n\nThe $game_concept_divergent_culture$ keeps its [heritage|E], but other aspects of the original Culture can be changed.\n\nThe Culture that is diverged from must be at least [EmptyScope.ScriptValue('culture_divergence_cooldown')|0] years old, and the [prestige|E] cost to diverge is based on the creating Ruler's [realm_size|E].\n\nNew Cultures can also appear as a [hybrid_culture|E]." + game_concept_divergent_culture_desc_NO_DLC:0 "A $game_concept_divergent_culture$ is an offshoot of an existing [culture|E].\n\nNew Cultures can also appear as a [hybrid_culture|E]." + + game_concept_winter:0 "Winter Severity" + game_concept_winter_desc:0 "Winter steadily drains [supply|E] over time, making armies lose Supply while standing in a barony affected by Winter. The Supply penalty increases with each severity. Winter has three different severities; [Concept( 'winter_severity_mild', 'Mild' )|E], [Concept( 'winter_severity_normal', 'Normal' )|E], and [Concept( 'winter_severity_harsh', 'Harsh' )|E]." + game_concept_winter_severity_mild:0 "Mild Winter" + game_concept_winter_severity_mild_desc:1 "[GetModifier( 'winter_mild_modifier' ).GetDescWithEffects]" + game_concept_winter_severity_normal:0 "Normal Winter" + game_concept_winter_severity_normal_desc:1 "[GetModifier( 'winter_normal_modifier' ).GetDescWithEffects]" + game_concept_winter_severity_harsh:0 "Harsh Winter" + game_concept_winter_severity_harsh_desc:1 "[GetModifier( 'winter_harsh_modifier' ).GetDescWithEffects]" + + game_concept_deceitful_progress_hostile_schemes_decision:0 "$deceitful_progress_hostile_schemes_decision$ Decision" + game_concept_deceitful_progress_hostile_schemes_decision_desc:1 "A [decision|E] allowing you to improve your [hostile_schemes|E]. Grants [success_chance|E] and [scheme_speed|E] in exchange for [stress|E]." + + game_concept_diligent_development_focus_decision:0 "$diligent_development_focus_decision$ Decision" + game_concept_diligent_development_focus_decision_desc:0 "A [decision|E] allowing you to improve your [capital|E]. Grants [development|E] in exchange for [stress|E]." + + game_concept_impatient_rushing_all_schemes_decision:0 "$impatient_rushing_all_schemes_decision$ Decision" + game_concept_impatient_rushing_all_schemes_decision_desc:0 "A [decision|E] allowing you to accelerate your [scheme|E]. Grants [scheme_opportunity_opportunities|E] in exchange for [stress|E]." + + game_concept_dismiss_strong_hook_interaction:0 "$dismiss_strong_hook_interaction$ Interaction" + game_concept_dismiss_strong_hook_interaction_desc:0 "An [interaction|E] allowing you to dismiss a [hook|E] targeting you in exchange for [prestige|E]." + + game_concept_abandon_hook_interaction:0 "$abandon_hook_interaction$ Interaction" + game_concept_abandon_hook_interaction_desc:0 "An [interaction|E] allowing you to abandon a [hook|E] you have in exchange for losing [stress_loss_i][stress|E]." + + game_concept_force_duel_criminals_interaction:0 "$force_duel_criminals_interaction$ Interaction" + game_concept_force_duel_criminals_interaction_desc:0 "An [interaction|E] allowing you to [single_combat_duel|E] criminals when you are [stressed|E]." + + game_concept_force_duel_anyone_interaction:0 "$force_duel_anyone_interaction$ Interaction" + game_concept_force_duel_anyone_interaction_desc:0 "An [interaction|E] allowing you to [single_combat_duel|E] anyone when you are [stressed|E]." + + game_concept_artifact_rarity:0 "Artifact Rarity" + game_concept_rarity:0 "Rarity" + game_concept_artifact_rarity_desc:0 "Some [artifacts|E] are rarer than others, which is reflected in their Rarity.\n\nThe levels are, from lowest to highest:\n$BULLET_WITH_TAB$Common (never shown since it is the default)\n$BULLET_WITH_TAB$$masterwork$\n$BULLET_WITH_TAB$$famed$\n$BULLET_WITH_TAB$$illustrious$" + + game_concept_promote_other_culture_development_decision:0 "$promote_other_culture_development_decision_name$ Decision" + game_concept_promote_other_culture_development_decision_desc:0 "A [decision|E] that enables you to improve [development|E], [control|E], [building|E] costs, and defensive [advantage|E] in [counties|E] from different [cultures|E] with a [cultural_acceptance|E] of #V 75%#! or more.\n\nTaking the Decision will also increase your [prestige|E] [prestige_i] and [levies|E].\n\nAll Counties in the [realm|E] are affected. The [gold|E] cost scales with the number of affected Counties." + + game_concept_reform:0 "Reform" + game_concept_reformation:0 "Reformation" + game_concept_reformation_desc:0 "The [culture_head|E] is able to change certain parts of their [culture|E] through $game_concept_reformation$. This is a process that takes a long time and can't be stopped once initiated. \n\nThe reformable parts are:\n$BULLET_WITH_TAB$[traditions|E]\n$BULLET_WITH_TAB$[ethos|E]\n$BULLET_WITH_TAB$[martial_custom|E]" + + game_concept_buy_artifact_claim:0 "$buy_artifact_claim_interaction$" + game_concept_buy_artifact_claim_interaction:0 "$buy_artifact_claim_interaction$ Interaction" + game_concept_buy_artifact_claim_desc:0 "An Interaction that allows a character to buy [personal_artifact_claims|E] in exchange for [piety|E] or [prestige|E]." + + game_concept_vassal_contract:0 "Vassal Contract" + game_concept_vassal_contracts:0 "Vassal Contracts" + game_concept_vassal_contract_desc:0 "$game_concept_vassal_contracts$ dictate the [obligations|E] between a [vassal|E] and their [liege|E].\n\nVassals of the [feudal|E], [clan|E], [administrative|E] and [nomadic|E] $game_concept_government_forms$ have access to different [obligations|E], negotiated individually for each Vassal.\n\nAll Vassals pay a percentage of their total [taxes|E] and [levies|E] to their Liege, based on their [obligations|E]. #EMP These [modifier_contributions|E] can in turn be modified by 'fine print' options such as [GetSubjectContractType( 'fortification_rights' ).GetObligationName( 'fortification_rights_granted' )].#!\n\nSome Special Contracts are limited to certain Ranks:\n$EFFECT_LIST_BULLET$[GetSubjectContractType( 'special_contract' ).GetObligationName( 'special_contract_march' )|V] and [GetSubjectContractType( 'special_contract' ).GetObligationName( 'special_contract_scutage' )|V]: [duke|E] and above\n$EFFECT_LIST_BULLET$[GetSubjectContractType( 'special_contract' ).GetObligationName( 'special_contract_palatinate' )|V]: [count|E] and above\n$EFFECT_LIST_BULLET$[GetSubjectContractType( 'special_contract' ).GetObligationName( 'special_contract_castellan' )|V]: [count|E] only\n\n#weak Note, [governor|E] [obligations|E] are also known as [province_administrations|E].#!" + + game_concept_vassal_directive: "Vassal Directive" + game_concept_vassal_directives: "Vassal Directives" + game_concept_directive: "Directive" + game_concept_directives: "Directives" + game_concept_vassal_directive_desc: "As a [liege|E], you can issue Directives to your [vassals|E], influencing their [councillor_tasks|E] and which [buildings|E] they construct.\n\nTo issue a Directive, you need to enable it, such as by having #P 50#! or more [opinion|E] with the Vassal. Advanced [government_forms|E] do not require this." + + game_concept_tributary_contract: "Tributary Contract" + game_concept_tributary_contracts: "Tributary Contracts" + game_concept_tributary_contract_desc: "$game_concept_tributary_contract$ dictate the [obligations|E] between a [tributary|E] and their [suzerain|E].\n\nAll Tributaries have access to different [obligations|E], negotiated individually for each Tributary.\n\nTributaries pay a percentage of their total [taxes|E], [levies|E], [herd|E], [prestige|E] or even [piety|E] to their Suzerain, based on their [obligations|E]." + + game_concept_board_game_match:0 "Match" + game_concept_board_game:0 "Board Game" + game_concept_board_games:0 "Board Games" + game_concept_board_game_game:0 "Game" + game_concept_board_game_match_desc:0 "A board game consists of two players trying their luck and skill against one another in a game of wits and chance. They may be played as friendly matches, or with a wager of some kind.\n\n#weak There are many different [board_game_types|E], though the ways to [board_game_win|E] and play each remain the same. Only the skills used differ.#!" + + game_concept_board_game_winning:0 "Winning" + game_concept_board_game_win:0 "Win" + game_concept_board_game_winning_sudden_death:0 "Sudden Death" + game_concept_board_game_winning_desc:0 "Winning at a $game_concept_board_game$ is accomplished in one of two ways:\n$EFFECT_LIST_BULLET$ Obtaining a dramatic lead in score over your opponent.\n$EFFECT_LIST_BULLET$ Being the defending player if there's no clear winner after round [EmptyScope.ScriptValue('bg_round_cap_value')|0]." + + game_concept_board_game_type:0 "Board Game Type" + game_concept_board_game_types:0 "Board Game Types" + game_concept_board_game_type_counter:1 "counter" + game_concept_board_game_type_counters:0 "counters" + game_concept_board_game_type_desc_guts:0 "When playing a $game_concept_board_game$, different play styles $game_concept_board_game_type_counter$ your opponent. Countering their moves severely reduces the points they gain from them, even if successful. Skilled opponents may note your own skills and deliberately attempt to $game_concept_board_game_type_counter$ #EMP you#!." + game_concept_board_game_type_desc:2 "$game_concept_board_game_type_desc_guts$\n\nAvailable games are:\n$EFFECT_LIST_BULLET$ [board_game_type_chess|E]\n$EFFECT_LIST_BULLET$ [board_game_type_pachisi|E]\n$EFFECT_LIST_BULLET$ [board_game_type_hnefatafl|E]\n$EFFECT_LIST_BULLET$ [board_game_type_tabula|E]\n$EFFECT_LIST_BULLET$ [board_game_type_go|E]\n$EFFECT_LIST_BULLET$ [board_game_type_fidchell|E]" + game_concept_board_game_type_chess:0 "Chess" + game_concept_board_game_type_chess_desc:1 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_chess$:\n$EFFECT_LIST_BULLET$ [martial|E] $game_concept_board_game_type_counters$ [learning|E]\n$EFFECT_LIST_BULLET$ [learning|E] $game_concept_board_game_type_counters$ [intrigue|E]\n$EFFECT_LIST_BULLET$ [intrigue|E] $game_concept_board_game_type_counters$ [martial|E]" + game_concept_board_game_type_pachisi:0 "Pachisi" + game_concept_board_game_type_pachisi_desc:1 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_pachisi$:\n$EFFECT_LIST_BULLET$ [diplomacy|E] $game_concept_board_game_type_counters$ [intrigue|E]\n$EFFECT_LIST_BULLET$ [intrigue|E] $game_concept_board_game_type_counters$ [stewardship|E]\n$EFFECT_LIST_BULLET$ [stewardship|E] $game_concept_board_game_type_counters$ [diplomacy|E]" + game_concept_board_game_type_hnefatafl:0 "Hnefatafl" + game_concept_board_game_type_hnefatafl_desc:1 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_hnefatafl$:\n$EFFECT_LIST_BULLET$ [intrigue|E] $game_concept_board_game_type_counters$ [martial|E]\n$EFFECT_LIST_BULLET$ [martial|E] $game_concept_board_game_type_counters$ [prowess|E]\n$EFFECT_LIST_BULLET$ [prowess|E] $game_concept_board_game_type_counters$ [intrigue|E]" + game_concept_board_game_type_tabula:0 "Tabula" + game_concept_board_game_type_tabula_desc:1 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_tabula$:\n$EFFECT_LIST_BULLET$ [intrigue|E] $game_concept_board_game_type_counters$ [learning|E]\n$EFFECT_LIST_BULLET$ [learning|E] $game_concept_board_game_type_counters$ [stewardship|E]\n$EFFECT_LIST_BULLET$ [stewardship|E] $game_concept_board_game_type_counters$ [intrigue|E]" + + game_concept_house_unity: "House Unity" + game_concept_unity: "Unity" + game_concept_house_unity_i: "@dynasty_house_unity!" + game_concept_house_unity_desc: "$game_concept_house_unity$ represents the state of internal relationships within a [clan|E] [house|E], and the attitude members have towards each other.\n\nThere are several [house_unity_levels|E], which provides the members of a House with various benefits and penalties.\n\n$game_concept_house_unity$ changes depending on the actions House members take towards one another. [house_unity_unifying_actions|E] will generally increase $game_concept_house_unity$, while [house_unity_devisive_actions|E] will decrease it. The [house_head|E] generally have a greater degree of influence over their House's $game_concept_unity$." + game_concept_house_unity_level: "House Unity Level" + game_concept_house_unity_levels: "House Unity Levels" + game_concept_house_unity_level_desc: "$game_concept_house_unity_level$ is the current state of [house_unity|E]. Active level changes as Unity increases through [house_unity_unifying_actions|E] or decreases through [house_unity_devisive_actions|E], and each level provides the members of a [house|E] with various benefits and penalties.\n\nThere are five different levels:\n[GetCurrentHouseUnityStagesDescForLocalPlayer]\n\nEach level entails its own [house|E] [succession_law|E]." + + game_concept_house_unity_unifying_actions: "Unifying Actions" + game_concept_house_unity_unifying_actions_desc: "Unifying Actions towards your [house|E] members will increase your [house_unity|E].\n\n[house_heads|E] can use the #V $unity_steer_house_direction_decision$#! [decision|E] and the #V $extoll_virtuousness_interaction$#! [interaction|E] to greatly increase Unity.\n\n#weak Some examples of unifying actions are:$house_unity_increase_examples$#!" + + game_concept_house_unity_devisive_actions: "Divisive Actions" + game_concept_house_unity_devisive_actions_desc: "Divisive Actions towards your [house|E] members will decrease your [house_unity|E].\n\n[house_heads|E] can use the #V $unity_steer_house_direction_decision$#! [decision|E] and the #V $accuse_of_decandence_interaction$#! [interaction|E] to greatly decrease Unity.\n\n#weak Some examples of divisive actions are:$house_unity_decrease_examples$#!" + + game_concept_house_succession_law: "House Succession Law" + game_concept_house_succession_law_desc: "In [GetGovernment('clan_government').GetName] [realms|E] the current [house_unity_level|E] dictates which [succession_law|E] is used.\n\nClans can switch to a $SUCCESSION_LAW_CHANGE_WINDOW_SINGLE_HEIR_LAWS$ Succession Law, which will prevent [house_unity|E] from changing it, but doing so is much harder than normal." + + house_unity_increase_examples: "\n$EFFECT_LIST_BULLET$ $negotiate_alliance_interaction$\n$EFFECT_LIST_BULLET$ $join_war_interaction$\n$EFFECT_LIST_BULLET$ $gift_artifact_interaction$\n$EFFECT_LIST_BULLET$ $pay_ransom_interaction$\n$EFFECT_LIST_BULLET$ $offer_guardianship_interaction$\n$EFFECT_LIST_BULLET$ $send_to_holy_order_interaction$\n$EFFECT_LIST_BULLET$ $restore_inheritance_interaction$\n$EFFECT_LIST_BULLET$ $abandon_hook_interaction$\n$EFFECT_LIST_BULLET$ $stop_attacker_vassal_war_interaction$\n$EFFECT_LIST_BULLET$ $fund_inspiration_interaction$\n$EFFECT_LIST_BULLET$ $propose_best_friendship_interaction$" + house_unity_decrease_examples: "\n$EFFECT_LIST_BULLET$ $revoke_title_interaction$\n$EFFECT_LIST_BULLET$ $declare_war_interaction$\n$EFFECT_LIST_BULLET$ $imprison_interaction$\n$EFFECT_LIST_BULLET$ $move_to_dungeon_interaction$\n$EFFECT_LIST_BULLET$ $force_join_faction_interaction$\n$EFFECT_LIST_BULLET$ $disinherit_interaction$\n$EFFECT_LIST_BULLET$ $denounce_interaction$\n$EFFECT_LIST_BULLET$ $expose_secret_interaction$\n$EFFECT_LIST_BULLET$ $blackmail_interaction$\n$EFFECT_LIST_BULLET$ $break_betrothal_interaction$\n$EFFECT_LIST_BULLET$ $join_independence_faction_interaction$\n$EFFECT_LIST_BULLET$ $sumptuary_law_debate_interaction$\n$EFFECT_LIST_BULLET$ $vassal_claim_liege_title_interaction$" + + game_concept_dreams: "Dreams" + game_concept_dreams_desc: "Characters who follow a faith with the divination tenet may occasionally experience dreams. These dreams can then be divined by a mystic which can have a variety of outcomes, both good and bad." + + game_concept_board_game_type_go:0 "Go" + game_concept_board_game_type_go_desc:0 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_go$:\n$EFFECT_LIST_BULLET$ [learning|E] $game_concept_board_game_type_counters$ [martial|E]\n$EFFECT_LIST_BULLET$ [martial|E] $game_concept_board_game_type_counters$ [intrigue|E]\n$EFFECT_LIST_BULLET$ [intrigue|E] $game_concept_board_game_type_counters$ [learning|E]" + game_concept_board_game_type_fidchell:0 "Fidchell" + game_concept_board_game_type_fidchell_desc:0 "$game_concept_board_game_type_desc_guts$\n\nIn $game_concept_board_game_type_fidchell$:\n$EFFECT_LIST_BULLET$ [learning|E] $game_concept_board_game_type_counters$ [prowess|E]\n$EFFECT_LIST_BULLET$ [prowess|E] $game_concept_board_game_type_counters$ [diplomacy|E]\n$EFFECT_LIST_BULLET$ [diplomacy|E] $game_concept_board_game_type_counters$ [learning|E]" + + +#### DIARCHY/REGENCIES + game_concept_strife:0 "Strife" + game_concept_strife_opinion:0 "Strife Opinion" + game_concept_strife_desc:2 "$game_concept_strife$ is an [opinion|E] penalty for fellow [vassals|E].\n\nStrife occurs when a subject of the [liege|E] takes an action against another [vassal|E]. For example, $game_concept_diarch$ uses their [diarch_powers|E], or in [mandate|E] events, as the $game_concept_diarch$ does not have the same authority as their [liege|E]" + + game_concept_diarchy:0 "Power Sharing" + game_concept_diarchies:0 "Power Sharing" + game_concept_share_power: "Share Power" + game_concept_sharing_power:0 "Sharing Power" + game_concept_power_sharing:0 "Power Sharing" + game_concept_diarchy_desc:2 "Power Sharing occurs when a [ruler|E] shares some authority with one of their [vassals|E] or [courtiers|E], who becomes their [diarch|E].\n\nThe Ruler who shares their power may set [mandates|E] for their $game_concept_diarch$, while the $game_concept_diarch$ may use special [diarch_powers|E].\n\nThe [scales_of_power|E] measure whether the Ruler or the $game_concept_diarch$ has the most authority." + + game_concept_diarch:0 "Diarch" + game_concept_diarchs:0 "Diarchs" + game_concept_diarch_possessive:0 "Diarch's" + game_concept_diarchs_possessive:0 "Diarchs'" + game_concept_diarch_desc:3 "The junior partner during [diarchy|E], a $game_concept_diarch$ helps their [liege|E] run the [realm|E].\n\nThe $game_concept_diarch$ has access to [diarch_powers|E], and gain more of these as the [scales_of_power|E] tip in their favor." + + game_concept_regent:0 "Regent" + game_concept_regents:0 "Regents" + game_concept_regent_possessive:0 "Regent's" + game_concept_regents_possessive:0 "Regents'" + game_concept_regent_desc:0 "A Regent is the name for a [diarch|E] during a [regency|E].\n\nA [ruler|E] can designate a Regent before a Regency occurs. Otherwise, the candidate with the highest [regent_succession_score|E] is automatically chosen." + + # For stapling to the bottom of new diarchy types. + variant_diarchs_replace_regents_boilerplate: "#WEAK As a $game_concept_ruler$ can only have one $game_concept_diarch$ at a time, they'll remain in the event that a [regency|E] would occur.#!" + + game_concept_vizier: "Vizier" + game_concept_viziers: "Viziers" + game_concept_vizierate: "Vizierate" + game_concept_vizier_desc: "A $game_concept_vizier$ is a type of [diarch|E] that [clan|E] [rulers|E] may voluntarily appoint to help boost their [income|E]. They have less to [diarch_powers|E] but can be very difficult to remove.\n\n$game_concept_viziers$ grant their [liege|E] bonus [tax_jurisdictions|E] scaling to their [stewardship|E], and increase the [aptitude|E] of [tax_collectors|E] according to how much the [scales_of_power|E] favor them.\n\nCrucially, $game_concept_lieges$ can drain $game_concept_viziers$ of their [gold_i][gold|E] via the $mulct_vizier_interaction$ [interaction|E].\n\n#WEAK Being empowered civil servants, $game_concept_viziers$ are not considered a prestigious position for [nobles|E] despite their influence. Their successor is picked according to [vizier_succession_score|E].#!\n\n$variant_diarchs_replace_regents_boilerplate$" + game_concept_confidant: "$councillor_vizier$" + game_concept_confidant_desc: "$councillor_vizier_desc$" + + game_concept_vizier_succession_score: "Vizier Succession Score" + game_concept_vizier_succession_score_desc: "In a [vizierate|E], the next $game_concept_vizier$ is picked based on which candidate has the highest $game_concept_vizier_succession_score$.\n\nProspective candidates may occasionally try to convince the [ruler|E] to let them replace the incumbent in exchange for [gold|E].\n\n#WEAK This allows only landless and [baron|E]-[title_tier|E] [characters|E], favoring those with strong [diplomacy|E], [stewardship|E], and [intrigue|E], as well as [traits|E] that make for a good civil servant.\n\n[relations|E] with the incumbent $game_concept_vizier$ or the [liege|E]'s [spouses|E], [concubines|E], and [adult|E] landless [children|E] can drastically affect the score.#!" + + game_concept_vizier_extravagance: "Vizier Extravagance" + game_concept_vizier_extravagances: "Vizier Extravagances" + game_concept_vizier_extravagance_extravagance: "Extravagance" + game_concept_vizier_extravagance_extravagances: "Extravagances" + game_concept_vizier_extravagance_desc: "Whilst in office, [viziers|E] will spend their [gold|E] on increasingly ornate $game_concept_vizier_extravagance_extravagance$ [modifiers|E], pampering themselves and the other social elite of their [liege|E]'s [capital|E].\n\nThe $game_concept_liege$ may loot these $game_concept_modifiers$ by using the $mulct_vizier_interaction$ [interaction|E], transforming them into $game_concept_gold$ the $game_concept_vizier$ is forced to transfer.\n\n#WEAK When a $game_concept_vizier$ stops [sharing_power|E], they lose the ability to maintain their extravagant lifestyle, and any remaining $game_concept_modifiers$ are lost.\n\nLooting more and later tiers provides more $game_concept_gold$ — the four tiers of $game_concept_vizier_extravagance_extravagance$ are:\n$EFFECT_LIST_BULLET$ $vizier_extravagance_t1_title$\n$EFFECT_LIST_BULLET$ $vizier_extravagance_t2_title$\n$EFFECT_LIST_BULLET$ $vizier_extravagance_t3_title$\n$EFFECT_LIST_BULLET$ $vizier_extravagance_t4_title$#!" + + game_concept_co_rulership: "Co-Rulership" + game_concept_co_rulerships: "Co-Rulerships" + game_concept_co_ruler: "Co-Ruler" + game_concept_co_rulers: "Co-Rulers" + game_concept_co_rulership_desc: "$game_concept_co_rulers$ are a form of [diarchies|E] where the [diarch|E] is considered to officially and permanently share the rule of the [realm|E].\n\nThey are always the [designated_heir|E] (though may still lose elections), and can only be removed from office by [execution|E] — unless their [liege|E] has an appropriate [culture_tradition|E], in which case they can be maimed instead.\n\nUniquely, when a $game_concept_co_ruler$ executes their $game_concept_liege$ or defeats them in a war, they [usurp|E] their [titles|E]. In [cultures|E] where maiming is an acceptable way to remove a $game_concept_co_ruler$, then the $game_concept_co_ruler$ may also maim their $game_concept_liege$ to $game_concept_usurp$ them.\n\n#WEAK Examples of $game_concept_co_rulerships$ include:\n$EFFECT_LIST_BULLET$[duumvirates|E]\n$EFFECT_LIST_BULLET$[nominal_duumvirates|E]\n$EFFECT_LIST_BULLET$[co_monarchies|E]#!" + + game_concept_duumvirate: "Duumvirate" + game_concept_duumvirates: "Duumvirates" + game_concept_co_emperor: "Co-Emperor" + game_concept_co_emperors: "Co-Emperors" + game_concept_duumvirate_desc: "A $game_concept_duumvirate$ is the rule of one [empire|E] by two [characters|E]. A senior emperor (the [liege|E]), and a junior emperor (the $game_concept_co_emperor$).\n\nThey generate passive [influence|E] for both themselves and their senior emperor. How much exactly scales up every [EmptyScope.ScriptValue('co_emperor_scale_years_in_job_value')|0] years in the job, including any time they spent as [junior_emperor|E].\n\nIn practice, most power still rests in the hands of the $game_concept_liege$ who actually holds the imperial title rather than their [diarch|E], but the $game_concept_co_emperor$ does have access to several powerful ways to affect the [realm|E] & is a cheaper candidate to promote for [administrative|E] positions.\n\nNotably, $game_concept_co_emperors$ can use the [imperial_expedition_cb|E] [casus_belli|E] at higher levels of [scales_of_power|E] swing.\n\n#WEAK $game_concept_co_emperors$ are able to [usurp|E] their senior emperor via ritually maiming them.#!" + + game_concept_nominal_duumvirate: "Nominal Duumvirate" + game_concept_nominal_duumvirates: "Nominal Duumvirates" + game_concept_junior_emperor: "Nominal Co-Emperor" + game_concept_junior_emperors: "Nominal Co-Emperors" + game_concept_nominal_duumvirate_desc: "A $game_concept_duumvirate$ is the rule of one [empire|E] by two [characters|E]. A senior emperor (the [liege|E]), and a junior emperor (the $game_concept_junior_emperor$).\n\nThey are considered to be $game_concept_nominal_duumvirates$ when the junior emperor is a [child|E] who cannot effectively rule, but will transition into being full [duumvirates|E] when they reach adulthood.\n\n$game_concept_junior_emperors$ generate passive [influence|E] for both themselves and their senior emperor. How much exactly scales up every [EmptyScope.ScriptValue('co_emperor_scale_years_in_job_value')|0] years in the job, carrying over when they become a full $game_concept_co_emperor$.\n\n#WEAK Appointing a $game_concept_child$ $game_concept_junior_emperor$ marks them as being trained to one day likely be the senior emperor. The more practice they get, the more training they receive.\n\nThis is represented as additional [skill|E] distributed to them when they become an [adult|E], depending on their [scales_of_power|E] swing.\n\nChildren do not receive [mandate|E] events.#!" + + game_concept_co_monarchy: "Co-Monarchy" + game_concept_co_monarchies: "Co-Monarchies" + game_concept_co_monarch: "Co-Monarch" + game_concept_co_monarchs: "Co-Monarchs" + game_concept_co_monarchy_desc: "$game_concept_co_monarchies$ are a type of [diarchy|E] that provides [feudal|E] rulers with a way to select a [designated_heir|E] even in earlier [eras|E].\n\nThe cost for this is entering into a permanent $game_concept_diarchy$ agreement with them, where they will have easier access to many of the same powers as an [entrenched_regent|E].\n\n#WEAK $game_concept_co_monarchs$ are only available to [kings|E] and [emperors|E].#!" + + game_concept_regency:0 "Regency" + game_concept_regencies:0 "Regencies" + game_concept_regency_possessive:0 "Regency's" + game_concept_regencies_possessive:0 "Regencies'" + game_concept_regency_desc:2 "A Regency is a special form of [diarchy|E] for when the [ruler|E] is not able to rule their [realm|E] on their own.\n\nIt generally occurs if the Ruler is a [child|E], [imprisoned|E], [GetTrait('incapable').GetName( GetNullCharacter )], or attending an [activity|E] outside their Realm.\n\nA $game_concept_regency$ that persists too long may become an [entrenched_regency|E]." + + game_concept_regency_veto:0 "Diarchy Veto" + game_concept_veto:0 "Veto" + game_concept_regency_veto_desc:0 "When a [diarch|E] uses their [diarch_powers|E], their [liege|E] may use their Diarchy Veto to stop them, at the cost of [prestige|E]" + + game_concept_regent_succession_score:0 "Regency Succession Score" + game_concept_regent_succession_score_desc:1 "In a [regency|E], the next [regent|E] is picked based on which candidate has the highest $game_concept_regent_succession_score$.\n\nIf the [ruler|E] of the [realm|E] designates a Regent, they will override the succession order and be chosen instead.\n\n#WEAK This favors [characters|E] related to the $game_concept_ruler$, especially landless [family|E] at their [court|E] and the politically savvy.#!" + + game_concept_diarch_power:0 "Borrowed Power" + game_concept_diarch_powers:0 "Borrowed Powers" + game_concept_diarch_power_power:0 "Power" + game_concept_diarch_power_powers:0 "Powers" + game_concept_diarch_power_possessive:0 "Borrowed Power's" + game_concept_diarch_powers_possessive:0 "Borrowed Powers'" + game_concept_diarch_power_power_possessive:0 "Power's" + game_concept_diarch_power_powers_possessive:0 "Powers'" + game_concept_diarch_power_desc:2 "A [diarch|E] in an active [power_sharing|E] has access to special $game_concept_diarch_powers$.\n\nThese are special [character_interaction|E]s that mimic those their [liege|E] have, or are other abuses of power. Examples include [revoking|E] [titles|E] from fellow [vassals|E], or siphoning away [gold|E] from their Liege.\n\nMany $game_concept_diarch_powers$ give the Liege an opportunity to [veto|E] them." + game_concept_trilateral_interaction: "Trilateral Interaction" + game_concept_trilateral_interactions: "Trilateral Interactions" + game_concept_trilateral_interaction_desc: "$game_concept_trilateral_interactions$ require not only an approval of a recipient, but also of a third party.\n\nAn example would be [diarch_powers|E], where a [liege|E] may use their [regency_veto|E]." + + game_concept_mandate:0 "Mandate" + game_concept_mandates:0 "Mandates" + game_concept_mandate_possessive:0 "Mandate's" + game_concept_mandates_possessive:0 "Mandates'" + game_concept_mandate_desc:2 "$game_concept_mandates$ are useful tasks a [liege|E] can set for their [diarch|E] when [sharing_power|E].\n\nSimilarly to [councillor_tasks|E], the $game_concept_liege$ selects a $game_concept_mandate$ and then slowly receives benefits from it.\n\nWhen a $game_concept_diarch$ does their job well, they both swing the [scales_of_power|E] towards themselves #EMP and#! generate [strife|E] with their fellow [vassals|E].\n\nHow much benefit the $game_concept_liege$ receives depends on their $game_concept_diarch_possessive$ [diarch_aptitude|E] and [diarch_loyalty|E]." + + game_concept_diarch_aptitude:2 "Diarch Aptitude" + game_concept_diarch_aptitude_desc:2 "$game_concept_diarch_aptitude$ governs how well a [diarch|E] achieves each [mandate|E] set by their [liege|E].\n\nBoth [skills|E] and [personality_traits|E] play a role. For instance, a [GetTrait('greedy').GetName(GetNullCharacter)] $game_concept_diarch$ tasked with the '$fill_coffers_mandate$' Mandate may not send as much [gold|E] to their Liege.\n\n#WEAK [diarchs|E] are well-suited to a $game_concept_mandate$ when they have around 40+ $game_concept_aptitude$ for it.#!" + + game_concept_diarch_loyalty:0 "Loyalty" + game_concept_diarch_loyalty_explicit:0 "Diarch Loyalty" + game_concept_diarch_loyal:0 "Loyal" + game_concept_diarch_loyalty_desc:2 "A [diarch|E]'s $game_concept_diarch_loyalty$ decides how likely it is they will abuse their powers, at their [liege|E]'s or the [realm|E]'s expense.\n\n$DIARCHY_WINDOW_VISIBLY_LOYAL$ $game_concept_diarchs$ refrain from using [diarch_powers|E], try to fulfil the [mandate|E] set for them dutifully, and give up their power willingly when asked.\n\n$DIARCHY_WINDOW_VISIBLY_DISLOYAL$ $game_concept_diarchs$ use $game_concept_diarch_powers$ liberally, try to fulfil their $game_concept_mandate$ in order to swing the [scales_of_power|E] in their direction, and may refuse to give up power if the $game_concept_scales_of_power_scales$ are swung heavily enough towards them.\n\n$DIARCHY_WINDOW_UNKNOWN_LOYALTY$ $game_concept_diarchs$ might use $game_concept_diarch_powers$, will generally either split $game_concept_mandate$ benefits with their $game_concept_liege$ or ignore their $game_concept_mandate$ entirely, and might need bribing to give up their office if the $game_concept_scales_of_power$ suit them." + + game_concept_diarch_succession:0 "Succession" + game_concept_diarch_succession_explicit:0 "Diarch Succession" + game_concept_diarch_succession_desc:0 "$game_concept_diarch_succession_explicit$ governs which of a [liege|E]'s direct [vassals|E] or [courtiers|E] is automatically made [diarch|E] when one is needed.\n\nThis happens either because a $game_concept_liege$ begins [diarchy|E] or because the current $game_concept_diarch$ dies or is removed from office.\n\n#weak Different types of $game_concept_power_sharing$ may calculate succession order differently — in a [regency|E], landless [characters|E] with strong personal connections to their $game_concept_liege$ tend to dominate.\n\nSpeaking the $game_concept_liege$'s [language|E] (and [court_language|E], if they have one) is almost always crucial.#!" + + game_concept_scales_of_power:0 "Scales of Power" + game_concept_scales_of_power_scales:0 "Scales" + game_concept_scales_of_power_desc:2 "During [power_sharing|E], the balance of power between the [liege|E] and their [diarch|E] is measured on the $game_concept_scales_of_power$.\n\nAs the $game_concept_scales_of_power_scales$ tip towards the $game_concept_diarch$, they unlock [diarch_powers|E] and may add costs to the Liege's [diarch_affected_actions|E].\n\nAs they tip towards the $game_concept_liege$, it instead makes it easier for the Liege to end the [diarchy|E].\n\nThe $game_concept_scales_of_power_scales$ can be swung by:\n$EFFECT_LIST_BULLET$Using the $swing_scales_currency_interaction$ [character_interaction|E] against the opposing party\n$EFFECT_LIST_BULLET$As the $game_concept_diarch$, serving your $game_concept_liege$ well (however cynically) in [mandate|E] events" + + + game_concept_entrenched_regency:0 "Entrenched Regency" + game_concept_entrenched_regency_entrenched:0 "Entrenched" + game_concept_entrenched_regency_regency:0 "Regency" + game_concept_entrenched_regent:0 "Entrenched Regent" + game_concept_entrenched_regents:0 "Entrenched Regents" + game_concept_entrenched_regency_entrench:0 "Entrench" + game_concept_entrenched_regencies:0 "Entrenched Regencies" + game_concept_entrenched_regency_desc:3 "If a [regency|E] lasts too long, it may become Entrenched, and the [regent|E] becomes even more powerful compared to their [liege|E].\n\nThe benefits the [regent|E] gets from the [scales_of_power|E] become much more powerful.\n\nTo end an $game_concept_entrenched_regency$, the Regent must accept a gift from their Liege, or the Liege must tip the Scales in their favor." + + game_concept_diarch_affected_actions:0 "Mundane Actions" + game_concept_diarch_affected_actions_desc:3 "When the [scales_of_power|E] favor the [diarch|E] during [power_sharing|E], some [interactions|E] the [liege|E] takes may begin to cost [prestige|E].\n\nThe affected actions are:\n$EFFECT_LIST_BULLET$ [revoking|E] a [title|E]\n$EFFECT_LIST_BULLET$ [retracting|E] a [vassal|E]\n$EFFECT_LIST_BULLET$ [imprisoning|E] [characters|E]\n$EFFECT_LIST_BULLET$ [executing|E] $game_concept_characters$ #weak (unless the $game_concept_liege$'s [faith|E] practices some form of human sacrifice)#!" + + + ######## GRAND ACTIVITIES ETC + + game_concept_grand_activity:0 "Grand Activity" + game_concept_grand_activities:0 "Grand Activities" + game_concept_grand_activity_desc:0 "Splendid displays of wealth and magnificence, $game_concept_grand_activities$ are by nature larger and #EMP grander#! than regular [activities|E]. They may have multiple [activity_phases|E] and offer more chances for customization in planning.\n\nTours provide the opportunity to visit multiple [vassals|E] in your [realm|E] while Tournaments offer a variety of [contests|E] to host." + + game_concept_special_guest:0 "Special Guest" + game_concept_special_guests:0 "Special Guests" + game_concept_honorary_guest:0 "Honorary Guest" + game_concept_honorary_guest_desc:0 "$honorary_guest_desc$" + game_concept_special_guest_desc:0 "Special Guests hold a special place of honor at [grand_activities|E]. Honor someone at your [GetActivityType( 'activity_feast' ).GetName] or select a $special_guest_champion$ to represent you at your [GetActivityType( 'activity_tournament' ).GetName]!\n\nThey are more likely to accept your invitation and any activity to which they are invited will not begin until they arrive." + + game_concept_contest:0 "Contest" + game_concept_contests:0 "Contests" + game_concept_contest_desc:3 "A [GetActivityType( 'activity_tournament' ).GetName] is comprised of a series of $game_concept_contests$, selected by the [activity_host|E], where [contest_qualifying|E] [contestants|E] can compete to win [prizes|E] and other rewards.\n\nEach $game_concept_contest$ uses one of four different ways to determine a winner: [contest_category_versus|E], [contest_category_turn|E], [contest_category_team|E], and [contest_category_race|E].\n\nYour chance of winning a $game_concept_contest$ is determined by your [skills|E], [traits|E], preparation, and other factors. Eligibility to enter physical $game_concept_contests$ is determined by health and sex, based on the [culture|E] and [faith|E] of the [activity_host|E]." + game_concept_prize:0 "Prize" + game_concept_prizes:0 "Prizes" + game_concept_prize_desc:4 "$game_concept_prizes$ are [artifacts|E] awarded to the victors of [GetActivityType( 'activity_tournament' ).GetName] [contests|E] with a single winner.\n\nThe quality of the $game_concept_prize$ depends on the options chosen by the [activity_host|E] and the [era|E]." + game_concept_contest_category_team:1 "Teams" + game_concept_contest_category_team_desc:1 "In $game_concept_contest_category_team$ [contests|E], all [contest_qualifying|E] [contestants|E] on the team with the most combined points at the end of the contest receive rewards.\n\n$game_concept_contest_category_team$ Contests:\n$EFFECT_LIST_BULLET$Melee" + game_concept_contest_category_versus:1 "Knock-Out" + game_concept_contest_category_versus_desc:1 "The winner of a $game_concept_contest_category_versus$ [contest|E] is the last one remaining after three [contest_rounds|E] between [contest_qualifying|E] [contestants|E].\n\n$game_concept_contest_category_versus$ Contests:\n$EFFECT_LIST_BULLET$Wrestling\n$EFFECT_LIST_BULLET$Duel\n$EFFECT_LIST_BULLET$Joust\n$EFFECT_LIST_BULLET$Board Games" + game_concept_contest_category_turn:1 "Turns" + game_concept_contest_category_turn_desc:1 "The winner of a $game_concept_contest_category_turn$ [contests|E] is the [contest_qualifying|E] [contestant|E] with the most points at the end of the competition.\n\n$game_concept_contest_category_turn$ Contests:\n$EFFECT_LIST_BULLET$Archery\n$EFFECT_LIST_BULLET$Recital" + game_concept_contest_category_race:0 "Race" + game_concept_contest_category_race_desc:1 "The winner of $game_concept_contest_category_race$ [contests|E] is the [contest_qualifying|E] [contestant|E] whose entered horse has taken first place at the end of the race.\n\n$game_concept_contest_category_race$ Contests:\n$EFFECT_LIST_BULLET$Horse Race" + game_concept_contest_round:0 "Contest Round" + game_concept_contest_rounds:0 "Contest Rounds" + game_concept_contest_round_desc:0 "[contest_category_versus|E] [contests|E] determine a winner by pairing all [contest_qualifying|E] [contestants|E] against each other in knock-out bouts until only one remains.\n\nThere are three rounds: quarter-finals, semi-finals, and the final." + game_concept_contest_qualification:0 "Qualification" + game_concept_contest_qualify:0 "Qualify" + game_concept_contest_qualifier:0 "Qualifier" + game_concept_contest_qualifiers:0 "Qualifiers" + game_concept_contest_qualifying:0 "Qualifying" + game_concept_contest_qualifies:0 "Qualifies" + game_concept_contest_qualification_desc:0 "While a [GetActivityType( 'activity_tournament' ).GetName] will attract many eligible [contestants|E], only a small number will Qualify for each [contest|E], with a chance of winning glory and its [prize|E].\n\nTo guarantee Qualification, your [progress_to_victory|E] must be above the threshold when the Contest begins." + game_concept_contestant:0 "Contestant" + game_concept_contestants:0 "Contestants" + game_concept_contestant_desc:0 "In order to compete in [GetActivityType( 'activity_tournament' ).GetName] [contests|E], you must fulfill its requirements. Board Games allow all characters to compete, while others, like Wrestling, depend on Martial rules.\n\nNon-competing characters will be [spectators|E], and potential [contestants|E] may opt-out of participating if they wish to spectate.\n\nEligibility to enter Contests is determined by gender and health, based on the host's [culture|E] and [religion|E]." + game_concept_spectator:0 "Spectator" + game_concept_spectators:0 "Spectators" + game_concept_spectating:0 "Spectating" + game_concept_spectate:0 "Spectate" + game_concept_spectator_desc:0 "Any character who is not permitted to compete in a [contest|E] will [spectate|E] instead.\n\nIt is also possible to potential [contestants|E] to opt-out instead of competing." + + game_concept_progress_to_victory:0 "Progress to Victory" + game_concept_progress_to_victory_desc:1 "An abstraction of your likelihood to win a given [contest|E] relative to the other contestants, based on your [skills|E], [health|E], and [traits|E]. For example, a [GetTrait('giant').GetName( GetNullCharacter )] with high [prowess|E] has an advantage in physical contests fought on foot, such as Wrestling.\n\nA minimum $game_concept_progress_to_victory$ is required to guarantee [contest_qualification|E] for a [contest|E]. Visit [locales|E] for opportunities to improve your chances and sabotage your opponents.\n\nThe Tournament #V Leaderboard#! displays all contestant's current $game_concept_progress_to_victory$." + game_concept_progress_to_victory_locale_tt:0 "Visit [locales|E] for opportunities to improve your chances or sabotage your opponents'." + + game_concept_contest_aptitude:0 "Contest Aptitude" + game_concept_contest_aptitude_desc:0 "Different [contests|E] require different talents: Foot, Horse, Bow, Wit, or a combination.\n\nYour aptitude is derived from your [skills|E], [health|E], [traits|E], and [GetTrait('tourney_participant').GetName( GetNullCharacter )] [trait_level_track_xp|E].\n\nFor example, a [GetTrait('giant').GetName( GetNullCharacter )] with high [prowess|E] has a natural advantage in a Wrestling contest." + + game_concept_locale:0 "Locales" + game_concept_locales:0 "Locales" + game_concept_locale_desc:3 "You may choose how you explore the [GetActivityType( 'activity_tournament').GetName] while the [contests|E] are being prepared.\n\nEach Locale offers opportunities to socialize with guests, improve [progress_to_victory|E], or sabotage [contestants|E].\n\nIf a Locale is not selected, you will visit one at random after a short period of time." + + game_concept_travel:0 "Travel" + game_concept_travels:0 "Travels" + game_concept_traveling:0 "Traveling" + game_concept_traveled: "Traveled" + game_concept_travel_desc:0 "$game_concept_travel$ is the means by which a [character|E] gets from one [location|E] to another, primarily to attend [activities|E].\n\nThere are numerous ways to plan your journey like choosing a [GetCourtPositionType('travel_leader_court_position').GetName()] to hire, selecting [travel_options|E], and customizing your route. You will meet many interesting characters along your path, but be wary of [travel_danger|E] that may lay in wait." + game_concept_travel_option:0 "Travel Option" + game_concept_travel_options:0 "Travel Options" + game_concept_travel_option_desc:0 "An option you pick when planning your [travel|E] to enhance or modify the journey you are about to set out on." + game_concept_travel_danger:0 "Danger" + game_concept_travel_danger_i: "@travel_danger_icon!" + game_concept_travel_danger_desc:0 "On your [travels|E] you might pass through dangerous lands, for example deserts or swamps, that might impede your journey.\n\nYou can mitigate the risks of Danger by improving your [travel_safety|E]. You do this by investing in [travel_options|E] or by hiring a [GetCourtPositionType('travel_leader_court_position').GetName()].\n\nSeveral [culture_traditions|E] reduce or remove the risks of certain types of Danger." + game_concept_travel_safety:0 "Safety" + game_concept_travel_safety_desc:0 "Having a high Safety value will help you avoid [travel_danger|E] during your [travels|E]. Your Safety is affected by your [skills|E] as well as those of your [GetCourtPositionType('travel_leader_court_position').GetName()].\n\n$min_travel_contribution$" + game_concept_travel_speed:0 "Speed" + game_concept_travel_speed_desc:0 "Having a high Speed while [traveling|E] will enable you to get to your destination faster. Your Speed is affected by your [skills|E] as well as those of your [GetCourtPositionType('travel_leader_court_position').GetName()].\n\n$min_travel_contribution$" + game_concept_entourage:0 "Entourage" + game_concept_entourage_desc:0 "It's dangerous to go alone, so you should bring along some companions in your Entourage. Everyone who [travels|E] with you is part of your Entourage and share in the challenges you may face on your journey.\n\nYour [GetCourtPositionType('travel_leader_court_position').GetName()] is the leader of the Entourage and manages your travel plans.\n\nSome [characters|E] are added to your Entourage by default when planning to travel. [travel_options|E] and [activity_options|E] offer additional ways to add characters." + min_travel_contribution: "A [character_possessive|lE] contribution can never be lower than #HIGH 0#!." + + game_concept_point_of_interest:0 "Point of Interest" + game_concept_points_of_interest: "Points of Interest" + game_concept_point_of_interest_desc:0 "A $game_concept_point_of_interest$ is a location in the world that is worth visiting. When you visit that location for the first time, you will gain the benefits associated with it." + + game_concept_vassal_stance:0 "Vassal Stance" + game_concept_vassal_stances:0 "Vassal Stances" + game_concept_preferred_heir:0 "Preferred Heir" + game_concept_unpreferred_heir:0 "Unpreferred Heir" + game_concept_preferred_heirs:0 "Preferred Heirs" + game_concept_unpreferred_heirs:0 "Unpreferred Heirs" + game_concept_vassal_stance_desc:1 "Every [vassal|E] has a Vassal Stance which affects the [opinion|E] they have with you as their [liege|E], and which [heir|E] they prefer as successor to the [realm|E].\n\nVassals in the same stance will like and dislike the same things. For example; all [GetVassalStance( 'glory_hound' ).GetTextIcon][GetVassalStance( 'glory_hound' ).GetName] Vassals dislike when you lose [wars|E].\n\nEvery Vassal Stance prefers one specific Heir. Upon succession, each preferred Heir will have lower [legitimacy_expectations|E] with the Vassals of that stance.\n\n#low The Vassal Stances are:#!\n$EFFECT_LIST_BULLET$[GetVassalStance( 'courtly' ).GetTextIcon][GetVassalStance( 'courtly' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'parochial' ).GetTextIcon][GetVassalStance( 'parochial' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'glory_hound' ).GetTextIcon][GetVassalStance( 'glory_hound' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'zealot' ).GetTextIcon][GetVassalStance( 'zealot' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'minority' ).GetTextIcon][GetVassalStance( 'minority' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'barons_and_minor_landholders' ).GetTextIcon][GetVassalStance( 'barons_and_minor_landholders' ).GetName]\n$EFFECT_LIST_BULLET$[GetVassalStance( 'belligerent' ).GetTextIcon][GetVassalStance( 'belligerent' ).GetName]" + + game_concept_personality_i:0 "@personality_icon!" + game_concept_warlike_i:0 "@warlike_icon!" + game_concept_unpredictable_i:0 "@unpredictable_icon!" + game_concept_cautious_i:0 "@cautious_icon!" + game_concept_builder_i:0 "@builder_icon!" + game_concept_conqueror_i: "@conqueror_icon!" + game_concept_pious_builder_i: "@pious_builder_icon!" + game_concept_ai_pious_builder_personality: "Pious Builder" + game_concept_ai_pious_builder_personality_desc: "A $game_concept_ai_pious_builder_personality$ wants to invest all of their [gold|E] into increasing their [piety|E].\n\nThey will spend their treasury to fund religious and ceremonial [buildings|E], [great_projects|E], [activities|E] and [decisions|E], and often construct more [pious_buildings|E] and [temple|E]- or [temple_citadel|E] [holdings|E]. They only save up gold if directly threatened, such as by a strong [faction|E].\n\n$game_concept_ai_pious_builder_personality$s are more likely to create and promote holy [legends|E].\n\nZealous [AddLocalizationIf( HasDlcFeature( 'all_under_heaven' ), 'game_concept_ai_pious_builder_personality_desc_or_mandala' )][rulers|E] with a penchant for [virtue|E] and no particular inclination for [war|E], tend to be $game_concept_ai_pious_builder_personality$s.\nCommon Traits include [GetTrait('zealous').GetName( GetNullCharacter )], [GetTrait('forgiving').GetName( GetNullCharacter )], [GetTrait('improvident').GetName( GetNullCharacter )], [GetTrait('humble').GetName( GetNullCharacter )], [GetTrait('patient').GetName( GetNullCharacter )], [GetTrait('diligent').GetName( GetNullCharacter )], and [GetTrait('generous').GetName( GetNullCharacter )]. Rulers with the [GetFocus('learning_theology_focus').GetName] also tend to be $game_concept_ai_pious_builder_personality$s." + game_concept_ai_pious_builder_personality_desc_or_mandala: "or [mandala|E] " + game_concept_ai_warlike_personality:0 "Warlike" + game_concept_ai_warlike_personality_desc: "A $game_concept_ai_warlike_personality$ [ruler|E] wants to be ready to declare [war|E], always. They will save [gold|E] for [war|E] before investing it in developing their [realm|E]. If a $game_concept_ai_warlike_personality$ Ruler is at peace for an extended period of time, they will use the Gold in their war chest to build [buildings|E].\n\n$game_concept_ai_warlike_personality$ rulers are more likely to create and promote heroic [legends|E].\n\nBold and greedy Rulers tend to be Warlike.\nCommon Traits include [GetTrait('wrathful').GetName( GetNullCharacter )], [GetTrait('impatient').GetName( GetNullCharacter )], [GetTrait('sadistic').GetName( GetNullCharacter )], [GetTrait('ambitious').GetName( GetNullCharacter )], [GetTrait('vengeful').GetName( GetNullCharacter )], [GetTrait('irritable').GetName( GetNullCharacter )], and [GetTrait('zealous').GetName( GetNullCharacter )]." + game_concept_ai_cautious_personality:0 "Cautious" + game_concept_ai_cautious_personality_desc: "A $game_concept_ai_cautious_personality$ [ruler|E] wants to be prepared for [war|E] to be declared upon them. They are somewhat averse to declaring offensive [war|E]s, instead preferring a slow buildup. They keep a buffer of [gold|E] to help defend themselves, and invest into [buildings|E] and [men_at_arms|E] to help them feel safe.\n\n$game_concept_ai_cautious_personality$ rulers are less likely to create and promote [legends|E].\n\nReserved and careful Rulers tend to be $game_concept_ai_cautious_personality$.\nCommon Traits include [GetTrait('patient').GetName( GetNullCharacter )], [GetTrait('calm').GetName( GetNullCharacter )], [GetTrait('craven').GetName( GetNullCharacter )], [GetTrait('paranoid').GetName( GetNullCharacter )], and [GetTrait('content').GetName( GetNullCharacter )]. They will never be [GetTrait('fickle').GetName( GetNullCharacter )]." + game_concept_ai_conqueror_personality: "Conqueror" + game_concept_ai_conquerors_personality: "Conquerors" + game_concept_ai_conqueror_personality_desc: "A $game_concept_ai_conqueror_personality$ wants to expand their [realm|E] through [war|E], at any cost. They will invest all of their [gold|E] into the [war_chest|E] or to buy [men_at_arms|E].\n\nThey tend to declare many more [wars|E] than normal, and are rather untrustworthy [allies|E]. They forsake most frivolous pleasures in life, such as hosting or going to [activities|E] and sponsoring [inspirations|E] — to save [gold|E] for crushing their enemies. They will only use Activities to gain enough [prestige|E] and [piety|E] to go to [war|E].\n\nAny non-[ai_cautious_personality|E] [ruler|E] has the potential to become a $game_concept_ai_conqueror_personality$, but normally there are no more than a handful of Rulers worldwide with this archetype." + game_concept_ai_economical_boom_personality:0 "Builder" + game_concept_ai_economical_boom_personality_desc: "A $game_concept_ai_economical_boom_personality$ wants to invest all of their [gold|E] into the [realm|E]. They will empty their treasury to fund [buildings|E] and [men_at_arms|E], and often construct more [economic_buildings|E] and [holdings|E]. They only save up gold if directly threatened, such as by a strong [faction|E].\n\n$game_concept_ai_economical_boom_personality$ rulers are slightly less likely to create and promote [legends|E].\n\nBold Rulers with a propensity for building and no particular inclination for [war|E] tend to be $game_concept_ai_economical_boom_personality$s.\nCommon Traits include [GetTrait('calm').GetName( GetNullCharacter )], [GetTrait('patient').GetName( GetNullCharacter )], [GetTrait('diligent').GetName( GetNullCharacter )], [GetTrait('generous').GetName( GetNullCharacter )], [GetTrait('stubborn').GetName( GetNullCharacter )], and [GetTrait('profligate').GetName( GetNullCharacter )]. Rulers with the [GetFocus('stewardship_domain_focus').GetName] also tend to be $game_concept_ai_economical_boom_personality$s." + game_concept_ai_economical_unpredictable_personality:0 "Unpredictable" + game_concept_ai_economical_unpredictable_personality_desc: "An $game_concept_ai_economical_unpredictable_personality$ [ruler|E] has no [traits|E] pushing them towards any specific Economical Archetype and may decide upon any strategy.\n\nThey can choose to temporarily invest heavily in [buildings|E] like a [ai_economical_boom_personality|E], or to build up their [realm|E] slowly with a buffer of [gold|E]. They go to [war|E] at a regular pace." + + game_concept_trait_level_track:1 "Trait Path" + game_concept_trait_level_track_desc:1 "Some [traits|E] offer several paths, each of which will improve the Trait in different ways.\n\nEarning [trait_level_track_xp|E] is required to move further down a path." + game_concept_trait_level_track_xp:1 "Trait Experience" + game_concept_trait_level_track_xp_desc:1 "Experience is required in order to move further down a [trait_level_track|E] and improve the bonuses the [trait|E] provides. " + + game_concept_hunt_sighting:0 "Hunt Sighting" + game_concept_hunt_sightings:0 "Hunt Sightings" + game_concept_hunt_sighting_no_prefix:0 "Sighting" + game_concept_hunt_sightings_no_prefix:0 "Sightings" + game_concept_hunt_sighting_desc:0 "A $game_concept_hunt_sighting$ is a report of specific prestigious animals spotted in a [county|E], which may be pursued in a [GetActivityType('activity_hunt').GetName] held there.\n\n[GetCourtPositionType('master_of_hunt_court_position').GetName()] [court_position|E] will search for $game_concept_hunt_sightings_no_prefix$." + + + game_concept_stationed_regiment:0 "Stationed Regiment" + game_concept_stationed_regiment_desc:0 "A [men_at_arms|E] [regiment|E] receives bonuses to its effectiveness by being Stationed in a [holding|E].\n\n[buildings|E] can further increase these bonuses — sometimes for any type of Men-at-Arms, but most commonly for one or two. For example, [GetBuilding('stables_01').GetName] provides a bonus to Stationed [light_cavalry|E] and [heavy_cavalry|E].\n\nYou can Station at any time except during [war|E], or if the Holding is [occupied|E]. If a Holding is lost, any Stationed Men-at-Arms will be unstationed." + game_concept_stationed:0 "Stationed" + game_concept_station:0 "Station" + game_concept_station_regiment:0 "Station Regiment" + game_concept_stationed_holding:0 "Stationed Holding" + + game_concept_tour:0 "Tour" + game_concept_tour_desc:0 "A [grand_activity|E] in which a [liege|E] pays a royal visit to a collection of their [vassals|E] to reap rewards such as [gold|E], [dread|E], [opinion|E], [control|E], and [cultural_acceptance|E]." + game_concept_tours:0 "Tours" + game_concept_royal_tour:0 "Royal Tour" + game_concept_royal_tours:0 "Royal Tours" + game_concept_grand_tour:0 "Grand Tour" + game_concept_grand_tours:0 "Grand Tours" + game_concept_culture_festival:0 "Culture Festival" + game_concept_cultural_festival_desc:0 "An [activity_phase|E] during a [royal_tour|E] in which a [vassal|E] is expected to entertain their [liege|E], which often results in an increase in [county_opinion|E] and [cultural_acceptance|E]." + game_concept_cultural_festival:0 "Cultural Festival" + game_concept_cultural_festivals:0 "Cultural Festivals" + game_concept_culture_festivals:0 "Culture Festivals" + game_concept_hosted_dinner:0 "Hosted Dinner" + game_concept_hosted_dinner_desc:0 "An [activity_phase|E] during a [royal_tour|E] in which a [vassal|E] is expected to entertain their [liege|E], which often results in an increase in mutually forming [hooks|E] and [relations|E]." + game_concept_hosted_dinners:0 "Hosted Dinners" + game_concept_host_a_dinner:0 "Host a Dinner" + game_concept_tour_the_grounds:0 "Tour the Grounds" + game_concept_tour_the_grounds_desc:0 "An [activity_phase|E] during a [royal_tour|E] in which a [vassal|E] is visited by their [liege|E], which often results in an increase in [control|E] in their [counties|E]." + game_concept_touring_the_grounds:0 "Touring the Grounds" + game_concept_tour_of_the_grounds:0 "Tour of the Grounds" + game_concept_tour_grounds:0 "Tour Grounds" + game_concept_tour_stop:0 "Tour Stop" + game_concept_tour_stop_desc:0 "An [activity_phase|E] during a [royal_tour|E] in which a liege can either: attend a [hosted_dinner|E], [tour_the_grounds|E] of their [vassal|E], or enjoy a [cultural_festival|E]." + game_concept_stop:0 "Stop" + game_concept_stops:0 "Stops" + game_concept_tour_stops:0 "Tour Stops" + game_concept_tour_success:0 "Tour Success" + game_concept_tour_success_desc:0 "A value which determines which rewards you will get at the end of your [grand_tour|E]. You can gain and lose points by selecting certain options at the start of your tour and making decisions which align with your [tour_type|E]." + game_concept_tour_success_points:0 "Tour Success Points" + game_concept_tour_success_point:0 "Tour Success Point" + game_concept_tour_type:0 "Tour Type" + game_concept_tour_type_desc:0 "An option which determines what kind of [tour|E] you're having and which rewards you gain. Tour types include [majesty_tour|E], [intimidation_tour|E], and [taxation_tour|E]." + game_concept_majesty_tour:0 "Majesty Tour" + game_concept_majesty_tour_desc:0 "A [tour_type|E] in which you attempt to sway your [vassals|E] by increasing their [opinion|E]." + game_concept_intimidation_tour:0 "Intimidation Tour" + game_concept_intimidation_tour_desc:0 "A [tour_type|E] in which you attempt to intimidate your [vassals|E], gaining [dread|E] and forcing them out of [factions|E]." + game_concept_taxation_tour:0 "Taxation Tour" + game_concept_taxation_tour_desc:0 "A [tour_type|E] in which you attempt to extract wealth from your [vassals|E], gaining [gold|E]." + + game_concept_accolade:0 "Accolade" + game_concept_accolades:0 "Accolades" + game_concept_accolade_desc:5 "Accolades are honors given to [knights|E] by their [liege|E].\n\nThe Knight who holds an Accolade becomes an [acclaimed_knight|E].\n\nAs the Acclaimed Knight gains [glory|E], the [accolade_rank|E] of their [accolade_types|E] increases, offering stronger bonuses to their Liege.\n\nWhen Acclaimed Knights die, they are replaced via [accolade_succession|E].\n\n[innovations|e] and higher [title_tiers|e] allow [rulers|E] to have more Accolades simultaneously." + + game_concept_acclaimed_knight:0 "Acclaimed Knight" + game_concept_acclaimed_knights:0 "Acclaimed Knights" + game_concept_acclaimed_knight_desc:1 "The [knight|E] holding an [accolade|E].\n\nTo be an Acclaimed Knight, a Knight must be [unlanded|E] or a [baron|E], with at least [EmptyScope.ScriptValue('accolade_prowess_requirement_value')|0V] or more [prowess|E].\n\nAn Acclaimed Knight must be eligible for two [accolade_types|E]; neither can already belong to another of their [liege|e]'s Acclaimed Knights." + + game_concept_accolade_type:0 "Accolade Attribute" + game_concept_accolade_types:0 "Accolade Attributes" + game_concept_accolade_type_desc:1 "An [accolade|E] has a primary and a secondary Attribute, giving bonuses as the [accolade_rank|E] increases.\n\nEach potential [acclaimed_knight|E] is only eligible for certain Attributes, mostly based on their [traits|E]. On [accolade_succession|E], the new Knight must fulfill the Primary Attribute, but the Secondary can be changed, at the loss of [glory|E]. In addition, if an Attribute gives access to [retinue_maa|E], it will only do so if it is the Primary Attribute. \n\nEvery Accolade must have two unique Attributes. A Liege #high cannot#! duplicate Attributes between Accolades." + + game_concept_accolade_succession:0 "Accolade Succession" + game_concept_accolade_succession_desc:1 "Accolade Succession happens when an [accolade|E]'s [acclaimed_knight|e] dies or becomes invalid for the role.\n\nThe Acclaimed Knight is replaced by their Successor, who must be eligible for the Primary [accolade_type|E]. The secondary Attribute can be changed, at the loss of [glory|E].\n\nIf there are no worthy Successors in the court, the #high $call_for_acclaimed_knight_candidates_decision$#! decision can be used to invite suitable candidates." + + game_concept_accolade_rank:0 "Accolade Rank" + game_concept_accolade_ranks:0 "Accolade Ranks" + game_concept_accolade_rank_short:0 "Rank" + game_concept_accolade_rank_desc:1 "An [accolade|e] has #value 6#! progressive Ranks which unlock bonuses specific to its [accolade_types|e], such as [knight_army_modifiers|e].\n\nGaining [glory|E] unlocks each Rank, while losing Glory can cause them to be lost.\n\nOdd-numbered Ranks are provided by the Accolade's Primary Attribute, and even-numbered Ranks by the Secondary." + + game_concept_inactive_accolade:0 "Inactive Accolade" + game_concept_inactive_accolade_desc:1 "[accolades|E] become Inactive when they are invalidated.\n\nAn Accolade becomes inactive if:\n$EFFECT_LIST_BULLET$The [acclaimed_knight|e] or their [ruler|E] no longer fulfills its [accolade_type|e] requirements\n$EFFECT_LIST_BULLET$The Acclaimed Knight dies or leaves their Ruler's [court|e] without a Successor\n$EFFECT_LIST_BULLET$The [ruler|E] manually retires it" + + game_concept_glory:0 "Glory" + game_concept_glory_desc:1 "An [accolade|E]'s Glory increases its [accolade_rank|E].\n\nGlory is gained by the [acclaimed_knight|E] winning [battles|E], defeating warriors, competing in [GetActivityType( 'activity_tournament' ).GetName] [contests|E], and attending [activities|E].\n\nHowever, the Accolade's Glory is lowered when the Acclaimed Knight is involved in losing battles, on [accolade_succession|e], and when the Accolade becomes an [inactive_accolade|E]." + + game_concept_tax_collector: "Tax Collector" + game_concept_tax_collector_desc: "A $game_concept_tax_collector$ enables [tax_jurisdictions|E] to function.\n\nTheir [aptitude|E] determines the amount of [taxes|E] and [levies|E] they collect for their [liege|E]." + game_concept_tax_collectors: "Tax Collectors" + + game_concept_tax_decree: "Tax Decree" + game_concept_tax_decree_desc: "Each [tax_jurisdiction|E] can have a different $game_concept_tax_decree$, modifying the [taxes|E] and [levies|E] contributed by its [taxpayers|E].\n\n$game_concept_tax_decrees$ will often change the [obligations|E] in return of another penalty or boon." + game_concept_tax_decrees: "Tax Decrees" + + game_concept_tax_jurisdiction: "Tax Jurisdiction" + game_concept_tax_jurisdictions: "Tax Jurisdictions" + game_concept_tax_jurisdiction_desc: "A $game_concept_tax_jurisdiction$ is a group of [taxpayers|E] made up of [clan|E] [vassals|E]. Each $game_concept_tax_jurisdiction$ supports up to #V 12#! $game_concept_taxpayers$.\n\nEach $game_concept_tax_jurisdiction$ can have a [tax_decree|E].\n\nThe number of available $game_concept_tax_jurisdictions$ is determined by [rank|E], [traditions|E], and [innovations|E].\n\nA $game_concept_tax_jurisdiction$ requires a [tax_collector|E] to be appointed." + + game_concept_untaxed_jurisdiction: "Untaxed Jurisdiction" + game_concept_untaxed_jurisdictions: "Untaxed Jurisdictions" + game_concept_untaxed_jurisdiction_short: "Untaxed" + game_concept_untaxed_jurisdiction_desc: "An $game_concept_untaxed_jurisdiction$ is a [tax_jurisdiction|E] with [taxpayers|E], but without a [tax_collector|E]. This means that the assigned $game_concept_taxpayers$ will not give any [taxes|E] or [levies|E] to their [liege|E]." + + game_concept_taxpayer: "Taxpayer" + game_concept_taxpayers: "Taxpayers" + game_concept_taxpayer_desc: "$game_concept_taxpayers$ are [clan|E] [vassals|E] that have been assigned to a [tax_jurisdiction|E], and will contribute monthly [tax|E] Income and [levies|E] as long as a [tax_collector|E] is appointed." + game_concept_taxpayer_i: "@tax_collector_icon!" + + game_concept_unassigned_vassal: "Untaxed Vassals" + game_concept_unassigned_vassals: "Untaxed Vassals" + game_concept_unassigned_vassal_short: "Untaxed" + game_concept_unassigned_vassal_desc: "$game_concept_unassigned_vassals$ are [clan|E] [vassals|E] who are not assigned to a [tax_jurisdiction|E] as [taxpayers|E], and therefore not contributing [taxes|E] or [levies|E].\n\nOnce assigned to a $game_concept_tax_jurisdiction$ with a [tax_collector|E], they will start paying monthly." + + game_concept_retinue_maa:0 "Retinue Men-at-Arms" + game_concept_retinue_maa_desc:0 "Some [accolade_types|E] give access to special [men_at_arms|E]. They are unlocked by having an [acclaimed_knight|E] with progress in relevant [GetTrait('tourney_participant').GetName( GetNullCharacter )] [trait_level_track|E] or a relevant [commander_trait|E].\n\nRetinue $game_concept_men_at_arms$ are restricted to one [regiment|E] and have a limited troop count. They are twice as effective at countering other $game_concept_men_at_arms$ and get increasingly better every era." + + game_concept_knight_army_modifier:0 "Knight Army Modifier" + game_concept_knight_army_modifiers:0 "Knight Army Modifiers" + game_concept_knight_army_modifier_desc:0 "An effect applied to any [army|e] which #high contains#! the pertinent [acclaimed_knight|e].\n\nThe [knight|e] need #high not#! be their Army's [commander|e] for their Knight Army Modifier to apply." + + game_concept_piety_level_impact:0 "Level of Devotion Impact" + game_concept_piety_level_impact_desc:0 "Level of Devotion Impact increases or decreases the [modifiers|E] gained from your current [piety_level|E]." + + game_concept_prestige_level_impact:0 "Level of Fame Impact" + game_concept_prestige_level_impact_desc:0 "Level of Fame Impact increases or decreases the [modifiers|E] gained from your current [prestige_level|E]." + + game_concept_hostage: "Hostage" + game_concept_hostages: "Hostages" + game_concept_hostages_possessive: "Hostage's" + game_concept_hostage_desc: "A [close_family_member|E] of a [ruler|E], sent away from their [home_court|E] as an assurance of peace or submission.\n\nThe reputation of $game_concept_rulers$ who declare [war|E] despite sending or receiving a $game_concept_hostage$ will be dramatically damaged, and $game_concept_wardens$ may freely execute the $game_concept_hostages$ of their enemies.\n\nWell-treated $game_concept_hostages$ are likely to become loyal to their $game_concept_warden$, who may gain a [hook|E], or even become [friends|E] with them.\n\n$game_concept_hostages$ must be landless children, siblings, nieces, nephews, or grandchildren of their $game_concept_home_courts_possessive$ $game_concept_ruler$.\n\n$game_concept_wardens$ have a chance to gain a [perpetual_hook|E] on a child $game_concept_hostage$ when they come of age, based on personality, opinion, and years spent at the $game_concept_wardens$ court." + + game_concept_home_court: "Home Court" + game_concept_home_courts: "Home Courts" + game_concept_home_courts_possessive: "Home Court's" + game_concept_home_court_desc: "A [ruler|E] who is a [close_family_member|E] of a [hostage|E] and has sent them to a [warden|E] as an assurance of peace or submission." + + game_concept_warden: "Warden" + game_concept_wardens: "Wardens" + game_concept_wardens_possessive: "Warden's" + game_concept_warden_desc: "A [ruler|E] who has been sent a [hostage|E] by a foreign [home_court|E] as an assurance of peace or submission.\n\nA [warden|E] will accrue [prestige_i|E][prestige|E] over time for each [hostage|E] in their [court|E]." + + game_concept_goliardic_shenanigans: "Goliardic Shenanigans" + game_concept_goliardic_shenanigans_desc: "A character in [GetActivityType('activity_adult_education').GetName] can get up to all sort of mischief when embracing the life of the student. The consequences of their adventures are unpredictable, and include [skill|E] points, lifestyle and stress [traits|E], lifestyle experience, diseases, and wounds." + + game_concept_adoption: "Adoption" + game_concept_adopt: "Adopt" + game_concept_adopts: "Adopts" + game_concept_adopting: "Adopting" + game_concept_adopted: "Adopted" + game_concept_adoption_desc: "Adoption is the act of bringing another [character|E] into your [house|E] and [dynasty|E]." + + + game_concept_legitimacy: "Legitimacy" + game_concept_legitimacy_desc: "$game_concept_legitimacy$ is the representation of the right to reign of a [ruler|E]. [vassals|E] also generate [legitimacy_expectations|E] that the [liege|E] is supposed to meet.\n\nOnly [rulers|E] have $game_concept_legitimacy$, which is calculated at the moment they become rulers and results in their [initial_legitimacy|E]. A fraction of the $game_concept_legitimacy$ of the previous ruler is also inherited by their [heir|E].\n\n$game_concept_legitimacy$ affects many of the game systems, making [marriage|E] proposals, [vassalization|E] and [alliances|E] more likely to be accepted, and [claims|E] cheaper, as well as swinging the [scales_of_power|E] in a [regency|E].\n\n$game_concept_legitimacy$ typically has 5 [legitimacy_levels|E] and one #weak Illegitimate#! bottom level.[AddLocalizationIf( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_is_nomadic' ), 'game_concept_legitimacy_desc_nomadic' )][AddLocalizationIf( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_is_mandala' ), 'game_concept_legitimacy_desc_mandala' )]" + game_concept_legitimacy_i: "[GetLocalPlayerLegitimacyTextIcon]" + game_concept_legitimacy_desc_nomadic: "\n\n[GetGovernment( 'nomad_government' ).GetName] [rulers|E] have a special $game_concept_legitimacy$ type, independent from their [rank|E]." + game_concept_legitimacy_desc_mandala: "\n\n[GetGovernment( 'mandala_government' ).GetName] [rulers|E] have a special $game_concept_legitimacy$ type, independent from their [rank|E] and with additional levels." + + game_concept_legitimacy_level: "Legitimacy Level" + game_concept_legitimacy_level_desc: "$game_concept_legitimacy_levels$ can be gained through various means: winning [wars|E], releasing [valuable_prisoners|E], creating [legends|E], holding [court|E], or attending [activities|E].\n\nThey can, however, also be lost: [epidemics|E] ravaging the [capital|E], losing wars (especially [faction|E] wars), losing [titles|E], or an exposed [hostile_scheme|E] are some of the main ways for $game_concept_legitimacy$ to decrease.[AddLocalizationIf( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_is_nomadic' ), 'game_concept_legitimacy_level_desc_nomadic' )]" + game_concept_legitimacy_levels: "Legitimacy Levels" + game_concept_legitimacy_gain: "Legitimacy Gain" + game_concept_legitimacy_level_desc_nomadic: "\n\n[GetGovernment( 'nomad_government' ).GetName] rulers gain #V 50%#! more Legitimacy from winning wars, but they also lose double on defeat. They will also gain Legitimacy from [single_combat_duel_plural|E] and marrying noble-born [courtiers|E] of someone of equal or higher [dominance|E]." + + game_concept_expected_legitimacy: "Expected Legitimacy" + game_concept_expected_legitimacy_desc: "The [legitimacy_level|E] that [vassals|E] expect of their [ruler|E], based on their historical relationship. Some factors that lower the Expectations are:\n$BULLET_WITH_TAB$Being the [de_jure|E] [liege|E] of the vassal\n$BULLET_WITH_TAB$Being part of the [close_family|E] of the vassal\n$BULLET_WITH_TAB$Being the [preferred_heir|E] of the vassal\n$BULLET_WITH_TAB$Being the same [dynasty|E] that the vassal has served for longer than #color_white 50#! years\n$BULLET_WITH_TAB$The vassal not being a [powerful_vassal|E]\n\nIf the actual Level is below their Expectations they may become unruly: their [opinion|E] will be lower and they may join [factions|E] against their [liege|E].\n\nExpectations increase with the level of their [primary_title|E], as well as with the [era|E]." + game_concept_legitimacy_expectations: "Legitimacy Expectations" + game_concept_legitimacy_expectations_desc: "$game_concept_expected_legitimacy_desc$" + + game_concept_initial_legitimacy: "Initial Legitimacy" + game_concept_initial_legitimacy_desc: "The $game_concept_legitimacy$ a [character|E] has when they become landed.\n\nIt is calculated based on [dynasty_prestige_level|E], relation to their predecessor, [court_grandeur|E], gender, [bastardy|E], years as a [ruler|E], the [legitimacy|E] [dynasty_perk|E], [diplomacy|E], [virtues|E], [sins|E] and other special [traits|E], like [GetTrait('sayyid').GetName( GetNullCharacter )], [GetTrait('diplomat').GetName( GetNullCharacter )] and [GetTrait('just').GetName( GetNullCharacter )].\n\n[heirs|E] will inherit [GetDefine( 'NCharacter', 'LEGITIMACY_INHERITED' )|V%^] of the previous ruler's $game_concept_legitimacy$ if inheriting a higher [title_tier|E] [title|E]." + + game_concept_court_position_task_short: "Task" + game_concept_court_position_task_short_desc: "$game_concept_court_position_task_desc$" + game_concept_court_position_tasks_short: "Tasks" + game_concept_court_position_tasks_short_desc: "$game_concept_court_position_task_desc$" + game_concept_court_position_task: "Court Position Task" + game_concept_court_position_tasks: "Court Position Tasks" + game_concept_court_position_tasks_desc: "$game_concept_court_position_task_desc$" + game_concept_court_position_task_desc: "Some [court_positions|E] can perform an additional task, often giving more benefits at an extra cost.\n\nOnly one task can be active at a time per [court_position|E]." + + game_concept_fatalities: "Fatalities" + game_concept_fatalities_desc: "[characters|E] that have perished as a direct result of an [epidemic|E] or [natural_disaster|E]." + game_concept_funeral: "Funeral" + game_concept_funeral_desc: "An [activity|E] in which a [host|E] invites various [characters|E] to offer their respect after a recent [character_death|E]. Funerals often result in increases in [legitimacy|E], decreases in [stress|E], and opportunities to show [piety|E]." + game_concept_funerals: "Funerals" + + game_concept_scheme_group_calculating: "Calculating" + game_concept_calculating_schemes: "Calculating Schemes" + game_concept_scheme_group_calculating_desc: "$game_concept_calculating_schemes$ involve premeditated actions, generally with one final incident in which the conspirators strike.\n\nThey are best stymied by armed $game_concept_scheme_countermeasure_countermeasures$ like #V $scheme_countermeasure_type_redouble_guards$#!.\n\nExamples include:\n$EFFECT_LIST_BULLET$[GetScheme('abduct').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('murder').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('overthrow_regent').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('steal_back_artifact').GetTypeName]" + + game_concept_scheme_group_opportunistic: "Opportunistic" + game_concept_opportunistic_schemes: "Opportunistic Schemes" + game_concept_scheme_group_opportunistic_desc: "$game_concept_opportunistic_schemes$ involve impromptu, repeated actions, between [characters|E] meeting up informally.\n\nThey are best thwarted by vigilant $game_concept_scheme_countermeasure_countermeasures$ like #V $scheme_countermeasure_type_strengthen_sentries$#!.\n\nExamples include:\n$EFFECT_LIST_BULLET$[GetScheme('seduce').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('befriend').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('convert_to_witchcraft').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('courting').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('elope').GetTypeName]" + + game_concept_scheme_group_indirect: "Indirect" + game_concept_indirect_schemes: "Indirect Schemes" + game_concept_scheme_group_indirect_desc: "$game_concept_indirect_schemes$ do not generally need to interact with their [scheme_target|E] personally at all.\n\nBecause of this, they cannot be effectively countered, but some $game_concept_scheme_countermeasure_countermeasures$ can make them worse.\n\nExamples include:\n$EFFECT_LIST_BULLET$[GetScheme('claim_throne').GetTypeName]\n$EFFECT_LIST_BULLET$[GetScheme('fabricate_hook').GetTypeName]" + + game_concept_scheme_opportunity: "Scheme Advantage" + game_concept_scheme_opportunities: "Scheme Advantages" + game_concept_scheme_opportunity_opportunity: "Advantage" + game_concept_scheme_opportunity_opportunities: "Advantages" + game_concept_scheme_opportunity_i: "@scheme_opportunity_icon!" + game_concept_scheme_opportunity_desc: "$game_concept_scheme_opportunity_opportunities$ represent progress made towards the goal of a [scheme|e]. They can be spent to convince [agents|e] to join a $game_concept_scheme$, or to execute one with an increased [success_chance|e]." + + game_concept_favorite_child: "Favorite Child" + game_concept_favorite_child_desc: "A $game_concept_favorite_child$ is a direct descendant of the same [dynasty|E] that a Player ruler can choose to favor. They will have a higher [opinion|E] of you and when you die, you can choose to continue your legacy as them, instead of your heir.\n\nYour favorite child can be any children, grandchildren, and great-grandchildren, as long as they are in your dynasty." + + game_concept_scheme_breach_short: "Breach" + game_concept_scheme_breaches_short: "Breaches" + game_concept_scheme_breach: "Scheme Breach" + game_concept_scheme_breaches: "Scheme Breaches" + game_concept_scheme_breach_desc: "A $game_concept_scheme_breach_short$ represents a complication in a [secret_scheme|e]. When a [scheme|e] is breached, its [success_chance|e] is reduced. The penalty to $game_concept_success_chance$ increases for each cumulative $game_concept_scheme_breach_short$. Once a $game_concept_scheme$ reaches #V 5#! $game_concept_scheme_breaches_short$, it will automatically fail.\n\n#WEAK $game_concept_schemes$ also check their $game_concept_secrecy$ when they are finally executed — breaches have no effect on this one way or another.#!" + + game_concept_influence_ward_personality: "Influence Ward's Personality" + game_concept_influence_ward_personality_desc: "An [interaction|E] where one can attempt to influence a [ward|E] to pick up a [personality_trait|E] akin to one's own. " + + game_concept_faction_commitment: "Faction Commitment" + game_concept_faction_commitment_desc: "The likelihood of a [character|E] supporting a [faction|E] against their [liege|E].\n\nIt can be affected by a multitude of reasons, the most common being [personality|E], [opinion|E], and [culture|E]." + + game_concept_state_faith: "State Faith" + game_concept_state_faith_desc: "$game_concept_state_faith$ is the [faith|E] supported and condoned by an [administrative_government|E]. This faith is attached to the [title|E] and not to any one specific [character|E]. It is easier to convert characters in the [realm|E] to the state faith and very difficult to convert them away from it.\n\nOnly the [ruler|E] of an Administrative Realm may change the State Faith, but [governors|E] may freely convert to it." + + game_concept_story_generic_prefix: "The Story of" + game_concept_story_generic_desc_boilerplate: "#WEAK Story content is optional. You may always opt out of it once you start playing." + game_concept_story_content_hereward: "$game_concept_story_generic_prefix$ $bookmark_laamps_hereweard_the_wake$" + game_concept_story_content_hereward_desc: "#tooltip_heading Story Style: Extensive#!\n\nAs Hereward, your exile abroad will prove to be short-lived. With England under the foreign yoke, you will return home to fight for freedom, clear your name, and kill Normans.\n\nA special mechanic will be active for the duration, charting England's resistance to Norman rule, and scripted story events will play during this. Your story will culminate with death: yours, or your enemy's.\n\n$game_concept_story_generic_desc_boilerplate$" + game_concept_story_content_el_cid: "$game_concept_story_generic_prefix$ $bookmark_laamps_el_cid$" + game_concept_story_content_el_cid_desc: "#tooltip_heading Story Style: Light#!\n\nAs El Cid, you will be wrongly cast aside by your liege. In exile, you may opt to stay loyal or find your own path, eventually culminating with a return to court #EMP or#! the ultimate prize — Valencia.\n\n$game_concept_story_generic_desc_boilerplate$" + game_concept_story_content_wallada: "$game_concept_story_generic_prefix$ $bookmark_laamps_wallada_bint_al_mustakfi$" + game_concept_story_content_wallada_desc: "#tooltip_heading Story Style: Moderate#!\n\nAs Wallada, you will level up the bespoke [GetTrait('violet_poet').GetName( GetNullCharacter )] by writing poetry and founding lyrical salons across the world, improving a unique tome as you go.\n\nYour story's conclusion is as dramatic as you choose to make it, but despite being childless, you will be given ways to continue playing.\n\n$game_concept_story_generic_desc_boilerplate$" + game_concept_story_content_hasan: "$game_concept_story_generic_prefix$ $bookmark_laamps_hassan_sabbah$" + game_concept_story_content_hasan_desc: "#tooltip_heading Story Style: Moderate#!\n\nAs Hasan, you will be guided down a path of religious fanaticism, picking a place to bring the light of the True Faith to and converting [counties|E] out from under their [rulers|E].\n\nEventually, your story will culminate with a major religious uprising against your chosen foe.\n\n$game_concept_story_generic_desc_boilerplate$" + + game_concept_harrying_widget_i: "@harrying_widget!" + game_concept_harrying_widget: "@harrying_widget! Harrying of the North" + game_concept_harrying_widget_desc: "Norman rulers and the recently-deposed Anglo-Saxon nobles are locked in a fierce battle for control over England. Such a contest won't end until one or both groups have been wholly removed from power.\n\nAs the situation progresses, actions they and other characters take will govern the [harrying_resistance|E] and [harrying_pacification|E] levels of the region.\n\n#TS Higher #EMP Resistance#! will lead to:#!\n$EFFECT_LIST_BULLET$Lower [cultural_acceptance|E]\n$EFFECT_LIST_BULLET$Lower [county_control|E]\n$EFFECT_LIST_BULLET$A higher chance of [claimant_factions|E] or even a [civil_war|E].\n\n#TS Higher #EMP Pacification#! will lead to:#!\n$EFFECT_LIST_BULLET$Higher [cultural_acceptance|E]\n$EFFECT_LIST_BULLET$Rising [dread|E] for the ruler of England\n$EFFECT_LIST_BULLET$Access to the $embrace_english_culture_decision$ [decision|E]." + + game_concept_harrying_resistance: "Resistance" + game_concept_harrying_resistance_desc: "Resistance measures the ongoing opposition to Norman rule in England from the pre-existing Anglo-Saxon population. Assuming Resistance is #BOL higher#! than [harrying_pacification|E], it bestows effects at the following levels:\n\n#S Resistance above #V 7#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: [EmptyScope.ScriptValue('miniscule_cultural_acceptance_loss')|0V] per month\n\n#S Resistance above #V 10#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: [EmptyScope.ScriptValue('minor_cultural_acceptance_loss')|0V] per month\n$EFFECT_LIST_BULLET$Slightly increased chance of [claimant_factions|E] against the ruler of England\n\n#S Resistance above #V 13#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: [EmptyScope.ScriptValue('medium_cultural_acceptance_loss')|0V] per month\n$EFFECT_LIST_BULLET$Somewhat increased chance of [claimant_factions|E] against the ruler of England\n$EFFECT_LIST_BULLET$[county_control|E] in all [counties|E] reduced by [EmptyScope.ScriptValue('minor_discontent_loss')|0V] every #V 3#! months for every [vassal|E] of England\n\n#S Resistance above #V 16#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: [EmptyScope.ScriptValue('major_cultural_acceptance_loss')|0V] per month\n$EFFECT_LIST_BULLET$Greatly increased chance of [claimant_factions|E] against the ruler of England\n$EFFECT_LIST_BULLET$[county_control|E] in all [counties|E] reduced by [EmptyScope.ScriptValue('medium_discontent_loss')|0V] every #V 3#! months for every [vassal|E] of England" + game_concept_harrying_pacification: "Pacification" + game_concept_harrying_pacification_desc: "Pacification tracks how effective the new Norman rulers of England are at subduing the resentful Anglo-Saxon population. Assuming Pacification is #BOL higher#! than [harrying_resistance|E], it bestows effects at the following levels:\n\n#S Pacification above #V 5#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: +[EmptyScope.ScriptValue('miniscule_cultural_acceptance_gain')|0V] per month\n\n#S Pacification above #V 8#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: +[EmptyScope.ScriptValue('minor_cultural_acceptance_gain')|0V] per month\n$EFFECT_LIST_BULLET$Adds [dread_i]#V 1#! [dread|E] to the ruler of England per month\n\n#S Pacification above #V 11#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: +[EmptyScope.ScriptValue('medium_cultural_acceptance_gain')|0V] per month\n$EFFECT_LIST_BULLET$Adds [dread_i]#V 2#! [dread|E] to the ruler of England per month\n\n#S Pacification above #V 14#!#!\n$EFFECT_LIST_BULLET$Anglo-Saxon/Norman [cultural_acceptance|E]: +[EmptyScope.ScriptValue('major_cultural_acceptance_gain')|0V] per month\n$EFFECT_LIST_BULLET$Adds [dread_i]#V 3#! [dread|E] to the ruler of England per month\n$EFFECT_LIST_BULLET$Enables the #V $embrace_english_culture_decision$#! [decision|E]" + + game_concept_game_rule_extreme_i: "@warning_icon!" + game_concept_game_rule_extreme: "Extreme Game Rule" + game_concept_game_rule_extreme_desc: "This Game Rule makes the game #bold significantly#! more difficult." + + game_concept_game_rule_unique_i: "@alert_icon!" + game_concept_game_rule_unique: "Unique Game Rule" + game_concept_game_rule_unique_desc: "This Game Rule #bold significantly#! alters the gameplay experience." + + ### BP3 + game_concept_swing_scales_of_power: "$swing_scales_currency_interaction$" + game_concept_swing_scales_of_power_interaction: "$game_concept_swing_scales_of_power$" + game_concept_swing_scales_of_power_desc: "At the cost of [prestige|E], [piety|E], or [gold|E], a [liege|E] or a [diarch|E] can move the [scales_of_power|E] in their favor." + + game_concept_destination: "Destination" + game_concept_travel_destination: "Travel Destination" + game_concept_destination_desc: "The Destination is the objective whilst [traveling|E], or one of several objectives. For a [pilgrimage|E] it would be the [holy_site|E] that is Traveled to, whereas for a [tour|E] every single [vassal|E] that is being visited would be considered a Destination." + + game_concept_roaming_longer_length_travel: "Long Hike" + game_concept_roaming_longer_length_travel_desc: "Long Hike is an [activity_option|E] for the [GetActivityType('activity_roaming').GetName] [activity|E]. The character will spend a significantly longer time with the activity, and will be given more opportunities." + + game_concept_inspection_success_chance: "Inspection Success Chance" + game_concept_inspection_success_chance_no_prefix: "Success Chance" + game_concept_inspection_success_chance_desc: "Success is not a given when undertaking an [inspection|E]. The main factors affecting these odds are:\n$BULLET_WITH_TAB$@skill_learning_icon![skills|E]\n$BULLET_WITH_TAB$@control_icon![county_control|E]\n$BULLET_WITH_TAB$@county_icon!Bordering Foreign [realm|E]\n\nInspection Success Chance can never be higher than #bold 95#!." + + game_concept_inspection: "Inspection" + game_concept_inspections: "Inspections" + game_concept_inspection_i: "@activity_inspection!" + game_concept_inspection_desc: "An activity where the [liege|E] travel to a [county|E] in the [realm|E] to oversee the local magnates and nobles.\n\nThey will have opportunities in one of the following focus areas: $rewards_inspection_tt$" + + game_concept_skill_challenges: "Skill Challenges" + game_concept_skill_challenges_no_prefix: "Challenges" + game_concept_skill_challenges_desc: "Skill challenges are moments where a character has a chance to use one of their [skills|E] to affect the outcome of an event. The higher the skill, or skills, the more likely the character will get their will or a beneficial outcome will happen." + + game_concept_hike: "Hike" + game_concept_hike_i: "@activity_hike!" + game_concept_hike_desc: "Set out on a solitary expedition to take a break from the pressure of courtly existence.\n\nAnticipated rewards:\n$activity_roaming_host_desc$" + + game_concept_monument_expedition: "Monument Expedition" + game_concept_monument_expedition_i: "@activity_monument_expedition!" + game_concept_monument_expedition_desc: "An activity where a character chooses to travel to a famous monument or landmark to improve themselves, by delving into its history, knowledge, and mysteries.\n\nAnticipated rewards:\n\t$BULLET_WITH_TAB$[intrigue_i|E][diplomacy_i|E][martial_i|E][learning_i|E][stewardship_i|E] [skill|E] Points\n$BULLET_WITH_TAB$[court_position_i]Excellent-[aptitude|E] [court_positions|E]\n$BULLET_WITH_TAB$[prestige_i|E][prestige|E]" + + game_concept_designated_terrain: "Designated Terrain" + game_concept_designated_terrain_desc: "A [decision|E] unlocked from the [wanderer_lifestyle|E] tree, where you can choose a [terrain|E] group to specialize in. Certain [perks|E] will provide different boons to the terrain group chosen.\n\nTerrain groups one can choose from:\n$BULLET_WITH_TAB$@forest! Forests / @jungle! Jungles / @taiga! Taiga / @wetlands! Wetlands\n$BULLET_WITH_TAB$@mountains! Mountains / @hills! Hills / @desert_mountains! Desert Mountains\n$BULLET_WITH_TAB$@plains! Plains / @steppe! Steppe / @farmlands! Farmlands / @floodplains! Floodplains\n$BULLET_WITH_TAB$@desert! Deserts / @drylands! Drylands / @oasis! Oasis" + + game_concept_master_terrain: "Master Terrain" + game_concept_master_terrain_desc: "A [decision|E] unlocked from the [wanderer_lifestyle|E] tree, where you can choose a [terrain|E] to specialize in, based on the group one chose in [designated_terrain|E].\n\nThis decision will give significant boons for the terrain chosen, giving bonuses such as increased [advantage|E], improved [combat_roll|E], reducing [attrition|E], and increased [prestige|E] and [prestige_experience|E] from [battle|E]." + + game_concept_story_content_temujin: "$game_concept_story_generic_prefix$ $bookmark_nomads_temujin$" + game_concept_story_content_temujin_desc: "#tooltip_heading Story Style: Light#!\n\nAs Temüjin you will seak vengeance against a rival tribe that had imprisoned your spouse, and test the loyalty of your closest vassal and friend — Jamukha.\n\n$game_concept_story_generic_desc_boilerplate$" + game_concept_story_content_jamukha: "$game_concept_story_generic_prefix$ $bookmark_nomads_temujin$" + game_concept_story_content_jamukha_desc: "#tooltip_heading Story Style: Light#!\n\nAs Jamukha you have always lived under the long shadow of Temüjin, but it is time to prove your own might. Will you remain loyal to him, or will you slit his throat in the dark?\n\n$game_concept_story_generic_desc_boilerplate$" + + game_concept_wanua: "Wanua" + game_concept_wanua_government: "Wanua Government" + game_concept_wanua_i: "@government_type_wanua!" + game_concept_wanua_desc: "The $wanua_government_adjective$ [government|E] shares weaknesses with the [GetGovernment('tribal_government').GetNameWithIcon] [government|E], but also have reduced [domain_limit|E] and [vassal_limit|E]. While they use [gold|E] to construct [buildings|E] and recruit [men_at_arms|E], they earn very little Gold from Buildings.\n\nHowever, they can [barter_goods_i][trade|E], [raid|E], and have synergies with the [GetGovernment('mandala_government').GetName] Government as they gain [legitimacy|E] from being a [tributary|E]." + + game_concept_bloc_supremacy_war: "Bloc Supremacy War" + game_concept_bloc_supremacy: "Bloc Supremacy" + game_concept_supremacy: "Supremacy" + game_concept_bloc_supremacy_war_desc: "A $game_concept_bloc_supremacy_war$ is a special type of [war|E] waged between the [leading_houses|E] of two [soryo|E] [house_blocs|E].\n\n#high Unlike other $game_concept_wars$, all members of both $game_concept_blocs$ will join.#!\n\nThe victorious $game_concept_bloc$ will gain [cohesion|E], while the losing $game_concept_bloc$ will lose a third of its $game_concept_cohesion$.\n\nIn addition, any [soryo|E] [member_houses|E] of the losing $game_concept_bloc$ whose [house_head|E] is not [GetTrait('loyal').GetName( GetNullCharacter )], [hooked|E] by, a sub-[vassal|E] of, an [ally|E] of, [friends|E] with, or [cowed|E] of the losing $game_concept_leading_house_possessive$ $game_concept_house_head$, will join the victorious $game_concept_bloc$." + + game_concept_bloc_expansion_war: "Bloc Expansion War" + game_concept_bloc_expansion: "Bloc Expansion" + game_concept_bloc_expansion_war_desc: "A $game_concept_bloc_expansion_war$ is a special type of [war|E] waged by a [bloc|E] member.\n\nIf victorious, the winner may appoint a [ruler|E] to the contested [titles|E], or retain them for themselves.\n\nAppointing a $game_concept_ruler$ in this way will add a [hook|E] on the recipient, add them to the winner's $game_concept_bloc$, and found a new [house|E] if the recipient is not a [house_head|E]." + + game_concept_retirement_age: "$celestial_retirement_law$" + game_concept_retirement_age_desc: "The $celestial_retirement_law$ [law|E] is the age, determined by the [top_liege|E] of the [realm|E], beyond which [governors|E] and [ministers|E] may choose to retire via [decision|E] or be compelled to do so with a [character_interaction|E], on the grounds of their impending decrepitude and diminished capacity to serve." diff --git a/localization/english/replace/government_l_english.yml b/localization/english/replace/government_l_english.yml new file mode 100644 index 00000000..196c20be --- /dev/null +++ b/localization/english/replace/government_l_english.yml @@ -0,0 +1,978 @@ +l_english: + feudal_government:0 "Feudal" + feudal_government_with_icon: "@government_type_feudal! $feudal_government$" + feudal_government_adjective:0 "Feudal" + feudal_government_realm:0 "Feudal Realm" + feudal_government_vassals_label:1 "Feudal [obligations|E] are based on each [vassal|E]'s [vassal_contract|E]" + feudal_government_desc:1 "\n$game_concept_feudal_desc$\n\n#F Feudalism was the dominant government form in Europe between the 9th and the 15th century. The feudal system is based on the relationship between the landholder and those who provide services and labor in order to live there. The rulers who hold the land appoint vassals which are given fiefs to govern. In return, the vassals provide their liege with [soldiers|E] and [taxes|E].#!" + feudal_government_obligations:0 "[GetGovernment( 'feudal_government' ).GetName] [obligations|E]" + feudal_obligation_low:3 "Low $feudal_government_obligations$" + feudal_obligation_low_short:0 "Low" + feudal_obligation_normal:3 "Normal $feudal_government_obligations$" + feudal_obligation_normal_short:0 "Normal" + feudal_obligation_high:3 "High $feudal_government_obligations$" + feudal_obligation_high_short:0 "High" + can_wage_wars:0 "Can Wage Wars" + wage_war_realm_law:0 "Wars According to Realm Law" + wage_war_realm_law_short:0 "Realm" + wage_war_allowed_internal:0 "Internal Wars Allowed" + wage_war_allowed_internal_short:0 "Internal" + wage_war_allowed_external:0 "External Wars Allowed" + wage_war_allowed_external_short:0 "External" + wage_war_disallowed:0 "Vassal Wars Disallowed" + wage_war_disallowed_short:0 "Disallowed" + scutage:0 "Scutage" + scutage_enabled_short:0 "Enabled" + scutage_enabled:0 "$scutage$ $scutage_enabled_short$" + scutage_disabled_short:0 "Disabled" + scutage_disabled:1 "$scutage$ $scutage_disabled_short$" + scutage_levies_overwrite_postfix:0 " #weak (overwrites)#!" + feudal_government_taxes:2 "[GetGovernment( 'feudal_government' ).GetNameNoTooltip] [taxes|U]" + feudal_tax_exempt:0 "[tax|E] Exempt" + feudal_tax_exempt_short:0 "Exempt" + feudal_tax_low:0 "Low $game_concept_taxes$" + feudal_tax_low_short:0 "Low" + feudal_tax_normal:0 "Normal $game_concept_taxes$" + feudal_tax_normal_short:0 "Normal" + feudal_tax_high:0 "High $game_concept_taxes$" + feudal_tax_high_short:0 "High" + feudal_tax_extortionate:0 "Extortionate $game_concept_taxes$" + feudal_tax_extortionate_short:0 "Extortionate" + nomad_government_taxes: "[GetGovernment( 'nomad_government' ).GetNameNoTooltip] [taxes|U]" + nomad_tax_exempt: "[tax|E] Exempt" + nomad_tax_exempt_short: "Exempt" + nomad_tax_low: "Low $game_concept_taxes$" + nomad_tax_low_short: "Low" + nomad_tax_normal: "Medium $game_concept_taxes$" + nomad_tax_normal_short: "Medium" + nomad_tax_high: "High $game_concept_taxes$" + nomad_tax_high_short: "High" + nomad_tax_extortionate: "Extortionate $game_concept_taxes$" + nomad_tax_extortionate_short: "Extortionate" + feudal_government_levies:2 "[GetGovernment( 'feudal_government' ).GetNameNoTooltip] [levies|U]" + feudal_levies_exempt:0 "No Contribution" + feudal_levies_exempt_short:0 "None" + feudal_levies_low:0 "Low $game_concept_levy$ Contribution" + feudal_levies_low_short:0 "Low" + feudal_levies_normal:0 "Normal $game_concept_levy$ Contribution" + feudal_levies_normal_short:0 "Normal" + feudal_levies_high:0 "High $game_concept_levy$ Contribution" + feudal_levies_high_short:0 "High" + feudal_levies_extortionate:0 "Massive $game_concept_levy$ Contribution" + feudal_levies_extortionate_short:0 "Massive" + feudal_vassal: "Feudal" + feudal_vassal_desc: "$game_concept_feudal_desc$" + + feudal_government_prestige: "[GetGovernment( 'feudal_government' ).GetNameNoTooltip] [prestige|U]" + feudal_prestige_none: "No Contribution" + feudal_prestige_none_short: "None" + feudal_prestige_normal: "Some $game_concept_prestige$ Contribution" + feudal_prestige_normal_short: "Low" + feudal_prestige_high: "High $game_concept_prestige$ Contribution" + feudal_prestige_high_short: "High" + nomad_government_prestige: "[GetGovernment( 'nomad_government' ).GetNameNoTooltip] [prestige|U]" + nomad_prestige_none: "No Contribution" + nomad_prestige_none_short: "None" + nomad_prestige_normal: "Some $game_concept_prestige$ Contribution" + nomad_prestige_normal_short: "Low" + nomad_prestige_high: "High $game_concept_prestige$ Contribution" + nomad_prestige_high_short: "High" + + special_contract:3 "#color_black [Concept( 'vassal_contract', 'Special Contract' )|BU]#!" + special_contract_none:0 "No Special Contract" + special_contract_scutage:0 "Scutage Contract" + special_contract_scutage_desc:1 "#flavor While subject to a $special_contract_scutage$, the [vassal|E] will pay #high [EmptyScope.ScriptValue('scutage_contract_tax_tooltip')|0]%#! more [tax|E] than what their $feudal_government_taxes$ [obligation|E] dictates, while at the same time providing #high [EmptyScope.ScriptValue('scutage_contract_levies_tooltip')|0]%#! fewer [levies|E] than what their $feudal_government_levies$ [obligation|E] dictates.#!" + special_contract_march:0 "March Contract" + special_contract_march_desc:2 "#flavor While subject to a $special_contract_march$, the [vassal|E] will receive bonuses to their [levies] and defensive capabilities, but provide #high [EmptyScope.ScriptValue('march_contract_taxes_tooltip')|0]%#! less [tax|E] than what their $feudal_government_taxes$ [obligation|E] dictates.#!" + special_contract_march_border_trigger: "[vassal.GetName] does not border a foreign [realm|E]" + special_contract_palatinate:0 "Palatinate Contract" + special_contract_palatinate_desc:2 "#flavor While subject to a $special_contract_palatinate$, the [vassal|E] enjoys many privileges within the realm, which increases their standing and gives them more political clout. $special_contract_palatinate_short$ [vassals|E] increase their [liege|E]'s [prestige|E] but provide #high [EmptyScope.ScriptValue('palatinate_contract_taxes_tooltip')|0]%#! less [tax|E] and [levies|E] than what their $feudal_government_taxes$ and $feudal_government_levies$ [obligations|E] dictate.#!" + special_contract_castellan: "Castellan Contract" + special_contract_castellan_desc: "#flavor While subject to a $special_contract_castellan$, the [vassal|E] will receive bonuses to their [levies] and defensive capabilities. They provide #high [EmptyScope.ScriptValue('march_contract_taxes_tooltip')|0]%#! less [tax|E], but #high [EmptyScope.ScriptValue('castellan_contract_levies_tooltip')|0]%#! more [levy|E] than what their $feudal_government_taxes$ [obligation|E] dictates.#!" + special_contract_none_short:0 "None" + special_contract_scutage_short:0 "Scutage" + special_contract_march_short:0 "March" + special_contract_palatinate_short:0 "Palatinate" + special_contract_castellan_short: "Castellan" + + religious_rights:0 "Religious Rights" + religious_rights_none:0 "Religiously Unprotected" + religious_rights_none_short:0 "Unprotected" + religious_rights_protected:0 "Religiously Protected" + religious_rights_protected_desc:3 "#emphasis #bold [vassal|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ The [liege|E] cannot [demand_conversion|E] of the [vassal|E]\nThe [liege|E] cannot use [convert_county|E] in the [vassals|E]' lands\n$EFFECT_LIST_BULLET$ The [liege|E] cannot use [faith|E] as a reason to avoid [tyranny|E] when revoking titles\n\n#flavor The [vassal|E] is granted a special protected status, with the realm officially recognizing their right to practice their own [faith|E].#!" + religious_rights_protected_short:0 "Protected" + + fortification_rights:0 "Fortification Rights" + fortification_rights_none:0 "No $fortification_rights$" + fortification_rights_none_short:0 "None" + fortification_rights_granted:0 "$fortification_rights$ Granted" + fortification_rights_granted_desc:0 "#flavor The [vassal] is granted the right to construct new castles and fortifications with the support of their [liege]. This support, in practice, means that the [vassal] pays #high [EmptyScope.ScriptValue('fortification_rights_contract_taxes_tooltip')|0]%#! less [tax] than what their $feudal_government_taxes$ [obligation] dictates.#!" + fortification_rights_granted_short:0 "Granted" + + succession_rights:0 "Succession Rights" + succession_rights_default:0 "Default $succession_rights$" + succession_rights_default_short:0 "Default" + succession_rights_forced_partition:0 "Forced Partition" + succession_rights_forced_partition_desc:0 "#emphasis #bold [vassal|E] Restrictions:#!#!\n$EFFECT_LIST_BULLET$ The [vassal|E] cannot have any [succession_law|E] beyond Partition\n$EFFECT_LIST_BULLET$ The [vassal|E] switches their [succession_law|E] to Partition\n$EFFECT_LIST_BULLET$ The [vassal|E] pays #high [EmptyScope.ScriptValue('succession_rights_contract_law_cost_tooltip')|0]%#! more [prestige|E] to change [laws|E]\n\n#flavor The [vassal|E] is forced to never have any other form of succession but Partition for their [realm|E]. The administrative hurdle of this also increases the [vassals] [law] costs by #high [EmptyScope.ScriptValue('succession_rights_contract_law_cost_tooltip')|0]%.#!#!" + succession_rights_forced_partition_short:0 "Forced Partition" + + coinage_rights:0 "Coinage Rights" + coinage_rights_none:0 "No $coinage_rights$" + coinage_rights_none_short:0 "None" + coinage_rights_granted:0 "$coinage_rights$ Granted" + coinage_rights_granted_desc:0 "#flavor The [vassal] is granted the right to mint and use new coins, bolstering their [development|E] at the expense of that of their [liege].#!" + coinage_rights_granted_short:0 "Granted" + + war_declaration_rights:0 "War Declaration" + war_declaration_rights_default:0 "Default $war_declaration_rights$" + war_declaration_rights_default_short:0 "Default" + war_declaration_rights_allowed:0 "Sanctioned $war_declaration_rights$" + war_declaration_rights_allowed_desc:1 "#emphasis #bold [vassal|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ The [vassal|E] can declare [war|E] regardless of the [liege|E]'s [crown_authority|E]\n$EFFECT_LIST_BULLET$ The [vassal|E] pays #high [EmptyScope.ScriptValue('war_declaration_rights_allowed_cost_reduction_tooltip')|0]%#! less for [casus_bellis|E] within the [realm|E]\n\n#flavor The [vassal] does not have to spend a [hook] if their [lieges] [crown_authority] prevents them from waging war. This special treatment also makes it easier for the [vassal] to declare wars inside the [realm|E], reducing the cost by #high [EmptyScope.ScriptValue('war_declaration_rights_allowed_cost_reduction_tooltip')|0]%#!.#!" + war_declaration_rights_allowed_short:0 "Sanctioned" + + council_rights:0 "Council Rights" + council_rights_none:0 "No $council_rights$" + council_rights_none_desc:0 "#flavor The [vassal] is not granted any out-of-the-ordinary privileges when it comes to the [council].#!" + council_rights_none_short:0 "None" + council_rights_guaranteed:0 "$council_rights$ Guaranteed" + council_rights_guaranteed_desc:0 "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The #high $force_onto_council$#! [interaction|E] can be used at will\n\n#flavor The [vassal] is granted special [council] privileges, and will expect a permanent seat on the [council]. Granting this privilege to too many [vassals] will eventually upset the [powerful_vassals] of the [realm|E].#!" + council_rights_guaranteed_short:0 "Guaranteed" + + title_revocation_rights:0 "Title Revocation" + title_revocation_rights_default:0 "Default $title_revocation_rights$" + title_revocation_rights_default_short:0 "Default" + title_revocation_rights_protected:0 "Protected $title_revocation_rights$" + title_revocation_rights_protected_desc:0 "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The [liege|E] cannot revoke the [vassals_possessive|E] [titles|E]\n\n#flavor The [vassal] is guaranteed ownership of their [titles], preventing the [liege|E] from revoking them – regardless of the [liege|E] having a [revoke_title_reason] or not.#!" + title_revocation_rights_protected_short:0 "Protected" + + clan_government:0 "Clan" + clan_government_with_icon: "@government_type_clan! $clan_government$" + clan_government_adjective:0 "Clan" + clan_government_realm:0 "Clan" + clan_government_desc:0 "\n$game_concept_clan_desc$\n\n#F The clan is united by kinship — either by blood or a shared relation with a symbolic ancestor. A clan leader relies heavily on the support of the clan. United, they are a strength to be reckoned with, but a discontent clan withers from within.#!" + clan_government_vassals_label:1 "Clan [obligations|E] are based on [opinion|E]" + clan_government_obligations:0 "From [opinion|E]" + clan_government_tax_contribution_postfix:0 " (max [FixedPointToProgressbarValue(EmptyScope.ScriptValue('clan_government_tax_max_possible'))|1V])" + clan_government_levies_contribution_postfix:0 " (max [FixedPointToProgressbarValue(EmptyScope.ScriptValue('clan_government_levies_max_possible'))|1V])" + clan_government_unclamped_contribution_label:0 "Based on [opinion|E] of me" + clan_government_min_contribution_label:0 "[crown_authority|E] minimum" + clan_vassal: "Clan" + clan_vassal_desc: "$game_concept_clan_desc$" + + republic_government:0 "Republic" + republic_government_with_icon: "@government_type_republic! $republic_government$" + republic_government_adjective:0 "Republic" + republic_government_realm:0 "Republic" + republic_government_desc:0 "\n$game_concept_republic_desc$\n\n#F Towns are ruled by the privileged citizens of the burgher class, among whom one is chosen as mayor. While the mayor has significant influence, they depend on popularity to be re-elected.#!" + republic_government_vassals_label:1 "Republic [obligations|E] are the same for all Republican [vassals|E]" + republic_government_obligations:1 "Republic [obligations|E]" + republican_vassals_pay_more_parameter:0 "From [liege|E] [culture_traditions|E]" + republic_vassal: "Republic" + republic_vassal_desc: "$game_concept_republic_desc$" + + tribal_government:0 "Tribal" + tribal_government_with_icon: "@government_type_tribal! $tribal_government$" + tribal_government_adjective:0 "Tribal" + tribal_government_realm:0 "Tribe" + tribal_government_desc:0 "\n$game_concept_tribal_desc$\n\n#F In the tribe, strength means everything. A tribal leader depends on respect and renown rather than coin to develop their realm and bolster their armies.#!" + + tribal_government_obligations:0 "From [liege|E] [prestige_level|E]" + tribal_government_vassals_label:1 "Tribal [obligations|E] are based on [prestige_level|E] of [liege|E]" + tribal_liege_inefficiency_plus_perk:0 "[liege|E] is [tribal|E] and has [GetPerk( 'detailed_ledgers_perk' ).GetName( GetPlayer )]" + tribal_liege_inefficiency:0 "[liege|E] is [tribal|E]" + has_detailed_ledgers_perk:0 "[liege|E] has [GetPerk( 'detailed_ledgers_perk' ).GetName( GetPlayer )]" + tribal_vassal: "Tribal" + tribal_vassal_desc: "$game_concept_tribal_desc$" + + theocracy_government:0 "Theocracy" + theocracy_government_with_icon: "@government_type_theocracy! $theocracy_government$" + theocracy_government_adjective:0 "Theocratic" + theocracy_government_realm:0 "Theocracy" + theocracy_government_desc:1 "\n$game_concept_theocracy_desc$\n\n#F In a theocratic government, all authority belongs to a religious institution. It is ruled by a priest or priestess who carries out the will of the divine on Earth.#!" + theocracy_government_vassals_label:1 "Theocratic [obligations|E] are based on [piety_level|E] of [liege|E]" + theocracy_government_obligations:1 "Theocratic [obligations|E]" + theocracy_government_vassal_contribution_wrong_faith:0 "@warning_icon! #X [liege|E] is of wrong [faith|E]#!" + theocracy_government_vassal_contribution_piety_level:0 "[liege|E] is [GetPietyLevelName(liege.GetPietyLevel)|L]" + theocracy_vassal: "Theocracy" + theocracy_vassal_desc: "$game_concept_theocracy_desc$" + + holy_order_government:0 "Holy Order" + holy_order_government_with_icon: "@government_type_holy_order! $holy_order_government$" + holy_order_government_desc:0 "\nThe holy warriors of the orders have dedicated their life to fighting infidels and serving their faith. They may hold castles given to them by pious landholders. The order leader is chosen within the order ranks." + holy_order_government_adjective:0 "Holy Order" + holy_order_government_realm:0 "Holy Order" + + mercenary_government:0 "Mercenary Company" + mercenary_government_with_icon: "@government_type_mercenary! $mercenary_government$" + mercenary_government_realm:0 "Mercenary Company" + mercenary_government_desc:1 "\nMercenary companies roam the lands in search of employment, and take up arms for the highest bidder. Loyalty is essential to a good reputation, but it only lasts until the end of their contract. The mercenary leader is chosen from within the company's ranks." + mercenary_government_adjective:0 "Mercenary Company" + + default_tributary_levies: "[tributary|E] [levies|U]" + tributary_levies_exempt: "None [levies|e]" + tributary_levies_exempt_short: "None" + tributary_levies_low: "Low [levies|e]" + tributary_levies_low_short: "Low" + tributary_levies_high: "High [levies|e]" + tributary_levies_high_short: "High" + default_tributary_taxes: "[tributary|E] [taxes|U]" + tributary_tax_none: "No [taxes|E]" + tributary_tax_none_short: "None" + tributary_tax_low: "Low [taxes|E]" + tributary_tax_low_short: "Low" + tributary_tax_high: "High [taxes|E]" + tributary_tax_high_short: "High" + default_tributary_prestige: "[tributary|E] [prestige|U]" + + create_cadet_branches_trigger:0 "Creation of [cadet_branches|E]" + create_cadet_branches_rule:0 "Create [cadet_branches|E]" + GOVERNMENT_RULE_INFO:1 "$EFFECT_LIST_BULLET$ Can $RULE|V$" + GOVERNMENT_HOLDING_INFO:1 "$EFFECT_LIST_BULLET$ Can hold [HOLDING_TYPE.GetName|V] [holdings|E]" + GOVERNMENT_CLAN_NOT_ALLIED:0 "No [alliance|E] as Clan [vassal|E]" + GOVERNMENT_CLAN_NOT_ALLIED_POWERFUL:0 "No [alliance|E] as powerful Clan [vassal|E]" + government_can_raid_rule:1 "#indent_newline:3 [government|E] allows the [raiding|E] of foreign [counties|E] for [loot|E]#!" + government_can_use_subject_men_at_arms: "Can recruit [men_at_arms|E] from [vassals|E] and [tributaries|E]" + may_elevate_co_monarch: "#indent_newline:3 Allows [rulers|E] of at least [kingdom|E]-[title_tier|E] to elevate a [co_monarch|E] from amongst their adult [children|E]#!" + government_is_feudal:0 "Uses [vassal_contracts|E]" + government_is_republic:0 "Is unplayable" + government_is_theocracy:0 "Is unplayable" + government_is_clan:0 "Uses [tax_jurisdictions|E]" + government_is_tribal: "Is a Tribal-type [government|E]" + government_is_wanua: "Enables [barter_goods_i][bartering|E]" + use_prestige_to_buy_maa: "Uses [prestige|E] to buy [men_at_arms|E]" + government_is_mercenary:0 "Is unplayable" + government_is_holy_order:0 "Is unplayable" + government_is_landless_adventurer: "Has access to a [camp|E]" + government_is_administrative: "Has access to an [estate|E]" + government_is_nomadic: "Has [herd|E]" + government_is_herder: "Is unplayable" + government_is_celestial: "Has access to an [estate|E] and [top_liege|E] has [mandate_of_heaven|E]" + government_is_mandala: "Uses the [mandala|E] #V [GetBuilding('mandala_capital_01').GetTypeName]#! [great_project|E] and [great_building|E]" + government_is_japan_feudal: "$government_is_japan_administrative$" + government_is_japan_administrative: "Has access to [manor|E], [blocs|E], and [house_aspirations|E]" + government_is_meritocratic: "Has access to an [estate|E] and uses [merit|E]" + government_is_steppe_admin: "Has access to an [estate|E] and uses [merit|E] and [obedience|E]" + government_has_influence: "Uses [influence_i|E][influence|E]" + government_has_merit: "Uses [merit_i|E][merit|E]" + government_has_treasury: "Uses [treasury_i|E][treasury|E]" + government_has_title_men_at_arms: "Allows recruitment of [title_men_at_arms|E]" + government_has_powerful_families: "Enables [noble_families|E]" + may_appoint_viziers: "May appoint [viziers|E]" + government_ignores_rightful_liege_penalties: "Ignores penalties from not being rightful liege" + block_same_government_type_vassal_courts: "Vassals with this rule cannot have Royal Courts if their top liege also has the rule" + + government_is_bureaucratic: "Is [government_bureaucratic_type|E]" + + government_is_not_republic_or_admin_desc: "[government|E] is #bold not#! [GetGovernment('republic_government').GetName] or [GetGovernment('administrative_government').GetName]" + + CHARACTER_WINDOW_MILITARY_STRENGTH_TOOLTIP: "[CharacterWindow.GetMilitaryStrengthTooltip][AddLocalizationIf(Not(StringIsEmpty(CharacterWindow.GetMenAtArmsSubjectRecruitmentPotentialTooltip)),'MAA_SUBJECT_ACCESS_POTENTIAL')]" + SUBJECT_MAA_HINT: "You could recruit @[MenAtArmsType.GetIconKey]_icon![Nbsp][MenAtArmsType.GetName] from the following [realms|E] if they were your [tributary|E] or [vassal|E]:#indent_newline:2 \n$BREAKDOWN$#!" + SUBJECT_MAA_HINT_ENTRY: "[CHARACTER.GetPrimaryTitle.GetBaseNameNoTier] ([CHARACTER.GetShortUIName])" + MAA_SUBJECT_ACCESS_POTENTIAL: "\n\n#EMP Would provide access to new [men_at_arms|E] if they were your [tributary|E] or [vassal|E]:#! #indent_newline:2 \n[CharacterWindow.GetMenAtArmsSubjectRecruitmentPotentialTooltip]#!" + MAA_SUBJECT_ACCESS_POTENTIAL_ENTRY: "@[MEN_AT_ARMS_TYPE.GetIconKey]_icon![Nbsp][MEN_AT_ARMS_TYPE.GetName]" + + SUPPLY_MULT_DIFERENT_GOVERNMENT:0 "[GOVERNMENT_TYPE.GetAdjective] Lands" + + CONTRACT_LIEGE_SIGNATURE:0 "The [SelectLocalization( SubjectContract.IsTributary, 'CONTRACT_LIEGE_SIGNATURE_SUZERAIN_TYPE', 'CONTRACT_LIEGE_SIGNATURE_LIEGE_TYPE' )],\n[SubjectContract.GetLiege.GetTitledFirstNameNoTooltip]\nof House [SubjectContract.GetLiege.GetHouse.GetBaseNameNoTooltip]" + CONTRACT_LIEGE_SIGNATURE_LIEGE_TYPE: "Liege" + CONTRACT_LIEGE_SIGNATURE_SUZERAIN_TYPE: "Suzerain" + CONTRACT_VASSAL_SIGNATURE:0 "The [SelectLocalization( SubjectContract.IsTributary, 'CONTRACT_VASSAL_SIGNATURE_TRIBUTARY_TYPE', 'CONTRACT_VASSAL_SIGNATURE_VASSAL_TYPE' )],\n[SubjectContract.GetSubject.GetTitledFirstNameNoTooltip]\nof House [SubjectContract.GetSubject.GetHouse.GetBaseNameNoTooltip]" + CONTRACT_VASSAL_SIGNATURE_VASSAL_TYPE: "Vassal" + CONTRACT_VASSAL_SIGNATURE_TRIBUTARY_TYPE: "Tributary" + + marriage_favor_rights:0 "Marriage Favor" + marriage_favor_rights_default:0 "Default $marriage_favor_rights$" + marriage_favor_rights_default_short:0 "Default" + marriage_favor_rights_granted:0 "Granted $marriage_favor_rights$" + marriage_favor_rights_granted_desc:0 "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The [liege|E] commits to marry their close family to seal an alliance before marrying them to anyone else\n\n#flavor The [vassal|E] is among the favorite of the [liege|E], and should be able to seal an alliance through marriage.#!" + marriage_favor_rights_granted_short:0 "Granted" + + antagonistic: "Antagonistic" + antagonistic_desc: "Few things can spur people like rivalries or jealousy. One better watch your back in this house, or you may find someone attempting to put a knife in it." + competitive: "Competitive" + competitive_desc: "Competition in the family can be a healthy thing. It pushes the members in this house to best one another, may it be on the battlefield, or in an attempt to secure the throne..." + impassive: "Impassive" + impassive_desc: "Why spend time and energy to care what the rest of the family is up to? These house members tend to mostly care for themselves first and foremost." + friendly: "Friendly" + friendly_desc: "They may perhaps not always see eye to eye, but the members of this house are always on friendly terms." + harmonious: "Harmonious" + harmonious_desc: "A house in perfect harmony. The members of this house do what they can to stand united and lend each other aid at all times." + antagonistic_house_approves_war_victory: "All of [attacker.GetShortUINamePossessive] [house|E] [vassals|E] gain #P 10#! [opinion|E] of [attacker.GetShortUIName] for #V 10 years#! #weak (Impressed by Offensive Victory)#!" + antagonistic_house_approves_war_victory_defensive: "All of [defender.GetShortUINamePossessive] [house|E] [vassals|E] gain #P 15#! [opinion|E] of [defender.GetShortUIName] for #V 10 years#! #weak (Impressed by Defensive Victory)#!" + antagonistic_house_disapproves_war_white_peace: "All of [attacker.GetShortUINamePossessive] [house|E] [vassals|E] lose #N 10#! [opinion|E] of [attacker.GetShortUIName] for #V 10 years#! #weak (Finds White Peace Weak)#!" + antagonistic_house_disapproves_war_white_peace_defender: "All of [defender.GetShortUINamePossessive] [house|E] [vassals|E] lose #N 10#! [opinion|E] of [defender.GetShortUIName] for #V 10 years#! #weak (Finds White Peace Weak)#!" + antagonistic_house_disapproves_war_defeat: "All of [attacker.GetShortUINamePossessive] [house|E] [vassals|E] lose #N 20#! [opinion|E] of [attacker.GetShortUIName] for #V 10 years#! #weak (Embarrassed by Defeat)#!" + antagonistic_house_disapproves_war_defeat_defender: "All of [defender.GetShortUINamePossessive] [house|E] [vassals|E] lose #N 20#! [opinion|E] of [defender.GetShortUIName] for #V 10 years#! #weak (Embarrassed by Defeat)#!" + + house_unity_parameter_unity_antagonistic_cb_cost: "[casus_belli|E] Cost: @war_icon!#P [EmptyScope.ScriptValue('unity_antagonistic_cb_cost_display_value')|0]%#!" + house_unity_parameter_unity_competitive_cb_cost: "[casus_belli|E] Cost: @war_icon!#P [EmptyScope.ScriptValue('unity_competitive_cb_cost_display_value')|0]%#!" + house_unity_parameter_unity_friendly_cb_cost: "[casus_belli|E] Cost: @war_icon!#N +[EmptyScope.ScriptValue('unity_friendly_cb_cost_display_value')|0]%#!" + house_unity_parameter_unity_harmonious_cb_cost: "[casus_belli|E] Cost: @war_icon!#N +[EmptyScope.ScriptValue('unity_harmonious_cb_cost_display_value')|0]%#!" + house_unity_parameter_unity_less_likely_factions: "[house|E] [vassals|E] are #P less likely#! to create [factions|E]" + house_unity_parameter_unity_significantly_less_likely_factions: "[house|E] [vassals|E] are #P significantly less likely#! to create [factions|E]" + CB_UNITY_COST: "Your [house_unity|E]" + house_unity_parameter_unity_multiple_invasions: "[rulers|E] may use the [GetCasusBelliType('invasion_war').GetName] [casus_belli|E] once every [EmptyScope.ScriptValue('unity_antagonistic_invasion_cooldown_value')|V0]#! years" + house_unity_parameter_unity_unlimited_invasions: "[rulers|E] have unlimited access to the [GetCasusBelliType('invasion_war').GetName] [casus_belli|E], which replaces any regular Invasion Casus Belli" + house_unity_parameter_unity_lower_prestige_requirements: "All [casus_bellis|E] that require a specific [prestige_level|E] require one less" + house_unity_parameter_unity_war_opinion: "[victory|E], [white_peace|E] and [defeat|E] have various effects on [house|E] [vassal|E] [opinion|E]" + house_unity_parameter_unity_disable_invasions: "[rulers|E] cannot use the Invasion [casus_belli|E]" + house_unity_parameter_unity_more_likely_claimant_factions: "[house|E] [vassals|E] are #N more likely#! to create [claimant_factions|E]" + house_unity_parameter_unity_significantly_more_likely_claimant_factions: "[house|E] [vassals|E] are #N significantly more likely#! to create [claimant_factions|E]" + house_unity_parameter_vassal_house_members_more_upset_without_alliance: "The 'No [alliance|E]' [opinion|E] penalty is higher for same-[house|E] [vassals|E]" + house_unity_parameter_unity_unlock_fabricate_hooks: "[house|E] members can use the [GetScheme('fabricate_hook').GetTypeName] [scheme|E] against each other" + house_unity_parameter_unity_unlock_befriend_scheme: "[house|E] members can [GetScheme('befriend').GetTypeName] each other" + house_unity_parameter_unity_can_challenge_house_head: "[house|E] members may challenge their [house_head|E] in order to take their place" + house_unity_parameter_unity_can_create_cadet_branches: "[independent|E] [house|E] members may create [cadet_branches|E]" + house_unity_parameter_unity_enable_border_wars: "[independent|E] [house|E] members' #V [GetLawGroup('border_wars_laws').GetName]#! is locked to [GetLaw('top_liege_not_redirected_to_border_wars_law').GetName] [title_law|E]" + house_unity_can_create_cadet_branches_tt: "[house_unity|E] is @dynasty_house_unity_antagonistic! $antagonistic$" + + house_unity_parameter_unity_succession_clan_antagonistic_partition_succession: "The [house_succession_law|E] is [GetLaw('clan_antagonistic_partition_succession_law').GetName]" + house_unity_parameter_unity_succession_clan_competitive_partition_succession: "The [house_succession_law|E] is [GetLaw('clan_competitive_partition_succession_law').GetName]" + house_unity_parameter_unity_succession_clan_impassive_partition_succession: "The [house_succession_law|E] is [GetLaw('clan_impassive_partition_succession_law').GetName]" + house_unity_parameter_unity_succession_clan_friendly_partition_succession: "The [house_succession_law|E] is [GetLaw('clan_friendly_partition_succession_law').GetName]" + house_unity_parameter_unity_succession_clan_harmonious_partition_succession: "The [house_succession_law|E] is [GetLaw('clan_harmonious_partition_succession_law').GetName]" + + house_unity_parameter_unity_has_liberate_house_members_cb: "Unlocks [fp3_free_house_member_cb|E] [casus_belli|E]" + unity_has_liberate_house_members_cb_name: "[fp3_free_house_member_cb|E]" + + house_unity_parameter_unity_has_unify_house_cb: "Unlocks [fp3_unify_house_cb|E] [casus_belli|E]" + unity_has_unify_house_cb_name: "[fp3_unify_house_cb|E]" + + HAS_HOUSE_UNITY_STAGE_GLOBAL: "[house_unity|E] is @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + I_HAVE_HOUSE_UNITY_STAGE_GLOBAL: "My [house_unity|E] is @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + THEY_HAVE_HOUSE_UNITY_STAGE_GLOBAL: "[house|E] [DYNASTY_HOUSE.GetBaseName|V] [house_unity|E] is @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + NOT_HAS_HOUSE_UNITY_STAGE_GLOBAL: "[house_unity|E] is #bold not#! @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + NOT_I_HAVE_HOUSE_UNITY_STAGE_GLOBAL: "My [house_unity|E] is #bold not#! @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + NOT_THEY_HAVE_HOUSE_UNITY_STAGE_GLOBAL: "[house|E] [DYNASTY_HOUSE.GetBaseName|V] [house_unity|E] is #bold not#! @dynasty_house_unity_[HouseUnityStage.GetKey]! [HouseUnityStage.GetName|V]" + + active_unity_level_description_tt: "#weak This is due to your active [house_unity_level|E]#!" + + ADD_UNITY_VALUE_GLOBAL: "[house|E] [DynastyHouse.GetBaseName|V] [house_unity|E] changes by $VALUE|=+0$ @dynasty_house_unity!" + AI_HOUSE_UNITY: "Your [house_unity|E]: $VALUE|=+0$" + + unity_reinforce_army_decision: "Reinforce Army with Loyal Officers" + unity_reinforce_army_decision_desc: "An army is only as strong as the officers leading it. By requesting skilled soldiers from the members of my house, I gain access to soldiers with plenty of experience. Soldiers I can promote into leading positions within my army to bolster the troops effectiveness. All members contributes to our house for the greater good, and everyone benefits!" + unity_reinforce_army_decision_tooltip: "Request the members of your house to send you capable officers" + unity_reinforce_army_decision_confirm: "Send the orders." + + unity_establish_network_decision: "Enforce Intrigue Network" + unity_establish_network_decision_desc: "The members of my house are each cunning in their own way. With my leadership, we can form a web of intrigue to catch even the slyest outsiders." + unity_establish_network_decision_tooltip: "Enlist your house members in protecting against and executing hostile schemes" + unity_establish_network_decision_confirm: "Send and burn the edict" + + unity_improve_taxation_decision: "Improve Taxation" + unity_improve_taxation_decision_desc: "My house have a great many members efficient in collecting taxes and managing a realm. By sharing ideas and capable people, we can all benefit from an increased income." + unity_improve_taxation_decision_tooltip: "Work alongside your house members to improve the taxation and income of the realm" + unity_improve_taxation_decision_confirm: "Let's organize a meeting" + + unity_search_for_administrators_decision: "Search for Tax Collectors" + unity_search_for_administrators_decision_desc: "Taxes are the backbone of any realm. Taking the time to search for skilled administrators and former soldiers, to employ as tax collectors, would be well worth the effort." + unity_search_for_administrators_decision_tooltip: "Search for competent administrators and soldiers to strengthen my ranks of tax collectors" + unity_search_for_administrators_decision_confirm: "Order the search" + search_administors_decision.tt: "Up to three [characters|E] of various skill will join your [court|E]" + unity_search_for_administrators_decision.msg.t: "Administrator Has Arrived" + unity_search_for_administrators_decision.msg.desc: "A new administrator, named [new_administrator.GetName], has arrived at your court and is ready for employment." + + unity_send_bailiffs_decision: "Send Bailiffs" + unity_send_bailiffs_decision_desc: "I can take advantage of my house members' cooperative attitude by sending my bailiffs to them, exacting my orders to maintain peace through the realm." + unity_send_bailiffs_decision_tooltip: "Cooperate with your house members to increase control through the realm" + unity_send_bailiffs_decision_confirm: "Send for the bailiffs" + + unity_placate_vassals_decision: "Placate Vassals" + unity_placate_vassals_decision_desc: "Even a harmonious household faces its trials. By exerting my influence as house head, I may smooth over these social wrinkles before they start forming cracks." + unity_placate_vassals_decision_tooltip: "Remind your house members of your authority as their liege" + unity_placate_vassals_decision_confirm: "Placate vassals" + + unity_organize_house_for_war_decision: "Organize House Members for War" + unity_organize_house_for_war_decision_desc: "Improving a realm requires dedication and, more often than not, a great deal of conquests. By issuing specific edicts and guiding our house members, I can make them more willing to wage war and conquer new lands." + unity_organize_house_for_war_decision_tooltip: "Guide the members of your house to more frequently wage war" + unity_organize_house_for_war_decision_confirm: "Promote war and conflict!" + + unity_encourage_house_economy_decision: "Encourage House to Improve the Economy" + unity_encourage_house_economy_decision_desc: "A realm is only as capable as the land it is built upon. I should make sure that all members within the house are able to spend the necessary funds to build us a stronger realm." + unity_encourage_house_economy_decision_tooltip: "Guide the members of your house to focus on the economy" + unity_encourage_house_economy_decision_confirm: "Encourage a stronger economy!" + + unity_promote_development_decision: "Promote Development" + unity_promote_development_decision_desc: "Our culture has a long history of excellent administration skills. There are many skilled overseers and supervisors employed within our house. We can use this to our advantage and further develop the realm." + unity_promote_development_decision_tooltip: "Promote your house members to develop and enhance the realm" + unity_promote_development_decision_confirm: "Promote development" + + unity_improve_logistics_decision: "Demand Shared Army Logistics" + unity_improve_logistics_decision_desc: "Wars are decided by a multitude of different factors. Good logistics and supplies are just as important as having capable soldiers. I can enforce new policies within our house and demand everyone to share supplies and equipment, greatly increasing the capabilites of the army." + unity_improve_logistics_decision_tooltip: "Demand your house members to share logistics and supply to better accomodate the needs of the army" + unity_improve_logistics_decision_confirm: "Demand shared logistics" + + unity_steer_house_direction_decision: "Steer House Unity" + unity_steer_house_direction_decision_desc: "As house head, my word carries a great deal of weight among the members of my house. With careful words and actions, I can nudge my fellow members to behave in certain ways, as to greatly affect our combined unity." + unity_steer_house_direction_decision_confirm: "$unity_steer_house_direction_decision$" + unity_steer_house_direction_decision_tooltip: "Choose a direction in which to steer your [house_unity|E]" + unity_steer_house_direction_decision_second_tooltip: "$DESC$\n" + CHOOSE_UNITY_DIRECTION: "Choose Direction" + STEER_HOUSE_UNITY_SELECT_DIRECTION_TITLE: "Choose [unity|E] Direction" + steer_unity_towards_harmonious_desc: "Use your position as [house_head|E] and steer your [house_unity|E] towards #V $harmonious$#!" + steer_unity_towards_harmonious_name: "Steer House towards #V $harmonious$#!\n#low Increases [house_unity|E]#!" + steer_unity_towards_harmonious_tooltip: "$unity_steer_house_direction_decision_second_tooltip$" + steer_unity_towards_harmonious_tt: "#X Your [house|E] already has the #V $harmonious$#! [house_unity_level|E]#!" + steer_unity_towards_harmonious_passive_gain_tt: "[house_unity|E] #P increases#! yearly for the next #V 10#! years" + steer_unity_towards_harmonious_toast: "[ROOT.Char.GetShortUINameNoTooltip|U] steered [house_unity|E] towards $harmonious$" + steer_unity_towards_antagonistic_desc: "Use your position as [house_head|E] and steer your [house_unity|E] towards #V $antagonistic$#!" + steer_unity_towards_antagonistic_name: "Steer House towards #V $antagonistic$#!\n#low Decreases [house_unity|E]#!" + steer_unity_towards_antagonistic_tooltip: "$unity_steer_house_direction_decision_second_tooltip$" + steer_unity_towards_antagonistic_tt: "#X Your [house|E] already has the #V $antagonistic$#! [house_unity_level|E]#!" + steer_unity_towards_antagonistic_passive_loss_tt: "[house_unity|E] #N decreases#! yearly for the next #V 10#! years" + steer_unity_towards_antagonistic_toast: "[ROOT.Char.GetShortUINameNoTooltip|U] steered [house_unity|E] towards $antagonistic$" + steer_unity_notification_title: "[house_head|E] changed [unity|E]" + + unity_consult_house_decision: "Consult House Members" + unity_consult_house_decision_desc: "A unified council is one that can act swiftly and securely. With only a little back and forth, I can ensure that my house members are more effective in their roles as councillors." + unity_consult_house_decision.tt_house_council_bonus: "Base progress and [skill|E] impact on [councillor_tasks|E] is increased by #P +10%#! for [house|E] members serving on your [council|E]" + unity_consult_house_decision.tt_no_unity_change: "Assigning [house|E] members to your [council|E] and firing them no longer affects [house_unity|E]" + unity_consult_house_decision.tt_lifetime: "This will remain active until your character dies" + unity_consult_house_decision.tt_cooldown: "You have already consulted your [house|E] members" + unity_consult_house_decision_tooltip: "Guide your house members to become more efficient councillors" + unity_consult_house_decision_confirm: "Consult house members" + unity_consulted_house_member_desc: "Consulted House Member" + + unity_establish_futuwaa_lodges_decision: "Establish Futuwaa Lodges" + unity_establish_futuwaa_lodges_decision_desc_intro: "The young" + unity_establish_futuwaa_lodges_decision_desc_outro: "of [ROOT.Char.GetCapitalLocation.GetTitle.GetNameNoTierNoTooltip], lacking suitable outlets for their energies, are roaming the capital in makeshift gangs. I could instead establish #italic futuwaa#! lodges throughout the capital to instill martial prowess and morals in their idle time." + unity_establish_futuwaa_lodges_decision.tt_intro: "All unmarried young" + unity_establish_futuwaa_lodges_decision.tt_outro: "living in your [capital|E] have a chance of increasing their [martial|E] and [prowess|E] [skills|E] , and of gaining a [virtuous|E] [trait|E], for the next 20 years" + unity_establish_futuwaa_lodges_decision.tt_people: "$unity_establish_futuwaa_lodges_decision.tt_intro$ $people$ $unity_establish_futuwaa_lodges_decision.tt_outro$" + unity_establish_futuwaa_lodges_decision.tt_women: "$unity_establish_futuwaa_lodges_decision.tt_intro$ $women$ $unity_establish_futuwaa_lodges_decision.tt_outro$" + unity_establish_futuwaa_lodges_decision.tt_men: "$unity_establish_futuwaa_lodges_decision.tt_intro$ $loc_men$ $unity_establish_futuwaa_lodges_decision.tt_outro$" + unity_establish_futuwaa_lodges_decision.tt_num_intro: "Currently, #V [SCOPE.ScriptValue('number_of_futuwaa_members')]#!" + unity_establish_futuwaa_lodges_decision.tt_num_outro: "in your capital would benefit from this decision" + unity_establish_futuwaa_lodges_decision.tt_num_people: "$unity_establish_futuwaa_lodges_decision.tt_num_intro$ youths $unity_establish_futuwaa_lodges_decision.tt_num_outro$" + unity_establish_futuwaa_lodges_decision.tt_num_women: "$unity_establish_futuwaa_lodges_decision.tt_num_intro$ young women $unity_establish_futuwaa_lodges_decision.tt_num_outro$" + unity_establish_futuwaa_lodges_decision.tt_num_men: "$unity_establish_futuwaa_lodges_decision.tt_num_intro$ young men $unity_establish_futuwaa_lodges_decision.tt_num_outro$" + unity_establish_futuwaa_lodges_decision_tooltip: "Promote virtues and prowess in your capital's youth" + unity_establish_futuwaa_lodges_decision_confirm: "Sponsor the lodges" + + unity_educate_youth_in_madrasas_decision.t_intro: "Educate Youth in" + unity_educate_youth_in_madrasas_decision.t_madrasas: "Madrasas" + unity_educate_youth_in_madrasas_decision.t_houses_of_worship: "[ROOT.Char.GetFaith.HouseOfWorshipPlural|U]" + unity_educate_youth_in_madrasas_decision_desc_intro: "Peace in the realm has left the young" + unity_educate_youth_in_madrasas_decision_desc_outro: "of [ROOT.Char.GetCapitalLocation.GetTitle.GetNameNoTierNoTooltip] inert and aimless. I could instead establish schools in the [ROOT.Char.GetFaith.HouseOfWorshipPlural] to teach these youths philosophy and medicine in their idle time." + unity_educate_youth_in_madrasas_decision.tt_intro: "All young" + unity_educate_youth_in_madrasas_decision.tt_outro: "living in your [capital|E] have a chance of increasing their [learning|E] [skill|E] and gaining [GetTrait('lifestyle_physician').GetName(GetNullCharacter)] [experience|E] for the next 20 years" + unity_educate_youth_in_madrasas_decision.tt_people: "$unity_educate_youth_in_madrasas_decision.tt_intro$ $people$ $unity_educate_youth_in_madrasas_decision.tt_outro$" + unity_educate_youth_in_madrasas_decision.tt_women: "$unity_educate_youth_in_madrasas_decision.tt_intro$ $women$ $unity_educate_youth_in_madrasas_decision.tt_outro$" + unity_educate_youth_in_madrasas_decision.tt_men: "$unity_educate_youth_in_madrasas_decision.tt_intro$ $loc_men$ $unity_educate_youth_in_madrasas_decision.tt_outro$" + unity_educate_youth_in_madrasas_decision.tt_num_intro: "Currently, #V [SCOPE.ScriptValue('number_of_madrasa_pupils')]#!" + unity_educate_youth_in_madrasas_decision.tt_num_outro: "in your capital would benefit from this decision" + unity_educate_youth_in_madrasas_decision.tt_num_people: "$unity_educate_youth_in_madrasas_decision.tt_num_intro$ youths $unity_educate_youth_in_madrasas_decision.tt_num_outro$" + unity_educate_youth_in_madrasas_decision.tt_num_women: "$unity_educate_youth_in_madrasas_decision.tt_num_intro$ young women $unity_educate_youth_in_madrasas_decision.tt_num_outro$" + unity_educate_youth_in_madrasas_decision.tt_num_men: "$unity_educate_youth_in_madrasas_decision.tt_num_intro$ young men $unity_educate_youth_in_madrasas_decision.tt_num_outro$" + unity_educate_youth_in_madrasas_decision_tooltip: "Educate your capital's youth in philosophy and medicine" + unity_educate_youth_in_madrasas_decision_confirm: "Inform the [ROOT.Char.GetFaith.PriestNeuterPlural]" + + default_tax_collector: "Basic Taxes" + default_tax_collector_desc: "Base [obligations|E] apply, based on the [aptitude|E] of the assigned [tax_collector|E]" + default_tax_collector_flavor_desc: "A standard tax. Taxpayers pay no more, and no less, than what they are expected to." + + jizya_special_rights_tax_collector: "Jizya Status" + jizya_special_rights_tax_collector_desc: "#emphasis #bold [vassal|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ The [liege|E] cannot [demand_conversion|E] of the [vassal|E]\nThe [liege|E] cannot use [convert_county|E] in the [vassals|E]' lands\n$EFFECT_LIST_BULLET$ The [liege|E] cannot use [faith|E] as a reason to avoid [tyranny|E] when revoking titles\n$EFFECT_LIST_BULLET$ The [liege|E] cannot revoke the [vassals_possessive|E] [titles|E]\n\n#flavor The [vassal|E] is guaranteed ownership of their [titles], preventing the [liege|E] from revoking them – regardless of the $game_concept_liege$ having a [revoke_title_reason|E] or not.\n\nThe $game_concept_vassal$ is also granted a special protected status, with the realm officially recognizing their right to practice their own [faith|E].#!" + jizya_special_rights_tax_collector_flavor_desc: "Jizya is a special tax assigned to #italic dhimmis#!, religious minorities, in return for the privilege to practice their errant faith in peace." + unlock_jizya_contract_name: "[GetFaithDoctrine('tenet_tax_nonbelievers').GetBaseName] [core_tenet|E]" + + jizya_special_rights:0 "$jizya_special_rights_tax_collector$" + jizya_special_rights_default:0 "Default $jizya_special_rights$" + jizya_special_rights_default_short:0 "Default" + jizya_special_rights_granted:0 "Enforced $jizya_special_rights$" + jizya_special_rights_granted_desc:0 "$jizya_special_rights_tax_collector_desc$" + jizya_special_rights_granted_short:0 "Granted" + + + iqta_special_rights_tax_collector: "Iqta Grant" + iqta_special_rights_tax_collector_desc: "The [vassal|E] has lower obligations but helps contributing [men_at_arms|E] to the [liege|E]." + iqta_special_rights_tax_collector_flavor_desc: "Iqta is a tax farming system where local magnates are given wide authority to collect taxes on behalf of the state." + + + ghazi_special_rights_tax_collector: "Ghazi Status" + ghazi_special_rights_tax_collector_desc: "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The [vassal|E] pays less [piety|E] to use [holy_war|E] [casus_bellis|E] but more [prestige_i][prestige|E] for any other [casus_bellis|E]\n$EFFECT_LIST_BULLET$ Enables [raiding|E]\n\n#flavor The [vassal|E] is chosen as a warrior of the [faith|E] by the [liege|E], charged with carrying the borders outwards through [holy_war|E].#!" + ghazi_special_rights_tax_collector_flavor_desc: "Warriors of the faith and the frontier, the Ghazi collect income from plunder and brigandage, and wage a never-ending war against the religious enemies of the state." + + + deqhan_special_rights_tax_collector: "Dehqan" + deqhan_special_rights_tax_collector_flavor_desc: "Persian magnates within an ancient, decentralized tax collection system, the deqhans closely manage their lands to promote productivity - and their own prestige." + + maguh_special_rights_tax_collector: "Maguh Status" + maguh_special_rights_tax_collector_flavor_desc: "An old Sassanian form of district administration, the maguh promote local development in exchange for reduced taxes to the state." + + muqata_special_rights_tax_collector: "Muqata Status" + muqata_special_rights_tax_collector_flavor_desc: "Muqata is a tax system where distant lands are given greater autonomy and are taxed less, to promote stability and long-term development." + + strict_taxation_tax_collector: "Zakat" + strict_taxation_tax_collector_flavor_desc: "Zakat is a luxury tax, usually enforced upon the wealthy as a means to provide additional income for the state and to help those in need." + + clan_tax_slot: "Tax Jurisdiction" + + has_house_unity_parameter: "Has the $PARAMETER_NAME$" + not_has_house_unity_parameter: "Doesn't have access to $PARAMETER_NAME$" + + # Administrative + administrative_government: "Administrative" + administrative_government_with_icon: "@government_type_administrative! $administrative_government$" + administrative_government_adjective: "Administrative" + administrative_government_realm: "Administrative Realm" + administrative_government_desc: "\n$game_concept_administrative_desc$\n\n#F Administrative is a highly centralized government, where power mainly resides within the capital. Birthright, while still important, is not as prominent as in a feudal realm. With enough skill and ambition anyone, even from the most humble of origin, may rise up to become an influential governor or make a play for the throne and become emperor.#!" + administrative_government_vassals_label: "[administrative|E] [obligations|E] are based on [GetPlayer.Custom('GetProvinceAdministrationConcept')]" + administrative_obligations: "Administrative Obligations" + administrative_themes: "Available Administration Types" + admin_theme_balanced: "@balanced_administration! Balanced Administration" + admin_theme_balanced_short: "@balanced_administration! Balanced" + admin_theme_balanced_text_icon: "@balanced_administration!" + admin_theme_balanced_desc: "#flavor A well balanced administration seeks moderation to ensure equal attention in all areas of governance.#!" + admin_theme_military: "@military_administration! Military Administration" + admin_theme_military_short: "@military_administration! Military" + admin_theme_military_text_icon: "@military_administration!" + admin_theme_military_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [martial|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_skill_increase_value')|+1%/] for each [skill|E] Point#!#!" + admin_theme_military_desc: "#flavor A military administration puts all energy on recruiting and training formidable troops for the imperial army.#!" + admin_theme_civilian: "@civilian_administration! Civilian Administration" + admin_theme_civilian_short: "@civilian_administration! Civilian" + admin_theme_civilian_text_icon: "@civilian_administration!" + admin_theme_civilian_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [stewardship|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_skill_increase_value')|+1%/] for each [skill|E] Point#!#!\n[influence|E] gained from constructing [buildings|E] in held [counties|E] is increased" + admin_theme_civilian_desc: "#flavor Exempt from military service, a civilian administration focuses on improving the economy and well-being of the citizens.#!" + admin_theme_frontier: "@frontier_administration! Frontier Administration" + admin_theme_frontier_short: "@frontier_administration! Frontier" + admin_theme_frontier_text_icon: "@frontier_administration!" + admin_theme_frontier_benefits: "#emphasis #bold [liege|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Unlocks the #high $frontier_influence_war_interaction$#! [interaction|E] allowing the liege to request the [vassal|E] to declare war for a foreign [duchy|E]-tier [title|E]\n\n#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [prowess|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_skill_increase_value')|+1%/] for each [skill|E] Point#!#!\n$EFFECT_LIST_BULLET$ Unlocks the #high $EXPANSION_DUCHY_CB_NAME$#! [casus_belli|E]\n$EFFECT_LIST_BULLET$ Enables [raiding|E]" + admin_theme_frontier_desc: "#flavor One cannot leave the borders undefended. A frontier administration will ensure the realm's defenses and stand ready to repel any potential invaders.#!" + admin_theme_imperial: "@imperial_administration! Imperial Administration" + admin_theme_imperial_short: "@imperial_administration! Imperial" + admin_theme_imperial_text_icon: "@imperial_administration!" + admin_theme_imperial_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [prestige_level|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_currency_level_increase_value')|+0%/] for each level#!#!\n$EFFECT_LIST_BULLET$ Increases [powerful_family|E] Rating\nCannot have appointment revoked without a [revoke_title_reason|E]" + admin_theme_imperial_desc: "#flavor An imperial administration provides a significant level of autonomy and freedom from many regular responsibilities. It is the most prestigious administration one can have.#!" + admin_theme_naval: "@naval_administration! Naval Administration" + admin_theme_naval_short: "@naval_administration! Naval" + admin_theme_naval_text_icon: "@naval_administration!" + admin_theme_naval_benefits: "#emphasis #bold [liege|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Unlocks the #high $frontier_influence_war_interaction$#! [interaction|E] allowing the liege to request the [vassal|E] to declare war for a foreign [duchy|E]-tier [title|E]\n\n#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] for every controlled #high [GetBuilding('common_tradeport_01').GetTypeName]#!#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_building_increase_value')|+0%/] for each [GetBuilding('common_tradeport_01').GetTypeName]#!#!\n$EFFECT_LIST_BULLET$ Unlocks the #high $NAVAL_EXPANSION_DUCHY_CB_NAME$#! [casus_belli|E]" + admin_theme_naval_desc: "#flavor The navy is the backbone of any expansive realm. With a dedicated naval administration, safety and efficiency at sea will be highly increased.#!" + ADMINISTRATIVE_CONTRACT: "[Character.Custom( 'GetProvinceConceptNoTooltip' )] Administration" + admin_theme_frontier_valid_desc: "The [vassal.Custom( 'GetProvinceConceptNoTooltip' )] must border another [realm|E]" + admin_theme_imperial_valid_desc: "Only one [vassal.Custom( 'GetProvinceConceptNoTooltip' )] can have this administration active" + admin_theme_naval_valid_desc: "The [vassal.Custom( 'GetProvinceConceptNoTooltip' )] must be Coastal" + admin_contract_forbids_revocation_desc: "You cannot revoke [titles|E] or Appointments from a [vassal|E] governing with the [GetSubjectContractType( 'administrative_themes' ).GetObligationName( 'admin_theme_imperial' )] unless you have a [revoke_title_reason|E]" + admin_vassal: "Administrative" + admin_vassal_desc: "$game_concept_administrative_desc$" + + # Landless Adventurer Camps + landless_adventurer_government: "Adventurer" + landless_adventurer_government_with_icon: "@government_type_adventurer! $landless_adventurer_government$" + landless_adventurer_government_adjective: "Adventurer" + landless_adventurer_government_realm: "Adventurer Camp" + landless_adventurer_government_desc: "\n$game_concept_adventurer_desc$" + conditional_maa_refill_rule: "only [reinforce_soldiers|E] troops" + adventurer_rule: "only earn [gold|E] and [prestige|E] by undertaking [task_contracts|E]" + mercenary_rule: "be hired to serve as [mercenaries|E] by [landed|E] [rulers|E]" + adult_rulers_only: "#N May only be ruled by [adults|E]#!" + + # Nomads + nomad_government: "Nomadic" + nomad_government_with_icon: "@government_type_nomad! $nomad_government$" + nomad_government_adjective: "Nomadic" + nomad_government_realm: "Nomadic Land" + nomad_government_desc: "\n$game_concept_nomadic_desc$\n\n#F For nomads, moving is their way of life. Ensuring that the herd can grow is their primary concern. Every ruler is only as strong as the strength of their people.#!" + NOMAD_CONTRACT: "Nomadic Contract" + nomad_vassal: "Nomadic" + nomad_vassal_desc: "Under the Nomadic [government_form|E], a [nomad|E] offers some [herd|E] to their [liege|E] in exchange for land and protection. The specifics are regulated by the [vassal_contract|E] between Vassal and Liege." + government_can_use_tributary_men_at_arms: "Can #V recruit#! [men_at_arms|E] from [tributaries|E]" + ignores_faith_marriage_penalties: "#indent_newline:3 Ignores [faith|E] when arranging [marriages|E] with [GetGovernment( 'nomad_government' ).GetName] or [GetGovernment( 'herder_government' ).GetName] [rulers|E] or their [tributaries|E]#!" + is_nomad_title: "Is [GetGovernment( 'nomad_government' ).GetName] Camp [title|E]" + can_start_war_with_raised_troops: "Can start [wars|E] with raised [armies|E]" + movement_speed_from_government: "$MOD_MOVEMENT_SPEED$: #P +10%#!" + land_raiding_movement_speed_from_government: "$MOD_MOVEMENT_SPEED_LAND_RAIDING$: #P +10%#!" + no_hostile_attrition_in_steppe: "#indent_newline:3 No #V Hostile County#! [attrition|E] while [raiding|E] in [the_great_steppe|E]#!" + can_raze_holdings: "Can Raze [holdings|E] for [gold|E]" + + nomad_government_herd: "[herd|U] Tithes" + herd_tax_exempt: "$game_concept_herd$ Exempt" + herd_tax_exempt_short: "Exempt" + herd_tax_low: "Low $game_concept_herd$" + herd_tax_low_short: "Low" + herd_tax_normal: "Normal $game_concept_herd$" + herd_tax_normal_short: "Normal" + herd_tax_high: "High $game_concept_herd$" + herd_tax_high_short: "High" + herd_tax_extortionate: "Extortionate $game_concept_herd$" + herd_tax_extortionate_short: "Extortionate" + prestige_transfer_none: "No $game_concept_prestige$ Transfer" + prestige_transfer_none_short: "None" + prestige_transfer_normal: "Low $game_concept_prestige$ Transfer" + prestige_transfer_normal_short: "Low" + prestige_transfer_high: "High $game_concept_prestige$ Transfer" + prestige_transfer_high_short: "High" + + mandala_government_piety: "[mandala|U] $game_concept_piety$" + mandala_piety_low: "Low $game_concept_piety$ Contribution" + mandala_piety_low_short: "Low" + mandala_piety_normal: "Normal $game_concept_piety$ Contribution" + mandala_piety_normal_short: "Normal" + mandala_piety_high: "High $game_concept_piety$ Contribution" + mandala_piety_high_short: "High" + + mandala_government_taxes: "[mandala|U] Taxes" + mandala_tax_exempt: "Tax Exempt" + mandala_tax_exempt_short: "Exempt" + mandala_tax_low: "Low Taxes" + mandala_tax_low_short: "Low" + mandala_tax_normal: "Normal Taxes" + mandala_tax_normal_short: "Normal" + mandala_tax_high: "High Taxes" + mandala_tax_high_short: "High" + mandala_tax_extortionate: "Extortionate Taxes" + mandala_tax_extortionate_short: "Extortionate" + + mandala_government_levies: "[mandala|U] $game_concept_levies$" + mandala_levies_exempt: "No Contribution" + mandala_levies_exempt_short: "None" + mandala_levies_low: "Low $game_concept_levy$ Contribution" + mandala_levies_low_short: "Low" + mandala_levies_medium: "Medium $game_concept_levy$ Contribution" + mandala_levies_medium_short: "Medium" + mandala_levies_high: "High $game_concept_levy$ Contribution" + mandala_levies_high_short: "High" + mandala_levies_extortionate: "Massive $game_concept_levy$ Contribution" + mandala_levies_extortionate_short: "Massive" + + mandala_government_prestige: "[mandala|U] $game_concept_prestige$" + mandala_prestige_low: "Low $game_concept_prestige$ Contribution" + mandala_prestige_low_short: "Low" + mandala_prestige_normal: "Normal $game_concept_prestige$ Contribution" + mandala_prestige_normal_short: "Normal" + mandala_prestige_high: "High $game_concept_prestige$ Contribution" + mandala_prestige_high_short: "High" + + kurultai_rights: "Kurultai Rights" + kurultai_rights_none: "No $kurultai_rights$" + kurultai_rights_none_desc: "#flavor The [vassal] is not granted any out-of-the-ordinary privileges when it comes to the [kurultai|E].#!" + kurultai_rights_none_short: "None" + kurultai_rights_guaranteed: "$kurultai_rights$ Guaranteed" + kurultai_rights_guaranteed_desc: "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The #high $force_onto_council$#! [interaction|E] can be used at will\n\n#flavor The [vassal] is granted special [kurultai|E] privileges, and will expect a permanent seat on the [kurultai|E]. Granting this privilege to too many [vassals] will eventually upset the [powerful_vassals] of the [realm|E].#!" + kurultai_rights_guaranteed_short: "Guaranteed" + + liege_war_participation_obligation: "Liege War Support" + liege_war_participation_obligation_none: "No $liege_war_participation_obligation$" + liege_war_participation_obligation_none_desc: "#flavor The [liege|E] will not join the [vassal|E]'s wars.#!" + liege_war_participation_obligation_none_short: "None" + liege_war_participation_obligation_forced: "Forced $liege_war_participation_obligation$" + liege_war_participation_obligation_forced_desc: "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The [vassal|E] can use the $call_ally_interaction$ [interaction|E] on the [liege|E]\n\n.#flavor Refusal will result in [prestige|E] loss for the [liege|E] and the [vassal|E] will stop being [obedient|E] if they were so before.#!" + liege_war_participation_obligation_forced_short: "Forced" + + suzerain_war_participation_guarantee: "Suzerain Guarantee" + suzerain_war_participation_guarantee_none: "No $suzerain_war_participation_guarantee$" + suzerain_war_participation_guarantee_none_desc: "#flavor The [suzerain|E] cannot be called into the [tributary|E]'s defensive wars, but may still offer to do so.#!" + suzerain_war_participation_guarantee_none_short: "None" + suzerain_war_participation_guarantee_available: "$suzerain_war_participation_guarantee$" + suzerain_war_participation_guarantee_available_desc: "#emphasis #bold [tributary|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ If attacked, the [tributary|E] can use the $call_ally_interaction$ [interaction|E] on the [suzerain|E].\n\n#flavor Refusal will result in [prestige|E] loss for the [suzerain|E] and the [tributary|E] will be released.#!" + suzerain_war_participation_guarantee_available_short: "Guaranteed" + suzerain_war_participation_guarantee_tt: "[recipient.GetShortUIName] does #bold not#! have [GetSubjectContractType( 'suzerain_war_participation_guarantee' ).GetObligationName( 'suzerain_war_participation_guarantee_available' )] [tributary_contract|E] Privilege" + + mandala_suzerain_war_participation_guarantee: "$suzerain_war_participation_guarantee$" + mandala_suzerain_war_participation_guarantee_none: "$suzerain_war_participation_guarantee_none$" + mandala_suzerain_war_participation_guarantee_none_desc: "$suzerain_war_participation_guarantee_none_desc$" + mandala_suzerain_war_participation_guarantee_none_short: "$suzerain_war_participation_guarantee_none_short$" + mandala_suzerain_war_participation_guarantee_available: "$suzerain_war_participation_guarantee_available$" + mandala_suzerain_war_participation_guarantee_available_desc: "$suzerain_war_participation_guarantee_available_desc$" + mandala_suzerain_war_participation_guarantee_available_short: "$suzerain_war_participation_guarantee_available_short$" + + tributary_war_participation_obligation: "Tributary War Support" + tributary_war_participation_obligation_none: "No $tributary_war_participation_obligation$" + tributary_war_participation_obligation_none_desc: "#flavor The [tributary|E] will not automatically join the [suzerain|E]'s wars, but may still offer to do so.#!" + tributary_war_participation_obligation_none_short: "None" + tributary_war_participation_obligation_forced: "Forced $tributary_war_participation_obligation$" + tributary_war_participation_obligation_forced_desc: "#emphasis #bold [suzerain|E] Privilege:#!#!\nThe [tributary|E] will automatically be called into the [suzerain|E]'s wars." + tributary_war_participation_obligation_forced_short: "Forced" + + # Raiding rights + raiding_rights: "Raiding Privileges" + raiding_rights_none: "No $raiding_rights$" + raiding_rights_none_desc: "#flavor The [vassal|E] cannot raid any other fellow vassals.#!" + raiding_rights_none_short: "None" + raiding_rights_granted: "$raiding_rights$ Granted" + raiding_rights_granted_desc: "#emphasis #bold [vassal|E] Privilege:#!#!\n$EFFECT_LIST_BULLET$ The [vassal|E] is allowed to raid other fellow vassals\n\n#flavor The restrictions on raiding fellow [vassals|E] are lifted and the vassal can target any other peer vassal.#!" + raiding_rights_granted_short: "Granted" + + CB_CONFEDERATION_VASSALS: "Attacking a fellow [confederation|E] member" + + # Herders + herder_government: "Herder" + herder_government_with_icon: "@government_type_herder! $herder_government$" + herder_government_adjective: "Herder" + herder_government_realm: "Pastureland" + herder_government_desc: "\n$game_concept_herder_desc$\n\n#F Herders do not concern themselves with any aspects of rulership. They tend to their flock, and just their flock.#!" + herder_vassal: "Herder" + herder_vassal_desc: "$game_concept_herder_desc$" + herder_government_vassals_label: "Herder [obligations|E] cannot be adjusted" + + nomad_government_vassals_label: "Nomad [obligations|E] are based on each [vassal|E]'s [vassal_contract|E]" + + # Mandala + mandala_government: "Mandala" + mandala_government_with_icon: "@government_type_mandala! $mandala_government$" + mandala_government_adjective: "Mandala" + mandala_government_realm: "Mandala Realm" + mandala_government_vassals_label: "Mandala [obligations|E] are based on each [vassal|E]'s [vassal_contract|E]" + mandala_government_desc: "\n$game_concept_mandala_desc$\n\n#F The petals of the Mandala government may wither and die, but at the core stands the divine right, manifested in the Devaraja. An ambitious enough ruler can make the Mandala last, #EMP eternally#!. #!" + mandala_vassal: "Mandala" + mandala_vassal_desc: "$game_concept_mandala_desc$" + liege_piety_level_desc: "Your [piety_level|E] is [GetPietyLevelName(liege.GetPietyLevel)|L]" + suzerain_piety_level_desc: "Your [piety_level|E] is [GetPietyLevelName(suzerain.GetPietyLevel)|L]" + has_coerce_tributary_scheme: "May use the [GetScheme('coerce_tributary').GetTypeName] [scheme|E]" + additional_piety_from_religious_buildings: "Gains additional [piety|E] from constructing [pious_buildings|E] and [temple_citadels|E]" + can_perform_ritual_contracts: "Realm provinces and [subjects|E] occasionally spawn [mandala_rituals|E]" + uses_mandala_aspects: "Uses [mandala_aspects|E]" + uses_mandala_decrees: "Uses [mandala_decrees|E]" + devaraja_blessings_msg: "Devaraja Blessings Shine Upon You" + devaraja_divinity_msg: "Your Devaraja Followers Adore You" + + # Celestial + celestial_obligations: "Celestial Obligations" + celestial_provinces: "$administrative_themes$" + celestial_province_standard: "@celestial_standard_administration! Standard Administration" + celestial_province_standard_short: "Standard" + celestial_province_standard_text_icon: "@celestial_standard_administration!" + celestial_province_standard_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\nUses [GetLaw('celestial_appointment_succession_law').GetName]" + celestial_province_standard_desc: "#low A civil type that attends to the everyday needs of the government and the local inhabitants#!" + celestial_province_industrial: "@celestial_industrial_administration! Industrial Administration" + celestial_province_industrial_short: "Industrial" + celestial_province_industrial_text_icon: "@celestial_industrial_administration!" + celestial_province_industrial_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\nUses [GetLaw('celestial_appointment_succession_law').GetName]\n\n#alert_trial @alert_icon! Limited to [EmptyScope.ScriptValue('celestial_province_industrial_max_value')|V0]#!" + celestial_province_industrial_desc: "#low A civil administration that focuses on improving the area's productivity and long-term development.#!" + celestial_province_industrial_amount_desc: "$celestial_province_industrial_short$ limit reached" + celestial_province_metropolitan: "@celestial_metropolitan_administration! Metropolitan Administration" + celestial_province_metropolitan_short: "Metropolitan" + celestial_province_metropolitan_text_icon: "@celestial_metropolitan_administration!" + celestial_province_metropolitan_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [diplomacy|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_skill_increase_value')|+1%/] for each [skill|E] Point#!#!\n$EFFECT_LIST_BULLET$ Uses [GetLaw('celestial_appointment_succession_law').GetName]\n\n#alert_trial @alert_icon! Limited to [EmptyScope.ScriptValue('celestial_province_metropolitan_max_value')|V0]#!" + celestial_province_metropolitan_desc: "#low An efficient civil administration applied to larger urban areas. It greatly emphasizes on efficient use of taxes and making cities prosper.#!" + celestial_province_metropolitan_amount_desc: "$celestial_province_metropolitan_short$ limit reached" + celestial_province_military: "@celestial_military_administration! Military Administration" + celestial_province_military_short: "Military" + celestial_province_military_text_icon: "@celestial_military_administration!" + celestial_province_military_benefits: "#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Can recruit [GetMaA('zhanmadao_infantry').GetName]\n$EFFECT_LIST_BULLET$ Uses [GetLaw('celestial_military_appointment_succession_law').GetName]\n\n#alert_trial @alert_icon! Limited to [EmptyScope.ScriptValue('celestial_province_military_max_value')|V0] at this tier#!" + celestial_province_military_desc: "#low A military administration that enables the mustering of troops. Providing the realm with the means of protecting itself, or expanding its borders when necessary.#!" + celestial_province_military_amount_desc: "$celestial_province_military_short$ limit reached" + celestial_province_protectorate: "@celestial_protectorate_administration! Protectorate Administration" + celestial_province_protectorate_short: "Protectorate" + celestial_province_protectorate_text_icon: "@celestial_protectorate_administration!" + celestial_province_protectorate_benefits: "#emphasis #bold [liege|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Unlocks the #high $frontier_influence_war_interaction$#! [interaction|E] allowing the liege to request the [vassal|E] to declare war for a foreign [duchy|E]-tier [title|E]\n\n#emphasis #bold [vassal|E] Benefits:#!#!\n$EFFECT_LIST_BULLET$ Increases [governor_efficiency|E] based on [martial|E]#indent_newline:4 \n#weak Adds an extra [EmptyScope.ScriptValue('efficiency_skill_increase_value')|+1%/] for each [skill|E] Point#!#!\n$EFFECT_LIST_BULLET$ Can recruit [GetMaA('zhanmadao_infantry').GetName]\n$EFFECT_LIST_BULLET$ Uses [GetLaw('celestial_military_appointment_succession_law').GetName]\n\n#alert_trial @alert_icon! Limited to [EmptyScope.ScriptValue('celestial_province_protectorate_max_value')|V0]#!" + celestial_province_protectorate_desc: "#low A greatly improved military administration. A protectorate will significantly bolster our military might!#!" + celestial_province_protectorate_amount_desc: "$celestial_province_protectorate_short$ limit reached" + celestial_province_de_jure_desc: "Is #bold not#! a [de_jure|E] [title|E]" + celestial_province_metropolitan_name_desc: "[GetSubjectContractType( 'celestial_provinces' ).GetObligationName( 'celestial_province_metropolitan' )]" + celestial_province_protectorate_name_desc: "[GetSubjectContractType( 'celestial_provinces' ).GetObligationName( 'celestial_province_protectorate' )]" + celestial_government_vassals_label: "[celestial|E] [obligations|E] are based on [GetPlayer.Custom('GetProvinceAdministrationConcept')]" + celestial_ministry_obligations: "[ministry_obligations|E]" + celestial_minister_none: "None" + celestial_minister_none_short: "$celestial_minister_none$" + celestial_minister_civil: "Ministry Obligations" + celestial_minister_civil_short: "Ministry" + celestial_minister_military: "Grand Marshal Obligations" + celestial_minister_military_short: "Grand Marshal" + liege_is_not_civilian_desc: "[liege.GetShortUIName|U] [CharAreIs( liege )] #bold not#! a [civilian_governor|E]" + liege_is_not_military_desc: "[liege.GetShortUIName|U] [CharAreIs( liege )] #bold not#! a [military_governor|E]" + + # Maritime Tribal + wanua_government: "Wanua" + wanua_government_with_icon: "@government_type_wanua! $wanua_government$" + wanua_government_adjective: "Wanua" + wanua_government_realm: "Wanua Realm" + wanua_government_desc: "\n$game_concept_wanua_desc$\n\n#F From their coastal settlements, [Glossary( 'Wanua', 'WANUA_GLOSS' )] rulers are able to cross the seas to barter and raid far more effectively than their continental $tribal_government_adjective$ counterparts.#!" + WANUA_GLOSS: "A collection of small villages and rural communities in Maritime Southeast Asia is often called a #italic Wanua#!, #italic Banwa#!, #italic Manua#!, and many other linguistic variants of the Malayic root word." + + wanua_government_obligations: "$tribal_government_obligations$" + wanua_government_vassals_label: "$wanua_government_adjective$ [obligations|E] are based on [prestige_level|E] of [liege|E]" + wanua_liege_inefficiency_plus_perk: "[liege|E] is [wanua|E] and has [GetPerk( 'detailed_ledgers_perk' ).GetName( GetPlayer )]" + wanua_liege_inefficiency: "[liege|E] is [wanua|E]" + wanua_vassal: "$wanua_government_adjective$" + wanua_vassal_desc: "$game_concept_wanua_desc$" + government_enables_trade_ports: "#indent_newline:3 Allows the #V $building_type_common_tradeport_01$#! line of [buildings|E] to be constructed in coastal [wanua|E] [holdings|E]#!" + government_enables_river_travel: "#indent_newline:3 $unlocks_sailable_major_rivers$#!" + government_enables_naval_raiding: "#indent_newline:3 $unlocks_naval_raiding$#!" + + celestial_treasury: "[treasury_vassal_development|E]" + celestial_treasury_very_low: "Very Low $game_concept_treasury_vassal_development$" + celestial_treasury_very_low_short: "Very Low" + celestial_treasury_low: "Low $game_concept_treasury_vassal_development$" + celestial_treasury_low_short: "Low" + celestial_treasury_medium: "Medium $game_concept_treasury_vassal_development$" + celestial_treasury_medium_short: "Medium" + celestial_treasury_high: "High $game_concept_treasury_vassal_development$" + celestial_treasury_high_short: "High" + celestial_treasury_very_high: "Very High $game_concept_treasury_vassal_development$" + celestial_treasury_very_high_short: "Very High" + + celestial_salary: "[governor_salary|E]" + celestial_salary_very_low: "Meager Salary" + celestial_salary_very_low_short: "Meager" + celestial_salary_low: "Modest Salary" + celestial_salary_low_short: "Modest" + celestial_salary_medium: "Average Salary" + celestial_salary_medium_short: "Average" + celestial_salary_high: "Generous Salary" + celestial_salary_high_short: "Generous" + celestial_salary_very_high: "Extravagant Salary" + celestial_salary_very_high_short: "Extravagant" + + salary: "$celestial_salary$" + salary_very_low: "$celestial_salary_very_low$" + salary_very_low_short: "$celestial_salary_very_low$" + salary_low: "$celestial_salary_low$" + salary_low_short: "$celestial_salary_low_short$" + salary_medium: "$celestial_salary_medium$" + salary_medium_short: "$celestial_salary_medium_short$" + salary_high: "$celestial_salary_high$" + salary_high_short: "$celestial_salary_high_short$" + salary_very_high: "$celestial_salary_very_high$" + salary_very_high_short: "$celestial_salary_very_high_short$" + + treasury_very_low: "$celestial_treasury_very_low$" + treasury_very_low_short: "$celestial_treasury_very_low_short$" + treasury_low: "$celestial_treasury_low$" + treasury_low_short: "$celestial_treasury_low_short$" + treasury_medium: "$celestial_treasury_medium$" + treasury_medium_short: "$celestial_treasury_medium_short$" + treasury_high: "$celestial_treasury_high$" + treasury_high_short: "$celestial_treasury_high_short$" + treasury_very_high: "$celestial_treasury_very_high$" + treasury_very_high_short: "$celestial_treasury_very_high_short$" + + celestial_ministry_budget: "Ministry Budget" + celestial_ministry_budget_low: "Low Budget" + celestial_ministry_budget_low_short: "Low" + celestial_ministry_budget_medium: "Medium Budget" + celestial_ministry_budget_medium_short: "Medium" + celestial_ministry_budget_high: "High Budget" + celestial_ministry_budget_high_short: "High" + + tributary_celestial: "Celestial Tributary" + tributaries_celestial: "Celestial Tributaries" + tributary_celestial_desc: "A Celestial [tributary|E] provides their [suzerain|E] with [gold|E] and [prestige|E] on a regular basis. In exchange, they will derive [legitimacy|E] from their [suzerain|E], who will also refrain from [raiding|E] or making war [war|E] upon them.\n\n$tributaries_celestial$ with high @imperial_grace_icon! [imperial_grace|E] may be granted a [seal_of_investiture|E] from their $game_concept_suzerain$, conferring additional benefits." + tributary_hegemonic: "Hegemonic Tributary" + tributaries_hegemonic: "Hegemonic Tributaries" + tributary_hegemonic_desc: "A Hegemonic [tributary|E] provides their [suzerain|E] with [gold|E] and [prestige|E] on a regular basis. In exchange, they will derive [legitimacy|E] from their [suzerain|E], who will also refrain from [raiding|E] or making war [war|E] upon them." + + celestial_tribute_gold: "[gold|U]" + celestial_tributary_tax_none: "No [taxes|E]" + celestial_tributary_tax_none_short: "None" + celestial_tributary_tax_low: "Low [taxes|E]" + celestial_tributary_tax_low_short: "Low" + celestial_tributary_tax_normal: "Medium [taxes|E]" + celestial_tributary_tax_normal_short: "Medium" + celestial_tributary_tax_high: "High [taxes|E]" + celestial_tributary_tax_high_short: "High" + + celestial_tribute_prestige: "[prestige|U]" + celestial_prestige_transfer_none: "No $game_concept_prestige$ Transfer" + celestial_prestige_transfer_none_short: "None" + celestial_prestige_transfer_low: "Low $game_concept_prestige$ Transfer" + celestial_prestige_transfer_low_short: "Low" + celestial_prestige_transfer_normal: "Medium $game_concept_prestige$ Transfer" + celestial_prestige_transfer_normal_short: "Medium" + celestial_prestige_transfer_high: "High $game_concept_prestige$ Transfer" + celestial_prestige_transfer_high_short: "High" + + hegemonic_tribute_gold: "[gold|U]" + hegemonic_tributary_tax_none: "No [taxes|E]" + hegemonic_tributary_tax_none_short: "None" + hegemonic_tributary_tax_low: "Low [taxes|E]" + hegemonic_tributary_tax_low_short: "Low" + hegemonic_tributary_tax_normal: "Medium [taxes|E]" + hegemonic_tributary_tax_normal_short: "Medium" + hegemonic_tributary_tax_high: "High [taxes|E]" + hegemonic_tributary_tax_high_short: "High" + + hegemonic_tribute_prestige: "[prestige|U]" + hegemonic_prestige_transfer_none: "No $game_concept_prestige$ Transfer" + hegemonic_prestige_transfer_none_short: "None" + hegemonic_prestige_transfer_low: "Low $game_concept_prestige$ Transfer" + hegemonic_prestige_transfer_low_short: "Low" + hegemonic_prestige_transfer_normal: "Medium $game_concept_prestige$ Transfer" + hegemonic_prestige_transfer_normal_short: "Medium" + hegemonic_prestige_transfer_high: "High $game_concept_prestige$ Transfer" + hegemonic_prestige_transfer_high_short: "High" + + celestial_salary_rank: "Salary Rank" + celestial_salary_rank_none: "None" + celestial_salary_rank_none_short: "None" + celestial_salary_rank_county: "[county|E] [title_tier|E]: Prefecture" + celestial_salary_rank_county_short: "Prefecture" + celestial_salary_rank_duchy: "[duchy|E] [title_tier|E]: Province" + celestial_salary_rank_duchy_short: "Province" + celestial_salary_rank_kingdom: "[kingdom|E] [title_tier|E]: Circuit" + celestial_salary_rank_kingdom_short: "Circuit" + celestial_salary_rank_empire: "[empire|E] [title_tier|E]: Great Circuit" + celestial_salary_rank_empire_short: "Great Circuit" + celestial_salary_rank_minister: "[empire|E] [title_tier|E]: Minister" + celestial_salary_rank_minister_short: "Minister" + + administrative_salary_rank: "$celestial_salary_rank$" + administrative_salary_rank_none: "$celestial_salary_rank_none$" + administrative_salary_rank_none_short: "$celestial_salary_rank_none_short$" + administrative_salary_rank_duchy: "[duchy|E] [title_tier|E]: Theme" + administrative_salary_rank_duchy_short: "Theme" + administrative_salary_rank_kingdom: "[kingdom|E] [title_tier|E]: Catepan" + administrative_salary_rank_kingdom_short: "Catepan" + administrative_salary_rank_empire: "[empire|E] [title_tier|E]: Great Catepan" + administrative_salary_rank_empire_short: "Great Catepan" + + celestial_tributary_investiture_privilege_trade: "Trade Privileges" + investiture_trade_yes_short: "Market Access" + investiture_trade_yes: "Access to Imperial Markets" + investiture_trade_yes_desc: "#emphasis #bold [tributary|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ Annual [development_growth|E] (up to [EmptyScope.ScriptValue('celestial_investiture_trade_bonus_max')|v0]) in [tributary_possessive|E] [capital|E] [province|E]\n\n#flavor Access to [GetTitleByKey('h_china').GetDefinitiveNamePossessive] bustling markets benefits the prosperity of its privileged [tributaries|E]. The impact increases with the difference in [development|E] between the $game_concept_capitals$ and the amount of [imperial_grace|E] a privileged $game_concept_tributary$ has accrued.#!" + investiture_trade_no: "Sealed off from Imperial Markets" + msg_tributary_capital_province_development_growth_title: "Successful Trade Mission" + msg_tributary_capital_province_development_growth_desc: "Bustling trade with imperial markets in [GetTitleByKey('h_china').GetDefinitiveName] has improved [development|E] in [ROOT.Char.GetCapitalLocation.GetName]." + + celestial_tributary_investiture_privilege_marriage: "Familial Privileges" + investiture_marriage_yes_short: "Family Access" + investiture_marriage_yes: "Invited into the Imperial Family" + investiture_marriage_yes_desc: "#emphasis #bold [tributary|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ Increased [marriage|E] Acceptance with [GetTitleByKey('h_china').GetDefinitiveNamePossessive] ruling [dynasty|E]\n$EFFECT_LIST_BULLET$ Nullified [marriage|E] Acceptance penalties from #BOLD $tradition_cultural_primacy_name$#!\n\n#flavor The imperial family of [GetTitleByKey('h_china').GetDefinitiveName] is often impenetrable to outsiders. A formal invitation into the family yields an Acceptance bonus relative to [imperial_grace|E], and removes the usual penalties that apply to outsiders.#!" + investiture_marriage_no: "Closed out of the Imperial Family" + INCREASED_MARRIAGE_ACCEPTANCE_INVESTITURE_MARRIAGE_REASON: "[tributary|E] has $celestial_tributary_investiture_privilege_marriage$: $VALUE|=+0$" + + celestial_tributary_investiture_privilege_politics: "Palace Privileges" + investiture_politics_yes_short: "Palace Access" + investiture_politics_yes: "Access to the Imperial Palace" + investiture_politics_yes_desc: "#emphasis #bold [tributary|E] Privileges:#!#!\n$EFFECT_LIST_BULLET$ Becomes an active participant in the [dynastic_cycle|E]\n$EFFECT_LIST_BULLET$ Gains [movement_power|E] relative to [imperial_grace|E]\n\n#flavor While most [tributaries|E] of [GetTitleByKey('h_china').GetDefinitiveName] are expected only to observe the celestial order, a rare few may be granted a voice in its turning. Access to the imperial palace involves the privileged $game_concept_tributary$ in the $game_concept_dynastic_cycle$, letting them join a [movement|E] and influence its [situation_dynastic_cycle_phase|E].#!" + investiture_politics_no: "Shuttered from the Imperial Palace" + + TRIBUTARY_GAIN_LEGITIMACY: "Tributary gains @legitimacy_icon! per [suzerain|E] [radiance|e] [CHARACTER.GetRadianceValueNoTooltip|V0]/[GetDefine( 'NMandala', 'MAX_RADIANCE' )|V0]" + + wanua_obligations: "$tribal_government_obligations$" + barter_goods_obligations: "[barter_goods|E]" + barter_goods_low: "Low [barter_goods|E]" + barter_goods_low_short: "Low" + barter_goods_medium: "Medium [barter_goods|E]" + barter_goods_medium_short: "Medium" + barter_goods_high: "High [barter_goods|E]" + barter_goods_high_short: "High" + + # Meritocratic + meritocratic_treasury: "$celestial_treasury$" + meritocratic_salary: "$celestial_salary$" + meritocratic_salary_rank: "$celestial_salary_rank$" + meritocratic_salary_rank_none: "$celestial_salary_rank_none$" + meritocratic_salary_rank_none_short: "$celestial_salary_rank_none_short$" + meritocratic_salary_rank_county: "$celestial_salary_rank_county$" + meritocratic_salary_rank_county_short: "$celestial_salary_rank_county_short$" + meritocratic_salary_rank_duchy: "$celestial_salary_rank_duchy$" + meritocratic_salary_rank_duchy_short: "$celestial_salary_rank_duchy_short$" + meritocratic_salary_rank_kingdom: "$celestial_salary_rank_kingdom$" + meritocratic_salary_rank_kingdom_short: "$celestial_salary_rank_kingdom_short$" + meritocratic_salary_rank_empire: "$celestial_salary_rank_empire$" + meritocratic_salary_rank_empire_short: "$celestial_salary_rank_empire_short$" + + meritocratic_government_vassals_label: "[meritocratic|E] [obligations|E] are based on [GetPlayer.Custom('GetProvinceAdministrationConcept')]" + + appointment_title_value.county_income: "Every held [county|E] income" + appointment_title_value.counties: "Every held [county|E]" + appointment_title_value.maa_size: "[title_men_at_arms|E] size" + appointment_title_value.neighboring_enemy_counties: "Every neighboring enemy [county|E]" + appointment_title_value.protectorate: "[GetSubjectContractType( 'celestial_provinces' ).GetObligationName( 'celestial_province_protectorate' )]" + appointment_title_value.capital_income: "[capital_possessive|E] income" + appointment_title_value.diarch: "[grand_secretariat_director|E]" + appointment_title_value.minister: "[minister|E] [title|E]" + appointment_title_value.distance_to_capital: "Distance to [capital|E]" diff --git a/localization/english/replace/holding_view_l_english.yml b/localization/english/replace/holding_view_l_english.yml new file mode 100644 index 00000000..2f73a62a --- /dev/null +++ b/localization/english/replace/holding_view_l_english.yml @@ -0,0 +1,289 @@ +l_english: + HOLDING_TAX:0 "[tax|E]:" + HOLDING_TAX_VALUE: "@gold_icon! [Holding.GetIncome|2=]" + HOLDING_BARTER_GOODS: "[barter_goods|E]:" + HOLDING_BARTER_GOODS_VALUE: "@barter_goods_icon! [HoldingView.GetHolding.GetBarterGoodsIncome|1=]" + HOLDING_LOOT: "[loot|E]" + HOLDING_LOOT_VALUE: "@loot_icon! [Holding.GetProvince.GetLoot|0V]" + HOLDING_FORT_LEVEL: "[fort_level|E]" + HOLDING_GARRISON: "[garrison|E]:" + HOLDING_EMPTY:0 "No [holding|E]" + HOLDING_CONSTRUCTING:0 "Constructing [HOLDING_TYPE.GetName] [holding|E]" + COUNTY_OCCUPANT:0 "County Occupant" + CONSTRUCT: "Construct" + CONSTRUCT_COST: "Construct Cost" + UPGRADE: "Upgrade" + UPGRADE_DOMICILE: "Upgrade to Level [DomicileBuilding.GetTierNumber]" + UPGRADE_COST: "Upgrade Cost" + CURRENT_BUILDING:0 "Current Building" + CV_BUILDING_LEVEL_AND_NAME:1 "Level I: #high [Building.GetNameNoTooltip]#!" + BUILDING_TYPE_REGULAR: "[building|E]" + BUILDING_TYPE_SPECIAL: "[special_building|E]" + BUILDING_TYPE_GREAT: "[great_building|E]" + BUILDING_TYPE_DUCHY: "[duchy_building|E]" + CONSTRUCT_HOLDING_TITLE:2 "#T Construct [holding|E]#!" + CANT_CONSTRUCT_HOLDING_NO_AVAILABLE:0 "#X @warning_icon! No available [holdings|E] to construct#!" + CONSTRUCT_BUILDING:0 "Construct New $TYPE$" + CONSTRUCT_BUILDING_TITLE:0 "#T Construct New $TYPE$#!" + CONSTRUCT_HOLDING_TYPE_TITLE:0 "#T Construct #V $NAME$#!#!" + CONSTRUCT_BUILDING_TYPE_TITLE:0 "#T Construct #V $NAME$#!#!" + REPLACE_BUILDING_TYPE_TITLE:0 "#T Replacing #V $CURRENT_NAME$#! with #V $REPLACEMENT_NAME$#!#!" + CONSTRUCT_BUILDING_INFO_TITLE:0 "#T $NAME$#!" + CONSTRUCT_BUILDINGS_DETAILS:0 "Preview" + CONSTRUCT_BUILDINGS_DETAILS_TT:0 "#T Building Preview\n#!Show the effects and costs for the upgrades of this [building|E]" + UPGRADE_BUILDING:0 "Upgrade $TYPE$" + CANCEL_CONSTRUCTION:1 "Cancel $TYPE$ Construction" + UPGRADE_HOLDING_TITLE:0 "Upgrade the [holding|E]" + CONSTRUCT_BUILDING_ALREADY_CONSTRUCTING:0 "@warning_icon! #X Another [building|E] is already under construction in this [holding|E]#!" + CONSTRUCT_BUILDING_INVALID_SLOT:0 "@warning_icon! #X This is not a valid slot for a new [building|E]#!" + CONSTRUCT_BUILDING_NONE_POTENTIAL:0 "@warning_icon! #X You do not have any available [buildings|E] for this slot#!" + BUILDING_DEFAULT_TITLE_PREFIX_ALSO_CONSTRUCTING:1 "\n\n#T Current Building:\n[BUILDING.GetNameNoTooltip]\n#!" + BUILDING_DEFAULT_TITLE:2 "#T [BUILDING.GetNameNoTooltip]#! #weak ([BUILDING.GetTypeName])#!\n$TYPE$\n\n" + BUILDING_EFFECT_AND_DESC_TOOLTIP:4 "[BUILDING.GetEffectDescriptionAtProvince( CHARACTER.Self, PROVINCE.Self )]\n\n[BUILDING.GetDescription]" + BUILDING_EFFECT_AND_DESC_DISABLED_TOOLTIP:4 "[BUILDING.GetEffectDescriptionAtProvince( CHARACTER.Self, PROVINCE.Self )]\n\n$DISABLED$\n\n[BUILDING.GetDescription]" + CONSTRUCTING_BUILDING_DESC:4 "[BUILDING.GetEffectDescriptionAtProvince( CHARACTER.Self, PROVINCE.Self )]\n\n$TIME$\n\n[BUILDING.GetDescription]" + CONSTRUCTING_BUILDING_TIME_LEFT:0 "$DAYS$ left" + CONSTRUCT_HOLDING_PRIMARY:1 "The first stage of this [holding|E] is the $NAME|V$" + HOLDING_NOT_THE_COUNTY_HOLDER:1 "@warning_icon! #X Only the [holder|E] of this [county|E] or their [liege|E] is able to construct a new [holding|E]#!" + BUILDING_NOT_THE_BARONY_HOLDER:1 "@warning_icon! #X Only the [holder|E] of this [holding|E] or their [liege|E] is able to construct a new [building|E]#!" + BUILDING_NOT_THE_DIRECT_BARONY_HOLDER_CANCEL: "@warning_icon! #X Only the [holder|E] of this [holding|E] is able to cancel [buildings|E]#!" + BUILDING_NOT_THE_DIRECT_BARONY_HOLDER_OR_LIEGE_REPLACE: "@warning_icon! #X Only the [holder|E] or de facto [liege|E] of this [holding|E] is able to replace [buildings|E]#!" + BUILDING_NOT_THE_BARONY_LESSEE:1 "@warning_icon! #X Only the [lessee|E] or the de facto [liege|E] of this [holding|E] is able to construct a new [building|E]#!" + HOLDING_VIEW_ALREADY_HAS_PRIMARY:0 "@warning_icon! #X This Barony already contains a [holding|E]#!" + HOLDING_VIEW_MISSING_PRIMARY:0 "@warning_icon! #X This Barony does not have a [holding|E] yet#!" + HOLDING_VIEW_MUST_BUILD_OTHER_HOLDING_FIRST:0 "@warning_icon! #X A $MISSING_HOLDING|V$ must first be constructed in this [county|E]#!" + HAS_BUILDING_TYPE:0 "@warning_icon! #X This [holding|E] already contains $TYPE$#!" + ALREADY_CONSTRUCTED:0 "@warning_icon! #X $NAME$ has already been constructed#!" + PREVIOUS_NOT_CONSTRUCTED:1 "@warning_icon! #X $PREVIOUS_NAME$ must be constructed first#!" + HOLDING_TAXES_TOOLTIP_HEADER:0 "#T Tax#!" + HOLDING_INCOME_TOOLTIP_HEADER:0 "#T Loot#!" + HOLDING_INCOME_TOOLTIP_TOTAL:0 "Total [loot|E]" + HOLDING_BARTER_INCOME_TOOLTIP_HEADER: "#T Loot#!" + HOLDING_BARTER_INCOME_TOOLTIP_TOTAL: "Total [loot|E]" + BARTER_TT_MONTHLY_LOOT: "Monthly [loot|E]" + HOLDING_TAXES_TOOLTIP_PLAYER:0 "My income" + HOLDING_TAXES_TOOLTIP_TOTAL:0 "Total [tax|E]" + HOLDING_LEVIES_TOOLTIP_HEADER:0 "#T Levies#!" + HOLDING_LEVIES_TOOLTIP_PLAYER:0 "My [levies|E]" + HOLDING_LEVIES_TOOLTIP_TOTAL:0 "Total [levies|E]" + HOLDING_IN_DOMAIN_LIMIT_GRACE_PERIOD_TOOLTIP:0 "@warning_icon! #X Due to being above your [domain_limit|E], this [recently_acquired_holding|E] will not give any [taxes|E] or [levies|E]#!" + HOLDING_OCCUPIED:0 "[occupied|E] by [CHARACTER.GetShortUIName]" + INVALID_CONSTRUCTION:0 "@warning_icon! #X Invalid construction#!" + DISABLED_BUILDING:1 "@warning_icon! #X Building Disabled because:#!\n$DESC$" + BUILDING_WILL_REENABLE:0 "@warning_icon! Building currently disabled, but will reenable next month" + BUILDING_DISABLED_BY_GRACE_PERIOD:0 "@warning_icon! Holding disabled to avoid the penalties of being above the [domain_limit|E]. Will re-enable in [DATE.GetTimeDiffFromNowNoDays] or when no longer above the Domain Limit" + ABORT_CONSTRUCTION:0 "#T Abort construction#!" + CANT_BE_CONSTRUCTED:0 "@warning_icon! #X Cannot be constructed#!" + SUPPLY_LIMIT:0 "[supply_limit|E]:" + TOP_LIEGE:0 "Top Liege" + CREATE_NEW_HOLDING_BUTTON:0 "Construct new Holding" + CREATE_NEW_HOLDING_HEADING:0 "Construct new [holding|E]" + BUILDING_GOLD_COST:0 "[gold_i] $VALUE|0$" + BUILDING_PIETY_COST:0 "[piety_i] $VALUE|0$" + BUILDING_PRESTIGE_COST:0 "[prestige_i] $VALUE|0$" + BUILDING_TIME:1 "Time" + BUILDING_LEVIES:2 "[levies|E]: @soldier_icon!$VALUE|+=$" + BUILDING_GARRISON:2 "[garrison|E]: @garrison_icon!$VALUE|+=$" + BUILDING_GARRISON_REINFORCEMENT_FACTOR:1 "[garrison_reinforcement|E]: @garrison_icon!$VALUE|+=0%$" + ALREADY_CONSTRUCTING:0 "@warning_icon! #X Already constructing in this Barony#!" + ABORT_BUILDING_CONFIRM_TITLE:0 "Abort Construction" + ABORT_BUILDING_CONFIRM:0 "Aborting this construction will refund the cost, and allow another building to be constructed here." + ABORT_BUILDING_CONFIRM_ACCEPT:0 "Abort" + ABORT_HOLDING_CONFIRM:0 "Aborting this construction will refund the cost, and allow another holding to be constructed here." + CANCEL_HOLDING_CONSTRUCTION:0 "Abort [HoldingView.GetHolding.GetConstructingHoldingType.GetName] Construction" + CANCEL_HOLDING_CONSTRUCTION_TOOLTIP:1 "Cancel [HoldingView.GetHolding.GetConstructingHoldingType.GetName] construction in [HoldingView.GetProvince.GetTitle.GetNameNoTierNoTooltip], and refund the cost." + REPLACE_BUILDING:0 "Replace $TYPE$" + REPLACE_BUILDING_BUTTON:0 "Replace" + REPLACE_BUILDING_PROMPT:0 "#X Replacing this building will destroy the existing building. The cost of the building is not refunded.#!" + NO_POTENTIAL_BUILDINGS_WARNING:0 "#X No available buildings to construct in this slot at this time#!" + SET_COUNTY_CAPITAL_CONFIRM_TITLE:0 "Move [county_capital|E]" + SET_COUNTY_CAPITAL_CONFIRM:0 "[TITLE.GetName] will be the new $game_concept_county_capital$.\n\nSome Buildings in [TITLE_2.GetName] may become inactive." + SET_REALM_CAPITAL_CONFIRM_TITLE:0 "Move [realm_capital|E]" + SET_REALM_CAPITAL_CONFIRM:0 "[TITLE.GetName] will be the new $game_concept_realm_capital$.\n\nSome Buildings in [TITLE_2.GetName] may become inactive." + SET_COUNTY_AND_REALM_CAPITAL_CONFIRM:0 "[TITLE.GetName] will be the new $game_concept_county_capital$ and [realm_capital|E].\n\nSome Buildings in [TITLE_2.GetName] may become inactive." + SET_CAPITAL_CONFIRM_ACCEPT:0 "Move" + BUILDING_PROVINCE_MODIFIER:0 "#T Holding:#!" + BUILDING_COUNTY_MODIFIER:0 "#T County:#!" + BUILDING_CHARACTER_MODIFIER:0 "#T Owner:#!" + HOLDING_VIEW_WRONG_HOLDING_TYPE: "#T Wrong type of [holding|E]#!\n[Holding.GetType.GetName|V] holdings cannot be effectively held by characters with [Character.GetGovernment.GetName|V] governments and will provide no [taxes|E] or [levies|E]. [SelectLocalization( Holding.GetType.HasParameter('no_domain_limit_if_disabled'), 'HOLDING_DOES_NOT_COUNT_TOWARD_DOMAIN_LIMIT', '' )]" + HOLDING_DOES_NOT_COUNT_TOWARD_DOMAIN_LIMIT: "\n\n#P This [holding|E] does not county toward [domain_limit|E].#!" + HOLDING_SELECTION_VIEW_WRONG_HOLDING_TYPE: "#T Wrong type of [holding|E]#!\nAs a [GetPlayer.GetGovernment.GetName|V] [ruler|E] you may not personally hold [HoldingTypeItem.GetHoldingType.GetName|V] Holdings. [HoldingTypeItem.GetWrongHoldingCharacterInfo]" + YOUR_HOLDING_TEXT:1 "Your [HOLDING.GetType.GetConceptName] [holding|E]" + NOT_MY_HOLDING_TEXT:1 "[HOLDING.GetType.GetConceptName] [holding|E]" + ABSOLUTE_COUNTY_CONTROL: "Absolute" + COUNTY_CONTROL_VALUE_DISPLAY:0 "$VALUE|0$" + COUNTY_CONTROL_OUT_OF_MAX:0 "$VALUE|0$/$MAX|0$" + COUNTY_CONTROL_OUT_OF_MAX_ABSOLUTE: "[absolute_control_short|E]" + COUNTY_CONTROL_TOOLTIP_HEADER: "County Control: [County.GetControlLevelOutOfMax]" + COUNTY_CONTROL_NO_EFFECTS: "No current effects, but if Control drops below 100, [levies|E] and [taxes|E] in the county will be reduced" + COUNTY_CONTROL_NO_EFFECTS_HERD: "No current effects, but if Control drops below 100, monthly [herd|E] gain in the county will be reduced" + COUNTY_CONTROL_LEVIES_MULT: "@soldier_icon! [levies|E] in the county are changed by $MULT|%+0=$" + COUNTY_CONTROL_TAX_MULT: "@gold_icon! [taxes|E] in the county are changed by $MULT|%+0=$" + COUNTY_CONTROL_HERD_MULT: "[herd_i]Monthly [herd|E] gain is changed by $MULT|%+0=$" + COUNTY_CONTROL_FERTILITY_MULT: "[county_fertility_i]Monthly [county_fertility|E] is changed by $MULT|%+0=$" + COUNTY_CONTROL_CHANGE_MONTHLY: "([ValueBreakdown.GetValue])" + COUNTY_DEVELOPMENT_TOOLTIP_HEADER: "Development: [County.GetDevelopmentLevel]/100" + COUNTY_DEVELOPMENT_LEVIES_MULT:1 "[levies|E] increased by $MULT|%+1$" + COUNTY_DEVELOPMENT_TAX_MULT:0 "[taxes|E] increased by $MULT|%+0$" + COUNTY_DEVELOPMENT_SUPPLY_BONUS:0 "[supply_limit|E] increased by $VALUE|=+0$ " + COUNTY_DEVELOPMENT_IGNORED_DESC:4 "[development|E] is ignored (except for its effect on the [supply_limit|E]) because the owner of the [county|E] has a [GovernmentType.GetNameWithIcon|V] government" + COUNTY_DEVELOPMENT_NO_EFFECTS:0 "#weak No Effects#!" + COUNTY_DEVELOPMENT_PROGRESS_MONTHLY_TOOLTIP_HEADER: "[County.GetDevelopmentProgressOutOfMax]" + COUNTY_CULTURE_ACCEPTANCE_DIFF_CULTURE: "([Culture.GetAcceptance( GetPlayer.GetCulture )|%/0])" + COUNTY_OPINION_TOOLTIP:1 "Popular Opinion of [County.GetCount.GetUIName]" + + ############################################################################# + ### County Fertility + COUNTY_FERTILITY_TOOLTIP_HEADER: "[county_fertility|E]: [County.GetCountyFertility|V1]/#V 100#!" + COUNTY_FERTILITY_DESC: "$game_concept_county_fertility_desc$" + BASE_COUNTY_FERTILITY: "Starting County Fertility: [County.GetBaseCountyFertility|V0]" + BASE_COUNTY_FERTILITY_TOOLTIP: "$BASE_COUNTY_FERTILITY$" + BASE_COUNTY_FERTILITY_TOOLTIP_DESC: "Base [county_fertility|E] is calculated from the average Fertility of its constituent [baronies|E]." + BASE_COUNTY_FERTILITY_PROVINCE_ENTRY: "@county_fertility_icon![Province.GetTerrain.GetCountyFertilityValue|V0] [Province.GetNameNoTooltip] #WEAK ([Province.GetTerrain.GetNameNoTooltip])#!" + PROJECTED_COUNTY_FERTILITY_EQUILIBRIUM: "[fertility_equilibrium|E]: [County.CalcProjectedFertilityEquilibrium|V0]" + COUNTY_FERTILITY_PROGRESS: "Monthly Change" + MONTHLY_COUNTY_FERTILITY_GROWTH: "Growth" + MONTHLY_COUNTY_FERTILITY_DECLINE: "Consumption" + MONTHLY_COUNTY_FERTILITY_ADJUSTMENT: "#D Adjustment#!" + + # The three strings below are used for modifiers added by code, do not remove + HERDER_HOLDER: "Held by a Herder" + NOMAD_HOLDER: "Held by a Nomadic Ruler" + NOMAD_HOLDER_CAPITAL: "[realm_capital|E] of a Nomadic Ruler" + + HOLDING_COUNTY_FERTILITY: "@county_fertility_icon! [Holding.GetProvince.GetCounty.GetCountyFertility|V1]" + HOLDING_COUNTY_HERD: "@herd_icon! [Holding.GetProvince.GetCounty.GetHerdFromCounty|=0]" + + DOMAIN_FERTILITY_VALUES: "$CURRENT|V0$/$MAX|0$" + DOMAIN_FERTILITY_TOOLTIP_HEADER: "[domain_fertility|E]: [Character.GetDomainFertility]" + CURRENT_COUNTY_FERTILITY: "[county_fertility_i] #HIGH [County.GetCountyFertility|V1]#!/100" + CURRENT_COUNTY_FERTILITY_CHANGE: "[ValueBreakdown.GetValue|L]/month" + DOMAIN_FERTILITY_TOOLTIP_UNLANDED: "@warning_icon! #X You do not have [domain_fertility|E] while you are [unlanded|E]#!\n#I [migrate|E] to continue growing your [herd|E]#!" + + DOMAIN_FERTILITY_TOOLTIP: "#T [domain_fertility|E]: $CURRENT|V0$/$MAX|0$#!" + COUNTY_FERTILITY_TOOLTIP_ENTRY: "[COUNTY.GetName]: $CURRENT|V0$/$MAX|0$ [equilibrium|E]: [COUNTY.CalcProjectedFertilityEquilibrium|0]" + + ############################################################################# + + COUNTY_NOT_YOUR_CULTURE:0 "@warning_icon! #X County is not of your [culture|E] #!" + COUNTY_NOT_YOUR_FAITH:0 "@warning_icon! #X County is not of your [faith|E] #!" + COUNTY_IN_FACTION_TOOLTIP:0 "#T In [HoldingView.GetAllFactionNames|V] faction against me!#!\n#I Click to show [factions|E]#! " + COUNTY_CAPITAL_TOOLTIP:0 "#T $game_concept_county_capital$#!\n$game_concept_county_capital_desc$" + SET_COUNTY_CAPITAL_TOOLTIP:0 "#T Move [county_capital|E] here#!\nMake [HoldingView.GetProvince.GetTitle.GetNameNoTierNoTooltip|V] the new $game_concept_county_capital$" + SET_REALM_CAPITAL_TOOLTIP_TITLE:0 "#T Move [realm_capital|E] here#!" + SET_REALM_CAPITAL_TOOLTIP_DESC:0 "Make [TITLE.GetNameNoTierNoTooltip|V] the new $game_concept_realm_capital$" + SET_REALM_CAPITAL_PREFERRED_CAPITAL:0 "It is the [de_jure] capital of [TITLE.GetNameNoTierNoTooltip|V], making this move allowed even if the capital has previously moved" + REALM_CAPITAL_TOOLTIP:0 "#T $game_concept_realm_capital$#!\n$game_concept_realm_capital_desc$" + CANT_SET_REALM_CAPITAL_COUNTY_CAPITAL:0 "#X Only a [county_capital|E] can become [realm_capital|E]#!" + CANT_SET_REALM_CAPITAL_HOLDER:0 "#X I'm not the holder of this land#!" + CANT_SET_REALM_CAPITAL_ALREADY:1 "#X This is already your [realm_capital|E]#!" + CANT_SET_REALM_CAPITAL_MOVED:1 "#X You have already moved your [realm_capital|E] once#!" + CANT_SET_REALM_CAPITAL_IN_WAR:1 "#X You cannot change your [realm_capital|E] while at [war|E]#!" + CANT_SET_REALM_CAPITAL_WHILE_TRAVELING: "#X You cannot change your [realm_capital|E] while [traveling|E]#!" + CANT_SET_REALM_CAPITAL_DISABLED_HOLDING: "#X You cannot move your [realm_capital|E] to a disabled [holding|E]#!" + GOVERNMENT_TYPE_PREVENTS_MOVING_REALM_CAPITAL: "#X [GOVERNMENT_TYPE.GetName] [government|E] prevents you from moving your [realm_capital|E]#!" + CHURCH_PROPERTY_TOOLTIP:2 "#T [church_property|E]#!\n[lessee|E]: [Title.GetLessee.GetUIName]\n[holder|E]: [Title.GetHolder.GetUIName]" + HOLDING_VIEW_NO_HOLDER_EFFECTS_FROM_BUILDINGS:0 "$NO_EFFECTS$" + HOLDING_TERRAIN_TOOLTIP:0 "#T [Terrain.GetNameNoTooltip]#!\n[Terrain.GetEffects]" + HOLDING_TERRAIN_TOTAL_TOOLTIP: "#T [Province.GetTerrain.GetNameNoTooltip]#!\n[Province.GetTerrainTooltipFor(GetPlayer)]" + HOLDING_UNDER_SIEGE:0 "#T @warning_icon! Holding Under [siege|E]#!\n#I Click to view#!" + HOLDING_VIEW_UNDER_OCCUPATION:0 "@warning_icon! #X The Holding is under occupation.#!" + HOLDING_VIEW_ENEMY_OR_HOSTILE_UNITS:0 "@warning_icon! #X There are enemy or hostile armies in the Holding.#!" + HOLDING_VIEW_UNDER_SIEGE:0 "@warning_icon! #X Holding Under [siege|E]#!" + HOLDING_VIEW_NOMAD_HERDER_GOVERNMENT: "@warning_icon! #X [CHARACTER.GetGovernment.GetName] Characters may not construct new [holdings|E] or [buildings|E].#!" + CONSTRUCTING_BUILDING_TITLE:2 "#T #high Constructing:#! [BUILDING.GetNameNoTooltip]#! #weak ([BUILDING.GetTypeName])#!\n\n" + HOLDING_LEVY_SIZE:1 "@soldier_icon! [Holding.GetMaxLevySize|0]" + HOLDING_VIEW_NEXT:0 "Next holding" + HOLDING_VIEW_PREVIOUS:0 "Previous holding" + HOLDING_VIEW_CONSTRUCT_OR_UPGRADE:0 "[Select_CString(EqualTo_int32(GUITrackItem.GetNextBuilding.GetLevel,'(int32)1'), 'Construct', 'Upgrade to')] [GUITrackItem.GetNextBuilding.GetNameNoTooltip]" + HOLDING_VIEW_UPGRADE_TO_NEXT:0 "Upgrade to [GUITrackItem.GetNextBuilding.GetNameNoTooltip]" + HOLDING_VIEW_IN_PROGRESS:1 "Constructing [GUITrackItem.GetConstructingBuilding.GetNameNoTooltip] (finishing [GUITrackItem.GetConstructionEndDate])" + HOLDING_TAB_CAPITAL_TOOLTIP:0 "This is the [county_capital|E]\n" + HOLDING_TAB_TOOLTIP:0 "#T [GUICountyHolding.GetHolding.GetNameNoTooltip]\n#![SelectLocalization( GUICountyHolding.GetHolding.GetProvince.GetTitle.IsCountyCapital, 'HOLDING_TAB_CAPITAL_TOOLTIP' , '' )|E]#I Click to select#!" + COUNCIL_TASKS:0 "Council Tasks" + HOLDING_VIEW_HOLDER:2 "Holder:" + HOLDING_VIEW_COUNTY_HOLDER:0 "[county|E] Holder:" + HOLDING_VIEW_LESSEE:0 "Lessee:" + HOLDING_VIEW_NO_COUNTY_MODIFIERS:0 "No County Modifiers" + BUILDING_EFFECT_PROVINCE_HEADER:0 "#low This Holding:#!" + BUILDING_EFFECT_COUNTY_HEADER:0 "#low This County:#!" + BUILDING_EFFECT_CHARACTER_HEADER:1 "#low Holder of this Holding:#!" + BUILDING_EFFECT_COUNTY_HOLDER_CHARACTER_HEADER:0 "#low Holder of this County:#!" + BUILDING_EFFECT_DUCHY_CAPITAL_HEADER:2 "#low All Holdings in this Duchy:#!" + BUILDING_CONSTRUCTION_COMPLETE_EFFECT_HEADER:0 "#low On Construction Completed:#!\n" + BUILDING_UPGRADE_VIA_GREAT_PROJECT: "#v This will allow you to plan the \"$ProjectName$\" [great_project|E]#!" + CONSTRUCT_BUILDING_PLAN_EXPANSION: "Plan Expansion" + CONSTRUCT_BUILDING_SEE_UPGRADE_PROJECT: "View Great Project" + REBUILD_GREAT_BUILDING_BUTTON: "Rebuild" + + RAID_TT_NO_LOOT_RAIDED: "@warning_icon! #X No available loot due to recently being raided#!" + BARTER_TT_NO_LOOT_RAIDED: "@warning_icon! #X No available loot due to recent trading#!" + HOLDING_VIEW_YOUR_COUNTY:0 "Your [county|E]" + HOLDING_VIEW_TOP_REALM_COUNTY:0 "[county|E] in same [realm|E] as you" + HOLDING_VIEW_FOREIGN_COUNTY:0 "[county|E] in [Character.GetTopLiege.GetPrimaryTitle.GetNameNoTooltip]" + COUNTY_OCCUPIER_TOOLTIP:0 "#T [occupied|E] by [Character.GetShortUIName]\n#!While occupied:\n$BULLET_WITH_TAB$[levies|E] cannot be raised or reinforced\n$BULLET_WITH_TAB$[taxes|E] cannot be collected\n$BULLET_WITH_TAB$[development|E] and [control|E] does not increase\n\n$COA_REALM_TOOLTIP_GUI_CLICK_INFO$" + VASSAL_POSSESSIVE:0 "vassal's" + HOLDING_VIEW_BUILDING_IN_VASSAL:0 "Constructing in your Vassal's [holding|E]" + CULTURE_COUNTY_WINDOW:0 "[Culture.GetNameNoTooltip]" + HOLDING_VIEW_ALREADY_CONSTRUCTING_HOLDING:0 "@warning_icon! #X You are already constructing a $HOLDING|V$ in this [county|E]#!" + HOLDING_SELECTION_VIEW_WRONG_HOLDING_TYPE_INFO_DEFAULT:0 "You will have to grant the Holding to someone after construction" + HOLDING_SELECTION_VIEW_WRONG_HOLDING_TYPE_INFO_THEOCRATIC:0 "The temple will be leased to your [realm_priest|E] after construction" + HOLDING_VIEW_CAN_UPGRADE_BUILDING:0 "#help You can upgrade this [holding|E], click to view details and begin construction! #!" + HOLDING_VIEW_CAN_NOT_UPGRADE_BUILDING:0 "#help You cannot currently upgrade this [holding|E], click to view details and possible future upgrades. #!" + TT_MONTHS_OF_RAID_LOOT_MULT: "Months of [loot|E]" + TT_MONTHLY_LOOT: "Monthly [loot|E]" + BUILDNING_MODIFIER_FROM_CULTURE:0 "$BUILDING_NAME$ #weak (from culture)#!" + CLICK_TO_VIEW_HOLDING: "#I Click to view [holding|E]#!" + DISABLED_LEGEND_PROVINCE_MODIFIERS: "@alert_icon! [barony|E] and [county|E] modifiers are disabled. [barony|E] must be inside the realm of promoter or owner of the [legend|E]" + HOLDING_VIEW_EPIDEMIC_RESISTANCE: "[epidemic_res|E]:" + HOLDING_VIEW_EPIDEMIC_RESISTANCE_VALUE: "@epidemic_icon! [Province.GetEpidemicResistance]" + HOLDING_VIEW_COUNTY_FERTILITY_LABEL: "[county_fertility|E]: @county_fertility_icon!" + HOLDING_VIEW_COUNTY_FERTILITY_VALUE: "[County.GetCountyFertility|1]" + HOLDING_VIEW_HERD_FROM_COUNTY_LABEL: "Monthly [herd|E]: @herd_icon!" + HOLDING_VIEW_HERD_FROM_COUNTY_VALUE: "[County.GetHerdFromCounty|=+0]" + DOMAIN_SUB_ENTRY_FERTILITY: "Base ([county_fertility_i][county_fertility|E])" + DOMAIN_SUB_ENTRY_CONTROL_MULT: "[control_i][county_control|E]" + DOMAIN_SUB_ENTRY_NON_NOMAD_HOLDING_MALUS: "[holding|E] is not Nomadic or Herder" + HOLDING_VIEW_STEPPE_SEASON_LABEL: "[steppe_season|E]:" + HOLDING_VIEW_CONTROL_LABEL: "[control|E]:" + HOLDING_VIEW_DEVELOPMENT_LABEL: "[development|E]:" + HOLDING_VIEW_COUNTY_OPINION_LABEL: "[county_opinion|E]:" + HOLDING_VIEW_CULTURE_LABEL: "[culture|E]:" + HOLDING_VIEW_FAITH_LABEL: "[faith|E]:" + +ABANDON_LANDS_TITLE: "Abandon" +ABANDON_LANDS_BUTTON_HOLDING_VIEW_TOOLTIP: "#T Abandon#!\nAbandon this [holding|E] to a [herder|E]." +CREATE_HERDER_CONFIRMATION_TITLE: "Abandon Lands" +CREATE_HERDER_CONFIRMATION_TEXT: "Relinquish your claim to [TITLE.GetName] and give the land to a [herder|E]." +CREATE_HERDER_CONFIRMATION_ACCEPT: "Accept" +ABANDON_LANDS_NOT_HOLDER: "@warning_icon!#X [CHARACTER.GetShortUIName] are not the [holder|E] of [PROVINCE.GetName]#!" +ABANDON_LANDS_NOT_NOMAD_HOLDING: "@warning_icon!#X [PROVINCE.GetName] is not a [nomadic_holding|E]#!" +ABANDON_LANDS_DOES_NOT_CONTROL_PROVINCE: "@warning_icon!#X [CHARACTER.GetShortUIName] do not completely control [PROVINCE.GetName]#!" + +RAZE_HOLDING_TOOLTIP: "#T Raze [Province.GetNameNoTooltip]#!\nRaze the [holding|E] and [buildings|E] in [Province.GetName]. [buildings] will be downgraded one level at a time until they are destroyed. The [holding] will then change to the primary type for your [government|E]." +RAZE_HOLDING_CONFIRMATION_TITLE: "Raze [Province.GetNameNoTooltip]" +RAZE_HOLDING_CONFIRMATION_TEXT: "@alert_icon! #alert_trial Razing a [holding|E] will destroy [buildings|E]. When there are no Buildings left, the Holding will be converted into a [nomadic_holding|E]#!\n\n" +RAZE_HOLDING_CONFIRMATION_ACCEPT: "Raze" +RAZE_HOLDING_NEW_HOLDING_TYPE: "$EFFECT_LIST_BULLET$The [holding|E] in [Province.GetName] changes from #HIGH [HOLDING_TYPE.GetName]#! to #HIGH [TARGET_HOLDING_TYPE.GetName]#!" +RAZE_HOLDING_DESTROY_HOLDING: "$EFFECT_LIST_BULLET$The [HOLDING_TYPE.GetName] [holding|E] in [Province.GetName] is destroyed" +RAZE_HOLDING_DOWNGRADE_BUILDING: "$EFFECT_LIST_BULLET$[BUILDING.GetName] is downgraded to [TARGET_BUILDING.GetName]" +RAZE_HOLDING_DESTROY_BUILDING: "$EFFECT_LIST_BULLET$[BUILDING.GetName] is destroyed" +RAZE_HOLDING_NO_PRIMARY_BUILDING: "@warning_icon! #X [Province.GetName] has no [buildings|E]#!" +RAZE_HOLDING_HOLDING_OF_CORRECT_TYPE: "@warning_icon! #X The [holding|E] is the correct type for your [government|E]#!" +RAZE_HOLDING_COOLDOWN: "@warning_icon! #X Razing [Province.GetName] is on cooldown until [Date.GetString]" +RAZE_HOLDING_DOES_NOT_CONTROL_HOLDING: "@warning_icon! #X You do not completely control [Province.GetName]" +province_razed_toast_title: "[province.GetNameNoTooltip] Razed" + + REBUILDING_BUILDING_TITLE: "#T #high Rebuilding:#! [Building.GetNameNoTooltip]#! #weak ([Building.GetTypeName])#!\n\n" + RUINED_BUILDING_TITLE: "#T #high Ruined:#! [Building.GetNameNoTooltip]#! #weak ([Building.GetTypeName])#!\n\n" + BUILDING_EFFECT_AND_DESC_RUINED_TOOLTIP: "[Building.GetEffectDescriptionAtProvince( Character.Self, Province.Self )]\n\n$RUINED$\n\n[Building.GetDescription]" + RUINED_BUILDING: "@warning_icon! #X Building lies in ruins and must be [rebuilt|El]#!\nCost to Rebuild: [Building.GetRebuildCostDescription( Character.Self )]" + REBUILD_GREAT_BUILDING_TIME: "$MOD_TIME_PREFIX$$DAYS$" + GREAT_BUILDING_RUINED: "@warning_icon! #X $TYPE$ is [ruined|El]#!" + + REBUILD_GREAT_BUILDING_TOOLTIP: "#T Rebuild [Building.GetNameNoTooltip]#!\nRebuild the [Building.GetName] [great_building|E] in [Province.GetName].\n\n" + REBUILD_GREAT_BUILDING_CONFIRMATION_TITLE: "Rebuild [great_building]" + REBUILD_GREAT_BUILDING_CONFIRMATION_TEXT: "Spend resources to rebuild a [great_building|E] and restore it to glory.\n\n" + REBUILD_GREAT_BUILDING_EFFECT: "$EFFECT_LIST_BULLET$[BUILDING.GetName] is rebuilt in [PROVINCE.GetName]" + REBUILD_GREAT_BUILDING_CONFIRMATION_ACCEPT: "Rebuild" + REBUILD_GREAT_BUILDING_CANNOT_AFFORD: "@warning_icon! #X Cannot afford: #! $COST$" diff --git a/localization/english/replace/holdings_l_english.yml b/localization/english/replace/holdings_l_english.yml new file mode 100644 index 00000000..813ae850 --- /dev/null +++ b/localization/english/replace/holdings_l_english.yml @@ -0,0 +1,75 @@ +l_english: + castle_holding:0 "Castle" + city_holding:0 "City" + church_holding:1 "Temple" + tribal_holding:0 "Tribe" + nomad_holding: "Nomadic Settlement" + herder_holding: "Herder Camp" + temple_citadel_holding: "Temple Citadel" + + city_holding_concept_key:0 "[city|E]" + church_holding_concept_key:0 "[temple|E]" + castle_holding_concept_key:0 "[castle|E]" + tribal_holding_concept_key:0 "[tribe|E]" + nomad_holding_concept_key: "[nomadic_holding|E]" + herder_holding_concept_key: "[herder_holding|E]" + temple_citadel_holding_concept_key: "[temple_citadel|E]" + + GARRISON_TOOLTIP:1 "#T [garrison|E]: $CURRENT_VALUE|V$/$MAX_VALUE|V$#!" + BUILDING_VALUE: "$BUILDING$" + DOMAIN_LIMIT_OVERRUN_LEVY_PENALTY:0 "@warning_icon! #X Reduced by $VALUE|-%0$ due to being above [domain_limit|E]#!" + DOMAIN_LIMIT_GRACE_PERIOD_LEVY_PENALTY:0 "@warning_icon! #X Due to being above [domain_limit|E], newly acquired holdings provide no levies#! $EXPIRES$" + COUNTY_CONTROL_LEVY_PENALTY:0 "@warning_icon! #X Reduced by $VALUE|%0$ due to low [county_control|E]#!" + FURTHER_COUNTY_CONTROL_LEVY_PENALTY:0 "@warning_icon! #X Further reduced by $VALUE|%0$ due to low [county_control|E]#!" + ABSOLUTE_COUNTY_CONTROL_LEVY_BONUS:0 "[absolute_control|E]: $VALUE|%0+=$" + COUNTY_CONTROL_TAX_PENALTY:0 "@warning_icon! #X Reduced by $VALUE|%0$ due to low [county_control|E]#!" + FURTHER_COUNTY_CONTROL_TAX_PENALTY:0 "@warning_icon! #X Further reduced by $VALUE|%0$ due to low [county_control|E]#!" + ABSOLUTE_COUNTY_CONTROL_TAX_BONUS:0 "[absolute_control|E]: $VALUE|%0+=$" + DOMAIN_LIMIT_OVERRUN_TAX_PENALTY:0 "@warning_icon! #X Reduced by $VALUE|%0$ due to being above [domain_limit|E]#!" + DOMAIN_LIMIT_GRACE_PERIOD_TAX_PENALTY:0 "@warning_icon! #X Due to being above [domain_limit|E], newly acquired holdings provide no tax#! $EXPIRES$" + DOMAIN_LIMIT_OVERRUN_BARTER_GOODS_PENALTY: "@warning_icon! #X Reduced by $VALUE|%0$ due to being above [domain_limit|E]#!" + DOMAIN_LIMIT_GRACE_PERIOD_BARTER_GOODS_PENALTY: "@warning_icon! #X Due to being above [domain_limit|E], newly acquired holdings provide no tax#! $EXPIRES$" + DOMAIN_LIMIT_GRACE_PERIOD_EXPIRES:0 "(expires [DATE.GetString|V])" + DOMAIN_LIMIT_GRACE_PERIOD_EXPIRES_UNKNOWN:0 "(expiration date unknown)" + VASSAL_LIMIT_OVERRUN_PENALTY:0 "@warning_icon! #X Above [vassal_limit|E]#!" + + GOVERNMENT_WRONG_HOLDING_TYPE:0 "@warning_icon! #X Due to being the wrong holding type for [CHARACTER.GetShortUIName], the holding produces no levies or taxes#!" + SUPPLY_LIMIT_TOOLTIP:0 "#T [supply_limit|E]: $VALUE|V$#!" + BASE_SUPPLY:0 "Base Supply" + SUPPLY_FROM_DEVELOPMENT:0 "[development|E]" + SUPPLY_MULT_SAME_SUB_REALM:0 "Own [realm|E]" + SUPPLY_MULT_SAME_REALM:0 "Own [top_realm|E]" + SUPPLY_MULT_SAME_SUB_REALM_ALLY:0 "Allied [realm|E]" + SUPPLY_MULT_SAME_REALM_ALLY:0 "Allied [top_realm|E]" + COUNTY_HOLDING_MODIFIER_INCOME:0 "Income from $TYPE|V$ holdings in the [county|E]" + COUNTY_DEVELOPMENT_TAX_MOD: "From [county_development|E]" + COUNTY_DEVELOPMENT_LEVY_MOD: "From [county_development|E]" + COUNTY_GOVERNOR_EFFICIENCY_MOD: "Modified by $VALUE|+%0=$ from [governor_efficiency|E]" + SUPPLY_MINIMUM:0 "Minimum Supply" + SUPPLY_MULT_SITUATION: "[situation|E]" + SUPPLY_ADD_SITUATION: "[situation|E]" + + HOLDING_TT_CONSTRUCTING:1 "Constructing [BUILDING.GetName|V] (finishing [DATE.GetString])" + HOLDING_TT_CONSTRUCTING_HOLDING:0 "Constructing $BUILDING|V$ (finishing [DATE.GetString])" + HOLDING_TT_UNDER_SIEGE:0 "Under [siege|E] by [CHARACTER.GetPrimaryTitle.GetName]" + HOLDING_TT_OCCUPIED:0 "[occupied|E] by [CHARACTER.GetPrimaryTitle.GetName]" + HOLDING_TT_FORT:0 "[fort_level|E]: @fort_icon! $VALUE|V$" + HOLDING_TT_GARRISON:2 "[garrison|E]: @garrison_icon! [HOLDING.GetCurrentGarrisonSize]/[HOLDING.GetMaxGarrisonSize|0]" + HOLDING_TT_GARRISON_BASE:0 "Base" + HOLDING_TT_GARRISON_REINFORCEMENT:0 "#T [garrison_reinforcement|E]#!" + HOLDING_TT_GARRISON_UNDER_SIEGE:0 "#N [siege|E]#!" + HOLDING_TT_GARRISON_UNDER_SIEGE_DESC:1 "@warning_icon! #X The [holding|E] is under [siege|E]#!" + HOLDING_TT_TAX:0 "[tax|E]: @gold_icon! [HOLDING.GetIncome|1V]" + HOLDING_TT_LEVIES:0 "[levies|E]: @soldier_icon! [HOLDING.GetMaxLevySize|0]" + HOLDING_TT_TITLE:0 "[title|E]: [Holding.GetProvince.GetTitle.GetName]" + HOLDING_TT_LEASED:0 "[lessee|E]: [Holding.GetProvince.GetTitle.GetLessee.GetUIName]" + HOLDING_TT_HOLDER:1 "[holder|E]: [Holding.GetProvince.GetTitle.GetHolder.GetUIName]" + HOLDING_TT_TYPE:1 "[holding_type|E]: [Holding.GetType.GetConceptName]" + HOLDING_TT_TERRAIN:0 "[terrain|E]: [Holding.GetProvince.GetTerrain.GetNameNoTooltip]" + HOLDING_TT_SUPPLY_TT:0 "#T [supply_limit|E]: [Holding.GetProvince.GetSupplyLimitFor( GetPlayer )]\n#![Holding.GetProvince.GetSupplyLimitDescFor( GetPlayer )]" + HOLDING_TT_SUPPLY:0 "[supply_limit|E]: #tooltip:HOLDING_TT_SUPPLY_TT [Holding.GetProvince.GetSupplyLimitFor( GetPlayer )]#!" + HOLDING_TT_EMPTY:0 "No Holding\nControlled by: [Holding.GetProvince.GetTitle.GetDeJureLiege.GetHolder.GetUIName]" + HOLDING_TT_COUNTY_FERTILITY: "[county_fertility|E]: @county_fertility_icon! [Holding.GetProvince.GetCounty.GetCountyFertility|V1]" + HOLDING_TT_COUNTY_HERD: "Monthly [herd|E]: @herd_icon! [Holding.GetProvince.GetCounty.GetHerdFromCounty|=+0]" + HOLDING_CLICK_TOOLTIP:0 "#I Click to select#!" + HOLDING_TT_BARTER_GOODS: "#T Trade Goods#!\nMy income: $VALUE|1V$" diff --git a/localization/english/replace/mapicons_l_english.yml b/localization/english/replace/mapicons_l_english.yml new file mode 100644 index 00000000..9e0e9894 --- /dev/null +++ b/localization/english/replace/mapicons_l_english.yml @@ -0,0 +1,49 @@ +l_english: + ATTRITION_ICON_TITLE:1 "#T Army is going to take [attrition|E]#!" + ARMY_EMBARKED_PENALTY:0 "[embarked|E]: @advantage_icon!$EFFECT|0+=$ ($DAYS_LEFT$ days)" + ARMY_RECENTLY_DISEMBARKED_PENALTY:1 "[recently_disembarked|E]: @advantage_icon!$EFFECT|0+=$ ($DAYS_LEFT$ days)" + MAP_ICON_RECENTLY_DISEMBARKED_TOOLTIP:0 "#T Recently Disembarked#!\nWill be considered [recently_disembarked|E] for [UnitItem.GetArmy.GetDisembarkPenaltyDays] more days" + COMMANDER_IS_LEADER:0 "#underline #TOOLTIP:COMMANDER_IS_LEADER_TOOLTIP Commanded by Ruler#!#!" + COMMANDER_IS_LEADER_TOOLTIP:0 "#T Commanded by Ruler#!\n[Character.GetName] commands this army, giving the following bonuses:\n[GetLeadingTroopsBonus]" + POTENTIAL_COMMANDER_IS_LEADER_TOOLTIP:1 "#T Ruler#!\nBeing [commander|E] of your own [army|E] would give:\n[GetLeadingTroopsBonus]" + RP_TOOLTIP_CLICK:1 "#T [RallyPoint.GetName]#!\n$CLICK_TO_VIEW$" + ARMY_TOOLTIP_IS_GATHERING:1 "Gathering ([Army.GetGatheringDaysLeft] days)" + ARMY_TOOLTIP_IS_MOVEMENT_LOCKED:1 "[movement_locked|E]" + UNIT_ITEMS:1 "([UnitMapIcon.GetShownCount])" + RAID_ARMY_TOOLTIP: "#T Raider#!\nThis Army is on a [raid|E].\nIt is carrying [loot_i][Army.GetRaidLoot|V0]." + ARMY_AT_LOOT_CAP:1 "Cannot carry any more [loot|E]" + ARMY_AT_LOOT_CAP_TOOLTIP: "#T At Loot Cap#!\nThis army is carrying [loot_i][Army.GetRaidLoot|V0] and cannot [raid|E] more before returning home." + ARMY_RETREATING: "In [retreat|E]" + ARMY_IS_AUTOMATED: "Army is automated" + ARMY_IS_ALLY: "Allied Army" + MAP_RAID_TOOLTIP:0 "#T Ongoing Raid#!\nEstimated completion: [Raid.GetEta.GetString].\nResulting [loot|E]: [loot_i][Raid.GetProvince.GetLoot|0V].\n\n#I Click to view Raid.#!" + RECENTLY_RAIDED_TOOLTIP:0 "#T Recently Raided#!\nThis holding was recently raided and cannot be raided again until [Province.GetEndOfRecentlyLooted.GetString]" + MAP_PIN_BARTER_GOODS_NEEDED: "@barter_goods_icon! [DetailedBarterIcon.GetProvince.GetBarterGoodsNeeded|0V]" + MAP_PIN_BARTER_LOOT_RECEIVED: "@loot_icon![DetailedBarterIcon.GetProvince.GetLoot|0V]" + MAP_BARTER_TOOLTIP: "#T Ongoing Trade Mission#!\nEstimated completion: [BarterMission.GetEta.GetString].\nResulting [loot|E]: [loot_i][BarterMission.GetProvince.GetLoot|0V].\n\n#I Click to view Trade.#!" + BARTER_ARMY_TOOLTIP: "#T Barterer#!\nThis Caravan is on a [trade|E] Mission.\nIt is carrying [loot_i][Army.GetBarterLoot|V0] [loot|E]." + RECENTLY_BARTERED_TOOLTIP: "#T Recently Traded#!\nThis holding was recently Traded with and cannot be Traded with again until [Province.GetEndOfRecentlyLooted.GetString]" + ARMY_LOOT_INFO:0 "[loot|E]: [loot_i][Army.GetRaidLoot|V0]/[Army.GetLootCap|0]" + MAP_ICON_EMBARK_COST:0 "[GetPlayer.GetTreasuryOrGoldPrefix][FleetPredictionMapIcon.GetEmbarkCost|V0][Select_CString(FleetPredictionMapIcon.IsCostOverOwned, '@warning_icon!', '')]" + MAP_ICON_UNIQUE_BUILDING_CAN_BUILD:1 "#I You can construct this Building#!\n\n" + MAP_ICON_UNIQUE_BUILDING_CANT_BUILD:2 "#X @warning_icon! You cannot construct this Building#!\n\n" + MAP_ICON_UNIQUE_BUILDING_CANT_USE:2 "#X @warning_icon! You cannot use this Building#!\n\n" + MAP_ICON_UNIQUE_BUILDING: "#T [UniqueBuildingIcon.GetBuildingType.GetNameNoTooltip]#!\n[UniqueBuildingIcon.GetBuildingType.GetDescription]\n\n[SelectLocalization( And( Not( UniqueBuildingIcon.IsBuilt ), UniqueBuildingIcon.CanConstruct ), 'MAP_ICON_UNIQUE_BUILDING_CAN_BUILD', '' )][SelectLocalization( And( Not( UniqueBuildingIcon.IsBuilt), Not( UniqueBuildingIcon.CanConstruct ) ), 'MAP_ICON_UNIQUE_BUILDING_CANT_BUILD', '' )][SelectLocalization( And( UniqueBuildingIcon.IsBuilt, Not( UniqueBuildingIcon.IsEnabled ) ), 'MAP_ICON_UNIQUE_BUILDING_CANT_USE', '' )]#T Effect:#!\n[UniqueBuildingIcon.GetEffect]" + MAP_ICON_GREAT_BUILDING: "#T [Building.GetNameNoTooltip]#!\n[Building.GetDescription]\n\n[SelectLocalization( And( Not( GreatBuildingIcon.IsBuilt ), GreatBuildingIcon.CanConstruct ), 'MAP_ICON_UNIQUE_BUILDING_CAN_BUILD', '' )][SelectLocalization( And( Not( GreatBuildingIcon.IsBuilt), Not( GreatBuildingIcon.CanConstruct ) ), 'MAP_ICON_UNIQUE_BUILDING_CANT_BUILD', '' )][SelectLocalization( And( GreatBuildingIcon.IsBuilt, Not( GreatBuildingIcon.IsEnabled ) ), 'MAP_ICON_UNIQUE_BUILDING_CANT_USE', '' )]\n[GreatBuildingIcon.GetEffect]" + MAP_ICON_PROVISIONS_LOW_TT: "#X [provisions|E] run low past this point — [privation|E] events will occur!#!" + MAP_ICON_PROVISIONS_CRITICAL_TT: "#XB [provisions|E] run out past this point — extreme [privation|E] events will occur!#!" + MAP_ICON_LANDLESS_RULERS_COUNT: "+[Subtract_int32( LandlessRulersMapIcon.GetValidDomicilesCount, '(int32)1')]" + MAP_ICON_GREAT_PROJECTS_COUNT: "+[Subtract_int32( GetDataModelSize( GreatProjectMapIcon.GetProjects ), '(int32)1')]" + MAP_ICON_DETAILED_RAID_LOOT: "@loot_icon![DetailedRaidIcon.GetProvince.GetLoot|0V]" + MAP_ICON_DETAILED_RAID_TT: "#T [DetailedRaidIcon.GetProvince.GetNameNoTooltip]#!\nLoot: [loot_i] [DetailedRaidIcon.GetLoot|0]" + MAP_ICON_DETAILED_RAID_LOOT_POTENTIAL_TT: "#T Potential Raid#!\n Resulting [loot|E]: [loot_i][DetailedRaidIcon.GetLoot|0]\n\n$MAP_ICON_DETAILED_RAID_LOOT_HOLD_ALT_TT$" + MAP_ICON_DETAILED_RAID_LOOT_ONGOING_TT: "#T Ongoing Raid#!\nEstimated completion: [DetailedRaidIcon.GetRaid.GetEta.GetString].\nResulting [loot|E]: [loot_i][DetailedRaidIcon.GetProvince.GetLoot|0V].\n\n#I Click to view [raid|e].#!\n$MAP_ICON_DETAILED_RAID_LOOT_HOLD_ALT_TT$" + MAP_ICON_DETAILED_RAID_LOOT_HOLD_ALT_TT: "#I Hold Alt to display all holdings with loot you can [raid|e].#!" + + MAP_ICON_DETAILED_BARTER_TT: "#T [DetailedBarterIcon.GetProvince.GetNameNoTooltip]#!\nLoot: [loot_i] [DetailedBarterIcon.GetLoot|0]" + MAP_ICON_BARTER_WARNING: "[SelectLocalization( LessThan_CFixedPoint( GetPlayer.GetCurrency('barter_goods'), DetailedBarterIcon.GetProvince.GetBarterGoodsNeeded ), 'MAP_ICON_DETAILED_BARTER_INSUFFICIENT_GOODS', '')]" + MAP_ICON_DETAILED_BARTER_INSUFFICIENT_GOODS: "@warning_icon! #X Insufficient [barter_goods] to [barter] here#!\n" + MAP_ICON_DETAILED_BARTER_LOOT_POTENTIAL_TT: "#T Potential Trade Mission#!\nResulting [loot|E]: [loot_i][DetailedBarterIcon.GetLoot|0V]\nRequired [trade_goods|E]: [barter_goods_i][DetailedBarterIcon.GetProvince.GetBarterGoodsNeeded|0V]\n$MAP_ICON_BARTER_WARNING$\n$MAP_ICON_DETAILED_BARTER_LOOT_HOLD_ALT_TT$" + MAP_ICON_DETAILED_BARTER_LOOT_ONGOING_TT: "#T Ongoing Trade Mission#!\nEstimated completion: [DetailedBarterIcon.GetBarter.GetEta.GetString]\nResulting [loot|E]: [loot_i][DetailedBarterIcon.GetProvince.GetLoot|0V]\nRequired [trade_goods|E]: [barter_goods_i][DetailedBarterIcon.GetProvince.GetBarterGoodsNeeded|0V]\n$MAP_ICON_BARTER_WARNING$\n#I Click to view [trade|E].#!\n$MAP_ICON_DETAILED_BARTER_LOOT_HOLD_ALT_TT$" + MAP_ICON_DETAILED_BARTER_LOOT_HOLD_ALT_TT: "#I Hold Alt to display all holdings with loot in which you can [trade|E].#!" + MAP_ICON_ACTIVITY_DISABLED: "[Activity.GetInvolvementText( Character.Self, 'hud' )]\n\n#X @warning_icon! Activity has already started, you will not arrive on time or you were not invited#!" diff --git a/localization/english/replace/message_filters_l_english.yml b/localization/english/replace/message_filters_l_english.yml new file mode 100644 index 00000000..018e160f --- /dev/null +++ b/localization/english/replace/message_filters_l_english.yml @@ -0,0 +1,403 @@ +l_english: + message_filter: "Message Filter" + message_filter_generic_interface_message_good: "@catch_all_icon! Generic Good Messages" + message_filter_generic_interface_message_good_desc: "A positive effect belonging to no distinct category" + message_filter_generic_interface_message_bad: "@catch_all_icon! Generic Bad Messages" + message_filter_generic_interface_message_bad_desc: "A negative effect belonging to no distinct category" + message_filter_generic_interface_message_neutral: "@catch_all_icon! Generic Neutral Messages" + message_filter_generic_interface_message_neutral_desc: "A neutral effect belonging to no distinct category" + # CHARACTER + message_filter_heir_change: "@heir_icon! New Heir" + message_filter_heir_change_desc: "Your [player_heir|E] changes" + message_filter_character_level_change: "@prestige_level_5_icon! Level of Fame /[GetLocalPlayerPietyTextIcon]Devotion" + message_filter_character_level_change_desc: "Your [prestige_level|E] or [piety_level|E] changes" + message_filter_character_lifestyle: "@lifestyle_icon! Lifestyle Perks" + message_filter_character_lifestyle_desc: "You gain a [lifestyle|E] [perk|E]" + message_filter_character_nickname: "@nickname_icon! Nickname" + message_filter_character_nickname_desc: "You gain or lose a [nickname|E]" + message_filter_character_stress: "@stress_icon! Stress" + message_filter_character_stress_desc: "You gain or lose [stress|E]" + message_filter_secondary_character_stress: "@stress_icon! Courtier Stress" + message_filter_secondary_character_stress_desc: "A Courtier gains or loses [stress|E]" + message_filter_character_trait: "@personality_icon! Traits" + message_filter_character_trait_desc: "You gain or lose a [trait|E]" + message_filter_relationship_gained: "@friend_icon! Relationships" + message_filter_relationship_gained_desc: "You begin or end a [relationship|E] with another character" + message_filter_character_health: "@health_icon! Health" + message_filter_character_health_desc: "Your [health|E] changes" + # FAMILY + message_filter_child_born: "@child_icon! Child Born" + message_filter_child_born_desc: "You father or give birth to a [child|E]" + message_filter_grandchild_born: "@child_icon! Grandchild Born" + message_filter_grandchild_born_desc: "Your [child|E] fathers or gives birth to their own child" + message_filter_child_language: "@child_icon! Child Languages" + message_filter_child_language_desc: "Progress of [children|E] learning [languages|E]" + message_filter_known_pregnancy: "@child_icon! Spouse Pregnancy" + message_filter_known_pregnancy_desc: "Your [spouse|E] falls pregnant" + message_filter_family_became_concubine: "@concubine_icon! Close Family Becomes Concubine" + message_filter_family_became_concubine_desc: "A [close_family|E] member is taken as a [concubine|E]" + message_filter_court_contracted_epidemic: "@epidemic_icon! Court Contraction" + message_filter_court_contracted_epidemic_desc: "A [courtier|E] contracts a [epidemic|E]" + message_filter_court_recover_epidemic: "@epidemic_icon! Court Recovery" + message_filter_court_recover_epidemic_desc: "A [courtier|E] recovers from a [epidemic|E]" + # COUNCIL + message_filter_councillor_ongoing: "@council_icon! Councillor Side Effects" + message_filter_councillor_ongoing_desc: "Effects of [councillor|E] [councillor_task_possible_side_effects|E]" + message_filter_council_task: "@council_icon! Councillor Tasks" + message_filter_council_task_desc: "The progress of an ongoing [councillor_task|E] changes" + message_filter_councillor: "@council_icon! Councillor Changes" + message_filter_councillor_desc: "One of your [councillors|E] is appointed or leaves" + message_filter_councillor_liege: "@council_icon! Held Council Seats" + message_filter_councillor_liege_desc: "You are appointed or removed from your [liege_possessive|E] [council|E]" + # COURT + message_filter_courtier_arrived: "@guest_icon! Guest Arrives" + message_filter_courtier_arrived_desc: "A [guest|E] arrives at your [court|E]" + message_filter_courtier_arrived_notable: "@guest_icon! Notable Guests" + message_filter_courtier_arrived_notable_desc: "A noteworthy [guest|E] arrives at your [court|E]" + message_filter_courtier_leaving: "@guest_icon! Guest Leaves" + message_filter_courtier_leaving_desc: "A [guest|E] leaves your [court|E]" + message_filter_courtier_child_of_age: "@child_icon! Courtier Coming of Age" + message_filter_courtier_child_of_age_desc: "A non-[dynasty|E] member [child|E] comes of age in your [court|E]" + message_filter_courtier_court_trait: "@royal_court_icon! Court Type Traits" + message_filter_courtier_court_trait_desc: "A [courtier|E] gains a [court_type_trait|E]" + message_filter_court_amenity: "@royal_court_icon! Amenities" + message_filter_court_amenity_desc: "Your [court_amenities|E] change" + message_filter_court_language: "@royal_court_icon! Language" + message_filter_court_language_desc: "Your [court_language|E] changes, or is adopted or replaced by another [realm|E]" + message_filter_court_grandeur: "@royal_court_icon! Grandeur" + message_filter_court_grandeur_desc: "Your [court_grandeur|E] changes" + message_filter_court_position_held: "@jester_icon! Held Positions" + message_filter_court_position_held_desc: "You gain or lose a [court_position|E]" + message_filter_court_position: "@jester_icon! Positions" + message_filter_court_position_desc: "A hired [court_position|E] employee changes" + message_filter_court_inspiration: "@inspiration_icon! Inspirations" + message_filter_court_inspiration_desc: "A member of your [court|E] gains an [inspiration|E]" + # HOOK + message_filter_hook_on_me: "@weak_hook_icon! Hooks on Me" + message_filter_hook_on_me_desc: "Another character gains or loses a [hook|E] on me" + message_filter_hook_on_other: "@weak_hook_icon! Hooks on Others" + message_filter_hook_on_other_desc: "I gain or lose a [hook|E] on another character" + # MARRIAGE + message_filter_marriage_ended: "@marriage_icon! Marriage Ends" + message_filter_marriage_ended_desc: "Your [marriage|E] or [betrothal|E] ends" + message_filter_marriage_ended_heir: "@marriage_icon! Heir's Marriage Ends" + message_filter_marriage_ended_heir_desc: "Your [primary_heir_possessive|E] [marriage|E] or [betrothal|E] ends" + message_filter_marriage_started: "@marriage_icon! Marriage Starts" + message_filter_marriage_started_desc: "You [marry|E] another character" + message_filter_family_marriage_started: "@marriage_icon! Close Family Marriage" + message_filter_family_marriage_started_desc: "A [close_family|E] member [marries|E]" + # DYNASTY + message_filter_dynasty_cadet_created: "@dynasty_icon_alt! Cadet Branches" + message_filter_dynasty_cadet_created_desc: "A [cadet_branch|E] of your [dynasty|E] is created" + message_filter_dynasty_head_change: "@dynasty_icon_alt! New Dynasty Head" + message_filter_dynasty_head_change_desc: "Your [dynast|E] changes" + message_filter_dynasty_perk: "@dynasty_perk_icon! Legacy Perks" + message_filter_dynasty_perk_desc: "Your [dynasty|E] gains or loses a [dynasty_perk|E]" + message_filter_dynasty_prestige: "@dynasty_prestige_icon_5! Level of Splendor" + message_filter_dynasty_prestige_desc: "Your [dynasty|E] gains or loses a [dynasty_prestige_level|E]" + message_filter_house_feud_status: "@dynasty_icon! House Feud" + message_filter_house_feud_status_desc: "Updates on the status of ongoing [house_feuds|E]" + message_filter_house_head_change: "@dynasty_icon! House Head" + message_filter_house_head_change_desc: "Your [house_head|E] changes" + message_filter_house_unity_change: "@dynasty_house_unity! Unity Change" + message_filter_house_unity_change_desc: "Your [house_unity|E] increases or decreases" + message_filter_house_unity_stage: "@dynasty_house_unity! Unity Level" + message_filter_house_unity_stage_desc: "Your [house_unity_level|E] changes" + message_filter_dynasty_child_of_age: "@dynasty_icon_alt! Coming of Age" + message_filter_dynasty_child_of_age_desc: "A [child|E] of your [dynasty|E] comes of age in your [court|E]" + # DEATH + message_filter_death_family: "@death_icon! Close Family" + message_filter_death_family_desc: "A [close_family|E] member dies" + message_filter_death_councillor: "@death_icon! Councillor" + message_filter_death_councillor_desc: "A [councillor|E] dies" + message_filter_death_prisoner: "@death_icon! Prisoner" + message_filter_death_prisoner_desc: "A [prisoner|E] dies" + message_filter_death_relation: "@death_icon! Relation" + message_filter_death_relation_desc: "A [relation|E] dies" + message_filter_death_notable: "@death_icon! Notable" + message_filter_death_notable_desc: "An otherwise relevant or note-worthy character dies" + # FACTION + message_filter_faction: "@faction_icon! Factions" + message_filter_faction_desc: "Your status as the leader or target of a [faction|E] changes" + message_filter_faction_liege: "@faction_icon! Liege Factions" + message_filter_faction_liege_desc: "A [faction|E] is created against your [liege|E]" + # DIARCH + message_filter_diarch: "@declare_regent_icon! Diarch Actions" + message_filter_diarch_desc: "You gain or lose a [diarch|E], or they take an action" + # DOMAIN + message_filter_building_started: "@domain_icon! Building Started" + message_filter_building_started_desc: "Construction of a [building|E] starts in your [domain|E] or [domicile|E]" + message_filter_building_completed: "@domain_icon! Building Completed" + message_filter_building_completed_desc: "A [building|E] is completed in your [domain|E] or [domicile|E]" + message_filter_county_corruption: "@county_corruption_icon! County Corruption" + message_filter_county_corruption_desc: "A held [county|E] gains or loses [county_corruption|E]" + # CULTURE + message_filter_culture_conversion_notable: "@culture_icon! Notable Conversion" + message_filter_culture_conversion_notable_desc: "A relevant or note-worthy character changes [culture|E]" + message_filter_culture_era: "@culture_icon! Eras" + message_filter_culture_era_desc: "Your [culture|E] enters a new [era|E]" + message_filter_culture_head: "@culture_icon! New Culture Head" + message_filter_culture_head_desc: "Your [culture_head|E] changes" + message_filter_culture_innovation: "@culture_icon! Innovations" + message_filter_culture_innovation_desc: "Your [culture|E] learns of a new [innovation|E]" + message_filter_culture_traditions: "@culture_icon! Traditions" + message_filter_culture_traditions_desc: "Your [culture_possessive|E] [traditions|E] change" + message_filter_culture_hybridized_nearby: "@culture_icon! Hybridization and Divergence" + message_filter_culture_hybridized_nearby_desc: "A nearby [ruler|E] forms a [hybridizes|E] or [diverges|E] their [culture|E]" + # TITLE + message_filter_title_gained: "@titles_icon! Gained" + message_filter_title_gained_desc: "You gain a [title|E]" + message_filter_title_lost: "@titles_icon! Lost" + message_filter_title_lost_desc: "You lose a [title|E]" + message_filter_title_primary_changed: "@titles_icon! New Primary" + message_filter_title_primary_changed_desc: "Your [primary_title|E] changes" + message_filter_title_rank_changed: "@titles_icon! New Rank" + message_filter_title_rank_changed_desc: "Your [rank|E] changes" + message_filter_appointed_to_title: "@titles_icon! New Appointment" + message_filter_appointed_to_title_desc: "You receive a new [governorship|E]" + # DOMICILE + message_filter_domicile_moved: "@government_type_adventurer! Domicile Moves" + message_filter_domicile_moved_desc: "Your [domicile|E] moves to another [barony|E]" + # LEGITIMACY + message_filter_legitimacy_change: "[GetLocalPlayerLegitimacyTextIcon] Legitimacy" + message_filter_legitimacy_change_desc: "Your [legitimacy|E] changes" + # VASSAL + message_filter_independence_gained: "@independence_icon! Independence Gained" + message_filter_independence_gained_desc: "You become an [independent_ruler|E]" + message_filter_liege_changed: "@liege_icon! Liege Changes" + message_filter_liege_changed_desc: "Your [liege|E] changes" + message_filter_vassal_contract_changed: "@icon_contract_modification_single! Vassal Contracts" + message_filter_vassal_contract_changed_desc: "A [vassal_contract|E] with your [liege|E] or [vassal|E] changes" + # LAW + message_filter_law_changed: "@law_icon! Laws" + message_filter_law_changed_desc: "An [law|E] is enacted or changed" + message_filter_law_liege: "@law_icon! Liege's Laws" + message_filter_law_liege_desc: "Your [liege|E] enacts a [law|E]" + message_filter_government_changed: "@law_icon! Government Type" + message_filter_government_changed_desc: "Your form of [government|E] changes" + # WAR + message_filter_war_participation: "@war_icon! War Participation" + message_filter_war_participation_desc: "You join or leave a [war|E]" + message_filter_war_participation_ally: "@war_icon! Ally War Participation" + message_filter_war_participation_ally_desc: "An [ally|E] joins or leaves an ongoing [war|E]" + message_filter_war_participation_enemy: "@war_icon! Enemy War Participation" + message_filter_war_participation_enemy_desc: "An Enemy joins or leaves an ongoing [war|E]" + message_filter_war_declared: "@war_icon! War Declared" + message_filter_war_declared_desc: "You declare a [war|E]" + message_filter_war_declared_liege: "@war_icon! Liege Declares War" + message_filter_war_declared_liege_desc: "Your [liege|E] declares a [war|E]" + message_filter_war_target: "@war_icon! War Targets You" + message_filter_war_target_desc: "A [war|E] is declared against you" + message_filter_war_target_liege: "@war_icon! War Targets Liege" + message_filter_war_target_liege_desc: "A [war|E] is declared against your [liege|E]" + message_filter_war_ended: "@retreat_icon! War Ends" + message_filter_war_ended_desc: "One of your ongoing [wars|E] ends" + message_filter_war_ended_liege: "@retreat_icon! Liege's War Ends" + message_filter_war_ended_liege_desc: "One of your [liege_possessive|E] ongoing [wars|E] ends" + message_filter_war_ended_neighbor: "@retreat_icon! Neighbor's War Ends" + message_filter_war_ended_neighbor_desc: "A neighboring [rulerpossessive|E] ongoing [war|E] ends" + # ALLIANCES + message_filter_alliance_formed: "@alliance_icon! Alliance Formed" + message_filter_alliance_formed_desc: "You enter an [alliance|E]" + message_filter_alliance_broken: "@alliance_icon! Alliance Broken" + message_filter_alliance_broken_desc: "One of your [alliances|E] is broken" + message_filter_confederation: "@confederation_icon! Confederations" + message_filter_confederation_desc: "Members join or leave your [confederation|E]" + # COMBAT + message_filter_combat_casualties: "@command_modifier_icon! Battle Casualties" + message_filter_combat_casualties_desc: "A character is slain in [battle|E] or [siege|E]" + message_filter_combat_prisoners: "@command_modifier_icon! Battle Captives" + message_filter_combat_prisoners_desc: "A [prisoner_of_war|E] is taken in a [battle|E] or [siege|E]" + # RAID + message_filter_raid_completed: "@raid_icon! Raid Completed" + message_filter_raid_completed_desc: "Your [army|E] successfully [raids|E] a [holding|E]" + message_filter_raid_lost: "@raid_icon! Hostile Raid" + message_filter_raid_lost_desc: "One of your [holdings|E] is [raided|E]" + # BARTER + message_filter_barter_completed: "@barter_icon! Trade Completed" + message_filter_barter_completed_desc: "Your Caravan successfully [trades|E] a [holding|E]" + message_filter_barter_loot_delivered: "@barter_icon! Trade Loot Delivered" + message_filter_barter_loot_delivered_desc: "[loot|E] is returned by [traders|E]" + message_filter_barter_aborted: "@barter_icon! Trade Mission Aborted" + message_filter_barter_aborted_desc: "A [trade|E] mission is aborted" + message_filter_barter_loot_lost: "@barter_icon! Trade Loot Lost" + message_filter_barter_loot_lost_desc: "[traders|E] lost [loot|E]" + message_filter_barter_loot_won: "@barter_icon! Trade Loot Won" + message_filter_barter_loot_won_desc: "[traders|E] won [loot|E]" + # SIEGE + message_filter_siege_won: "@onager_icon! Siege Completed" + message_filter_siege_won_desc: "Your [army|E] successfully [sieges|E] a [holding|E]" + message_filter_siege_won_loot: "@onager_icon! Siege Loot" + message_filter_siege_won_loot_desc: "You gain [loot|E] from a successful [siege|E]" + message_filter_siege_started_enemy: "@onager_icon! Hostile Siege Starts" + message_filter_siege_started_enemy_desc: "An enemy [army|E] starts a [siege|E] of your [holding|E]" + message_filter_siege_won_enemy: "@onager_icon! Hostile Siege Ends" + message_filter_siege_won_enemy_desc: "An enemy [army|E] completes a [siege|E] of your [holding|E]" + # TROOPS + message_filter_war_troops_gained: "@soldier_icon! Soldiers Gained" + message_filter_war_troops_gained_desc: "You gain [special_troops|E]" + message_filter_war_troops_dismissed: "@soldier_icon! Soldiers Disbanded" + message_filter_war_troops_dismissed_desc: "Your [special_troops|E], hired [mercenary_company|E], or hired [holy_order|E] stand down" + message_filter_war_enemy_troops: "@soldier_icon! Enemy Soldiers Gained" + message_filter_war_enemy_troops_desc: "An enemy gains [special_troops|E] or enlists a [mercenary_company|E] or [holy_order|E]" + # ARTIFACT + message_filter_artifact_claim: "@artifact_icon! Artifact Claims" + message_filter_artifact_claim_desc: "You gain or lose an [artifact_claim|E]" + message_filter_artifact_ownership: "@artifact_icon! Artifact Ownership" + message_filter_artifact_ownership_desc: "You gain or lose an [artifact|E]" + # MULTIPLAYER + message_filter_multiplayer: "@catch_all_icon! Multiplayer" + message_filter_multiplayer_desc: "A Player changes character" + # RELIGIOUS + message_filter_faith_excommunication: "@excommunication_icon! Excommunication" + message_filter_faith_excommunication_desc: "A [ruler|E] of your [faith|E] is [excommunicated|E]" + message_filter_head_of_faith_changed: "@religious_icon! New Head of Faith" + message_filter_head_of_faith_changed_desc: "Your [head_of_faith|E] changes" + message_filter_realm_priest_endorsement: "@bishop_icon! Realm Priest Endorsement" + message_filter_realm_priest_endorsement_desc: "Your [realm_priest_possessive|E] endorsement of you changes" + message_filter_liege_converting_holding: "@conversion_icon! Liege Converting County" + message_filter_liege_converting_holding_desc: "Your [liege|E] starts converting the [faith|E] of your [domain|E]" + # EPIDEMIC + message_filter_epidemic_outbreak: "@epidemic_icon! Outbreaks" + message_filter_epidemic_outbreak_desc: "A new [epidemic|E] appears in the [realm|E]" + message_filter_epidemic_spread: "@epidemic_icon! Spreading" + message_filter_epidemic_spread_desc: "A [epidemic|E] spreads in the [realm|E]" + # SCHEME + message_filter_scheme_agent: "@scheme_icon! Agents" + message_filter_scheme_agent_desc: "An [agent|E] joins or leaves one of your [schemes|E]" + message_filter_scheme_ended: "@scheme_icon! Scheme Ends" + message_filter_scheme_ended_desc: "One of your [schemes|E] ends" + message_filter_scheme_progress: "@scheme_icon! Progress" + message_filter_scheme_progress_desc: "One of your [schemes|E] progresses" + message_filter_scheme_opportunity_threshold: "@scheme_opportunity_icon! Scheme Advantages" + message_filter_scheme_opportunity_threshold_desc: "When an [scheme_opportunity_opportunity|e] threshold is met for an ongoing [scheme|E]" + message_filter_countermeasure_change: "@scheme_icon! Target Countermeasures" + message_filter_countermeasure_change_desc: "A [scheme|E] target changes their [scheme_countermeasure_countermeasures|E]" + message_filter_scheme_completion: "@scheme_icon! Scheme Phase Completes" + message_filter_scheme_completion_desc: "A [scheme|E] completes a [scheme_phase|E]" + # SECRET + message_filter_secret_discovered: "@secret_icon! Secret Discovered" + message_filter_secret_discovered_desc: "You discover a [secret|E]" + message_filter_secret_exposed: "@secret_icon! Secret Exposed" + message_filter_secret_exposed_desc: "One of your [secrets|E] is @exposed_icon!Exposed" + # STRUGGLE + message_filter_struggle_catalyst: "@struggle_icon! Catalysts" + message_filter_struggle_catalyst_desc: "A [struggle_catalyst|E] is activated" + message_filter_struggle_phase: "@struggle_icon! New Phase" + message_filter_struggle_phase_desc: "A [struggle_phase|E] changes" + # LEGEND + message_filter_legend_promoter: "@legend_icon! Promotion" + message_filter_legend_promoter_desc: "Another character starts or stops promoting your [legend|E]" + message_filter_legend_seed: "@legend_icon! New Seeds" + message_filter_legend_seed_desc: "You gain a [legend_seed|E]" + # ACCOLADES + message_filter_accolade_activity: "@accolade_icon! Activation" + message_filter_accolade_activity_desc: "An owned [accolade|E] is activated or deactivated" + message_filter_accolade_rank: "@accolade_icon! New Rank" + message_filter_accolade_rank_desc: "An owned [accolade|E] changes Rank" + message_filter_accolade_succession: "@accolade_icon! Knight Succession" + message_filter_accolade_succession_desc: "Your [acclaimed_knight|E] changes" + # ACTIVITY + message_filter_tournament_arrival: "@tournament_icon! Ruler Arrival" + message_filter_tournament_arrival_desc: "A notable [ruler|E] arrives as an [activity_guest|E] at your [GetActivityType( 'activity_tournament' ).GetName]" + message_filter_tournament_knight_arrives: "@tournament_icon! New Knights" + message_filter_tournament_knight_arrives_desc: "A notable [knight|E] arrives as an [activity_guest|E] at your [GetActivityType( 'activity_tournament' ).GetName]" + message_filter_tournament_qualification: "@tournament_icon! Qualification" + message_filter_tournament_qualification_desc: "Your [contest_qualification|E] for a [GetActivityType( 'activity_tournament' ).GetName] [contest|E] changes" + message_filter_tournament_qualification_champion: "@tournament_icon! Champion Qualification" + message_filter_tournament_qualification_champion_desc: "Your Champion's [contest_qualification|E] for a [GetActivityType( 'activity_tournament' ).GetName] [contest|E] changes" + message_filter_tournament_qualification_knight: "@tournament_icon! Knight Qualification" + message_filter_tournament_qualification_knight_desc: "Your [knights_possessive|E] [contest_qualification|E] for a [GetActivityType( 'activity_tournament' ).GetName] [contest|E] changes" + # HOLY ORDER + message_filter_holy_order_founded: "@holy_order_icon! Faith Foundation" + message_filter_holy_order_founded_desc: "A [holy_order|E] of your [faith|E] is founded" + message_filter_holy_order_founded_enemy: "@holy_order_icon! Nearby Foundation" + message_filter_holy_order_founded_enemy_desc: "A [holy_order|E] of another [faith|E] is founded nearby" + message_filter_holy_order_destroyed: "@holy_order_icon! Faith Disbandment" + message_filter_holy_order_destroyed_desc: "A [holy_order|E] of your [faith|E] is disbanded" + message_filter_holy_order_hired: "@holy_order_icon! Order Hired" + message_filter_holy_order_hired_desc: "A [holy_order|E] of which you are the [holy_order_patron|E] is hired" + message_filter_holy_order_patronage: "@holy_order_icon! Patronage" + message_filter_holy_order_patronage_desc: "The status of a [holy_order|E] of which you are the [holy_order_patron|E] changes" + # LAAMP + message_filter_laamp_nearby: "@government_type_adventurer! Nearby Adventurers" + message_filter_laamp_nearby_desc: "An [adventurer|E] appears or is [landed|E] nearby" + message_filter_laamp_contracts: "@task_contract_icon! Contract Issued" + message_filter_laamp_contracts_desc: "A new [task_contract|E] appears" + message_filter_laamp_follower_event: "@followers_icon! Life at Camp" + message_filter_laamp_follower_event_desc: "Something of note happens to one of your [followers|E]." + # MPO + message_filter_migration_into_realm: "@government_type_nomad! Migration into your Realm" + message_filter_migration_into_realm_desc: "A [nomad|E] [migrates|E] into your [realm|E], or your [suzerain_possessive|E] Realm" + message_filter_migration_into_neighbour: "@government_type_nomad! Migration into a Neighboring Realm" + message_filter_migration_into_neighbour_desc: "A [nomad|E] [migrates|E] into a neighboring [realm|E]" + message_filter_tributaries_breaking_free: "@government_type_nomad! Tributaries Breaking Free" + message_filter_tributaries_breaking_free_desc: "[tributaries|E] cease paying tribute to a [nomad|E] [ruler|E]" + message_filter_yurt_yearly_benefits: "@government_type_nomad! Yurt Domicile Yearly Effect" + message_filter_yurt_yearly_benefits_desc: "One of yearly [domicile_buildings|E] effects has been triggered" + message_filter_mpo_de_jure_shifting: "@government_type_nomad! Nomadic De Jure Shifts" + message_filter_mpo_de_jure_shifting_desc: "Your [de_jure|E] shifts due to having a [title|E] fully within your [realm|E] or [tributaries|E]" + message_filter_gok_gained_vassal: "@government_type_nomad! Offer Submission or Ruin Acceptance" + message_filter_gok_gained_vassal_desc: "The Greatest of Khans gains a new [vassal|E] through acceptance of the $mpo_offer_submission_or_ruin$ [interaction|E]" + message_filter_war_target_tributary: "@tributary_icon! War Targets Tributary" + message_filter_war_target_tributary_desc: "A [war|E] is declared against your [tributary|E]" + message_filter_war_target_vassal: "@war_icon! War Targets Vassal" + message_filter_war_target_vassal_desc: "A [war|E] is declared against your [vassal|E]" + message_filter_war_target_suzerain: "@tributary_icon! War Targets Suzerain" + message_filter_war_target_suzerain_desc: "A [war|E] is declared against your [suzerain|E]" + message_filter_tributary_war: "@tributary_icon! Tributary Broken due to War" + message_filter_tributary_war_desc: "Your [tributary|E] breaks free due to a [war|E]" + message_filter_raid_intent_invalidated: "@raid_icon! Raid Intent Invalidated" + message_filter_raid_intent_invalidated_desc: "Your [raid_intent|E] invalidates" + + # ADMIN + message_filter_governance_contracts: "@catch_all_icon!Governance Issue Appears" + message_filter_governance_contracts_desc: "A [governance_issue|E] appears within the land you govern" + message_filter_governor_notification: "@governor_efficiency! Governor Notifications" + message_filter_governor_notification_desc: "Various types of notifications when playing as a [governor|E] in an [administrative|E] [realm|E]" + message_filter_admin_border_change: "@governor_efficiency! Administrative Borders" + message_filter_admin_border_change_desc: "The [governorship|E] borders within your [administrative|E] [top_realm|E] change" + message_filter_appointment_candidacy: "@titles_icon! Appointment Candidacy" + message_filter_appointment_candidacy_desc: "Your Appointment Candidacy for a [title|E] with the Acclamation [succession_law|E] changes" + message_filter_candidate_title_gained: "@titles_icon! Candidate Gains Title" + message_filter_candidate_title_gained_desc: "A support or opposed candidate gains an [administrative|E] [title|E]" + message_filter_candidate_title_lost: "@titles_icon! Candidate Loses Title" + message_filter_candidate_title_lost_desc: "A [ruler|E] whose appointment was supported or opposed loses an [administrative|E] [title|E]" + message_filter_provincial_army_assignment: "@titles_icon! Provincial Army Assignment" + message_filter_provincial_army_assignment_desc: "[provincial|E] [army|E] assignments" + message_filter_admin_provincial_army_requests: "@soldier_icon! Request Provincial Army" + message_filter_admin_provincial_army_requests_desc: "The request for a [provincial_army|E] is approved or denied" + message_filter_admin_new_powerful_family: "@dynasty_icon! New Powerful Family" + message_filter_admin_new_powerful_family_desc: "A [noble_family|E] in the realm becomes [powerful|E] or [dominant|E]" + message_filter_admin_new_noble_family: "@dynasty_icon! New Noble Family" + message_filter_admin_new_noble_family_desc: "A new [noble_family|E] is established in the realm" + # SITUATIONS + message_filter_great_steppe: "@county_fertility_icon! The Great Steppe" + message_filter_great_steppe_desc: "Changes and developments pertaining to [the_great_steppe|E]" + message_filter_silk_road: "@silk_road_icon! The Silk Road" + message_filter_silk_road_desc: "Changes and developments pertaining to the [silk_road|E]" + # HOUSE RELATION + message_filter_house_relation_changed: "@dynasty_icon! House Relation Changes" + message_filter_house_relation_changed_desc: "A [house_relation|E] is formed or changes" + # NATURAL DISASTER + message_filter_natural_disaster_started: "@disaster! Natural Disaster Starts" + message_filter_natural_disaster_started_desc: "A [natural_disaster|E] strikes" + message_filter_natural_disaster_army_damaged: "@soldier_icon! Disasters Damages Army" + message_filter_natural_disaster_army_damaged_desc: "Your [army|E] is damaged by a [natural_disaster|E]" +# MANDALA + message_filter_mandala_aspect: "@mandala_aspect_icon! Mandala Aspect" + message_filter_mandala_aspect_desc: "Notifications relating to your [mandala_aspect|E] " + message_filter_mandala_contract: "@government_type_mandala! Mandala Contract" + message_filter_mandala_contract_desc: "A [mandala|E] [vassal_contract|E] requires your attention" +# GREAT PROJECT + message_filter_great_project: "@great_project_icon! Great Project Updated" + message_filter_great_project_desc: "A [great_project|E] you may be interested in is planned, completes or is canceled" +# REQUIRED + message_filter_event_outcome: "@catch_all_icon! Event Outcomes" + message_filter_event_outcome_desc: "Outcomes of events received and actions taken" + # CUSTOM + message_filter_custom_message: "@secret_icon! Custom Message" + message_filter_custom_message_desc: "Messages you write to yourself" + # TRIBUTARY + message_filter_tributary: "@tributary_icon! $CONTRACT_VASSAL_SIGNATURE_TRIBUTARY_TYPE$" + message_filter_tributary_desc: "Changes and developments pertaining to your [tributaries|E]" diff --git a/localization/english/replace/messages_l_english.yml b/localization/english/replace/messages_l_english.yml new file mode 100644 index 00000000..e6dfd010 --- /dev/null +++ b/localization/english/replace/messages_l_english.yml @@ -0,0 +1,633 @@ +l_english: + MESSAGE_CLICK_TOOLTIP:1 "[SelectLocalization(FeedMessageItem.IsExpanded,'MESSAGE_CLICK_TO_HIDE','MESSAGE_CLICK_TO_SHOW')]\n$MESSAGE_CLICK_TO_DISMISS$" + MESSAGE_CLICK_TO_HIDE:0 "#I Click to hide.#!" + MESSAGE_CLICK_TO_SHOW:0 "#I Click to show.#!" + MESSAGE_CLICK_TO_DISMISS:0 "#I Right-click to dismiss.#!" + MESSAGES_IN_QUEUE:0 "[MessageFeedHandler.GetNumberOfQueuedMessages] more messages" + FEED_MESSAGE_GOTO_TOOLTIP:0 "#T Go to [PlayerMessageItem.GetGotoProvince.GetName].#!" + MESSAGE_CLEAR_ALL_TOOLTIP:1 "#I Click to dismiss. \nRight-click to dismiss all.#!" + + msg_marriage:1 "Marriage: Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )] #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! and #high [RIGHT_CHARACTER.GetFirstNameNoTooltip]#!" + msg_marriage_desc:1 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )], [LEFT_CHARACTER.GetShortUINameNotMe], married your [GetPlayer.Custom2('RelationToMeShort', RIGHT_CHARACTER.Self )], [RIGHT_CHARACTER.GetUINameNotMe]" + msg_building_done:1 "#high [BUILDING.GetNameNoTooltip]#! Constructed" + msg_building_done_desc:1 "[BUILDING.GetName] [building|E] constructed in [PROVINCE.GetBaronyNameExplicitly]" + msg_new_heir:0 "New Heir" + msg_new_heir_desc:2 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )], [LEFT_CHARACTER.GetShortUIName], is your new [player_heir|E]" + msg_new_heir_newborn:0 "New Heir" + msg_new_heir_newborn_desc:2 "Your newborn [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )], [LEFT_CHARACTER.GetShortUIName], is your new [player_heir|E]" + msg_new_heir_old_heir_dead:0 "New Heir" + msg_new_heir_old_heir_dead_desc:2 "With the death of [RIGHT_CHARACTER.GetShortUIName], your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )], [LEFT_CHARACTER.GetShortUIName], is now your [player_heir|E]" + msg_no_new_heir:0 "No heir" + msg_no_new_heir_desc:2 "[LEFT_CHARACTER.GetUINameNoTooltip] is no longer your [player_heir|E]" + msg_no_new_heir_old_heir_dead:0 "No heir" + msg_no_new_heir_old_heir_dead_desc:2 "With the death of [LEFT_CHARACTER.GetUINameNoTooltip], you have no [player_heir|E]" + msg_inherited_single_title:0 "Inheritance: [LEFT_TITLE.GetNameNoTooltip]" + msg_inherited_single_title_desc:1 "You inherited the [LEFT_TITLE.GetName] from [CHARACTER.GetUINameNoTooltip] ($LAW$)" + msg_inherited_titles:0 "$msg_inherited_single_title$" + msg_inherited_titles_desc:1 "You inherited the [LEFT_TITLE.GetName] and #V $VALUE$#! other titles from [CHARACTER.GetShortUIName] ($LAW$)" + msg_realm_law_changed:0 "Realm Law Changed" + msg_realm_law_changed_desc:0 "As [LEFT_CHARACTER.GetTitleTierName|V] your [realm|E] [laws|E] are now $SUCCESSION_LAWS|V$" + msg_lost_single_title:0 "Title Lost" + msg_lost_single_title_desc:0 "You lost the [LEFT_TITLE.GetBaseName] to [CHARACTER.GetShortUIName]" + msg_lost_titles:0 "Titles Lost" + msg_lost_titles_desc:0 "You lost the [LEFT_TITLE.GetBaseName] and $VALUE$ other titles to [CHARACTER.GetShortUIName]" + msg_siege_started:1 "[PROVINCE.GetNameNoTooltip|U] Under Siege" + msg_siege_started_desc:1 "[PROVINCE.GetName|U] is under [siege|E] by [PROVINCE.GetSiege.GetSiegingRealmCharacter.GetUIName]!" + msg_siege_won:0 "Siege Won" + msg_siege_won_desc:1 "You now control [PROVINCE.GetName]" + msg_siege_loot:0 "Siege Won" + msg_siege_loot_desc:1 "You now control [PROVINCE.GetName]\nYou got [gold_i]$VALUE|V0$ from occupying [PROVINCE.GetName]" + msg_siege_piety: "Enemy Mandala Capital Sieged" + msg_scheme_opportunity_threshold_1_desc: "Your [scheme.GetName|V] [scheme|E] has [scheme_opportunity_i|E][EmptyScope.ScriptValue('multi_ending_scheme_charge_to_advance_threshold_t1_value')|P0] [scheme_opportunities|E]" + msg_scheme_opportunity_threshold_2_desc: "Your [scheme.GetName|V] [scheme|E] has [scheme_opportunity_i|E][EmptyScope.ScriptValue('multi_ending_scheme_charge_to_advance_threshold_t2_value')|P0] [scheme_opportunities|E]" + msg_scheme_opportunity_threshold_3_desc: "Your [scheme.GetName|V] [scheme|E] has [scheme_opportunity_i|E][EmptyScope.ScriptValue('multi_ending_scheme_charge_to_advance_threshold_t3_value')|P0] [scheme_opportunities|E]" + msg_scheme_opportunity_threshold_4_desc: "Your [scheme.GetName|V] [scheme|E] has [scheme_opportunity_i|E][EmptyScope.ScriptValue('multi_ending_scheme_charge_to_advance_threshold_t4_value')|P0] [scheme_opportunities|E]" + msg_scheme_abandoned:0 "Scheme Abandoned" + msg_scheme_abandoned_desc:0 "$SCHEME_NAME|V$ on [CHARACTER.GetUINameNoTooltip] has been abandoned" + msg_agent_joined_my_scheme_1: "Agent Joined Scheme: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_agent_joined_my_scheme: "Agents Joined Scheme" + msg_agent_joined_my_scheme_desc_1: "[LEFT_CHARACTER.GetShortUIName] joined as an [agent|E] in your [scheme|E] to [SCHEME.GetFullActionName]" + msg_agent_joined_my_scheme_desc_2: "[LEFT_CHARACTER.GetShortUIName] and [RIGHT_CHARACTER.GetShortUIName] joined as [agents|E] in your [scheme|E] to [SCHEME.GetFullActionName]" + msg_agent_joined_my_scheme_desc: "[LEFT_CHARACTER.GetShortUIName], [RIGHT_CHARACTER.GetShortUIName], as well as other $msg_agent_joined_my_scheme_others_desc$, joined in your [scheme|E] to [SCHEME.GetFullActionName]" + msg_agent_joined_my_scheme_others_desc: "#tooltip:message_consolidation_names #L agents #!#!" + msg_agent_removed_my_scheme:0 "Agent Removed from Scheme" + msg_agent_removed_my_scheme_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] is no longer an agent in your [scheme|E] to [SCHEME.GetFullActionName]" + msg_2_agents_removed_my_scheme:0 "Agents Removed from Scheme" + msg_2_agents_removed_my_scheme_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] and [RIGHT_CHARACTER.GetUINameNoTooltip] are no longer part of your [scheme|E] to [SCHEME.GetFullActionName]" + msg_multiple_agents_removed_my_scheme:0 "Agents Removed from Scheme" + msg_multiple_agents_removed_my_scheme_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] and $OTHER|V$ other [agents|E] are no longer part of your [scheme|E] to [SCHEME.GetFullActionName]" + msg_scheme_froze_title:0 "Your scheme has been frozen" + msg_scheme_pulse_effect: "Pulse Effect" + msg_scheme_pulse_effect_desc: "$EFFECT$" + msg_scheme_froze_desc:0 "Your [scheme|E] to [SCHEME.GetFullActionName] has been frozen because $REASON$" + msg_scheme_froze_until_desc:0 "Your [scheme|E] to [SCHEME.GetFullActionName] has been frozen until [DATE.GetString|V] because $REASON$" + msg_council_task_finished_location:0 "$TASK_NAME|D$: Task Finished" + msg_council_task_finished_location_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] finished [LEFT_CHARACTER.GetHerHis] $TASK_NAME|D$ [councillor_task|E] in $TASK_LOCATION|D$" + msg_council_task_finished:0 "$TASK_NAME|D$: Task Finished" + msg_council_task_finished_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] finished [LEFT_CHARACTER.GetHerHis] $TASK_NAME|D$ [councillor_task|E]" + msg_alliance:1 "Alliance Formed: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_alliance_desc:0 "[alliance|E] formed with [LEFT_CHARACTER.GetUINameNoTooltip]" + msg_broken_alliance:1 "Alliance Broken: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_broken_alliance_desc:0 "The [alliance|E] with [LEFT_CHARACTER.GetUINameNoTooltip] has been broken" + msg_expired_alliance:1 "Alliance Expired: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_expired_alliance_desc:1 "My [alliance|E] with [LEFT_CHARACTER.GetUINameNoTooltip] has ended since [SECONDARY_ACTOR.GetUIName] and [SECONDARY_RECIPIENT.GetUIName] are no longer [married|E] or [betrothed|E]" + msg_expired_alliance_ally_death_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] has died" + msg_alliance_became_landed:1 "Alliance Formed: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_alliance_became_landed_desc:0 "[alliance|E] formed with [LEFT_CHARACTER.GetUINameNoTooltip] because [LEFT_CHARACTER.GetSheHe] is now a [ruler|E]" + msg_alliance_became_unlanded:1 "Alliance Invalid: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_alliance_became_unlanded_desc:1 "You no longer have an [alliance|E] with [LEFT_CHARACTER.GetUINameNoTooltip] because [LEFT_CHARACTER.GetSheHe] is no longer a [ruler|E]" + msg_i_am_not_powerful_vassal:0 "Powerful Vassal" + msg_i_am_not_powerful_vassal_desc:1 "You are no longer considered a [powerful_vassal|E] of [LEFT_CHARACTER.GetUINameNoTooltip]" + msg_war_ally_joined:1 "Ally Joins War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_ally_joined_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] joined the [WAR.GetName|V] [war|E]" + msg_war_ally_joined_multiple:0 "Allies Join War" + msg_war_ally_joined_multiple_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] and $VALUE|V$ other [rulers|E] joined the [WAR.GetName|V] [war|E]" + msg_war_enemy_joined:1 "Enemy Ally Joins War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_enemy_joined_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] joined [WAR.GetName|V] [war|E]" + msg_war_enemy_joined_multiple:1 "Enemy Allies Join War" + msg_war_enemy_joined_multiple_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] and $VALUE|V$ other [rulers|E] joined the [WAR.GetName|V] [war|E]" + msg_war_player_joined:1 "You Joined a War" + msg_war_player_joined_desc:1 "You have joined the [WAR.GetName|V] [war|E]" + msg_war_ally_replaced:1 "Ally Joins War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_ally_replaced_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] replaced [RIGHT_CHARACTER.GetUINameNoTooltip] in the [WAR.GetName|V] [war|E]" + msg_war_enemy_replaced:1 "Enemy Ally Joins War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_enemy_replaced_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] replaced [RIGHT_CHARACTER.GetUINameNoTooltip] in the [WAR.GetName|V] [war|E]" + msg_war_player_replaced:1 "You Joined a War" + msg_war_player_replaced_desc:2 "You replaced [RIGHT_CHARACTER.GetUINameNoTooltip] in the [WAR.GetName|V]" + msg_war_enemy_transferred:1 "New War Target: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_enemy_transferred_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] is now the target of the [WAR.GetName|V]" + msg_war_player_transferred:1 "New War: [WAR.GetActiveCB.GetAttacker.GetShortUINameNoTooltip]" + msg_war_player_transferred_desc:2 "You are the new target of the [WAR.GetName|V] [war|E]" + msg_war_ally_transferred:0 "$msg_war_enemy_transferred$" + msg_war_ally_transferred_desc:0 "$msg_war_enemy_transferred_desc$" + msg_war_ally_removed:1 "Ally Left War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_ally_removed_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] left the [WAR.GetName|V] [war|E]" + msg_war_ally_removed_multiple:1 "Ally Left War: [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_war_ally_removed_multiple_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] and $VALUE|V$ other [rulers|E] left the [WAR.GetName|V]" + msg_war_enemy_removed:0 "Enemies Left War" + msg_war_enemy_removed_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] left the [WAR.GetName|V] [war|E]" + msg_war_enemy_removed_multiple:0 "Enemies Left War" + msg_war_enemy_removed_multiple_desc:1 "[LEFT_CHARACTER.GetUINameNoTooltip] and $VALUE|V$ other [rulers|E] left the [WAR.GetName|V] [war|E]" + msg_war_player_removed:1 "You Left War" + msg_war_player_removed_desc:1 "You left the [WAR.GetName|V] [war|E]" + msg_invalidation_of_council_task:0 "Task Aborted" + msg_invalidation_of_council_task_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip] can no longer continue with [ACTIVE_COUNCIL_TASK.GetName]" + msg_troops_disbanding_civil_war:0 "Desertion" + msg_troops_disbanding_civil_war_desc:0 "$AMOUNT$ levies from [LEFT_CHARACTER.GetShortUINameNoTooltip] are disbanding due to civil war" + msg_war_declared_on_liege:0 "War Declared on Liege!" + msg_war_declared_on_liege_desc:1 "Your [liege|E], [LEFT_CHARACTER.GetShortUIName|U], is being attacked by [RIGHT_CHARACTER.GetShortUIName]" + msg_war_declared_by_liege:0 "Liege Goes to War!" + msg_war_declared_by_liege_desc:1 "Your [liege|E], [LEFT_CHARACTER.GetShortUIName|U], has declared [war|E] on [RIGHT_CHARACTER.GetShortUIName]" + msg_war_declared_on_me:0 "War Declared!" + msg_war_declared_on_me_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] has declared [war|E] on you!" + msg_liege_war_ended_attacker_win:0 "Liege's War Ends" + msg_liege_war_ended_defender_win:0 "Liege's War Ends" + msg_liege_war_ended_white_peace:0 "Liege's War Ends" + msg_liege_war_ended_invalid:0 "Liege's War Ends" + msg_liege_war_ended_invalid_desc:0 "[LEFT_CHARACTER.GetShortUINamePossessive] [war|E] with [RIGHT_CHARACTER.GetShortUIName] has ended" + msg_war_declared_on_tributary: "War Declared on Tributary!" + msg_war_declared_on_tributary_desc: "Your [tributary|E], [LEFT_CHARACTER.GetShortUIName|U], is being attacked by [RIGHT_CHARACTER.GetShortUIName]" + msg_tributary_declared_war_on_tributary: "War Declared Among Tributaries" + msg_war_declared_on_vassal: "War Declared on Vassal!" + msg_war_declared_on_vassal_desc: "Your [vassal|E], [LEFT_CHARACTER.GetShortUIName|U], is being attacked by [RIGHT_CHARACTER.GetShortUIName]" + msg_war_declared_on_suzerain: "War Declared on Suzerain!" + msg_war_declared_on_suzerain_desc: "Your [suzerain|E], [LEFT_CHARACTER.GetShortUIName|U], is being attacked by [RIGHT_CHARACTER.GetShortUIName]" + + msg_domicile_moved.title: "Camp Moved to [CHARACTER.GetCurrentLocation.GetBaronyNameExplicitlyNoTooltip]" + msg_domicile_moved.desc: "Your [camp|E] has moved to [CHARACTER.GetCurrentLocation.GetBaronyNameExplicitly]" + msg_domicile_building_started.title: "#high [CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetName]#! Started" + msg_domicile_building_started.desc: "[CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetName] [domicile_building|E] is under construction in [CHARACTER.GetDomicile.GetType.GetTitleText( CHARACTER.Self )]" + msg_domicile_building_cancelled.title: "#high [CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetNameNoTooltip]#! Canceled" + msg_domicile_building_cancelled.desc: "[CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetName] [domicile_building|E] under construction in [CHARACTER.GetDomicile.GetType.GetTitleText( CHARACTER.Self )] has been canceled" + msg_domicile_building_completed.title: "#high [CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetNameNoTooltip]#! Completed" + msg_domicile_building_completed.desc: "The [CHARACTER.GetDomicile.GetBuildingUnderConstruction.GetName] [domicile_building|E] has finished constructing in your [CHARACTER.GetDomicile.GetType.GetTitleText( CHARACTER.Self )]" + + event_message_title:0 "$TITLE$" + event_message_text:0 "$DESCRIPTION$" + event_message_text_and_effect:1 "$DESCRIPTION_AND_EFFECT$" + event_message_effect_and_text:0 "$EFFECT$\n\n$DESCRIPTION$" + event_message_effect:0 "$EFFECT$" + blank_line:0 "" + + send_interface_message_tooltip:0 "#T From an Event#!" + msg_gain_trait:0 "Trait Gained" + msg_gain_trait_desc:1 "You gained the [TRAIT.GetName( CHARACTER.Self )|L] [trait|E]" + msg_lose_trait:0 "Trait Lost" + msg_lose_trait_desc:1 "You lost the [TRAIT.GetName( CHARACTER.Self )|L] [trait|E]" + msg_gain_nickname:0 "New Nickname" + msg_gain_nickname_desc:1 "You are now known as [CHARACTER.GetNickname|V]" + msg_lost_nickname:0 "Lost Nickname" + msg_lost_nickname_desc:0 "You are no longer known as [CHARACTER.GetNickname|V]" + msg_title_rank_up:0 "Rank Gained" + msg_title_rank_up_desc:0 "You are now a mighty [CHARACTER.GetTitleTierName|V]" + msg_title_rank_down:0 "Rank Lost" + msg_title_rank_down_desc:1 "You are now a mere [CHARACTER.GetTitleTierName|V]" + msg_change_primary:0 "Primary Title Changed" + msg_change_primary_desc:0 "Your [primary_title|E] is now [TITLE.GetNameNoTier]" + msg_disbanded_faction_target_died:0 "Faction Disbanded" + msg_disbanded_faction_target_died_desc:0 "The [FACTION.GetName] [faction|E] target [CHARACTER.GetUINameNoTooltip] died, and has disbanded" + msg_removed_from_faction_not_valid:0 "Faction Abandoned" + msg_removed_from_faction_not_valid_desc:1 "You had to leave the [FACTION.GetName] [faction|E] against [CHARACTER.GetUINameNoTooltip].\n$REASONS$" + msg_removed_from_faction_not_valid_leader:0 "Faction Disbanded" + msg_removed_from_faction_not_valid_leader_desc:0 "The [FACTION.GetName] [faction|E] against [CHARACTER.GetUINameNoTooltip] doesn't have a valid leader, and has disbanded" + msg_removed_from_faction_not_liege:0 "Left Faction" + msg_removed_from_faction_not_liege_desc:1 "[CHARACTER.GetUINameNoTooltip] is no longer your [liege|E], so you have left the [FACTION.GetName] [faction|E] against [CHARACTER.GetHerHim]" + msg_faction_against_liege_or_me_created:2 "Faction Targets [RIGHT_CHARACTER.GetShortUINameNoTooltip|U]!" + msg_faction_against_liege_or_me_created_desc:1 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )], [LEFT_CHARACTER.GetShortUIName], created the [FACTION.GetName] [faction|E] against [RIGHT_CHARACTER.GetShortUIName]" + msg_county_faction_against_liege_or_me_created_desc:2 "The [LEFT_TITLE.GetName] has given rise to the [FACTION.GetName] [faction|E], targeting [RIGHT_CHARACTER.GetShortUINameNoTooltip]" + msg_faction_against_me_disbanded:1 "Hostile Faction Disbanded!" + msg_faction_against_me_disbanded_desc:2 "The [FACTION.GetName] [faction|E] that targeted you has disbanded" + msg_my_faction_disbanded:0 "Faction Disbanded" + msg_my_faction_disbanded_desc:0 "The [FACTION.GetName] [faction|E] has disbanded" + msg_liege_passed_law: "Liege Passes Law" + msg_liege_passed_law_desc: "Your [liege|E], [GetPlayer.GetLiege.GetShortUIName], has passed the [LAW.GetName] [law|E]" + msg_liege_passed_title_law: "New Title Law" + msg_liege_passed_title_law_desc: "Your [liege|E], [GetPlayer.GetLiege.GetShortUIName], has passed the [LAW.GetName] [title_law|E] for the [TITLE.GetName]" + msg_liege_changed_budget_law: "Liege Changes Budget Allocation" + msg_liege_changed_budget_law_desc: "Your [liege|E], [GetPlayer.GetLiege.GetShortUIName], has changed the [LAW.GetLawGroup.GetName] [law|E] from [OLD_LAW.GetShortName] to [LAW.GetShortName]" + msg_liege_removed_title_law: "Title Law Removed" + msg_liege_removed_title_law_desc: "Your [liege|E], [GetPlayer.GetLiege.GetShortUIName], has revoked the [LAW.GetName] [title_law|E] for the [TITLE.GetName]" + msg_law_invalidated_no_new_law:0 "Law Removed" + msg_law_invalidated_no_new_law_desc:0 "Your [LAW.GetName] [law|E] is no longer valid and has been removed" + msg_law_invalidated:0 "Law Replaced" + msg_law_invalidated_desc:0 "Your [LAW.GetName] [law|E] is no longer valid, and was replaced by [TARGET_LAW.GetName]" + msg_faction_local_not_leader_anymore:0 "New Faction Leader" + msg_faction_local_not_leader_anymore_desc:1 "[LEFT_CHARACTER.GetShortUINameNoTooltip] has replaced you as the leader of the [FACTION.GetName] [faction|E]" + msg_faction_local_becomes_leader:0 "New Faction Leader" + msg_faction_local_becomes_leader_desc:1 "You are now the leader of the [FACTION.GetName] [faction|E] against [CHARACTER.GetShortUINameNoTooltip]" + msg_faction_forced_to_join:0 "Forced To Join Faction" + msg_faction_forced_to_join_desc:1 "[RIGHT_CHARACTER.GetShortUINameNoTooltip] used [RIGHT_CHARACTER.GetHerHis] [hook|E] on you to force you to join the [FACTION.GetName] [faction|E] against [LEFT_CHARACTER.GetShortUINameNoTooltip]" + msg_faction_grows: "Faction Grows" + msg_faction_grows_desc: "[LEFT_CHARACTER.GetShortUINamePossessiveNoTooltip] peasants are getting ambitious and are joining the [FACTION.GetName] [faction|E] targeting me." + msg_betrothal_invalidated:0 "Betrothal Invalid" + msg_betrothal_invalidated_desc:1 "Your new [faith|E] dictates that you may no longer be [betrothed|E] to [LEFT_CHARACTER.GetShortUIName]" + msg_betrothal_invalidated_player_heir:0 "[player_heir|E] $msg_betrothal_invalidated$" + msg_betrothal_invalidated_player_heir_desc:0 "[LEFT_CHARACTER.GetShortUINamePossessive] new [faith|E] dictates that [LEFT_CHARACTER.GetSheHe] may no longer be [betrothed|E] to [RIGHT_CHARACTER.GetShortUIName]" + msg_break_betrothal:0 "Betrothal Broken" + msg_break_betrothal_desc:0 "Your [betrothal|E] to [LEFT_CHARACTER.GetShortUIName] has been broken" + msg_break_betrothal_player_heir:0 "[player_heir|E] $msg_break_betrothal$" + msg_break_betrothal_player_heir_desc:0 "[LEFT_CHARACTER.GetShortUINamePossessive] [betrothal|E] to [RIGHT_CHARACTER.GetShortUIName] has been broken" + msg_spouse_invalidated:0 "Spouse Invalid" + msg_spouse_invalidated_desc:3 "Your [faith|E] or [culture_possessive|E] values mean that [LEFT_CHARACTER.GetShortUIName] is no longer your [spouse|E]" + msg_divorce:0 "Divorce" + msg_divorce_desc:0 "You were [divorced|E] from [LEFT_CHARACTER.GetShortUIName] – [LEFT_CHARACTER.GetSheHe] is no longer your [spouse|E]" + msg_spouse_invalidated_player_heir:0 "[player_heir|E] $msg_spouse_invalidated$" + msg_spouse_invalidated_player_heir_desc:0 "[LEFT_CHARACTER.GetShortUINamePossessive] new [faithpossessive|E] beliefs mean that [RIGHT_CHARACTER.GetShortUIName] is no longer [LEFT_CHARACTER.GetHerHis] [spouse|E]" + msg_divorce_player_heir:0 "[player_heir|E] $msg_divorce$" + msg_divorce_player_heir_desc:1 "[LEFT_CHARACTER.GetShortUIName] has gotten [divorced|E] from [RIGHT_CHARACTER.GetShortUIName] – [RIGHT_CHARACTER.GetSheHe] is no longer [LEFT_CHARACTER.GetHerHis] [spouse|E]" + msg_betrothal_fulfilled:0 "Betrothal Fulfilled" + msg_betrothal_fulfilled_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] and [RIGHT_CHARACTER.GetShortUIName] are now [married|E]" + msg_marriage_forced:0 "Forced Marriage" + msg_marriage_forced_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] and [RIGHT_CHARACTER.GetShortUIName] have [married|E] due to a [strong_hook|E]" + msg_consort_invalidated:0 "Consort Invalid" + msg_consort_invalidated_desc:2 "Your [faith|E] or [culture_possessive|E] values mean that [LEFT_CHARACTER.GetShortUIName] is no longer your consort" + msg_war_casus_belli_changed:0 "Casus Belli Changed" + msg_war_casus_belli_changed_desc:0 "[WAR.GetName] is using a new [casus_belli|E]" + msg_cadet_branch_created:0 "Cadet Branch" + msg_cadet_branch_created_desc:1 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )] [LEFT_CHARACTER.GetShortUIName] created the [cadet_branch|E] $NAME|V$" + msg_i_became_head_of_house:0 "Became House Head" + msg_i_became_head_of_house_desc:1 "You became the new [house_head|E] of [house|E] $NAME|V$" + msg_i_not_head_of_house_anymore:0 "House Head Changed" + msg_i_not_head_of_house_anymore_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] replaced you as [house_head|E] of [house|E] $NAME|V$" + msg_became_head_of_house:0 "House Head Changed" + msg_became_head_of_house_desc:1 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )] [LEFT_CHARACTER.GetShortUIName] became the new [house_head|E] of [house|E] $NAME|V$" + msg_i_became_dynast:1 "Became Dynasty Head" + msg_i_became_dynast_desc:1 "You became the new [dynast|E] of the $NAME|V$ [dynasty|E]" + msg_i_not_dynast_anymore:1 "Dynasty Head Changed" + msg_i_not_dynast_anymore_desc:1 "[LEFT_CHARACTER.GetShortUIName|U] replaced you as [dynast|E] of the $NAME|V$ dynasty" + msg_became_dynast:1 "Dynasty Head Changed" + msg_became_dynast_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] became the new [dynast|E] of the $NAME|V$ dynasty" + msg_i_became_head_of_faith:0 "Head of Faith Changed" + msg_i_became_head_of_faith_desc:0 "You became the new [FAITH.ReligiousHeadName] of [FAITH.GetName]" + msg_i_became_head_of_multiple_faiths:0 "$msg_i_became_head_of_faith$" + msg_i_became_head_of_multiple_faiths_desc:0 "$msg_i_became_head_of_faith_desc$ and $NUM_OTHER_FAITHS|V$ other faiths" + msg_i_not_head_of_faith_anymore:0 "Head of Faith Changed" + msg_i_not_head_of_faith_anymore_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] replaced you as the [FAITH.ReligiousHeadName] of [FAITH.GetName]" + msg_i_not_head_of_multiple_faiths_anymore:0 "$msg_i_not_head_of_faith_anymore$" + msg_i_not_head_of_multiple_faiths_anymore_desc:0 "$msg_i_not_head_of_faith_anymore_desc$ and $NUM_OTHER_FAITHS|V$ other faiths" + msg_new_fascination_selected:0 "New [cultural_fascination|E]" + msg_new_fascination_selected_desc:2 "Your [culture|E] is now [Concept( 'fascination', 'Fascinated' )|E] by the $NAME|V$ [innovation|E]" + msg_innovation_discovered:0 "Innovation Discovered" + msg_innovation_discovered_desc:3 "Your [culture|E] has discovered the $NAME|V$ [innovation|E]!" + msg_fascination_discovered:0 "Fascination Discovered" + msg_fascination_discovered_desc:3 "Your [culture|E] has discovered its $NAME|V$ [fascination|E]!\nA new [innovation|E] can be selected." + msg_era_discovered:0 "New Cultural Era" + msg_era_discovered_desc:2 "Your [culture|E] has entered the $NAME|N$ [era|E].\nNew [innovations|E] are available!" + msg_first_era_discovered:0 "New Cultural Era" + msg_first_era_discovered_desc:0 "[CULTURE.GetName] has entered the $NAME|V$ [era|E]" + msg_no_longer_culture_head:0 "Culture Head Changed" + msg_no_longer_culture_head_desc:1 "[LEFT_CHARACTER.GetShortUIName|U] took your place as [culture_head|E] of the [CULTURE.GetName] [culture|E]" + msg_become_culture_head:0 "Became Culture Head" + msg_become_culture_head_desc:1 "You became the [culture_head|E] of [CULTURE.GetName] culture!" + msg_new_theocracy_lesse:0 "New $game_concept_realm_priest$" + msg_new_theocracy_lesee_approve_desc:1 "Your [realm_priest|E], [LEFT_CHARACTER.GetShortUIName|U], endorses you #weak ([church_property|E])#!" + msg_new_theocracy_lesee_disapprove_desc:1 "Your [realm_priest|E], [LEFT_CHARACTER.GetShortUIName|U], does not endorse you #weak ([church_property|E])#!" + msg_mercenary_company_dismissed:0 "Mercenaries Dismissed" + msg_mercenary_company_dismissed_desc:0 "Your contract with the [LEFT_TITLE.GetNameNoTooltip] [mercenary_company|E] has run out, and the soldiers have been dismissed" + msg_holy_order_dismissed:0 "Holy Order Dismissed" + msg_holy_order_dismissed_desc:0 "The [LEFT_TITLE.GetNameNoTooltip] [holy_order|E] has been dismissed" + msg_fired_from_council:0 "Fired From Council" + msg_fired_from_council_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] has fired you from [LEFT_CHARACTER.GetHerHis] [council|E]" + msg_council_swap_position:0 "New Council Position" + msg_council_swap_position_desc:2 "You're now a $POSITION_NAME$ on [LEFT_CHARACTER.GetShortUINamePossessive] [council|E]" + msg_left_council_position:0 "Councillor Left Court" + msg_left_council_position_desc:0 "[LEFT_CHARACTER.GetShortUIName|U] left [LEFT_CHARACTER.GetHerHis] position as your $POSITION_NAME$" + msg_peace_armies_disbanded:0 "At Peace" + msg_peace_armies_disbanded_desc:1 "You're finally at peace, therefore all your armies have been disbanded" + msg_invalidate_war_title:1 "The [war.GetName] has ended: it was no longer valid to continue." + msg_tributary_contract_broken_due_to_war_title: "Tributary Contract Broken" + msg_tributary_contract_broken_due_to_war_text: "Your [tributary_contract|E] has broken due to [war|E]" + msg_claim_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any of the claimed Counties." + msg_claim_war_invalidated_claimant_unavailable_dead_message:1 "The [war.GetName] has ended: [claimant.GetShortUIName] died, and thus [claimant.GetHerHis] claim can no longer be used by [attacker.GetShortUIName]." + msg_claim_war_invalidated_claimant_unavailable_not_vassal_message:1 "The [war.GetName] has ended: [claimant.GetShortUIName] is not a vassal or courtier of [attacker.GetShortUIName] and thus [claimant.GetHerHis] claim can no longer be used." + msg_claim_war_invalidated_claimant_is_now_a_minister_message: "The [war.GetName] has ended: having become a [minister|E], [claimant.GetShortUINamePossessive] [claim|E] is no longer relevant." + msg_de_jure_duchy_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any land in the targeted duchy." + msg_de_jure_county_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] the County." + msg_de_jure_duchy_war_invalidated_liege_war_message:1 "The [war.GetName] has ended: [Select_CString( attacker.IsLocalPlayer, 'You', attacker.GetShortUIName )] have joined [Select_CString( attacker.IsLocalPlayer, 'your', attacker.GetHerHis )] liege's war against [Select_CString( defender.IsLocalPlayer, 'you', defender.GetShortUIName )]." + msg_de_jure_all_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any de jure claimed land." + msg_religious_war_invalidation_region_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any land in the target region." + msg_religious_war_invalidated_hostility_level_message:1 "The [war.GetName] has ended: [attacker.GetShortUIName] cannot $game_concept_holy_war$ the [defender.GetFaith.GetAdjective] [faith|E]." + msg_invasion_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any land in the target region." + msg_mongol_invasion_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any land in the target region." + msg_county_conquest_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] the County." + msg_duchy_conquest_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] no longer [Select_CString( defender.IsLocalPlayer, 'control', 'controls' )] any land in the target region." + msg_vassalization_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] can no longer be vassalized." + msg_make_tributary_war_invalidated_message: "The [war.GetName] has ended: [defender.GetShortUIName] can no longer be made into a tributary." + msg_subjugation_war_invalidated_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] can no longer be subjugated." + msg_excommunication_war_invalidation_trait_message:1 "The [war.GetName] has ended: [defender.GetShortUIName] is no longer Excommunicated." + msg_raid_war_invalidated_message:0 "The [war.GetName] has ended: [defender.GetTitledFirstName] can no longer be raided" + msg_free_house_member_war_invalidated_message: "The [war.GetName] has ended: [defender.GetTitledFirstName] no longer has any imprisoned members of [house|E] [attacker.GetHouse.GetBaseNameNoTooltip] " + msg_unify_house_war_invalidated_message: "The [war.GetName] has ended: [defender.GetTitledFirstName] no longer has any vassals of [house|E] [attacker.GetHouse.GetBaseNameNoTooltip] " + msg_laamp_raid_contract_war_invalidated_message: "The [war.GetName] has ended: [attacker.GetShortUINamePossessive] [GetTaskContractType('laamp_raid_contract').GetName] [task_contract|E] is no longer valid." + + msg_my_hook_replaced:0 "Hook Replaced" + msg_my_hook_replaced_desc:1 "Your [hook|E] on [LEFT_CHARACTER.GetShortUIName] has been replaced with a [HOOK.GetName] Hook" + msg_my_hook_added:0 "Hook Gained" + msg_my_hook_added_desc:1 "You have gained a [HOOK.GetName] [hook|E] on [LEFT_CHARACTER.GetShortUIName]" + msg_hook_on_me_replaced:1 "Hook on You Replaced" + msg_hook_on_me_replaced_desc:1 "[LEFT_CHARACTER.GetShortUINamePossessive] [hook|E] on you has been replaced with a [HOOK.GetName] Hook" + msg_hook_on_me_added:1 "Hook on You Gained" + msg_hook_on_me_added_replaced:1 "Hook on You Gained" + msg_hook_on_me_added_desc:1 "[LEFT_CHARACTER.GetShortUIName|U] has gained a [HOOK.GetName] [hook|E] on you" + msg_hook_on_me_expired:1 "Hook on You Expired" + msg_hook_on_me_expired_desc:1 "[LEFT_CHARACTER.GetShortUINamePossessive] $HOOK_NAME$ [hook|E] on you has expired" + msg_my_hook_expired:0 "Hook Expired" + msg_my_hook_expired_desc:1 "Your [hook|E] on [LEFT_CHARACTER.GetShortUIName] has expired" + + death_notification_title:1 "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )|U] #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + lover_death_notification_title:0 "Your Lover #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + friend_death_notification_title:0 "Your Friend #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + councillor_death_notification_title:0 "Your Councillor #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + elder_death_notification_title: "Your Elder #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + prisoner_death_notification_title: "Your Prisoner #high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + notable_death_notification_title: "#high [LEFT_CHARACTER.GetFirstNameNoTooltip]#! Died" + + msg_perk_point_added:1 "[LIFESTYLE.GetNameNoTooltip] Perk Available" + msg_perk_point_added_desc:1 "You can unlock a new Perk for the [LIFESTYLE.GetName] Lifestyle" + msg_focus_invalidated:1 "Lifestyle Focus Invalidated" + msg_focus_invalidated_desc:0 "The [FOCUS.GetName] has been invalidated" + msg_dynasty_perk_added:0 "Dynasty Legacy Added" + msg_dynasty_perk_added_desc:1 "Your [dynasty|E] has unlocked the [DYNASTY_PERK.GetName] [dynasty_perk|E]" + msg_dynasty_perk_removed:0 "Dynasty Legacy Removed" + msg_dynasty_perk_removed_desc:0 "Your [dynasty|E] has lost the [DYNASTY_PERK.GetName] [dynasty_perk|E]" + msg_vassal_feudalised:0 "Vassal has become Feudal" + msg_vassal_feudalised_desc:1 "Your vassal, [ROOT.Char.GetShortUIName], has given up [ROOT.Char.GetHerHis] tribal ways and become feudal" + msg_dynasty_prestige_level_increase:1 "[dynasty_prestige_level|E] Increased" + msg_dynasty_prestige_level_increase_desc:1 "The [LEFT_CHARACTER.GetDynasty.GetBaseName] dynasty is known far and wide." + msg_dynasty_prestige_level_dencrease:1 "Lost [dynasty_prestige_level|E]" + msg_dynasty_prestige_level_dencrease_desc:2 "The [LEFT_CHARACTER.GetDynasty.GetBaseName] dynasty has fallen into disrepute" + piety_level_gain.message:0 "Gained [piety_level|E]" + piety_level_gain.desc:0 "You are known for dedication to your faith" + piety_level_gain.mandala.desc: "Your divinity grows" + piety_level_loss.message:0 "Lost [piety_level|E]" + piety_level_loss.desc:0 "Your sinful acts come at a cost" + prestige_level_gain.message:0 "Gained [prestige_level|E]" + prestige_level_gain.desc:0 "Your glory is widely known" + prestige_level_loss.message:0 "Lost [prestige_level|E]" + prestige_level_loss.desc:0 "Your dishonor comes at a cost" + influence_level_gain.message: "Gained [influence_level|E]" + influence_level_gain.desc: "Your network of connections spreads" + influence_level_loss.message: "Lost [influence_level|E]" + influence_level_loss.desc: "Your well of favors has run dry" + merit_level_gain.message: "Gained [merit_level|E]" + merit_level_gain.desc: "You are continuing on the proper Path." + merit_level_loss.message: "Lost [merit_level|E]" + merit_level_loss.desc: "You have cast you and your family's name into disrepute." + stress_level_reduced.message:1 "Reduced [stress_level|E]" + stress_level_reduced.text:0 "You are no longer as overwhelmed by [stress|E]" + msg_holy_order_patronage_lost:0 "[holy_order|E] Patronage Lost" + msg_holy_order_patronage_lost_desc:0 "You have lost the patronage of the [LEFT_TITLE.GetName] [holy_order|E]" + msg_holy_order_patronage_gained:0 "[holy_order|E] Patronage Gained" + msg_holy_order_patronage_gained_desc:0 "You have gained the patronage of the [LEFT_TITLE.GetName] [holy_order|E]" + msg_murder_scheme_agent_join_title:0 "Agent joined Murder Scheme" + msg_murder_scheme_agent_join_message:1 "[agent.GetTitledFirstName] joined your scheme to kill [target.GetTitledFirstName]." + msg_murder_scheme_agent_leave_title:0 "Agent left Murder Scheme" + msg_murder_scheme_agent_leave_message:1 "[agent.GetTitledFirstName] left your scheme to kill [target.GetTitledFirstName]." + + mongols_sieged_county.t:0 "[county.GetName] Razed by the Horde" + + msg_vassal_contract_level_invalidated:0 "Obligation Invalidated" + msg_vassal_contract_level_invalidated_desc:0 "[LEFT_CHARACTER.GetUINameNoTooltip|U] and $message_consolidation_others_obligations$ have had some of their [obligations|E] invalidated" + message_consolidation_others_obligations: "#tooltip:message_consolidation_names #L Other Vassals#!#!" + msg_vassal_contract_level_invalidated_desc_1: "[RIGHT_CHARACTER.GetUINamePossessiveNoTooltip|U] $OBLIGATION_TYPE_0|V$ [obligation|E] has been invalidated" + msg_vassal_contract_2_levels_invalidated:0 "Obligations Invalidated" + msg_vassal_contract_2_levels_invalidated_desc:0 "[RIGHT_CHARACTER.GetUINamePossessiveNoTooltip] $OBLIGATION_TYPE_0|V$ and $OBLIGATION_TYPE_1|V$ [obligations|E] have been invalidated" + msg_vassal_contract_multiple_levels_invalidated:0 "Obligations Invalidated" + msg_vassal_contract_multiple_levels_invalidated_desc:0 "[RIGHT_CHARACTER.GetUINamePossessiveNoTooltip] $OBLIGATION_TYPE_0|V$ and $OBLIGATION_TYPE_1|V$ and $COUNT|V$ other [obligations|E] have been invalidated" + + msg_force_vote_in_succession_election_message:1 "You force [recipient.GetTitledFirstName] to vote for the same candidate as you for the next [GetDefine('NCharacter', 'FORCED_SUCCESSION_ELECTION_YEARS')] years." + msg_recruited_guest_to_court_interaction_title:0 "Recruited Guest to your [actor.Custom('GetCourt')]" + msg_recruited_guest_to_court_interaction_message:0 "[recipient.GetTitledFirstName] is now a member of your [actor.Custom('GetCourtConcept')]." + msg_kicked_courtier_from_court_interaction_title:0 "Dismissed Courtier" + msg_courtier_left_court_interaction_title:0 "Courtier Left" + msg_hired_court_physician_interaction_title: "$court_physician_court_position$ Hired" + msg_hired_court_physician_interaction_message:1 "[recipient.GetTitledFirstName] is now your [GetCourtPositionType('court_physician_court_position').GetName()]." + msg_fired_court_physician_interaction_title: "$court_physician_court_position$ Fired" + msg_fired_court_physician_interaction_message:1 "You fired [recipient.GetTitledFirstName] from the position as [GetCourtPositionType('court_physician_court_position').GetName()]." + + msg_concubine_taken_title:2 "Taken a Concubine" + msg_concubine_accepted_title:1 "Accepted [secondary_actor.GetShortUIName] as my concubine" + msg_concubine_dismissed_title:2 "Dismissed Concubine" + msg_concubine_offered_title: "Made [secondary_recipient.GetTitledFirstName] [recipient.GetTitledFirstNamePossessive] concubine" + msg_concubine_offered_reversed_title: "[secondary_actor.GetTitledFirstName] is now your Concubine!" + msg_concubine_offered_invalidated_title: "Could Not Offer Concubine" + msg_concubine_offered_invalidated_recipient_title: "Could Not Accept Concubine" + msg_concubine_offered_invalidated_consort: "[secondary_recipient.GetTitledFirstName] is [spouse.GetShortUINamePossessive] consort and therefore cannot become [recipient.GetShortUINamePossessive] concubine" + msg_concubine_offered_invalidated_betrothed: "[secondary_recipient.GetTitledFirstName] is betrothed to [spouse.GetShortUIName] and therefore cannot become [recipient.GetShortUINamePossessive] concubine" + msg_concubine_offer_rejected_title: "Concubine Rejected" + msg_concubine_offer_rejected: "[recipient.GetTitledFirstName] rejected [secondary_recipient.GetTitledFirstName] as [recipient.GetHerHis] concubine" + msg_close_family_member_taken_as_concubine_title: "[secondary_recipient.GetTitledFirstName] Taken as Concubine" + msg_close_family_member_offered_as_concubine_title: "[secondary_actor.GetTitledFirstName] Taken as Concubine" + + msg_move_prisoner_to_dungeon:0 "Prisoner moved to Dungeon" + msg_move_prisoner_to_house_arrest:0 "Prisoner moved to House Arrest" + msg_execute_prisoner:0 "Prisoner Executed" + msg_execute_prisoner_desc:0 "[recipient.GetTitledFirstName] [recipient.GetDeathReason]" + + msg_artifact_gained_title:0 "Inheritance: [artifact_inherited.GetNameNoTooltip]" + msg_artifact_gained_desc:0 "You inherited [artifact_inherited.GetNameNoTooltip] from [old_owner.GetUIName]!" + + msg_rival_dethroned:0 "Your rival [actor.GetTitledFirstName] lost a Title" + msg_rival_dethroned_desc:0 "Your [rival|E] [actor.GetTitledFirstName] lost the [title.GetBaseName]" + + msg_court_position_gained:0 "Appointed [COURT_POSITION_TYPE.GetNameNoTooltip]" + msg_court_position_gained_desc:0 "You have been appointed [LEFT_CHARACTER.GetShortUINamePossessive] [COURT_POSITION_TYPE.GetNameNoTooltip]" + msg_court_position_removed:0 "[COURT_POSITION_TYPE.GetNameNoTooltip] Position Revoked" + msg_court_position_removed_desc:0 "[LEFT_CHARACTER.GetShortUIName] is no longer employing you as [COURT_POSITION_TYPE.GetNameNoTooltip]" + msg_court_position_invalidated_employee:1 "[COURT_POSITION_TYPE.GetNameNoTooltip] Position Lost" + msg_court_position_invalidated_employee_desc:0 "[LEFT_CHARACTER.GetShortUIName] can no longer employ you as [COURT_POSITION_TYPE.GetNameNoTooltip]" + msg_court_position_invalidated_employer:1 "[COURT_POSITION_TYPE.GetNameNoTooltip] Position Vacated" + msg_court_position_invalidated_employer_desc:0 "[LEFT_CHARACTER.GetShortUIName] is no longer your [COURT_POSITION_TYPE.GetNameNoTooltip]" + msg_court_position_invalidated_and_replaced_employer: "[COURT_POSITION_TYPE.GetNameNoTooltip] Replaced" + msg_court_position_invalidated_and_replaced_employer_desc: "[LEFT_CHARACTER.GetShortUIName] is no longer your [COURT_POSITION_TYPE.GetNameNoTooltip]. [LEFT_CHARACTER.GetSheHe|U] was replaced by [RIGHT_CHARACTER.GetShortUIName] (Aptitude: #glow_color:{0,0,0,1} [RIGHT_CHARACTER.GetHeldCourtPositionByType( COURT_POSITION_TYPE.Self ).GetAptitudeText]#!)" + + msg_becomes_obese:1 "Became Obese" + msg_becomes_obese_desc:0 "You have become [GetModifier( 'obese_modifier' ).GetNameWithTooltip]" + msg_becomes_malnourished:0 "Became Malnourished" + msg_becomes_malnourished_desc:0 "You have become [GetModifier( 'malnourished_modifier' ).GetNameWithTooltip]" + msg_stops_being_obese:1 "No Longer Obese" + msg_stops_being_obese_desc:0 "You are no longer [GetModifier( 'obese_modifier' ).GetNameWithTooltip]" + msg_stops_being_malnourished:0 "No Longer Malnourished" + msg_stops_being_malnourished_desc:0 "You are no longer [GetModifier( 'malnourished_modifier' ).GetNameWithTooltip]" + + msg_event_timeout:0 "Event timed out: $EVENT_NAME$" + msg_event_timeout_desc:0 "$EVENT_TIMEOUT_EFFECTS$" + msg_event_timeout_tt:0 "$EVENT_TIMEOUT_EFFECTS$" + msg_letter_event_timeout:0 "Event from [CHARACTER.GetShortUIName] timed out" + msg_letter_event_timeout_desc:0 "$EVENT_TIMEOUT_EFFECTS$" + msg_letter_event_timeout_tt:0 "$EVENT_TIMEOUT_EFFECTS$" + msg_court_amenity_setting_invalidated:0 "Court Amenity setting invalidated" + msg_court_amenity_setting_invalidated_desc:0 "Court Amenity setting $INVALID_SETTING$ was invalidated and has been replaced with $DEFAULT_SETTING$." + + msg_catalyst_triggered:1 "$STRUGGLE_NAME$: $game_concept_struggle_catalyst_catalyst$ Triggered" + msg_catalyst_triggered_desc:2 "A [struggle_catalyst|E] has been triggered by [CHARACTER.GetTitledFirstName]: $CATALYST_INFO$\n\nProgress towards $STRUGGLE_PHASE$ [struggle_phase_phase|E]: $CATALYST_VALUE|+=$" + msg_catalyst_triggered_tt:1 "$msg_catalyst_triggered_desc$" + msg_catalyst_triggered_no_character:0 "$msg_catalyst_triggered$" + msg_catalyst_triggered_no_character_desc:0 "A [struggle_catalyst|E] has been triggered: $CATALYST_INFO$\n\nProgress towards $STRUGGLE_PHASE$ [struggle_phase_phase|E]: $CATALYST_VALUE|+=$" + msg_catalyst_triggered_no_character_tt:0 "$msg_catalyst_triggered_no_character_desc$" + msg_player_character_changed:0 "$PLAYER_CHANGED_CHARACTER_TITLE_SWITCH$" + msg_player_character_changed_desc:0 "$PLAYER_CHANGED_CHARACTER_TEXT_SWITCH$" + msg_player_character_changed_tt:0 "$msg_player_character_changed_desc$" + msg_player_new_character:0 "$PLAYER_CHANGED_CHARACTER_TITLE_JOIN$" + msg_player_new_character_desc:0 "$PLAYER_CHANGED_CHARACTER_TEXT_JOIN$" + msg_player_new_character_tt:0 "$msg_player_new_character_desc$" + msg_player_new_observer:0 "$PLAYER_CHANGED_CHARACTER_TITLE_OBSERVER$" + msg_player_new_observer_desc:0 "$PLAYER_CHANGED_CHARACTER_TEXT_OBSERVER$" + msg_player_new_observer_tt:0 "$msg_player_new_observer_desc$" + + msg_struggle_phase_end:1 "$STRUGGLE_PHASE$ Phase Is In Transition" + msg_struggle_phase_end_desc:0 "@$STRUGGLE_PHASE_ICON$! $STRUGGLE_PHASE$ is transitioning into @$STRUGGLE_PHASE_ICON_NEXT$! $STRUGGLE_PHASE_NEXT$.\n\n $STRUGGLE_PHASE_NEXT$ will start in $DAYS_UNTIL_TRANSITION$ days." + msg_struggle_phase_end_tt:2 "$msg_struggle_phase_transitioned_tt$" + msg_struggle_phase_transitioned:1 "Phase Transitioned" + msg_struggle_phase_transitioned_desc:0 "The $STRUGGLE_NAME$ [struggle|E] has transitioned to the @$STRUGGLE_PHASE_ICON$! $STRUGGLE_PHASE$ [struggle_phase_phase|E]." + msg_struggle_phase_transitioned_tt:0 "$msg_struggle_phase_transitioned_desc$" + + msg_set_relation_friend_title:1 "@friend_icon! Made a Friend" + msg_set_relation_friend_desc:0 "[GetRelation( 'friend' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + msg_set_relation_best_friend_title:1 "@best_friend_icon! Became Best Friends" + msg_set_relation_best_friend_desc:0 "[GetRelation( 'best_friend' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + + msg_set_relation_rival_title:1 "@rival_icon! Gained a Rival" + msg_set_relation_rival_desc:0 "[GetRelation( 'rival' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + msg_set_relation_nemesis_title:1 "@nemesis_icon! Gained Nemesis" + msg_set_relation_nemesis_desc:0 "[GetRelation( 'nemesis' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + msg_set_relation_grudge_title: "@grudge_icon! Started Holding a Grudge" + msg_set_relation_grudge_desc: "[GetRelation( 'grudge' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + + msg_set_relation_lover_title:1 "@lover_icon! Gained a Lover" + msg_set_relation_lover_desc:0 "[GetRelation( 'lover' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + msg_set_relation_soulmate_title:1 "@soulmate_icon! Found Soulmate" + msg_set_relation_soulmate_desc:0 "[GetRelation( 'soulmate' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + + msg_set_relation_blood_brother_title: "@blood_brother_icon! Became Blood Brothers" + msg_set_relation_blood_brother_desc: "[GetRelation( 'blood_brother' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + + msg_set_relation_disciple_title:1 "Became Disciple" + msg_set_relation_disciple_desc:0 "[GetRelation( 'disciple' ).GetReasonFor( LEFT_CHARACTER.Self, RIGHT_CHARACTER.Self )]" + msg_set_relation_elder_title:1 "Became Elder" + msg_set_relation_elder_desc:0 "You will now support each other." + + msg_house_unity_change_stage: "House Unity Level Changed" + msg_house_unity_change_stage_desc: "Your [house_unity|E] has changed Level to $HOUSE_UNITY_STAGE_NAME|U$" + msg_house_unity_change_stage_tt: "$msg_house_unity_change_stage_desc$" + + + msg_start_diarchy_title:0 "[LEFT_CHARACTER.GetDiarchyTypeNameNoTooltip] Begins" + msg_start_diarchy_effect:0 "I began [sharing_power|E] in [LEFT_CHARACTER.GetDiarchy.GetDiarch.Custom('GetDiarchyArticle')] [LEFT_CHARACTER.GetDiarchyTypeName] with my [LEFT_CHARACTER.Custom2('RelationToMeShort', RIGHT_CHARACTER.Self)], [RIGHT_CHARACTER.GetShortUIName]" + msg_inherit_diarchy_title:0 "[LEFT_CHARACTER.GetDiarchy.GetDiarch.Custom('GetDiarchyArticle')|U] [LEFT_CHARACTER.GetDiarchyTypeNameNoTooltip] Inherited" + on_entered_diarchy.notification.vassal.t:0 "Liege Entered [ROOT.Char.GetDiarchyTypeNameNoTooltip]" + on_entered_diarchy.notification.vassal.t.higher_liege:0 "Higher Liege Entered [ROOT.Char.GetDiarchyTypeNameNoTooltip]" + on_entered_diarchy.notification.vassal.desc:1 "[ROOT.Char.GetShortUIName|U] is now [sharing_power|E] in [ROOT.Char.GetDiarchy.GetDiarch.Custom('GetDiarchyArticle')] [ROOT.Char.GetDiarchyTypeName] with [ROOT.Char.GetHerHisMy] [ROOT.Char.Custom2('RelationToMeShort', ROOT.Char.GetDiarchy.GetDiarch.Self)], [ROOT.Char.GetDiarchy.GetDiarch.GetShortUIName]" + on_entered_diarchy.notification.vassal.desc.outro.child:0 "due to being a [child|E]" + on_entered_diarchy.notification.vassal.desc.outro.incapable:0 "due to being [GetTrait('incapable').GetName(GetNullCharacter)]" + on_entered_diarchy.notification.vassal.desc.outro.imprisonment:0 "due to being [imprisoned|E] abroad" + on_entered_diarchy.notification.vassal.desc.outro.travel:0 "due to [traveling|E] abroad" + + msg_end_diarchy_title:0 "$game_concept_diarchy$ Ended" + msg_end_diarchy_effect:0 "I'm no longer [sharing_power|E] with my [LEFT_CHARACTER.Custom2('RelationToMeShort', RIGHT_CHARACTER.Self)], [RIGHT_CHARACTER.GetShortUIName]" + on_left_diarchy.notification.vassal.t:0 "Liege's $game_concept_diarchy$ Ended" + on_left_diarchy.notification.vassal.desc:0 "[ROOT.Char.GetShortUIName|U] is no longer [sharing_power|E] with [ROOT.Char.GetHerHisMy] [ROOT.Char.Custom2('RelationToMeShort', SCOPE.sC('old_diarch'))], [old_diarch.GetShortUIName]" + + msg_change_diarchy_type_title:0 "My $game_concept_diarchy$ Type Changed" + msg_change_diarchy_type_effect:0 "My $OLD_TYPE$ changed into $NEW_TYPE$" + + on_diarch_change.notification.liege.boilerplate.t:1 "My [liege.GetDiarchTitle] has Changed" + on_diarch_change.notification.vassal.boilerplate.t:1 "Your Liege's [liege.GetDiarchTitle] has Changed" + on_diarch_change.notification.liege.death.t:0 "$on_diarch_change.notification.liege.boilerplate.t$" + on_diarch_change.notification.liege.death.desc:1 "[old_diarch.GetShortUINamePossessive|U] recent [character_death_death|E] leaves [diarch.GetShortUIName] as your new [liege.GetDiarchTitle]." + on_diarch_change.notification.vassal.death.t:0 "$on_diarch_change.notification.vassal.boilerplate.t$" + on_diarch_change.notification.vassal.death.desc:1 "[old_diarch.GetShortUINamePossessive|U] recent [character_death_death|E] has left [diarch.GetShortUIName] as the next [liege.GetDiarchTitle] of [liege.GetPrimaryTitle.GetName]." + on_diarch_change.notification.liege.deposition.t:0 "$on_diarch_change.notification.liege.boilerplate.t$" + on_diarch_change.notification.liege.deposition.desc:1 "[old_diarch.GetShortUIName|U] has been forcibly deposed, leaving [diarch.GetShortUIName] as your new [liege.GetDiarchTitle]." + on_diarch_change.notification.vassal.deposition.t:0 "$on_diarch_change.notification.vassal.boilerplate.t$" + on_diarch_change.notification.vassal.deposition.desc:1 "[old_diarch.GetShortUIName|U] [Select_CString( old_diarch.IsLocalPlayer, 'have', 'has' )] been forcibly deposed, leaving [diarch.GetShortUIName] as the next [liege.GetDiarchTitle] of [liege.GetPrimaryTitle.GetName]." + on_diarch_change.notification.liege.invalidation.t:0 "$on_diarch_change.notification.liege.boilerplate.t$" + on_diarch_change.notification.liege.invalidation.desc:1 "[old_diarch.GetShortUIName|U] is no longer valid to continue [old_diarch.GetHerHis] duties, leaving [diarch.GetShortUIName] as your new [liege.GetDiarchTitle]." + on_diarch_change.notification.vassal.invalidation.t:0 "$on_diarch_change.notification.vassal.boilerplate.t$" + on_diarch_change.notification.vassal.invalidation.desc:1 "[old_diarch.GetShortUIName|U] [Select_CString( old_diarch.IsLocalPlayer, 'are', 'is' )] no longer valid to continue [CharMyHerHis(old_diarch)] duties, leaving [diarch.GetShortUIName] as the next [liege.GetDiarchTitle] of [liege.GetPrimaryTitle.GetName]." + on_diarch_change.notification.liege.inheritance.t:0 "$on_diarch_change.notification.liege.boilerplate.t$" + on_diarch_change.notification.liege.inheritance.desc:0 "I inherited a bigger realm, so [diarch.GetShortUIName] is now my new [liege.GetDiarchTitle]" + on_diarch_change.notification.vassal.inheritance.t:0 "$on_diarch_change.notification.vassal.boilerplate.t$" + on_diarch_change.notification.vassal.inheritance.desc:0 "Due to inheritance I am now [liege.GetDiarchTitle] to [liege.GetShortUIName]" + on_diarch_change.notification.liege.fallback.t:0 "$on_diarch_change.notification.liege.boilerplate.t$" + on_diarch_change.notification.liege.fallback.desc:1 "[old_diarch.GetShortUIName|U] is replaced by [diarch.GetShortUIName] as your new [liege.GetDiarchTitle]." + on_diarch_change.notification.vassal.fallback.t:0 "$on_diarch_change.notification.vassal.boilerplate.t$" + on_diarch_change.notification.vassal.fallback.desc:1 "[old_diarch.GetShortUIName|U] [Select_CString( old_diarch.IsLocalPlayer, 'are', 'is' )] replaced by [diarch.GetShortUIName] as your liege's new [liege.GetDiarchTitle]." + msg_diarchy_more_power_title:0 "[LEFT_CHARACTER.GetLiege.GetDiarchTitle] is now more powerful" + msg_diarchy_more_power_effect:0 "[scales_of_power|E] swing has reached a new level and more [diarch_powers|E] are available to the [LEFT_CHARACTER.GetLiege.GetDiarchTitle]" + msg_diarchy_less_power_title:0 "[LEFT_CHARACTER.GetLiege.GetDiarchTitle] is now less powerful" + msg_diarchy_less_power_effect:1 "[scales_of_power|E] swing has dropped to a lower level and the [LEFT_CHARACTER.GetLiege.GetDiarchTitle] has fewer [diarch_powers|E]" + grand_wedding_cancelled_by_regency_title:0 "Grand Wedding Canceled" + grand_wedding_cancelled_by_regency_desc:0 "[diarch.GetTitledFirstName] became [diarch.GetLiege.GetTitledFirstNamePossessive] [regent|E] and can no longer attend [diarch.GetHerHis] [GetActivityType('activity_wedding').GetName] with [betrothed.GetTitledFirstName]" + msg_legend_promoter_join: "Legend Promoter Joins" + msg_legend_promoter_join_desc: "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )] [LEFT_CHARACTER.GetUINameNoTooltip] has started [Concept( 'promoted_legend', 'Promoting' )|E] your [legend|E], [GetPlayer.GetPromotedLegend.GetName]." + msg_legend_promoter_leave: "Legend Promoter Leaves" + msg_legend_promoter_leave_desc: "Your [GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self )] [LEFT_CHARACTER.GetUINameNoTooltip] has stopped [Concept( 'promoted_legend', 'Promoting' )|E] your [legend|E], [GetPlayer.GetPromotedLegend.GetName]." + msg_promoted_legend_unowned: "Promoted Legend Unowned" + msg_promoted_legend_unowned_desc: "Your [promoted_legend|E] [Legend.GetName] is no longer owned by anyone" + msg_promoted_legend_completed: "Promoted Legend Completed" + msg_promoted_legend_completed_desc: "Your [promoted_legend|E] [Legend.GetName] has been completed" + msg_legend_library_added: "Legend added to Library" + msg_legend_library_added_desc: "[Legend.GetName] was added to your [legend_library|E]." + message_consolidation_names: "#T Others#!\n[PlayerMessageItem.GetConsolidationNames]" + message_consolidation_others: "#tooltip:message_consolidation_names #L [Subtract_int32( PlayerMessageItem.GetConsolidationCount, '(int32)2' )|V] [Select_CString( GreaterThan_int32( PlayerMessageItem.GetConsolidationCount, '(int32)3' ), 'others', 'other' )] #!#!" + + msg_raid_completed_title: "Raided [RIGHT_TITLE.GetNameNoTierNoTooltip]" + msg_raid_completed_desc: "You [raided|E] the [RIGHT_TITLE.GetName] ([RIGHT_TITLE.GetHolder.GetShortUIName])" + msg_raid_lost_title: "[RIGHT_TITLE.GetNameNoTierNoTooltip] Raided" + msg_raid_lost_desc: "[LEFT_CHARACTER.GetUIName] has [raided|E] the [RIGHT_TITLE.GetName] #weak ([RIGHT_TITLE.GetHolder.GetTitledFirstName])#!" + msg_raid_intent_invalidated_title: "[raiding_army.GetRaidIntent.GetName] invalidated!" + msg_raid_intent_invalidated_desc: "[raiding_army.GetRaidIntent.GetName] was invalidated, as this intent is no longer available to [LEFT_CHARACTER.GetName]" + + msg_barter_completed_barterer_title: "Traded in [county.GetNameNoTierNoTooltip]" + msg_barter_completed_holder_title: "[barterer.GetPrimaryTitle.GetNameNoTierNoTooltip] Traded with You" + msg_barter_completed_barterer_desc: "You [traded|E] with [county.GetHolder.GetShortUIName]" + msg_barter_completed_holder_desc: "[barterer.GetShortUIName] [traded|E] with you in [barony.GetName]" + msg_barter_loot_delivered_title: "Loot Delivered" + msg_barter_loot_delivered_desc: "Your [trading|E] Caravan has returned with [loot|E]" + msg_barter_loot_lost_title: "Loot Lost" + msg_barter_loot_lost_desc: "Your [trading|E] Caravan lost [loot_i][barter_loot.GetValue]" + msg_barter_loot_won_title: "Loot Won" + msg_barter_loot_won_desc: "Your [army|E] claimed [loot_i][barter_loot.GetValue] from a [trading|E] Caravan" + msg_barter_aborted_title: "Trade Aborted" + msg_barter_aborted_desc: "[trade|E] aborted in [barony.GetName] due to insufficient [trade_goods|E]" + + msg_great_project_planned_title: "[GreatProject.GetNameNoTooltip] is Being Planned" + msg_great_project_planned_desc: "[GreatProject.GetName] is being planned in [GreatProject.GetLocation.GetName].\nIt needs [GreatProject.GetRequiredContributionCount|V] [great_project_contributions|E] to start." + msg_great_project_started_title: "[GreatProject.GetNameNoTooltip] Started" + msg_great_project_started_desc: "[GreatProject.GetName] got enough [great_project_contributions|E] to start progress.\nIt will be completed in [GreatProject.GetConstructionEndDate.GetTimeToDate|V]." + msg_great_project_aborted_title: "[GreatProject.GetNameNoTooltip] was Abandoned" + msg_great_project_aborted_desc: "The [GreatProject.GetType.GetName] [great_project|E] based in [GreatProject.GetLocation.GetName] is no longer available for contributions." + msg_great_project_completed_title: "[GreatProject.GetNameNoTooltip] Completed" + msg_great_project_completed_desc: "[GreatProject.GetName] has been successfully completed in [GreatProject.GetOwner.GetCapitalLocation.GetName]" + + msg_known_pregnancy: "[LEFT_CHARACTER.GetTitledFirstNameNoTooltip] Falls Pregnant" + + msg_government_changed: "Government Changed" + + msg_poem_sold_title: "Muwashshah Poem Sold" + msg_poem_kept_title: "Muwashshah Poem Kept" + msg_poem_kept_message: "[double_moon_book.GetName] receives a random Modifier" + msg_poem_distributed_title: "Muwashshah Poem Distributed" + + msg_contract_completion_reward: "[GetPlayer.Custom('GetContractOrIssue')] Completed" + msg_contract_completion_reward_desc: "$REWARD_TYPE$" + + msg_governor_candidate_promoted_leading: "[GetPlayer.Custom2('RelationToMeShort', LEFT_CHARACTER.Self)|U] [CharAreIs(LEFT_CHARACTER)] in Line for [TITLE.GetNameNoTierNoTooltip|V]" + msg_governor_candidate_promoted_leading_desc: "[LEFT_CHARACTER.GetShortUIName|U] passed [RIGHT_CHARACTER.GetShortUIName] as the next-in-line for the [TITLE.GetName]" + msg_governor_candidate_demoted_leading: "[GetPlayer.Custom2('RelationToMeShort', RIGHT_CHARACTER.Self)|U] [CharAreIs(RIGHT_CHARACTER)] Losing [TITLE.GetNameNoTierNoTooltip|V]" + msg_governor_candidate_demoted_leading_desc: "[LEFT_CHARACTER.GetShortUIName|U] [CharHaveHas(LEFT_CHARACTER)] passed [RIGHT_CHARACTER.GetShortUIName] as the next-in-line for the [TITLE.GetName]" + msg_provincial_army_reassigned: "[TITLE.GetAdjectiveNoTooltip|V] Army Reassigned" + msg_provincial_army_reassigned_desc: "[LEFT_CHARACTER.GetShortUINameNotMe] has reassigned the [provincial|E] [army|E] of [TITLE.GetNameNoTier] to the [RIGHT_TITLE.GetName]" + + msg_admin_title_gained_house.tt: "House Member Gains Appointment" + msg_admin_title_gained_investor.tt: "Supported Candidate Gains Appointment" + msg_admin_title_gained_foe.tt: "Opposed Candidate Gains Appointment" + msg_admin_title_gained.desc: "Your [GetPlayer.Custom2('RelationToMeShort', SCOPE.sC('title_gainer'))], [title_gainer.GetShortUIName|U], now governs the [title.GetName]" + + msg_admin_title_lost_house.tt: "House Member Lost Appointment" + msg_admin_title_lost_investor.tt: "Supported Holder Lost Appointment" + msg_admin_title_lost_foe.tt: "Opposed Holder Lost Appointment" + msg_admin_title_lost.desc: "Your [GetPlayer.Custom2('RelationToMeShort', SCOPE.sC('title_loser'))], [title_loser.GetShortUIName|U], no longer governs the [title.GetName]" + + msg_estate_damaged.title: "$game_concept_estate$ Damaged" + msg_estate_damaged.desc: "Your [estate|E] was damaged and one or more [estate_buildings|E] lost a level or was destroyed.\n\nThe [estate|E] was relocated to [new_estate_location.GetName]." + + msg_admin_provincial_army_request_accepted.title: "Request for Troops Accepted" + msg_admin_provincial_army_request_denied.title: "Request for Troops Denied" + msg_admin_provincial_army_request_denied.desc: "[recipient.GetShortUIName|U] denied your request for troops" + + msg_courtier_child_of_age_title: "Courtier Comes of Age" + msg_dynasty_child_of_age_title: "Dynastic Child Comes of Age" + msg_dynasty_child_of_age_desc: "Your [relative.Custom2('RelationToMeShort', SCOPE.sC('educated_child'))], [educated_child.GetShortUIName|U], has come of age in your [relative.Custom('GetCourt')|l]" + + #msg_mandala_temple_completed_01.title: "$building_type_mandala_capital_01$ Completed" + #msg_mandala_temple_completed_02up.title: "$building_type_mandala_capital_01$ Expanded" + #msg_mandala_temple_completed_01.desc: "The $building_type_mandala_capital_01$ [great_project|E] in [province.GetName] has been completed" + #msg_mandala_temple_completed_02up.desc: "The $building_type_mandala_capital_01$ [great_project|E] in [province.GetName] has been expanded" + + msg_appointed_to_title: "Appointed to Title" + msg_appointed_to_title_desc: "As the top Candidate, you have been appointed as [governor|E] of [RIGHT_TITLE.GetDefinitiveName]" + + msg_tributary_invalidated_title: "Tributary Invalidated" + msg_tributary_invalidated_desc: "The tributary contract between [LEFT_CHARACTER.GetName] and [RIGHT_CHARACTER.GetName] is no longer valid." diff --git a/localization/english/replace/militaryview_l_english.yml b/localization/english/replace/militaryview_l_english.yml new file mode 100644 index 00000000..24b41beb --- /dev/null +++ b/localization/english/replace/militaryview_l_english.yml @@ -0,0 +1,195 @@ +l_english: + MILITARY:0 "Military" + CREATE_BANNER:0 "Create Rally Point" + SOLDIERS_INFO:0 "$CURRENT$/$MAX$" + DISBAND_ALL_ARMIES:0 "#T Disband all [armies|E] #!" + DISBAND_ALL_ARMIES_ARMIES_INFO:0 "$DISBANDED$ Armies will be disbanded" + DISBAND_ALL_ARMIES_GATHERING_ARMIES_INFO:1 "$DISBANDED$ of $TOTAL$ gathering Armies will be disbanded" + DISBAND_NO_ARMIES:0 "$DISBAND_ALL_ARMIES$\n@warning_icon! #X No armies can be disbanded#!" + DISBAND_NO_DISBANDABLE_ARMIES:0 "@warning_icon! #X No armies can be disbanded#!" + DISBAND_ALL_CONFIRM_TITLE:0 "Disband all Armies" + DISBAND_ALL_CONFIRM:0 "All raised and gathering [armies|E] will be disbanded." + DISBAND_ALL_CONFIRM_ACCEPT:0 "Disband All" + LEVIES_LABEL:1 "[levies|E]" + LEVIES_MAX:0 "$RAISE_MAX|V$" + LEVIES_NOT_MAX:0 "$CURRENT|V$/$RAISE_MAX|V$" + LEVIES_TOOLTIP:0 "#T Unraised [levies|E]: $CURRENT|0V$/$RAISE_MAX|0V$#!" + LEVIES_AFFECTED_BY_COUNTIES_HEADER:0 "#T The number of [rally_point|E] [levies|E] is lowered#!" + LEVIES_AFFECTED_BY_COUNTY_CONTROL:0 "@warning_icon! #X The [rally_point|E] has counties with lowered [county_control]#!" + FROM_DOMAIN:0 "From [domain|E]" + FROM_VASSALS:0 "From [vassals|E]" + FROM_BISHOPS:0 "From [realm_priest|E]" + BANNER_MEN_AT_ARMS_LABEL:0 "[men_at_arms|E]:" + ADVENTURER_CAP_HINT: "Upgrade your [camp|E] to increase the Limit" + BANNER_MEN_AT_ARMS:0 "$UNRAISED|0V$" + BANNER_MEN_AT_ARMS_NOT_MAX:0 "$UNRAISED|0$/$RAISE_MAX|0$" + BANNER_MEN_AT_ARMS_TOOLTIP:0 "#T Unraised [men_at_arms|E]: $UNRAISED|0V$/$RAISE_MAX|0V$#!" + BANNER_KNIGHTS_LABEL:1 "$knight_culture_player_plural$:" + BANNER_TROOPS_TAB:0 "Your Armies" + BANNER_KNIGHTS_TAB:1 "$knight_culture_player_plural_no_tooltip$" + RAISE_BANNER_TT_TITLE:0 "#T Raise Army at [rally_point|E]#!" + RAISE_BANNER_TT_NO_SOLDIERS:0 "@warning_icon! #X No [soldiers|E] to raise#!" + RAISE_BANNER_TT_LEVIES:0 "$UNRAISED|0V$ out of $RAISE_MAX|0V$ [levies|E] can be raised" + RAISE_BANNER_TT_MAA:0 "$UNRAISED|0V$ out of $RAISE_MAX|0V$ [men_at_arms|E] can be raised" + MEN_AT_ARMS_CURRENT_MAX_TOOLTIP:1 "[MEN_AT_ARMS_TYPE.GetName]: $CURRENT|0V$/$MAX|0V$." + CREATE_MAA_BUTTON_COST:0 "Create ($COST$)" + CREATE_MAA_COST:0 "Creation Cost: $COST$" + NAMED_MAINTENANCE_MAA:0 "$NAME$: $COST$" + MAINTENANCE_MAA:1 "$MAA_UNRAISED_MAINTENANCE_TEXT$: $VALUE$/month" + REINFORCEMENT_MAA:1 "$MAA_FULL_MAINTENANCE_TEXT$: $VALUE$/month" + STACK_SIZE_MAA:0 "Regiment size: $VALUE|V$" + ADVENTURER_MAINTENANCE_INFO: "[SelectLocalization( GetPlayer.GetGovernment.HasGovernmentFlag( 'government_is_nomadic' ), 'ADVENTURER_MAINTENANCE_INFO_NOMADIC', 'ADVENTURER_MAINTENANCE_INFO_ADVENTURER' )]" + ADVENTURER_MAINTENANCE_INFO_ADVENTURER: "[adventurers|E] can only reinforce [men_at_arms|E] by using #V $refill_maa_interaction$#!, #V $reinforce_soldiers_interaction$#!, or via [adventurer_siege_replenishment|E] during [war|E]" + ADVENTURER_MAINTENANCE_INFO_NOMADIC: "[nomads|E] can only reinforce their [men_at_arms|E] by using #V $refill_maa_interaction$#! and paying a cost of [herd|E] or [gold|E]." + CONDITIONAL_MAINTENANCE_INFO: "Your [government|E] can $conditional_maa_refill_rule$" + MONTHLY_MAINTENANCE_LABEL:0 "Monthly Maintenance:" + MONTHLY_MAX_MAINTENANCE_LABEL:0 "#weak Max:#!" + MONTHLY_MAX_MAINTENANCE_TT:0 "#T Maximum Military Maintenance#!\nThis is the predicted military expense when you have all forces raised and at full strength.\n@warning_icon! #X Having [armies|E] on [fleets|E] can make actual maintenance higher.#!\n\nWith your current [gold|E] and [income|E], you can have all of your troops raised for [MilitaryView.GetAllRaisedTimeGold] before going bankrupt." + MONTHLY_MAX_MAINTENANCE_VIEW: "([MilitaryView.GetAllRaisedTimeGold])" + MONTHLY_MAX_MAINTENANCE_TREASURY_VIEW: "([MilitaryView.GetAllRaisedTimeTreasury])" + MONTHLY_REINFORCEMENT_COST_LABEL:1 "Monthly Reinforcement" + MV_MORE_THAN_FIVE_YEARS:1 "> #V 5 years#!" + MEN_AT_ARMS_LABEL:0 "Men-at-Arms:" + TOTAL_MAINTENANCE_COST:0 "$VALUE$" + TOTAL_REINFORCEMENT_COST_MAA:0 "$VALUE|1$" + ADD_MEN_AT_ARMS_LABEL:0 "Create Men-at-Arms Regiment" + MAA_COUNT_AND_CAP:0 "$CURRENT|V$/$MAX|V$" + MAA_COUNT_AND_CAP_ABOVE_CAP:0 "$CURRENT|N$/$MAX|V$" + MAA_COUNT_ABOVE_CAP:0 "$VALUE|V$ [men_at_arms|E] over cap limit" + HIRE_TROOPS:0 "Hire Soldiers" + MV_SHOW_MAA:0 "Show [men_at_arms|E]" + MV_UNRAISED_MAA:1 "Unraised" + TT_IMPERIAL_ARMIES:0 "#T Army of [Title.GetNameNoTierNoTooltip] #!\n#I Click to view details#!" + TT_MAINTENANCE_TITLE:0 "#T Maintenance: $VALUE$/month#!" + TT_MAINTENANCE_RAISED_ARMIES:1 "Raised armies: @gold_icon!$VALUE|1$/month" + TT_MAINTENANCE_MAA:1 "[men_at_arms|E]: $VALUE$/month" + TT_MAINTENANCE_NO:0 "#weak No maintenance costs#!" + TT_REINFORCING_MAA_YES_TITLE:0 "#T Reinforcing [men_at_arms|E]#!" + TT_REINFORCING_MAA_FULL_STRENGTH:0 "[men_at_arms|E] at full strength" + TT_REINFORCING_MAA_FULL_STRENGTH_TIME:0 "$TIME|V$ months to reach full strength" + TT_REINFORCING_MAA_NOT_TITLE:0 "#T Not reinforcing [men_at_arms|E]#!" + TT_REINFORCING_MAA_CLICK_STOP:0 "\n#I Click to stop reinforcing#!" + TT_REINFORCING_MAA_CLICK_START:0 "\n#I Click to start reinforcing#!" + MAINTENANCE_COST_PART:0 "Maintenance: $VALUE$/month" + REINFORCEMENT_COST_PART:0 "Reinforcement: $VALUE$/month" + TOTAL_MAA_COST:0 "[Regiment.GetTotalCostString]" + TOTAL_MAA_COST_TOOLTIP:0 "#T Maintenance: [Regiment.GetTotalCostString]/month#!#D 2 decimal pls#!\n#D Reinforcing#!" + TT_CAP_TITLE:0 "#T [men_at_arms|E] Regiment Limit: $MAX|V$#!" + TT_CAP_ABOVE:0 "@warning_icon! #X Above limit: Paying $VALUE|-%0$ extra!#!" + TT_CAP_REGIMENT_COUNT:0 "Regiments: $VALUE|V$" + TT_CAP_REGIMENT_CURRENT:0 "Current: $CURRENT|V$" + TT_CAP_REGIMENT_CAP:0 "Limit" + TT_CAP_TIER_REASON:0 "You are a $TIER$" + TT_RAISE_ALL_MAA_INFO:1 "[men_at_arms|E], [special_troops|E], [mercenaries|E], and [holy_orders|E] will be raised at the [rally_point|E] closest to your [realm_capital|E]." + TT_RAISE_ALL:2 "#T Raise all Armies#!\n[levies|E] will be raised at their closest [rally_point|E].\n\n$TT_RAISE_ALL_MAA_INFO$" + TT_RAISE_ALL_RAIDERS: "#T Raise all Men as Raiders#!\nRaise all Men, and they will equip themselves to be [raiders|E] " + TT_RAISE_ALL_BARTERERS: "#T Raise all Men as Traders#!\nRaise all Men, and they will equip themselves to be [barterers|E] " + TT_RAISE_ALL_MEN_AT_ARMS:0 "#T Raise all Men-at-Arms#!\n[men_at_arms|E] will be raised at the [rally_point|E] closest to your [realm_capital|E]." + TT_RAISE_ALL_LEVIES:0 "Unraised [levies|E]: $UNRAISED|0V$/$RAISE_MAX|0V$" + TT_RAISE_ALL_MAA:0 "Unraised [men_at_arms|E]: $UNRAISED|0V$/$RAISE_MAX|0V$" + TT_HIRE_TROOPS:0 "#T Hire Soldiers#!\nShow Soldiers available for hire" + TT_MAA_RAISED:0 "#T [men_at_arms|E] raised#!" + TT_MAA_UNRAISED:0 "#T [men_at_arms|E] unraised#!" + TT_MAA_ENTRY_BUTTON:0 "#T Manage [regiment|E]#!" + TT_CANT_RAISE_AT_WAR:0 "@warning_icon! #X Cannot raise regiments while at peace!#!" + TT_MERCENARIES_HIREABLE_RULER:0 "#T [Character.GetShortUINameNoTooltip] #!\n#I Click to view details#!" + MEN_AT_ARMS_TYPE_NAME:1 "Type: #high [MenAtArmsType.GetBaseTypeName]#!" + MILITARY_VIEW_BANNERS:0 "[rally_points|E]" + MILITARY_VIEW_EVENT_TROOPS:0 "[special_troops|E]" + MILITARY_VIEW_EVENT_TROOPS_ASSOCIATED_WAR:0 "Will stand down when the [War.GetName] ends" + MILITARY_VIEW_EVENT_TROOPS_RAISE:0 "Raise" + MILITARY_VIEW_EVENT_TROOPS_RAISE_TT:0 "#T Raise [MilitaryViewEventTroop.GetName]\n#!A new [army|E] with [soldier_i][MilitaryViewEventTroop.GetNumberOfRaisableSoldiers|V] [soldiers|E] will be raised in [MilitaryViewEventTroop.GetRaiseProvinceName|V]" + MILITARY_VIEW_EVENT_TROOPS_NOT_INHERITABLE:0 "Will stand down on [succession|E]" + MILITARY_VIEW_EVENT_TROOPS_INHERITABLE:0 "Will be inherited on [succession|E]" + MILITARY_VIEW_HIRED_TROOPS:1 "[mercenaries|E] and [holy_orders|E]" + HIRED_TROOPS_STRENGTH:0 "Strength" + HIRED_TROOPS_REGIMENTS:0 "Regiments" + BD_LEVIES_MAINTENANCE:0 "[levies|E]" + BD_MAA_MAINTENANCE:0 "[men_at_arms|E]" + BD_ARMY_EMBARKED:0 "@embarked_icon! Embarked" + BD_ARMY_RAID_DISCOUNT: "[raid|E] [army|E]" + BD_ARMY_BARTER_DISCOUNT: "[barter|E] Caravan" + MV_EMBARKED_TT:0 "#T [embarked|E] [armies|E]\n#!Extra maintenance is paid due to one or more armies being Embarked." + BD_ARMY_MAINTENANCE_NAME:0 "[ARMY.GetName] [Select_CString(ARMY.IsEmbarked,'@embarked_icon!','')]" + BD_UNRAISED_MAA_MAINTENANCE:0 "Unraised [men_at_arms|E]" + BD_UNRAISED_MAA_MAINTENANCE_BASE:0 "Unraised [men_at_arms|E]" + BD_UNCONTROLLED_MAA_MAINTENANCE:0 "Reassigned [men_at_arms|E]" + BD_UNCONTROLLED_MAA_MAINTENANCE_BASE:0 "Reassigned [men_at_arms|E]" + BD_RAISED_MAA_MAINTENANCE:0 "Raised [men_at_arms|E]" + BD_RAISED_MAA_MAINTENANCE_BASE:0 "Raised [men_at_arms|E]" + BD_MAA_MAINTENANCE_BASE:0 "Maintenance" + MV_RALLY_POINTS:0 "[rally_points|E]:" + MV_ADD_RALLY_POINT:0 "#I Click to add a new [rally_point|E]#!" + MV_RALLY_POINT_NUMBER_INFO:0 "$CURRENT|V$/$MAX|V$" + MV_REMOVE_RALLY_POINT:1 "#T Remove Rally Point#!\nThe [armies|E] can be raised at the next closest [rally_point|E]." + MV_TOTAL_SOLDIERS:0 "Total Soldiers" + MV_UNRAISED_SOLDIERS:0 "Unraised Soldiers" + MV_KNIGHTS:1 "$knight_culture_player_plural$" + MV_KNIGHTS_AND_ACCOLADES:0 "$knight_culture_player_plural$ and [accolades|E]" + MV_MANAGE_KNIGHTS:1 "#low Click to Manage...#!" + MV_MERCENARIES:0 "Mercenaries" + MV_HOLY_ORDERS:0 "Holy Orders" + MV_LEVIES_TOOLTIP:1 "#T Show your [levies|E]#!" + MV_KNIGHTS_TOOLTIP:1 "#T Show and Manage your $knight_culture_player_plural$#!" + MV_LEVY_MAINTENANCE:0 "[gold_i][MilitaryView.GetLevyGoldExpense|1]" + MV_LEVY_MAINTENANCE_TOOLTIP:0 "#T Maintenance: [gold_i][MilitaryView.GetLevyGoldExpense|2]/month#!\n[MilitaryView.GetNumberOfRaisedLevies|0] [levies|E] raised" + MV_LEVY_MAINTENANCE_TREASURY: "[treasury_i][MilitaryView.GetLevyTreasuryExpense|1]" + MV_LEVY_MAINTENANCE_TREASURY_TOOLTIP: "#T Maintenance: [treasury_i][MilitaryView.GetLevyTreasuryExpense|2]/month#!\n[MilitaryView.GetNumberOfRaisedLevies|0] [levies|E] raised" + MV_LEVY_MAINTENANCE_BARTER_GOODS: "[barter_goods_i][MilitaryView.GetLevyBarterGoodsExpense|1]" + MV_LEVY_MAINTENANCE_BARTER_GOODS_TOOLTIP: "#T Maintenance: [barter_goods_i][MilitaryView.GetLevyBarterGoodsExpense|2]/month#!\n[MilitaryView.GetNumberOfRaisedLevies|0] [levies|E] raised" + KV_HEADER:1 "$knight_culture_player_plural_no_tooltip$" + KV_HEADER_ACCOLADES:0 "$knight_culture_player_plural_no_tooltip$ and Accolades" + BREAKDOWN_LEVY_MAINTENANCE:0 "[levies|E]" + BREAKDOWN_MAA_MAINTENANCE:0 "[men_at_arms|E]" + MV_RALLY_POINT_TT:0 "#T [RallyPointItem.GetRallyPoint.GetName]\n#!\n$CLICK_TO_SELECT$" + MV_MEN_AT_ARMS_LABEL: "[men_at_arms|E]:" + MV_MEN_AT_ARMS_NONE:0 " None" + MV_REGIMENT_START_SIZE:2 "Will start with 5 Soldiers (and reinforce to [MenAtArmsType.GetStackSize])" + MV_REGIMENT_START_SIZE_ADVENTURER: "Will start with 5 Soldiers (out of [MenAtArmsType.GetStackSize])" + MV_CREATE_REGIMENT_MAX_SIZE_TT:1 "#T Soldiers per Size: [MenAtArmsType.GetStackSize]\n#!At Size 1, this [regiment|E] will have [MenAtArmsType.GetStackSize] [soldiers|E]. Each time you increase the Size of the Regiment, [MenAtArmsType.GetStackSize] more Soldiers will be added." + MV_CREATE_REGIMENT_SIZE:1 "[MenAtArmsType.GetStackSize] (Size 1)" + MV_KNIGHTS_TT:0 "#T $knight_culture_player_plural$\n#!#I Click to [Select_CString( MilitaryView.AreKnightsShown, 'hide the list', 'show a list' )] of your available $knight_culture_player_plural$#!" + MV_LEVY_TT:0 "#T [levies|E]\n#!#I Click to [Select_CString( MilitaryView.AreLeviesShown, 'hide', 'show' )] details for your levies#!" + STRENGTH_COMPARISON_TOTAL_STRENGTH:0 "@soldier_icon! [GuiMilitaryStrength.GetTargetTotal|0]" + STRENGTH_COMPARISON_ALLIES:1 "[ally_i|E] [GuiMilitaryStrength.GetTargetAlliesCount]" + + MV_ARMIES_SELECTION_PERSONAL: "Your armies" + MV_ARMIES_SELECTION_IMPERIAL: "[GetPlayer.Custom('GetProvincialArmiesConceptNoTooltip')]" + MV_MERCENARIES_SELECTION_MERCENARIES: "Mercenaries" + MV_MERCENARIES_SELECTION_HIREABLE_RULERS: "Special Mercenaries" + MV_MERCENARIES_NO_HIREABLE_RULERS_IN_RANGE: "There are no hireable [adventurers|E] (or similar) within your [realm|e]" + MV_MERCENARIES_HIREABLE_RULER_STATUS: "[HiredTroopItem.GetHirableRulerStatus]" + MV_MERCENARIES_STATUS_AVAILABLE: "#I Available" + MV_MERCENARIES_STATUS_COMMANDED: "#I Commanded by you" + MV_RETURN_CONTROLLED: "Return Controlled Troops" + MV_RETURN_CONTROLLED_TT: "#T $MV_RETURN_CONTROLLED$#![AddLocalizationIf( Not( MilitaryView.CanReturnControlledMaA ), 'MV_RETURN_CONTROLLED_TT_NO_TROOPS' )]" + MV_RETURN_CONTROLLED_TT_NO_TROOPS: "\n@warning_icon! #X You are not commanding any additional [GetPlayer.Custom('GetProvincialArmiesConcept')]#!" + MV_RETURN_REASSIGNED: "Return Reassigned Troops" + MV_RETURN_REASSIGNED_TT: "#T $MV_RETURN_REASSIGNED$#![AddLocalizationIf( Not( MilitaryView.CanReturnReassignedMaA ), 'MV_RETURN_REASSIGNED_TT_NO_TROOPS' )]" + MV_RETURN_REASSIGNED_TT_NO_TROOPS: "\n@warning_icon! #X There are no [GetPlayer.Custom('GetProvincialArmiesConcept')] assigned to other [GetPlayer.Custom('GetProvincePluralConcept')]#!" + MV_ADMIN_ARMY_NAME: "[Title.GetNameNoTierNoTooltip]" + MV_ADMIN_ARMY_ARMIES_YOU_COMMAND: "Armies you command" + MV_ADMIN_ARMY_ARMIES_IN_OTHER_GOVERNORSHIPS: "Armies in other [GetPlayer.Custom('GetProvincePluralConceptNoTooltip')]" + MV_ADMIN_ARMY_ARMIES_REALM_STRENGTH: "Total Military Strength:" + MV_ADMIN_ARMY_ARMIES_REALM_STRENGTH_NUM: "$MAX$" + MV_ADMIN_ARMY_ARMIES_NAME: "[Title.GetNameNoTooltip]" + MV_ADMIN_ARMY_ARMIES_LOANED_LABEL: "#high Loaned: #!" + MV_ADMIN_ARMY_HIRE_DIRECTLY: "Armies you can hire directly" + MV_ADMIN_ARMY_ASK_EMPEROR: "Request additional #HIGH $game_concept_men_at_arms$#! from your [top_liege|E]" + MV_ADMIN_ARMY_NO_CONTROLLED_TITLES: "Not commanding any additional [GetPlayer.Custom('GetProvincialArmiesConcept')]" + MV_ADMIN_ARMY_NO_UNCONTROLLED_TITLES: "No available [title_men_at_arms|E] for you to control" + MV_NO_MAA_FOR_TITLE: "No [title_men_at_arms|E] for this #HIGH Title#!" + MV_NO_MAA_FOR_TITLE_YET: "No [title_men_at_arms|E] has been created for this #HIGH Title#!" + + NOMAD_RIDERS_LABEL: "[GetMaA('nomadic_riders').GetName]" + UPGRADE_HORDE_REGIMENT_LABEL: "Upgrade Horde Regiment" + UPGRADE_HORDE_TOOLTIP: "#T Upgrade a Horde [regiment|E]#!\n#weak You will pay [gold|E] to convert your [horde|E] into [men_at_arms|E]#!" + MV_REGIMENT_START_SIZE_NOMAD: "Will start at full strength ([MenAtArmsType.GetStackSize])" + + RECRUIT_FROM_SUBJECTS_LABEL: "Recruit from Subjects" + RECRUIT_FROM_SUBJECTS_TOOLTIP: "#T Recruit from Subjects#!\n#weak You will pay [gold|E] to recruit a type of [men_at_arms|E] that your [subject|E] has access to, but you don't#!" + RECRUIT_FROM_SUBJECTS_ICON: "@recruit_from_subjects_icon!" + + CELESTIAL_REQUEST_MILITARY_AID_NAME: "$celestial_request_military_aid_interaction$" + MY_PROVINCIAL_ARMIES_TITLE: "Your [GetPlayer.Custom( 'GetProvincialArmiesConcept' )]" + REALM_PROVINCIAL_ARMIES_TITLE: "All [GetPlayer.Custom( 'GetProvincialArmiesConcept' )]" diff --git a/localization/english/replace/modifiers/modifiers_l_english.yml b/localization/english/replace/modifiers/modifiers_l_english.yml index d61c49f9..19cb06d3 100644 --- a/localization/english/replace/modifiers/modifiers_l_english.yml +++ b/localization/english/replace/modifiers/modifiers_l_english.yml @@ -551,14 +551,14 @@ MOD_HAPPY_POWERFUL_VASSAL_PRESTIGE_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [prestige|E] [modifier_contribution|E]" MOD_HAPPY_POWERFUL_VASSAL_PIETY_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [piety|E] [modifier_base_contribution|E]" MOD_HAPPY_POWERFUL_VASSAL_PIETY_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [piety|E] [modifier_contribution|E]" - MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[vassal|E] [barter_goods|E] [modifier_base_contribution|E]" - MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[vassal|E] [barter_goods|E] [modifier_contribution|E]" - MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [barter_goods|E] [modifier_base_contribution|E]" - MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [barter_goods|E] [modifier_contribution|E]" - MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [barter_goods|E] [modifier_base_contribution|E]" - MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [barter_goods|E] [modifier_contribution|E]" - MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [barter_goods|E] [modifier_base_contribution|E]" - MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [barter_goods|E] [modifier_contribution|E]" + MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [trade_goods|E] [modifier_contribution|E]" republic_government_tax_contribution_add:1 "[republican|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" republic_government_tax_contribution_mult:1 "[republican|E] [vassal|E] [tax|E] [modifier_contribution|E]" meritocratic_government_tax_contribution_add: "[meritocratic|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" @@ -1408,8 +1408,8 @@ recently_looted_modifier:0 "Recently Looted" recently_looted_modifier_desc:0 "This [holding|E] has been recently looted by a [raid|E] or [siege|E] and cannot be looted until this modifier expires." - recently_bartered_modifier: "Recently Bartered" - recently_bartered_modifier_desc: "A party of [GetGovernment( 'wanua_government' ).GetName] sailors have recently [bartered|E] with this [holding|E] and it cannot be looted or bartered in until this modifier expires." + recently_bartered_modifier: "Recently Traded" + recently_bartered_modifier_desc: "A party of traders have recently [traded|E] with this [holding|E] and it cannot be looted or traded in until this modifier expires." shattered_defenses_modifier: "Shattered Defenses" shattered_defenses_modifier_desc: "This [holding|E] has recently had its defenses shattered by violent raiders." @@ -1646,22 +1646,22 @@ drylands_provisions_use_mult: "[GetTerrain( 'drylands' ).GetName] [provisions|E] Use" terraced_hills_provisions_use_mult: "[GetTerrain( 'terraced_hills' ).GetName] [provisions|E] Use" - plains_barter_goods_mult: "[GetTerrain( 'plains' ).GetName] [barter_goods|E]" - farmlands_barter_goods_mult: "[GetTerrain( 'farmlands' ).GetName] [barter_goods|E]" - hills_barter_goods_mult: "[GetTerrain( 'hills' ).GetName] [barter_goods|E]" - tells_barter_goods_mult: "[GetTerrain( 'tells' ).GetName] [barter_goods|E]" - mountains_barter_goods_mult: "[GetTerrain( 'mountains' ).GetName] [barter_goods|E]" - oasis_barter_goods_mult: "[GetTerrain( 'oasis' ).GetName] [barter_goods|E]" - jungle_barter_goods_mult: "[GetTerrain( 'jungle' ).GetName] [barter_goods|E]" - forest_barter_goods_mult: "[GetTerrain( 'forest' ).GetName] [barter_goods|E]" - taiga_barter_goods_mult: "[GetTerrain( 'taiga' ).GetName] [barter_goods|E]" - wetlands_barter_goods_mult: "[GetTerrain( 'wetlands' ).GetName] [barter_goods|E]" - steppe_barter_goods_mult: "[GetTerrain( 'steppe' ).GetName] [barter_goods|E]" - floodplains_barter_goods_mult: "[GetTerrain( 'floodplains' ).GetName] [barter_goods|E]" - desert_barter_goods_mult: "[GetTerrain( 'desert' ).GetName] [barter_goods|E]" - desert_mountains_barter_goods_mult: "[GetTerrain( 'desert_mountains' ).GetName] [barter_goods|E]" - drylands_barter_goods_mult: "[GetTerrain( 'drylands' ).GetName] [barter_goods|E]" - terraced_hills_barter_goods_mult: "[GetTerrain( 'terraced_hills' ).GetName] [barter_goods|E]" + plains_barter_goods_mult: "[GetTerrain( 'plains' ).GetName] [trade_goods|E]" + farmlands_barter_goods_mult: "[GetTerrain( 'farmlands' ).GetName] [trade_goods|E]" + hills_barter_goods_mult: "[GetTerrain( 'hills' ).GetName] [trade_goods|E]" + tells_barter_goods_mult: "[GetTerrain( 'tells' ).GetName] [trade_goods|E]" + mountains_barter_goods_mult: "[GetTerrain( 'mountains' ).GetName] [trade_goods|E]" + oasis_barter_goods_mult: "[GetTerrain( 'oasis' ).GetName] [trade_goods|E]" + jungle_barter_goods_mult: "[GetTerrain( 'jungle' ).GetName] [trade_goods|E]" + forest_barter_goods_mult: "[GetTerrain( 'forest' ).GetName] [trade_goods|E]" + taiga_barter_goods_mult: "[GetTerrain( 'taiga' ).GetName] [trade_goods|E]" + wetlands_barter_goods_mult: "[GetTerrain( 'wetlands' ).GetName] [trade_goods|E]" + steppe_barter_goods_mult: "[GetTerrain( 'steppe' ).GetName] [trade_goods|E]" + floodplains_barter_goods_mult: "[GetTerrain( 'floodplains' ).GetName] [trade_goods|E]" + desert_barter_goods_mult: "[GetTerrain( 'desert' ).GetName] [trade_goods|E]" + desert_mountains_barter_goods_mult: "[GetTerrain( 'desert_mountains' ).GetName] [trade_goods|E]" + drylands_barter_goods_mult: "[GetTerrain( 'drylands' ).GetName] [trade_goods|E]" + terraced_hills_barter_goods_mult: "[GetTerrain( 'terraced_hills' ).GetName] [trade_goods|E]" # BP3 black_sea_coast_region_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in the [GetGeographicalRegion('black_sea_coast_region').GetName] [region|E]" @@ -2049,29 +2049,29 @@ subject_salary_income_merit_hegemony_mult: "$subject_salary_income_merit_hegemony_add$" # Dynamic modifiers subject salary Barter Goods - subject_salary_expense_barter_goods_add: "[subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_add: "[subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_mult: "$subject_salary_expense_barter_goods_add$" - subject_salary_expense_barter_goods_county_add: "[county|E] [subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_county_add: "[county|E] [subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_county_mult: "$subject_salary_expense_barter_goods_county_add$" - subject_salary_expense_barter_goods_duchy_add: "[duchy|E] [subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_duchy_add: "[duchy|E] [subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_duchy_mult: "$subject_salary_expense_barter_goods_duchy_add$" - subject_salary_expense_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_kingdom_mult: "$subject_salary_expense_barter_goods_kingdom_add$" - subject_salary_expense_barter_goods_empire_add: "[empire|E] [subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_empire_add: "[empire|E] [subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_empire_mult: "$subject_salary_expense_barter_goods_empire_add$" - subject_salary_expense_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [barter_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [trade_goods|E] $subject_salary_expense$" subject_salary_expense_barter_goods_hegemony_mult: "$subject_salary_expense_barter_goods_hegemony_add$" - subject_salary_income_barter_goods_add: "[subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_add: "[subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_mult: "$subject_salary_income_barter_goods_add$" - subject_salary_income_barter_goods_county_add: "[county|E] [subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_county_add: "[county|E] [subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_county_mult: "$subject_salary_income_barter_goods_county_add$" - subject_salary_income_barter_goods_duchy_add: "[duchy|E] [subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_duchy_add: "[duchy|E] [subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_duchy_mult: "$subject_salary_income_barter_goods_duchy_add$" - subject_salary_income_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_kingdom_mult: "$subject_salary_income_barter_goods_kingdom_add$" - subject_salary_income_barter_goods_empire_add: "[empire|E] [subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_empire_add: "[empire|E] [subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_empire_mult: "$subject_salary_income_barter_goods_empire_add$" - subject_salary_income_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [barter_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [trade_goods|E] $subject_salary_income$" subject_salary_income_barter_goods_hegemony_mult: "$subject_salary_income_barter_goods_hegemony_add$" # dynamic experience levels @@ -2098,10 +2098,10 @@ MOD_MONTHLY_INCOME_PER_PIETY_LEVEL_ADD: "$MOD_MONTHLY_INCOME_MULT$ per [piety_level|E]" MOD_MONTHLY_BARTER_GOODS_PREFIX: "[barter_goods_i]" - MOD_MONTHLY_BARTER_GOODS: "[barter_goods|E]" - MOD_MONTHLY_BARTER_GOODS_MULT: "Monthly [barter_goods|E]" - MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_ADD: "[barter_goods|E] [income|E] while at [war|E]" - MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_MULT: "Monthly [barter_goods|E] [income|E] while at [war|E]" + MOD_MONTHLY_BARTER_GOODS: "[trade_goods|E]" + MOD_MONTHLY_BARTER_GOODS_MULT: "Monthly [trade_goods|E]" + MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_ADD: "[trade_goods|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_MULT: "Monthly [trade_goods|E] [income|E] while at [war|E]" celestial_movement_power_promote_scheme_phase_duration_add: "[GetScheme('celestial_movement_power_promote').GetTypeName] [scheme_speed_single|E]" study_confucian_classics_scheme_phase_duration_add: "[GetScheme('study_confucian_classics').GetTypeName] [scheme_speed_single|E]" diff --git a/localization/english/replace/modifiers_l_english.yml b/localization/english/replace/modifiers_l_english.yml new file mode 100644 index 00000000..264acda7 --- /dev/null +++ b/localization/english/replace/modifiers_l_english.yml @@ -0,0 +1,2098 @@ +l_english: + MOD_DIPLOMACY:0 "[diplomacy|E]" + MOD_INTRIGUE:0 "[intrigue|E]" + MOD_STEWARDSHIP:0 "[stewardship|E]" + MOD_MARTIAL:0 "[martial|E]" + MOD_LEARNING:0 "[learning|E]" + MOD_PROWESS:0 "[prowess|E]" + MOD_PROWESS_NO_PORTRAIT:0 "[prowess|E]" + prowess_no_portrait_debug_desc:0 "Doesn't affect portraits. Note that you can get some odd results when using negative values for people with negate_prowess_penalty_add" + + MOD_DIPLOMACY_PREFIX:0 "[diplomacy_i]" + MOD_INTRIGUE_PREFIX:0 "[intrigue_i]" + MOD_STEWARDSHIP_PREFIX:0 "[stewardship_i]" + MOD_MARTIAL_PREFIX:0 "[martial_i]" + MOD_LEARNING_PREFIX:0 "[learning_i]" + MOD_PROWESS_PREFIX:0 "[prowess_i]" + + MOD_DIPLOMACY_PER_PIETY_LEVEL:0 "[diplomacy|E] per [piety_level|E]" + MOD_MARTIAL_PER_PIETY_LEVEL:0 "[martial|E] per [piety_level|E]" + MOD_STEWARDSHIP_PER_PIETY_LEVEL:0 "[stewardship|E] per [piety_level|E]" + MOD_INTRIGUE_PER_PIETY_LEVEL:0 "[intrigue|E] per [piety_level|E]" + MOD_LEARNING_PER_PIETY_LEVEL:0 "[learning|E] per [piety_level|E]" + MOD_PROWESS_PER_PIETY_LEVEL:0 "[prowess|E] per [piety_level|E]" + MOD_DIPLOMACY_PER_PRESTIGE_LEVEL:0 "[diplomacy|E] per [prestige_level|E]" + MOD_MARTIAL_PER_PRESTIGE_LEVEL:0 "[martial|E] per [prestige_level|E]" + MOD_STEWARDSHIP_PER_PRESTIGE_LEVEL:0 "[stewardship|E] per [prestige_level|E]" + MOD_INTRIGUE_PER_PRESTIGE_LEVEL:0 "[intrigue|E] per [prestige_level|E]" + MOD_LEARNING_PER_PRESTIGE_LEVEL:0 "[learning|E] per [prestige_level|E]" + MOD_PROWESS_PER_PRESTIGE_LEVEL:0 "[prowess|E] per [prestige_level|E]" + MOD_DIPLOMACY_PER_INFLUENCE_LEVEL: "[diplomacy|E] per [influence_level|E]" + MOD_MARTIAL_PER_INFLUENCE_LEVEL: "[martial|E] per [influence_level|E]" + MOD_STEWARDSHIP_PER_INFLUENCE_LEVEL: "[stewardship|E] per [influence_level|E]" + MOD_INTRIGUE_PER_INFLUENCE_LEVEL: "[intrigue|E] per [influence_level|E]" + MOD_LEARNING_PER_INFLUENCE_LEVEL: "[learning|E] per [influence_level|E]" + MOD_PROWESS_PER_INFLUENCE_LEVEL: "[prowess|E] per [influence_level|E]" + MOD_DIPLOMACY_PER_MERIT_LEVEL: "[diplomacy|E] per [merit_level|E]" + MOD_MARTIAL_PER_MERIT_LEVEL: "[martial|E] per [merit_level|E]" + MOD_STEWARDSHIP_PER_MERIT_LEVEL: "[stewardship|E] per [merit_level|E]" + MOD_INTRIGUE_PER_MERIT_LEVEL: "[intrigue|E] per [merit_level|E]" + MOD_LEARNING_PER_MERIT_LEVEL: "[learning|E] per [merit_level|E]" + MOD_PROWESS_PER_MERIT_LEVEL: "[prowess|E] per [merit_level|E]" + + MOD_DIPLOMACY_PER_STRESS_LEVEL:0 "[diplomacy|E] per [stress_level|E]" + MOD_MARTIAL_PER_STRESS_LEVEL:0 "[martial|E] per [stress_level|E]" + MOD_STEWARDSHIP_PER_STRESS_LEVEL:0 "[stewardship|E] per [stress_level|E]" + MOD_INTRIGUE_PER_STRESS_LEVEL:0 "[intrigue|E] per [stress_level|E]" + MOD_LEARNING_PER_STRESS_LEVEL:0 "[learning|E] per [stress_level|E]" + MOD_PROWESS_PER_STRESS_LEVEL:0 "[prowess|E] per [stress_level|E]" + + MOD_PIETY_LEVEL_IMPACT_MULT:1 "[piety_i|E][piety_level_impact|E]" + MOD_PRESTIGE_LEVEL_IMPACT_MULT:1 "[prestige_i|E][prestige_level_impact|E]" + MOD_INFLUENCE_LEVEL_IMPACT_MULT: "[influence_i|E][influence_level_impact|E]" + MOD_MERIT_LEVEL_IMPACT_MULT: "[merit_i|E][merit_level_impact|E]" + + MOD_DIPLOMACY_NEGATE_PENALTY:0 "Negated [diplomacy|E] Penalty" + MOD_INTRIGUE_NEGATE_PENALTY:0 "Negated [intrigue|E] Penalty" + MOD_STEWARDSHIP_NEGATE_PENALTY:0 "Negated [stewardship|E] Penalty" + MOD_MARTIAL_NEGATE_PENALTY:0 "Negated [martial|E] Penalty" + MOD_PROWESS_NEGATE_PENALTY:1 "Injury Resistance ([prowess|E])" + MOD_LEARNING_NEGATE_PENALTY:0 "Negated [learning|E] Penalty" + + MOD_FERTILITY:0 "[fertility|E]" + MOD_FERTILITY_NEGATE_PENALTY:0 "Disease Resistance ([fertility|E])" + + MOD_PROVISIONS_GAIN_MULT: "[provisions|E] Gain" + MOD_PROVISIONS_LOSS_MULT: "[provisions|E] Loss" + MOD_PROVISIONS_CAPACITY_ADD: "[provisions|E] Capacity" + MOD_PROVISIONS_CAPACITY_MULT: "$MOD_PROVISIONS_CAPACITY_ADD$" + + MOD_COST_PREFIX:0 "[gold_i]" + MOD_SCHEME_SECRECY:0 "[secrecy|E]" + MOD_SCHEME_SUCCESS:0 "Base [success_chance|E]" + MOD_COMBAT_PURSUE_EFFICIENCY:1 "[command_modifier_i|E][pursuit|E] Efficiency" + MOD_COMBAT_COUNTER_RESISTANCE:0 "[men_at_arms_counter|E] Resistance" + MOD_COMBAT_COUNTER_EFFICIENCY:2 "[men_at_arms_counter|E] Efficiency" + MOD_SIEGE_PHASE_TIME:2 "[command_modifier_i|E][siege|E] Phase Time" + MOD_SIEGE_MORALE_LOSS:1 "[command_modifier_i|E]Daily [siege_progress|E]" + MOD_CONTROLLED_PROVINCE_ADVANTAGE:0 "Controlled Territory Defender [advantage|E]" + MOD_REVOLTING_SIEGE_MORALE_LOSS_ADD:0 "[siege_progress|E] against [revolts|E]" + MOD_REVOLTING_SIEGE_MORALE_LOSS_MULT:0 "$MOD_REVOLTING_SIEGE_MORALE_LOSS_ADD$" + MOD_MOVEMENT_SPEED:1 "[army|E] Movement Speed" + MOD_MOVEMENT_SPEED_LAND_RAIDING:0 "Movement Speed over land while [raiding|e]" + MOD_RETREAT_LOSSES:2 "[command_modifier_i|E][retreat|E] Losses" + MOD_HARD_CASUALTY_MODIFIER:2 "[command_modifier_i|E]Friendly [dead_soldiers|E]" + MOD_ENEMY_HARD_CASUALTY_MODIFIER:2 "[command_modifier_i|E]Enemy [dead_soldiers|E]" + MOD_ADVANTAGE:1 "[command_modifier_i|E][advantage|E]" + MOD_ATTACKER_ADVANTAGE:1 "[command_modifier_i|E]Attacker [advantage|E]" + MOD_DEFENDER_ADVANTAGE:1 "[command_modifier_i|E]Defender [advantage|E]" + MOD_DEFENDER_HOLDING_ADVANTAGE:0 "[command_modifier_i|E] Defender [holding|E] [advantage|E]" + MOD_NUM_BUILDING_SLOTS:0 "Additional [building|E] Slots" + MOD_NO_WATER_CROSSING_PENALTY:2 "[command_modifier_i|E]Crosses Rivers & Straits without [advantage|E] penalties" + MOD_NO_DISEMBARK_PENALTY:0 "[command_modifier_i|E]No [advantage|E] penalty from [Concept( 'recently_disembarked', 'disembarking')|E]" + MOD_ENEMY_TERRAIN_ADVANTAGE:1 "[command_modifier_i|E]Enemy Defensive [advantage|E]" + MOD_DRYLANDS_ADVANTAGE:1 "[command_modifier_i|E]Drylands [advantage|E]" + MOD_DESERT_ADVANTAGE:1 "[command_modifier_i|E]Desert [advantage|E]" + MOD_DESERT_ATTRITION:1 "[command_modifier_i|E]Desert Attrition" + MOD_JUNGLE_ADVANTAGE:1 "[command_modifier_i|E]Jungle [advantage|E]" + MOD_JUNGLE_ATTRITION:1 "[command_modifier_i|E]Jungle Attrition" + MOD_JUNGLE_DETECTION:1 "[command_modifier_i|E]Jungle Detection" + MOD_HOSTILE_COUNTY_ATTRITION:0 "Hostile County Attrition" + MOD_HOSTILE_COUNTY_ATTRITION_RAIDING:0 "Hostile County Attrition while [raiding|e]" + MOD_FAITH_HOSTILITY_ADVANTAGE_MOD:1 "[command_modifier_i|E][faith_hostility|E] [advantage|E]" + MOD_CORELIGIONIST_ADVANTAGE_MOD:0 "[command_modifier_i|E][advantage|E] against co-religionists" + MOD_COASTAL_ADVANTAGE:0 "[command_modifier_i|E]Coastal [advantage|E]" + MOD_LEVY_REINFORCEMENT_RATE:0 "[levy|E] Reinforcement Rate" + MOD_LEVY_REINFORCEMENT_RATE_EVEN_IF_BARON:0 "$MOD_LEVY_REINFORCEMENT_RATE$" + MOD_LEVY_REINFORCEMENT_RATE_DIFFERENT_FAITH:0 "[levy|E] Reinforcement Rate (Different [faith|E])" + MOD_LEVY_REINFORCEMENT_RATE_DIFFERENT_FAITH_EVEN_IF_BARON:0 "$MOD_LEVY_REINFORCEMENT_RATE_DIFFERENT_FAITH$" + MOD_LEVY_REINFORCEMENT_RATE_SAME_FAITH:0 "[levy|E] Reinforcement Rate (Same [faith|E])" + MOD_LEVY_REINFORCEMENT_RATE_SAME_FAITH_EVEN_IF_BARON:0 "$MOD_LEVY_REINFORCEMENT_RATE_SAME_FAITH$" + MOD_LEVY_REINFORCEMENT_RATE_FRIENDLY_TERRITORY:0 "Friendly Territory [levy|E] Reinforcement Rate" + MOD_TITLE_CREATION_COST:2 "[title|E] Creation Cost" + MOD_TITLE_CREATION_COST_MULT:2 "[title|E] Creation Cost" + MOD_TITLE_CREATION_PIETY_COST: "[title|E] Creation [piety|E] Cost" + MOD_TITLE_CREATION_PIETY_COST_MULT: "[title|E] Creation [piety|E] Cost" + MOD_WINTER_MOVEMENT_SPEED:0 "Movement Speed in Provinces affected by Winter" + MOD_SUPPLY_LOSS_WINTER:0 "Supply loss in Provinces affected by Winter" + MOD_HARD_CASUALTY_WINTER:0 "[dead_soldiers|E] in Provinces affected by Winter" + MOD_DEFENDER_WINTER_ADVANTAGE:0 "Defender [advantage|E] in Provinces affected by Winter" + MOD_WINTER_ADVANTAGE:0 "[command_modifier_i|E][advantage|E] in Provinces affected by Winter" + MOD_LEAD_BY_OWNER_ADVANTAGE:0 "[command_modifier_i|E][advantage|E] when commanding own armies" + MOD_SAME_HERITAGE_COUNTY_ADVANTAGE:1 "[command_modifier_i|E][advantage|E] in same [cultural|E] [heritage|E] Provinces" + MOD_INDEPENDENT_PRIMARY_DEFENDER_ADVANTAGE:0 "[command_modifier_i|E][advantage|E] while primary defender and independent" + MOD_INDEPENDENT_PRIMARY_ATTACKER_ADVANTAGE: "[command_modifier_i|E][advantage|E] while primary attacker and independent" + MOD_ARMY_SIEGE_VALUE_MULT:0 "Army [siege_weapon|E] Effectiveness" + MOD_ARMY_DAMAGE_MULT:0 "Army [damage|E]" + MOD_ARMY_TOUGHNESS_MULT:0 "Army [toughness|E]" + MOD_ARMY_PURSUIT_MULT:0 "Army [pursuit|E]" + MOD_ARMY_SCREEN_MULT:0 "Army [screen|E]" + + MOD_MERCENARY_HIRE_COST_ADD:0 "[mercenary|E] Hire Cost" + MOD_MERCENARY_HIRE_COST_MULT:0 "$MOD_MERCENARY_HIRE_COST_ADD$" + MOD_MERCENARY_HIRE_TIME_MULT: "[mercenary|E] Hire Duration" + MOD_HOLY_ORDER_HIRE_COST_ADD:0 "[holy_order|E] Hire Cost" + MOD_HOLY_ORDER_HIRE_COST_MULT:0 "$MOD_HOLY_ORDER_HIRE_COST_ADD$" + MOD_SAME_CULTURE_MERCENARY_HIRE_COST_ADD:0 "Same [culture|E] [mercenary|E] Hire Cost" + MOD_SAME_CULTURE_MERCENARY_HIRE_COST_MULT:0 "$MOD_SAME_CULTURE_MERCENARY_HIRE_COST_ADD$" + MOD_SAME_CULTURE_HOLY_ORDER_HIRE_COST_ADD:0 "Same [culture|E] [holy_order|E] Hire Cost" + MOD_SAME_CULTURE_HOLY_ORDER_HIRE_COST_MULT:0 "$MOD_SAME_CULTURE_HOLY_ORDER_HIRE_COST_ADD$" + holy_order_government_levy_contribution_add:0 "[holy_order|E] [vassal|E] [levy|E] [modifier_contribution|E]" + + desert_advantage:1 "[command_modifier_i|E][advantage|E] in Desert" + desert_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Desert" + desert_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Desert" + desert_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Desert" + desert_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Desert" + desert_mountains_advantage:1 "[command_modifier_i|E][advantage|E] in Desert Mountains" + desert_mountains_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Desert Mountains" + desert_mountains_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Desert Mountains" + desert_mountains_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Desert Mountains" + desert_mountains_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Desert Mountains" + drylands_advantage:1 "[command_modifier_i|E][advantage|E] in Drylands" + drylands_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Drylands" + drylands_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Drylands" + drylands_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Drylands" + drylands_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Drylands" + farmlands_advantage:1 "[command_modifier_i|E][advantage|E] in Farmlands" + farmlands_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Farmlands" + farmlands_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Farmlands" + farmlands_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Farmlands" + farmlands_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Farmlands" + forest_advantage:1 "[command_modifier_i|E][advantage|E] in Forest" + forest_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Forest" + forest_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Forest" + forest_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Forest" + forest_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Forest" + hills_advantage:1 "[command_modifier_i|E][advantage|E] in Hills" + hills_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Hills" + hills_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Hills" + hills_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Hills" + hills_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Hills" + jungle_advantage:1 "[command_modifier_i|E][advantage|E] in Jungle" + jungle_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Jungle" + jungle_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Jungle" + jungle_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Jungle" + jungle_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Jungle" + mountains_advantage:1 "[command_modifier_i|E][advantage|E] in Mountains" + mountains_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Mountains" + mountains_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Mountains" + mountains_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Mountains" + mountains_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Mountains" + oasis_advantage:1 "[command_modifier_i|E][advantage|E] in Oasis" + oasis_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Oasis" + oasis_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Oasis" + oasis_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Oasis" + oasis_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Oasis" + plains_advantage:1 "[command_modifier_i|E][advantage|E] in Plains" + plains_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Plains" + plains_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Plains" + plains_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Plains" + plains_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Plains" + steppe_advantage:1 "[command_modifier_i|E][advantage|E] in Steppe" + steppe_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Steppe" + steppe_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Steppe" + steppe_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Steppe" + steppe_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Steppe" + floodplains_advantage:1 "[command_modifier_i|E][advantage|E] in Floodplains" + floodplains_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Floodplains" + floodplains_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Floodplains" + floodplains_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Floodplains" + floodplains_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Floodplains" + taiga_advantage:1 "[command_modifier_i|E][advantage|E] in Taiga" + taiga_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Taiga" + taiga_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Taiga" + taiga_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Taiga" + taiga_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Taiga" + wetlands_advantage:1 "[command_modifier_i|E][advantage|E] in Wetlands" + wetlands_attrition_mult:1 "[command_modifier_i|E][attrition|E] Taken in Wetlands" + wetlands_cancel_negative_supply:1 "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Wetlands" + wetlands_max_combat_roll:1 "[command_modifier_i|E]Maximum [combat_roll|E] in Wetlands" + wetlands_min_combat_roll:1 "[command_modifier_i|E]Minimum [combat_roll|E] in Wetlands" + terraced_hills_advantage: "[command_modifier_i|E][advantage|E] in Terraced Hills" + terraced_hills_attrition_mult: "[command_modifier_i|E][attrition|E] Taken in Terraced Hills" + terraced_hills_cancel_negative_supply: "[command_modifier_i|E]Negate [supply_limit|E] Penalty in Terraced Hills" + terraced_hills_max_combat_roll: "[command_modifier_i|E]Maximum [combat_roll|E] in Terraced Hills" + terraced_hills_min_combat_roll: "[command_modifier_i|E]Minimum [combat_roll|E] in Terraced Hills" + + siege_weapon_siege_value_mult:0 "[siege_weapon|E] Effectiveness" + siege_weapon_toughness_add:0 "[siege_weapon|E] [toughness|E]" + siege_weapon_max_size_add:0 "Max Size of [siege_weapon|E] [regiments|E]" + siege_weapon_maintenance_mult:0 "[siege_weapon|E] Maintenance" + siege_weapon_recruitment_cost_mult:0 "[siege_weapon|E] Recruitment Cost" + siege_weapon_damage_mult: "[siege_weapon|E] [damage|E]" + siege_weapon_toughness_mult: "[siege_weapon|E] [toughness|E]" + light_cavalry_damage_add:1 "[light_cavalry|E] [damage|E]" + light_cavalry_damage_mult:0 "$light_cavalry_damage_add$" + light_cavalry_pursuit_add:1 "[light_cavalry|E] [pursuit|E]" + light_cavalry_pursuit_mult:0 "$light_cavalry_pursuit_add$" + light_cavalry_screen_add:1 "[light_cavalry|E] [screen|E]" + light_cavalry_screen_mult:0 "$light_cavalry_screen_add$" + light_cavalry_maintenance_mult:0 "[light_cavalry|E] Maintenance" + light_cavalry_recruitment_cost_mult:0 "[light_cavalry|E] Recruitment Cost" + light_cavalry_max_size_add:0 "Max Size of [light_cavalry|E] [regiments|E]" + heavy_infantry_screen_add:1 "[heavy_infantry|E] [screen|E]" + heavy_infantry_screen_mult: "$heavy_infantry_screen_add$" + pikemen_screen_add:2 "[spearmen|E] [screen|E]" + pikemen_damage_add:2 "[spearmen|E] [damage|E]" + pikemen_damage_mult:0 "$pikemen_damage_add$" + pikemen_toughness_add:2 "[spearmen|E] [toughness|E]" + pikemen_toughness_mult:0 "$pikemen_toughness_add$" + pikemen_max_size_add:0 "Max Size of [spearmen|E] [regiments|E]" + pikemen_maintenance_mult:0 "[spearmen|E] Maintenance" + pikemen_recruitment_cost_mult:0 "[spearmen|E] Recruitment Cost" + pikemen_screen_mult: "$pikemen_screen_add$" + archers_screen_add:1 "[archer|E] [screen|E]" + archers_screen_mult:0 "$archers_screen_add$" + archers_pursuit_add: "[archer|E] [pursuit|E]" + skirmishers_screen_add:2 "[skirmisher|E] [screen|E]" + skirmishers_screen_mult:0 "$skirmishers_screen_add$" + skirmishers_pursuit_add:2 "[skirmisher|E] [pursuit|E]" + skirmishers_pursuit_mult:0 "$skirmishers_pursuit_add$" + skirmishers_toughness_add:2 "[skirmisher|E] [toughness|E]" + skirmishers_toughness_mult:0 "$skirmishers_toughness_add$" + skirmishers_damage_add:2 "[skirmisher|E] [damage|E]" + skirmishers_damage_mult:0 "$skirmishers_damage_add$" + skirmishers_max_size_add:0 "Max Size of [skirmisher|E] [regiments|E]" + skirmishers_maintenance_mult:0 "[skirmisher|E] Maintenance" + skirmishers_recruitment_cost_mult:0 "[skirmisher|E] Recruitment Cost" + archers_damage_add:1 "[archer|E] [damage|E]" + archers_damage_mult:0 "$archers_damage_add$" + archers_toughness_add:1 "[archer|E] [toughness|E]" + archers_toughness_mult:0 "$archers_toughness_add$" + archers_max_size_add:0 "Max Size of [archer|E] [regiments|E]" + archers_maintenance_mult:0 "[archer|E] Maintenance" + archers_recruitment_cost_mult:0 "[archer|E] Recruitment Cost" + light_cavalry_toughness_add:1 "[light_cavalry|E] [toughness|E]" + light_cavalry_toughness_mult:0 "$light_cavalry_toughness_add$" + heavy_infantry_siege_value_add:1 "[heavy_infantry|E] [siege_progress|E]" + heavy_infantry_damage_add:1 "[heavy_infantry|E] [damage|E]" + heavy_infantry_damage_mult:0 "$heavy_infantry_damage_add$" + heavy_infantry_pursuit_add: "[heavy_infantry|E] [pursuit|E]" + heavy_infantry_pursuit_mult: "$heavy_infantry_pursuit_add$" + heavy_infantry_toughness_add:1 "[heavy_infantry|E] [toughness|E]" + heavy_infantry_toughness_mult:0 "$heavy_infantry_toughness_add$" + heavy_infantry_max_size_add:0 "Max Size of [heavy_infantry|E] [regiments|E]" + heavy_infantry_maintenance_mult:0 "[heavy_infantry|E] Maintenance" + heavy_infantry_recruitment_cost_mult:0 "[heavy_infantry|E] Recruitment Cost" + pikemen_siege_value_add:1 "[spearmen|E] [siege_progress|E]" + archers_siege_value_add:1 "[archer|E] [siege_progress|E]" + skirmishers_siege_value_add:1 "[skirmisher|E] [siege_progress|E]" + archer_cavalry_siege_value_add:0 "[archer_cavalry|E] [siege_progress|E]" + light_cavalry_siege_value_add:0 "[light_cavalry|E] [siege_progress|E]" + heavy_cavalry_damage_add:1 "[heavy_cavalry|E] [damage|E]" + heavy_cavalry_damage_mult:0 "$heavy_cavalry_damage_add$" + heavy_cavalry_pursuit_add:1 "[heavy_cavalry|E] [pursuit|E]" + heavy_cavalry_pursuit_mult:0 "$heavy_cavalry_pursuit_add$" + heavy_cavalry_screen_add:1 "[heavy_cavalry|E] [screen|E]" + heavy_cavalry_screen_mult:0 "$heavy_cavalry_screen_add$" + heavy_cavalry_toughness_add:1 "[heavy_cavalry|E] [toughness|E]" + heavy_cavalry_toughness_mult:0 "$heavy_cavalry_toughness_add$" + heavy_cavalry_max_size_add:0 "Max Size of [heavy_cavalry|E] [regiments|E]" + heavy_cavalry_maintenance_mult:0 "[heavy_cavalry|E] Maintenance" + heavy_cavalry_recruitment_cost_mult:0 "[heavy_cavalry|E] Recruitment Cost" + archer_cavalry_damage_add:0 "[archer_cavalry|E] [damage|E]" + archer_cavalry_damage_mult:0 "$archer_cavalry_damage_add$" + archer_cavalry_toughness_add:0 "[archer_cavalry|E] [toughness|E]" + archer_cavalry_toughness_mult:0 "$archer_cavalry_toughness_add$" + archer_cavalry_pursuit_add:0 "[archer_cavalry|E] [pursuit|E]" + archer_cavalry_pursuit_mult:0 "$archer_cavalry_pursuit_add$" + archer_cavalry_screen_add:0 "[archer_cavalry|E] [screen|E]" + archer_cavalry_screen_mult:0 "$archer_cavalry_screen_add$" + archer_cavalry_maintenance_mult:0 "[archer_cavalry|E] Maintenance" + archer_cavalry_recruitment_cost_mult:0 "[archer_cavalry|E] Recruitment Cost" + archer_cavalry_max_size_add:0 "Max Size of [archer_cavalry|E] [regiments|E]" + camel_cavalry_damage_add:0 "[camel_cavalry|E] [damage|E]" + camel_cavalry_damage_mult:0 "$camel_cavalry_damage_add$" + camel_cavalry_toughness_add:0 "[camel_cavalry|E] [toughness|E]" + camel_cavalry_toughness_mult:0 "$camel_cavalry_toughness_add$" + camel_cavalry_pursuit_add:0 "[camel_cavalry|E] [pursuit|E]" + camel_cavalry_pursuit_mult:0 "$camel_cavalry_pursuit_add$" + camel_cavalry_screen_add:0 "[camel_cavalry|E] [screen|E]" + camel_cavalry_screen_mult:0 "$camel_cavalry_screen_add$" + camel_cavalry_maintenance_mult:0 "[camel_cavalry|E] Maintenance" + camel_cavalry_recruitment_cost_mult:0 "[camel_cavalry|E] Recruitment Cost" + camel_cavalry_max_size_add:1 "Max Size of [camel_cavalry|E] [regiments|E]" + elephant_cavalry_damage_add:0 "[elephant_cavalry|E] [damage|E]" + elephant_cavalry_damage_mult:0 "$elephant_cavalry_damage_add$" + elephant_cavalry_toughness_add:0 "[elephant_cavalry|E] [toughness|E]" + elephant_cavalry_toughness_mult:0 "$elephant_cavalry_toughness_add$" + elephant_cavalry_pursuit_add:0 "[elephant_cavalry|E] [pursuit|E]" + elephant_cavalry_pursuit_mult:0 "$elephant_cavalry_pursuit_add$" + elephant_cavalry_screen_add:0 "[elephant_cavalry|E] [screen|E]" + elephant_cavalry_screen_mult:0 "$elephant_cavalry_screen_add$" + elephant_cavalry_maintenance_mult:0 "[elephant_cavalry|E] Maintenance" + elephant_cavalry_recruitment_cost_mult:0 "[elephant_cavalry|E] Recruitment Cost" + elephant_cavalry_max_size_add:0 "Max Size of [elephant_cavalry|E] [regiments|E]" + nomadic_horde_damage_add:0 "[horde|E] [damage|E]" + nomadic_horde_damage_mult:0 "$nomadic_horde_damage_add$" + nomadic_horde_toughness_add:0 "[horde|E] [toughness|E]" + nomadic_horde_toughness_mult:0 "$nomadic_horde_toughness_add$" + nomadic_horde_pursuit_add:0 "[horde|E] [pursuit|E]" + nomadic_horde_pursuit_mult:0 "$nomadic_horde_pursuit_add$" + nomadic_horde_screen_add:0 "[horde|E] [screen|E]" + nomadic_horde_screen_mult:0 "$nomadic_horde_screen_add$" + nomadic_horde_maintenance_mult:0 "[horde|E] Maintenance" + nomadic_horde_recruitment_cost_mult:0 "[horde|E] Recruitment Cost" + nomadic_horde_max_size_add:0 "Max Size of [horde|E] [regiments|E]" + + gunpowder_damage_add: "[gunpowder|E] [damage|E]" + gunpowder_damage_mult: "$gunpowder_damage_add$" + gunpowder_toughness_add: "[gunpowder|E] [toughness|E]" + gunpowder_toughness_mult: "$gunpowder_toughness_add$" + gunpowder_pursuit_add: "[gunpowder|E] [pursuit|E]" + gunpowder_pursuit_mult: "$gunpowder_pursuit_add$" + gunpowder_screen_add: "[gunpowder|E] [screen|E]" + gunpowder_screen_mult: "$gunpowder_screen_add$" + gunpowder_maintenance_mult: "[gunpowder|E] Maintenance" + gunpowder_recruitment_cost_mult: "[gunpowder|E] Recruitment Cost" + gunpowder_max_size_add: "Max Size of [gunpowder|E] [regiments|E]" + gunpowder_siege_value_add: "[gunpowder|E] [siege_progress|E]" + gunpowder_siege_value_mult: "[gunpowder|E] [siege_weapon|E] Effectiveness" + + MOD_COUNTY_FERTILITY_PREFIX: "@county_fertility_icon!" + MOD_MOVEMENT_SPEED_PREFIX:0 "@movement_speed_icon!" + MOD_DREAD_PREFIX:0 "@dread_icon!" + MOD_DISCOVERY_PREFIX:0 "@exposed_icon!" + MOD_TRAVEL_SAFETY_PREFIX:0 "@travel_safety_icon!" + MOD_TRAVEL_SPEED_PREFIX:0 "@travel_speed_icon!" + MOD_TRAVEL_DANGER_PREFIX:0 "@travel_danger_icon!" + MOD_SECRECY_PREFIX:0 "@scheme_secrecy_icon!" + MOD_SPEED_PREFIX: "@scheme_phase_duration_icon!" + MOD_SUCCESS_PREFIX:0 "@scheme_success_icon!" + MOD_SUCCESS_GROWTH_PREFIX: "@scheme_success_growth_icon!" + MOD_SUCCESS_MAX_PREFIX: "@scheme_success_max_icon!" + MOD_PROVISIONS_PREFIX: "@provisions_icon!" + MOD_HERD_PREFIX: "@herd_icon!" + MOD_SUPPLY_PREFIX:0 "@supply_icon!" + MOD_CONTROL_PREFIX:0 "@control_icon!" + MOD_RAID_PREFIX:0 "@raid_icon!" + MOD_ADVANTAGE_PREFIX:0 "@advantage_icon!" + MOD_DAMAGE_PREFIX:0 "@damage_icon!" + MOD_TOUGHNESS_PREFIX:0 "@toughness_icon!" + MOD_PURSUIT_PREFIX:0 "@pursuit_icon!" + MOD_SCREEN_PREFIX:0 "@screen_icon!" + MOD_SIEGE_PROGRESS_PREFIX:0 "@siege_progress_icon!" + MOD_MAA_DAMAGE_ADD:0 "[men_at_arms|E] [damage|E]" + MOD_MAA_DAMAGE_MULT:0 "$MOD_MAA_DAMAGE_ADD$" + MOD_MAA_TOUGHNESS_ADD:0 "[men_at_arms|E] [toughness|E]" + MOD_MAA_TOUGHNESS_MULT:0 "$MOD_MAA_TOUGHNESS_ADD$" + MOD_MAA_PURSUIT_ADD:0 "[men_at_arms|E] [pursuit|E]" + MOD_MAA_PURSUIT_MULT:0 "$MOD_MAA_PURSUIT_ADD$" + MOD_MAA_SCREEN_ADD:0 "[men_at_arms|E] [screen|E]" + MOD_MAA_SCREEN_MULT:0 "$MOD_MAA_SCREEN_ADD$" + MOD_MAA_SIEGE_VALUE_ADD:0 "[men_at_arms|E] [siege_progress|E]" + MOD_MAA_SIEGE_VALUE_MULT:0 "[men_at_arms|E] [siege_weapon|E] Effectiveness" + MOD_STATIONED_MAA_DAMAGE_ADD:0 "[stationed|E] [men_at_arms|E] [damage|E]" + MOD_STATIONED_MAA_DAMAGE_MULT:0 "$MOD_STATIONED_MAA_DAMAGE_ADD$" + MOD_STATIONED_MAA_TOUGHNESS_ADD:0 "[stationed|E] [men_at_arms|E] [toughness|E]" + MOD_STATIONED_MAA_TOUGHNESS_MULT:0 "$MOD_STATIONED_MAA_TOUGHNESS_ADD$" + MOD_STATIONED_MAA_PURSUIT_ADD:0 "[stationed|E] [men_at_arms|E] [pursuit|E]" + MOD_STATIONED_MAA_PURSUIT_MULT:0 "$MOD_STATIONED_MAA_PURSUIT_ADD$" + MOD_STATIONED_MAA_SCREEN_ADD:0 "[stationed|E] [men_at_arms|E] [screen|E]" + MOD_STATIONED_MAA_SCREEN_MULT:0 "$MOD_STATIONED_MAA_SCREEN_ADD$" + MOD_STATIONED_MAA_SIEGE_VALUE_ADD:0 "[stationed|E] [men_at_arms|E] [siege_progress|E]" + MOD_STATIONED_MAA_SIEGE_VALUE_MULT:0 "[stationed|E] [men_at_arms|E] [siege_weapon|E] Effectiveness" + stationed_skirmishers_damage_add:0 "[stationed|E] [skirmishers|E] [damage|E]" + stationed_skirmishers_damage_mult:0 "$stationed_skirmishers_damage_add$" + stationed_skirmishers_toughness_add:0 "[stationed|E] [skirmishers|E] [toughness|E]" + stationed_skirmishers_toughness_mult:0 "$stationed_skirmishers_toughness_add$" + stationed_skirmishers_pursuit_add:0 "[stationed|E] [skirmishers|E] [pursuit|E]" + stationed_skirmishers_pursuit_mult:0 "$stationed_skirmishers_pursuit_add$" + stationed_skirmishers_screen_add:0 "[stationed|E] [skirmishers|E] [screen|E]" + stationed_skirmishers_screen_mult:0 "$stationed_skirmishers_screen_add$" + stationed_skirmishers_siege_value_add:0 "[stationed|E] [skirmishers|E] [siege_progress|E]" + stationed_archers_damage_add:0 "[stationed|E] [archers|E] [damage|E]" + stationed_archers_damage_mult:0 "$stationed_archers_damage_add$" + stationed_archers_toughness_add:0 "[stationed|E] [archers|E] [toughness|E]" + stationed_archers_toughness_mult:0 "$stationed_archers_toughness_add$" + stationed_archers_pursuit_add:0 "[stationed|E] [archers|E] [pursuit|E]" + stationed_archers_pursuit_mult:0 "$stationed_archers_pursuit_add$" + stationed_archers_screen_add:0 "[stationed|E] [archers|E] [screen|E]" + stationed_archers_screen_mult:0 "$stationed_archers_screen_add$" + stationed_archers_siege_value_add:0 "[stationed|E] [archers|E] [siege_progress|E]" + stationed_light_cavalry_damage_add:0 "[stationed|E] [light_cavalry|E] [damage|E]" + stationed_light_cavalry_damage_mult:0 "$stationed_light_cavalry_damage_add$" + stationed_light_cavalry_toughness_add:0 "[stationed|E] [light_cavalry|E] [toughness|E]" + stationed_light_cavalry_toughness_mult:0 "$stationed_light_cavalry_toughness_add$" + stationed_light_cavalry_pursuit_add:0 "[stationed|E] [light_cavalry|E] [pursuit|E]" + stationed_light_cavalry_pursuit_mult:0 "$stationed_light_cavalry_pursuit_add$" + stationed_light_cavalry_screen_add:0 "[stationed|E] [light_cavalry|E] [screen|E]" + stationed_light_cavalry_screen_mult:0 "$stationed_light_cavalry_screen_add$" + stationed_light_cavalry_siege_value_add:0 "[stationed|E] [light_cavalry|E] [siege_progress|E]" + stationed_heavy_cavalry_damage_add:0 "[stationed|E] [heavy_cavalry|E] [damage|E]" + stationed_heavy_cavalry_damage_mult:0 "$stationed_heavy_cavalry_damage_add$" + stationed_heavy_cavalry_toughness_add:0 "[stationed|E] [heavy_cavalry|E] [toughness|E]" + stationed_heavy_cavalry_toughness_mult:0 "$stationed_heavy_cavalry_toughness_add$" + stationed_heavy_cavalry_pursuit_add:0 "[stationed|E] [heavy_cavalry|E] [pursuit|E]" + stationed_heavy_cavalry_pursuit_mult:0 "$stationed_heavy_cavalry_pursuit_add$" + stationed_heavy_cavalry_screen_add:0 "[stationed|E] [heavy_cavalry|E] [screen|E]" + stationed_heavy_cavalry_screen_mult:0 "$stationed_heavy_cavalry_screen_add$" + stationed_heavy_cavalry_siege_value_add:0 "[stationed|E] [heavy_cavalry|E] [siege_progress|E]" + stationed_pikemen_damage_add:0 "[stationed|E] [spearmen|E] [damage|E]" + stationed_pikemen_damage_mult:0 "$stationed_pikemen_damage_add$" + stationed_pikemen_toughness_add:0 "[stationed|E] [spearmen|E] [toughness|E]" + stationed_pikemen_toughness_mult:0 "$stationed_pikemen_toughness_add$" + stationed_pikemen_pursuit_add:0 "[stationed|E] [spearmen|E] [pursuit|E]" + stationed_pikemen_pursuit_mult:0 "$stationed_pikemen_pursuit_add$" + stationed_pikemen_screen_add:0 "[stationed|E] [spearmen|E] [screen|E]" + stationed_pikemen_screen_mult:0 "$stationed_pikemen_screen_add$" + stationed_pikemen_siege_value_add:0 "[stationed|E] [spearmen|E] [siege_progress|E]" + stationed_heavy_infantry_damage_add:0 "[stationed|E] [heavy_infantry|E] [damage|E]" + stationed_heavy_infantry_damage_mult:0 "$stationed_heavy_infantry_damage_add$" + stationed_heavy_infantry_toughness_add:0 "[stationed|E] [heavy_infantry|E] [toughness|E]" + stationed_heavy_infantry_toughness_mult:0 "$stationed_heavy_infantry_toughness_add$" + stationed_heavy_infantry_pursuit_add:0 "[stationed|E] [heavy_infantry|E] [pursuit|E]" + stationed_heavy_infantry_pursuit_mult:0 "$stationed_heavy_infantry_pursuit_add$" + stationed_heavy_infantry_screen_add:0 "[stationed|E] [heavy_infantry|E] [screen|E]" + stationed_heavy_infantry_screen_mult:0 "$stationed_heavy_infantry_screen_add$" + stationed_heavy_infantry_siege_value_add:0 "[stationed|E] [heavy_infantry|E] [siege_progress|E]" + stationed_archer_cavalry_damage_add:0 "[stationed|E] [archer_cavalry|E] [damage|E]" + stationed_archer_cavalry_damage_mult:0 "$stationed_archer_cavalry_damage_add$" + stationed_archer_cavalry_toughness_add:0 "[stationed|E] [archer_cavalry|E] [toughness|E]" + stationed_archer_cavalry_toughness_mult:0 "$stationed_archer_cavalry_toughness_add$" + stationed_archer_cavalry_pursuit_add:0 "[stationed|E] [archer_cavalry|E] [pursuit|E]" + stationed_archer_cavalry_pursuit_mult:0 "$stationed_archer_cavalry_pursuit_add$" + stationed_archer_cavalry_screen_add:0 "[stationed|E] [archer_cavalry|E] [screen|E]" + stationed_archer_cavalry_screen_mult:0 "$stationed_archer_cavalry_screen_add$" + stationed_archer_cavalry_siege_value_add:0 "[stationed|E] [archer_cavalry|E] [siege_progress|E]" + stationed_camel_cavalry_damage_add:0 "[stationed|E] [camel_cavalry|E] [damage|E]" + stationed_camel_cavalry_damage_mult:0 "$stationed_camel_cavalry_damage_add$" + stationed_camel_cavalry_toughness_add:0 "[stationed|E] [camel_cavalry|E] [toughness|E]" + stationed_camel_cavalry_toughness_mult:0 "$stationed_camel_cavalry_toughness_add$" + stationed_camel_cavalry_pursuit_add:0 "[stationed|E] [camel_cavalry|E] [pursuit|E]" + stationed_camel_cavalry_pursuit_mult:0 "$stationed_camel_cavalry_pursuit_add$" + stationed_camel_cavalry_screen_add:0 "[stationed|E] [camel_cavalry|E] [screen|E]" + stationed_camel_cavalry_screen_mult:0 "$stationed_camel_cavalry_screen_add$" + stationed_camel_cavalry_siege_value_add:0 "[stationed|E] [camel_cavalry|E] [siege_progress|E]" + stationed_elephant_cavalry_damage_add:0 "[stationed|E] [elephant_cavalry|E] [damage|E]" + stationed_elephant_cavalry_damage_mult:0 "$stationed_elephant_cavalry_damage_add$" + stationed_elephant_cavalry_toughness_add:0 "[stationed|E] [elephant_cavalry|E] [toughness|E]" + stationed_elephant_cavalry_toughness_mult:0 "$stationed_elephant_cavalry_toughness_add$" + stationed_elephant_cavalry_pursuit_add:0 "[stationed|E] [elephant_cavalry|E] [pursuit|E]" + stationed_elephant_cavalry_pursuit_mult:0 "$stationed_elephant_cavalry_pursuit_add$" + stationed_elephant_cavalry_screen_add:0 "[stationed|E] [elephant_cavalry|E] [screen|E]" + stationed_elephant_cavalry_screen_mult:0 "$stationed_elephant_cavalry_screen_add$" + stationed_elephant_cavalry_siege_value_add:0 "[stationed|E] [elephant_cavalry|E] [siege_progress|E]" + stationed_siege_weapon_damage_add:0 "[stationed|E] [siege_weapon|E] [damage|E]" + stationed_siege_weapon_damage_mult:0 "$stationed_siege_weapon_damage_add$" + stationed_siege_weapon_toughness_add:0 "[stationed|E] [siege_weapon|E] [toughness|E]" + stationed_siege_weapon_toughness_mult:0 "$stationed_siege_weapon_toughness_add$" + stationed_siege_weapon_pursuit_add:0 "[stationed|E] [siege_weapon|E] [pursuit|E]" + stationed_siege_weapon_pursuit_mult:0 "$stationed_siege_weapon_pursuit_add$" + stationed_siege_weapon_screen_add:0 "[stationed|E] [siege_weapon|E] [screen|E]" + stationed_siege_weapon_screen_mult:0 "$stationed_siege_weapon_screen_add$" + stationed_siege_weapon_siege_value_add:0 "[stationed|E] [siege_weapon|E] [siege_progress|E]" + stationed_siege_weapon_siege_value_mult:0 "[stationed|E] [siege_weapon|E] Effectiveness" + stationed_gunpowder_damage_add: "[stationed|E] [gunpowder|E] [damage|E]" + stationed_gunpowder_damage_mult: "$stationed_gunpowder_damage_add$" + stationed_gunpowder_toughness_add: "[stationed|E] [gunpowder|E] [toughness|E]" + stationed_gunpowder_toughness_mult: "$stationed_gunpowder_toughness_add$" + stationed_gunpowder_pursuit_add: "[stationed|E] [gunpowder|E] [pursuit|E]" + stationed_gunpowder_pursuit_mult: "$stationed_gunpowder_pursuit_add$" + stationed_gunpowder_screen_add: "[stationed|E] [gunpowder|E] [screen|E]" + stationed_gunpowder_screen_mult: "$stationed_gunpowder_screen_add$" + stationed_gunpowder_siege_value_add: "[stationed|E] [gunpowder|E] [siege_progress|E]" + stationed_gunpowder_siege_value_mult: "[stationed|E] [gunpowder|E] Effectiveness" + + river_crossing_modifier:0 "River crossing" + attacker_river_crossing_modifier:0 "River crossing" + major_river_crossing_modifier:0 "Major River crossing" + attacker_major_river_crossing_modifier:0 "Major River crossing" + high_ground_modifier:0 "High Ground" + rousing_speech_modifier:0 "Rousing Speech" + sleeping_camp_modifier:0 "Sleeping Camp" + MODIFIER_NAME_AND_DESC:0 "$NAME$\n $DESC$" + MOD_VASSAL_TAX_CONTRIBUTION_ADD:1 "[vassal|E] [tax|E] [modifier_base_contribution|E]" + MOD_VASSAL_TAX_CONTRIBUTION_MULT:1 "[vassal|E] [tax|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_TAX_CONTRIBUTION_ADD:1 "[intimidated|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_TAX_CONTRIBUTION_MULT:1 "[intimidated|E] [vassal|E] [tax|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_TAX_CONTRIBUTION_ADD:1 "[cowed|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_TAX_CONTRIBUTION_MULT:1 "[cowed|E] [vassal|E] [tax|E] [modifier_contribution|E]" + MOD_VASSAL_LEVY_CONTRIBUTION_ADD:1 "[vassal|E] [levy|E] [modifier_base_contribution|E]" + MOD_VASSAL_LEVY_CONTRIBUTION_MULT:1 "[vassal|E] [levy|E] [modifier_contribution|E]" + tribal_government_levy_contribution_mult:0 "[tribal|E] $MOD_VASSAL_LEVY_CONTRIBUTION_MULT$" + MOD_INTIMIDATED_VASSAL_LEVY_CONTRIBUTION_ADD:1 "[intimidated|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_LEVY_CONTRIBUTION_MULT:1 "[intimidated|E] [vassal|E] [levy|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_LEVY_CONTRIBUTION_ADD:1 "[cowed|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_LEVY_CONTRIBUTION_MULT:1 "[cowed|E] [vassal|E] [levy|E] [modifier_contribution|E]" + MOD_VASSAL_HERD_CONTRIBUTION_ADD: "[vassal|E] [herd|E] [modifier_base_contribution|E]" + MOD_VASSAL_HERD_CONTRIBUTION_MULT: "[vassal|E] [herd|E] [modifier_contribution|E]" + MOD_VASSAL_HERDER_CONTRIBUTION_ADD: "[vassal|E] [herd|E] [modifier_base_contribution|E]" + MOD_VASSAL_HERDER_CONTRIBUTION_MULT: "[vassal|E] [herd|E] [modifier_contribution|E]" + MOD_VASSAL_PRESTIGE_CONTRIBUTION_ADD: "[vassal|E] [prestige|E] [modifier_base_contribution|E]" + MOD_VASSAL_PRESTIGE_CONTRIBUTION_MULT: "[vassal|E] [prestige|E] [modifier_contribution|E]" + MOD_VASSAL_PIETY_CONTRIBUTION_ADD: "[vassal|E] [piety|E] [modifier_base_contribution|E]" + MOD_VASSAL_PIETY_CONTRIBUTION_MULT: "[vassal|E] [piety|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_HERD_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [herd|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_HERD_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [herd|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_PRESTIGE_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [prestige|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_PRESTIGE_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [prestige|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_PIETY_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [piety|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_PIETY_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [piety|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_HERD_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [herd|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_HERD_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [herd|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_PRESTIGE_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [prestige|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_PRESTIGE_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [prestige|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_PIETY_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [piety|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_PIETY_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [piety|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_TAX_CONTRIBUTION_ADD:2 "[powerful_vassal|E] [councillor|E] [tax|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_TAX_CONTRIBUTION_MULT:1 "[powerful_vassal|E] [councillor|E] [tax|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_LEVY_CONTRIBUTION_ADD:2 "[powerful_vassal|E] [councillor|E] [levy|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_LEVY_CONTRIBUTION_MULT:1 "[powerful_vassal|E] [councillor|E] [levy|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_HERD_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [herd|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_HERD_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [herd|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_PRESTIGE_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [prestige|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_PRESTIGE_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [prestige|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_PIETY_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [piety|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_PIETY_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [piety|E] [modifier_contribution|E]" + MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[intimidated|E] [vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_INTIMIDATED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[intimidated|E] [vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[cowed|E] [vassal|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_COWED_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[cowed|E] [vassal|E] [trade_goods|E] [modifier_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_ADD: "[powerful_vassal|E] [councillor|E] [trade_goods|E] [modifier_base_contribution|E]" + MOD_HAPPY_POWERFUL_VASSAL_BARTER_GOODS_CONTRIBUTION_MULT: "[powerful_vassal|E] [councillor|E] [trade_goods|E] [modifier_contribution|E]" + republic_government_tax_contribution_add:1 "[republican|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + republic_government_tax_contribution_mult:1 "[republican|E] [vassal|E] [tax|E] [modifier_contribution|E]" + meritocratic_government_tax_contribution_add: "[meritocratic|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + meritocratic_government_tax_contribution_mult: "[meritocratic|E] [vassal|E] [tax|E] [modifier_contribution|E]" + steppe_admin_government_tax_contribution_add: "[steppe_admin|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + steppe_admin_government_tax_contribution_mult: "[steppe_admin|E] [vassal|E] [tax|E] [modifier_contribution|E]" + theocracy_government_tax_contribution_add:1 "[theocracy|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + theocracy_government_tax_contribution_mult:1 "[theocracy|E] [vassal|E] [tax|E] [modifier_contribution|E]" + theocracy_government_levy_contribution_add: "[theocracy|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + theocracy_government_levy_contribution_mult: "[theocracy|E] [vassal|E] [levy|E] [modifier_contribution|E]" + feudal_government_tax_contribution_add:0 "[feudal|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + feudal_government_tax_contribution_mult:0 "[feudal|E] [vassal|E] [tax|E] [modifier_contribution|E]" + clan_government_tax_contribution_add: "[clan|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + clan_government_tax_contribution_mult: "[clan|E] [vassal|E] [tax|E] [modifier_contribution|E]" + clan_government_levy_contribution_add: "[clan|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + clan_government_levy_contribution_mult: "[clan|E] [vassal|E] [levy|E] [modifier_contribution|E]" + tribal_government_tax_contribution_add: "[tribal|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + tribal_government_tax_contribution_mult: "[tribal|E] [vassal|E] [tax|E] [modifier_contribution|E]" + nomad_government_levy_contribution_add: "[nomad|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + nomad_government_levy_contribution_mult: "[nomad|E] [vassal|E] [tax|E] [modifier_contribution|E]" + MOD_SCHEME_PHASE_DURATION: "[scheme_speed|E]" + MOD_SCHEME_RESISTANCE:0 "Scheme Resistance" + MOD_HOSTILE_SCHEME_PHASE_DURATION_ADD: "[scheme_hostile|E] [scheme_speed|E]" + MOD_CONTRACT_SCHEME_PHASE_DURATION_ADD: "[task_contract|E] [scheme_speed|E]" + MOD_PERSONAL_SCHEME_PHASE_DURATION_ADD: "[personal|E] [scheme_speed|E]" + MOD_POLITICAL_SCHEME_PHASE_DURATION_ADD: "[political|E] [scheme_speed|E]" + MOD_ENEMY_HOSTILE_SCHEME_PHASE_DURATION_ADD: "Enemy $MOD_HOSTILE_SCHEME_PHASE_DURATION_ADD$" + MOD_ENEMY_CONTRACT_SCHEME_PHASE_DURATION_ADD: "Enemy $MOD_CONTRACT_SCHEME_PHASE_DURATION_ADD$" + MOD_ENEMY_PERSONAL_SCHEME_PHASE_DURATION_ADD: "Enemy $MOD_PERSONAL_SCHEME_PHASE_DURATION_ADD$" + MOD_ENEMY_POLITICAL_SCHEME_PHASE_DURATION_ADD: "Enemy $MOD_POLITICAL_SCHEME_PHASE_DURATION_ADD$" + MOD_HEALTH:0 "[health|E]" + MOD_CHILD_HEALTH: "[child_health|E]" + MOD_ADULT_HEALTH: "[adult_health|E]" + MOD_ELDERLY_HEALTH: "[elderly_health|E]" + NOT_MOD_HEALTH:0 "$MOD_HEALTH$" + MOD_HEALTH_NEGATE_PENALTY:0 "Disease Resistance ([health|E])" + MOD_MONTHLY_INCOME:0 "[tax|E]" + MOD_MONTHLY_INCOME_MULT:0 "Monthly [income|E]" + MOD_MONTHLY_WAR_INCOME_ADD: "[gold|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_INCOME_MULT: "Monthly [gold|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_PRESTIGE_INCOME_ADD: "[prestige|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_PRESTIGE_INCOME_MULT: "Monthly [prestige|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_PIETY_INCOME_ADD: "[piety|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_PIETY_INCOME_MULT: "Monthly [piety|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_INFLUENCE_INCOME_ADD: "[influence|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_INFLUENCE_INCOME_MULT: "Monthly [influence|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_MERIT_INCOME_ADD: "[merit|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_MERIT_INCOME_MULT: "Monthly [merit|E] [income|E] while at [war|E]" + MOD_MONTHLY_INCOME_PER_STRESS_LEVEL_ADD:0 "[income|E] per [stress_level|E]" + MOD_MONTHLY_INCOME_PER_STRESS_LEVEL_MULT:0 "Monthly [income|E] per [stress_level|E]" + MOD_MONTHLY_INCOME_FROM_HERD_MULT: "Monthly [income|E] from [herd|E]" + MOD_MONTHLY_TREASURY_FROM_VASSALS: "[treasury|E] from [vassals|E]" + MOD_MONTHLY_TREASURY_FROM_VASSALS_MULT: "[treasury|E] from [vassals|E]" + MOD_MONTHLY_TREASURY_FROM_NON_VASSALS: "[treasury|E] excluding [vassals|E]" + MOD_MONTHLY_TREASURY_FROM_NON_VASSALS_MULT: "[treasury|E] excluding [vassals|E]" + MOD_MONTHLY_TREASURY_FROM_LIEGE_ADD: "Monthly [treasury|E]" + MOD_MONTHLY_TREASURY_FROM_LIEGE_MULT: "Monthly [treasury|E]" + MOD_TREASURY_MINISTRY_BUDGET_ALLOCATION: "[treasury_ministry_budget|E] Allocation" + MOD_TREASURY_SALARY_BUDGET_ALLOCATION: "[treasury_salary_budget|E] Allocation" + MOD_TREASURY_MILITARY_BUDGET_ALLOCATION: "[treasury_military_budget|E] Allocation" + MOD_MONTHLY_TREASURY_FROM_MINISTRY_BUDGET_BASE: "Monthly [treasury_ministry_budget_short|E] [treasury_budget_base_rate_short|E]" + MOD_MONTHLY_TREASURY_FROM_MINISTRY_BUDGET_MULT: "Monthly [treasury_ministry_budget|E]" + MOD_MONTHLY_TREASURY_FROM_SALARY_BUDGET_BASE: "Monthly [treasury_salary_budget_short|E] [treasury_budget_base_rate_short|E]" + MOD_MONTHLY_TREASURY_FROM_SALARY_BUDGET_MULT: "[governor_salary|E]" + MOD_MONTHLY_TREASURY_FROM_MILITARY_BUDGET_BASE: "Monthly [treasury_military_budget_short|E] [treasury_budget_base_rate_short|E]" + MOD_MONTHLY_TREASURY_FROM_MILITARY_BUDGET_MULT: "Monthly [treasury_military_budget|E]" + MOD_MONTHLY_PIETY:0 "[piety|E]" + MOD_MONTHLY_PIETY_GAIN_MULT:0 "Monthly [piety|E]" + MOD_MONTHLY_PIETY_GAIN_PER_HAPPY_POWERFUL_VASSAL_ADD:1 "[piety|E] per [powerful_vassal|E] on the [council|E]" + MOD_MONTHLY_PIETY_GAIN_PER_HAPPY_POWERFUL_VASSAL_MULT:1 "Monthly [piety|E] per [powerful_vassal|E] on the [council|E]" + MOD_MONTHLY_PIETY_GAIN_PER_DREAD_ADD:0 "[piety|E] per [dread|E]" + MOD_MONTHLY_PIETY_GAIN_PER_DREAD_MULT:2 "Monthly [piety|E] per [dread|E]" + MOD_MONTHLY_PIETY_GAIN_PER_KNIGHT_ADD:2 "[piety|E] per [knight|E]" + MOD_MONTHLY_PIETY_GAIN_PER_KNIGHT_MULT:4 "Monthly [piety|E] per [knight|E]" + MOD_MONTHLY_PIETY_GAIN_PER_LEGITIMACY_LEVEL_ADD: "[piety|E] per [legitimacy_level|E]" + MOD_MONTHLY_PIETY_GAIN_PER_LEGITIMACY_LEVEL_MULT: "Monthly [piety|E] per [legitimacy_level|E]" + MOD_MONTHLY_PIETY_GAIN_PER_COURT_POSITION_ADD: "[piety|E] per [court_position|E]" + MOD_MONTHLY_PIETY_GAIN_PER_COURT_POSITION_MULT: "Monthly [piety|E] per [court_position|E]" + MOD_MONTHLY_PRESTIGE:0 "[prestige|E]" + MOD_MONTHLY_PRESTIGE_GAIN_MULT:0 "Monthly [prestige|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_HAPPY_POWERFUL_VASSAL_ADD:1 "[prestige|E] per [powerful_vassal|E] on the [council|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_HAPPY_POWERFUL_VASSAL_MULT:1 "Monthly [prestige|E] per [powerful_vassal|E] on the [council|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_DREAD_ADD:0 "[prestige|E] per [dread|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_DREAD_MULT:0 "Monthly [prestige|E] per [dread|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_KNIGHT_ADD:1 "[prestige|E] per [knight|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_KNIGHT_MULT:1 "Monthly [prestige|E] per [knight|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_LEGITIMACY_LEVEL_ADD: "[prestige|E] per [legitimacy_level|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_LEGITIMACY_LEVEL_MULT: "Monthly [prestige|E] per [legitimacy_level|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_COURT_POSITION_ADD: "[prestige|E] per [court_position|E]" + MOD_MONTHLY_PRESTIGE_GAIN_PER_COURT_POSITION_MULT: "Monthly [prestige|E] per [court_position|E]" + MOD_MONTHLY_PIETY_FROM_BUILDINGS_MULT:0 "Monthly [piety|E] from [buildings|E]" + MOD_MONTHLY_PRESTIGE_FROM_BUILDINGS_MULT:0 "Monthly [prestige|E] from [buildings|E]" + MOD_STRESS_GAIN_MULT:0 "[stress|E] Gain" + MOD_STRESS_LOSS_MULT:0 "[stress|E] Loss" + MOD_MONTHLY_DREAD:0 "[dread|E]" + MOD_DREAD_GAIN_MULT:0 "[dread|E] Gain" + MOD_DREAD_LOSS_MULT:0 "[dread|E] Loss" + MOD_TYRANNY_GAIN_MULT:0 "[tyranny|E] Gain" + MOD_TYRANNY_LOSS_MULT:0 "[tyranny|E] Loss" + MOD_MONTHLY_TYRANNY:0 "Monthly [tyranny|E]" + MOD_DREAD_BASELINE_ADD:0 "Natural [dread|E]" + MOD_DREAD_DECAY_ADD:0 "[dread|E] Decay" + MOD_DREAD_DECAY_MULT:0 "$MOD_DREAD_DECAY_ADD$" + MOD_DREAD_PER_TYRANNY_ADD:0 "[dread|E] Gain per [tyranny|E]" + MOD_DREAD_PER_TYRANNY_MULT:0 "$MOD_DREAD_PER_TYRANNY_ADD$" + MOD_COURT_GRANDEUR_BASELINE:1 "[court_grandeur|E] Bonus" + MOD_MONTHLY_COURT_GRANDEUR_CHANGE_ADD:0 "Monthly [court_grandeur|E] Change" + MOD_MONTHLY_COURT_GRANDEUR_CHANGE_MULT:0 "$MOD_MONTHLY_COURT_GRANDEUR_CHANGE_ADD$" + MOD_GENERAL_OPINION:0 "General Opinion" + MOD_GENERAL_OPINION_WITH_VALUE:0 "General Opinion: $VALUE|+=0$" + MOD_MONTHLY_INCOME_PREFIX:0 "[gold_i]" + MOD_MONTHLY_INCOME_MULT_PREFIX:0 "[gold_i]" + MOD_MONTHLY_HERD_PREFIX:0 "[herd_i]" + MOD_MONTHLY_HERD_MULT_PREFIX:0 "[herd_i]" + MOD_MONTHLY_TREASURY_PREFIX: "[treasury_i]" + MOD_MONTHLY_TREASURY_MULT_PREFIX: "[treasury_i]" + MOD_DEVELOPMENT_PREFIX:0 "[development_i]" + MOD_LEGEND_PREFIX: "[legend_i]" + MOD_PLAGUE_PREFIX: "[epidemic_i]" + MOD_LEGITIMACY_PREFIX: "[legitimacy_i]" + MOD_KNIGHT_PREFIX:0 "[knight_i]" + MOD_GOLD_PREFIX:0 "[gold_i]" + MOD_PIETY_PREFIX:0 "[piety_i]" + MOD_PRESTIGE_PREFIX:0 "[prestige_i]" + MOD_SOLDIER_PREFIX:0 "[soldier_i]" + MOD_MONTHLY_PIETY_PREFIX:0 "[piety_i]" + MOD_MONTHLY_PIETY_GAIN_MULT_PREFIX:0 "[piety_i]" + MOD_MONTHLY_PRESTIGE_PREFIX:0 "[prestige_i]" + MOD_MONTHLY_PRESTIGE_GAIN_MULT_PREFIX:1 "[prestige_i]" + MOD_TIME_PREFIX:0 "@time_icon!" + MOD_STRESS_GAIN_PREFIX:0 "[stress_gain_i]" + MOD_STRESS_LOSS_PREFIX:0 "[stress_loss_i]" + MOD_MONTHLY_DREAD_PREFIX:0 "@dread_icon!" + MOD_MONTHLY_POSTFIX:0 "/month" + MOD_MAX_PERSONAL_SCHEMES_ADD:0 "Max [personal_schemes|E]" + MOD_MAX_POLITICAL_SCHEMES_ADD: "Max [political_schemes|E]" + MOD_MAX_CONTRACT_SCHEMES_ADD:0 "Max [contract_schemes|E]" + MOD_MAX_HOSTILE_SCHEMES_ADD:0 "Max [hostile_schemes|E]" + MOD_OWNED_PERSONAL_SCHEME_SUCCESS_ADD: "Initial [personal_scheme|E] [success_chance|E]" + MOD_OWNED_POLITICAL_SCHEME_SUCCESS_ADD: "Initial [political_scheme|E] [success_chance|E]" + MOD_OWNED_CONTRACT_SCHEME_SUCCESS_ADD: "Initial [contract_scheme|E] [success_chance|E]" + MOD_OWNED_HOSTILE_SCHEME_SUCCESS_ADD: "Initial [hostile_scheme|E] [success_chance|E]" + MOD_ENEMY_PERSONAL_SCHEME_SUCCESS_ADD: "Initial Enemy [personal_scheme|E] [success_chance|E]" + MOD_ENEMY_POLITICAL_SCHEME_SUCCESS_ADD: "Initial Enemy [political_scheme|E] [success_chance|E]" + MOD_ENEMY_CONTRACT_SCHEME_SUCCESS_ADD: "Initial Enemy [contract_scheme|E] [success_chance|E]" + MOD_ENEMY_HOSTILE_SCHEME_SUCCESS_ADD: "Initial Enemy [hostile_scheme|E] [success_chance|E]" + MOD_OWNED_PERSONAL_SCHEME_SUCCESS_GROWTH_ADD: "[personal_scheme|E] [scheme_growth_growth|E]" + MOD_OWNED_POLITICAL_SCHEME_SUCCESS_GROWTH_ADD: "[political_scheme|E] [scheme_growth_growth|E]" + MOD_OWNED_CONTRACT_SCHEME_SUCCESS_GROWTH_ADD: "[contract_scheme|E] [scheme_growth_growth|E]" + MOD_OWNED_HOSTILE_SCHEME_SUCCESS_GROWTH_ADD: "[hostile_scheme|E] [scheme_growth_growth|E]" + MOD_ENEMY_PERSONAL_SCHEME_SUCCESS_GROWTH_ADD: "Enemy [personal_scheme|E] [scheme_growth_growth|E]" + MOD_ENEMY_POLITICAL_SCHEME_SUCCESS_GROWTH_ADD: "Enemy [political_scheme|E] [scheme_growth_growth|E]" + MOD_ENEMY_CONTRACT_SCHEME_SUCCESS_GROWTH_ADD: "Enemy [contract_scheme|E] [scheme_growth_growth|E]" + MOD_ENEMY_HOSTILE_SCHEME_SUCCESS_GROWTH_ADD: "Enemy [hostile_scheme|E] [scheme_growth_growth|E]" + MOD_SCHEME_SUCCESS_GROWTH: "[scheme_growth|E]" + MOD_OWNED_PERSONAL_SCHEME_SUCCESS_MAX_ADD: "[personal_scheme|E] [scheme_potential_potential|E]" + MOD_OWNED_POLITICAL_SCHEME_SUCCESS_MAX_ADD: "[political_scheme|E] [scheme_potential_potential|E]" + MOD_OWNED_CONTRACT_SCHEME_SUCCESS_MAX_ADD: "[contract_scheme|E] [scheme_potential_potential|E]" + MOD_OWNED_HOSTILE_SCHEME_SUCCESS_MAX_ADD: "[hostile_scheme|E] [scheme_potential_potential|E]" + MOD_ENEMY_PERSONAL_SCHEME_SUCCESS_MAX_ADD: "Enemy [personal_scheme|E] [scheme_potential_potential|E]" + MOD_ENEMY_POLITICAL_SCHEME_SUCCESS_MAX_ADD: "Enemy [political_scheme|E] [scheme_potential_potential|E]" + MOD_ENEMY_CONTRACT_SCHEME_SUCCESS_MAX_ADD: "Enemy [contract_scheme|E] [scheme_potential_potential|E]" + MOD_ENEMY_HOSTILE_SCHEME_SUCCESS_MAX_ADD: "Enemy [hostile_scheme|E] [scheme_potential_potential|E]" + MOD_SCHEME_SUCCESS_MAX: "Maximum [success_chance|E]" + MOD_OWNED_SCHEME_SECRECY_ADD:0 "[scheme|E] [secrecy|E]" + MOD_ENEMY_SCHEME_SECRECY_ADD: "Enemy [scheme|E] [secrecy|E]" + MOD_PER_SCHEME_PHASE_POSTFIX: " per [scheme_phase_phase|E]" + MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_POSITIVE: " #weak days slower per [scheme_phase|E]#!" + MOD_DAYS_PER_SCHEME_PHASE_SUFFIX_NEGATIVE: " #weak days faster per [scheme_phase|E]#!" + # Scheme modifiers + murder_trusted_advice_modifier:0 "Trusted Advisor Agent" + murder_trusted_by_target_modifier:0 "Trusted by Target" + scheme_drunkard_murder_target_modifier:0 "Drunkard Target" + scheme_drunkard_murdering_drunkard_modifier:0 "Drunkard Targeting Drunkard" + slothful_reduces_power_modifier:0 "Slothful Agent" + hidden_nooks_and_crannies_modifier:0 "Hidden Nooks and Crannies" + hidden_nooks_and_crannies_architect_modifier:0 "Advanced Hidden Nooks and Crannies" + scheme_hero_agent_modifier:0 "Target Is Indebted to Agent" + scheme_agent_closing_in_modifier:0 "Agent Is Closing In" + scheme_talking_agent_modifier:0 "Target Is Talking to Agent" + scheme_stressed_target_modifier:0 "Target Is Stressed" + scheme_impaired_judgment_modifier:0 "Target's Judgment Is Impaired" + scheme_local_infiltrators_modifier:0 "Local Infiltrators" + scheme_court_chaplain_is_in_modifier:0 "Pious Contacts" + scheme_pious_target_court_chaplain_is_in_modifier:0 "Pious Contacts" + scheme_court_chaplain_is_working_against_modifier:0 "Pious Hindrance" + murder_agent_looking_after_child_target_modifier:0 "Agent Looking After Target" + murder_agent_befriending_child_target_modifier:0 "Agent Befriending Target" + known_incestuous_modifier:0 "Known Incest" + vengeful_lover_kin_modifier:0 "Vengeful Kin" + trimming_dynasty_modifier:0 "Trimming Dynasty" + PROWESS_AGE:0 "Old Age: $MOD|=+$" + men_at_arms_advantage:0 "$men_at_arms$ Tactic" + commander_advantage:0 "Commander Skill" + commander_trait_advantage:0 "Commander Traits" + MODIFIER_TIME_LEFT:2 "#weak Until [DATE.GetString]#!" + MODIFIER_MULTIPLE_INSTANCES:1 "$NAME$ ($NUMBER|V$)" + dungeon:0 "Dungeon" + house_arrest:0 "House Arrest" + MOD_IMPRISONED_RELATIVE_OPINION:0 "Relatives' Opinion of Imprisoner" + supply_state_supplied_advantage:2 "Army is Supplied" + supply_state_running_low_advantage:2 "Army Supply is Running Low" + supply_state_starving_advantage:2 "Army is Starving" + recently_disembarked_advantage:1 "Army is [recently_disembarked|E]" + gathering_army_advantage:0 "Gathering Army" + holding_defender_advantage:0 "Defensive [buildings|E]" + combat_debt_level_0: "Owner is slightly in [debt|E]" + combat_debt_level_1: "Owner is one year in [debt|E]" + combat_debt_level_2: "Owner is two years in [debt|E]" + combat_debt_level_3: "Owner is three years in [debt|E]" + combat_debt_level_4: "Owner is four years in [debt|E]" + combat_debt_level_5: "Owner is over five years in [debt|E]" + combat_debt_level_6: "Owner is over ten years in [debt|E]" + combat_debt_level_7: "Owner is over twenty-five years in [debt|E]" + combat_debt_level_8: "Owner is over fifty years in [debt|E]" + combat_debt_level_9: "Owner is over one hundred years in [debt|E]" + treasury_combat_debt_level_0: "Owner is slightly in [treasury_debt|E]" + treasury_combat_debt_level_1: "Owner is one year in [treasury_debt|E]" + treasury_combat_debt_level_2: "Owner is two years in [treasury_debt|E]" + treasury_combat_debt_level_3: "Owner is three years in [treasury_debt|E]" + treasury_combat_debt_level_4: "Owner is four years in [treasury_debt|E]" + treasury_combat_debt_level_5: "Owner is over five years in [treasury_debt|E]" + treasury_combat_debt_level_6: "Owner is over ten years in [treasury_debt|E]" + treasury_combat_debt_level_7: "Owner is over twenty-five years in [treasury_debt|E]" + treasury_combat_debt_level_8: "Owner is over fifty years in [treasury_debt|E]" + treasury_combat_debt_level_9: "Owner is over one hundred years in [treasury_debt|E]" + combat_debt_level_no_income: "Owner is in [debt|E]" #Special no income + debt_level_0: "Slightly in [debt|E]" + debt_level_1: "One year in [debt|E]" + debt_level_2: "Two years in [debt|E]" + debt_level_3: "Three years in [debt|E]" + debt_level_4: "Four years in [debt|E]" + debt_level_5: "Over five years in [debt|E]" + debt_level_6: "Over ten years in [debt|E]" + debt_level_7: "Over twenty-five years in [debt|E]" + debt_level_8: "Over fifty years in [debt|E]" + debt_level_9: "Over one hundred years in [debt|E]" + treasury_debt_level_0: "Slightly in [treasury_debt|E]" + treasury_debt_level_1: "One year in [treasury_debt|E]" + treasury_debt_level_2: "Two years in [treasury_debt|E]" + treasury_debt_level_3: "Three years in [treasury_debt|E]" + treasury_debt_level_4: "Four years in [treasury_debt|E]" + treasury_debt_level_5: "Over five years in [treasury_debt|E]" + treasury_debt_level_6: "Over ten years in [treasury_debt|E]" + treasury_debt_level_7: "Over twenty-five years in [treasury_debt|E]" + treasury_debt_level_8: "Over fifty years in [treasury_debt|E]" + treasury_debt_level_9: "Over one hundred years in [treasury_debt|E]" + debt_level_no_income: "In [debt|E]" #Special no income + no_embarkation_cost:0 "No Embarkation Cost" + domain_limit_plus_one:0 "Game Rule — Plus One" + domain_limit_plus_two:0 "Game Rule — Plus Two" + domain_limit_plus_three:0 "Game Rule — Plus Three" + domain_limit_minus_one:0 "Game Rule — Minus One" + domain_limit_minus_two:0 "Game Rule — Minus Two" + domain_limit_minus_three:0 "Game Rule — Minus Three" + unreformed_faith_province:2 "[unreformed_pagan_combat_bonus|E]" + MOD_SUPPLY_LIMIT_MULT:0 "[supply_limit|E]" + MOD_SUPPLY_LIMIT:0 "[supply_limit|E]" + MOD_HOLDING_FORT_LEVEL:0 "[fort_level|E]" + MOD_ADDITIONAL_HOLDING_FORT_LEVEL:0 "[fort_level|E]" + MOD_CAPITAL_HOLDING_FORT_LEVEL: "[fort_level|E]" + MOD_CAPITAL_ADDITIONAL_HOLDING_FORT_LEVEL: "[fort_level|E]" + MOD_SUPPLY_CAPACITY_ADD:1 "[command_modifier_i|E][supply|E] Capacity" + MOD_SUPPLY_CAPACITY_MULT:0 "$MOD_SUPPLY_CAPACITY_ADD$" + county_capital_province_modifier:0 "County Capital" + temporary_fort_province_modifier: "Temporary Fortifications" + temporary_fort_province_modifier_desc: "Makeshift fortifications created only for the duration of the ongoing war." + disabled_fort_province_modifier:0 "$MOD_HOLDING_FORT_LEVEL$" + independent_realm_capital_province_modifier:0 "Independent [realm|E] Capital" + high_tier_vassal_capital_province_modifier:0 "High Tier Vassal [realm|E] Capital" + capital_province_modifier:0 "[realm_capital|E]" + nomad_capital_province_modifier: "[GetGovernment( 'nomad_government' ).GetName] [realm_capital|E]" + capital_duchy_province_modifier:0 "[capital_duchy|E]" + coastal_province_modifier:0 "Coastal" + coastal_land_province_modifier:0 "Coastal" + coastal_land_county_capital_province_modifier: "Coastal Capital" + allied_province_modifier:0 "Allied Lands" + occupied_allied_province_modifier:0 "Occupied Allied Lands" + neighbor_allied_province_modifier:0 "Neighboring Allied Lands" + enemy_province_modifier:0 "Enemy Lands" + parliamentary_bureaucracy_modifier:0 "Parliamentary Bureaucracy" + parliamentary_bureaucracy_modifier_desc:0 "A codified and expansive set of laws organizes and empowers members of the Three Estates living in this Holding." + flourishing_culture_modifier:0 "Flourishing Culture" + flourishing_culture_modifier_desc:0 "This Holding is experiencing a boon of population, wealth and art." + hungarian_resettlement_modifier:0 "Christian Settlers" + hungarian_resettlement_modifier_desc:0 "This once wild land is experiencing an unexpected growth due to a steady influx of new settlers coming from nearby realms." + magyar_appreciation_modifier:0 "Magyar Sympathy" + magyar_appreciation_modifier_desc:0 "The local Magyar communities in this Holding are comforted by the support shown by their liege towards their ancient traditions." + modifier_dusgruntled_church:0 "Sabotaged Church-Investment" + modifier_dusgruntled_church_desc:0 "The local church is disgruntled ever since a good opportunity slipped away." + modifier_religious_understanding_modifier:0 "Religious Understanding" + modifier_religious_understanding_modifier_desc:0 "The liege of these lands has shown understanding towards this area's religion." + fertile_desert_mountains_modifier:0 "Al-Yamnat" + fertile_desert_mountains_modifier_desc:0 "Since ancient times the southern part of Arabia has been known as the fertile, or felicitous, Arabia. This region harbors more people and is more arable than the surrounding parts of the peninsula.\nCan build [GetBuilding('cereal_fields_01').GetName]" + dodekapolis_modifier: "Dodekapolis" + dodekapolis_modifier_desc: "Since the age of Homer, when the Aeolian and Ionian colonists disembarked upon the western coast of Anatolia, the 12 cities of the Anatolian coast — the #EMP dodekapolis#! — have stood as shining beacons of civilization and human development.\nCan build [GetBuilding('cereal_fields_01').GetName]" + backwater_county_modifier: "Backwater" + backwater_county_modifier_desc: "The bigger they are, the harder they fall. This county, once the territory of implacable rulers of Hellas, has sadly fallen into ignominy. While currently a shadow of its former self, this county may well rise to greatness once again.\n\n#X @warning_icon! This modifier may be removed using the [GetDecisionWithKey('restore_backwater_counties_decision').GetName] [decision|E] once [development|E] of this [county|E] is #V 50#! or more!#!\n\n" + + dance_plague_modifier:0 "Dancing Plague Downplayed" + dance_plague_modifier_desc:0 "The peasants in this area afflicted with ergotism have had their pleas for help ignored by the rulers of the lands." + + disease_spreading_modifier:0 "Ravaged by Disease" + disease_spreading_modifier_desc:0 "Disease is spreading across these lands" + + winter_none_modifier:1 "No [winter|E]" + winter_mild_modifier:1 "Mild [winter|E]" + winter_normal_modifier:1 "Normal [winter|E]" + winter_harsh_modifier:1 "Harsh [winter|E]" + spurned_by_traders:0 "Spurned by Traders" + elevate_mann_and_the_isles_modifier:0 "Elevated the Kingdom of Mann & the Isles" + extra_building_slot:0 "$MOD_NUM_BUILDING_SLOTS$" + army_fortification_province_modifier:0 "Fortification" + MOD_CONSTRUCTION_SPEED:0 "[building|E] Construction Time" + game_concept_great_project_build_speed: "[great_project|E] Construction Time" + MOD_CONSTRUCTION_GOLD_COST:1 "[building|E] Construction Cost" + plains_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Plains" + farmlands_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Farmlands" + hills_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Hills" + mountains_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Mountains" + desert_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Desert" + desert_mountains_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Desert Mountains" + oasis_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Oasis" + jungle_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Jungle" + forest_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Forest" + taiga_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Taiga" + wetlands_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Wetlands" + steppe_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Steppe" + floodplains_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Floodplains" + drylands_construction_gold_cost:0 "$MOD_CONSTRUCTION_GOLD_COST$ in Drylands" + terraced_hills_construction_gold_cost: "$MOD_CONSTRUCTION_GOLD_COST$ in Terraced Hills" + plains_construction_prestige_cost:0 "$plains_construction_gold_cost$" + farmlands_construction_prestige_cost:0 "$farmlands_construction_gold_cost$" + hills_construction_prestige_cost:0 "$hills_construction_gold_cost$" + mountains_construction_prestige_cost:0 "$mountains_construction_gold_cost$" + desert_construction_prestige_cost:0 "$desert_construction_gold_cost$" + desert_mountains_construction_prestige_cost:0 "$desert_mountains_construction_gold_cost$" + oasis_construction_prestige_cost:0 "$oasis_construction_gold_cost$" + jungle_construction_prestige_cost:0 "$jungle_construction_gold_cost$" + forest_construction_prestige_cost:0 "$forest_construction_gold_cost$" + taiga_construction_prestige_cost:0 "$taiga_construction_gold_cost$" + wetlands_construction_prestige_cost:0 "$wetlands_construction_gold_cost$" + steppe_construction_prestige_cost:0 "$steppe_construction_gold_cost$" + floodplains_construction_prestige_cost:0 "$floodplains_construction_gold_cost$" + drylands_construction_prestige_cost:0 "$drylands_construction_gold_cost$" + MOD_CONSTRUCTION_PIETY_COST:1 "[building|E] Construction Cost" + MONTHLY_DEVELOPMENT_GROWTH:0 "Monthly [development|E] Growth" + FROM_NEIGHTBOURS:0 "From Neighbors" + MOD_MONTHLY_DEVELOPMENT_GROWTH:0 "[development|E] Growth" + MOD_MONTHLY_DEVELOPMENT_DECLINE: "[development|E] Decline" + MOD_CHARACTER_CAPITAL_MONTHLY_DEVELOPMENT_GROWTH_ADD:0 "[development|E] Growth in [realm_capital|E]" + MOD_CHARACTER_CAPITAL_MONTHLY_CONTROL_ADD: "[control|E] in [realm_capital|E]" + MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR:1 "[development|E] Growth" + MOD_MONTHLY_DEVELOPMENT_DECLINE_FACTOR: "[development|E] Decline" + plains_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Plains" + farmlands_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Farmlands" + hills_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Hills" + mountains_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Mountains" + desert_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Desert" + desert_mountains_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Desert Mountains" + oasis_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Oasis" + jungle_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Jungle" + forest_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Forest" + taiga_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Taiga" + wetlands_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Wetlands" + steppe_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Steppe" + floodplains_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Floodplains" + drylands_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH$ in Drylands" + plains_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Plains" + farmlands_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Farmlands" + hills_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Hills" + mountains_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Mountains" + desert_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Desert" + desert_mountains_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Desert Mountains" + oasis_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Oasis" + jungle_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Jungle" + forest_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Forest" + taiga_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Taiga" + wetlands_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Wetlands" + steppe_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Steppe" + floodplains_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Floodplains" + drylands_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Drylands" + terraced_hills_development_growth_factor: "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in Terraced Hills" + world_steppe_development_growth_factor:1 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in the [GetGeographicalRegion('world_steppe').GetName] [region|E]" + COUNTY_PROVINCE_MODIFIER: "[PROVINCE.GetHolding.GetName]" + COUNTY_CAPITAL_PROVINCE_MODIFIER: "$COUNTY_PROVINCE_MODIFIER$ ([county_capital|E])" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH:0 "[control|E] Growth" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH_EVEN_IF_BARON:0 "$MOD_MONTHLY_COUNTY_CONTROL_GROWTH$" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH_FACTOR:1 "[control|E] Growth" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH_FACTOR_EVEN_IF_BARON:0 "$MOD_MONTHLY_COUNTY_CONTROL_GROWTH_FACTOR$" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH_AT_WAR:0 "[control|E] Growth when at [war|E]" + MOD_MONTHLY_COUNTY_CONTROL_GROWTH_FACTOR_AT_WAR:0 "[control|E] Growth when at [war|E]" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE: "[control|E] Decline" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE_EVEN_IF_BARON: "$MOD_MONTHLY_COUNTY_CONTROL_DECLINE$" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE_FACTOR: "[control|E] Decline" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE_FACTOR_EVEN_IF_BARON: "$MOD_MONTHLY_COUNTY_CONTROL_DECLINE_FACTOR$" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE_AT_WAR: "[control|E] Decline when at [war|E]" + MOD_MONTHLY_COUNTY_CONTROL_DECLINE_FACTOR_AT_WAR: "[control|E] Decline when at [war|E]" + MOD_CONSTRUCTION_PRESTIGE_COST:1 "[building|E] Construction Cost" + MOD_CONSTRUCTION_HERD_COST: "[building|E] Construction Cost" + MOD_DOMAIN_LIMIT:0 "[domain_limit|E]" + MOD_DOMAIN_LIMIT_WITH_VALUE:0 "[domain_limit|E]: $VALUE|0=+$" + MOD_DOMAIN_LIMIT_MIN: "Minimum [domain_limit|E]" + MOD_DOMAIN_LIMIT_MAX: "Maximum [domain_limit|E]" + MOD_VASSAL_LIMIT:0 "[vassal_limit|E]" + MOD_VASSAL_LIMIT_MIN: "Minimum [vassal_limit|E]" + MOD_VASSAL_LIMIT_MAX: "Maximum [vassal_limit|E]" + MOD_LEVY_SIZE:0 "[levy|E] Size" + MOD_GARRISON_SIZE:0 "[garrison|E] Size" + MOD_RELIGIOUS_HEAD_OPINION:0 "[head_of_faith|E] Opinion" + MOD_SAME_FAITH_OPINION:0 "Same [faith|E] Opinion" + MOD_DIFFERENT_FAITH_OPINION:0 "Different [faith|E] Opinion" + MOD_OPINION_OF_SAME_FAITH:0 "Opinion of Same [faith|E]" + MOD_OPINION_OF_DIFFERENT_FAITH:0 "Opinion of Different [faiths|E]" + MOD_SAME_CULTURE_OPINION:0 "Same [culture|E] Opinion" + MOD_DIFFERENT_CULTURE_OPINION:0 "Different [culture|E] Opinion" + MOD_OPINION_OF_SAME_CULTURE:0 "Opinion of Same [culture|E]" + MOD_OPINION_OF_DIFFERENT_CULTURE:0 "Opinion of Different [cultures|E]" + MOD_IGNORE_NEGATIVE_CULTURE_OPINION:0 "Ignore Negative [culture|E] Opinion" + MOD_IGNORE_NEGATIVE_OPINION_OF_CULTURE:0 "No Negative Opinion of Other [cultures|E]" + MOD_IGNORE_DIFFERENT_FAITH_OPINION:0 "Ignore Different [faith|E] Opinion" + MOD_IGNORE_OPINION_OF_DIFFERENT_FAITH:0 "No Negative Opinion of Other [faiths|E]" + MOD_RELIGIOUS_VASSAL_OPINION:0 "Religious [vassal|E] Opinion" + MOD_DIRECT_VASSAL_OPINION:0 "[direct_vassal|E] Opinion" + MOD_FELLOW_VASSAL_OPINION:0 "Fellow [vassal|E] Opinion" + MOD_FELLOW_TRIBUTARY_OPINION: "Fellow [tributary|E] Opinion" + MOD_FELLOW_CONFEDERATION_MEMBER_OPINION: "Fellow [confederation|E] Member Opinion" + theocracy_government_opinion_same_faith:1 "[theocracy_i|E] [theocratic|E] Ruler of Same [faith|E] Opinion" + clan_government_opinion_same_faith:0 "[clan_i|E] [clan|E] Ruler of Same [faith|E] Opinion" + mandala_government_opinion_same_faith: "[mandala_i|E] [mandala|E] Ruler of Same [faith|E] Opinion" + theocracy_government_opinion:0 "[theocracy_i|E] [theocratic|E] Ruler Opinion" + republic_government_opinion:0 "[republic_i|E] [republican|E] Ruler Opinion" + tribal_government_opinion:0 "[tribal_i|E] [tribal|E] Ruler Opinion" + feudal_government_opinion:0 "[feudal_i|E] [feudal|E] Ruler Opinion" + administrative_government_opinion: "[administrative_i|E] [administrative|E] Ruler Opinion" + landless_adventurer_government_opinion: "[adventurer_i|E] [adventurer|E] Opinion" + MOD_INDEPENDENT_RULER_OPINION:0 "Independent Ruler Opinion" + MOD_OPINION_OF_LIEGE:0 "Opinion of [liege|E]" + MOD_OPINION_OF_SUZERAIN: "Opinion of [suzerain|E]" + MOD_OPINION_OF_PARENTS:0 "Opinion of Parents" + MOD_OPINION_OF_VASSAL:0 "Opinion of [vassals|E]" + MOD_OPINION_OF_TRIBUTARY: "Opinion of [tributary|E]" + MOD_OPINION_OF_DIFFERENT_FAITH_LIEGE:1 "Opinion of Different [faith|E] [liege|E]" + MOD_OPINION_OF_DIFFERENT_FAITH_SUZERAIN: "Opinion of Different [faith|E] [suzerain|E]" + MOD_SPOUSE_OPINION:0 "[spouse|E] Opinion" + MOD_TWIN_OPINION:0 "Twin Opinion" + MOD_CLOSE_RELATIVE_OPINION:0 "[close_family|E] Opinion" + MOD_DYNASTY_HOUSE_OPINION:0 "[house|E] Opinion" + MOD_DYNASTY_OPINION:0 "[dynasty|E] Opinion" + MOD_LIEGE_OPINION:0 "[liege|E] Opinion" + MOD_SUZERAIN_OPINION: "[suzerain|E] Opinion" + MOD_DIFFERENT_FAITH_LIEGE_OPINION:0 "Different [faith|E] [liege|E] Opinion" + MOD_DIFFERENT_FAITH_SUZERAIN_OPINION:0 "Different [faith|E] [suzerain|E] Opinion" + MOD_VASSAL_OPINION:0 "[vassal|E] Opinion" + MOD_TRIBUTARY_OPINION:0 "[tributary|E] Opinion" + MOD_CLERGY_OPINION:0 "[clergy|E] Opinion" + MOD_COUNCILLOR_OPINION:0 "[councillor|E] Opinion" + MOD_REALM_PRIEST_OPINION:0 "[realm_priest|E] Opinion" + MOD_POWERFUL_VASSAL_OPINION:0 "[powerful_vassal|E] Opinion" + MOD_COURTIER_OPINION:0 "[SelectLocalization(IsLandlessAdventurer( GetPlayer ), 'mod_follower_opinion_desc', 'mod_courtier_opinion_desc')] Opinion" + mod_courtier_opinion_desc: "[courtier|E]" + mod_follower_opinion_desc: "[follower|E]" + MOD_GUEST_OPINION:0 "[guest|E] Opinion" + MOD_COURTIER_AND_GUEST_OPINION:0 "[courtier|E] and [guest|E] Opinion" + MOD_PRISONER_OPINION:0 "[prisoner|E] Opinion" + MOD_PLAYER_HEIR_OPINION:0 "[player_heir|E] Opinion" + MOD_CHILD_OPINION:0 "Child Opinion" + MOD_CHILD_EXCEPT_PLAYER_HEIR_OPINION:0 "Child Opinion" + MOD_ELIGIBLE_CHILD_OPINION:0 "[eligible_child|E] Opinion" + MOD_ELIGIBLE_CHILD_EXCEPT_PLAYER_HEIR_OPINION:0 "[eligible_child|E] Opinion" + MOD_TRAVEL_COMPANION_OPINION:0 "Travel Companion Opinion" + clan_government_vassal_opinion:0 "[clan_i|E] [clan|E] [vassal|E] Opinion" + feudal_government_vassal_opinion:0 "[feudal_i|E] [feudal|E] [vassal|E] Opinion" + republic_government_vassal_opinion:0 "[republic_i|E] [republic|E] [vassal|E] Opinion" + mercenary_government_vassal_opinion:0 "[mercenary_i|E] [mercenary|E] [vassal|E] Opinion" + holy_order_government_vassal_opinion:0 "[holy_order_i|E] [holy_order|E] [vassal|E] Opinion" + theocracy_government_vassal_opinion:0 "[theocracy_i|E] [theocracy|E] [vassal|E] Opinion" + tribal_government_vassal_opinion:0 "[tribal_i|E] [tribal|E] [vassal|E] Opinion" + nomad_government_vassal_opinion: "[nomad_i|E] [nomad|E] [vassal|E] Opinion" + administrative_government_vassal_opinion: "[administrative|E] [vassal|E] Opinion" + MOD_DOMAIN_TAX_MULT:1 "[domain|E] [taxes|E]" + MOD_DOMAIN_TAX_MULT_EVEN_IF_BARON:0 "$MOD_DOMAIN_TAX_MULT$" + MOD_DOMAIN_TAX_SAME_FAITH_MULT:1 "[domain|E] [taxes|E] (Same [faith|E])" + MOD_DOMAIN_TAX_SAME_FAITH_MULT_EVEN_IF_BARON:0 "$MOD_DOMAIN_TAX_SAME_FAITH_MULT$" + MOD_DOMAIN_TAX_DIFFERENT_FAITH_MULT:1 "[domain|E] [taxes|E] (Different [faith|E])" + MOD_DOMAIN_TAX_DIFFERENT_FAITH_MULT_EVEN_IF_BARON:0 "$MOD_DOMAIN_TAX_DIFFERENT_FAITH_MULT$" + MOD_VASSAL_TAX_MULT:1 "[vassal|E] [taxes|E]" + MOD_TRIBUTARY_TAX_MULT:1 "[tributary|E] [taxes|E]" + MOD_TRIBUTARY_PIETY_CONTRIBUTION_MULT: "[tributary|E] [piety|E] contributions" + MOD_DIPLOMACY_SCHEME_PHASE_DURATION: "[diplomacy_i]Diplomatic [scheme_speed|E]" + MOD_INTRIGUE_SCHEME_PHASE_DURATION: "[intrigue_i]Intrigue [scheme_speed|E]" + MOD_STEWARDSHIP_SCHEME_PHASE_DURATION: "[stewardship_i]Stewardship [scheme_speed|E]" + MOD_MARTIAL_SCHEME_PHASE_DURATION: "[martial_i]Martial [scheme_speed|E]" + MOD_PROWESS_SCHEME_PHASE_DURATION: "[prowess_i]Prowess [scheme_speed|E]" + MOD_LEARNING_SCHEME_PHASE_DURATION: "[learning_i]Learning [scheme_speed|E]" + MOD_DIPLOMACY_SCHEME_RESISTANCE:1 "Diplomatic [scheme_resistance|E]" + MOD_INTRIGUE_SCHEME_RESISTANCE:1 "Intrigue [scheme_resistance|E]" + MOD_STEWARDSHIP_SCHEME_RESISTANCE:1 "Stewardship [scheme_resistance|E]" + MOD_MARTIAL_SCHEME_RESISTANCE:1 "Martial [scheme_resistance|E]" + MOD_PROWESS_SCHEME_RESISTANCE:1 "Prowess [scheme_resistance|E]" + MOD_LEARNING_SCHEME_RESISTANCE:1 "Learning [scheme_resistance|E]" + MOD_SCHEME_DISCOVERY_CHANCE_MULT:2 "[scheme_discovery_chance|E]" + MOD_HOLDING_CONSTRUCTION_SPEED:0 "[holding|E] Construction Time" + MOD_HOLDING_CONSTRUCTION_GOLD_COST:1 "[holding|E] Construction Cost" + plains_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Plains" + farmlands_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Farmlands" + hills_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Hills" + mountains_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Mountains" + desert_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Desert" + desert_mountains_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Desert Mountains" + oasis_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Oasis" + jungle_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Jungle" + forest_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Forest" + taiga_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Taiga" + wetlands_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Wetlands" + steppe_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Steppe" + floodplains_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Floodplains" + drylands_holding_construction_gold_cost:0 "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Drylands" + terraced_hills_holding_construction_gold_cost: "$MOD_HOLDING_CONSTRUCTION_GOLD_COST$ in Terraced Hills" + plains_holding_construction_prestige_cost:0 "$plains_holding_construction_gold_cost$" + farmlands_holding_construction_prestige_cost:0 "$farmlands_holding_construction_gold_cost$" + hills_holding_construction_prestige_cost:0 "$hills_holding_construction_gold_cost$" + mountains_holding_construction_prestige_cost:0 "$mountains_holding_construction_gold_cost$" + desert_holding_construction_prestige_cost:0 "$desert_holding_construction_gold_cost$" + desert_mountains_holding_construction_prestige_cost:0 "$desert_mountains_holding_construction_gold_cost$" + oasis_holding_construction_prestige_cost:0 "$oasis_holding_construction_gold_cost$" + jungle_holding_construction_prestige_cost:0 "$jungle_holding_construction_gold_cost$" + forest_holding_construction_prestige_cost:0 "$forest_holding_construction_gold_cost$" + taiga_holding_construction_prestige_cost:0 "$taiga_holding_construction_gold_cost$" + wetlands_holding_construction_prestige_cost:0 "$wetlands_holding_construction_gold_cost$" + steppe_holding_construction_prestige_cost:0 "$steppe_holding_construction_gold_cost$" + floodplains_holding_construction_prestige_cost:0 "$floodplains_holding_construction_gold_cost$" + drylands_holding_construction_prestige_cost:0 "$drylands_holding_construction_gold_cost$" + MOD_HOLDING_CONSTRUCTION_PIETY_COST:1 "[holding|E] Construction Cost" + MOD_HOLDING_CONSTRUCTION_PRESTIGE_COST:1 "[holding|E] Construction Cost" + MOD_TAX_MULT:1 "[holding|E] [taxes|E]" + MOD_MEN_AT_ARMS_RECRUITMENT_COST:0 "[men_at_arms|E] Recruitment Cost" + MOD_MEN_AT_ARMS_MAINTENANCE:0 "[men_at_arms|E] Maintenance" + MOD_MEN_AT_ARMS_MAINTENANCE_PER_DREAD_MULT:0 "[men_at_arms|E] Maintenance per [dread|E]" + MOD_ARMY_MAINTENANCE_MULT:1 "[army|E] Gold Maintenance" + MOD_MEN_AT_ARMS_LIMIT:0 "Size of [men_at_arms|E] [regiments|E]" + MOD_MEN_AT_ARMS_TITLE_LIMIT: "Size of [title_men_at_arms|E] [regiments|E]" + MOD_MEN_AT_ARMS_CAP:0 "Max [men_at_arms|E] [regiments|E]" + MOD_MEN_AT_ARMS_TITLE_CAP: "Max [title_men_at_arms|E] [regiments|E]" + MOD_SHORT_REIGN_DURATION_MULT:0 "[short_reign|E] Duration" + MOD_LONG_REIGN_BONUS_MULT:0 "[long_reign|E] Bonus" + MOD_DIPLOMATIC_RANGE_MULT:0 "[diplomatic_range|E]" + MOD_EMBARKATION_COST_MULT:0 "[embarkation|E] Cost" + MOD_NAVAL_MOVEMENT_SPEED_MULT:0 "Naval Speed" + MOD_INBREEDING_CHANCE:0 "[inbreeding|E] Chance" + MOD_OPINION_OF_FEMALE_RULERS:0 "Opinion of Female Rulers" + MOD_OPINION_OF_MALE_RULERS:0 "Opinion of Male Rulers" + OPINION_SAME_FAITH:0 "Same [faith|E]" + OPINION_HOSTILE_FAITH:0 "[FAITH.GetName] is $LEVEL$" + OPINION_HOSTILE_FAITH_MODIFIED:0 "[FAITH.GetName] is $LEVEL$ (modified by [doctrines|E])" + OPINION_HOSTILE_FAITH_COUNTY:0 "Fervor ($FERVOR|0V%/$) and [FAITH.GetName] is $LEVEL$" + OPINION_DIVINE_MARRIAGE:0 "Divine Marriage" + NEGATED_SKILL_PENALTY_HEADER:1 "\n#weak Negating $ACTUAL_NEGATION|P$/$MAX_NEGATION|P$ penalties:#!" + MOD_COUNTY_OPINION_ADD:0 "[county_opinion|E]" + MOD_COUNTY_OPINION_ADD_EVEN_IF_BARON:0 "$MOD_COUNTY_OPINION_ADD$" + MOD_COUNTY_OPINION_DIFFERENT_FAITH_MULT:0 "Different [faith|E] [county_opinion|E]" + MOD_COUNTY_OPINION_DIFFERENT_FAITH_MULT_EVEN_IF_BARON:0 "$MOD_COUNTY_OPINION_DIFFERENT_FAITH_MULT$" + MOD_CULTURE_MERCENARY_MULT:2 "Available [mercenary|E] Companies" + MOD_CULTURAL_FASCINATION_INNOVATION_ADD:0 "[cultural_fascination|E] Progress" + MOD_CULTURAL_FASCINATION_INNOVATION_MULT:0 "$MOD_CULTURAL_FASCINATION_INNOVATION_ADD$" + MOD_CULTURAL_HEAD_ACCEPTANCE_GAIN_MULT:0 "[cultural_acceptance|E] Gain" + MOD_CULTURAL_ACCEPTANCE_GAIN_MULT:0 "[cultural_acceptance|E] Gain" + MODE_CULTURE_TRADITION_MAX_ADD:0 "Maximum [culture_traditions|E]" + NAMED_OPINION_MODIFIER:1 "$MODIFIER$ ([CHARACTER.GetShortUIName])" + MODIFIER_FROM_PROVINCES:0 "From Domain" + MODIFIER_FROM_TITLE_LAWS:1 "[TITLE.GetNamePossessive|U] [title_laws|E]" + MOD_ATTRACTION_OPINION:0 "[attraction|E] Opinion" + MOD_MIN_COMBAT_ROLL:1 "[command_modifier_i|E]Minimum [combat_roll|E]" + MOD_MAX_COMBAT_ROLL:1 "[command_modifier_i|E]Maximum [combat_roll|E]" + MOD_KNIGHT_LIMIT:1 "Number of [knight_i][knights|E]" + MOD_KNIGHT_EFFECTIVENESS_MULT:2 "[knight_effectiveness|E]" + MOD_SUPPLY_DURATION:1 "[command_modifier_i|E][supply|E] Duration" + MOD_POSITIVE_INACTIVE_INHERITANCE_CHANCE:0 "Chance of inheriting good [congenital_traits|E]" + MOD_NEGATIVE_INACTIVE_INHERITANCE_CHANCE:0 "Chance of inheriting bad [congenital_traits|E]" + MOD_POSITIVE_RANDOM_GENETIC_CHANCE:0 "Chance of new good [congenital_traits|E]" + MOD_NEGATIVE_RANDOM_GENETIC_CHANCE:0 "Chance of new bad [congenital_traits|E]" + MOD_GENETIC_TRAIT_STRENGTHEN_CHANCE:0 "Chance of reinforcing [congenital_traits|E]" + MOD_LIFE_EXPECTANCY:0 "[life_expectancy|E] #weak (years)#!" + MOD_YEARS_OF_FERTILITY:0 "Years of [fertility|E]" + held_barony_modifier:0 "Held [baronies|E]" + held_county_modifier:0 "Held [counties|E]" + held_duchy_modifier:0 "Held [duchies|E]" + held_kingdom_modifier:0 "Held [kingdoms|E]" + held_empire_modifier:0 "Held [empires|E]" + held_hegemony_modifier: "Held [hegemonies|E]" + MOD_MONTHLY_LIFESTYLE_XP_GAIN_ADD: "$MOD_MONTHLY_LIFESTYLE_XP_GAIN_MULT$" + MOD_MONTHLY_LIFESTYLE_XP_GAIN_MULT:0 "Monthly [lifestyle|E] Experience" + martial_lifestyle_xp_gain_add: "Martial [lifestyle|E] Experience Gain" + martial_lifestyle_xp_gain_mult: "$martial_lifestyle_xp_gain_add$" + monthly_martial_lifestyle_xp_gain_add: "$monthly_martial_lifestyle_xp_gain_mult$" + monthly_martial_lifestyle_xp_gain_mult:0 "Monthly Martial [lifestyle|E] Experience" + diplomacy_lifestyle_xp_gain_add: "Diplomacy [lifestyle|E] Experience Gain" + diplomacy_lifestyle_xp_gain_mult: "$diplomacy_lifestyle_xp_gain_add$" + monthly_diplomacy_lifestyle_xp_gain_add: "$monthly_diplomacy_lifestyle_xp_gain_mult$" + monthly_diplomacy_lifestyle_xp_gain_mult:0 "Monthly Diplomacy [lifestyle|E] Experience" + stewardship_lifestyle_xp_gain_add: "Stewardship [lifestyle|E] Experience Gain" + stewardship_lifestyle_xp_gain_mult: "$stewardship_lifestyle_xp_gain_add$" + monthly_stewardship_lifestyle_xp_gain_add: "$monthly_stewardship_lifestyle_xp_gain_mult$" + monthly_stewardship_lifestyle_xp_gain_mult:0 "Monthly Stewardship [lifestyle|E] Experience" + learning_lifestyle_xp_gain_add: "Learning [lifestyle|E] Experience Gain" + learning_lifestyle_xp_gain_mult: "$learning_lifestyle_xp_gain_add$" + monthly_learning_lifestyle_xp_gain_add: "$monthly_learning_lifestyle_xp_gain_mult$" + monthly_learning_lifestyle_xp_gain_mult:0 "Monthly Learning [lifestyle|E] Experience" + intrigue_lifestyle_xp_gain_add: "Intrigue [lifestyle|E] Experience Gain" + intrigue_lifestyle_xp_gain_mult: "$intrigue_lifestyle_xp_gain_add$" + monthly_intrigue_lifestyle_xp_gain_add: "$monthly_intrigue_lifestyle_xp_gain_mult$" + monthly_intrigue_lifestyle_xp_gain_mult:0 "Monthly Intrigue [lifestyle|E] Experience" + monthly_wanderer_lifestyle_xp_gain_mult: "Monthly Wandering [lifestyle|E] Experience" + wanderer_lifestyle_xp_gain_mult: "Wandering [lifestyle|E] Experience" + MOD_FAITH_CONVERSION_PIETY_COST_ADD:0 "[faith|E] Conversion Cost" + MOD_FAITH_CONVERSION_PIETY_COST_MULT:0 "$MOD_FAITH_CONVERSION_PIETY_COST_ADD$" + MOD_FAITH_CREATION_PIETY_COST_ADD:1 "[faith|E] Creation and Reformation Cost" + MOD_FAITH_CREATION_PIETY_COST_MULT:0 "$MOD_FAITH_CREATION_PIETY_COST_ADD$" + MOD_NO_PROWESS_LOSS_FROM_AGE:0 "No [prowess|E] Loss from Age" + MOD_MONTHLY_DYNASTY_PRESTIGE:0 "[dynasty_prestige|E]" + MOD_MONTHLY_DYNASTY_PRESTIGE_MULT:0 "Monthly [dynasty_prestige|E]" + MOD_MONTHLY_DYNASTY_PRESTIGE_PREFIX:0 "[dynasty_prestige_i]" + MOD_MONTHLY_DYNASTY_PRESTIGE_MULT_PREFIX:0 "[dynasty_prestige_i]" + MOD_OPINION_FROM_PROWESS_SUFFIX: " / point" + MOD_MONTHLY_INFLUENCE: "[influence|E]" + MOD_MONTHLY_INFLUENCE_PREFIX: "[influence_i|E]" + MOD_MONTHLY_INFLUENCE_MULT: "Monthly [influence|E]" + MOD_MONTHLY_INFLUENCE_MULT_PREFIX: "[influence_i|E]" + MOD_MONTHLY_MERIT: "[merit|E]" + MOD_MONTHLY_MERIT_PREFIX: "[merit_i|E]" + MOD_MONTHLY_MERIT_MULT: "Monthly [merit|E]" + MOD_MONTHLY_MERIT_MULT_PREFIX: "[merit_i|E]" + MOD_MONTHLY_MERIT_PER_TITLE_MAA_VALUE: "Monthly [merit|E] per [title_men_at_arms|E] Base Recruitment Cost" + MOD_MONTHLY_MERIT_PER_TITLE_MAA_VALUE_PREFIX: "[merit_i|E]" + MOD_MONTHLY_MERIT_PER_LIEGE_TAX: "Monthly [merit|E] per total [tax|E] paid to [liege|E]" + MOD_MONTHLY_MERIT_PER_LIEGE_TAX_PREFIX: "[merit_i|E]" + MOD_RAID_SPEED:1 "[command_modifier_i|E][raid|E] Speed" + MOD_HOSTILE_RAID_TIME:0 "Hostile [raid|E] Time" + MOD_HOLDING_FORT_LEVEL_PREFIX:0 "@fort_icon!" + MOD_MAX_LOOT_MULT:1 "[army|E] [loot|E] Capacity" + MOD_EXTERNAL_SLOTS_PREFIX: "@external_slots_icon!" + + city_holding_build_speed:1 "City [buildings|E] Construction Time" + church_holding_build_speed:0 "Temple [buildings|E] Construction Time" + castle_holding_build_speed:0 "Castle [buildings|E] Construction Time" + tribal_holding_build_speed:0 "Tribal [buildings|E] Construction Time" + + city_holding_build_gold_cost:0 "City [buildings|E] Construction Cost" + church_holding_build_gold_cost:0 "Temple [buildings|E] Construction Cost" + castle_holding_build_gold_cost:0 "Castle [buildings|E] Construction Cost" + tribal_holding_build_gold_cost:0 "Tribal [buildings|E] Construction Cost" + + city_holding_holding_build_speed:0 "City [holding|E] Construction Time" + church_holding_holding_build_speed:0 "Temple [holding|E] Construction Time" + castle_holding_holding_build_speed:0 "Castle [holding|E] Construction Time" + tribal_holding_holding_build_speed:0 "Tribal [holding|E] Construction Time" + temple_citadel_holding_holding_build_speed: "Temple Citadel [holding|E] Construction Time" + + city_holding_holding_build_gold_cost:0 "City [holding|E] Construction Cost" + church_holding_holding_build_gold_cost:0 "Temple [holding|E] Construction Cost" + castle_holding_holding_build_gold_cost:0 "Castle [holding|E] Construction Cost" + tribal_holding_holding_build_gold_cost:0 "Tribal [holding|E] Construction Cost" + temple_citadel_holding_build_gold_cost: "Temple Citadel [holding|E] Construction Cost" + temple_citadel_holding_build_piety_cost: "Temple Citadel [building|E] Construction Cost" + temple_citadel_holding_holding_build_gold_cost: "Temple Citadel [holding|E] Construction Cost" + + plains_tax_mult:0 "$MOD_TAX_MULT$ in Plains" + farmlands_tax_mult:0 "$MOD_TAX_MULT$ in Farmlands" + hills_tax_mult:0 "$MOD_TAX_MULT$ in Hills" + terraced_hills_tax_mult:0 "$MOD_TAX_MULT$ in Terraced Hills" + mountains_tax_mult:0 "$MOD_TAX_MULT$ in Mountains" + desert_tax_mult:0 "$MOD_TAX_MULT$ in Desert" + desert_mountains_tax_mult:0 "$MOD_TAX_MULT$ in Desert Mountains" + oasis_tax_mult:0 "$MOD_TAX_MULT$ in Oasis" + jungle_tax_mult:0 "$MOD_TAX_MULT$ in Jungle" + forest_tax_mult:0 "$MOD_TAX_MULT$ in Forest" + taiga_tax_mult:0 "$MOD_TAX_MULT$ in Taiga" + wetlands_tax_mult:0 "$MOD_TAX_MULT$ in Wetlands" + steppe_tax_mult:0 "$MOD_TAX_MULT$ in Steppe" + floodplains_tax_mult:0 "$MOD_TAX_MULT$ in Floodplains" + drylands_tax_mult:0 "$MOD_TAX_MULT$ in Drylands" + plains_levy_size:0 "$MOD_LEVY_SIZE$ in Plains" + farmlands_levy_size:0 "$MOD_LEVY_SIZE$ in Farmlands" + hills_levy_size:0 "$MOD_LEVY_SIZE$ in Hills" + mountains_levy_size:0 "$MOD_LEVY_SIZE$ in Mountains" + desert_levy_size:0 "$MOD_LEVY_SIZE$ in Desert" + desert_mountains_levy_size:0 "$MOD_LEVY_SIZE$ in Desert Mountains" + oasis_levy_size:0 "$MOD_LEVY_SIZE$ in Oasis" + jungle_levy_size:0 "$MOD_LEVY_SIZE$ in Jungle" + forest_levy_size:0 "$MOD_LEVY_SIZE$ in Forest" + taiga_levy_size:0 "$MOD_LEVY_SIZE$ in Taiga" + wetlands_levy_size:0 "$MOD_LEVY_SIZE$ in Wetlands" + steppe_levy_size:0 "$MOD_LEVY_SIZE$ in Steppe" + floodplains_levy_size:0 "$MOD_LEVY_SIZE$ in Floodplains" + drylands_levy_size:0 "$MOD_LEVY_SIZE$ in Drylands" + terraced_hills_levy_size: "$MOD_LEVY_SIZE$ in Terraced Hills" + plains_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Plains" + farmlands_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Farmlands" + hills_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Hills" + mountains_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Mountains" + desert_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Desert" + desert_mountains_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Desert Mountains" + oasis_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Oasis" + jungle_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Jungle" + forest_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Forest" + taiga_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Taiga" + wetlands_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Wetlands" + steppe_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Steppe" + floodplains_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Floodplains" + drylands_supply_limit_mult:0 "$MOD_SUPPLY_LIMIT_MULT$ in Drylands" + + # Scheme modifiers + claim_throne_scheme_phase_duration_mult: "[GetScheme('claim_throne').GetTypeName] [scheme_speed_single|E]" + claim_throne_scheme_phase_duration_add: "[GetScheme('claim_throne').GetTypeName] [scheme_speed_single|E]" + seduce_scheme_phase_duration_add: "[GetScheme('seduce').GetTypeName] [scheme_speed_single|E]" + courting_scheme_phase_duration_add: "[GetScheme('courting').GetTypeName] [scheme_speed_single|E]" + max_courting_schemes_add:0 "Max [GetScheme('courting').GetTypeName] [schemes|E]" + befriend_scheme_phase_duration_add: "[GetScheme('befriend').GetTypeName] [scheme_speed_single|E]" + elope_scheme_phase_duration_add: "[GetScheme('elope').GetTypeName] [scheme_speed_single|E]" + sway_scheme_phase_duration_add: "[GetScheme('sway').GetTypeName] [scheme_speed_single|E]" + murder_scheme_phase_duration_add: "[GetScheme('murder').GetTypeName] [scheme_speed_single|E]" + abduct_scheme_phase_duration_add: "[GetScheme('abduct').GetTypeName] [scheme_speed_single|E]" + learn_language_scheme_phase_duration_add: "[GetScheme('learn_language').GetTypeName] [scheme_speed_single|E]" + learn_language_schemes_add:1 "Max [GetScheme('learn_language').GetTypeName] [schemes|E]" + max_learn_language_schemes_add:0 "$learn_language_schemes_add$" + max_sway_schemes_add:1 "Max [GetScheme('sway').GetTypeName] [schemes|E]" + + #County modifiers + occupation_modifier:0 "Occupied" + siege_modifier:0 "Under Siege" + encouraged_improvement_modifier:0 "Encouraged Improvements" + county_base_modifier:0 "Base Value" + reclaim_britannia_culture_modifier:0 "Reclaimed Britannia" + reclaim_britannia_culture_modifier_desc:1 "[promote_culture|E] ($celtic_group$ cultures only) Speed: #P +75%#!" + + #Tier modifiers + unlanded_modifier:0 "Unlanded" + baron_modifier:0 "Baron" + count_modifier:0 "Count" + duke_modifier:0 "Duke" + king_modifier:0 "King" + emperor_modifier:0 "Emperor" + hegemon_modifier: "Hegemon" + + #Skill tooltips + diplomacy_effect_desc:0 "Increases effectiveness of Diplomacy [schemes|E]\nIncreases [initial_legitimacy|E]" + martial_effect_desc:0 "Increases [advantage|E] when commanding armies in combat" + intrigue_effect_desc: "Every [EmptyScope.ScriptValue('scheme_starting_opportunities_per_intrigue_increment_value')] [intrigue|E] above [EmptyScope.ScriptValue('scheme_starting_opportunities_per_intrigue_threshold_value')] gives +1 starting [scheme_opportunity_opportunities|E] to [intrigue] [schemes|E]\nIncreases starting [success_chance|E] of Intrigue [schemes|E]\nIncreases [scheme_growth|E] of Intrigue [schemes|E]\nIncreases chance to successfully [imprison|E] another character" + learning_effect_desc:0 "Reduces the [prestige|E] cost to increase [crown_authority|E]\nOther characters are more likely to accept when you [demand_conversion|E]" + + piety_level_0: "Sinner" + piety_level_0_desc: "$piety_level_0$ is the only negative [piety_level|E]. The next level is [GetModifier( 'piety_level_1' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc( '(int32)0' )]" + piety_level_1: "Dutiful" + piety_level_1_desc: "$piety_level_1$ is the first [piety_level|E]. The next level is [GetModifier( 'piety_level_2' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc( '(int32)1' )]" + piety_level_2: "Faithful" + piety_level_2_desc: "$piety_level_2$ is the second [piety_level|E]. The next level is [GetModifier( 'piety_level_3' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc( '(int32)2' )]" + piety_level_3: "Devoted Servant" + piety_level_3_desc: "$piety_level_3$ is the third [piety_level|E]. The next level is [GetModifier( 'piety_level_4' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc( '(int32)3' )]" + piety_level_4: "Paragon of Virtue" + piety_level_4_desc: "$piety_level_4$ is the fourth [piety_level|E]. The next level is [GetModifier( 'piety_level_5' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc( '(int32)4' )]" + piety_level_5: "Religious Icon" + piety_level_5_desc: "$piety_level_5$ is the fifth and highest possible [piety_level|E] for [governments|E] who are not [mandala|E]. The next level is [GetModifier( 'piety_level_6' ).GetNameWithTooltip|L].\nEffects:\n[GetPietyLevelDesc('(int32)5')|=+]" + piety_level_6: "Divine" + piety_level_6_desc: "$piety_level_6$ is the sixth [piety_level|E]. The next level is [GetModifier( 'piety_level_7' ).GetNameWithTooltip|L].\n\nWhen a [mandala|E] [ruler|E] dies in a manner acceptable to their [aspect|E], after reaching [GetModifier( 'piety_level_5' ).GetNameWithTooltip|L], that Ruler's [heir|E] develops the ability to progress to this Level of Devotion.\n\nEffects:\n[GetPietyLevelDesc('(int32)6')|=+]" + piety_level_7: "Demigod" + piety_level_7_desc: "$piety_level_7$ is the seventh [piety_level|E]. The next level is [GetModifier( 'piety_level_8' ).GetNameWithTooltip|L].\n\nWhen a [mandala|E] [ruler|E] dies in a manner acceptable to their [aspect|E], after reaching [GetModifier( 'piety_level_6' ).GetNameWithTooltip|L], that Ruler's [heir|E] develops the ability to progress to this Level of Devotion.\n\nEffects:\n[GetPietyLevelDesc('(int32)7')|=+]" + piety_level_8: "Godlike" + piety_level_8_desc: "$piety_level_8$ is the eight and highest possible [piety_level|E] for the [mandala|E] [government|E].\n\nWhen a [mandala|E] [ruler|E] dies in a manner acceptable to their [aspect|E], after reaching [GetModifier( 'piety_level_7' ).GetNameWithTooltip|L], that Ruler's [heir|E] develops the ability to progress to this ultimate Level of Devotion.\n\nEffects:\n[GetPietyLevelDesc('(int32)8')|=+]" + + prestige_level_0: "Disgraced" + prestige_level_0_desc: "$prestige_level_0$ is the lowest possible [prestige_level|E]. The next level is [GetModifier( 'prestige_level_1' ).GetNameWithTooltip|L].\nEffects:\n[GetPrestigeLevelDesc( '(int32)0' )]" + prestige_level_1: "Established" + prestige_level_1_desc: "$prestige_level_1$ is the first [prestige_level|E]. The next level is [GetModifier( 'prestige_level_2' ).GetNameWithTooltip|L].\nEffects:\n[GetPrestigeLevelDesc( '(int32)1' )]" + prestige_level_2: "Distinguished" + prestige_level_2_desc: "$prestige_level_2$ is the second [prestige_level|E]. The next level is [GetModifier( 'prestige_level_3' ).GetNameWithTooltip|L].\nEffects:\n[GetPrestigeLevelDesc( '(int32)2' )]\n[SelectLocalization( IsLandlessAdventurer( GetPlayer ), 'prestige_level_2_laamp_desc', 'blank_line' )]" + prestige_level_3: "Illustrious" + prestige_level_3_desc: "$prestige_level_3$ is the third [prestige_level|E]. The next level is [GetModifier( 'prestige_level_4' ).GetNameWithTooltip|L].\nEffects:\n[GetPrestigeLevelDesc( '(int32)3' )]\n[SelectLocalization( IsLandlessAdventurer( GetPlayer ), 'prestige_level_3_laamp_desc', 'blank_line' )]" + prestige_level_4: "Exalted Among Men" + prestige_level_4_desc: "$prestige_level_4$ is the fourth [prestige_level|E]. The next level is [GetModifier( 'prestige_level_5' ).GetNameWithTooltip|L].\nEffects:\n[GetPrestigeLevelDesc( '(int32)4' )]\n[SelectLocalization( IsLandlessAdventurer( GetPlayer ), 'prestige_level_4_laamp_desc', 'blank_line' )]" + prestige_level_5: "Legendary Figure" + prestige_level_5_desc: "$prestige_level_5$ is the fifth and highest possible [prestige_level|E].\nEffects:\n[GetPrestigeLevelDesc('(int32)5')]\n[SelectLocalization( IsLandlessAdventurer( GetPlayer ), 'prestige_level_5_laamp_desc', 'blank_line' )]" + prestige_level_2_laamp_desc: "Unlocks the following:\n\t#weak $EP3_LAAMP_INVASION_CB_COUNTY_NAME$ [casus_belli|e]\n\t$purchase_land_interaction$ [interaction|E] for [counties|E]\n\t$hire_laamp_mercenaries_interaction$ [county|E] reward\n\t$procure_estate_interaction$ [interaction|E] #!" + prestige_level_3_laamp_desc: "Unlocks the following:\n\t#weak $EP3_LAAMP_INVASION_CB_DUCHY_NAME$ and below [casus_bellis|e]\n\t$purchase_land_interaction$ [interaction|E] for [counties|E] and [duchies|E]\n\t$hire_laamp_mercenaries_interaction$ [interaction|E] [county|E] and [duchy|E] rewards\n\t$seize_realm$ [scheme|E] for [duchies|E] and [counties|E]\n\t$request_laamp_invasion_sponsorship_interaction$ [interaction|E]#!" + prestige_level_4_laamp_desc: "Unlocks the following:\n\t#weak $EP3_LAAMP_INVASION_CB_KINGDOM_NAME$ and below [casus_bellis|e]\n\t$purchase_land_interaction$ [interaction|E] for [duchies|E] and [counties|E] with increased acceptance\n\t$hire_laamp_mercenaries_interaction$ [county|E] and [duchy|E] rewards\n\t$seize_realm$ [scheme|E] for [kingdoms|E] and below\n\t$request_laamp_invasion_sponsorship_interaction$ [interaction|E] #!" + prestige_level_5_laamp_desc: "Unlocks the following:\n\t#weak $EP3_LAAMP_INVASION_CB_EMPIRE_NAME$ and below\n\t$purchase_land_interaction$ [interaction|E] for [duchies|E] and [counties|E] with increased acceptance\n\t$hire_laamp_mercenaries_interaction$ [county|E] and [duchy|E] rewards\n\t$seize_realm$ [scheme|E] for [empires|E] and below\n\t$request_laamp_invasion_sponsorship_interaction$ [interaction|E] #!" + + influence_level_0: "Impotent" + influence_level_0_desc: "$influence_level_0$ is the lowest possible [influence_level|E]. The next level is [GetModifier( 'influence_level_1' ).GetNameWithTooltip|L].\nEffects:\n[GetInfluenceLevelDesc( '(int32)0' )]" + influence_level_1: "Influential" + influence_level_1_desc: "$influence_level_1$ is the second [influence_level|E]. The next level is [GetModifier( 'influence_level_2' ).GetNameWithTooltip|L].\nEffects:\n[GetInfluenceLevelDesc( '(int32)1' )]" + influence_level_2: "Persuasive" + influence_level_2_desc: "$influence_level_2$ is the third [influence_level|E]. The next level is [GetModifier( 'influence_level_3' ).GetNameWithTooltip|L].\nEffects:\n[GetInfluenceLevelDesc( '(int32)2' )]" + influence_level_3: "Controlling" + influence_level_3_desc: "$influence_level_3$ is the fourth [influence_level|E]. The next level is [GetModifier( 'influence_level_4' ).GetNameWithTooltip|L].\nEffects:\n[GetInfluenceLevelDesc( '(int32)3' )]" + influence_level_4: "Authoritative" + influence_level_4_desc: "$influence_level_4$ is the fifth [influence_level|E]. The next level is [GetModifier( 'influence_level_5' ).GetNameWithTooltip|L].\nEffects:\n[GetInfluenceLevelDesc( '(int32)4' )]" + influence_level_5: "Imperious" + influence_level_5_desc: "$influence_level_5$ is the sixth and highest possible [influence_level|E].\nEffects:\n[GetInfluenceLevelDesc( '(int32)5' )]" + + merit_level_0: "No Rank" + merit_level_0_desc: "To be without a [merit_level|E] is to be scholarly worthless and unsuitable for office.\n\nThe first and lowest rank is [GetModifier( 'merit_level_1' ).GetNameWithTooltip|L].\n\n#S Effects:#!\n" + merit_level_1: "9th Rank" + merit_level_1_desc: "The entry level [merit_level|E] of prospective examination entrants.\n\n#S Effects:#!\n" + merit_level_2: "8th Rank" + merit_level_2_desc: "$merit_level_2$ is a barely significant [merit_level|E].\n\n#S Effects:#!\n" + merit_level_3: "7th Rank" + merit_level_3_desc: "$merit_level_3$ is a less significant [merit_level|E].\n\n#S Effects:#!\n" + merit_level_4: "6th Rank" + merit_level_4_desc: "$merit_level_4$ is a fairly significant [merit_level|E].\n\n#S Effects:#!\n" + merit_level_5: "5th Rank" + merit_level_5_desc: "$merit_level_5$ is the fulcrum of the nine ranks, and denotes a \"worthy official\".\n\n#S Effects:#!\n" + merit_level_6: "4th Rank" + merit_level_6_desc: "$merit_level_6$ is a significant [merit_level|E].\n\n#S Effects:#!\n" + merit_level_7: "3rd Rank" + merit_level_7_desc: "$merit_level_7$ is a markedly significant [merit_level|E] of capable administrators whose talents rise well above the ordinary.\n\n#S Effects:#!\n" + merit_level_8: "2nd Rank" + merit_level_8_desc: "$merit_level_8$ is a highly significant [merit_level|E] that recognizes an official of high virtue and talent.\n\n#S Effects:#!\n" + merit_level_9: "1st Rank" + merit_level_9_desc: "$merit_level_9$ is the most significant [merit_level|E] reserved for paragons of both Confucian virtue and scholarly brilliance.\n\n#S Effects:#!\n" + + merit_level_short_0: "None" + merit_level_short_1: "9th" + merit_level_short_2: "8th" + merit_level_short_3: "7th" + merit_level_short_4: "6th" + merit_level_short_5: "5th" + merit_level_short_6: "4th" + merit_level_short_7: "3rd" + merit_level_short_8: "2nd" + merit_level_short_9: "1st" + + stress_level_1:1 "Stress Level 1" + stress_level_2:1 "Stress Level 2" + stress_level_3:1 "Stress Level 3" + stress_level_4:1 "Stress Level 4" + stress_level_5:1 "Stress Level 5" + + recently_looted_modifier:0 "Recently Looted" + recently_looted_modifier_desc:0 "This [holding|E] has been recently looted by a [raid|E] or [siege|E] and cannot be looted until this modifier expires." + + recently_bartered_modifier: "Recently Traded" + recently_bartered_modifier_desc: "A party of traders have recently [traded|E] with this [holding|E] and it cannot be looted or bartered in until this modifier expires." + + shattered_defenses_modifier: "Shattered Defenses" + shattered_defenses_modifier_desc: "This [holding|E] has recently had its defenses shattered by violent raiders." + + hard_difficulty: "Hard" + hard_difficulty_player: "$hard_difficulty$" + very_hard_difficulty: "Very Hard" + very_hard_difficulty_player: "$very_hard_difficulty$" + very_easy_difficulty:0 "Very Easy" + easy_difficulty:0 "Easy" + game_rule_base_value: "Base: $VALUE|=+0$" + difficulty_skilled_courtier_block: "Uninterested in Marriage: $VALUE|=+0$" + commander_enemy_terrain_advantage:0 "Counters enemy defensive terrain advantage" + + # Informs players about scripted county modifiers for council tasks (e.g., either faster county conversions, or slower ones depending). + CUSTOM_MOD_FAITH_CONVERSION_SPEED:0 "$task_conversion$ Speed: " + CUSTOM_MOD_CULTURE_CONVERSION_SPEED:0 "$task_promote_culture$ Speed: " + CUSTOM_MOD_FABRICATE_CLAIM_SPEED:0 "$task_fabricate_claim$ Speed: " + + # Informs players about the stress loss decisions enabled by coping mechanism traits. + CUSTOM_MOD_ENABLES_STRESS_LOSS_DECISIONS:0 "Enables a special [decision|E] that #P reduces#! [stress|E]" + + # RoCo + world_innovation_elephants_development_growth_factor:0 "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in the [GetGeographicalRegion('world_innovation_elephants').GetName] [region|E]" + + # FP3 + world_persian_empire_development_growth_factor: "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in the [GetGeographicalRegion('world_persian_empire').GetName] [region|E]" + + # Travel + MOD_TRAVEL_SPEED:1 "[travel|E] Speed" + MOD_TRAVEL_SPEED_MULT:0 "$MOD_TRAVEL_SPEED$" + MOD_TRAVEL_SAFETY:1 "[travel|E] Safety" + MOD_TRAVEL_SAFETY_MULT:0 "$MOD_TRAVEL_SAFETY$" + MOD_CHARACTER_TRAVEL_SPEED:0 "$MOD_TRAVEL_SPEED$" + MOD_CHARACTER_TRAVEL_SPEED_MULT:0 "$MOD_TRAVEL_SPEED$" + MOD_CHARACTER_TRAVEL_SAFETY:0 "$MOD_TRAVEL_SAFETY$" + MOD_CHARACTER_TRAVEL_SAFETY_MULT:0 "$MOD_TRAVEL_SAFETY$" + MOD_TRAVEL_DANGER:0 "[travel_danger|E]" + MOD_TRAVEL_DANGER_EPIDEMIC: "[epidemic|E] [travel_danger|E]" + hills_travel_danger:0 "[GetTerrain( 'hills' ).GetName] [travel_danger|E]" + mountains_travel_danger:0 "[GetTerrain( 'mountains' ).GetName] [travel_danger|E]" + desert_travel_danger:0 "[GetTerrain( 'desert' ).GetName] [travel_danger|E]" + desert_mountains_travel_danger:0 "[GetTerrain( 'desert_mountains' ).GetName] [travel_danger|E]" + terraced_hills_travel_danger: "[GetTerrain( 'terraced_hills' ).GetName] [travel_danger|E]" + jungle_travel_danger:0 "[GetTerrain( 'jungle' ).GetName] [travel_danger|E]" + forest_travel_danger:0 "[GetTerrain( 'forest' ).GetName] [travel_danger|E]" + taiga_travel_danger:0 "[GetTerrain( 'taiga' ).GetName] [travel_danger|E]" + wetlands_travel_danger:0 "[GetTerrain( 'wetlands' ).GetName] [travel_danger|E]" + steppe_travel_danger:0 "[GetTerrain( 'steppe' ).GetName] [travel_danger|E]" + floodplains_travel_danger:0 "[GetTerrain( 'floodplains' ).GetName] [travel_danger|E]" + drylands_travel_danger:0 "[GetTerrain( 'drylands' ).GetName] [travel_danger|E]" + sea_travel_danger:0 "[GetTerrain( 'sea' ).GetName] [travel_danger|E]" + coastal_sea_travel_danger:0 "[GetTerrain( 'coastal_sea' ).GetName] [travel_danger|E]" + plains_travel_danger: "[GetTerrain( 'plains' ).GetName] [travel_danger|E]" + farmlands_travel_danger: "[GetTerrain( 'farmlands' ).GetName] [travel_danger|E]" + oasis_travel_danger: "[GetTerrain( 'oasis' ).GetName] [travel_danger|E]" + + MOD_STRIFE_OPINION_GAIN_MULT:0 "[strife|E] Gain" + MOD_STRIFE_OPINION_LOSS_MULT:0 "[strife|E] Loss" + + # Accolades + MOD_ACTIVE_ACCOLADES:0 "[accolades|E] Available" + MOD_ACCOLADE_GLORY_GAIN_MULT:0 "[accolade|e] [glory|E] Gain" + + MOD_EPIDEMIC_RESISTANCE: "[epidemic_resistance|E]" + MOD_OWNED_LEGEND_SPREAD_ADD: "[legend|E] Spread Chance" + MOD_OWNED_LEGEND_SPREAD_MULT: "$MOD_OWNED_LEGEND_SPREAD_ADD$" + + MOD_LEGITIMACY_GAIN_MULT: "[legitimacy|E] Gain" + MOD_LEGITIMACY_LOSS_MULT: "[legitimacy|E] Loss" + MOD_LEGITIMACY_MONTHLY_CHANGE: "[legitimacy|E]" + + MOD_LEVY_MAINTENANCE:0 "[levy|E] Maintenance" + MOD_UNCONTROLLED_PROVINCE_ADVANTAGE:0 "Uncontrolled Territory Attacker [advantage|E]" + MOD_LEVY_ATTACK:0 "[levy|E] [damage|E]" + MOD_LEVY_TOUGHNESS:0 "[levy|E] [toughness|E]" + MOD_LEVY_SIEGE:0 "[levy|E] [siege_progress|E]" + MOD_LEVY_PURSUIT:0 "[levy|E] [pursuit|E]" + MOD_LEVY_SCREEN:0 "[levy|E] [screen|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_DREAD:0 "[knight_effectiveness|E] per [dread|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_TYRANNY:0 "[knight_effectiveness|E] per [tyranny|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_PROWESS: "[knight_effectiveness|E] per [prowess_i|E][prowess|E] [skill|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_DIPLOMACY: "[knight_effectiveness|E] per [diplomacy_i|E][diplomacy|E] [skill|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_INTRIGUE: "[knight_effectiveness|E] per [intrigue_i|E][intrigue|E] [skill|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_LEARNING: "[knight_effectiveness|E] per [learning_i|E][learning|E] [skill|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_MARTIAL: "[knight_effectiveness|E] per [martial_i|E][martial|E] [skill|E]" + MOD_KNIGHT_EFFECTIVENESS_PER_STEWARDSHIP: "[knight_effectiveness|E] per [stewardship_i|E][stewardship|E] [skill|E]" + MOD_STRESS_LOSS_PER_PIETY_LEVEL:0 "[stress|E] loss per [piety_level|E]" + MOD_STRESS_LOSS_PER_PRESTIGE_LEVEL:0 "[stress|E] loss per [prestige_level|E]" + + pilgrim_xp_gain_mult:0 "[GetTrait('pilgrim').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + governor_xp_gain_mult: "[GetTrait('governor').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + confucian_education_xp_gain_mult: "[GetTrait('confucian_education').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + lifestyle_traveler_xp_gain_mult:0 "[GetTrait('lifestyle_traveler').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + lifestyle_reveler_xp_gain_mult:0 "[GetTrait('lifestyle_reveler').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + + lifestyle_hunter_xp_gain_mult:0 "[GetTrait('lifestyle_hunter').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + trait_track_hunter_xp_gain_mult:0 "Venator #weak ([GetTrait('lifestyle_hunter').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_falconer_xp_gain_mult:0 "Falconer #weak ([GetTrait('lifestyle_hunter').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_lifestyle_poet_xp_gain_mult:0 "Poetry #weak ([GetTrait('lifestyle_poet').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_peasant_leader_xp_gain_mult: "Notoriety #weak ([GetTrait('peasant_leader').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + + lifestyle_mystic_xp_gain_mult:0 "[GetTrait('lifestyle_mystic').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + + trait_track_travel_xp_gain_mult: "Wanderer #weak ([GetTrait('lifestyle_traveler').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_danger_xp_gain_mult: "Seasoned #weak ([GetTrait('lifestyle_traveler').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + + tourney_participant_xp_gain_mult:0 "[GetTrait('tourney_participant').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + trait_track_foot_xp_gain_mult:0 "Foot #weak ([GetTrait('tourney_participant').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_bow_xp_gain_mult:0 "Bow #weak ([GetTrait('tourney_participant').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_horse_xp_gain_mult:0 "Horse #weak ([GetTrait('tourney_participant').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + trait_track_wit_xp_gain_mult:0 "Wit #weak ([GetTrait('tourney_participant').GetName( GetNullCharacter )])#! [trait_level_track_xp|E] Gain" + + trait_track_lifestyle_blademaster_xp_gain_mult:0 "[GetTrait('lifestyle_blademaster').GetName( GetNullCharacter )] [trait_level_track_xp|E]" + lifestyle_blademaster_xp_gain_mult:0 "[GetTrait('lifestyle_blademaster').GetName( GetNullCharacter )] [trait_level_track_xp|E] gain" + + lifestyle_physician_xp_gain_mult: "[GetTrait('lifestyle_physician').GetName( GetNullCharacter )] [trait_level_track_xp|E] gain" + + pilgrim_xp_degradation_mult:0 "Monthly [GetTrait('pilgrim').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + governor_xp_degradation_mult: "Monthly [GetTrait('governor').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + lifestyle_traveler_xp_degradation_mult:0 "Monthly [GetTrait('lifestyle_traveler').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + lifestyle_reveler_xp_degradation_mult:0 "Monthly [GetTrait('lifestyle_reveler').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + lifestyle_hunter_xp_degradation_mult:0 "Monthly [GetTrait('lifestyle_hunter').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + tourney_participant_xp_degradation_mult:0 "Monthly [GetTrait('tourney_participant').GetName( GetNullCharacter )] [trait_level_track_xp|E] degradation" + + #FP3 + max_murder_schemes_add: "Max [GetScheme('murder').GetTypeName] [schemes|E]" + MODIFIER_DEFINITION_VALUE_PER_HOUSE_UNITY_MEMBER: " \t#weak Increase per [landed|E] [house|E] member#!" + MODIFIER_DEFINITION_MAIN_DESC_HOUSE_UNITY: "This modifier increases per [landed|E] [house|E] member (#bold $MULTIPLIER|0$#!/#bold 10#!)" + MODIFIER_DEFINITION_BASE_VALUE: "Base value" + avalanche_impact:0 "Avalanche Impact" + avalanche_impact_desc:0 "This holding is affected by the recent passing of an enormous avalanche." + + convert_to_witchcraft_scheme_speed_mult: "[GetScheme('convert_to_witchcraft').GetTypeName] [scheme_speed_single|E]" + + MOD_HOSTAGE_PRESTIGE_MULT: "Monthly [prestige|E] from [hostages|E]" + MOD_HOSTAGE_PIETY_MULT: "Monthly [piety|E] from [hostages|E]" + MOD_HOSTAGE_RENOWN_MULT: "Monthly [dynasty_prestige|E] from [hostages|E]" + MOD_HOSTAGE_INCOME_MULT: "Monthly income from [hostages|E]" + + player_facing_ai_energy: "Energy" + player_facing_ai_honor: "Honor" + player_facing_ai_vengefulness: "Vengefulness" + player_facing_ai_greed: "Greed" + player_facing_ai_compassion: "Compassion" + player_facing_ai_rationality: "Rationality" + player_facing_ai_sociability: "Sociability" + player_facing_ai_zeal: "Zeal" + player_facing_ai_boldness: "Boldness" + + glory_hound_ai_energy: "[GetVassalStance( 'glory_hound' ).GetTextIcon][GetVassalStance( 'glory_hound' ).GetName] [personality|E] $player_facing_ai_energy$" + glory_hound_ai_boldness: "[GetVassalStance( 'glory_hound' ).GetTextIcon][GetVassalStance( 'glory_hound' ).GetName] [personality|E] $player_facing_ai_boldness$" + + zealot_ai_vengefulness: "[GetVassalStance( 'zealot' ).GetTextIcon][GetVassalStance( 'zealot' ).GetName] [personality|E] $player_facing_ai_vengefulness$" + zealot_ai_zeal: "[GetVassalStance( 'zealot' ).GetTextIcon][GetVassalStance( 'zealot' ).GetName] [personality|E] $player_facing_ai_zeal$" + zealot_ai_boldness: "[GetVassalStance( 'zealot' ).GetTextIcon][GetVassalStance( 'zealot' ).GetName] [personality|E] $player_facing_ai_boldness$" + + minority_ai_energy: "[GetVassalStance( 'minority' ).GetTextIcon][GetVassalStance( 'minority' ).GetName] [personality|E] $player_facing_ai_energy$" + MOD_NUM_TAX_SLOTS: "Available [tax_jurisdictions|E]" + clan_tax_slot_add: "$MOD_NUM_TAX_SLOTS$" # Can re-localize if we re-use tax slots in other governments + + MOD_CULTURE_INNOVATION_PROGRESS_CHANCE_FROM_SPREAD_ADD: "[innovation|E] progress chance from [spread|E]" + MOD_CHARACTER_INNOVATION_PROGRESS_CHANCE_FROM_FASCINATION_ADD: "[innovation|E] progress chance from [fascination|E]" + MOD_INNOVATIONS_MONTHLY_POSTFIX: "% / month" + + AFFECTING_MODIFIERS_LABEL: "Affecting modifiers:" + PROVINCE_MODIFIERS: "[barony|E] Modifiers" + COUNTY_MODIFIERS: "[county|E] Modifiers" + PROVINCE_AND_COUNTY_MODIFIERS: "[barony|E] and [county|E] Modifiers" + OWNER_MODIFIERS: "Owner Modifiers" + + ai_conqueror_modifier: "Conqueror" + ai_conqueror_modifier_desc: "$struggle_parameter_unlocks_forced_vassalization_casus_belli$\nRemoves [prestige_i|E][prestige|E] Costs from [casus_bellis|E]\nRemoves [piety_i|E][piety|E] Costs from [casus_bellis|E]\n[armies|e] will #bold flock#! to their banners\n[claimants|e] will #bold crowd #!their [court|e]\n[vassals|e] will #bold fall in line#!\n\n#low The world lies before me, ripe for the taking. It will be mine.#!" + + ai_weak_conqueror_modifier: "Conqueror" + ai_weak_conqueror_modifier_desc: "#low The world lies before me, ripe for the taking. It will be mine.#!" + + ai_extreme_conqueror_modifier: "Scourge of the Gods" + ai_extreme_conqueror_modifier_desc: "#low I am the punishment of God. If you had not committed great sins, God would not have sent a punishment like me upon you.\n\n#!Unlocks unlimited #V Invasion#! [casus_bellis|E]" + + OPINION_HIGH_PROWESS: "High @skill_prowess_icon![prowess|E]" + OPINION_LOW_PROWESS: "Low @skill_prowess_icon![prowess|E]" + OPINION_DISDAIN_HIGH_PROWESS: "Disdain for $OPINION_HIGH_PROWESS$" + OPINION_DISDAIN_LOW_PROWESS: "Disdain for $OPINION_LOW_PROWESS$" + OPINION_RESPECT_HIGH_PROWESS: "Respect for $OPINION_HIGH_PROWESS$" + OPINION_RESPECT_LOW_PROWESS: "Respect for $OPINION_LOW_PROWESS$" + MOD_OPINION_FROM_HIGH_PROWESS: "[opinion|E] bonus from $OPINION_HIGH_PROWESS$" + MOD_OPINION_FROM_LOW_PROWESS: "[opinion|E] penalty from $OPINION_LOW_PROWESS$" + + # EP3 + administrative_government_tax_contribution_add: "[administrative|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + administrative_government_tax_contribution_mult: "[administrative|E] [vassal|E] [tax|E] [modifier_contribution|E]" + administrative_government_levy_contribution_add: "[administrative|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + administrative_government_levy_contribution_mult: "[administrative|E] [vassal|E] [levy|E] [modifier_contribution|E]" + MODIFIER_DEFINITION_MAIN_DESC_INFLUENCE_LEVEL: "This modifier increases per [influence_level|E] ($MULTIPLIER|+=0$)" + MODIFIER_DEFINITION_VALUE_PER_INFLUENCE_LEVEL: "\t#weak Increase per [influence_level|E]#!" + MODIFIER_DEFINITION_MAIN_DESC_GOVERNANCE_TIER: "This modifier increases per [governance_issue_tier|E] ($MULTIPLIER|+=0$)" + MODIFIER_DEFINITION_VALUE_PER_GOVERNANCE_TIER: "\t#weak Increase per [governance_issue_tier|E] Tier#!" + MODIFIER_DEFINITION_ESTATE_SCALING_DESC: "This modifier increases based on your [estate|E] ($MULTIPLIER|+=0$)" + MODIFIER_DEFINITION_VALUE_ESTATE_FACTORS: "\t#weak Increase per contributing factor#!" + MODIFIER_DEFINITION_MAIN_DESC_EPARCH_APTITUDE: "This modifier increases with [aptitude|E] ($MULTIPLIER|+=0$)" + MODIFIER_DEFINITION_VALUE_EPARCH_APTITUDE: "\t#weak Increase per [aptitude|E] level#!" + MOD_DOMICILE_MONTHLY_GOLD_ADD: "[domicile|E] [income|E]" + MOD_DOMICILE_MONTHLY_PRESTIGE_ADD: "[domicile|E] [prestige|E]" + MOD_DOMICILE_MONTHLY_PIETY_ADD: "[domicile|E] [piety|E]" + MOD_DOMICILE_MONTHLY_INFLUENCE_ADD: "[domicile|E] [influence|E]" + MOD_DOMICILE_MONTHLY_HERD_ADD: "[domicile|E] [herd|E]" + MOD_DOMICILE_MONTHLY_GOLD_MULT: "$MOD_DOMICILE_MONTHLY_GOLD_ADD$" + MOD_DOMICILE_MONTHLY_PRESTIGE_MULT: "Monthly $MOD_DOMICILE_MONTHLY_PRESTIGE_ADD$" + MOD_DOMICILE_MONTHLY_PIETY_MULT: "Monthly $MOD_DOMICILE_MONTHLY_PIETY_ADD$" + MOD_DOMICILE_MONTHLY_INFLUENCE_MULT: "Monthly $MOD_DOMICILE_MONTHLY_INFLUENCE_ADD$" + MOD_DOMICILE_MONTHLY_HERD_MULT: "Monthly $MOD_DOMICILE_MONTHLY_HERD_ADD$" + MOD_DOMICILE_BUILD_GOLD_COST: "[domicile_building|E] Construction Cost" + MOD_DOMICILE_CONSTRUCTION_SPEED: "$game_concept_domicile_build_speed$" + MOD_DOMICILE_TRAVEL_SPEED: "$game_concept_domicile_travel_speed$" + MOD_DOMICILE_EXTERNAL_SLOTS_CAPACITY_ADD: "Number of [domicile_building_slots|E]" + + MOD_PROVISIONS_USE_MULT: "[provisions|E] Use" + plains_provisions_use_mult: "[GetTerrain( 'plains' ).GetName] [provisions|E] Use" + farmlands_provisions_use_mult: "[GetTerrain( 'farmlands' ).GetName] [provisions|E] Use" + hills_provisions_use_mult: "[GetTerrain( 'hills' ).GetName] [provisions|E] Use" + mountains_provisions_use_mult: "[GetTerrain( 'mountains' ).GetName] [provisions|E] Use" + oasis_provisions_use_mult: "[GetTerrain( 'oasis' ).GetName] [provisions|E] Use" + jungle_provisions_use_mult: "[GetTerrain( 'jungle' ).GetName] [provisions|E] Use" + forest_provisions_use_mult: "[GetTerrain( 'forest' ).GetName] [provisions|E] Use" + taiga_provisions_use_mult: "[GetTerrain( 'taiga' ).GetName] [provisions|E] Use" + wetlands_provisions_use_mult: "[GetTerrain( 'wetlands' ).GetName] [provisions|E] Use" + steppe_provisions_use_mult: "[GetTerrain( 'steppe' ).GetName] [provisions|E] Use" + floodplains_provisions_use_mult: "[GetTerrain( 'floodplains' ).GetName] [provisions|E] Use" + desert_provisions_use_mult: "[GetTerrain( 'desert' ).GetName] [provisions|E] Use" + desert_mountains_provisions_use_mult: "[GetTerrain( 'desert_mountains' ).GetName] [provisions|E] Use" + drylands_provisions_use_mult: "[GetTerrain( 'drylands' ).GetName] [provisions|E] Use" + terraced_hills_provisions_use_mult: "[GetTerrain( 'terraced_hills' ).GetName] [provisions|E] Use" + + plains_barter_goods_mult: "[GetTerrain( 'plains' ).GetName] [trade_goods|E]" + farmlands_barter_goods_mult: "[GetTerrain( 'farmlands' ).GetName] [trade_goods|E]" + hills_barter_goods_mult: "[GetTerrain( 'hills' ).GetName] [trade_goods|E]" + mountains_barter_goods_mult: "[GetTerrain( 'mountains' ).GetName] [trade_goods|E]" + oasis_barter_goods_mult: "[GetTerrain( 'oasis' ).GetName] [trade_goods|E]" + jungle_barter_goods_mult: "[GetTerrain( 'jungle' ).GetName] [trade_goods|E]" + forest_barter_goods_mult: "[GetTerrain( 'forest' ).GetName] [trade_goods|E]" + taiga_barter_goods_mult: "[GetTerrain( 'taiga' ).GetName] [trade_goods|E]" + wetlands_barter_goods_mult: "[GetTerrain( 'wetlands' ).GetName] [trade_goods|E]" + steppe_barter_goods_mult: "[GetTerrain( 'steppe' ).GetName] [trade_goods|E]" + floodplains_barter_goods_mult: "[GetTerrain( 'floodplains' ).GetName] [trade_goods|E]" + desert_barter_goods_mult: "[GetTerrain( 'desert' ).GetName] [trade_goods|E]" + desert_mountains_barter_goods_mult: "[GetTerrain( 'desert_mountains' ).GetName] [trade_goods|E]" + drylands_barter_goods_mult: "[GetTerrain( 'drylands' ).GetName] [trade_goods|E]" + terraced_hills_barter_goods_mult: "[GetTerrain( 'terraced_hills' ).GetName] [trade_goods|E]" + + # BP3 + black_sea_coast_region_development_growth: "$MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR$ in the [GetGeographicalRegion('black_sea_coast_region').GetName] [region|E]" + + charioteer_blue_xp_gain_mult:0 "[GetTrait('charioteer_blue').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + charioteer_green_xp_gain_mult:0 "[GetTrait('charioteer_green').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + charioteer_white_xp_gain_mult:0 "[GetTrait('charioteer_white').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + charioteer_red_xp_gain_mult:0 "[GetTrait('charioteer_red').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + + # MPO + MOD_MONTHLY_COUNTY_FERTILITY_GROWTH: "[county_fertility|E] Growth" + MOD_MONTHLY_COUNTY_FERTILITY_DECLINE: "[county_fertility|E] Consumption" + MOD_MONTHLY_COUNTY_FERTILITY_GROWTH_ADD: "$MOD_MONTHLY_COUNTY_FERTILITY_GROWTH$" + MOD_MONTHLY_COUNTY_FERTILITY_GROWTH_MULT: "$MOD_MONTHLY_COUNTY_FERTILITY_GROWTH$" + MOD_CHARACTER_CAPITAL_MONTHLY_COUNTY_FERTILITY_GROWTH_ADD: "[capital|E] $MOD_MONTHLY_COUNTY_FERTILITY_GROWTH$" + MOD_MONTHLY_COUNTY_FERTILITY_DECLINE_ADD: "$MOD_MONTHLY_COUNTY_FERTILITY_DECLINE$" + MOD_MONTHLY_COUNTY_FERTILITY_DECLINE_MULT: "$MOD_MONTHLY_COUNTY_FERTILITY_DECLINE$" + MOD_CHARACTER_CAPITAL_MONTHLY_COUNTY_FERTILITY_DECLINE_ADD: "[capital|E] $MOD_MONTHLY_COUNTY_FERTILITY_DECLINE$" + MONTHLY_COUNTY_FERTILITY_APPLIED_CHANGE_DIFF: "Current [county_fertility|E] Modifier" + + plains_fertility_growth_add: "[county_fertility|E] Growth in Plains [terrain|E]" + plains_fertility_growth_mult: "$plains_fertility_growth_add$" + plains_fertility_decline_add: "[county_fertility|E] Decline in Plains [terrain|E]" + plains_fertility_decline_mult: "$plains_fertility_decline_add$" + + farmlands_fertility_growth_add: "[county_fertility|E] Growth in Farmlands [terrain|E]" + farmlands_fertility_growth_mult: "$farmlands_fertility_growth_add$" + farmlands_fertility_decline_add: "[county_fertility|E] Decline in Farmlands [terrain|E]" + farmlands_fertility_decline_mult: "$farmlands_fertility_decline_add$" + + hills_fertility_growth_add: "[county_fertility|E] Growth in Hills [terrain|E]" + hills_fertility_growth_mult: "$hills_fertility_growth_add$" + hills_fertility_decline_add: "[county_fertility|E] Decline in Hills [terrain|E]" + hills_fertility_decline_mult: "$hills_fertility_decline_add$" + + mountains_fertility_growth_add: "[county_fertility|E] Growth in Mountains [terrain|E]" + mountains_fertility_growth_mult: "$mountains_fertility_growth_add$" + mountains_fertility_decline_add: "[county_fertility|E] Decline in Mountains [terrain|E]" + mountains_fertility_decline_mult: "$mountains_fertility_decline_add$" + + desert_fertility_growth_add: "[county_fertility|E] Growth in Desert [terrain|E]" + desert_fertility_growth_mult: "$desert_fertility_growth_add$" + desert_fertility_decline_add: "[county_fertility|E] Decline in Desert [terrain|E]" + desert_fertility_decline_mult: "$desert_fertility_decline_add$" + + desert_mountains_fertility_growth_add: "[county_fertility|E] Growth in Desert Mountains [terrain|E]" + desert_mountains_fertility_growth_mult: "$desert_mountains_fertility_growth_add$" + desert_mountains_fertility_decline_add: "[county_fertility|E] Decline in Desert Mountains [terrain|E]" + desert_mountains_fertility_decline_mult: "$desert_mountains_fertility_decline_add$" + + oasis_fertility_growth_add: "[county_fertility|E] Growth in Oasis [terrain|E]" + oasis_fertility_growth_mult: "$oasis_fertility_growth_add$" + oasis_fertility_decline_add: "[county_fertility|E] Decline in Oasis [terrain|E]" + oasis_fertility_decline_mult: "$oasis_fertility_decline_add$" + + jungle_fertility_growth_add: "[county_fertility|E] Growth in Jungle [terrain|E]" + jungle_fertility_growth_mult: "$jungle_fertility_growth_add$" + jungle_fertility_decline_add: "[county_fertility|E] Decline in Jungle [terrain|E]" + jungle_fertility_decline_mult: "$jungle_fertility_decline_add$" + + forest_fertility_growth_add: "[county_fertility|E] Growth in Forest [terrain|E]" + forest_fertility_growth_mult: "$forest_fertility_growth_add$" + forest_fertility_decline_add: "[county_fertility|E] Decline in Forest [terrain|E]" + forest_fertility_decline_mult: "$forest_fertility_decline_add$" + + taiga_fertility_growth_add: "[county_fertility|E] Growth in Taiga [terrain|E]" + taiga_fertility_growth_mult: "$taiga_fertility_growth_add$" + taiga_fertility_decline_add: "[county_fertility|E] Decline in Taiga [terrain|E]" + taiga_fertility_decline_mult: "$taiga_fertility_decline_add$" + + wetlands_fertility_growth_add: "[county_fertility|E] Growth in Wetlands [terrain|E]" + wetlands_fertility_growth_mult: "$wetlands_fertility_growth_add$" + wetlands_fertility_decline_add: "[county_fertility|E] Decline in Wetlands [terrain|E]" + wetlands_fertility_decline_mult: "$wetlands_fertility_decline_add$" + + steppe_fertility_growth_add: "[county_fertility|E] Growth in Steppe [terrain|E]" + steppe_fertility_growth_mult: "$steppe_fertility_growth_add$" + steppe_fertility_decline_add: "[county_fertility|E] Decline Steppe [terrain|E]" + steppe_fertility_decline_mult: "$steppe_fertility_decline_add$" + + floodplains_fertility_growth_add: "[county_fertility|E] Growth in Floodplains [terrain|E]" + floodplains_fertility_growth_mult: "$floodplains_fertility_growth_add$" + floodplains_fertility_decline_add: "[county_fertility|E] Decline in Floodplains [terrain|E]" + floodplains_fertility_decline_mult: "$floodplains_fertility_decline_add$" + + drylands_fertility_growth_add: "[county_fertility|E] Growth in Drylands [terrain|E]" + drylands_fertility_growth_mult: "$drylands_fertility_growth_add$" + drylands_fertility_decline_add: "[county_fertility|E] Decline in Drylands [terrain|E]" + drylands_fertility_decline_mult: "$drylands_fertility_decline_add$" + + terraced_hills_fertility_growth_add: "[county_fertility|E] Growth in Terraced Hills [terrain|E]" + terraced_hills_fertility_growth_mult: "$terraced_hills_fertility_growth_add$" + terraced_hills_fertility_decline_add: "[county_fertility|E] Decline in Terraced Hills [terrain|E]" + terraced_hills_fertility_decline_mult: "$terraced_hills_fertility_decline_add$" + + MOD_HERD_GAIN: "[herd|E] Gain" + MOD_HERD_GAIN_MULT: "$MOD_HERD_GAIN$" + MOD_HERD_CONVERSION: "[herd|E] Conversion into $nomadic_riders$" + MOD_HERD_CAPACITY_ADD: "[herd|E] Capacity" + MOD_HERD_CAPACITY_MULT: "$MOD_HERD_CAPACITY_ADD$" + MOD_HORDE_CONVERSION_COST: "Upgrade [horde|E] Regiment Cost" + + MOD_BLOOD_BROTHER_PRESTIGE_MULT: "Monthly [prestige|E] from [blood_brothers|E]" + MOD_BLOOD_BROTHER_PIETY_MULT: "Monthly [piety|E] from [blood_brothers|E]" + MOD_BLOOD_BROTHER_RENOWN_MULT: "Monthly [dynasty_prestige|E] from [blood_brothers|E]" + + military_engineer_xp_gain_mult:0 "[GetTrait('military_engineer').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + forder_xp_gain_mult: "[GetTrait('forder').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + + the_great_steppe_all: "Current [steppe_season|E]" + + the_great_steppe_supply_limit_add: "[supply_limit|E] in [the_great_steppe|E]" + the_great_steppe_supply_limit_mult: "[supply_limit|E] in [the_great_steppe|E]" + + game_rule_extra_nomads_sami_supply_limit_add: "[supply_limit|E] in $situation_game_rule_extra_nomads_sami$" + game_rule_extra_nomads_sami_supply_limit_mult: "[supply_limit|E] in $situation_game_rule_extra_nomads_sami$" + + game_rule_extra_nomads_sahel_supply_limit_add: "[supply_limit|E] in $situation_game_rule_extra_nomads_sahel$" + game_rule_extra_nomads_sahel_supply_limit_mult: "[supply_limit|E] in $situation_game_rule_extra_nomads_sahel$" + + game_rule_extra_nomads_horn_supply_limit_add: "[supply_limit|E] in $situation_game_rule_extra_nomads_horn$" + game_rule_extra_nomads_horn_supply_limit_mult: "[supply_limit|E] in $situation_game_rule_extra_nomads_horn$" + + game_rule_extra_nomads_arabs_supply_limit_add: "[supply_limit|E] in $situation_game_rule_extra_nomads_arabs$" + game_rule_extra_nomads_arabs_supply_limit_mult: "[supply_limit|E] in $situation_game_rule_extra_nomads_arabs$" + + MOD_MAX_MIGRATION_DISTANCE_MULT: "Max [migration|E] Distance" + + specialized_herds_modifier_camel: "$building_camel_farms_01$" + specialized_herds_modifier_sheep: "$goat_yurt_01_domicile_building$, $sheep_yurt_01_domicile_building$" + specialized_herds_modifier_hunting: "$mpo_hunt_steppe$" + specialized_herds_modifier_horses: "$building_type_horse_pastures_01$" + + # TGP + MOD_GREAT_PROJECT_CONSTRUCTION_SPEED: "$game_concept_great_project_build_speed$" + + japan_administrative_government_opinion: "[ritsuryo_i|E] [japan_administrative|E] Ruler Opinion" + japan_administrative_government_vassal_opinion: "[ritsuryo_i|E] [japan_administrative|E] [vassal|E] Opinion" + japan_administrative_government_tax_contribution_add: "[ritsuryo_i|E] [japan_administrative|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + japan_administrative_government_tax_contribution_mult: "[ritsuryo_i|E] [japan_administrative|E] [vassal|E] [tax|E] [modifier_contribution|E]" + japan_administrative_government_levy_contribution_add: "[ritsuryo_i|E] [japan_administrative|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + japan_administrative_government_levy_contribution_mult: "[ritsuryo_i|E] [japan_administrative|E] [vassal|E] [levy|E] [modifier_contribution|E]" + japan_feudal_government_opinion: "[soryo_i|E] [japan_feudal|E] Ruler Opinion" + japan_feudal_government_vassal_opinion: "[soryo_i|E] [japan_feudal|E] [vassal|E] Opinion" + japan_feudal_government_tax_contribution_add: "[soryo_i|E] [japan_feudal|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + japan_feudal_government_tax_contribution_mult: "[soryo_i|E] [japan_feudal|E] [vassal|E] [tax|E] [modifier_contribution|E]" + japan_feudal_government_levy_contribution_add: "[soryo_i|E] [japan_feudal|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + japan_feudal_government_levy_contribution_mult: "[soryo_i|E] [japan_feudal|E] [vassal|E] [levy|E] [modifier_contribution|E]" + celestial_government_opinion: "[celestial_i|E] [celestial|E] Ruler Opinion" + celestial_government_vassal_opinion: "[celestial_i|E] [celestial|E] [vassal|E] Opinion" + celestial_government_tax_contribution_add: "[celestial_i|E] [celestial|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + celestial_government_tax_contribution_mult: "[celestial_i|E] [celestial|E] [vassal|E] [tax|E] [modifier_contribution|E]" + celestial_government_levy_contribution_add: "[celestial_i|E] [celestial|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + celestial_government_levy_contribution_mult: "[celestial_i|E] [celestial|E] [vassal|E] [levy|E] [modifier_contribution|E]" + mandala_government_opinion: "[mandala_i|E] [mandala|E] Ruler Opinion" + mandala_government_vassal_opinion: "[mandala_i|E] [mandala|E] [vassal|E] Opinion" + mandala_government_tax_contribution_add: "[mandala_i|E] [mandala|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + mandala_government_tax_contribution_mult: "[mandala_i|E] [mandala|E] [vassal|E] [tax|E] [modifier_contribution|E]" + mandala_government_levy_contribution_add: "[mandala_i|E] [mandala|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + mandala_government_levy_contribution_mult: "[mandala_i|E] [mandala|E] [vassal|E] [levy|E] [modifier_contribution|E]" + wanua_government_opinion: "[wanua_i|E] [wanua|E] Ruler Opinion" + wanua_government_vassal_opinion: "[wanua_i|E] [wanua|E] [vassal|E] Opinion" + wanua_government_tax_contribution_add: "[wanua_i|E] [wanua|E] [vassal|E] [tax|E] [modifier_base_contribution|E]" + wanua_government_tax_contribution_mult: "[wanua_i|E] [wanua|E] [vassal|E] [tax|E] [modifier_contribution|E]" + wanua_government_levy_contribution_add: "[wanua_i|E] [wanua|E] [vassal|E] [levy|E] [modifier_base_contribution|E]" + wanua_government_levy_contribution_mult: "[wanua_i|E] [wanua|E] [vassal|E] [levy|E] [modifier_contribution|E]" + + # Dynamic modifiers subject salary + subject_salary_expense: "salary expense" + subject_salary_income: "salary income" + subject_salary_expense_breakdown: "[subject|E] Salaries" + subject_salary_income_breakdown: "[subject|E] Salary" + + # Dynamic modifiers subject salary Gold + subject_salary_expense_gold_add: "[subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_mult: "$subject_salary_expense_gold_add$" + subject_salary_expense_gold_county_add: "[county|E] [subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_county_mult: "$subject_salary_expense_gold_county_add$" + subject_salary_expense_gold_duchy_add: "[duchy|E] [subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_duchy_mult: "$subject_salary_expense_gold_duchy_add$" + subject_salary_expense_gold_kingdom_add: "[kingdom|E] [subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_kingdom_mult: "$subject_salary_expense_gold_kingdom_add$" + subject_salary_expense_gold_empire_add: "[empire|E] [subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_empire_mult: "$subject_salary_expense_gold_empire_add$" + subject_salary_expense_gold_hegemony_add: "[hegemony|E] [subject|E] [gold|E] $subject_salary_expense$" + subject_salary_expense_gold_hegemony_mult: "$subject_salary_expense_gold_hegemony_add$" + subject_salary_income_gold_add: "[subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_mult: "$subject_salary_income_gold_add$" + subject_salary_income_gold_county_add: "[county|E] [subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_county_mult: "$subject_salary_income_gold_county_add$" + subject_salary_income_gold_duchy_add: "[duchy|E] [subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_duchy_mult: "$subject_salary_income_gold_duchy_add$" + subject_salary_income_gold_kingdom_add: "[kingdom|E] [subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_kingdom_mult: "$subject_salary_income_gold_kingdom_add$" + subject_salary_income_gold_empire_add: "[empire|E] [subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_empire_mult: "$subject_salary_income_gold_empire_add$" + subject_salary_income_gold_hegemony_add: "[hegemony|E] [subject|E] [gold|E] $subject_salary_income$" + subject_salary_income_gold_hegemony_mult: "$subject_salary_income_gold_hegemony_add$" + + # Dynamic modifiers subject salary Prestige + subject_salary_expense_prestige_add: "[subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_mult: "$subject_salary_expense_prestige_add$" + subject_salary_expense_prestige_county_add: "[county|E] [subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_county_mult: "$subject_salary_expense_prestige_county_add$" + subject_salary_expense_prestige_duchy_add: "[duchy|E] [subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_duchy_mult: "$subject_salary_expense_prestige_duchy_add$" + subject_salary_expense_prestige_kingdom_add: "[kingdom|E] [subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_kingdom_mult: "$subject_salary_expense_prestige_kingdom_add$" + subject_salary_expense_prestige_empire_add: "[empire|E] [subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_empire_mult: "$subject_salary_expense_prestige_empire_add$" + subject_salary_expense_prestige_hegemony_add: "[hegemony|E] [subject|E] [prestige|E] $subject_salary_expense$" + subject_salary_expense_prestige_hegemony_mult: "$subject_salary_expense_prestige_hegemony_add$" + subject_salary_income_prestige_add: "[subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_mult: "$subject_salary_income_prestige_add$" + subject_salary_income_prestige_county_add: "[county|E] [subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_county_mult: "$subject_salary_income_prestige_county_add$" + subject_salary_income_prestige_duchy_add: "[duchy|E] [subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_duchy_mult: "$subject_salary_income_prestige_duchy_add$" + subject_salary_income_prestige_kingdom_add: "[kingdom|E] [subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_kingdom_mult: "$subject_salary_income_prestige_kingdom_add$" + subject_salary_income_prestige_empire_add: "[empire|E] [subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_empire_mult: "$subject_salary_income_prestige_empire_add$" + subject_salary_income_prestige_hegemony_add: "[hegemony|E] [subject|E] [prestige|E] $subject_salary_income$" + subject_salary_income_prestige_hegemony_mult: "$subject_salary_income_prestige_hegemony_add$" + + # Dynamic modifiers subject salary Piety + subject_salary_expense_piety_add: "[subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_mult: "$subject_salary_expense_piety_add$" + subject_salary_expense_piety_county_add: "[county|E] [subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_county_mult: "$subject_salary_expense_piety_county_add$" + subject_salary_expense_piety_duchy_add: "[duchy|E] [subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_duchy_mult: "$subject_salary_expense_piety_duchy_add$" + subject_salary_expense_piety_kingdom_add: "[kingdom|E] [subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_kingdom_mult: "$subject_salary_expense_piety_kingdom_add$" + subject_salary_expense_piety_empire_add: "[empire|E] [subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_empire_mult: "$subject_salary_expense_piety_empire_add$" + subject_salary_expense_piety_hegemony_add: "[hegemony|E] [subject|E] [piety|E] $subject_salary_expense$" + subject_salary_expense_piety_hegemony_mult: "$subject_salary_expense_piety_hegemony_add$" + subject_salary_income_piety_add: "[subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_mult: "$subject_salary_income_piety_add$" + subject_salary_income_piety_county_add: "[county|E] [subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_county_mult: "$subject_salary_income_piety_county_add$" + subject_salary_income_piety_duchy_add: "[duchy|E] [subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_duchy_mult: "$subject_salary_income_piety_duchy_add$" + subject_salary_income_piety_kingdom_add: "[kingdom|E] [subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_kingdom_mult: "$subject_salary_income_piety_kingdom_add$" + subject_salary_income_piety_empire_add: "[empire|E] [subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_empire_mult: "$subject_salary_income_piety_empire_add$" + subject_salary_income_piety_hegemony_add: "[hegemony|E] [subject|E] [piety|E] $subject_salary_income$" + subject_salary_income_piety_hegemony_mult: "$subject_salary_income_piety_hegemony_add$" + + # Dynamic modifiers subject salary Renown + subject_salary_expense_renown_add: "[subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_mult: "$subject_salary_expense_renown_add$" + subject_salary_expense_renown_county_add: "[county|E] [subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_county_mult: "$subject_salary_expense_renown_county_add$" + subject_salary_expense_renown_duchy_add: "[duchy|E] [subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_duchy_mult: "$subject_salary_expense_renown_duchy_add$" + subject_salary_expense_renown_kingdom_add: "[kingdom|E] [subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_kingdom_mult: "$subject_salary_expense_renown_kingdom_add$" + subject_salary_expense_renown_empire_add: "[empire|E] [subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_empire_mult: "$subject_salary_expense_renown_empire_add$" + subject_salary_expense_renown_hegemony_add: "[hegemony|E] [subject|E] [dynasty_prestige|E] $subject_salary_expense$" + subject_salary_expense_renown_hegemony_mult: "$subject_salary_expense_renown_hegemony_add$" + subject_salary_income_renown_add: "[subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_mult: "$subject_salary_income_renown_add$" + subject_salary_income_renown_county_add: "[county|E] [subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_county_mult: "$subject_salary_income_renown_county_add$" + subject_salary_income_renown_duchy_add: "[duchy|E] [subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_duchy_mult: "$subject_salary_income_renown_duchy_add$" + subject_salary_income_renown_kingdom_add: "[kingdom|E] [subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_kingdom_mult: "$subject_salary_income_renown_kingdom_add$" + subject_salary_income_renown_empire_add: "[empire|E] [subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_empire_mult: "$subject_salary_income_renown_empire_add$" + subject_salary_income_renown_hegemony_add: "[hegemony|E] [subject|E] [dynasty_prestige|E] $subject_salary_income$" + subject_salary_income_renown_hegemony_mult: "$subject_salary_income_renown_hegemony_add$" + + # Dynamic modifiers subject salary Influence + subject_salary_expense_influence_add: "[subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_mult: "$subject_salary_expense_influence_add$" + subject_salary_expense_influence_county_add: "[county|E] [subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_county_mult: "$subject_salary_expense_influence_county_add$" + subject_salary_expense_influence_duchy_add: "[duchy|E] [subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_duchy_mult: "$subject_salary_expense_influence_duchy_add$" + subject_salary_expense_influence_kingdom_add: "[kingdom|E] [subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_kingdom_mult: "$subject_salary_expense_influence_kingdom_add$" + subject_salary_expense_influence_empire_add: "[empire|E] [subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_empire_mult: "$subject_salary_expense_influence_empire_add$" + subject_salary_expense_influence_hegemony_add: "[hegemony|E] [subject|E] [influence|E] $subject_salary_expense$" + subject_salary_expense_influence_hegemony_mult: "$subject_salary_expense_influence_hegemony_add$" + subject_salary_income_influence_add: "[subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_mult: "$subject_salary_income_influence_add$" + subject_salary_income_influence_county_add: "[county|E] [subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_county_mult: "$subject_salary_income_influence_county_add$" + subject_salary_income_influence_duchy_add: "[duchy|E] [subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_duchy_mult: "$subject_salary_income_influence_duchy_add$" + subject_salary_income_influence_kingdom_add: "[kingdom|E] [subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_kingdom_mult: "$subject_salary_income_influence_kingdom_add$" + subject_salary_income_influence_empire_add: "[empire|E] [subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_empire_mult: "$subject_salary_income_influence_empire_add$" + subject_salary_income_influence_hegemony_add: "[hegemony|E] [subject|E] [influence|E] $subject_salary_income$" + subject_salary_income_influence_hegemony_mult: "$subject_salary_income_influence_hegemony_add$" + + # Dynamic modifiers subject salary Herd + subject_salary_expense_herd_add: "[subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_mult: "$subject_salary_expense_herd_add$" + subject_salary_expense_herd_county_add: "[county|E] [subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_county_mult: "$subject_salary_expense_herd_county_add$" + subject_salary_expense_herd_duchy_add: "[duchy|E] [subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_duchy_mult: "$subject_salary_expense_herd_duchy_add$" + subject_salary_expense_herd_kingdom_add: "[kingdom|E] [subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_kingdom_mult: "$subject_salary_expense_herd_kingdom_add$" + subject_salary_expense_herd_empire_add: "[empire|E] [subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_empire_mult: "$subject_salary_expense_herd_empire_add$" + subject_salary_expense_herd_hegemony_add: "[hegemony|E] [subject|E] [herd|E] $subject_salary_expense$" + subject_salary_expense_herd_hegemony_mult: "$subject_salary_expense_herd_hegemony_add$" + subject_salary_income_herd_add: "[subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_mult: "$subject_salary_income_herd_add$" + subject_salary_income_herd_county_add: "[county|E] [subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_county_mult: "$subject_salary_income_herd_county_add$" + subject_salary_income_herd_duchy_add: "[duchy|E] [subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_duchy_mult: "$subject_salary_income_herd_duchy_add$" + subject_salary_income_herd_kingdom_add: "[kingdom|E] [subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_kingdom_mult: "$subject_salary_income_herd_kingdom_add$" + subject_salary_income_herd_empire_add: "[empire|E] [subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_empire_mult: "$subject_salary_income_herd_empire_add$" + subject_salary_income_herd_hegemony_add: "[hegemony|E] [subject|E] [herd|E] $subject_salary_income$" + subject_salary_income_herd_hegemony_mult: "$subject_salary_income_herd_hegemony_add$" + + # Dynamic modifiers subject salary Treasury + subject_salary_expense_treasury_add: "[subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_mult: "$subject_salary_expense_treasury_add$" + subject_salary_expense_treasury_county_add: "[county|E] [subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_county_mult: "$subject_salary_expense_treasury_county_add$" + subject_salary_expense_treasury_duchy_add: "[duchy|E] [subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_duchy_mult: "$subject_salary_expense_treasury_duchy_add$" + subject_salary_expense_treasury_kingdom_add: "[kingdom|E] [subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_kingdom_mult: "$subject_salary_expense_treasury_kingdom_add$" + subject_salary_expense_treasury_empire_add: "[empire|E] [subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_empire_mult: "$subject_salary_expense_treasury_empire_add$" + subject_salary_expense_treasury_hegemony_add: "[hegemony|E] [subject|E] [treasury|E] $subject_salary_expense$" + subject_salary_expense_treasury_hegemony_mult: "$subject_salary_expense_treasury_hegemony_add$" + subject_salary_income_treasury_add: "[subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_mult: "$subject_salary_income_treasury_add$" + subject_salary_income_treasury_county_add: "[county|E] [subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_county_mult: "$subject_salary_income_treasury_county_add$" + subject_salary_income_treasury_duchy_add: "[duchy|E] [subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_duchy_mult: "$subject_salary_income_treasury_duchy_add$" + subject_salary_income_treasury_kingdom_add: "[kingdom|E] [subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_kingdom_mult: "$subject_salary_income_treasury_kingdom_add$" + subject_salary_income_treasury_empire_add: "[empire|E] [subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_empire_mult: "$subject_salary_income_treasury_empire_add$" + subject_salary_income_treasury_hegemony_add: "[hegemony|E] [subject|E] [treasury|E] $subject_salary_income$" + subject_salary_income_treasury_hegemony_mult: "$subject_salary_income_treasury_hegemony_add$" + + # Dynamic modifiers subject salary Merit + subject_salary_expense_merit_add: "[subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_mult: "$subject_salary_expense_merit_add$" + subject_salary_expense_merit_county_add: "[county|E] [subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_county_mult: "$subject_salary_expense_merit_county_add$" + subject_salary_expense_merit_duchy_add: "[duchy|E] [subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_duchy_mult: "$subject_salary_expense_merit_duchy_add$" + subject_salary_expense_merit_kingdom_add: "[kingdom|E] [subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_kingdom_mult: "$subject_salary_expense_merit_kingdom_add$" + subject_salary_expense_merit_empire_add: "[empire|E] [subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_empire_mult: "$subject_salary_expense_merit_empire_add$" + subject_salary_expense_merit_hegemony_add: "[hegemony|E] [subject|E] [merit|E] $subject_salary_expense$" + subject_salary_expense_merit_hegemony_mult: "$subject_salary_expense_merit_hegemony_add$" + subject_salary_income_merit_add: "[subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_mult: "$subject_salary_income_merit_add$" + subject_salary_income_merit_county_add: "[county|E] [subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_county_mult: "$subject_salary_income_merit_county_add$" + subject_salary_income_merit_duchy_add: "[duchy|E] [subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_duchy_mult: "$subject_salary_income_merit_duchy_add$" + subject_salary_income_merit_kingdom_add: "[kingdom|E] [subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_kingdom_mult: "$subject_salary_income_merit_kingdom_add$" + subject_salary_income_merit_empire_add: "[empire|E] [subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_empire_mult: "$subject_salary_income_merit_empire_add$" + subject_salary_income_merit_hegemony_add: "[hegemony|E] [subject|E] [merit|E] $subject_salary_income$" + subject_salary_income_merit_hegemony_mult: "$subject_salary_income_merit_hegemony_add$" + + # Dynamic modifiers subject salary Barter Goods + subject_salary_expense_barter_goods_add: "[subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_mult: "$subject_salary_expense_barter_goods_add$" + subject_salary_expense_barter_goods_county_add: "[county|E] [subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_county_mult: "$subject_salary_expense_barter_goods_county_add$" + subject_salary_expense_barter_goods_duchy_add: "[duchy|E] [subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_duchy_mult: "$subject_salary_expense_barter_goods_duchy_add$" + subject_salary_expense_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_kingdom_mult: "$subject_salary_expense_barter_goods_kingdom_add$" + subject_salary_expense_barter_goods_empire_add: "[empire|E] [subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_empire_mult: "$subject_salary_expense_barter_goods_empire_add$" + subject_salary_expense_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [trade_goods|E] $subject_salary_expense$" + subject_salary_expense_barter_goods_hegemony_mult: "$subject_salary_expense_barter_goods_hegemony_add$" + subject_salary_income_barter_goods_add: "[subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_mult: "$subject_salary_income_barter_goods_add$" + subject_salary_income_barter_goods_county_add: "[county|E] [subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_county_mult: "$subject_salary_income_barter_goods_county_add$" + subject_salary_income_barter_goods_duchy_add: "[duchy|E] [subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_duchy_mult: "$subject_salary_income_barter_goods_duchy_add$" + subject_salary_income_barter_goods_kingdom_add: "[kingdom|E] [subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_kingdom_mult: "$subject_salary_income_barter_goods_kingdom_add$" + subject_salary_income_barter_goods_empire_add: "[empire|E] [subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_empire_mult: "$subject_salary_income_barter_goods_empire_add$" + subject_salary_income_barter_goods_hegemony_add: "[hegemony|E] [subject|E] [trade_goods|E] $subject_salary_income$" + subject_salary_income_barter_goods_hegemony_mult: "$subject_salary_income_barter_goods_hegemony_add$" + + # dynamic experience levels + MOD_MAX_PIETY_LEVEL: "Maximum [piety_level|E]" + max_piety_level_entry: "#L [maximum_piety_level|E]: $LEVEL$" + base_piety_level_entry: "Default [piety_level|E]: $LEVEL$" + government_piety_level_entry: "[maximum_piety_level|E] for [Character.GetGovernment.GetName]: $LEVEL$" + MOD_MAX_PRESTIGE_LEVEL: "Maximum [prestige_level|E]" + max_prestige_level_entry: "Maximum $game_concept_prestige_level$: $LEVEL$" + base_prestige_level_entry: "Default [prestige_level|E]: $LEVEL$" + government_prestige_level_entry: "Maximum [prestige_level|E] for [Character.GetGovernment.GetName]: $LEVEL$" + MOD_MAX_INFLUENCE_LEVEL: "Maximum [influence_level|E]" + max_influence_level_entry: "Maximum $game_concept_influence_level$: $LEVEL$" + base_influence_level_entry: "Default [influence_level|E]: $LEVEL$" + government_influence_level_entry: "Maximum [influence_level|E] for [Character.GetGovernment.GetName]: $LEVEL$" + MOD_MAX_MERIT_LEVEL: "Maximum [merit_level|E]" + max_merit_level_entry: "Maximum: $LEVEL$" + base_merit_level_entry: "Base: $LEVEL$" + government_merit_level_entry: "Maximum [merit_level|E] for [Character.GetGovernment.GetName]: $LEVEL$" + + MOD_STATIONED_MAA_DAMAGE_MULT_PER_PIETY_LEVEL: "$MOD_STATIONED_MAA_DAMAGE_ADD$ per [piety_level|E]" + MOD_STATIONED_MAA_TOUGHNESS_MULT_PER_PIETY_LEVEL: "$MOD_STATIONED_MAA_TOUGHNESS_ADD$ per [piety_level|E]" + MOD_TAX_PER_PIETY_LEVEL: "[tax|E] per [piety_level|E]" + MOD_MONTHLY_INCOME_PER_PIETY_LEVEL_ADD: "$MOD_MONTHLY_INCOME_MULT$ per [piety_level|E]" + + MOD_MONTHLY_BARTER_GOODS_PREFIX: "[barter_goods_i]" + MOD_MONTHLY_BARTER_GOODS: "[trade_goods|E]" + MOD_MONTHLY_BARTER_GOODS_MULT: "Monthly [trade_goods|E]" + MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_ADD: "[trade_goods|E] [income|E] while at [war|E]" + MOD_MONTHLY_WAR_BARTER_GOODS_INCOME_MULT: "Monthly [trade_goods|E] [income|E] while at [war|E]" + + celestial_movement_power_promote_scheme_phase_duration_add: "[GetScheme('celestial_movement_power_promote').GetTypeName] [scheme_speed_single|E]" + study_confucian_classics_scheme_phase_duration_add: "[GetScheme('study_confucian_classics').GetTypeName] [scheme_speed_single|E]" + mentoring_scheme_phase_duration_add: "[GetScheme('mentoring').GetTypeName] [scheme_speed_single|E]" + + merit_income_per_liege_tax_entry: "[merit|E] for [governor|E] [taxes|E]" + merit_income_per_army_value_entry: "[merit|E] for [governor|E] [title_men_at_arms|E]" + merit_income_per_tax_mult_entry: "[merit|E] per [tax|E] paid" + merit_income_per_army_value_mult_entry: "[merit|E] per [Concept( 'title_men_at_arms', 'Men-at-Arms' )|E] value" + merit_income_regiment_value_entry: "[Concept( 'title_men_at_arms', 'Men-at-Arms' )|E] Recruitment Value" + merit_base_income_entry: "Base [merit|E] gain" + merit_income_breakdown_title: "Monthly [merit|E] income" + + lifestyle_poet_xp_gain_mult: "[GetTrait('lifestyle_poet').GetName( GetNullCharacter )] [trait_level_track_xp|E] Gain" + + MOD_CAN_VASSALS_BE_ATTACKED: "Can vassals be attacked" diff --git a/localization/english/replace/rally_point_window_l_english.yml b/localization/english/replace/rally_point_window_l_english.yml new file mode 100644 index 00000000..7da803a4 --- /dev/null +++ b/localization/english/replace/rally_point_window_l_english.yml @@ -0,0 +1,37 @@ +l_english: + RP_RAISE:0 "Raise Local Army" + RP_RAISE_RAID:0 "Raise Local Raiders" + RP_RAISE_MEN_AT_ARMS:0 "Raise All Men-at-Arms Here" + RP_RAISE_ALL:0 "Raise All Here" + RP_RAISE_PROMPT:0 "#T Raise Army and all Soldiers assigned to this Rally Point here#!" + RP_RAISE_ALL_PROMPT:0 "#T Raise all Armies and all Soldiers here#!" + RP_TOOLTIP_HEADER:0 "#T $NAME$#!" + RP_RAISE_RAID_TOOLTIP:0 "#T Raise Raider Army#!\n[GetPlayer.GetStartRaidBlockers]\n[raid|E] armies cost [GetDefine('NArmy', 'RAID_ARMY_COST_MULT')|%P0] of normal armies' cost to maintain.\nRaid armies cannot reinforce." + RP_NO_RAISABLE_TROOPS_ASSIGNED:0 "#X No unraised Soldiers assigned to this [rally_point|E]#!" + RP_NO_RAISABLE_TROOPS_ALL:0 "#X No unraised Soldiers available#!" + RP_NO_RAISABLE_TROOPS_MEN_AT_ARMS:0 "#X No unraised Men-at-Arms available#!" + RP_LOCAL_LEVIES_LABEL:0 "Local [levies|E]" + RP_LOCAL_LEVIES_TOOLTIP:0 "#T Local [levies|E]#!\nUnraised: [RallyPointWindow.GetUnraisedLocalLevies|V]\nAlive: [RallyPointWindow.GetAliveLocalLevies|V]\nTotal: [RallyPointWindow.GetTotalLocalLevies|V]" + RP_ALL_SOLDIERS_LABEL:0 "All [soldiers|E]" + RP_KNIGHTS_ENTRY:1 "[knight_i]$knight_culture_player_plural$: [GetPlayer.GetKnightCount|V]" + RP_KNIGHTS_TOOLTIP:1 "#T $knight_culture_player_plural$: [knight_i][GetPlayer.GetKnightCount|V]#!\n[GetPlayer.GetUnraisedKnightBreakdown]" + RP_LEVIES_ENTRY:0 "[levies|E]: [ArmyComposition.GetMaxNumberOfLevies|V]" + RP_MAA_ENTRY:0 "[men_at_arms|E]: [ArmyComposition.GetMaxNumberOfMAA|V]" + RP_TIME_TO_RAISE:0 "Time to raise: $VALUE|V$" + RP_TIME_TO_RAISE_DELAY:1 "The time to raise includes a delay of $VALUE$ due to [soldiers|E] returning home from recently disbanding" + RP_RAISE_TOOLTIP_HEADER: "#T $RP_RAISE$#!" + RP_RAISE_TOOLTIP_DESC: "Raise all [armies|E] that are the closest to this particular [rally_point|E].\n#weak If you only have one Rally Point, all Armies will be raised here.#!" + RP_RAISE_MEN_AT_ARMS_TOOLTIP_HEADER: "#T $RP_RAISE$#!" + RP_RAISE_MEN_AT_ARMS_TOOLTIP_DESC: "Raise all [men_at_arms|E] here" + RP_RAISE_RAID_TOOLTIP_HEADER: "#T $RP_RAISE_RAID$#!" + RP_RAISE_RAID_TOOLTIP_DESC: "Raise all [armies|E] that are the closest to this particular [rally_point|E] as [raiders|E].\n#weak If you only have one Rally Point, all Armies will be raised here.#!" + RP_RAISE_ALL_TOOLTIP_HEADER: "#T $RP_RAISE_ALL$#!" + RP_RAISE_ALL_TOOLTIP_DESC: "Raise #emphasis all#! your [armies|E] here, regardless of which [rally_point|E] is the closest" + RP_MOVE_RALLY_POINT:1 "#T Move Rally Point\n#! #I Alternatively, right-click on the map directly#!" + RP_CANNOT_MOVE_RALLY_POINT: "#X Landless characters cannot move their [rally_point|E]#!" + RP_RAISE_BLOCK_AT_WAR:0 "@warning_icon! #X You cannot raise [raiders|E] while at [war|E]#!" + + RP_RAISE_BARTER: "Raise Local Traders" + RP_RAISE_BARTER_TOOLTIP: "#T Raise Traders#!\n[GetPlayer.GetStartBarterBlockers]\nTraders cost [GetDefine('NArmy', 'BARTER_ARMY_COST_MULT')|%P0] of normal armies' cost to maintain.\nTraders cannot reinforce." + RP_RAISE_BARTER_TOOLTIP_HEADER: "#T $RP_RAISE_BARTER$#!" + RP_RAISE_BARTER_TOOLTIP_DESC: "Raise all [armies|E] that are the closest to this particular [rally_point|E] as [traders|E].\n#weak If you only have one Rally Point, all Armies will be raised here.#!" diff --git a/localization/english/replace/units_l_english.yml b/localization/english/replace/units_l_english.yml new file mode 100644 index 00000000..5cca7b45 --- /dev/null +++ b/localization/english/replace/units_l_english.yml @@ -0,0 +1,52 @@ +l_english: + UNIT_TYPE_MY:0 "your" + UNIT_TYPE_ALLY:0 "ally" + UNIT_TYPE_ENEMY:0 "enemy" + UNIT_TYPE_HOSTILE:0 "hostile" + UNIT_TYPE_NEUTRAL:0 "neutral" + UNIT_TYPE_UNKNOWN:0 "unknown" + ARMY_TYPE_RAIDERS: "[raid|E] [army|E]" + ARMY_TYPE_BARTERERS: "[trade|E] Mission" + ARMY_TYPE_DEFAULT: "[army|E]" + UNIT_COUNT_SOLDIERS:0 "[soldiers|E]: $VALUE|0V$" + UNIT_COUNT_LEVIES:0 " [levies|E]: $VALUE|0V$" + UNIT_COUNT_KNIGHTS:1 " [knight_i]$knight_culture_player_plural$: $VALUE|0V$" + UNIT_TAB_MAA:1 " @$ICONKEY$_icon!$NAME$: $VALUE|0V$" + UNIT_MAA_WITH_MAX:1 "@$ICONKEY$_icon!$NAME$: $VALUE|0V$/$MAX|V0$" + ARMY_QUALITY_LEVEL_1:0 "@army_quality_icon_1! Low [troop_quality|E]" + ARMY_QUALITY_LEVEL_2:0 "@army_quality_icon_2! Decent [troop_quality|E]" + ARMY_QUALITY_LEVEL_3:0 "@army_quality_icon_3! High [troop_quality|E]" + ARMY_QUALITY_LEVEL_4:0 "@army_quality_icon_4! Superior [troop_quality|E]" + ARMY_QUALITY_LEVEL_5:0 "@army_quality_icon_5! Elite [troop_quality|E]" + UNIT_SUPPLY_STATE_POSITIVE:0 "@supply_icon!$STATE|V$ ($CURRENT|+0$) $VALUE|+=$/month" + UNIT_SUPPLY_STATE_NEGATIVE:0 "@supply_icon!$STATE|V$ ($CURRENT|+0$) @supply_trend_negative_icon!$VALUE|+=$/month" + UNIT_NEUTRAL_COMBAT_PREDICTION:1 "In a fight on neutral [terrain|E], if you attack with your selected [armies|E], $PREDICTION$" + UNIT_TOOLTIP_NO_COMMANDER:0 "No [commander|E]" + UNIT_TOOLTIP_COMMANDER:0 "[commander|E]: [CHARACTER.GetUIName|U] (@skill_martial_icon![CHARACTER.GetSkill( 'martial' )|V])" + UNIT_TOOLTIP_COMMANDER_TRAIT:0 "$TRAIT$" + UNIT_TERRAIN_TOOLTIP_SUPPLY_GOOD:0 " $KEY$: #V $MEN|0$/$SUPPLY|0$#!" + UNIT_TERRAIN_TOOLTIP_SUPPLY_BAD:0 " $KEY$: #N $MEN|0$/$SUPPLY|0$#!" + UNIT_TERRAIN_TOOLTIP_LOCAL_SUPPLY_GOOD:1 "Local $KEY$: #V $MEN|0$/$SUPPLY|0$#!" + UNIT_TERRAIN_TOOLTIP_LOCAL_SUPPLY_BAD:1 "Local $KEY$: #N $MEN|0$/$SUPPLY|0$#!" + UNIT_TERRAIN_TOOLTIP_COUNTY_ATTRITION:0 " Hostile County: $PERC|%0-$" + KNIGHT_BREAKDOWN_ENTRY:0 "[CHARACTER.GetShortUIName|U]: [CHARACTER.GetSkill( 'prowess' )] [prowess|E]" + UNIT_STATE_REGULAR:0 "Standing still" + UNIT_STATE_COMBAT:0 "In Combat" + UNIT_STATE_SIEGING:0 "Besieging" + UNIT_STATE_EMBARKED:0 "Embarked" + UNIT_STATE_GATHERING:0 "Gathering: $VALUE$ left" + UNIT_STATE_MOVING:0 "Moving" + UNIT_STATE_RAIDING:0 "Raiding" + UNIT_STATE_BARTERING: "Trading" + UNIT_STATE_RETREATING:0 "Retreating to [PROVINCE.GetName]" + ARMY_STATUS_ICON_TOOLTIP:0 "$DESC$" + KNIGHT_IN_THIS_ARMY_TOOLTIP:2 "Is a $knight_culture_player$ in this [army|E]" + KNIGHT_IN_ARMY_TOOLTIP:1 "[knight_i]Is a $knight_culture_player$ in an [army|E]" + UNIT_HOSTILE:0 "This [army|E] is [hostile_army|E]" + SUPPLY_BREAKDOWN_FRIENDLY_TERRITORY:0 "In friendly territory" + SUPPLY_BREAKDOWN_LIMIT:0 "Over [supply_limit|E]" + SUPPLY_BREAKDOWN_COMMANDER:0 "[commander|E] ([CHARACTER.GetShortUIName])" + SUPPLY_LOSS_AT_SEA:0 "At Sea" + SUPPLY_BREAKDOWN_PENALTY:0 "Supply penalty" + SUPPLY_BREAKDOWN_BONUS:0 "Supply bonus" +