commit 432da037023894dd8e603435ebf2c7f12f632dd1 Author: Archgit Date: Wed Dec 18 21:22:13 2024 -0500 First Commit - Initialization diff --git a/Contract_Assistance_&_Foment_Revolt.mod b/Contract_Assistance_&_Foment_Revolt.mod new file mode 100644 index 0000000..962a9b6 --- /dev/null +++ b/Contract_Assistance_&_Foment_Revolt.mod @@ -0,0 +1,9 @@ +version="B_0.1" +tags={ + "Character Interactions" + "Gameplay" +} +name="Universal Contract Assistance & Foment Revolt" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Contract_Assistance_&_Foment_Revolt" +remote_file_id="2979921118" \ No newline at end of file diff --git a/Contract_Assistance_&_Foment_Revolt/common/character_interactions/xx_contract_assistance_&_foment _revolt.txt b/Contract_Assistance_&_Foment_Revolt/common/character_interactions/xx_contract_assistance_&_foment _revolt.txt new file mode 100644 index 0000000..94b3612 --- /dev/null +++ b/Contract_Assistance_&_Foment_Revolt/common/character_interactions/xx_contract_assistance_&_foment _revolt.txt @@ -0,0 +1,1483 @@ +################################################ +# Foment revolts and contract assistance for all +# gathered & edited by idev +################################################ + +@msg_neutral_soundeffect = "event:/SFX/UI/Notifications/Messages/sfx_ui_message_theme_neutral" + +################################################## +# Incite Revolts +# by Maxence Voleau +# edited by idev +################################################## Updated for SP1 + +incite_revolts_interaction = { + interface_priority = 30 + category = interaction_category_hostile + common_interaction = yes + desc = "Invest gold in an effort to destabilize [recipient.GetHerHis] [realm|E]" + 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 = { + has_dlc_feature = the_fate_of_iberia + NOT = { scope:recipient = scope:actor } + } + + 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 + } + } + } + } + } + + # 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 + } + } + } + + # SP1 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 = { + 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 = { + 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 + } + } + } + } + } + } + } + } + } + + ai_frequency = 60 + + ai_potential = { + any_character_struggle = { + involvement = involved + OR = { + is_struggle_phase = struggle_iberia_phase_opportunity + is_struggle_phase = struggle_iberia_phase_hostility + } + } + short_term_gold >= medium_gold_value + } + + 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 + NOT = { 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 +# edited by idev +################################################## + +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 = "Propose effective military aid in exchange for gold." + icon = icon_gold + + greeting = positive + #################################################################### Notification below is short with no info, ai to player int + notification_text = contract_assistance_interaction_notification + + cooldown_against_recipient = { years = 5 } + + is_shown = { + + # Recipient is Involved in Struggle, at war, and not at war with Actor + scope:recipient = { + 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 } + } + + # 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 } + + # 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 } } + } + } + + can_be_picked = { + # Recipient is war leader in chosen war + scope:target = { + is_war_leader = scope:recipient + # 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 } + } + + 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 = m_cafr_ca_war_contribution_value + } + set_variable = { + name = owed_contract_assistance_gold + value = m_cafr_ca_gold_value + } + stress_impact = { + craven = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + + } + # Recipient effects + scope:recipient = { + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + custom_tooltip = m_cafr_contract_assistance_interaction_condition_tt + show_as_tooltip = { + pay_short_term_gold = { + target = scope:actor + gold = m_cafr_ca_gold_value + } + } + } + + # Notification to inform/remind player of expected contribution. + if = { + limit = { + scope:actor = { + is_ai = no + } + } + scope:actor = { + send_interface_message = { + type = event_generic_neutral_text + title = m_cafr_contribution_count_title + right_icon = scope:actor + desc = m_cafr_contribution_count_text + soundeffect = @msg_neutral_soundeffect + } + } + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + } + + ai_accept = { + base = 0 # Reluctant to spend money without good reason + # Recipient doesn't have much gold to give - always up for a deal! + modifier = { + add = 100 + desc = m_cafr_ca_recipient_gold_consideration_postitive.tt + trigger_if = { + limit = { exists = scope:recipient} + m_cafr_ca_gold_value < 50 + } + } + # 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 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 + } + + # Allegiances + # fp2_contracting_ally_modifier = { + # WARMONGER = scope:recipient + # WARJOINER = scope:actor + # } + } + + ai_potential = { + is_imprisoned = no + is_at_war = no + ai_boldness >= -25 + } + 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 + } + ai_frequency = 30 # We need a quite high frequency as wars do not last forever + + ai_will_do = { + base = 0 + + # Don't care to help someone of a hostile faith + modifier = { + value = 0 + add = { + value = 0 + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value > faith_astray_level + } + } + } + add = -65 + } + } + } + + # Fighting against dynasty member would weaken house + modifier = { + add = { + value = 0 + if = { + limit = { + OR = { + AND = { + scope:target.primary_defender = scope:recipient + scope:target.primary_attacker = { + dynasty = scope:actor.dynasty + } + + } + AND = { + scope:target.primary_attacker = scope:recipient + scope:target.primary_defender = { + dynasty = scope:actor.dynasty + } + } + + } + } + add = -125 + } + } + } + + 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 + NOT = { 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 + NOT = { this = scope:recipient } + has_relation_rival = scope:actor + } + } + } + add = 25 + } + + # Trying to do the lord's work and cut down on spaminess beyond this point. + + # Higher chance to target a human player + modifier = { + scope:recipient = { is_ai = no } + factor = 1.25 + } + + # Too insignificant an army to make a large enough impact + modifier = { + scope:actor = { + OR = { + current_military_strength <= { + value = scope:recipient.max_military_strength + divide = 3 + } + + current_military_strength <= { + value = 800 + } + + } + } + factor = 0 + } + + # Recipient is comporable to target. + modifier = { + limit = { exists = target } + scope:recipient = { + max_military_strength >= { + value = scope:target.max_military_strength + } + } + add = -15 + } + + } +} + +################################################## +# Request Contract Assistance +# by Maxence Voleau +# edited by idev +################################################## + +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 = "Propose gold in exchange for effective military aid." + icon = icon_gold + + greeting = positive + notification_text = request_contract_assistance_interaction_notification + + cooldown_against_recipient = { years = 5 } + + is_shown = { + scope:actor = { + is_at_war = yes + NOR = { + this = scope:recipient + is_at_war_with = scope:recipient + } + } + # Added to exclude interaction with courtiers and such. + scope:recipient = { + current_military_strength > 100 + } + + } + + has_valid_target = { + exists = scope:target + } + + has_valid_target_showing_failures_only = { + scope:target = { is_war_leader = scope:actor } + } + + 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 = m_cafr_rca_war_contribution_value + } + set_variable = { + name = owed_contract_assistance_gold + value = m_cafr_rca_gold_value + } + stress_impact = { + craven = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + + } + # Recipient effects + scope:actor = { + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + custom_tooltip = m_cafr_request_contract_assistance_interaction_condition_tt + show_as_tooltip = { + pay_short_term_gold = { + target = scope:recipient + gold = m_cafr_rca_gold_value + } + } + } + } + + on_decline = { + # Refusal notification + scope:actor = { trigger_event = char_interaction.0236 } + } + + ai_accept = { + base = 0 # Reluctant to spend money without good reason + + # Don't care to help someone of a hostile faith + modifier = { + value = 0 + add = { + value = 0 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value > faith_astray_level + } + } + } + add = -100 + } + } + desc = rca_hostile_faith_reason + } + + # Fighting against dynasty member would weaken house + modifier = { + add = { + value = 0 + if = { + limit = { + OR = { + AND = { + scope:target.primary_defender = scope:actor + scope:target.primary_attacker = { + dynasty = scope:recipient.dynasty + } + + } + AND = { + scope:target.primary_attacker = scope:actor + scope:target.primary_defender = { + dynasty = scope:recipient.dynasty + } + } + + } + } + add = -125 + } + } + desc = rca_dynasty_enemy_reason + } + + # Little amount of gold + modifier = { + add = -50 + desc = m_cafr_rca_recipient_gold_consideration_negative.tt + trigger_if = { + limit = { exists = scope:recipient} + m_cafr_rca_gold_value < 85 + } + } + + modifier = { # Reluctant when already at war (catches when armies are not yet raised but war has been declared) + add = -50 + scope:recipient = { + is_at_war = yes + } + desc = ALREADY_AT_WAR + } + + # Recipient has a lot of cash + modifier = { + add = { + value = -25 + if = { + limit = { + gold >= { + value = m_cafr_rca_gold_value + multiply = 2 + } + } + add = -25 + } + if = { + limit = { + gold >= { + value = m_cafr_rca_gold_value + multiply = 3 + } + } + add = -35 + } + } + gold >= m_cafr_rca_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 = 36 + + ai_will_do = { + base = 0 + + # Recipient is not likely to help if they are of a hostile faith + modifier = { + value = 0 + add = { + value = 0 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value > faith_astray_level + } + } + } + add = -50 + } + } + } + + # Recipient would not want to fight against own dynasty + modifier = { + add = { + value = 0 + if = { + limit = { + OR = { + AND = { + scope:target.primary_defender = scope:actor + scope:target.primary_attacker = { + dynasty = scope:recipient.dynasty + } + + } + AND = { + scope:target.primary_attacker = scope:actor + scope:target.primary_defender = { + dynasty = scope:recipient.dynasty + } + } + + } + } + add = -125 + } + } + } + + 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_divided_value + } + trigger_else = { scope:actor.max_military_strength < war_attacker_total_strength_divided_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 + NOT = { 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 + } + + + # Criteria to make interaction less prominent. + + modifier = { # Decrease chance if player would be an enemy + trigger_if = { + limit = { exists = scope:recipient } + scope:target = { + any_war_enemy = { + is_ai = no + } + } + } + add = -15 + } + + modifier = { # Not going to use if I have ally I can call to war + trigger_if = { + limit = { exists = scope:target } + scope:actor = { + any_ally = { + NOT = { + scope:target = { + any_war_participant = yes + } + } + } + } + } + factor = 0 + } + + + } +} diff --git a/Contract_Assistance_&_Foment_Revolt/common/script_values/m_cafr_script_values.txt b/Contract_Assistance_&_Foment_Revolt/common/script_values/m_cafr_script_values.txt new file mode 100644 index 0000000..76e9a8c --- /dev/null +++ b/Contract_Assistance_&_Foment_Revolt/common/script_values/m_cafr_script_values.txt @@ -0,0 +1,635 @@ + +# Creator: DevZero + +########################################################################################################## +# CA Gold +########################################################################################################## +m_cafr_ca_gold_value = { + value = 0 + if = { + limit = { scope:recipient.gold > 50 } + add = scope:recipient.gold + } + multiply = { + value = 0 + if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.4 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.6 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.8 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 1 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.3 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.5 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.65 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.8 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.15 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.3 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.5 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.75 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.1 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.25 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.45 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.6 + } + } + round = yes + + if = { + limit = { + scope:recipient.gold < 1 + } + + multiply = 0 + } + else_if = { + limit = { + scope:recipient.gold < 51 + } + add = scope:recipient.gold + + } +} + +######################################################################################################## +# CA Contribution +######################################################################################################## + +m_cafr_ca_war_contribution_value = { + value = 0 + add = { + value = 0 + if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_empire + } + } + add = 1400 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + } + add = 1000 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + } + add = 500 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_county + } + } + add = 300 + } + } + add = { + value = 0 + if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + add = 2200 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + add = 1500 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + add = 1000 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_county + } + } + add = 750 + } + + } + +} + +####################################################################################################################### +# RCA Gold +####################################################################################################################### +m_cafr_rca_gold_value = { + value = 0 + if = { + limit = { scope:actor.gold > 50 } + add = scope:actor.gold + } + multiply = { + value = 0 + if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.75 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.5 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.35 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_county + } + } + } + add = 0.25 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.85 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.65 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.55 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + } + add = 0.4 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.95 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.8 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.7 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + } + add = 0.65 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_county + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 1 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.95 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.8 + } + else_if = { + limit = { + AND = { + scope:actor = { + highest_held_title_tier = tier_empire + } + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + } + add = 0.75 + } + } + round = yes + + if = { + limit = { + scope:actor.gold < 1 + } + multiply = 0 + } + else_if = { + limit = { + scope:actor.gold < 51 + } + add = scope:actor.gold + } + +} +####################################################################################################################### +# RCA Contribution Value +####################################################################################################################### + +m_cafr_rca_war_contribution_value = { + value = 0 + add = { + value = 0 + if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_empire + } + } + add = 2200 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_kingdom + } + } + add = 1500 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_duchy + } + } + add = 1000 + } + else_if = { + limit = { + scope:actor = { + highest_held_title_tier = tier_county + } + } + add = 750 + } + } + add = { + value = 0 + if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_empire + } + } + add = 1400 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_kingdom + } + } + add = 1000 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_duchy + } + } + add = 500 + } + else_if = { + limit = { + scope:recipient = { + highest_held_title_tier = tier_county + } + } + add = 300 + } + } + +} diff --git a/Contract_Assistance_&_Foment_Revolt/descriptor.mod b/Contract_Assistance_&_Foment_Revolt/descriptor.mod new file mode 100644 index 0000000..21313a7 --- /dev/null +++ b/Contract_Assistance_&_Foment_Revolt/descriptor.mod @@ -0,0 +1,8 @@ +version="B_0.1" +tags={ + "Character Interactions" + "Gameplay" +} +name="Universal Contract Assistance & Foment Revolt" +supported_version="1.*" +remote_file_id="2979921118" \ No newline at end of file diff --git a/Contract_Assistance_&_Foment_Revolt/localization/english/m_cafr_loc_l_english.yml b/Contract_Assistance_&_Foment_Revolt/localization/english/m_cafr_loc_l_english.yml new file mode 100644 index 0000000..189eb78 --- /dev/null +++ b/Contract_Assistance_&_Foment_Revolt/localization/english/m_cafr_loc_l_english.yml @@ -0,0 +1,19 @@ +l_english: + m_cafr_contribution_count_title: "$contract_assistance_interaction$: Contract Expectations" + + m_cafr_contribution_count_text: "\nYour expected [war_contribution|E] is: [SCOPE.ScriptValue('m_cafr_ca_war_contribution_value')|Z0]. \n\n\nYour expected payment is [gold_i][SCOPE.ScriptValue('m_cafr_ca_gold_value')|V0]. + + m_cafr_contract_assistance_interaction_condition_tt:1 "If [actor.GetShortUINamePossessive] [war_contribution|E] is at least [SCOPE.ScriptValue('m_cafr_ca_war_contribution_value')|Z0] when the [war|E] ends:" + + m_cafr_request_contract_assistance_interaction_condition_tt:1 "If [recipient.GetShortUINamePossessive] [war_contribution|E] is at least [SCOPE.ScriptValue('m_cafr_rca_war_contribution_value')|Z0] when the [war|E] ends:" + + m_cafr_aid_title: "$contract_assistance_interaction$: Contract Expectations" + m_cafr_aid_text: "\nYour expected [war_contribution|E] is: [SCOPE.ScriptValue('m_cafr_ca_war_contribution_value')|Z0]. \n\n\nYour expected payment is [gold_i][SCOPE.ScriptValue('m_cafr_ca_gold_value')|V0]. + + m_cafr_rca_recipient_gold_consideration_negative.tt: "[recipient.GetShortUIName] doesn't think offered [gold|E] is worth it: #N -50#!" + + m_cafr_ca_recipient_gold_consideration_postitive.tt: "[recipient.GetShortUIName] is getting a good deal: #P +100#!" + + rca_hostile_faith_reason: "Differences in Faiths: $VALUE|=+0$" + rca_dynasty_enemy_reason: "Opponent is of same dynasty: $VALUE|=+0$" + diff --git a/Contract_Assistance_&_Foment_Revolt/thumbnail.png b/Contract_Assistance_&_Foment_Revolt/thumbnail.png new file mode 100644 index 0000000..b2e07fd Binary files /dev/null and b/Contract_Assistance_&_Foment_Revolt/thumbnail.png differ diff --git a/Fealty_to_Heir.mod b/Fealty_to_Heir.mod new file mode 100644 index 0000000..cd41889 --- /dev/null +++ b/Fealty_to_Heir.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Balance" + "Character Interactions" + "Gameplay" +} +name="Vassal Fealty to Heir" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Fealty_to_Heir" +remote_file_id="2992224656" \ No newline at end of file diff --git a/Fealty_to_Heir/common/character_interactions/mod_fealty_to_heir.txt b/Fealty_to_Heir/common/character_interactions/mod_fealty_to_heir.txt new file mode 100644 index 0000000..7b173ac --- /dev/null +++ b/Fealty_to_Heir/common/character_interactions/mod_fealty_to_heir.txt @@ -0,0 +1,1001 @@ + +######################################################################### +# Vassal Swear Fealty to Heir +# Developed by idev +######################################################################### +fealty_to_heir_interaction = { + category = interaction_category_diplomacy + common_interaction = yes + notification_text = liege_dismiss_entrenched_regency_interaction_proposal + icon = alliance + + desc = fealty_to_heir_interaction_desc + + can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 59 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_shown = { + # Be'ith not thyself + NOT = { scope:actor = scope:recipient } + # Character is vassal of of player + scope:recipient = { + is_vassal_of = scope:actor + } + # Heir does not wish to play his part as his imaginary friend / vassal + NOT = { + scope:recipient = scope:actor.player_heir + } + # Heir is not already allied to vassal + NOT = { + scope:actor.player_heir = { + is_allied_to = scope:recipient + } + } + } + + cooldown = { years = 3 } + + + can_send = { + AND = { + scope:actor = { + AND = { + exists = scope:actor.player_heir + is_ruler = yes + is_ai = no + } + } + + } + } + + + # Costs inclusive of send options picked by player + send_options_exclusive = yes + cost = { + prestige = { + add = { + value = minor_prestige_value + } + } + piety = { + add = { + value = minor_piety_value + } + } + gold = { + add = { + value = minor_gold_value + } + } + } + + # Prestige + send_option = { + starts_enabled = { scope:actor.prestige >= scope:actor.swing_scales_prestige_cost_value } + flag = swing_prestige + localization = SWING_PRESTIGE + current_description = m_prestige_option_desc + } + # Piety + send_option = { + is_valid = { + # You must share a HoF to be able to petition one. + custom_tooltip = { + text = swing_scales_currency_interaction.tt.no_shared_hof + # We're also secretly just testing if characters are the same faith. + OR = { + scope:actor.faith = scope:recipient.faith + AND = { + exists = scope:actor.faith.religious_head + exists = scope:recipient.faith.religious_head + scope:actor.faith.religious_head = scope:recipient.faith.religious_head + } + } + } + } + starts_enabled = { scope:actor.piety >= scope:actor.swing_scales_piety_cost_value } + flag = swing_piety + localization = SWING_PIETY + current_description = m_piety_option_desc + } + # Gold + send_option = { + starts_enabled = { scope:actor.gold >= scope:actor.swing_scales_cash_cost_value } + flag = swing_gold + localization = SWING_GOLD + current_description = m_gold_option_desc + } + # Hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + starts_enabled = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = swing_hook + localization = SWING_HOOK + current_description = m_hook_option_desc + } + # HoF + send_option = { + is_valid = { diarch_swing_scales_valid_shared_hof_trigger = yes } + # Top of the prio order for enablement. + starts_enabled = { diarch_swing_scales_valid_shared_hof_trigger = yes } + flag = swing_hof + localization = SWING_HOF + current_description = m_hof_option_desc + } + + on_accept = { + + # Player appeciates vassal's support of their heir + scope:actor = { + add_opinion = { + modifier = pleased_opinion + target = scope:recipient + opinion = 15 + } + # Letter event to inform player of positive decision - note, this actually fires event, goes through it, then continues to reallocate resources depending on choice! + trigger_event = { + id = mod_fealty_to_heir.0001 + } + + if = { + limit = { scope:swing_gold = yes } + scope:actor = { + pay_short_term_gold = { + target = scope:recipient + gold = major_gold_value + } + } + } + else_if = { + limit = { scope:swing_prestige = yes } + scope:actor = { + add_prestige = major_prestige_loss + } + scope:recipient = { + add_prestige = major_prestige_value + } + } + else_if = { + limit = { scope:swing_piety = yes } + scope:actor = { + add_piety = major_piety_loss + } + scope:recipient = { + add_piety = major_piety_value + } + } + else_if = { + limit = { scope:swing_hook = yes } + scope:actor = { + use_hook = scope:recipient + } + } + else_if = { + limit = { scope:swing_hof = yes } + scope:actor = { + pay_short_term_gold = { + target = scope:actor.faith.religious_head + gold = major_gold_value + } + add_piety = medium_piety_loss + } + scope:actor.faith.religious_head = { + add_piety = medium_piety_value + } + } + + + } + # Heir + scope:actor.player_heir = { + add_opinion = { + modifier = pleased_opinion + target = scope:recipient + opinion = 25 + } + + add_hook = { + target = scope:recipient + type = loyalty_hook + } + + create_alliance = { + target = scope:recipient + allied_through_owner = scope:actor.player_heir + allied_through_target = scope:recipient + } + } + + # Vassal + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = frustrated_opinion + opinion = -5 + } + } + + } + + auto_accept = { + + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:swing_hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + on_decline = { + scope:actor = { + + trigger_event = { + id = mod_fealty_to_heir.0002 + } + + if = { + limit = { is_ai = no } + add_opinion = { + target = scope:recipient + modifier = trust_opinion + opinion = -30 + } + } + } + + } + + + ai_accept = { + + base = 0 + ############################################################# + # Additional acceptance modifiers - greater specificity + ############################################################# + + # More likely to accept/decline if vassal likes/dislikes heir + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor.player_heir + multiplier = 1.8 + desc = AI_OPINION_REASON + } + # Vassal is imprisoned by scope:actor + modifier = { + scope:recipient = { + is_imprisoned_by = scope:actor + } + add = { + value = 50 + } + desc = m_vassal_imprisoned_by_you.tt.accept_chance + } + # More likely to accept if shared HOF is involved + modifier = { + add = 10 + desc = m_leige_uses_hof_interaction.tt.accept_chance + scope:swing_hof = yes + } + + # Vassal is in debt + modifier = { + add = 60 + desc = PT_AI_IS_IN_DEBT + scope:swing_gold = yes + debt_level >= 1 + } + # Vassal is greedy + modifier = { + add = 60 + desc = liege_dismiss_entrenched_regency_interaction.tt.greedy_likes_cash + scope:swing_gold = yes + has_trait = greedy + } + # Vassal is zealous and is recieving piety + modifier = { + add = 60 + desc = liege_dismiss_entrenched_regency_interaction.tt.zealous_likes_piety + scope:swing_piety = yes + has_trait = zealous + } + # Vassal is zealous and interaction is hof + modifier = { + add = 35 + desc = m_zealous_likes_hof.tt + scope:swing_hof = yes + has_trait = zealous + } + # Weak hook is being used + modifier = { + add = 25 + desc = m_leige_uses_weak_hook_interaction.tt.accept_chance + scope:swing_hook = yes + } + # Vassal is ambitious and is recieving prestige + modifier = { + add = 10 + desc = m_ambitious_vassal.tt.likes_prestige + scope:swing_prestige = yes + has_trait = ambitious + } + # Knight likes and is recieving prestige + modifier = { + add = 15 + is_knight_of = scope:actor + desc = m_knight_likes_prestige.tt + scope:swing_prestige = yes + } + # Cynical vassal dislikes religious interaction: piety + modifier = { + add = -10 + desc = m_cynical_dislikes_piety.tt + scope:swing_piety = yes + has_trait = cynical + } + # Cynical vassal dislikes religious interaction: hof + modifier = { + add = -15 + desc = m_cynical_dislikes_hof.tt + scope:swing_hof = yes + has_trait = cynical + } + # Diplomacy Considerations actor and recipient + modifier = { + add = { + value = scope:actor.diplomacy + multiply = 2 + } + desc = INTERACTION_DIPLOMACY_ACTOR + } + modifier = { + add = { + value = scope:recipient.diplomacy + multiply = -2 + } + desc = INTERACTION_DIPLOMACY_RECIPIENT + } + + + + ################### + # Paradox acceptance modifiers - copy/paste relevant acceptance modifiers + ################### + + # Tier Differences + modifier = { + scope:actor = { + tier_difference = { + target = scope:recipient + value >= 1 + } + } + add = { + value = 30 + if = { + limit = { + tier_difference = { + target = scope:recipient + value = 2 + } + } + add = 30 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = 3 + } + } + add = 60 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = 4 + } + } + add = 90 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = 5 + } + } + add = 120 + } + } + desc = RANK_DIFFERENCE_REASON + } + modifier = { + scope:actor = { + tier_difference = { + target = scope:recipient + value <= -1 + } + } + add = { + value = -30 + if = { + limit = { + tier_difference = { + target = scope:recipient + value = -2 + } + } + add = -30 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = -3 + } + } + add = -60 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = -4 + } + } + add = -90 + } + if = { + limit = { + tier_difference = { + target = scope:recipient + value = -5 + } + } + add = -120 + } + } + desc = RANK_DIFFERENCE_REASON + } + + modifier = { + scope:recipient = { + is_heir_of = scope:actor + } + scope:actor = { + tier_difference = { + target = scope:recipient + value > 0 + } + } + add = { + value = 10 + if = { + limit = { + scope:actor = { player_heir = scope:recipient } + } + add = 10 + } + } + desc = IS_HEIR_REASON + } + opinion_modifier = { # More likely to accept if Recipient likes the Actor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + modifier = { + add = 20 + scope:recipient = { + has_trait = loyal + } + desc = INTERACTION_LOYAL + } + + modifier = { + add = 20 + scope:recipient = { + has_trait = trusting + } + desc = INTERACTION_TRUSTING + } + + modifier = { + add = 5 + scope:recipient = { + has_trait = craven + } + desc = INTERACTION_CRAVEN + } + + modifier = { + add = -20 + scope:recipient = { + has_trait = paranoid + } + desc = INTERACTION_PARANOID + } + + modifier = { + add = -20 + scope:recipient = { + has_trait = arrogant + } + desc = INTERACTION_ARROGANT + } + + modifier = { + add = -20 + scope:recipient = { + has_trait = ambitious + } + desc = INTERACTION_AMBITIOUS + } + + modifier = { + add = -40 + scope:recipient = { + has_trait = disloyal + } + desc = INTERACTION_DISLOYAL + } + + modifier = { + add = -10 + scope:recipient = { + has_trait = fickle + } + desc = INTERACTION_FICKLE + } + + # Rivalry + modifier = { # Say no to rivals + add = -100 + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + desc = "ACTOR_RIVAL_TO_ME_REASON" + } + modifier = { # Say no to nemesis + add = -300 + scope:recipient = { + has_relation_nemesis = scope:actor + } + desc = "ACTOR_NEMESIS_TO_ME_REASON" + } + + # Dynasty Prestige Levels + modifier = { + add = -5 + desc = AI_DYNASTY_PRESTIGE_REASON + scope:actor = { has_dynasty = yes } + NOT = { scope:actor.dynasty = scope:recipient.dynasty } + scope:actor.dynasty = { dynasty_prestige_level = 0 } + } + modifier = { + desc = AI_DYNASTY_PRESTIGE_REASON + scope:actor = { has_dynasty = yes } + NOT = { scope:actor.dynasty = scope:recipient.dynasty } + scope:actor.dynasty = { dynasty_prestige_level >= 2 } + add = { + value = 4 + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 3 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 4 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 5 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 6 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 7 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 8 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 9 } + } + add = 2 + } + if = { + limit = { + scope:actor.dynasty = { dynasty_prestige_level >= 10 } + } + add = 2 + } + } + } + modifier = { #Faith compatibility + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value > faith_fully_accepted_level + } + } + NOT = { + scope:recipient.ai_zeal <= -50 + } + add = { + value = -20 + if = { + limit = { + # Exempt certain struggle phases. + NOT = { is_struggle_parameter_active_interfaith_marriages_available_between_involved_characters_trigger = yes } + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_astray_level + } + } + } + subtract = 20 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + subtract = 40 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + subtract = 60 + } + if = { + limit = { + scope:recipient.ai_zeal <= -25 + } + divide = 2 + } + } + } + desc = MARRY_DIFFERENT_FAITH_REASON + } + + modifier = { # A Recipient is more likely to agree to an alliance requested by his liege. + add = 20 + scope:recipient = { + target_is_liege_or_above = scope:actor + } + desc = LIEGE_REASON + } + + modifier = { + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # For foreign diplomacy, consider recipients max + divide = { value = scope:actor.current_military_strength min = 1 } + } + multiply = 20 + min = -1000 + max = 100 + } + desc = AI_MILITARY_BALANCE_REASON + } + # Recipient is a Claimant to Actor's titles. + modifier = { + scope:recipient = { + NOT = { government_has_flag = government_is_clan } + any_claim = { + holder = scope:actor + } + NOR = { + is_heir_of = scope:actor + ai_greed <= -25 + } + } + add = { + value = -50 + if = { + limit = { + scope:recipient.ai_greed >= 25 + } + add = ai_greed + } + if = { + limit = { + NOT = { + scope:recipient.house = scope:actor.house + } + } + multiply = 2 + } + } + desc = IS_CLAIMANT_TO_ACTORS_TITLES + } + #Actor has claims on recipient's titles. + modifier = { + scope:actor = { + any_claim = { + holder = scope:recipient + } + } + add = 25 + desc = IS_CLAIMANT_TO_RECIPIENT_TITLES + } + modifier = { + scope:recipient = { + NOT = { + any_claim = { + holder = scope:actor + } + } + } + scope:recipient.house = scope:actor.house + add = 15 + desc = IS_SAME_HOUSE_REASON + } + modifier = { + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = declared_war + } + } + add = -100 + desc = DECLARED_WAR_REASON + } + + # Don't form new alliances with people already at war. + modifier = { + scope:actor = { + is_at_war = yes + + # Since vassals and lieges can't call us into wars, this doesn't matter for us if we have that relationship. + NOR = { + target_is_liege_or_above = scope:recipient + target_is_vassal_or_below = scope:recipient + } + } + add = -25 + desc = IS_AT_WAR_REASON + } + + #Bonus from Tradition Astute Diplomats + modifier = { + scope:actor.culture = { has_cultural_parameter = facilitate_alliance_acceptance } + add = 50 #should be in a file 00_traditions_values + desc = TRADITION_ASTUTE_DIPLOMATS_ACCEPTANCE_MODIFIER + } + + # The AI doesn't want to form alliances with AI vassals within its capital duchy, so it can revoke them + modifier = { + scope:actor = { + is_ai = yes + is_vassal_or_below_of = scope:recipient + any_held_title = { + tier = tier_county + de_jure_liege = scope:actor.primary_title.title_capital_county.de_jure_liege + } + } + scope:recipient = { + is_ai = yes + } + add = -5000 + } + + # Feud + modifier = { + add = -25 + scope:recipient = { + existing_feud_against_target_trigger = { TARGET = scope:actor } + } + desc = MARRY_FAMILY_FEUD_REASON + } + + # Existing Alliances + modifier = { + add = { + scope:actor = { + every_ally = { + add = -15 + } + } + } + scope:actor = { + any_ally = { + count >= 2 + } + } + NAND = { + scope:recipient = { + government_has_flag = government_is_clan + is_vassal_or_below_of = scope:actor + } + } + desc = EXISTING_ALLIANCES_REASON + } + + # Existing Alliances + modifier = { + add = { + scope:recipient = { + every_ally = { + add = -15 + } + } + } + scope:recipient = { + any_ally = { + count >= 2 + } + } + NAND = { + scope:recipient = { + government_has_flag = government_is_clan + is_vassal_or_below_of = scope:actor + } + } + desc = THEIR_EXISTING_ALLIANCES_REASON + } + + 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 + } + } + + # AI off unless requested by users oe further development. REASON: As little disruption to vanilla game flow as possible + # ai_potential = { + # always = no + # } + + # ai_targets = { + # ai_recipients = dynasty + # max = 20 + # } + + # ai_targets = { + # ai_recipients = family + # max = 10 + # } + + # ai_targets = { + # ai_recipients = spouses + # } + # ai_frequency = 72 + + # ai_will_do = { + # base = 0 + + # modifier = { + # add = 100 + # 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 = { # Clans always want alliances with Vassals + # add = 100 + # scope:actor = { + # government_has_flag = government_is_clan + # } + # scope:recipient = { + # is_vassal_of = scope:actor + # } + # } + + # modifier = { # The AI shouldn't propose to their Lieges + # factor = 0 + # is_liege_or_above_of = scope:recipient + # } + + # modifier = { # The AI shouldn't propose to their Vassals unless Clan + # factor = 0 + # scope:actor = { + # NOT = { government_has_flag = government_is_clan } + # } + # scope:recipient = { + # is_vassal_of = scope:actor + # } + # } + # } + + +} diff --git a/Fealty_to_Heir/descriptor.mod b/Fealty_to_Heir/descriptor.mod new file mode 100644 index 0000000..6d975a2 --- /dev/null +++ b/Fealty_to_Heir/descriptor.mod @@ -0,0 +1,9 @@ +version="0.1A" +tags={ + "Balance" + "Character Interactions" + "Gameplay" +} +name="Vassal Fealty to Heir" +supported_version="1.*" +remote_file_id="2992224656" \ No newline at end of file diff --git a/Fealty_to_Heir/events/mod_fealty_to_heir_events.txt b/Fealty_to_Heir/events/mod_fealty_to_heir_events.txt new file mode 100644 index 0000000..c25efe3 --- /dev/null +++ b/Fealty_to_Heir/events/mod_fealty_to_heir_events.txt @@ -0,0 +1,119 @@ +#################################### +# Events for mod_fealty_to_heir.txt +# Developed by idev +#################################### + +namespace = mod_fealty_to_heir + +# Positive Interaction from vassal, is going to ally heir. +mod_fealty_to_heir.0001 = { + type = letter_event + opening = { + desc = fealty_response_positive_opening + } + desc = fealty_response_positive + sender = scope:recipient + + option = { + name = fealty_response_to_vassal_positive + } +} + +mod_fealty_to_heir.0002 = { + type = letter_event + opening = { + desc = fealty_response_negative_opening + } + desc = fealty_response_negative + sender = scope:recipient + + option = { + name = fealty_response_to_vassal_negative_opinion_boost + + scope:recipient = { + add_opinion = { + modifier = respect_opinion + target = scope:actor + opinion = 20 + } + } + } + + option = { + name = fealty_response_to_vassal_negative + + duel = { + skill = intrigue + target = scope:recipient + 25 = { + desc = fealty_response_to_vassal_negative_imprisonment.tt + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + illegal_imprisonment_dread_effect = yes + imprison_character_effect = { + TARGET = scope:recipient + IMPRISONER = scope:actor + } + } + + 75 = { + desc = fealty_response_to_vassal_negative_imprisonment_2.tt + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + add_opinion = { + target = scope:recipient + modifier = treasonous_imprison_refusal + } + imprison_tyranny_effect = yes + } + } + } + + option = { + name = fealty_response_to_vassal_negative_hook + + duel = { + skill = diplomacy + target = scope:recipient + 60 = { + desc = fealty_response_to_vassal_negative_hook.tt + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + scope:actor = { + add_hook = { + target = scope:recipient + type = favor_hook + } + } + } + + 40 = { + desc = fealty_response_to_vassal_negative_hook_2.tt + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + scope:recipient = { + add_opinion = { + modifier = frustrated_opinion + target = scope:actor + opinion = -20 + + } + } + } + } + } + +} \ No newline at end of file diff --git a/Fealty_to_Heir/localization/english/mod_fealty_to_heir_l_english.yml b/Fealty_to_Heir/localization/english/mod_fealty_to_heir_l_english.yml new file mode 100644 index 0000000..29b8b40 --- /dev/null +++ b/Fealty_to_Heir/localization/english/mod_fealty_to_heir_l_english.yml @@ -0,0 +1,38 @@ +l_english: + # Main Interaction Descipttors + fealty_to_heir_interaction: "Ask for Oath of Fealty to Heir" + fealty_to_heir_interaction_desc: " Ask [recipient.GetShortUINameNoTooltip] to swear fealty to your primary heir" + + # Option Descriptions + m_prestige_option_desc: " Leverage political capital to secure the deal with [recipient.GetShortUINameNoTooltip] " + m_piety_option_desc: " Leverage religious influence to secure the deal with [recipient.GetShortUINameNoTooltip] " + m_gold_option_desc: " Leverage wealth to secure the deal with [recipient.GetShortUINameNoTooltip] " + m_hook_option_desc: " Leverage a favor to secure the deal with [recipient.GetShortUINameNoTooltip] " + m_hof_option_desc: " Ask Head of Faith to help secure the deal with [recipient.GetShortUINameNoTooltip] " + + # Acceptance chance desciptors + m_leige_uses_weak_hook_interaction.tt.accept_chance: "Owe favor: #P +25#!" + m_vassal_imprisoned_by_you.tt.accept_chance: "May lead to my Release: #P +50#!" + m_leige_uses_hof_interaction.tt.accept_chance: "Intercession from Head of Faith: #P +10#!" + m_ambitious_vassal.tt.likes_prestige: "[GetTrait('ambitious').GetName(GetNullCharacter)] likes Prestige: #P +10#!" + m_knight_likes_prestige.tt: "Knight Appreciates Acclaim: #P +15#! " + m_cynical_dislikes_piety.tt: "[GetTrait('cynical').GetName(GetNullCharacter)] dislikes Religious Exchange: #N -10#! " + m_cynical_dislikes_hof.tt: "[GetTrait('cynical').GetName(GetNullCharacter)] dislikes Religious Exchange: #N -15#! " +m_zealous_likes_hof.tt: "[GetTrait('zealous').GetName(GetNullCharacter)] likes Religious Exchange: #P +35#!" + + # Letter responses + fealty_response_positive_opening: "My leige, " + fealty_response_positive: " I appreciate your forethought in this matter. After many considerations, I believe such an arrangement would be of benefit to us both. Thereby, I formally swear an oath of alliance between myself and your heir." + fealty_response_to_vassal_positive: " A most righteous decision! " + + ## Negative letter response were not used as can_send_despite_rejection = no. Assumed that players would not want to be able to spend resources for no reason. Original reason for existing was to explore a demand_conversion style 'might accept' trigger to an event. Brevity took precedence. Keeping for possible user requested changes / further development. + fealty_response_negative_opening: "My leige, " + fealty_response_negative: "I regret to inform you that I can not swear an oath of alliance with your heir. As I'm sure you are aware, there are many considerations one must make to come to a decision. Might a day come in the future where circumstances change, I may reconsider. " + fealty_response_to_vassal_negative: " You may come to regret this . . ." + fealty_response_to_vassal_negative_hook: " Surely the court will see this as a slight!" + fealty_response_to_vassal_negative_opinion_boost: " I suppose some things are not meant to be." + fealty_response_to_vassal_negative_hook.tt: " We shall note a royal favor is required to rectify this slight" + fealty_response_to_vassal_negative_hook_2.tt: " [recipient.GetShortUINameNoTooltip] does not agree to favor" + fealty_response_to_vassal_negative_imprisonment.tt: " [recipient.GetShortUINameNoTooltip] is imprisoned" + fealty_response_to_vassal_negative_imprisonment_2.tt: " [recipient.GetShortUINameNoTooltip] refuses imprisonment" + \ No newline at end of file diff --git a/Fealty_to_Heir/thumbnail.png b/Fealty_to_Heir/thumbnail.png new file mode 100644 index 0000000..18c4d70 Binary files /dev/null and b/Fealty_to_Heir/thumbnail.png differ diff --git a/Find_Spouse_Expanded.mod b/Find_Spouse_Expanded.mod new file mode 100644 index 0000000..1404357 --- /dev/null +++ b/Find_Spouse_Expanded.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Character Interactions" + "Gameplay" + "Balance" +} +name="Find Spouse Expanded" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Find_Spouse_Expanded" +remote_file_id="2988672797" \ No newline at end of file diff --git a/Find_Spouse_Expanded/common/character_interactions/mod_find_spouse_expanded_interaction.txt b/Find_Spouse_Expanded/common/character_interactions/mod_find_spouse_expanded_interaction.txt new file mode 100644 index 0000000..4058eb8 --- /dev/null +++ b/Find_Spouse_Expanded/common/character_interactions/mod_find_spouse_expanded_interaction.txt @@ -0,0 +1,415 @@ + +######################################################################### +# Marry 'find spouse interaction' for Members of Dynasty if Dynasty Head +# Developed by idev +######################################################################### +find_spouse_expanded_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 + use_diplomatic_range = yes + + redirect = { + if = { + limit = { + exists = scope:secondary_actor + } + scope:recipient = { + save_scope_as = secondary_recipient + matchmaker = { + save_scope_as = recipient + } + } + + } + else_if = { + scope:recipient = { + save_scope_as = secondary_actor + } + clear_saved_scope = recipient + } + } + + populate_recipient_list = { + scope:secondary_actor = { + if = { + limit = { + allowed_to_marry_same_sex_trigger = yes + } + every_opposite_sex_spouse_candidate = { + limit = { + NAND = { + is_landless_ruler = yes + faith.religious_head = this + NOT = { scope:secondary_actor.faith = faith } + } + } + add_to_list = characters + } + every_same_sex_spouse_candidate = { + limit = { + NAND = { + is_landless_ruler = yes + faith.religious_head = this + NOT = { scope:secondary_actor.faith = faith } + } + } + add_to_list = characters + } + } + else = { + every_opposite_sex_spouse_candidate = { + limit = { + NAND = { + is_landless_ruler = yes + faith.religious_head = this + NOT = { scope:secondary_actor.faith = faith } + } + } + add_to_list = characters + } + } + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { + exists = scope:actor + exists = scope:recipient + exists = scope:secondary_recipient + 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 + } + } + + } + } + + interface_priority = 60 + + # actor, recipient ... characters arranging the marriage + # secondary_actor, secondary_recipient ... characters that should marry + + is_shown = { + scope:secondary_actor = { + #Is this someone I can marry off? // MOD NOTE: Code written to ensure no duplication in menus due to vanilla allowances. + OR = { + AND = { + scope:actor = { is_house_head = yes } + dynasty = scope:actor.dynasty + NOR = { + AND = { + is_child_of = scope:actor + target_is_liege_or_above = scope:actor + } + is_courtier_of = 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 } + } + } + + } + + is_valid_showing_failures_only = { + #Diplomatic availability & prison + scope:secondary_actor = { + is_busy_in_events_localised = yes + is_imprisoned = no + } + marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_actor } + trigger_if = { + limit = { + NOT = { 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_busy_in_events_localised = yes + is_imprisoned = no + } + NOT = { + scope:actor = { + is_at_war_with = scope:recipient + } + } + trigger_if = { + limit = { NOT = { scope:recipient = scope:secondary_recipient } } + scope:secondary_recipient = { + is_busy_in_events_localised = yes + is_imprisoned = no + } + } + #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 + NOT = { this = scope:actor } + } + } + NOT = { is_pool_guest_of = host } + } + } + } + + + + on_accept = { + marriage_interaction_on_accept_effect = yes + scope:secondary_actor.liege = { + if = { + limit = { + AND = { + is_alive = yes + is_ruler = yes + is_close_or_extended_family_of = scope:secondary_actor + } + } + create_alliance = { + target = scope:recipient + allied_through_owner = scope:secondary_actor + allied_through_target = scope:secondary_recipient + } + + } + } + + } + + on_decline = { + scope:actor = { + if = { + limit = { NOT = { this = scope:recipient } } + trigger_event = marriage_interaction.0011 + } + } + } + + 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 + } + + + 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_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 + } + + } + 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 + } + } + } + } +} \ No newline at end of file diff --git a/Find_Spouse_Expanded/descriptor.mod b/Find_Spouse_Expanded/descriptor.mod new file mode 100644 index 0000000..0e903dd --- /dev/null +++ b/Find_Spouse_Expanded/descriptor.mod @@ -0,0 +1,9 @@ +version="0.1A" +tags={ + "Character Interactions" + "Gameplay" + "Balance" +} +name="Find Spouse Expanded" +supported_version="1.*" +remote_file_id="2988672797" \ No newline at end of file diff --git a/Find_Spouse_Expanded/localization/english/find_spouse_expanded_l_english.yml b/Find_Spouse_Expanded/localization/english/find_spouse_expanded_l_english.yml new file mode 100644 index 0000000..4ac94b7 --- /dev/null +++ b/Find_Spouse_Expanded/localization/english/find_spouse_expanded_l_english.yml @@ -0,0 +1,3 @@ +l_english: + find_spouse_expanded_interaction: "Find Spouse" + actor_secondary_find_spouse_expanded_interaction: "Spouse" \ No newline at end of file diff --git a/Find_Spouse_Expanded/thumbnail.png b/Find_Spouse_Expanded/thumbnail.png new file mode 100644 index 0000000..88042f8 Binary files /dev/null and b/Find_Spouse_Expanded/thumbnail.png differ diff --git a/Ingratiate_Heir_Decision.mod b/Ingratiate_Heir_Decision.mod new file mode 100644 index 0000000..804a653 --- /dev/null +++ b/Ingratiate_Heir_Decision.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Decisions" + "Gameplay" + "Balance" +} +name="Ingratiate Heir Decision" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Ingratiate_Heir_Decision" +remote_file_id="2989664759" \ No newline at end of file diff --git a/Ingratiate_Heir_Decision/common/decisions/mod_ingratiate_heir_decision.txt b/Ingratiate_Heir_Decision/common/decisions/mod_ingratiate_heir_decision.txt new file mode 100644 index 0000000..ae51a37 --- /dev/null +++ b/Ingratiate_Heir_Decision/common/decisions/mod_ingratiate_heir_decision.txt @@ -0,0 +1,185 @@ + +######################################################################### +# Ingratiate Heir Decision +# Developed by idev +######################################################################### + +mod_ingratiate_heir_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" + } + decision_group_type = decisions + desc = mod_ingratiate_heir_decision_desc + sort_order = 80 + + cooldown = { years = 10 } + + is_shown = { + is_ruler = yes + is_ai = no + } + + is_valid_showing_failures_only = { + root.primary_heir.dynasty = root.dynasty + } + + widget = { + gui = "decision_view_widget_decision_option_list_controller" + controller = decision_option_list_controller + + item = { + value = mod_ingratiate_heir_very_modest + localization = mod_ingratiate_heir_very_modest_loc + ai_chance = { value = 0 } + } + item = { + value = mod_ingratiate_heir_modest + localization = mod_ingratiate_heir_modest_loc + ai_chance = { value = 0 } + } + item = { + value = mod_ingratiate_heir_substantial + localization = mod_ingratiate_heir_substantial_loc + ai_chance = { value = 0 } + } + + } + + effect = { + if = { + limit = { scope:mod_ingratiate_heir_very_modest = yes } + show_as_tooltip = { + add_prestige = -250 + add_piety = -100 + } + + primary_heir = { + add_prestige = 250 + add_piety = 100 + } + + every_vassal_or_below = { + add_opinion = { + modifier = impressed_opinion + target = root.primary_heir + opinion = 5 + } + } + } + else_if = { + limit = { scope:mod_ingratiate_heir_modest = yes } + show_as_tooltip = { + add_prestige = -600 + add_piety = -250 + } + + primary_heir = { + add_prestige = 600 + add_piety = 250 + } + + every_vassal_or_below = { + add_opinion = { + modifier = impressed_opinion + target = root.primary_heir + opinion = 10 + } + } + } + else_if = { + limit = { scope:mod_ingratiate_heir_substantial = yes } + show_as_tooltip = { + add_prestige = -1350 + add_piety = -500 + } + + primary_heir = { + add_prestige = 1350 + add_piety = 500 + } + + every_vassal_or_below = { + add_opinion = { + modifier = impressed_opinion + target = root.primary_heir + opinion = 20 + } + } + } + + trigger_event = { + id = mod_ingratiate_heir.0001 + } + } + + cost = { + gold = { + if = { + limit = { scope:mod_ingratiate_heir_very_modest = yes } + add = { + value = 215 + multiply = activity_cost_scale_by_era + divide = 2.5 + } + } + if = { + limit = { scope:mod_ingratiate_heir_modest = yes } + add = { + value = 625 + multiply = activity_cost_scale_by_era + divide = 2.5 + } + } + if = { + limit = { scope:mod_ingratiate_heir_substantial = yes } + add = { + value = 1150 + multiply = activity_cost_scale_by_era + divide = 2.5 + } + } + } + prestige = { + if = { + limit = { scope:mod_ingratiate_heir_very_modest = yes } + add = { + value = 250 + } + } + else_if = { + limit = { scope:mod_ingratiate_heir_modest = yes } + add = { + value = 600 + } + } + else = { + add = { + value = 1350 + } + } + } + piety = { + if = { + limit = { scope:mod_ingratiate_heir_very_modest = yes } + add = { + value = 100 + } + } + else_if = { + limit = { scope:mod_ingratiate_heir_modest = yes } + add = { + value = 250 + } + } + else = { + add = 500 + } + } + } + + ai_check_interval = 0 + + +} + + diff --git a/Ingratiate_Heir_Decision/descriptor.mod b/Ingratiate_Heir_Decision/descriptor.mod new file mode 100644 index 0000000..b0b54fb --- /dev/null +++ b/Ingratiate_Heir_Decision/descriptor.mod @@ -0,0 +1,9 @@ +version="0.1A" +tags={ + "Decisions" + "Gameplay" + "Balance" +} +name="Ingratiate Heir Decision" +supported_version="1.*" +remote_file_id="2989664759" \ No newline at end of file diff --git a/Ingratiate_Heir_Decision/events/mod_ingratiate_heir_events.txt b/Ingratiate_Heir_Decision/events/mod_ingratiate_heir_events.txt new file mode 100644 index 0000000..d9ec8f9 --- /dev/null +++ b/Ingratiate_Heir_Decision/events/mod_ingratiate_heir_events.txt @@ -0,0 +1,26 @@ +#################################### +# Events for mod_ingratiate_heir_decision.txt +# Developed by idev +#################################### + +namespace = mod_ingratiate_heir + +# Positive outcome. +mod_ingratiate_heir.0001 = { + type = character_event + title = mod_ingratiate_event_title + desc = mod_ingratiate_event_desc + theme = realm + left_portrait = { + character = root + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_birth" + } + + option = { + name = mod_ingratiate_event_option_text + } +} diff --git a/Ingratiate_Heir_Decision/localization/english/mod_ingratiate_heir_decision_l_english.yml b/Ingratiate_Heir_Decision/localization/english/mod_ingratiate_heir_decision_l_english.yml new file mode 100644 index 0000000..948cee4 --- /dev/null +++ b/Ingratiate_Heir_Decision/localization/english/mod_ingratiate_heir_decision_l_english.yml @@ -0,0 +1,26 @@ +l_english: + mod_ingratiate_heir_decision: "Ingratiate Heir" + + mod_ingratiate_heir_decision_desc: "I should ingratiate my heir to the realm to make a possible succession an easier transition." + + mod_ingratiate_heir_decision_tooltip: "I should ingratiate my heir to the realm to make a possible succession an easier transition." + + mod_ingratiate_heir_very_modest_loc: " Very Modest Committment " + + mod_ingratiate_heir_very_modest_tooltip: " Requires [prestige_i]250 [prestige|E] and [piety_i]100 [piety|E]" + + mod_ingratiate_heir_modest_loc: " Modest Committment " + + mod_ingratiate_heir_modest_tooltip: " Requires [prestige_i]600 [prestige|E] and [piety_i]250 [piety|E]" + + mod_ingratiate_heir_substantial_loc: " Substantial Committment " + + mod_ingratiate_heir_substantial_tooltip: " Requires [prestige_i]1350 [prestige|E] and [piety_i]500 [piety|E]" + + mod_ingratiate_heir_decision_confirm: "Ingratiate my heir with the realm!" + + mod_ingratiate_event_title: " To Heir On the Side of Caution" + + mod_ingratiate_event_desc: " \nWhether honest intentioned or not, I have endeared my heir to the realm just that little bit more. \n\nBe it at my expense, I can rest a little easier now as stability beckons in the hearts of my subjects and I have endorsed my heir as a true and viable candidate to fill my stead. " + + mod_ingratiate_event_option_text: " May my heir someday rule with great favor! " \ No newline at end of file diff --git a/Ingratiate_Heir_Decision/localization/german/mod_ingratiate_heir_decision_l_german.yml b/Ingratiate_Heir_Decision/localization/german/mod_ingratiate_heir_decision_l_german.yml new file mode 100644 index 0000000..d79e78b --- /dev/null +++ b/Ingratiate_Heir_Decision/localization/german/mod_ingratiate_heir_decision_l_german.yml @@ -0,0 +1,26 @@ +l_german: + mod_ingratiate_heir_decision: "Meinen Erben beliebt machen" + + mod_ingratiate_heir_decision_desc: "Ich sollte meinen Erben im Reich beliebt machen, um di mögliche Erbfolge zu erleichtern." + + mod_ingratiate_heir_decision_tooltip: "Ich sollte meinen Erben im Reich beliebt machen, um die mögliche Erbfolge zu erleichtern." + + mod_ingratiate_heir_very_modest_loc: " Sehr bescheidener Einsatz " + + mod_ingratiate_heir_very_modest_tooltip: " Benötigt [prestige_i]250 [prestige|E] und [piety_i]100 [piety|E]" + + mod_ingratiate_heir_modest_loc: " Mäßiger Einsatz " + + mod_ingratiate_heir_modest_tooltip: " Benötigt [prestige_i]600 [prestige|E] und [piety_i]250 [piety|E]" + + mod_ingratiate_heir_substantial_loc: " Erheblicher Einsatz " + + mod_ingratiate_heir_substantial_tooltip: " Benötigt [prestige_i]1350 [prestige|E] und [piety_i]500 [piety|E]" + + mod_ingratiate_heir_decision_confirm: "Mach meinen Erben im Reich beliebt!" + + mod_ingratiate_event_title: " Zur Absicherung des Erben" + + mod_ingratiate_event_desc: " \nOb beabsichtigt oder nicht, habe ich meinen Erben im Reich ein bisschen beliebter gemacht. \n\nDank meines Einsatzes, kann ich jetzt entspannter schlafen, da zukünftige Stabilität winkt und ich meinen Erben vor meinen Bürgern als rechtmäßigen und brauchbaren Kandidat für mein Amt befürwortet habe. " + + mod_ingratiate_event_option_text: " Möge mein Erbe eines Tages mit meiner Gunst regieren! " \ No newline at end of file diff --git a/Ingratiate_Heir_Decision/thumbnail.png b/Ingratiate_Heir_Decision/thumbnail.png new file mode 100644 index 0000000..46ab96c Binary files /dev/null and b/Ingratiate_Heir_Decision/thumbnail.png differ diff --git a/Medieval_Thievery_No_AI.mod b/Medieval_Thievery_No_AI.mod new file mode 100644 index 0000000..b5ad126 --- /dev/null +++ b/Medieval_Thievery_No_AI.mod @@ -0,0 +1,11 @@ +version="0.1" +tags={ + "Events" + "Gameplay" + "Schemes" + "Character Interactions" +} +name="Medieval Thievery (No AI Version)" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Medieval_Thievery_No_AI" +remote_file_id="3156900884" \ No newline at end of file diff --git a/Medieval_Thievery_No_AI/common/casus_belli_types/mt_recompense_war.txt b/Medieval_Thievery_No_AI/common/casus_belli_types/mt_recompense_war.txt new file mode 100644 index 0000000..8f699e1 --- /dev/null +++ b/Medieval_Thievery_No_AI/common/casus_belli_types/mt_recompense_war.txt @@ -0,0 +1,239 @@ +mt_recompense_cb = { + icon = county_conquest_cb + group = conquest + + combine_into_one = yes + should_show_war_goal_subview = no + + allowed_for_character = { + always = no # cb will be called when neccesarry, it is not a common cb option + } + + + attacker_score_from_occupation_scale = 150 + attacker_score_from_battles_scale = 150 + defender_score_from_battles_scale = 150 + + # AI doesn't matter as the cb is called by effect, not by consideration + # ai_can_target_all_titles = { + # can_use_viking_invasion_cbs_trigger = yes + # } + + ai_score_mult = { + value = viking_conquest_ai_score_value + + # As a feudal gov, do not attack owner of tribal holdings if you have a tribal holding to convert already + add = { + every_in_list = { + list = target_titles + if = { + limit = { feudal_clan_tribal_conquest_constraints = yes } + add = -1000 + } + } + } + + # AI in struggles act insularly for wars that don't have a familial or legal basis. + multiply = struggle_wars_prioritise_struggle_targets_value + } + + + should_invalidate = { + NOT = { + any_in_list = { + list = target_titles + any_in_de_jure_hierarchy = { + tier = tier_county + holder = { + OR = { + this = scope:defender + target_is_liege_or_above = scope:defender + } + } + } + } + } + } + + on_invalidated_desc = msg_county_conquest_war_invalidated_message + on_invalidated = {} + + cost = { + piety = { + value = 0 + if = { + limit = { + scope:defender.faith = scope:attacker.faith + } + add = { + value = 25 + desc = CB_SAME_FAITH_COST + } + add = { + value = 5 + multiply = scope:attacker.realm_size + desc = CB_REALM_SIZE_COST + max = 75 + } + } + multiply = common_cb_piety_cost_multiplier + } + prestige = { + value = 0 + if = { + limit = { + NOT = { scope:defender.faith = scope:attacker.faith } + } + add = { + value = 50 + desc = CB_COST_DIFFERENT_FAITH + } + add = { + value = 5 + multiply = scope:attacker.realm_size + desc = CB_REALM_SIZE_COST + max = 100 + } + } + multiply = common_cb_prestige_cost_multiplier + } + } + + on_declaration = { + on_declared_war = yes + } + + on_victory_desc = { + desc = mt_recompense_cb_victory_desc + } + + on_victory = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 accolade glory gain for winning against higher ranked enemy + scope:attacker = { accolade_attacker_war_end_glory_gain_low_effect = yes } + + # Prestige Progress for the Attacker + every_in_list = { + list = target_titles + scope:attacker = { + add_prestige_experience = minor_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:attacker + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + # Truce + add_truce_attacker_victory_effect = yes + + } + + on_white_peace_desc = { + desc = mt_recompense_cb_wp_desc + } + + on_white_peace = { + scope:attacker = { show_pow_release_message_effect = yes } + # Prestige loss for the attacker + scope:attacker = { + add_prestige = { + value = minor_prestige_value + multiply = -1.0 + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:attacker # Not important as the scales are identical + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + scope:defender = { + stress_impact = { + arrogant = medium_stress_impact_gain + } + } + + add_truce_white_peace_effect = yes + } + + on_defeat_desc = { + desc = mt_recompense_cb_defeat_desc + } + + on_defeat = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 accolade glory gain for winning against higher ranked enemy + scope:defender = { accolade_defender_war_end_glory_gain_low_effect = yes } + + # Prestige loss for the attacker + scope:attacker = { + pay_short_term_gold_reparations_effect = { + GOLD_VALUE = 1 + } + add_prestige = { + value = medium_prestige_value + multiply = -1.0 + } + } + + # Prestige for Defender + scope:defender = { + add_prestige_war_defender_effect = { + PRESTIGE_VALUE = medium_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:defender + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + add_truce_attacker_defeat_effect = yes + + scope:attacker = { + save_temporary_scope_as = loser + } + on_lost_aggression_war_discontent_loss = yes + } + + transfer_behavior = transfer + + on_primary_attacker_death = inherit + on_primary_defender_death = inherit + + attacker_allies_inherit = yes + defender_allies_inherit = yes + + attacker_ticking_warscore = 0 + attacker_wargoal_percentage = 0.7 + + war_name = mt_recompense_war_name + war_name_base = "CONQUEST_WAR_NAME_BASE" + cb_name = "CONQUEST_COUNTY_CB_NAME" + + interface_priority = 76 + + max_defender_score_from_occupation = 150 + max_attacker_score_from_occupation = 150 + +} \ No newline at end of file diff --git a/Medieval_Thievery_No_AI/common/character_interactions/medievel_thievery_character_interactions.txt b/Medieval_Thievery_No_AI/common/character_interactions/medievel_thievery_character_interactions.txt new file mode 100644 index 0000000..905685d --- /dev/null +++ b/Medieval_Thievery_No_AI/common/character_interactions/medievel_thievery_character_interactions.txt @@ -0,0 +1,543 @@ +############################################################################################################################## +# Medievel Thievery Mod +# Developed by DevZero (some code taken from pdx) - the mod has thievery in the name after all... +# Notes: First iteration -- Might need to balance piety and prestige values, will judge by community feedback +############################################################################################################################## + +# Interaction name is a holdover from before mod was expanded. Leaving as-is so as not to create any localization issues, and it matters very little. +mt_steal_gold_interaction = { + icon = mt_interaction_icon + common_interaction = yes + interface_priority = 12 + category = interaction_category_hostile + desc = mt_steal_gold_interaction_desc + cooldown = { months = 18 } + cooldown_against_recipient = {years = 3} + + is_shown = { + NOT = { + scope:recipient = scope:actor + scope:actor = { + OR = { + intrigue < 10 + is_allied_to = scope:recipient + age < 11 + } + } + scope:recipient = { + is_ruler = no + } + } + + # PDX Multiplayer Checks | Mod not balanced or made for multiplayer, but in case someone uses it. + NAND = { # Game Rules! + has_game_rule = no_players_multiplayer_murder_schemes + scope:actor = { + is_ai = no + } + scope:recipient = { + is_ai = no + } + } + + NAND = { + has_game_rule = no_player_families_multiplayer_murder_schemes + scope:actor = { + is_ai = no + } + scope:recipient = { + OR = { + is_ai = no + any_close_family_member = { + AND = { + is_ai = no + NOT = { this = scope:actor } + } + } + } + } + } + + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + # Will stop AI as they do not trigger the flags -- must trigger on player + can_send = { + trigger_if = { + limit = { + scope:actor = { + is_ai = no + } + } + custom_tooltip = { + text = mt_can_send_requirement + OR = { + scope:steal_gold = yes + scope:steal_prestige = yes + scope:steal_piety = yes + } + } + } + } + + on_accept = { + scope:actor = { + save_scope_as = mt_thief + } + scope:recipient = { + save_scope_as = mt_victim + } + + if = { + limit = { + scope:steal_gold = yes + } + scope:actor = { + add_character_flag = gold_action_taken + duel = { + skill = intrigue + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + + give_or_update_embezzler_secret_effect = { + TARGET = scope:recipient + STAKE = mt_steal_gold_value + } + + show_as_tooltip = { + add_gold = { + value = mt_steal_gold_value + } + } + + show_as_tooltip = { + scope:recipient = { + add_gold = { + value = mt_steal_gold_value + multiply = -1 + } + } + } + + scope:actor = { + if = { + limit = { has_trait = greedy } + add_stress = massive_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + + hidden_effect = { + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = mt_steal_gold_value + } + } + trigger_event = { + id = mt_event.1001 + days = { 7 10 } + } + } + } + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = greedy + can_set_relation_nemesis_trigger = { CHARACTER = scope:actor } + } + set_relation_nemesis = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI Reciprocations + hidden_effect = { + mt_reciprocal_gold_effect = yes + } + + + } + } + } + } + else_if = { + limit = { + scope:steal_prestige = yes + } + scope:actor = { + add_character_flag = prestige_action_taken + duel = { + skill = diplomacy + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_prestige = { + value = 0 + add = mt_steal_prestige_value + } + + scope:recipient = { + add_prestige = { + value = 0 + add = mt_steal_prestige_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = arrogant } + add_stress = medium_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.2001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = arrogant + } + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -75 + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_prestige_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:steal_piety = yes + } + scope:actor = { + add_character_flag = piety_action_taken + duel = { + skill = learning + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_piety = { + value = mt_steal_piety_value + } + + scope:recipient = { + add_piety = { + value = mt_steal_piety_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = humble } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = massive_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.3001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Forgiving characters lose a little less. + if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_piety_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:ai_option = yes + } + hidden_effect = { + mt_ai_action_effect = yes + } + } + } + + + + # Player Options + send_option = { + flag = steal_gold + localization = mt_local_gold + is_valid = { + NOT = { scope:recipient.gold < 50 } + } + + } + send_option = { + flag = steal_prestige + localization = mt_local_prestige + is_valid = { + NOT = { scope:recipient.prestige < 50 } + } + } + send_option = { + flag = steal_piety + localization = mt_local_piety + is_valid = { + NOT = { scope:recipient.piety < 50 } + } + } + + send_options_exclusive = yes + auto_accept = yes + + #################################################### + # AI + + + ai_will_do = { + base = 0 + } + + +} \ No newline at end of file diff --git a/Medieval_Thievery_No_AI/common/script_values/medievel_thievery_values.txt b/Medieval_Thievery_No_AI/common/script_values/medievel_thievery_values.txt new file mode 100644 index 0000000..c8cb5c3 --- /dev/null +++ b/Medieval_Thievery_No_AI/common/script_values/medievel_thievery_values.txt @@ -0,0 +1,145 @@ +mt_steal_gold_value = { + value = 0 + if = { + limit = { scope:recipient.gold > 0 } + add = scope:recipient.gold + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.gold <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.gold <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.gold <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.gold <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.gold <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes + +} + +mt_steal_prestige_value = { + value = 0 + if = { + limit = { scope:recipient.prestige > 0 } + add = scope:recipient.prestige + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.prestige <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.prestige <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.prestige <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.prestige <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.prestige <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes +} + +mt_steal_piety_value = { + value = 0 + if = { + limit = { scope:recipient.piety > 0 } + add = scope:recipient.piety + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.piety <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.piety <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.piety <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.piety <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.piety <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes +} + +mt_thief_caught_gold_value = { + value = 0 + if = { + limit = { + scope:mt_thief.gold > 0 + } + add = scope:mt_thief.gold + } +} diff --git a/Medieval_Thievery_No_AI/common/scripted_effects/mt_event_effects.txt b/Medieval_Thievery_No_AI/common/scripted_effects/mt_event_effects.txt new file mode 100644 index 0000000..0c89d10 --- /dev/null +++ b/Medieval_Thievery_No_AI/common/scripted_effects/mt_event_effects.txt @@ -0,0 +1,861 @@ + + +mt_thief_commonfolk_atrifact_effect_01 = { + create_artifact = { + name = "Commonfolk Tapestry" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = tapestry + visuals = tapestry + rarity = masterwork + modifier = artifact_court_grandeur_baseline_add_2_modifier + modifier = artifact_monthly_tyranny_3_modifier + modifier = artifact_mercenary_hire_cost_mult_2_modifier + modifier = artifact_monthly_intrigue_lifestyle_xp_1_modifier + } + +} +mt_thief_commonfolk_atrifact_effect_02 = { + create_artifact = { + name = "A Song of Water and Lava" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = book + visuals = book + rarity = masterwork + modifier = artifact_court_grandeur_baseline_add_2_modifier + modifier = artifact_fertility_gain_2_modifier + modifier = artifact_negate_health_penalty_add_3_modifier + modifier = artifact_short_reign_duration_mult_3_modifier + modifier = artifact_dread_gain_mult_1_modifier + modifier = artifact_intrigue_1_modifier + } +} +mt_thief_commonfolk_atrifact_effect_03 = { + create_artifact = { + name = "Flowers" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = miscellaneous + visuals = flowers + rarity = masterwork + modifier = artifact_attraction_opinion_1_modifier + } +} +mt_thief_commonfolk_atrifact_effect_04 = { + create_artifact = { + name = "Peasant's Bone" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = miscellaneous + visuals = bone + rarity = common + modifier = artifact_build_gold_cost_1_modifier + } + +} + + + +mt_reciprocal_gold_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1002 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = education_martial_5 + has_trait = wrathful + has_trait = strategist + martial > 20 + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already accessed +} + +mt_reciprocal_prestige_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1003 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = education_martial_5 + has_trait = wrathful + has_trait = strategist + martial > 20 + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already accessed +} + +mt_reciprocal_piety_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1004 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = education_martial_5 + has_trait = wrathful + has_trait = strategist + martial > 20 + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already accessed +} + +# AI action 'selection' since they don't use send options (default to gold theft) +mt_ai_action_effect = { + if = { + limit = { + scope:actor = { + OR = { + has_trait = august + has_trait = arrogant + has_trait = education_diplomacy_5 + has_trait = ambitious + has_trait = diplomat + } + } + } + scope:actor = { + duel = { + skill = diplomacy + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_prestige = { + value = 0 + add = mt_steal_prestige_value + } + + scope:recipient = { + add_prestige = { + value = 0 + add = mt_steal_prestige_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = arrogant } + add_stress = medium_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.2001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = arrogant + } + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -75 + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_prestige_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:actor = { + OR = { + has_trait = zealous + has_trait = theologian + has_trait = education_learning_5 + has_trait = education_learning_4 + } + } + } + scope:actor = { + duel = { + skill = learning + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_piety = { + value = mt_steal_piety_value + } + + scope:recipient = { + add_piety = { + value = mt_steal_piety_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = humble } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = massive_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.3001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Forgiving characters lose a little less. + if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_piety_effect = yes + } + } + } + } + } + else = { + scope:actor = { + duel = { + skill = intrigue + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + + give_or_update_embezzler_secret_effect = { + TARGET = scope:recipient + STAKE = mt_steal_gold_value + } + + show_as_tooltip = { + add_gold = { + value = mt_steal_gold_value + } + } + + show_as_tooltip = { + scope:recipient = { + add_gold = { + value = mt_steal_gold_value + multiply = -1 + } + } + } + + scope:actor = { + if = { + limit = { has_trait = greedy } + add_stress = massive_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + + hidden_effect = { + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = mt_steal_gold_value + } + } + trigger_event = { + id = mt_event.1001 + days = { 7 10 } + } + } + } + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = greedy + can_set_relation_nemesis_trigger = { CHARACTER = scope:actor } + } + set_relation_nemesis = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI Reciprocations + hidden_effect = { + mt_reciprocal_gold_effect = yes + } + + + } + } + } + } +} \ No newline at end of file diff --git a/Medieval_Thievery_No_AI/descriptor.mod b/Medieval_Thievery_No_AI/descriptor.mod new file mode 100644 index 0000000..1617ffc --- /dev/null +++ b/Medieval_Thievery_No_AI/descriptor.mod @@ -0,0 +1,10 @@ +version="0.1" +tags={ + "Events" + "Gameplay" + "Schemes" + "Character Interactions" +} +name="Medieval Thievery (No AI Version)" +supported_version="1.*" +remote_file_id="3156900884" \ No newline at end of file diff --git a/Medieval_Thievery_No_AI/events/mt_events.txt b/Medieval_Thievery_No_AI/events/mt_events.txt new file mode 100644 index 0000000..868a6b6 --- /dev/null +++ b/Medieval_Thievery_No_AI/events/mt_events.txt @@ -0,0 +1,510 @@ +################################################################################################################## +# Medievel Thievery Events +# Developed by DevZero +# Notes: Need to start war in event option: learn it! +################################################################################################################## + +# Events are in order as follows: +# 1001, 2001, 3001 - Alert player of sucessful theft against them -- gold / prestige / piety respectively +# 1002, 1003, 1004 - Player action to unsuccessful theft against them -- gold / prestige / piety respectively for flavor text +# 1021, 1022 - Second layer to player action -- Reciprocal Thieve / Reciprocal Scheme +# 5000 - Fallback for player to reselect options (didn't like or wanted to see the rest) + +namespace = mt_event + +# Event to let player know there was a successful attempt against them to steal gold +mt_event.1001 = { + type = character_event + title = mt_notify_gold_title + desc = mt_notify_gold_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_gold_option.a + } + option = { + name = mt_notify_gold_option.b + } + +} + +# Event to let player know there was a successful attempt against them to steal prestige +mt_event.2001 = { + type = character_event + title = mt_notify_prestige_title + desc = mt_notify_prestige_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_prestige_option.a + } + option = { + name = mt_notify_prestige_option.b + } + option = { + name = mt_notify_prestige_option.c + } +} + +# Event to let player know there was a successful attempt against them to steal piety +mt_event.3001 = { + type = character_event + title = mt_notify_piety_title + desc = mt_notify_piety_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_piety_option.a + } + option = { + name = mt_notify_piety_option.b + } + option = { + name = mt_notify_piety_option.c + } +} + + +################################################################################################################################## +################################################################################################################################## +# Caught! + +# Steal Failure Gold -- Advises Player of theif, player can select two reciprical action categories or two actions +mt_event.1002 = { + type = character_event + title = mt_caught_gold_reciprocal_main_title + desc = mt_caught_gold_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} + +#Steal Failure Prestige +mt_event.1003 = { + type = character_event + title = mt_caught_prestige_reciprocal_main_title + desc = mt_caught_prestige_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = county_conquest_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} + +# Steal Failure Piety +mt_event.1004 = { + type = character_event + title = mt_caught_piety_reciprocal_main_title + desc = mt_caught_piety_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} +######################################################################################################### +# Reciprocal Thievery +mt_event.1021 = { + type = character_event + title = mt_reiprocal_thieve_main_title + desc = mt_reiprocal_thieve_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + # Send scoundrels (take all gold or kills thief) + option = { + name = mt_reciprocal_thieve_employ_rogues_option + + custom_tooltip = mt_reciprocal_rogues_employ_desc.tt + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + + # Send marauders to torment their capital + option = { + name = mt_reciprocal_thieve_scoundrel_disturb_option + + custom_tooltip = mt_reciprocal_scoundrel_disturb_employ_desc.tt + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + + + } + + # Send scoundrels to thieve the realm (may get artifact) + option = { + name = mt_reciprocal_thieve_employ_theives_option + + custom_tooltip = mt_reciprocal_thieve_employ_desc.tt + random_list = { + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_01 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_02 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_03 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_04 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_05 = yes + } + } + } + random_list = { + 50 = { + scope:mt_thief.capital_county = { + add_county_modifier = county_corruption_thieves_guild_modifier + } + } + 50 = { + + } + } + } + + # Nevermind + option = { + name = mt_reciprocal_nervermind_exit.tt + trigger_event = { + id = mt_event.5000 + } + } +} + +# Personal Schemes +mt_event.1022 = { + + type = character_event + title = mt_reciprocal_personal_title + desc = mt_reciprocal_personal_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Murder the ne'er-do-well! + option = { + name = mt_reciprocal_murder_option.tt + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + + # Abduct the ne'er-do-well! + option = { + name = mt_reciprocal_abduct_option.tt + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + + # Nevermind + option = { + name = mt_reciprocal_nervermind_exit.tt + trigger_event = { + id = mt_event.5000 + } + } +} + +############################################################################################################# +# Redirect Fallback Should Player want to address different options or see all -- 'Nevermind Option Event' +mt_event.5000 = { + type = character_event + title = mt_reciprocal_fallback_title + desc = mt_reciprocal_fallback_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct / fab hook) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war -- don't know how to create claim on artifact + option = { + name = mt_reciprocal_war_option.tt + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + + } + + # let it go -- stress relieving (especially forgiving characters) and opinion boost with nayer-do-well. + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } + + + +} + + diff --git a/Medieval_Thievery_No_AI/gfx/interface/icons/character_interactions/mt_interaction_icon.dds b/Medieval_Thievery_No_AI/gfx/interface/icons/character_interactions/mt_interaction_icon.dds new file mode 100644 index 0000000..9c829eb Binary files /dev/null and b/Medieval_Thievery_No_AI/gfx/interface/icons/character_interactions/mt_interaction_icon.dds differ diff --git a/Medieval_Thievery_No_AI/localization/english/mod_medievel_thievery_l_english.yml b/Medieval_Thievery_No_AI/localization/english/mod_medievel_thievery_l_english.yml new file mode 100644 index 0000000..c6efd48 --- /dev/null +++ b/Medieval_Thievery_No_AI/localization/english/mod_medievel_thievery_l_english.yml @@ -0,0 +1,86 @@ +l_english: + + # Interaction + mt_steal_gold_interaction: "Thieve" + mt_steal_gold_interaction_desc: "Thieve from [recipient.GetTitledFirstName]" + mt_steal_gold_interaction.tt.success.actor: "You're successful in your thievery" + mt_steal_gold_interaction_tt.failure.actor: "Your dastardly ploy is uncovered" + mt_can_send_requirement: "Must choose an option" + mt_local_gold: "Thieve Gold" + mt_local_prestige: "Thieve Prestige" + mt_local_piety: "Thieve Piety" + + #### Events + # Event: Not Caught - Notify / Don't reveal + mt_notify_gold_title: "Thievery: Missing Gold" + mt_notify_gold_desc: "\n\nI have been hearing through various sources that there is missing gold from the treasury. Though after a short rummaging, a lowly administrative scribe found nothing." + mt_notify_gold_option.a: "I shall delve no further ino the matter, surely I would have noticed!" + mt_notify_gold_option.b: "Another question left to the philosophers I suppose!" + + mt_notify_prestige_title: "Thievery: Regal Reputation" + mt_notify_prestige_desc: "\n\nThere has been much talk amidst the realm. Someone has besmirched my regal nature and reputation! Unduly and unfairly, I say. Why lead a campaign that turns the secular opinion against the great leader of the realm? One intercepted letter's introduction reads #italic '... we must recognize those worthy of fame and those of whom are not ... '#! Blasphemous!" + mt_notify_prestige_option.a: "The colloquial #italic 'we' #! is reserved for those with leeches and the mad! " + mt_notify_prestige_option.b: "One must not concern themself with the opinions of the sheep." + mt_notify_prestige_option.c: "One must simply know me to understand if my reputation is just!" + + mt_notify_piety_title: "Thievery: Piousness" + mt_notify_piety_desc: "\n\nTalk among the common folk is that my piousness is in question. Someone has undoubtedly spread this slanderous information in an effort to increase their own standing in the matter." + mt_notify_piety_option.a: "I am just as pious as the rest!" + mt_notify_piety_option.b: "Does this person know me?" + mt_notify_piety_option.c: "None shall come of this." + + # Event: Caught + mt_caught_gold_reciprocal_main_title: "Thievery: Gold" + mt_caught_gold_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to thieve from #EMP my #! treasury!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + mt_caught_prestige_reciprocal_main_title: "Thievery: Regal Reputation" + mt_caught_prestige_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to lessen my reputation in the secular realm in service of [mt_thief.GetHerHis] own!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + mt_caught_piety_reciprocal_main_title: "Thievery: Piousness" + mt_caught_piety_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to service [mt_thief.GetHerHis] own reputation regarding piousness. While the ploy was uncovered, there could have been questions regarding my piousness!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + + mt_reciprocal_thieve_option.tt: "#italic Ohhh,#! two can play at that game!" + mt_reciprocal_personal_scheme_option.tt: "Let's make this personal!" + mt_reciprocal_war_option.tt: "Raise the army!" + mt_non_reciprocal_option.tt: "I'll not lower myself to the same level as the swine!" + + + + # Reciprocal Thievery + mt_reiprocal_thieve_main_title: "Thievery: The Games We Play" + mt_reiprocal_thieve_main_desc: "\n\nAn eye for an eye makes the realm blind -- or so I've been told. Though whoever said that must not of been wronged in such a way! Some sort of justice must be served! Honor demands it!" + + mt_reciprocal_thieve_employ_rogues_option: "I'll convince local rogues to inflitrate [mt_thief.GetHerHis] castle during the night!" + mt_reciprocal_rogues_employ_desc.tt: "#italic Simply, [mt_thief.GetSheHe] will pay or meet the ire of the rogues #!" + + mt_reciprocal_thieve_employ_theives_option: "I'll send local thieves to harass the commonfolk among [mt_thief.GetHerHis] realm!" + mt_reciprocal_thieve_employ_desc.tt: "#italic Regality be damned, recompense will come from someone #!" + + mt_reciprocal_thieve_scoundrel_disturb_option: "I'll send a band of local scoundrels to sow chaos in [mt_thief.GetHerHis] capital!" + + mt_reciprocal_scoundrel_disturb_employ_desc.tt: "#italic Surely as rain is wet, [mt_thief.GetHerHis] capital will come to dislike the ruffians set upon it #!" + + # Reciprocal Personal + mt_reciprocal_personal_title: "Thievery: Let's Get Personal" + mt_reciprocal_personal_desc: "\n\nForget the rest, there is one person responsible and [mt_thief.GetTitledFirstName] will face my personal judgement. The question becomes rather, what sort of justice shall be enacted!" + mt_reciprocal_murder_option.tt: "[mt_thief.GetTitledFirstName] shall serve the ground as fertilizer!" + mt_reciprocal_abduct_option.tt: "Abduct now, decide later..." + + # War Reciprocal Option + mt_reciprocal_war_desc.tt: "#italic No overreaction here to speak of#!" + + # Fallback + mt_reciprocal_fallback_title: "Thievery: Decisions, Decisions..." + mt_reciprocal_fallback_desc: "\n\n#italic Hmmm.. let me think ...#!" + + # Exit option for all level 2 events + mt_reciprocal_nervermind_exit.tt: "Maybe I should rethink my options..." + + # Reciprocal War + mt_recompense_cb: "Recompense Casus Belli" + mt_recompense_war_name: "Recompense War" + mt_recompense_cb_victory_desc: "You benefit from the spoils of war as just recompense!" + mt_recompense_cb_wp_desc: "Hostilities end between the two sides." + mt_recompense_cb_defeat_desc: "You are embarassed on the field of battle." + diff --git a/Medieval_Thievery_No_AI/thumbnail.png b/Medieval_Thievery_No_AI/thumbnail.png new file mode 100644 index 0000000..90ef918 Binary files /dev/null and b/Medieval_Thievery_No_AI/thumbnail.png differ diff --git a/Medievel_Thievery.mod b/Medievel_Thievery.mod new file mode 100644 index 0000000..1653226 --- /dev/null +++ b/Medievel_Thievery.mod @@ -0,0 +1,10 @@ +version="0.1" +tags={ + "Schemes" + "Gameplay" + "Character Interactions" +} +name="Medievel Thievery" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Medievel_Thievery" +remote_file_id="3143275236" \ No newline at end of file diff --git a/Medievel_Thievery/common/casus_belli_types/mt_recompense_war.txt b/Medievel_Thievery/common/casus_belli_types/mt_recompense_war.txt new file mode 100644 index 0000000..8f699e1 --- /dev/null +++ b/Medievel_Thievery/common/casus_belli_types/mt_recompense_war.txt @@ -0,0 +1,239 @@ +mt_recompense_cb = { + icon = county_conquest_cb + group = conquest + + combine_into_one = yes + should_show_war_goal_subview = no + + allowed_for_character = { + always = no # cb will be called when neccesarry, it is not a common cb option + } + + + attacker_score_from_occupation_scale = 150 + attacker_score_from_battles_scale = 150 + defender_score_from_battles_scale = 150 + + # AI doesn't matter as the cb is called by effect, not by consideration + # ai_can_target_all_titles = { + # can_use_viking_invasion_cbs_trigger = yes + # } + + ai_score_mult = { + value = viking_conquest_ai_score_value + + # As a feudal gov, do not attack owner of tribal holdings if you have a tribal holding to convert already + add = { + every_in_list = { + list = target_titles + if = { + limit = { feudal_clan_tribal_conquest_constraints = yes } + add = -1000 + } + } + } + + # AI in struggles act insularly for wars that don't have a familial or legal basis. + multiply = struggle_wars_prioritise_struggle_targets_value + } + + + should_invalidate = { + NOT = { + any_in_list = { + list = target_titles + any_in_de_jure_hierarchy = { + tier = tier_county + holder = { + OR = { + this = scope:defender + target_is_liege_or_above = scope:defender + } + } + } + } + } + } + + on_invalidated_desc = msg_county_conquest_war_invalidated_message + on_invalidated = {} + + cost = { + piety = { + value = 0 + if = { + limit = { + scope:defender.faith = scope:attacker.faith + } + add = { + value = 25 + desc = CB_SAME_FAITH_COST + } + add = { + value = 5 + multiply = scope:attacker.realm_size + desc = CB_REALM_SIZE_COST + max = 75 + } + } + multiply = common_cb_piety_cost_multiplier + } + prestige = { + value = 0 + if = { + limit = { + NOT = { scope:defender.faith = scope:attacker.faith } + } + add = { + value = 50 + desc = CB_COST_DIFFERENT_FAITH + } + add = { + value = 5 + multiply = scope:attacker.realm_size + desc = CB_REALM_SIZE_COST + max = 100 + } + } + multiply = common_cb_prestige_cost_multiplier + } + } + + on_declaration = { + on_declared_war = yes + } + + on_victory_desc = { + desc = mt_recompense_cb_victory_desc + } + + on_victory = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 accolade glory gain for winning against higher ranked enemy + scope:attacker = { accolade_attacker_war_end_glory_gain_low_effect = yes } + + # Prestige Progress for the Attacker + every_in_list = { + list = target_titles + scope:attacker = { + add_prestige_experience = minor_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:attacker + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + # Truce + add_truce_attacker_victory_effect = yes + + } + + on_white_peace_desc = { + desc = mt_recompense_cb_wp_desc + } + + on_white_peace = { + scope:attacker = { show_pow_release_message_effect = yes } + # Prestige loss for the attacker + scope:attacker = { + add_prestige = { + value = minor_prestige_value + multiply = -1.0 + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:attacker # Not important as the scales are identical + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + scope:defender = { + stress_impact = { + arrogant = medium_stress_impact_gain + } + } + + add_truce_white_peace_effect = yes + } + + on_defeat_desc = { + desc = mt_recompense_cb_defeat_desc + } + + on_defeat = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 accolade glory gain for winning against higher ranked enemy + scope:defender = { accolade_defender_war_end_glory_gain_low_effect = yes } + + # Prestige loss for the attacker + scope:attacker = { + pay_short_term_gold_reparations_effect = { + GOLD_VALUE = 1 + } + add_prestige = { + value = medium_prestige_value + multiply = -1.0 + } + } + + # Prestige for Defender + scope:defender = { + add_prestige_war_defender_effect = { + PRESTIGE_VALUE = medium_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:defender + FAME_BASE = minor_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + add_truce_attacker_defeat_effect = yes + + scope:attacker = { + save_temporary_scope_as = loser + } + on_lost_aggression_war_discontent_loss = yes + } + + transfer_behavior = transfer + + on_primary_attacker_death = inherit + on_primary_defender_death = inherit + + attacker_allies_inherit = yes + defender_allies_inherit = yes + + attacker_ticking_warscore = 0 + attacker_wargoal_percentage = 0.7 + + war_name = mt_recompense_war_name + war_name_base = "CONQUEST_WAR_NAME_BASE" + cb_name = "CONQUEST_COUNTY_CB_NAME" + + interface_priority = 76 + + max_defender_score_from_occupation = 150 + max_attacker_score_from_occupation = 150 + +} \ No newline at end of file diff --git a/Medievel_Thievery/common/character_interactions/medievel_thievery_character_interactions.txt b/Medievel_Thievery/common/character_interactions/medievel_thievery_character_interactions.txt new file mode 100644 index 0000000..1e1bd06 --- /dev/null +++ b/Medievel_Thievery/common/character_interactions/medievel_thievery_character_interactions.txt @@ -0,0 +1,743 @@ +############################################################################################################################## +# Medievel Thievery Mod +# Developed by DevZero (some code taken from pdx) - the mod has thievery in the name after all... +# Notes: First iteration -- Might need to balance piety and prestige values, will judge by community feedback +############################################################################################################################## + +# Interaction name is a holdover from before mod was expanded. Leaving as-is so as not to create any localization issues, and it matters very little. +mt_steal_gold_interaction = { + icon = mt_interaction_icon + common_interaction = yes + interface_priority = 12 + category = interaction_category_hostile + desc = mt_steal_gold_interaction_desc + cooldown = { months = 20 } + cooldown_against_recipient = {years = 3} + + is_shown = { + NOT = { + scope:recipient = scope:actor + scope:actor = { + OR = { + intrigue < 10 + is_allied_to = scope:recipient + age < 11 + } + } + scope:recipient = { + is_ruler = no + } + } + + # PDX Multiplayer Checks | Mod not balanced or made for multiplayer, but in case someone uses it. + NAND = { # Game Rules! + has_game_rule = no_players_multiplayer_murder_schemes + scope:actor = { + is_ai = no + } + scope:recipient = { + is_ai = no + } + } + + NAND = { + has_game_rule = no_player_families_multiplayer_murder_schemes + scope:actor = { + is_ai = no + } + scope:recipient = { + OR = { + is_ai = no + any_close_family_member = { + AND = { + is_ai = no + NOT = { this = scope:actor } + } + } + } + } + } + + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + # Will stop AI as they do not trigger the flags -- must trigger on player + can_send = { + trigger_if = { + limit = { + scope:actor = { + is_ai = no + } + } + custom_tooltip = { + text = mt_can_send_requirement + OR = { + scope:steal_gold = yes + scope:steal_prestige = yes + scope:steal_piety = yes + } + } + } + trigger_else = { + scope:recipient = { + NOT = { + has_character_flag = flag_mt_ai_theft_victim + } + } + } + } + + on_accept = { + scope:actor = { + save_scope_as = mt_thief + } + scope:recipient = { + save_scope_as = mt_victim + } + + if = { + limit = { + scope:steal_gold = yes + } + scope:actor = { + duel = { + skill = intrigue + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + + give_or_update_embezzler_secret_effect = { + TARGET = scope:recipient + STAKE = mt_steal_gold_value + } + + show_as_tooltip = { + add_gold = { + value = mt_steal_gold_value + } + } + + show_as_tooltip = { + scope:recipient = { + add_gold = { + value = mt_steal_gold_value + multiply = -1 + } + } + } + + scope:actor = { + if = { + limit = { has_trait = greedy } + add_stress = massive_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + + hidden_effect = { + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = mt_steal_gold_value + } + } + trigger_event = { + id = mt_event.1001 + days = { 7 10 } + } + } + } + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = greedy + can_set_relation_nemesis_trigger = { CHARACTER = scope:actor } + } + set_relation_nemesis = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI Reciprocations + hidden_effect = { + mt_reciprocal_gold_effect = yes + } + + + } + } + } + } + else_if = { + limit = { + scope:steal_prestige = yes + } + scope:actor = { + duel = { + skill = diplomacy + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_prestige = { + value = 0 + add = mt_steal_prestige_value + } + + scope:recipient = { + add_prestige = { + value = 0 + add = mt_steal_prestige_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = arrogant } + add_stress = medium_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.2001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = arrogant + } + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -75 + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_prestige_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:steal_piety = yes + } + scope:actor = { + duel = { + skill = learning + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_piety = { + value = mt_steal_piety_value + } + + scope:recipient = { + add_piety = { + value = mt_steal_piety_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = humble } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = massive_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.3001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Forgiving characters lose a little less. + if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_piety_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:ai_option = yes + } + hidden_effect = { + mt_ai_action_effect = yes + } + } + } + + # AI Option -- effects, choice and such filtered out in the effect. AI can not pick options normally so we filter based on traits and default to theft of gold. This choice is hidden from the player and should be first among the options so the ai defaults to it. + send_option = { + flag = ai_option + is_shown = { + scope:actor = { + is_ai = yes + } + } + is_valid = { + scope:actor = { + is_ai = yes + } + } + } + + # Player Options + send_option = { + flag = steal_gold + localization = mt_local_gold + is_valid = { + NOT = { scope:recipient.gold < 50 } + } + + } + send_option = { + flag = steal_prestige + localization = mt_local_prestige + is_valid = { + NOT = { scope:recipient.prestige < 50 } + } + } + send_option = { + flag = steal_piety + localization = mt_local_piety + is_valid = { + NOT = { scope:recipient.piety < 50 } + } + } + + send_options_exclusive = yes + auto_accept = yes + + #################################################### + # AI + ai_targets = { + ai_recipients = neighboring_rulers + max = 3 + } + ai_targets = { + ai_recipients = leige + max = 1 + } + ai_targets = { + ai_recipients = realm_characters + max = 5 + } + ai_targets = { + ai_recipients = peer_vassals + max = 3 + } + + ai_frequency = 240 + + ai_potential = { + AND = { + age > 15 + intrigue > 9 + AND = { + OR = { + has_trait = schemer + has_trait = deceitful + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + + OR = { + has_trait = greedy + has_trait = ambitious + has_trait = arbitrary + } + } + + } + + } + + ai_will_do = { + base = 0 + + #################################### + # Weights - Who am I? Who are YOU!? + + # Weigh Opinion + opinion_modifier = { + opinion_target = scope:recipient + multiplier = -0.25 + } + + # Weigh Personality. + ai_value_modifier = { + ai_boldness = 0.10 + ai_greed = 0.25 + ai_honor = -1 + } + + ######################## + # Debt based modifiers - I NEED IT, GIVE IT HERE! + + modifier = { + add = 5 + debt_level = 1 + } + ### Is one year in debt. + modifier = { + add = 10 + debt_level = 2 + } + ### Is two years in debt. + modifier = { + add = 20 + debt_level = 3 + } + ### Is three years in debt. + modifier = { + add = 35 + debt_level = 4 + } + ### Is four years in debt. + modifier = { + add = 50 + debt_level = 5 + } + ### Is over five years in debt. + modifier = { + add = 75 + debt_level >= 6 + } + + ######################### + # Traits + + modifier = { + add = 15 + has_trait = deceitful + } + modifier = { + add = -150 + has_trait = honest + } + + modifier = { + add = -15 + has_trait = generous + } + modifier = { + add = -25 + has_trait = compassionate + } + modifier = { + add = -10 + has_trait = temperate + } + modifier = { + add = -5 + has_trait = calm + } + modifier = { + add = -20 + has_trait = humble + } + modifier = { + add = -15 + has_trait = craven + } + modifier = { + add = 5 + has_trait = ambitious + } + modifier = { + add = 10 + has_trait = greedy + } + modifier = { + add = -35 + has_trait = content + } + modifier = { + add = -30 + has_trait = just + } + + ############################## + # Specialized Criteria + + # Rival + modifier = { + add = 15 + scope:actor = { + has_relation_rival = scope:recipient + } + } + + # Nemesis + modifier = { + add = 25 + scope:actor = { + has_relation_nemesis = scope:recipient + } + } + + # Friend of Some Kind + modifier = { + add = -100 + scope:actor = { + OR = { + has_relation_friend = scope:recipient + has_relation_best_friend = scope:recipient + has_relation_lover = scope:recipient + has_relation_soulmate = scope:recipient + has_relation_guardian = scope:recipient + has_relation_ward = scope:recipient + } + } + } + + # Probably not the best idea to steal from the Head of my Faith . . . + modifier = { + add = -85 + scope:actor.faith.religious_head = scope:recipient + } + + + } + +} \ No newline at end of file diff --git a/Medievel_Thievery/common/script_values/medievel_thievery_values.txt b/Medievel_Thievery/common/script_values/medievel_thievery_values.txt new file mode 100644 index 0000000..c8cb5c3 --- /dev/null +++ b/Medievel_Thievery/common/script_values/medievel_thievery_values.txt @@ -0,0 +1,145 @@ +mt_steal_gold_value = { + value = 0 + if = { + limit = { scope:recipient.gold > 0 } + add = scope:recipient.gold + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.gold <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.gold <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.gold <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.gold <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.gold <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes + +} + +mt_steal_prestige_value = { + value = 0 + if = { + limit = { scope:recipient.prestige > 0 } + add = scope:recipient.prestige + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.prestige <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.prestige <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.prestige <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.prestige <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.prestige <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes +} + +mt_steal_piety_value = { + value = 0 + if = { + limit = { scope:recipient.piety > 0 } + add = scope:recipient.piety + } + multiply = { + value = 0.2 + if = { + limit = { + scope:recipient.piety <= 100 + } + add = 0 + } + else_if = { + limit = { + scope:recipient.piety <= 250 + } + add = 0.05 + } + else_if = { + limit = { + scope:recipient.piety <= 500 + } + add = 0.1 + } + else_if = { + limit = { + scope:recipient.piety <= 750 + } + add = 0.125 + } + else_if = { + limit = { + scope:recipient.piety <= 1000 + } + add = 0.15 + } + else = { + add = 0.175 + } + } + round = yes +} + +mt_thief_caught_gold_value = { + value = 0 + if = { + limit = { + scope:mt_thief.gold > 0 + } + add = scope:mt_thief.gold + } +} diff --git a/Medievel_Thievery/common/scripted_effects/mt_event_effects.txt b/Medievel_Thievery/common/scripted_effects/mt_event_effects.txt new file mode 100644 index 0000000..c58c3dd --- /dev/null +++ b/Medievel_Thievery/common/scripted_effects/mt_event_effects.txt @@ -0,0 +1,890 @@ + + +mt_thief_commonfolk_atrifact_effect_01 = { + create_artifact = { + name = "Commonfolk Tapestry" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = tapestry + visuals = tapestry + rarity = masterwork + modifier = artifact_court_grandeur_baseline_add_2_modifier + modifier = artifact_monthly_tyranny_3_modifier + modifier = artifact_mercenary_hire_cost_mult_2_modifier + modifier = artifact_monthly_intrigue_lifestyle_xp_1_modifier + } + +} +mt_thief_commonfolk_atrifact_effect_02 = { + create_artifact = { + name = "A Song of Water and Lava" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = book + visuals = book + rarity = masterwork + modifier = artifact_court_grandeur_baseline_add_2_modifier + modifier = artifact_fertility_gain_2_modifier + modifier = artifact_negate_health_penalty_add_3_modifier + modifier = artifact_short_reign_duration_mult_3_modifier + modifier = artifact_dread_gain_mult_1_modifier + modifier = artifact_intrigue_1_modifier + } +} +mt_thief_commonfolk_atrifact_effect_03 = { + create_artifact = { + name = "Flowers" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = miscellaneous + visuals = flowers + rarity = masterwork + modifier = artifact_attraction_opinion_1_modifier + } +} +mt_thief_commonfolk_atrifact_effect_04 = { + create_artifact = { + name = "Peasant's Bone" + description = "A product at the expense of the commonfolk from another realm. Procured from a thieves guild and given to the sponsoring ruler as proof of realm harassment. " + type = miscellaneous + visuals = bone + rarity = common + modifier = artifact_build_gold_cost_1_modifier + } + +} + + + +mt_reciprocal_gold_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1002 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + AND = { + OR = { + has_trait = education_martial_5 + has_trait = strategist + martial > 20 + } + + OR = { + has_trait = wrathful + has_trait = vengeful + } + + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already assessed +} + +mt_reciprocal_prestige_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1003 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + AND = { + OR = { + has_trait = education_martial_5 + has_trait = strategist + martial > 20 + } + + OR = { + has_trait = wrathful + has_trait = vengeful + } + + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already accessed +} + +mt_reciprocal_piety_effect = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.1004 + days = { 7 10 } + } + } + } + } + # AI Murder Retribution + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = murderer + has_trait = schemer + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + dread > 75 + } + } + } + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + # AI Reciprocal Abduct (torturer's delight) + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = torturer + has_trait = ambitious + has_trait = cannibal + } + } + } + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = administrator + has_trait = architect + } + } + } + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + # AI Sends Scoundrels to 'persuade' thief to give all Gold + else_if = { + limit = { + scope:mt_victim = { + OR = { + has_trait = greedy + has_trait = overseer + } + } + } + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + # War time, Rah! + else_if = { + limit = { + scope:mt_victim = { + AND = { + OR = { + has_trait = education_martial_5 + has_trait = strategist + martial > 20 + } + + OR = { + has_trait = wrathful + has_trait = vengeful + } + + } + } + } + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + } + } + } + # Else no consequences -- opinion penalty already accessed +} + +# AI action 'selection' since they don't use send options (default to gold theft) +mt_ai_action_effect = { + + scope:mt_victim = { + add_character_flag = { + flag = flag_mt_ai_theft_victim + years = 7 + } + } + + if = { + limit = { + scope:actor = { + OR = { + has_trait = august + has_trait = arrogant + has_trait = education_diplomacy_5 + has_trait = ambitious + has_trait = diplomat + } + } + } + scope:actor = { + duel = { + skill = diplomacy + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_prestige = { + value = 0 + add = mt_steal_prestige_value + } + + scope:recipient = { + add_prestige = { + value = 0 + add = mt_steal_prestige_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = arrogant } + add_stress = medium_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.2001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = arrogant + } + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -75 + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_prestige_effect = yes + } + } + } + } + } + else_if = { + limit = { + scope:actor = { + OR = { + has_trait = zealous + has_trait = theologian + has_trait = education_learning_5 + has_trait = education_learning_4 + } + } + } + scope:actor = { + duel = { + skill = learning + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + add_piety = { + value = mt_steal_piety_value + } + + scope:recipient = { + add_piety = { + value = mt_steal_piety_value + multiply = -1 + } + } + + scope:actor = { + if = { + limit = { has_trait = humble } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = massive_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + hidden_effect = { + scope:recipient = { + trigger_event = { + id = mt_event.3001 + days = { 7 10 } + } + } + } + + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Forgiving characters lose a little less. + if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + #################################################################################################################### + # Events and AI reciprocations + hidden_effect = { + mt_reciprocal_piety_effect = yes + } + } + } + } + } + else = { + scope:actor = { + duel = { + skill = intrigue + target = scope:recipient + 50 = { + desc = mt_steal_gold_interaction.tt.success.actor + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction.tt.success.actor + left_icon = scope:recipient + + + give_or_update_embezzler_secret_effect = { + TARGET = scope:recipient + STAKE = mt_steal_gold_value + } + + show_as_tooltip = { + add_gold = { + value = mt_steal_gold_value + } + } + + show_as_tooltip = { + scope:recipient = { + add_gold = { + value = mt_steal_gold_value + multiply = -1 + } + } + } + + scope:actor = { + if = { + limit = { has_trait = greedy } + add_stress = massive_stress_impact_loss + } + if = { + limit = { has_trait = compassionate } + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_trait = deceitful } + add_stress = minor_stress_impact_loss + } + if = { + limit = { has_trait = content } + add_sress = medium_stress_impact_gain + } + if = { + limit = { has_trait = temperate } + add_stress = minor_stress_impact_gain + } + if = { + limit = { has_trait = honest } + add_stress = massive_stress_impact_gain + } + if = { + limit = { has_trait = just } + add_stress = medium_stress_impact_gain + } + } + + } + + hidden_effect = { + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = mt_steal_gold_value + } + } + trigger_event = { + id = mt_event.1001 + days = { 7 10 } + } + } + } + + } + + 50 = { + desc = mt_steal_gold_interaction_tt.failure.actor + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = mt_steal_gold_interaction_tt.failure.actor + left_icon = scope:recipient + + scope:recipient = { + # Greedy characters will not forgive this slight if they can help it. + if = { + limit = { + has_trait = greedy + can_set_relation_nemesis_trigger = { CHARACTER = scope:actor } + } + set_relation_nemesis = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters lose a little less. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -10 + } + } + # Otherwise, folks do be mad. + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -45 + } + } + + } + + } + + #################################################################################################################### + # Events and AI Reciprocations + hidden_effect = { + mt_reciprocal_gold_effect = yes + } + + + } + } + } + } +} \ No newline at end of file diff --git a/Medievel_Thievery/descriptor.mod b/Medievel_Thievery/descriptor.mod new file mode 100644 index 0000000..04060cd --- /dev/null +++ b/Medievel_Thievery/descriptor.mod @@ -0,0 +1,9 @@ +version="0.1" +tags={ + "Schemes" + "Gameplay" + "Character Interactions" +} +name="Medievel Thievery" +supported_version="1.*" +remote_file_id="3143275236" \ No newline at end of file diff --git a/Medievel_Thievery/events/mt_events.txt b/Medievel_Thievery/events/mt_events.txt new file mode 100644 index 0000000..868a6b6 --- /dev/null +++ b/Medievel_Thievery/events/mt_events.txt @@ -0,0 +1,510 @@ +################################################################################################################## +# Medievel Thievery Events +# Developed by DevZero +# Notes: Need to start war in event option: learn it! +################################################################################################################## + +# Events are in order as follows: +# 1001, 2001, 3001 - Alert player of sucessful theft against them -- gold / prestige / piety respectively +# 1002, 1003, 1004 - Player action to unsuccessful theft against them -- gold / prestige / piety respectively for flavor text +# 1021, 1022 - Second layer to player action -- Reciprocal Thieve / Reciprocal Scheme +# 5000 - Fallback for player to reselect options (didn't like or wanted to see the rest) + +namespace = mt_event + +# Event to let player know there was a successful attempt against them to steal gold +mt_event.1001 = { + type = character_event + title = mt_notify_gold_title + desc = mt_notify_gold_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_gold_option.a + } + option = { + name = mt_notify_gold_option.b + } + +} + +# Event to let player know there was a successful attempt against them to steal prestige +mt_event.2001 = { + type = character_event + title = mt_notify_prestige_title + desc = mt_notify_prestige_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_prestige_option.a + } + option = { + name = mt_notify_prestige_option.b + } + option = { + name = mt_notify_prestige_option.c + } +} + +# Event to let player know there was a successful attempt against them to steal piety +mt_event.3001 = { + type = character_event + title = mt_notify_piety_title + desc = mt_notify_piety_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + option = { + name = mt_notify_piety_option.a + } + option = { + name = mt_notify_piety_option.b + } + option = { + name = mt_notify_piety_option.c + } +} + + +################################################################################################################################## +################################################################################################################################## +# Caught! + +# Steal Failure Gold -- Advises Player of theif, player can select two reciprical action categories or two actions +mt_event.1002 = { + type = character_event + title = mt_caught_gold_reciprocal_main_title + desc = mt_caught_gold_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} + +#Steal Failure Prestige +mt_event.1003 = { + type = character_event + title = mt_caught_prestige_reciprocal_main_title + desc = mt_caught_prestige_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = county_conquest_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} + +# Steal Failure Piety +mt_event.1004 = { + type = character_event + title = mt_caught_piety_reciprocal_main_title + desc = mt_caught_piety_reciprocal_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # # Start war - No overreaction here to speak of ... + option = { + name = mt_reciprocal_war_option.tt + + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + + } + + # let it go -- stress relieving (especially forgiving characters). + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } +} +######################################################################################################### +# Reciprocal Thievery +mt_event.1021 = { + type = character_event + title = mt_reiprocal_thieve_main_title + desc = mt_reiprocal_thieve_main_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + # Send scoundrels (take all gold or kills thief) + option = { + name = mt_reciprocal_thieve_employ_rogues_option + + custom_tooltip = mt_reciprocal_rogues_employ_desc.tt + random_list = { + 20 = { + scope:mt_thief = { + pay_short_term_gold = { + target = scope:mt_victim + gold = mt_thief_caught_gold_value + } + + } + } + 70 = { + scope:mt_thief = { + add_trait = wounded_1 + } + } + 10 = { + + } + } + } + + # Send marauders to torment their capital + option = { + name = mt_reciprocal_thieve_scoundrel_disturb_option + + custom_tooltip = mt_reciprocal_scoundrel_disturb_employ_desc.tt + scope:mt_thief.capital_county = { + random_list = { + 50 = { + change_development_level = -1 + } + 50 = { + change_development_progress = -50 + } + } + add_county_modifier = county_corruption_bandits_rampant_modifier + } + + + } + + # Send scoundrels to thieve the realm (may get artifact) + option = { + name = mt_reciprocal_thieve_employ_theives_option + + custom_tooltip = mt_reciprocal_thieve_employ_desc.tt + random_list = { + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_01 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_02 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_03 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_04 = yes + } + } + 20 = { + scope:mt_victim = { + mt_thief_commonfolk_atrifact_effect_05 = yes + } + } + } + random_list = { + 50 = { + scope:mt_thief.capital_county = { + add_county_modifier = county_corruption_thieves_guild_modifier + } + } + 50 = { + + } + } + } + + # Nevermind + option = { + name = mt_reciprocal_nervermind_exit.tt + trigger_event = { + id = mt_event.5000 + } + } +} + +# Personal Schemes +mt_event.1022 = { + + type = character_event + title = mt_reciprocal_personal_title + desc = mt_reciprocal_personal_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + + # Murder the ne'er-do-well! + option = { + name = mt_reciprocal_murder_option.tt + scope:mt_victim = { + start_scheme = { + type = murder + target = scope:mt_thief + } + } + } + + # Abduct the ne'er-do-well! + option = { + name = mt_reciprocal_abduct_option.tt + scope:mt_victim = { + start_scheme = { + type = abduct + target = scope:mt_thief + } + } + } + + # Nevermind + option = { + name = mt_reciprocal_nervermind_exit.tt + trigger_event = { + id = mt_event.5000 + } + } +} + +############################################################################################################# +# Redirect Fallback Should Player want to address different options or see all -- 'Nevermind Option Event' +mt_event.5000 = { + type = character_event + title = mt_reciprocal_fallback_title + desc = mt_reciprocal_fallback_desc + + theme = default + override_background = { reference = study } + + left_portrait = { + character = scope:mt_victim + animation = personality_bold + } + + # Two can play at that game! - Thieve Back + option = { + name = mt_reciprocal_thieve_option.tt + trigger_event = { + id = mt_event.1021 + } + } + + # Let's make this personal! - Get back at character directly (murder / abduct / fab hook) + option = { + name = mt_reciprocal_personal_scheme_option.tt + trigger_event = { + id = mt_event.1022 + } + } + + # Start war -- don't know how to create claim on artifact + option = { + name = mt_reciprocal_war_option.tt + custom_tooltip = mt_reciprocal_war_desc.tt + scope:mt_victim = { + start_war = { + casus_belli = mt_recompense_cb + target = scope:mt_thief + target_title = scope:mt_thief.capital_county + + } + } + + } + + # let it go -- stress relieving (especially forgiving characters) and opinion boost with nayer-do-well. + option = { + name = mt_non_reciprocal_option.tt + scope:mt_victim = { + if = { + limit = { + has_trait = forgiving + } + add_stress = -50 + } + else = { + add_stress = -10 + } + } + } + + + +} + + diff --git a/Medievel_Thievery/gfx/interface/icons/character_interactions/mt_interaction_icon.dds b/Medievel_Thievery/gfx/interface/icons/character_interactions/mt_interaction_icon.dds new file mode 100644 index 0000000..9c829eb Binary files /dev/null and b/Medievel_Thievery/gfx/interface/icons/character_interactions/mt_interaction_icon.dds differ diff --git a/Medievel_Thievery/localization/english/mod_medievel_thievery_l_english.yml b/Medievel_Thievery/localization/english/mod_medievel_thievery_l_english.yml new file mode 100644 index 0000000..c6efd48 --- /dev/null +++ b/Medievel_Thievery/localization/english/mod_medievel_thievery_l_english.yml @@ -0,0 +1,86 @@ +l_english: + + # Interaction + mt_steal_gold_interaction: "Thieve" + mt_steal_gold_interaction_desc: "Thieve from [recipient.GetTitledFirstName]" + mt_steal_gold_interaction.tt.success.actor: "You're successful in your thievery" + mt_steal_gold_interaction_tt.failure.actor: "Your dastardly ploy is uncovered" + mt_can_send_requirement: "Must choose an option" + mt_local_gold: "Thieve Gold" + mt_local_prestige: "Thieve Prestige" + mt_local_piety: "Thieve Piety" + + #### Events + # Event: Not Caught - Notify / Don't reveal + mt_notify_gold_title: "Thievery: Missing Gold" + mt_notify_gold_desc: "\n\nI have been hearing through various sources that there is missing gold from the treasury. Though after a short rummaging, a lowly administrative scribe found nothing." + mt_notify_gold_option.a: "I shall delve no further ino the matter, surely I would have noticed!" + mt_notify_gold_option.b: "Another question left to the philosophers I suppose!" + + mt_notify_prestige_title: "Thievery: Regal Reputation" + mt_notify_prestige_desc: "\n\nThere has been much talk amidst the realm. Someone has besmirched my regal nature and reputation! Unduly and unfairly, I say. Why lead a campaign that turns the secular opinion against the great leader of the realm? One intercepted letter's introduction reads #italic '... we must recognize those worthy of fame and those of whom are not ... '#! Blasphemous!" + mt_notify_prestige_option.a: "The colloquial #italic 'we' #! is reserved for those with leeches and the mad! " + mt_notify_prestige_option.b: "One must not concern themself with the opinions of the sheep." + mt_notify_prestige_option.c: "One must simply know me to understand if my reputation is just!" + + mt_notify_piety_title: "Thievery: Piousness" + mt_notify_piety_desc: "\n\nTalk among the common folk is that my piousness is in question. Someone has undoubtedly spread this slanderous information in an effort to increase their own standing in the matter." + mt_notify_piety_option.a: "I am just as pious as the rest!" + mt_notify_piety_option.b: "Does this person know me?" + mt_notify_piety_option.c: "None shall come of this." + + # Event: Caught + mt_caught_gold_reciprocal_main_title: "Thievery: Gold" + mt_caught_gold_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to thieve from #EMP my #! treasury!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + mt_caught_prestige_reciprocal_main_title: "Thievery: Regal Reputation" + mt_caught_prestige_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to lessen my reputation in the secular realm in service of [mt_thief.GetHerHis] own!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + mt_caught_piety_reciprocal_main_title: "Thievery: Piousness" + mt_caught_piety_reciprocal_main_desc: "\n\n[mt_thief.GetTitledFirstName] Has been named as ne'er-do-well against me in a ploy to service [mt_thief.GetHerHis] own reputation regarding piousness. While the ploy was uncovered, there could have been questions regarding my piousness!\n\nRumors spread and the news has made its rounds amongst the commonfolk. The realm awaits my response." + + + mt_reciprocal_thieve_option.tt: "#italic Ohhh,#! two can play at that game!" + mt_reciprocal_personal_scheme_option.tt: "Let's make this personal!" + mt_reciprocal_war_option.tt: "Raise the army!" + mt_non_reciprocal_option.tt: "I'll not lower myself to the same level as the swine!" + + + + # Reciprocal Thievery + mt_reiprocal_thieve_main_title: "Thievery: The Games We Play" + mt_reiprocal_thieve_main_desc: "\n\nAn eye for an eye makes the realm blind -- or so I've been told. Though whoever said that must not of been wronged in such a way! Some sort of justice must be served! Honor demands it!" + + mt_reciprocal_thieve_employ_rogues_option: "I'll convince local rogues to inflitrate [mt_thief.GetHerHis] castle during the night!" + mt_reciprocal_rogues_employ_desc.tt: "#italic Simply, [mt_thief.GetSheHe] will pay or meet the ire of the rogues #!" + + mt_reciprocal_thieve_employ_theives_option: "I'll send local thieves to harass the commonfolk among [mt_thief.GetHerHis] realm!" + mt_reciprocal_thieve_employ_desc.tt: "#italic Regality be damned, recompense will come from someone #!" + + mt_reciprocal_thieve_scoundrel_disturb_option: "I'll send a band of local scoundrels to sow chaos in [mt_thief.GetHerHis] capital!" + + mt_reciprocal_scoundrel_disturb_employ_desc.tt: "#italic Surely as rain is wet, [mt_thief.GetHerHis] capital will come to dislike the ruffians set upon it #!" + + # Reciprocal Personal + mt_reciprocal_personal_title: "Thievery: Let's Get Personal" + mt_reciprocal_personal_desc: "\n\nForget the rest, there is one person responsible and [mt_thief.GetTitledFirstName] will face my personal judgement. The question becomes rather, what sort of justice shall be enacted!" + mt_reciprocal_murder_option.tt: "[mt_thief.GetTitledFirstName] shall serve the ground as fertilizer!" + mt_reciprocal_abduct_option.tt: "Abduct now, decide later..." + + # War Reciprocal Option + mt_reciprocal_war_desc.tt: "#italic No overreaction here to speak of#!" + + # Fallback + mt_reciprocal_fallback_title: "Thievery: Decisions, Decisions..." + mt_reciprocal_fallback_desc: "\n\n#italic Hmmm.. let me think ...#!" + + # Exit option for all level 2 events + mt_reciprocal_nervermind_exit.tt: "Maybe I should rethink my options..." + + # Reciprocal War + mt_recompense_cb: "Recompense Casus Belli" + mt_recompense_war_name: "Recompense War" + mt_recompense_cb_victory_desc: "You benefit from the spoils of war as just recompense!" + mt_recompense_cb_wp_desc: "Hostilities end between the two sides." + mt_recompense_cb_defeat_desc: "You are embarassed on the field of battle." + diff --git a/Medievel_Thievery/thumbnail.png b/Medievel_Thievery/thumbnail.png new file mode 100644 index 0000000..90ef918 Binary files /dev/null and b/Medievel_Thievery/thumbnail.png differ diff --git a/Mongol_Playthrough_Culture_&_Religion.mod b/Mongol_Playthrough_Culture_&_Religion.mod new file mode 100644 index 0000000..b2c814c --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion.mod @@ -0,0 +1,8 @@ +version="0.1a" +tags={ + "Religion" + "Culture" +} +name="Mongol Playthrough Culture & Religion" +supported_version="1.9.2.1" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Mongol_Playthrough_Culture_&_Religion" \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/buildings/m_buildings.txt b/Mongol_Playthrough_Culture_&_Religion/common/buildings/m_buildings.txt new file mode 100644 index 0000000..ee0e8da --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/buildings/m_buildings.txt @@ -0,0 +1,543 @@ +# Buildings by DevZero +################################################# +# Special Buildings - +################################################ +great_high_hall_of_asgard_01 = { + + asset = { + type = pdxmesh + name = "fp2_building_special_toledo_city_walls_01_a_mesh" + } + + type_icon = "icon_building_royal_forest.dds" + + is_enabled = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + } + + show_disabled = yes + + type = special + + cost_gold = 25000 + construction_time = slow_construction_time + + + character_modifier = { + knight_limit = 3 + monthly_dynasty_prestige_mult = 0.15 + monthly_dynasty_prestige = 1 + cultural_head_fascination_mult = 0.50 + monthly_lifestyle_xp_gain_mult = 0.65 + } + + province_modifier = { + monthly_income = 15 + fort_level = 3 + } + + county_modifier = { + development_growth = 0.50 + development_growth_factor = 0.50 + levy_size = 0.2 + } + + + flag = travel_point_of_interest_wonder + +} +########################################################################################################################### +# Special Duchy Viking +shield_of_the_viking_01 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + scope:holder = { + has_title = d_viken + } + } + } + + + cost = { + gold = 120 + prestige = 500 + } + + levy = 1500 + max_garrison = 1500 + defender_holding_advantage = 25 + + duchy_capital_county_modifier = { + tax_mult = 0.10 + levy_size = 0.05 + garrison_size = 0.05 + hostile_raid_time = 2 + travel_danger = -15 + fort_level = 2 + + } + + province_modifier = { + fort_level = 5 + garrison_size = 1.05 + levy_size = 0.15 + stationed_maa_damage_mult = 0.25 + stationed_maa_toughness_mult = 0.25 + stationed_maa_pursuit_mult = 0.25 + stationed_maa_screen_mult = 0.25 + + + } + + character_modifier = { + knight_limit = 3 + knight_effectiveness_mult = 1 + army_maintenance_mult = -0.2 + men_at_arms_cap = 1 + men_at_arms_limit = 2 + monthly_piety = 1 + monthly_prestige = 1 + + } + + type = duchy_capital + next_building = shield_of_the_viking_02 + +} + +shield_of_the_viking_02 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + scope:holder = { + has_title = d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_battlements + } + } + + + cost = { + prestige = expensive_building_tier_3_cost + piety = expensive_building_tier_3_cost + } + + levy = 1500 + max_garrison = 1500 + defender_holding_advantage = 30 + + duchy_capital_county_modifier = { + tax_mult = 0.20 + levy_size = 0.15 + garrison_size = 0.15 + hostile_raid_time = 3 + travel_danger = -20 + fort_level = 2 + + } + + province_modifier = { + fort_level = 8 + garrison_size = 1.2 + levy_size = 0.25 + stationed_maa_damage_mult = 0.5 + stationed_maa_toughness_mult = 0.5 + stationed_maa_pursuit_mult = 0.5 + stationed_maa_screen_mult = 0.5 + + + } + + character_modifier = { + knight_limit = 6 + knight_effectiveness_mult = 1.25 + army_maintenance_mult = -0.25 + monthly_piety = 2 + monthly_prestige = 2 + men_at_arms_cap = 2 + men_at_arms_limit = 4 + + } + + type = duchy_capital + next_building = shield_of_the_viking_03 + +} + +shield_of_the_viking_03 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + scope:holder = { + has_title = d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_hoardings + } + } + + + cost = { + prestige = expensive_building_tier_4_cost + piety = expensive_building_tier_4_cost + } + + levy = 1750 + max_garrison = 1750 + defender_holding_advantage = 35 + + duchy_capital_county_modifier = { + tax_mult = 0.30 + levy_size = 0.25 + garrison_size = 0.25 + hostile_raid_time = 4 + travel_danger = -25 + fort_level = 2 + + } + + province_modifier = { + fort_level = 12 + garrison_size = 1.35 + levy_size = 0.35 + stationed_maa_damage_mult = 0.75 + stationed_maa_toughness_mult = 0.75 + stationed_maa_pursuit_mult = 0.75 + stationed_maa_screen_mult = 0.75 + + + } + + character_modifier = { + knight_limit = 9 + knight_effectiveness_mult = 1.5 + army_maintenance_mult = -0.35 + monthly_piety = 3 + monthly_prestige = 3 + men_at_arms_cap = 3 + men_at_arms_limit = 6 + + } + + type = duchy_capital + next_building = shield_of_the_viking_04 + +} + +shield_of_the_viking_04 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + scope:holder = { + has_title = d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_machicolations + } + } + + cost = { + prestige = expensive_building_tier_4_cost + piety = expensive_building_tier_4_cost + } + + levy = 1750 + max_garrison = 1750 + defender_holding_advantage = 35 + + duchy_capital_county_modifier = { + tax_mult = 0.40 + levy_size = 0.35 + garrison_size = 0.35 + hostile_raid_time = 5 + travel_danger = -30 + fort_level = 2 + + } + + province_modifier = { + fort_level = 15 + garrison_size = 1.5 + levy_size = 0.50 + stationed_maa_damage_mult = 1 + stationed_maa_toughness_mult = 1 + stationed_maa_pursuit_mult = 1 + stationed_maa_screen_mult = 1 + + } + + character_modifier = { + knight_limit = 12 + knight_effectiveness_mult = 2 + army_maintenance_mult = -0.5 + monthly_piety = 4 + monthly_prestige = 4 + men_at_arms_cap = 4 + men_at_arms_limit = 8 + + } + + type = duchy_capital + flag = fully_upgraded_duchy_capital_building + +} +############################################################################################################################# +grand_yurt_01 = { + construction_time = slow_construction_time + + is_enabled = { + } + + + type_icon = "icon_building_military_camps.dds" + + cost = { + gold = 350 + prestige = 500 + } + + + province_modifier = { + monthly_income = 5 + fort_level = 2 + garrison_size = 0.1 + travel_danger = -10 + stationed_archer_cavalry_damage_mult = 0.35 + stationed_archer_cavalry_pursuit_mult = 0.25 + defender_holding_advantage = 8 + + } + + county_modifier = { + development_growth = 0.2 + } + + character_modifier = { + steppe_development_growth_factor = 0.20 + archer_cavalry_max_size_add = 3 + knight_limit = 2 + + } + + type = special + flag = travel_point_of_interest_martial +} +##################################################### +# Duchy Capitol Buidlings +##################################################### +bohemian_keep_01 = { + + construction_time = slow_construction_time + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + type_icon = "icon_building_ramparts.dds" + + cost = { + gold = 120 + prestige = 500 + } + + + duchy_capital_county_modifier = { + tax_mult = 0.10 + levy_size = 0.05 + garrison_size = 0.15 + hostile_raid_time = 0.2 + travel_danger = -15 + additional_fort_level = normal_building_fort_level_tier_2 + } + + province_modifier = { + monthly_income = 3 + stationed_maa_damage_mult = normal_maa_damage_tier_1 + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + + character_modifier = { + knight_limit = 2 + knight_effectiveness_mult = 0.1 + monthly_dynasty_prestige_mult = 0.05 + + } + + + + type = duchy_capital + next_building = bohemian_keep_02 +} + +bohemian_keep_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_requirement_castle_city_church = { LEVEL = 01 } + building_requirement_tribal = no + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_battlements + } + } + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + cost_gold = expensive_building_tier_4_cost + + duchy_capital_county_modifier = { + tax_mult = 0.20 + levy_size = 0.1 + garrison_size = 0.25 + hostile_raid_time = 0.25 + travel_danger = -20 + additional_fort_level = normal_building_fort_level_tier_2 + } + + province_modifier = { + monthly_income = 4 + stationed_maa_damage_mult = normal_maa_damage_tier_2 + stationed_maa_toughness_mult = normal_maa_toughness_tier_2 + } + + character_modifier = { + knight_limit = 4 + knight_effectiveness_mult = 0.15 + monthly_dynasty_prestige_mult = 0.05 + intrigue = 1 + + } + + next_building = bohemian_keep_03 + type = duchy_capital + +} + +bohemian_keep_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_requirement_castle_city_church = { LEVEL = 01 } + building_requirement_tribal = no + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_hoardings + } + } + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + show_disabled = no + + cost_gold = expensive_building_tier_5_cost + + duchy_capital_county_modifier = { + tax_mult = 0.30 + levy_size = 0.15 + garrison_size = 0.25 + hostile_raid_time = 0.3 + travel_danger = -25 + additional_fort_level = normal_building_fort_level_tier_4 + } + + province_modifier = { + monthly_income = 5 + stationed_maa_damage_mult = normal_maa_damage_tier_3 + stationed_maa_toughness_mult = normal_maa_toughness_tier_3 + } + + character_modifier = { + knight_limit = 6 + knight_effectiveness_mult = 0.25 + monthly_dynasty_prestige_mult = 0.05 + intrigue = 1 + + } + + type = duchy_capital + flag = fully_upgraded_duchy_capital_building +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/give_military_host_interaction.txt b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/give_military_host_interaction.txt new file mode 100644 index 0000000..5cde1e5 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/give_military_host_interaction.txt @@ -0,0 +1,173 @@ +give_military_host_interaction = { + interface_priority = 25 + common_interaction= yes + use_diplomatic_range = yes + category = interaction_category_diplomacy + desc = give_military_host_interaction_desc + icon = sponsor_military_gift + + is_shown = { + scope:recipient = { + is_ruler = yes + highest_held_title_tier >= tier_county + } + NOT = { + scope:actor = scope:recipient + } + + } + + can_send = { + custom_tooltip = { + text = mh_can_send_requirement + OR = { + scope:small_military_gift = yes + scope:medium_military_gift = yes + scope:large_military_gift = yes + } + } + } + + on_accept = { + if = { + limit = { + scope:small_military_gift = yes + } + scope:recipient = { + give_military_host_small_effect = yes + + } + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + scope:recipient = { + give_military_host_medium_effect = yes + } + } + else_if = { + limit = { + scope:large_military_gift = yes + } + scope:recipient = { + give_military_host_large_effect = yes + } + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + scope:small_military_gift = yes + } + add = give_military_interaction_gold_cost_small + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + add = give_military_interaction_gold_cost_medium + + } + else_if = { + limit = { + scope:large_military_gift = yes + } + add = give_military_interaction_gold_cost_large + } + } + prestige = { + value = 0 + if = { + limit = { + scope:small_military_gift = yes + } + add = give_military_interaction_prestige_cost_small + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + add = give_military_interaction_prestige_cost_medium + + } + else_if = { + limit = { + scope:large_military_gift = yes + } + add = give_military_interaction_prestige_cost_large + } + } + + } + + send_option = { + flag = small_military_gift + localization = "Sponsor Small Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_small_army_requirement + AND = { + gold > 250 + prestige > 100 + } + } + } + + } + } + send_option = { + flag = medium_military_gift + localization = "Sponsor Moderate Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_medium_army_requirement + AND = { + gold > 500 + prestige > 250 + } + } + } + } + + } + send_option = { + flag = large_military_gift + localization = "Sponsor Large Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_large_army_requirement + AND = { + gold > 1000 + prestige > 500 + } + } + } + } + } + + send_options_exclusive = yes + + # Always up to get some free military! + auto_accept = yes + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt new file mode 100644 index 0000000..7d51974 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt @@ -0,0 +1,122 @@ +instruct_physician_to_treat_ill_interaction = { + interface_priority = 25 + common_interaction= yes + use_diplomatic_range = yes + category = interaction_category_friendly + desc = instruct_physician_to_treat_ill_interaction_desc + icon = icon_scheme_crypto_religion + + is_shown = { + NOT = { + OR = { + scope:actor = scope:recipient + NOT = { + scope:actor = { + exists = court_position:court_physician_court_position + } + } + } + + } + scope:recipient = { + # Remember to add court position - physician requirement + is_alive = yes + + AND = { + # Coutier / Related in some way + OR = { + is_courtier_of = scope:actor + is_close_or_extended_family_of = scope:actor + scope:recipient.dynasty = scope:actor.dynasty + } + # Has bad health traits and does not have reducing disease symptoms - currently being treated. No psychiatric afflictions here! + OR = { + has_trait = ill + has_trait = pneumonic + has_trait = great_pox + has_trait = lovers_pox + has_trait = leper + has_trait = wounded_1 + has_trait = wounded_2 + has_trait = wounded_3 + has_trait = maimed + has_trait = gout_ridden + has_trait = consumption + has_trait = cancer + has_trait = typhus + has_trait = bubonic_plague + has_trait = smallpox + has_character_modifier = infected_wound_modifier + has_character_modifier = gangrene_modifier + has_trait = sickly + } + # Is not currently being treated (reduced diseased symptoms character modifier) + NOT = { + has_character_modifier = safe_disease_treatment_success_high_modifier + has_character_modifier = safe_disease_treatment_success_low_modifier + has_character_modifier = safe_disease_treatment_failure_modifier + has_character_modifier = risky_disease_treatment_success_high_modifier + has_character_modifier = risky_disease_treatment_success_low_modifier + has_character_modifier = risky_disease_treatment_failure_modifier + has_character_modifier = safe_wound_treatment_success_high_modifier + has_character_modifier = safe_wound_treatment_success_low_modifier + has_character_modifier = safe_wound_treatment_failure_modifier + has_character_modifier = risky_wound_treatment_success_modifier + has_character_modifier = risky_wound_treatment_failure_modifier + + } + } + } + + } + + on_send = { + + scope:recipient = { + if = { + limit = { + OR = { + has_trait = sickly + has_trait = consumption + has_trait = cancer + has_trait = typhus + has_trait = bubonic_plague + has_trait = smallpox + has_trait = ill + has_trait = pneumonic + has_trait = great_pox + has_trait = lovers_pox + has_trait = leper + } + + } + it_disease_event_effect = yes + instruct_treatment_disease_effect = yes + } + else_if = { + limit = { + OR = { + has_character_modifier = infected_wound_modifier + has_character_modifier = gangrene_modifier + has_trait = wounded_1 + has_trait = wounded_2 + has_trait = wounded_3 + has_trait = maimed + } + } + it_wounded_event_effect = yes + instruct_treatment_wounded_effect = yes + } + + } + + } + + # 3102 for disease + #41 + + # Always want to be helped + auto_accept = yes + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/norse_asgard_enabled_interaction.txt b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/norse_asgard_enabled_interaction.txt new file mode 100644 index 0000000..93a6f1d --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/norse_asgard_enabled_interaction.txt @@ -0,0 +1,116 @@ +############################################################################################################################## +# Medievel Thievery Mod +# Developed by DevZero (some code taken from pdx) - the mod has thievery in the name after all... +# Notes: for AI inclusion, look at ai in diarch_interactions > syphon -- ai greed, boldness, honor for base, then modifiers +############################################################################################################################## + +norse_asgard_enabled_interaction = { + icon = icon_scheme_fabricate_hook + common_interaction = yes + interface_priority = 100 + category = interaction_category_friendly + desc = norse_asgard_enabled_interaction_desc + cooldown = { months = 18 } + cooldown_against_recipient = {years = 5} + + is_shown = { + scope:actor.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + + NOT = {Scope:recipient = scope:acotr} + + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + on_accept = { + scope:actor = { + duel = { + skill = learning + target = scope:recipient + 55 = { + desc = norse_asgard_enabled_interaction.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = norse_asgard_enabled_interaction.tt.success + left_icon = scope:recipient + + add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + + } + + 45 = { + desc = norse_asgard_enabled_interaction.tt.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = norse_asgard_enabled_interaction.tt.failure + left_icon = scope:recipient + + scope:recipient = { + # Vengeful characters will not take it well. + if = { + limit = { + has_trait = vengeful + can_set_relation_rival_trigger = { CHARACTER = scope:actor } + } + set_relation_rival = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters aren't too bothered. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -5 + } + } + # Otherwise, folks are skeptical + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -15 + } + } + + } + + } + + } + } + } + } + + + + auto_accept = yes + + ai_will_do = { + base = 0 + } + + + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/prisoner_release_options_expanded.txt b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/prisoner_release_options_expanded.txt new file mode 100644 index 0000000..8197c7b --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/character_interactions/prisoner_release_options_expanded.txt @@ -0,0 +1,1523 @@ +prisoner_release_expanded_interaction = { + interface_priority = 30 + common_interaction = yes + category = interaction_category_prison + special_interaction = release_from_prison_interaction + icon = prison + + desc = release_from_prison_interaction_desc + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:take_vows = no + scope:recruit = no + } + desc = RELEASE_PRISONER_OFFER + } + desc = RELEASE_PRISONER_OFFER_CONDITIONAL + } + } + + is_shown = { + AND = { + scope:recipient = { + is_imprisoned_by = scope:actor + } + scope:actor = { + is_ai = no + is_imprisoned = no + exists = court_position:master_warden_court_position + } + + } + + } + + is_valid_showing_failures_only = { + scope:recipient = { is_busy_in_events_localised = yes } #Prisoner + scope:recipient = { + custom_description = { + text = "currently_being_tortured" + NOT = { has_character_flag = is_being_tortured } + } + } + cannot_release_former_regent_whilst_old_regent_holds_power_trigger = { + PRISONER = scope:recipient + REGENT = scope:recipient.var:imprisoned_by_diarch + } + } + + on_accept = { + if = { + limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } } + scope:recipient = { remove_character_modifier = allowed_to_go_outside } + } + if = { + limit = { scope:recipient = { has_character_modifier = moldy_gruel_diet } } + scope:recipient = { remove_character_modifier = moldy_gruel_diet } + } + if = { + limit = { scope:recipient = { is_imprisoned_by = scope:actor } } + + scope:recipient = { + # Demand Conversion + if = { + limit = { + scope:demand_conversion = yes + } + demand_conversion_interaction_effect = yes + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:actor + } + + # Struggle Catalyst + if = { + limit = { + scope:actor = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_demanding_important_conversion + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_demanding_important_conversion + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_demanding_important_conversion + character = scope:actor + } + } + } + } + } + + # Banish Landed Character + if = { + limit = { + scope:banish = yes + scope:recipient = { is_landed = yes } + } + banish = yes + if = { + limit = { + NOT = { + scope:actor = { + has_banish_reason = scope:recipient + } + } + } + scope:actor = { add_tyranny = banishment_tyranny_gain } + } + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + # Banish Unlanded Character + else_if = { + limit = { + AND = { + scope:banish = yes + scope:recipient = { + is_landed = no + is_pool_character = no # It is possible for them to end up in the pool between the interaction being sent, and it being accepted + } + } + } + if = { + limit = { + this.gold > 0 + } + pay_short_term_gold = { target = scope:actor gold = this.gold } + } + if = { + limit = { + has_any_artifact = yes + } + every_character_artifact = { + set_owner = { + target = scope:actor + history = { + location = scope:recipient.location + actor = scope:recipient + recipient = scope:actor + type = stolen + } + } + scope:actor = { + if = { + limit = { + NOT = { has_variable = stolen_artifact } + } + set_variable = { + name = stolen_artifact + value = 1 + } + } + else = { + change_variable = { + name = stolen_artifact + add = 1 + } + } + } + } + } + banish = yes + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + # 'Banish' Pool Character + else_if = { + limit = { + AND = { + scope:banish = yes + scope:recipient = { + is_landed = no + is_pool_character = yes # They'll just leave for the pool + } + } + } + if = { + limit = { + this.gold > 0 + } + pay_short_term_gold = { target = scope:actor gold = this.gold } + } + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + + # Recruit Character + if = { + limit = { + scope:recruit = yes + } + if = { + limit = { + scope:actor = { + culture = { + has_cultural_parameter = can_recruit_prisoners_easily + } + } + } + add_opinion = { + modifier = loyal_servant + target = scope:actor + } + scope:actor = { + if = { + limit = { + can_add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + add_hook = { + type = loyalty_hook + target = scope:recipient + } + } + } + } + else = { + add_opinion = { + modifier = demanded_recruitment + target = scope:actor + } + } + scope:actor = { + if = { + limit = { + AND = { + scope:actor.faith = { + has_doctrine = tenet_communal_possessions + } + scope:recipient = { + has_trait = peasant_leader + } + } + } + scope:actor = { + add_piety = medium_piety_gain + } + } + } + scope:actor = { + add_courtier = scope:recipient + } + } + + # Renounce Claims + if = { + limit = { + scope:renounce_claims = yes + } + add_opinion = { + modifier = demanded_claim_renouncement + target = scope:actor + } + scope:recipient = { + every_claim = { + explicit = yes + limit = { + save_temporary_scope_as = temp_claim + OR = { + holder = scope:actor + AND = { + exists = holder + NOT = { prev = { target_is_liege_or_above = scope:actor } } + holder = { target_is_liege_or_above = scope:actor } + } + scope:actor = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:temp_claim + } + } + } + } + scope:recipient = { remove_claim = prev } + } + } + } + + # Gain Hook + if = { + limit = { + scope:gain_hook = yes + } + add_opinion = { + modifier = demanded_hook + target = scope:actor + } + scope:actor = { + add_hook = { #Hook effect must match gain_hook option condition + target = scope:recipient + type = favor_hook + } + } + } + ############################################################### This is is execute if option + if = { + limit = { + scope:demand_strong_hook = yes + } + + add_opinion = { + modifier = demanded_hook + target = scope:actor + } + + scope:actor = { + duel = { + skill = intrigue + target = scope:recipient + 35 = { + desc = prisoner_release_expanded_strong_hook_option_success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + add_hook = { + target = scope:recipient + type = loyalty_hook + } + + } + + 65 = { + desc = prisoner_release_expanded_strong_hook_option_failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = prisoner_release_expanded_strong_hook_option_failure_toast_title + left_icon = scope:recipient + } + + } + } + } + } + + if = { + limit = { + scope:expanded_option_ransom = yes + } + scope:recipient = { + if = { + limit = { + scope:recipient.gold > 0 + } + pay_short_term_gold = { target = scope:actor gold = this.gold } + } + else = { + pay_short_term_gold = { target = scope:actor gold = 0 } + } + } + } + + # Take Vows + if = { + limit = { + scope:take_vows = yes + } + send_child_to_clergy_effect = yes + } + + # Take Vows + if = { + limit = { + scope:become_executioner = yes + } + release_as_executioner_effect = yes + } + + # No Demands Added + if = { + limit = { + scope:expanded_option_ransom = no + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:become_executioner = no + scope:recruit = no + } + # Notification to the imprisoner + scope:actor = { + send_interface_toast = { + title = recipient_released_from_prison + left_icon = scope:recipient + scope:recipient = { + add_opinion = { + modifier = released_from_prison + target = scope:actor + } + } + } + scope:actor = { + add_dread = minor_dread_loss + stress_impact = { + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + } + } + # Struggle impact + if = { + limit = { + any_character_struggle = { + involvement = involved + OR = { + has_struggle_phase_parameter = release_prisoner_diff_culture_gives_prestige + has_struggle_phase_parameter = release_prisoner_diff_faith_gives_prestige + } + } + is_diff_faith_or_culture_trigger = { + CHAR = scope:recipient + STATUS = involved + } + } + add_prestige = medium_prestige_gain + } + + # Struggle Catalyst + if = { + limit = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_important + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_important + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_release_important + character = scope:actor + } + } + } + if = { + limit = { + fp3_struggle_involves_one_supporter_and_one_detractor = { + FIRST = scope:actor + SECOND = scope:recipient + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_supporter_detractor + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_supporter_detractor + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_release_supporter_detractor + character = scope:actor + } + log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_release_supporter_detractor } + } + } + } + + # If we're a clan (and not making any demands) this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_released_from_own_prison.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + else = { + scope:actor = { + trigger_event = char_interaction.0160 + } + } + + # If a child was imprisoned due to yearly_4021 they'll come back to say hi + if = { + limit = { + exists = var:marked_for_revenge_in_event_yearly_4021 + } + add_opinion = { + modifier = abandoned_me_opinion + target = var:marked_for_revenge_in_event_yearly_4021 + } + if = { + limit = { + var:marked_for_revenge_in_event_yearly_4021 = { + is_alive = yes + is_ai = no + } + } + save_scope_as = child + if = { + limit = { #Make sure they're sadistic! + NOT = { has_trait = sadistic } + number_of_personality_traits < personality_trait_limit + } + add_trait = sadistic + } + var:marked_for_revenge_in_event_yearly_4021 = { + add_character_flag = { #TO make sure that they don't get spammed about the release + flag = block_for_prison_release_notification + days = 10 + } + trigger_event = yearly.4022 + } + remove_variable = marked_for_revenge_in_event_yearly_4021 + } + } + + if = { + limit = { is_imprisoned = yes } + release_from_prison = yes + } + } + + # FP3 - If prisoner is important for war + scope:actor = { # FP3 + if = { + limit = { + exists = scope:recipient.house + any_character_war = { + using_cb = fp3_free_house_member_cb + is_defender = scope:actor + primary_attacker.house = scope:recipient.house + } + } + random_character_war = { + limit = { + using_cb = fp3_free_house_member_cb + is_defender = scope:actor + primary_attacker.house = scope:recipient.house + } + primary_attacker = { + hidden_effect = { + send_interface_message = { + type = event_war_good + title = lesson_war_final_notes_victory_step_1 + left_icon = scope:recipient + right_icon = scope:actor + + show_as_tooltip = { + release_from_prison = scope:recipient + add_prestige = major_prestige_gain + prev.primary_defender = { add_prestige = major_prestige_loss } + } + } + } + add_prestige = major_prestige_gain + prev.primary_defender = { add_prestige = major_prestige_loss } + } + } + } + } + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0161 + } + } + ############################################################ this is send option + send_option = { + flag = expanded_option_ransom + localization = "Seize Gold" + + is_shown = { + exists = scope:actor + } + + is_valid = { + always = yes + } + + + } + + send_option = { + flag = demand_strong_hook + localization = "Demand Strong Hook" + + is_shown = { + exists = scope:actor + } + + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_vassal_of = scope:actor + AND = { + exists = liege + liege = scope:actor + } + } + } + } + scope:actor = { + can_add_hook = { + type = loyalty_hook #Matches the hook added in the on_accept + target = scope:recipient + } + } + } + + + + } + + send_option = { + flag = demand_conversion + localization = "RELEASE_DEMAND_CONVERSION" + is_shown = { + NOT = { scope:recipient.faith = scope:actor.faith } + } + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_vassal_of = scope:actor + } + } + } + + # Cannot ask Landed Rulers to convert if they're not your vassal + custom_description = { + text = cannot_demand_unsubordinate_landed_ruler_conversion + scope:recipient = { + trigger_if = { + limit = { + is_landed = yes + } + is_vassal_or_below_of = scope:actor + } + } + } + + # Cannot ask Religious Heads to convert + custom_description = { + text = cannot_demand_religious_head_conversion + NOT = { + AND = { + exists = scope:recipient.faith.religious_head + scope:recipient.faith.religious_head = scope:recipient + } + } + } + # Cannot ask Holy Order Master to convert + custom_description = { + text = cannot_demand_holy_order_master_conversion + NAND = { + exists = scope:recipient.faith + scope:recipient.faith = { + any_faith_holy_order = { leader = scope:recipient } + } + } + } + } + } + + send_option = { + flag = renounce_claims + localization = RELEASE_RENOUNCE_CLAIMS + is_shown = { + custom_description = { + text = "release_renounce_claims" + subject = scope:recipient + scope:recipient = { + any_claim = { + explicit = yes + save_temporary_scope_as = temp_claim + OR = { + holder = scope:actor + AND = { + NOT = { prev = { target_is_liege_or_above = scope:actor } } + trigger_if = { + limit = { + exists = holder + } + holder = { target_is_liege_or_above = scope:actor } + } + } + scope:actor = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:temp_claim + } + } + } + } + } + } + } + current_description = { + desc = RELEASE_RENOUNCE_CLAIMS_DESC + } + } + + send_option = { + flag = banish + localization = "RELEASE_BANISH" + is_shown = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + AND = { + is_landed = no + is_ruler = no + gold > scope:actor.gold + gold > scope:actor.medium_gold_value + scope:actor.ai_greed > low_negative_ai_value + } + AND = { + is_landed = no + is_ruler = no + gold > 0 + scope:actor = { + has_banish_reason = scope:recipient + } + } + AND = { + is_landed = no + is_ruler = no + gold > 100 + scope:actor.ai_greed >= high_positive_ai_value + } + AND = { + scope:actor = { + has_banish_reason = scope:recipient + } + scope:actor = { + opinion = { + target = scope:recipient + value <= medium_negative_opinion + } + } + } + } + } + } + trigger_if = { + limit = { + scope:recipient = { + is_landed = yes + } + } + scope:recipient = { + is_vassal_of = scope:actor + } + } + trigger_else = { + scope:recipient = { + is_courtier_of = scope:actor + } + } + custom_description = { + text = "release_banish_invalid_take_vows" + object = scope:recipient + scope:take_vows = no + } + scope:recruit = no #Should be impossible to have both but just in case + NOT = { + scope:recipient = { + is_spouse_of = scope:actor + } + } + #scope:recipient = { + # trigger_if = { + # limit = { exists = liege } + # liege = scope:actor + # } + # is_pool_character = no + #} + } + } + + send_option = { + flag = gain_hook + localization = "RELEASE_GAIN_HOOK" + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_vassal_of = scope:actor + AND = { + exists = liege + liege = scope:actor + } + } + } + } + scope:actor = { + can_add_hook = { + type = favor_hook #Matches the hook added in the on_accept + target = scope:recipient + } + } + } + } + + + send_option = { + flag = take_vows + localization = "RELEASE_TAKE_VOWS" + is_shown = { + scope:actor.faith = { + has_doctrine_parameter = take_vows_active + } + } + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + is_close_or_extended_family_of = scope:actor + NOT = { + is_heir_of = scope:actor + } + } + scope:actor = { + opinion = { + target = scope:recipient + value <= medium_negative_opinion + } + } + } + scope:recipient = { + custom_description = { + text = "release_take_vows_invalid_recruit" + object = scope:recipient + OR = { + is_courtier_of = scope:actor + scope:recruit = yes + } + } + + } + custom_description = { + text = "release_vows_invalid_not_your_faith" + object = scope:recipient + subject = scope:actor + trigger_if = { + limit = { + NOT = { scope:recipient.faith = scope:actor.faith } + } + scope:demand_conversion = yes + } + } + custom_description = { + text = "release_executioner_invalid_take_vows_condition" + object = scope:recipient + scope:become_executioner = no + } + custom_description = { + text = "release_banish_invalid_take_vows" + object = scope:recipient + scope:banish = no + } + scope:recipient = { + age >= 10 + NOR = { + has_trait = excommunicated + has_trait = devoted + has_trait = incapable + } + #Do they have the "wrong" marriage type? + NOR = { + custom_description = { + text = is_married_matrilineally + subject = scope:recipient + any_spouse = { + is_female = yes + matrilinear_marriage = yes + } + } + custom_description = { + text = is_married_patrilineally + subject = scope:recipient + any_spouse = { + is_male = yes + patrilinear_marriage = yes + } + } + custom_description = { + text = matrilinear_betrothal + subject = scope:recipient + exists = betrothed + betrothed = { + is_female = yes + matrilinear_betrothal = yes + } + } + custom_description = { + text = patrilinear_betrothal + subject = scope:recipient + exists = betrothed + betrothed = { + is_male = yes + patrilinear_betrothal = yes + } + } + } + } + } + } + + + send_option = { + flag = become_executioner + localization = "RELEASE_AS_EXECUTIONER" + is_shown = { + has_ep1_court_positions_dlc_trigger = yes + scope:actor = { + has_royal_court = yes + } + scope:recipient = { + is_adult = yes + } + } + is_valid = { + scope:actor = { + NOT = { employs_court_position = executioner_court_position } + } + scope:recipient = { + trigger_if = { + limit = { scope:recruit = yes } + custom_description = { + text = "release_executioner_invalid_recruit" + object = scope:recipient + scope:recruit = yes + } + } + trigger_else = { + is_courtier_of = scope:actor + } + + custom_description = { + text = "release_executioner_invalid_take_vows_condition" + object = scope:recipient + scope:take_vows = no + } + NOT = { is_spouse_of = scope:actor } + } + } + } + + send_option = { + flag = recruit + localization = "RELEASE_RECRUIT" + is_shown = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + has_relation_best_friend = scope:actor + has_relation_friend = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_secret_relation_lover = scope:actor + is_heir_of = scope:actor + } + } + } + scope:recipient = { + is_ruler = no + NOT = { is_courtier_of = scope:actor } + } + } + } + + send_options_exclusive = no + + auto_accept = { + scope:expanded_option_ransom = no + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + + ai_accept = { + base = 1 + modifier = { + add = 100 + desc = "WANTS_FREEDOM_REASON" + } + modifier = { + trigger = { + scope:expanded_option_ransom = yes + } + add = { + value = -20 + if = { + limit = { + gold > 200 + } + multiply = 2.5 + } + else_if = { + limit = { + AND = { + gold <= 200 + gold > 100 + } + } + multiply = 1.5 + } + + if = { + limit = { + has_trait = greedy + } + multiply = 3 + } + + } + desc = "GOLD_NEGATIVE_REASON" + } + modifier = { + trigger = { + scope:demand_strong_hook = yes + } + add = { + value = -65 + if = { + limit = { + scope:recipient = { + ai_vengefulness > 0 + } + } + subtract = 10 + } + } + desc = "GAIN_HOOK_NEGATIVE_REASON" + + } + modifier = { + trigger = { + scope:recipient = { ai_zeal <= 20 } + scope:demand_conversion = yes + } + add = -20 + desc = "CONVERSION_NEGATIVE_REASON" + } + modifier = { + trigger = { + scope:recipient = { ai_zeal > 20 } + scope:demand_conversion = yes + } + add = { + value = ai_zeal + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value = faith_astray_level + } + } + } + multiply = -1 + } + else = { + multiply = -2 + } + } + desc = "CONVERSION_NEGATIVE_REASON" + } + modifier = { + add = -25 + trigger = { + scope:renounce_claims = yes + ai_greed < 0 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:renounce_claims = yes + ai_greed >= 0 + ai_greed < 26 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:become_executioner = yes + # Sadists don't care about becoming an executioner + NOR = { + has_trait = sadistic + has_trait = callous + } + } + desc = "BECOME_EXECUTIONER_REASON" + } + modifier = { + add = -75 + trigger = { + scope:renounce_claims = yes + ai_greed >= 26 + ai_greed < 51 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -95 + trigger = { + scope:renounce_claims = yes + ai_greed >= 51 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:banish = yes + } + NOT = { + scope:actor = { + has_imprisonment_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + } + desc = "BANISH_NEGATIVE_REASON" + } + modifier = { # Legalistic tradition + add = legalistic_vassal_punishment_acceptance + trigger = { + scope:banish = yes + } + scope:actor = { + has_imprisonment_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + desc = tradition_legalistic_name + } + modifier = { + add = { + value = -50 + if = { + limit = { + scope:recipient = { + ai_vengefulness > 0 + } + } + subtract = ai_vengefulness + } + } + trigger = { + scope:gain_hook = yes + } + desc = "GAIN_HOOK_NEGATIVE_REASON" + } + modifier = { + add = -30 + trigger = { + scope:take_vows = yes + } + desc = "TAKE_VOWS_NEGATIVE_REASON" + } + modifier = { + add = -10 + trigger = { + scope:recruit = yes + NOT = { + scope:actor = { + culture = { + has_cultural_parameter = can_recruit_prisoners_easily + } + } + } + } + desc = "RECRUITMET_NEGATIVE_REASON" + } + # Struggle + modifier = { + trigger = { + scope:expanded_option_ransom = yes + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + has_character_flag = agenda_towards_escalation + } + } + add = -100 + } + else_if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + } + } + add = 200 + } + } + } + } + + # AI + ai_targets = { + ai_recipients = prisoners + } + ai_frequency = 1 + + ai_potential = { + has_prisoners = yes + } + + ai_will_do = { + base = 0 + + modifier = { + add = 20 + scope:demand_conversion = yes + } + modifier = { + add = 100 + scope:demand_conversion = yes + scope:recipient = { + is_vassal_of = scope:actor + } + } + modifier = { + add = 30 + scope:renounce_claims = yes + } + modifier = { + add = 50 + scope:banish = yes + } + modifier = { + add = 30 + scope:take_vows = yes + } + modifier = { + add = 10 + scope:recruit = yes + } + modifier = { # Rivals can rot + add = -40 + scope:actor = { + NOT = { + has_trait = forgiving + } + } + scope:recipient = { + OR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + scope:recipient = { + is_spouse_of = scope:actor + exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor } + } + } + } + } + modifier = { # Rivals can rot FOREVER if vengeful + add = -100 + scope:actor = { + NOT = { + has_trait = forgiving + } + } + scope:actor.ai_vengefulness >= very_high_positive_ai_value + scope:recipient = { + OR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + scope:recipient = { + is_spouse_of = scope:actor + exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor } + } + } + } + } + modifier = { # Compassionate characters don't want to keep children in their dungeon for too long + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= low_positive_ai_value + } + scope:recipient = { + is_adult = no + time_in_prison = { years > 1 } + } + } + modifier = { # Very compassionate characters tend to release prisoners + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= very_high_positive_ai_value + } + scope:recipient = { + time_in_prison = { years > 1 } + } + } + modifier = { # Somewhat compassionate characters tend to keep people in their dungeon for a while + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= medium_positive_ai_value + } + scope:recipient = { + is_landed = no + time_in_prison = { years > 3 } + } + } + modifier = { # Only truly discompassionate characters will have their dungeon full of hapless victims after 5 years + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= low_negative_ai_value + } + scope:recipient = { + is_landed = no + time_in_prison = { years > 5 } + } + } + modifier = { # Most AI characters will let family out... + add = 10 + scope:actor = { + is_at_war = no + OR = { + ai_compassion >= very_high_positive_ai_value + AND = { + ai_compassion >= high_negative_ai_value + opinion = { + target = scope:recipient + value >= low_negative_opinion + } + } + } + } + scope:recipient = { + time_in_prison = { years > 1 } + is_landed = no + is_close_family_of = scope:actor + } + } + modifier = { # Almost all will let their own children out + add = 40 + scope:actor = { + is_at_war = no + ai_compassion >= very_high_negative_ai_value + } + scope:recipient = { + is_landed = no + is_child_of = scope:actor + } + } + # Struggle + modifier = { + trigger = { + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + 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_release_important + } + has_character_flag = agenda_towards_escalation + } + } + add = -100 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + NOT = { + ai_greed >= 25 + } + OR = { + ai_compassion > 50 + AND = { + ai_compassion > 0 + scope:recipient = { + time_in_prison = { years > 1 } + } + } + } + } + } + add = 200 + } + } + } + modifier = { # Family Feud + add = -50 + exists = scope:actor.house + exists = scope:recipient.house + scope:actor = { + house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + has_variable = house_feud_house + var:house_feud_house = scope:recipient.house + } + } + has_opinion_modifier = { + modifier = house_feud_opinion + target = scope:recipient.house.house_head + } + } + } + + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + } +} diff --git a/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/ambassador_of_culture_court_position.txt b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/ambassador_of_culture_court_position.txt new file mode 100644 index 0000000..a64845d --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/ambassador_of_culture_court_position.txt @@ -0,0 +1,157 @@ +ambassador_culture_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + } + + scaling_employer_modifiers = { + terrible = { + cultural_head_acceptance_gain_mult = 0.05 + } + poor = { + + cultural_head_acceptance_gain_mult = 0.10 + } + average = { + cultural_head_acceptance_gain_mult = 0.15 + } + good = { + cultural_head_acceptance_gain_mult = 0.20 + } + excellent = { + cultural_head_acceptance_gain_mult = 0.25 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + add = { + value = learning + multiply = 1.75 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 5 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = gregarious + } + add = { + value = 20 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = diplomat + } + add = { + value = 15 + desc = court_position_diplomat_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -30 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = -25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + add = { + value = -35 + desc = court_position_schemer_trait + } + + } + if = { + limit = { has_trait = murderer } + add = { + value = -50 + desc = court_position_murderer_trait + } + + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + always = yes + } + + +} diff --git a/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/court_liaison_court_position.txt b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/court_liaison_court_position.txt new file mode 100644 index 0000000..f23761f --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/court_liaison_court_position.txt @@ -0,0 +1,159 @@ +court_liaison_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = minor_court_position_salary + } + + scaling_employer_modifiers = { + terrible = { + monthly_court_grandeur_change_mult = 0.1 + } + poor = { + monthly_court_grandeur_change_mult = 0.15 + } + average = { + monthly_court_grandeur_change_mult = 0.25 + court_grandeur_baseline_add = 1 + } + good = { + monthly_court_grandeur_change_mult = 0.35 + court_grandeur_baseline_add = 2 + } + excellent = { + monthly_court_grandeur_change_mult = 0.5 + court_grandeur_baseline_add = 3 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + if = { + limit = { + has_trait = generous + } + add = { + value = 25 + desc = court_position_generous_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -20 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 10 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = arrogant + } + add = { + value = 5 + desc = court_position_arrogant_trait + } + } + + if = { + limit = { + has_trait = diplomat + } + value = 50 + desc = court_position_diplomat_trait + } + + if = { + limit = { has_trait = education_diplomacy } + add = { + value = 4 + if = { + limit = { has_trait = education_diplomacy_2 } + add = 4 + } + else_if = { + limit = { has_trait = education_diplomacy_3 } + add = 8 + } + else_if = { + limit = { has_trait = education_diplomacy_4 } + add = 12 + } + else_if = { + limit = { has_trait = education_diplomacy_5 } + add = 22 + } + desc = education_diplomacy + } + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + valid_character = { + scope:employee = { + OR = { + is_vassal_of = scope:liege + is_courtier_of = scope:liege + } + } + } + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/diplomatic_liaison_court_position.txt b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/diplomatic_liaison_court_position.txt new file mode 100644 index 0000000..1c00171 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/diplomatic_liaison_court_position.txt @@ -0,0 +1,185 @@ +diplomatic_liaison_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + max_personal_schemes_add = 1 + } + + scaling_employer_modifiers = { + terrible = { + personal_scheme_power_mult = -0.1 + } + poor = { + + personal_scheme_power_mult = -0.05 + } + average = { + personal_scheme_power_mult = 0 + } + good = { + personal_scheme_power_mult = 0.05 + } + excellent = { + personal_scheme_power_mult = 0.1 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + add = { + value = learning + multiply = 1.25 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 5 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = gregarious + } + add = { + value = 20 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = diplomat + } + add = { + value = 15 + desc = court_position_diplomat_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -30 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = -25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + add = { + value = -35 + desc = court_position_schemer_trait + } + + } + if = { + limit = { has_trait = murderer } + add = { + value = -50 + desc = court_position_murderer_trait + } + + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + OR = { + AND = { + diplomacy > 16 + NOT = { + OR = { + has_trait = callous + has_trait = deceitful + has_trait = schemer + has_trait = sadistic + has_trait = murderer + } + + } + } + AND = { + OR = { + has_trait = gregarious + has_trait = diplomat + has_trait = family_first + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + diplomacy > 9 + } + + } + + } + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_of_intrigue_court_position.txt b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_of_intrigue_court_position.txt new file mode 100644 index 0000000..43c370f --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_of_intrigue_court_position.txt @@ -0,0 +1,155 @@ +master_of_intrigue_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + max_hostile_schemes_add = 1 + } + + scaling_employer_modifiers = { + terrible = { + hostile_scheme_power_mult = -0.1 + } + poor = { + + hostile_scheme_power_mult = -0.05 + } + average = { + hostile_scheme_power_mult = 0 + } + good = { + hostile_scheme_power_mult = 0.05 + } + excellent = { + hostile_scheme_power_mult = 0.1 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = intrigue + multiply = 2 + max = 40 + desc = court_position_skill_intrigue + } + + add = { + value = learning + multiply = 1.75 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = -25 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = brave + } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { + has_trait = just + } + add = { + value = -20 + desc = court_position_just_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = 10 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = 25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + value = 50 + desc = court_position_schemer_trait + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + AND = { + OR = { + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + intrigue > 11 + } + + } + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_warden_court_position.txt b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_warden_court_position.txt new file mode 100644 index 0000000..7f3072e --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/court_positions/types/master_warden_court_position.txt @@ -0,0 +1,157 @@ +master_warden_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = minor_court_position_salary + } + + scaling_employer_modifiers = { + terrible = { + monthly_county_control_change_add = 0.0 + } + poor = { + monthly_county_control_change_add = 0.0 + } + average = { + monthly_county_control_change_add = 0.05 + } + good = { + monthly_county_control_change_add = 0.1 + } + excellent = { + monthly_county_control_change_add = 0.15 + } + } + + custom_employer_modifier_description = master_warden_employer_custom_effect_description + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + add = { + value = intrigue + multiply = 1.75 + max = 40 + desc = court_position_skill_intrigue + } + add = { + value = martial + multiply = 1.75 + max = 40 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 20 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = -25 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = brave + } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { + has_trait = just + } + add = { + value = 15 + desc = court_position_just_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = 10 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = torturer + } + add = { + value = 25 + desc = court_position_torturer_trait + } + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + OR = { + AND = { + OR = { + prowess > 15 + martial > 11 + intrigue > 15 + dread > 35 + } + 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 + dread > 35 + prowess > 15 + } + } + } + } + + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/culture/cultures/m_neo_mongolic.txt b/Mongol_Playthrough_Culture_&_Religion/common/culture/cultures/m_neo_mongolic.txt new file mode 100644 index 0000000..1411a4c --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/culture/cultures/m_neo_mongolic.txt @@ -0,0 +1,26 @@ +neo_mongol = { + color = mongol + + ethos = ethos_bureaucratic + heritage = heritage_mongolic + language = language_mongolic + martial_custom = martial_custom_male_only + traditions = { + tradition_horse_lords + tradition_hard_rule + tradition_dwellers_of_the_steppe + tradition_steppe_tolerance + } + + + name_list = name_list_mongol + + coa_gfx = { mongol_coa_gfx steppe_coa_gfx } + building_gfx = { steppe_building_gfx } + clothing_gfx = { mongol_clothing_gfx } + unit_gfx = { mongol_unit_gfx } + + ethnicities = { + 10 = asian + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/culture/traditions/m_mcul_traditions.txt b/Mongol_Playthrough_Culture_&_Religion/common/culture/traditions/m_mcul_traditions.txt new file mode 100644 index 0000000..bc9450d --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/culture/traditions/m_mcul_traditions.txt @@ -0,0 +1,622 @@ +# steppe tradition +tradition_dwellers_of_the_steppe = { + category = realm + + layers = { + 0 = steward + 1 = indian/indian2.dds + 4 = steppe.dds + } + + can_pick = { + custom_tooltip = { + text = culture_in_steppe_terrain_desc + any_culture_county = { + any_county_province = { + terrain = steppe + } + } + } + } + + parameters = { + hunting_traits_more_valued = yes + pastures_building_bonuses = yes + } + + character_modifier = { + men_at_arms_recruitment_cost = 0.15 + men_at_arms_maintenance = 0.05 + knight_limit = 2 + steppe_travel_danger = steppe_medium_danger_reduction + } + + county_modifier = { + steppe_development_growth_factor = 0.2 + steppe_construction_gold_cost = -0.15 + steppe_levy_size = 0.15 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + culture_pillar:ethos_egalitarian = { is_in_list = traits } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = culture_not_egalitarian + } + } + if = { + limit = { + NOT = { + any_culture_county = { + count >= 5 + any_county_province = { + terrain = steppe + } + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = culture_in_steppe_terrain_count_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + if = { + limit = { + NOT = { + scope:character = { + any_sub_realm_county = { + count >= 2 + culture = scope:character.culture + any_county_province = { + terrain = steppe + } + } + } + } + } + multiply = 0 + } + if = { + limit = { + scope:character = { + government_has_flag = government_is_tribal + } + } + multiply = 0 + } + if = { + limit = { + scope:character = { + any_sub_realm_county = { + count >= 5 + culture = scope:character.culture + any_county_province = { + terrain = steppe + } + } + } + } + add = 100 + } + + } +} +# raid tradition +tradition_ritualistic_reaving = { + category = ritual + + layers = { + 0 = intrigue + 1 = mediterranean + 4 = battle.dds + } + + can_pick = { + scope:character.culture = { + custom_tooltip = { + text = m_already_has_raid_tradition_desc + NOT = { has_cultural_tradition = tradition_practiced_pirates } + } + custom_tooltip = { + text = m_has_pacifist_tradition_desc + NOT = { has_cultural_tradition = tradition_pacifism } + } + } + scope:character.faith = { + custom_tooltip = { + text = m_has_pacifist_tenet_desc + NOR = { + has_doctrine = tenet_dharmic_pacifism + has_doctrine = tenet_pacifism + } + } + } + + } + + parameters = { + culture_can_raid_over_land_even_if_feudal_no_restrictions = yes + culture_can_raid_at_sea_even_if_feudal_no_restrictions = yes + } + + character_modifier = { + siege_phase_time = -0.10 + movement_speed_land_raiding = 0.20 + max_loot_mult = 0.25 + development_growth_factor = -0.10 + feudal_government_tax_contribution_mult = -0.25 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + multiply = 1.5 + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # Ethos requirement. + if = { + limit = { + NOT = { + culture_pillar:ethos_bellicose = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_bellicose_desc + } + } + # Government is Feudal or Clan Extra Cost + if = { + limit = { + scope:character = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = m_govenment_incompatible_penalty_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + if = { + limit = { # Should be rare for most cultures + has_cultural_pillar = heritage_berber + } + add = 5 + } + } +} +# learning tradition +tradition_aptitudinal_teachings = { + category = societal + + layers = { + 0 = intrigue + 1 = mediterranean + 4 = aptitudinal_teachings.dds + } + + can_pick = { + custom_description = { + text = m_has_incompatible_alexandrian_catechism_tenet + scope:character.faith = { + NOT = { doctrine:tenet_alexandrian_catechism = { is_in_list = selected_doctrines } } + } + + } + } + + character_modifier = { + learning = 4 + monthly_learning_lifestyle_xp_gain_mult = 0.2 + faith_creation_piety_cost_mult = 0.20 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + multiply = 2 + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # Ethos requirement. + if = { + limit = { + NOR = { + culture_pillar:ethos_bureaucratic = { is_in_list = traits } + culture_pillar:ethos_spiritual = { is_in_list = traits } + culture_pillar:ethos_egalitarian = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = not_bureaucratic_spiritual_or_egalitarian_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } +} +# dread ruling tradition +tradition_hard_rule = { + category = realm + + layers = { + 0 = martial + 1 = mena + 2 = hard_rule_layer2.dds + 3 = 3.dds + 4 = hard_rule.dds + } + + can_pick = { + + custom_tooltip = { + text = m_surpasses_dread_threshold + scope:character.dread > 35 + } + custom_tooltip = { + text = cannot_have_tradition_court_eunuchs + NOT = { culture_tradition:tradition_court_eunuchs = { is_in_list = traits } } + } + custom_tooltip = { + text = cannot_have_tradition_merciful_blindings + NOT = { culture_tradition:tradition_merciful_blindings = { is_in_list = traits } } + } + } + + parameters = { + can_demand_higher_ransoms_from_lower_tiers = yes + can_recruit_prisoners_easily = yes + pardoning_gives_loyalty = yes + can_blind_prisoners = yes + can_castrate_prisoners = yes + } + character_modifier = { + vassal_levy_contribution_mult = -0.10 + vassal_opinion = -5 + short_reign_duration_mult = 0.3 + hostile_scheme_power_mult = 0.2 + dread_gain_mult = 0.1 + dread_baseline_add = 20 + + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_courtly = { is_in_list = traits } + culture_pillar:ethos_stoic = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_stoic_or_courtly_desc + } + } + if = { + limit = { scope:character.dread < 75 } + add = { + value = tradition_incompatible_ethos_penalty + desc = m_less_than_high_dread_desc + } + } + if = { + limit = { scope:character.dread >= 75 } + add = { + value = tradition_incompatible_ethos_penalty + multiply = -1 + divide = 2 + desc = m_high_dread_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { value = 0 } +} +# viking development +tradition_scandinavian_development = { # Need to update values + category = regional + + layers = { + 0 = intrigue + 1 = mena/mena3.dds + 4 = scand_dev.dds + } + + is_shown = { + has_cultural_pillar = heritage_north_germanic + } + + can_pick = { + custom_tooltip = { + text = m_scandinavian_innovation_requirement + has_innovation = innovation_development_01 + } + } + + parameters = { + can_appoint_court_gardener = yes + can_recruit_gardeners = yes + can_enact_high_partition_succession_law = yes + coastal_agriculture_building_bonuses = yes + development_gain_on_building_complete = yes + } + + character_modifier = { + development_growth_factor = 0.25 + construction_time = 0.05 + holding_build_gold_cost = 0.15 + character_capital_county_monthly_development_growth_add = 0.25 + } + + county_modifier = { + taiga_development_growth_factor = 0.05 + plains_development_growth_factor = 0.05 + taiga_construction_gold_cost = 0.05 + taiga_levy_size = 0.15 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_communal = { is_in_list = traits } + culture_pillar:ethos_bureaucratic = { is_in_list = traits } + culture_pillar:ethos_stoic = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = not_communal_bureaucratic_or_stoic_desc + } + } + if = { + limit = { + NOT = { + any_culture_county = { + any_county_province = { + has_building_or_higher = royal_forest_01 + } + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = m_no_reserve_penalty + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } +} +# religious tradition +tradition_synergenistic_faith = { + category = ritual + + layers = { + 0 = learning + 1 = mena/mena1.dds + 4 = temple.dds + } + + can_pick = { + custom_tooltip = { + any_culture_county = { + percent >= 0.2 + any_county_province = { + has_holding_type = church_holding + } + } + text = 20_percent_churches + } + } + + parameters = { + extra_piety_from_temple_construction = yes + renown_from_temple_construction = yes + more_fervor_on_church_construction = yes + + } + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + monthly_piety_from_buildings_mult = 0.10 + faith_conversion_piety_cost_mult = 0.50 + church_holding_build_gold_cost = 0.15 + monthly_piety = 1 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_courtly = { is_in_list = traits } + culture_pillar:ethos_communal = { is_in_list = traits } + culture_pillar:ethos_spiritual = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_courtly_communal_or_spiritual_desc + } + } + if = { + limit = { + trigger_if = { + limit = { + scope:character = { + is_ai = no + } + } + NOT = { + any_ruler = { + count >= 5 + culture = prev + primary_title.tier >= tier_county + faith = scope:character.faith + has_trait = zealous + } + } + } + trigger_else = { + always = no + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = rulers_with_same_faith_zealous_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + ai_will_do = { + value = 0 + } + +} +# Familial tradition +tradition_familial_bonds = { + category = societal + + layers = { + 0 = intrigue + 1 = western/western2.dds + 4 = ritualised_friendship.dds + } + + can_pick = { + # Must have at least one friend. No friendless losers. Especially you, Nick. + custom_tooltip = { + text = need_at_least_one_friend + + culture_head ?= { + any_relation = { + type = friend + count >= 1 + } + } + } + } + + parameters = { + automatic_befriend_access = yes + may_propose_best_friendship = yes + strong_hooks_and_stress_effects_best_friends = yes + may_select_friendship_synergy_bonus = yes + close_family_better_councillors = yes + close_family_better_court_positions = yes + landing_house_members_gives_renown = yes + renown_from_feasts = yes + penalty_for_revoking_titles_from_close_family = yes + } + + character_modifier = { + intrigue = -1 + hostile_scheme_power_mult = -0.20 + monthly_dynasty_prestige_mult = 0.05 + dynasty_opinion = 10 + } + + cost = { + prestige = { + # Base cost. + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # No ethos requirement: everyone likes friends. + # Need at least ten friends. + if = { + limit = { exists = culture_head } + if = { + limit = { + culture_head = { + any_relation = { + type = friend + count < 5 + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + multiply = 2.5 + desc = m_guess_you_need_more_friends_desc + } + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_asgard_decision.txt b/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_asgard_decision.txt new file mode 100644 index 0000000..044a4a3 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_asgard_decision.txt @@ -0,0 +1,50 @@ +m_asgard_decision = { + major = yes + + sort_order = 0 + + is_shown = { + + AND = { + has_title = title:b_oslosyslar + title:b_oslosyslar.title_province = root.capital_province + } + + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_discovered_great_hall_of_asgard + } + } + + } + + picture = "gfx/interface/illustrations/decisions/asgard_decision_image.dds" + + cost = { + prestige = 1000 + piety = 1000 + } + + effect = { + + save_scope_as = asgard_founder + + trigger_event = { + id = norse_asgard_event.0001 + } + + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_discovered_great_hall_of_asgard + } + show_as_tooltip = { + custom_tooltip = "You may find something special within the province." + } + hidden_effect = { + m_hall_of_asgard_effect = yes + } + + } + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_mongol_grand_yurt_decision.txt b/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_mongol_grand_yurt_decision.txt new file mode 100644 index 0000000..468d5e0 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/decisions/m_mongol_grand_yurt_decision.txt @@ -0,0 +1,34 @@ +m_mongol_grand_yurt_decision = { + major = yes + sort_order = 94 + picture = "gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds" + + is_shown = { + has_title = title:b_karabalgasun + + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_built_great_yurt + } + } + + } + + is_valid = { + has_trait = greatest_of_khans + } + + cost = { + prestige = 2500 + } + + effect = { + m_grand_yurt_mongol_effect = yes + + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_built_great_yurt + } + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/dynasty_legacies/m_legacies.txt b/Mongol_Playthrough_Culture_&_Religion/common/dynasty_legacies/m_legacies.txt new file mode 100644 index 0000000..8f37819 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/dynasty_legacies/m_legacies.txt @@ -0,0 +1,83 @@ +########################################################### +# Legacy Perks Expanded +# by dev.main +########################################################### + +# Expand fp2 legacy tracks to all dynasties +fp2_urbanism_legacy_track = { + is_shown = { + has_dlc_feature = the_fate_of_iberia + dynasty = { + OR = { + dynast = { + NOT = { + culture = { + has_cultural_pillar = heritage_iberian + } + } + } + has_dynasty_perk = fp2_coterie_legacy_1 + } + } + + } +} + +fp2_coterie_legacy_track = { + is_shown = { + has_dlc_feature = the_fate_of_iberia + dynasty = { + OR = { + dynast = { + NOT = { + culture = { + has_cultural_pillar = heritage_iberian + } + } + } + has_dynasty_perk = fp2_coterie_legacy_1 + } + } + } +} + +# New dynasty tracks +m_vikingr_legacy_track = { + is_shown = { + dynasty = { + OR = { + dynast = { + culture = { + OR = { + this = culture:norse + any_parent_culture_or_above = { + this = culture:norse + } + } + } + } + has_dynasty_perk = m_vikingr_legacy_1 + } + } + } +} + +m_genghis_of_the_steppe_legacy_track = { + is_shown = { + dynasty = { + OR = { + dynast = { + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_tibetan + has_cultural_tradition = tradition_dwellers_of_the_steppe + } + } + } + has_dynasty_perk = m_ghengis_of_the_steppe_legacy_1 + } + } + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/dynasty_perks/m_dynasty_perks.txt b/Mongol_Playthrough_Culture_&_Religion/common/dynasty_perks/m_dynasty_perks.txt new file mode 100644 index 0000000..0c7cbe8 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/dynasty_perks/m_dynasty_perks.txt @@ -0,0 +1,323 @@ +########################################################### +# Legacy Perks Expanded +# by devzero +########################################################### +# Expand fp2 legacies to all dynasties + +# URBANISM LEGACIES +fp2_urbanism_legacy_1 = { # Flourishing Cities + legacy = fp2_urbanism_legacy_track + + effect = { + # Each city increases development rate of their county + custom_description_no_bullet = { text = fp2_urbanism_legacy_1_effect } + } + + + ai_chance = { + value = 0 + if = { + limit = { + culture = { + OR = { + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_arabic + } + } + } + add = 10 + } + if = { + limit = { + can_start_new_legacy_track_trigger = no + } + multiply = 0 + } + } +} + +fp2_urbanism_legacy_2 = { # Republican Teaching + legacy = fp2_urbanism_legacy_track + + # Chance to gain an extra traits for members of the dynasty or children educated by the members of the dynasty + + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_2_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_3 = { #Replace by > faster and cheaper city development + legacy = fp2_urbanism_legacy_track + + + character_modifier = { + city_holding_build_speed = -0.1 + city_holding_build_gold_cost = -0.1 + city_holding_holding_build_speed = -0.1 + city_holding_holding_build_gold_cost = -0.1 + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_4 = { #Replace by > get prestige + cool character on dev level gain + legacy = fp2_urbanism_legacy_track + + # Gain Prestige and guest when completing a building + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_4_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_5 = { #Replace by ??? + legacy = fp2_urbanism_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_5_effect } + } + + ai_chance = { + value = 100 + } +} + +# COTERIE LEGACIES + +fp2_coterie_legacy_1 = { # Inner Circle + legacy = fp2_coterie_legacy_track + + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_1_effect } + } + + ai_chance = { + value = 0 + if = { + limit = { + culture = { + OR = { + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_arabic + } + } + } + add = 10 + } + if = { + limit = { + can_start_new_legacy_track_trigger = no + } + multiply = 0 + } + } +} + +fp2_coterie_legacy_2 = { # House bonds + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_2_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_coterie_legacy_3 = { # Unity + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_3_effect } + } + + character_modifier = { + dynasty_house_opinion = 10 + } + + ai_chance = { + value = 100 + } +} +fp2_coterie_legacy_4 = { # Eternal Trust + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_4_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_coterie_legacy_5 = { # Pragmatic Roots + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_5_effect } + } + + ai_chance = { + value = 100 + } +} + +# New dynasty perks +m_vikingr_legacy_1 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + negative_inactive_inheritance_chance = -0.20 + positive_inactive_inheritance_chance = 0.20 + genetic_trait_strengthen_chance = 0.2 + positive_random_genetic_chance = 0.35 + dynasty_opinion = 20 + } + + ai_chance = { value = 0 } +} + +m_vikingr_legacy_2 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + domain_limit = 1 + vassal_limit = 20 + development_growth = 0.15 + short_reign_duration_mult = -0.25 + } + ai_chance = { value = 0 } +} + +m_vikingr_legacy_3 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + knight_limit = 3 + knight_effectiveness_mult = 0.50 + men_at_arms_limit = 2 + movement_speed = 0.25 + } + + effect = { + dynasty = { + add_dynasty_modifier = { + modifier = fp1_legacy_of_piracy_modifier + } + } + } + + ai_chance = { value = 0 } +} + +m_vikingr_legacy_4 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + monthly_lifestyle_xp_gain_mult = 0.35 + stewardship = 3 + learning = 2 + } + ai_chance = { value = 0 } +} + +m_vikingr_legacy_5 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + general_opinion = 25 + max_personal_schemes_add = 1 + max_hostile_schemes_add = 1 + } + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_1 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + dread_baseline_add = 15 + dread_decay_mult = -0.15 + dread_per_tyranny_add = 1 + cowed_vassal_tax_contribution_mult = 0.2 + } + + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_2 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + max_hostile_schemes_add = 1 + monthly_intrigue_lifestyle_xp_gain_mult = 0.15 + } + + effect = { + custom_description_no_bullet = { + text = glory_legacy_4_perk_effect + } + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_3 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + steppe_development_growth_factor = 0.25 + prisoner_opinion = 10 + hostile_county_attrition = -0.15 + owned_hostile_scheme_success_chance_add = 15 + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_4 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + men_at_arms_limit = 1 + prowess = 3 + army_maintenance_mult = -0.05 + mercenary_hire_cost_mult = -0.1 + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_5 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + knight_limit = 3 + knight_effectiveness_mult = 0.25 + archer_cavalry_max_size_add = 3 + siege_weapon_siege_value_mult = 0.1 + men_at_arms_cap = 1 + } + + ai_chance = { value = 0 } +} + + + + + + + diff --git a/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/give_military_host_armies.txt b/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/give_military_host_armies.txt new file mode 100644 index 0000000..18bef0d --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/give_military_host_armies.txt @@ -0,0 +1,173 @@ +pledged_light_footmen = { + type = skirmishers + + can_recruit = { + always = no + } + + damage = 10 + toughness = 16 + pursuit = 10 + screen = 16 + + terrain_bonus = { + forest = { damage = 4 toughness = 6 } + taiga = { damage = 4 toughness = 6 } + jungle = { damage = 4 toughness = 6 } + } + + counters = { + heavy_infantry = 1 + } + + buy_cost = { gold = skirmisher_recruitment_cost } + low_maintenance_cost = { gold = skirmisher_low_maint_cost } + high_maintenance_cost = { gold = skirmisher_high_maint_cost } + + + stack = 100 + ai_quality = { value = culture_ai_weight_skirmishers } + icon = skirmishers +} + +pledged_bowmen = { + type = archers + + can_recruit = { + always = no + } + + damage = 25 + toughness = 10 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 10 toughness = 4 } + forest = { toughness = 4 screen = 4 } + taiga = { toughness = 4 screen = 4 } + } + + counters = { + skirmishers = 1 + } + + buy_cost = { gold = bowmen_recruitment_cost } + low_maintenance_cost = { gold = bowmen_low_maint_cost } + high_maintenance_cost = { gold = bowmen_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_archers + value = counter_synergy_ai_weight_archers + } + icon = bowmen +} + +pledged_light_horsemen = { + type = light_cavalry + + can_recruit = { + always = no + } + + damage = 22 + toughness = 15 + pursuit = 30 + screen = 30 + + terrain_bonus = { + plains = { damage = 15 } + drylands = { damage = 15 } + hills = { damage = -5 } + mountains = { damage = -10 pursuit = -20 } + desert_mountains = { damage = -15 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = light_cavalry_recruitment_cost } + low_maintenance_cost = { gold = light_cavalry_low_maint_cost } + high_maintenance_cost = { gold = light_cavalry_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_light_cavalry + value = counter_synergy_ai_weight_light_cavalry + } + icon = light_cavalry +} + +pledged_pikemen_unit = { + type = pikemen + + can_recruit = { + always = no + } + + damage = 22 + toughness = 24 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { toughness = 12 } + desert_mountains = { toughness = 12 } + hills = { toughness = 8 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + buy_cost = { gold = pikemen_recruitment_cost } + low_maintenance_cost = { gold = pikemen_low_maint_cost } + high_maintenance_cost = { gold = pikemen_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_pikemen + value = counter_synergy_ai_weight_pikemen + } + icon = pikemen +} + +pledged_house_guard = { + type = heavy_infantry + can_recruit = { + always = no + } + + damage = 40 + toughness = 32 + pursuit = 0 + screen = 24 + + counters = { + pikemen = 2 + archers = 2 + } + + buy_cost = { gold = 50 } + low_maintenance_cost = { gold = 0 } + high_maintenance_cost = { gold = 1 } + + max_sub_regiments = 5 + + stack = 100 + ai_quality = { value = 100 } + icon = house_guard +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/guardians_of_valhalla.txt b/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/guardians_of_valhalla.txt new file mode 100644 index 0000000..fa6063c --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/men_at_arms_types/guardians_of_valhalla.txt @@ -0,0 +1,46 @@ +guardians_of_valhalla = { + type = heavy_infantry + + damage = 65 + toughness = 45 + pursuit = 50 + screen = 25 + + can_recruit = { + dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + + terrain_bonus = { + farmlands = { damage = 6 toughness = 4 } + plains = { damage = 6 toughness = 4 } + hills = { damage = 6 toughness = 4 } + taiga = { damage = 6 toughness = 4 } + mountains = {damage = 6 toughness = 4 } + } + + counters = { + pikemen = 1 + skirmishers = 1 + archers = 1 + heavy_infantry = 1 + } + + winter_bonus = { + normal_winter = { toughness = 8 screen = 8 } + harsh_winter = { toughness = 8 screen = 8 } + } + + siege_tier = 4 + siege_value = 0.025 + + buy_cost = { gold = 50 } + low_maintenance_cost = { gold = 0 } + high_maintenance_cost = { gold = 1 } + + stack = 100 + ai_quality = { value = 100 } + icon = varangian_veterans +} + diff --git a/Mongol_Playthrough_Culture_&_Religion/common/modifiers/great_hall_of_asgard_modifier.txt b/Mongol_Playthrough_Culture_&_Religion/common/modifiers/great_hall_of_asgard_modifier.txt new file mode 100644 index 0000000..5ff550c --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/modifiers/great_hall_of_asgard_modifier.txt @@ -0,0 +1,16 @@ +great_hall_of_asgard_modifier = { + icon = asatru_raven_positive + + life_expectancy = 5 + fertility = 0.35 + negative_random_genetic_chance = -0.5 + domain_limit = 2 + knight_limit = 3 + men_at_arms_cap = 2 + heavy_infantry_siege_value_add = 0.1 + knight_effectiveness_mult = 1 + development_growth = 0.1 + development_growth_factor = 0.2 + monthly_lifestyle_xp_gain_mult = 0.25 + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/script_values/give_military_host_script_values.txt b/Mongol_Playthrough_Culture_&_Religion/common/script_values/give_military_host_script_values.txt new file mode 100644 index 0000000..26845c6 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/script_values/give_military_host_script_values.txt @@ -0,0 +1,193 @@ + +give_military_interaction_gold_cost_small = { + value = 250 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_gold_cost_medium = { + value = 500 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_gold_cost_large = { + value = 1000 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_small = { + value = 100 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_medium = { + value = 250 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_large = { + value = 500 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/give_military_host_effects.txt b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/give_military_host_effects.txt new file mode 100644 index 0000000..7931324 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/give_military_host_effects.txt @@ -0,0 +1,82 @@ + +give_military_host_small_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 1 + } + men_at_arms = { + type = pledged_bowmen + stacks = 1 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 1 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 1 + } + men_at_arms = { + type = pledged_house_guard + stacks = 1 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_small_army + } +} +give_military_host_medium_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 3 + } + men_at_arms = { + type = pledged_bowmen + stacks = 3 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 3 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 3 + } + men_at_arms = { + type = pledged_house_guard + stacks = 3 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_modest_army + } +} +give_military_host_large_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 6 + } + men_at_arms = { + type = pledged_bowmen + stacks = 6 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 6 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 6 + } + men_at_arms = { + type = pledged_house_guard + stacks = 6 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_large_army + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/instruct_treatment_effects.txt b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/instruct_treatment_effects.txt new file mode 100644 index 0000000..0e678e2 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/instruct_treatment_effects.txt @@ -0,0 +1,81 @@ +instruct_treatment_disease_effect = { + random_list = { + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_success_high_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_success_low_modifier + years = 3 + } + } + } + + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_failure_modifier + years = 3 + } + } + } + } + +} + +instruct_treatment_wounded_effect = { + random_list = { + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_success_high_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_success_low_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_failure_modifier + years = 3 + } + } + } + } + +} + +it_disease_event_effect = { + scope:actor = { + trigger_event = { + id = instruct_health.0001 + } + } +} + +it_wounded_event_effect = { + scope:actor = { + trigger_event = { + id = instruct_health.0002 + } + } +} + +add_character_modifier = { + modifier = scratched_and_bruised + years = 3 +} diff --git a/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_grand_yurt_mongol_effects.txt b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_grand_yurt_mongol_effects.txt new file mode 100644 index 0000000..276ef48 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_grand_yurt_mongol_effects.txt @@ -0,0 +1,5 @@ +m_grand_yurt_mongol_effect = { + province:7525 = { + add_special_building = grand_yurt_01 + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_hidden_asgard_effecs.txt b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_hidden_asgard_effecs.txt new file mode 100644 index 0000000..14760d5 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/m_hidden_asgard_effecs.txt @@ -0,0 +1,205 @@ +m_hall_of_asgard_effect = { + + province:234= { + add_special_building=great_high_hall_of_asgard_01 + } + + dynasty = { + + add_dynasty_modifier = { + modifier = great_hall_of_asgard_modifier + } + + # Great modifier for the dynasty + add_dynasty_prestige = excessive_dynasty_prestige_gain + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = pikemen + stacks = 5 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 5 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = pikemen + stacks = 5 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 5 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = pikemen + stacks = 5 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 5 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = pikemen + stacks = 5 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 5 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = pikemen + stacks = 5 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 5 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + + + +} + diff --git a/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/prisoner_release_expanded_effects.txt b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/prisoner_release_expanded_effects.txt new file mode 100644 index 0000000..7e87977 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/common/scripted_effects/prisoner_release_expanded_effects.txt @@ -0,0 +1,8 @@ +expanded_ransom_interaction_effect = { + scope:recipient = { + pay_short_term_gold = { + value = scope:recipient.gold + target = scope:actor + } + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/descriptor.mod b/Mongol_Playthrough_Culture_&_Religion/descriptor.mod new file mode 100644 index 0000000..d08eea9 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/descriptor.mod @@ -0,0 +1,7 @@ +version="0.1a" +tags={ + "Religion" + "Culture" +} +name="Mongol Playthrough Culture & Religion" +supported_version="1.9.2.1" \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/events/instruct_physician_events.txt b/Mongol_Playthrough_Culture_&_Religion/events/instruct_physician_events.txt new file mode 100644 index 0000000..da9b754 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/events/instruct_physician_events.txt @@ -0,0 +1,54 @@ +# Physician events to decide types of treatment + +namespace = instruct_health + +# Disease Treatment Track +instruct_health.0001 = { + type = character_event + title = it_disease_event_title + desc = it_disease_event_desc + theme = healthcare + + right_portrait = { + character = scope:recipient + animation = personality_honorable + } + + + + immediate = { + play_music_cue = "mx_cue_peace_ensues" + } + + option = { + name = it_disease_event_option_text.a + } + option ={ + name = it_disease_event_option_text.b + } + +} + +instruct_health.0002 = { + type = character_event + title = it_wounded_event_title + desc = it_wounded_event_desc + theme = healthcare + + right_portrait = { + character = scope:recipient + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_peace_ensues" + } + + option = { + name = it_wounded_event_option_text.a + } + option ={ + name = it_wounded_event_option_text.b + } + +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/events/norse_asgard_events.txt b/Mongol_Playthrough_Culture_&_Religion/events/norse_asgard_events.txt new file mode 100644 index 0000000..41e3027 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/events/norse_asgard_events.txt @@ -0,0 +1,27 @@ +##################################################### +# Norse Asgard Event +# Developed by DevZero +##################################################### + +namespace = norse_asgard_event + +# Epic Event! Desciption and Title Should Match + +norse_asgard_event.0001 = { + type = character_event + title = norse_asgard_event_title + desc = norse_asgard_event_desc + theme = new_royal_court + left_portrait = { + character = scope:asgard_founder + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + option = { + name = norse_asgard_event_option_text + } +} \ No newline at end of file diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/character_interactions/sponsor_military_gift.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/character_interactions/sponsor_military_gift.dds new file mode 100644 index 0000000..836b4d4 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/character_interactions/sponsor_military_gift.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds new file mode 100644 index 0000000..2774b3f Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds new file mode 100644 index 0000000..32c8d04 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds new file mode 100644 index 0000000..fff0147 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds new file mode 100644 index 0000000..c28a234 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/steppe.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/steppe.dds new file mode 100644 index 0000000..7a7b1ea Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/culture_tradition/4-items/steppe.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds new file mode 100644 index 0000000..431ca20 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds new file mode 100644 index 0000000..d097c10 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/asgard_decision_image.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/asgard_decision_image.dds new file mode 100644 index 0000000..9389f5d Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/asgard_decision_image.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds new file mode 100644 index 0000000..e79771c Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds new file mode 100644 index 0000000..d9bfa47 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds new file mode 100644 index 0000000..947c5b7 Binary files /dev/null and b/Mongol_Playthrough_Culture_&_Religion/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds differ diff --git a/Mongol_Playthrough_Culture_&_Religion/localization/english/m_mongol_playthrough_culture_&_religion_l_english.yml b/Mongol_Playthrough_Culture_&_Religion/localization/english/m_mongol_playthrough_culture_&_religion_l_english.yml new file mode 100644 index 0000000..0cba914 --- /dev/null +++ b/Mongol_Playthrough_Culture_&_Religion/localization/english/m_mongol_playthrough_culture_&_religion_l_english.yml @@ -0,0 +1,188 @@ +l_english: + + #Tradition: Dwellers of the Steppe + tradition_dwellers_of_the_steppe_name: "Dwellers of the Steppe" + tradition_dwellers_of_the_steppe_desc: "This culture values vast dry fields and open skies. Preferring to settle and develop steppe lands despite the associated burdens. Equestrian and pastorial endeavors tend to flourish in this culture, though such an economical pillar brings with it a high cost of maintenance." + culture_in_steppe_terrain_desc: "The [culture|E] is not present in any [county|E] with Steppe [terrain|E]" + culture_in_steppe_terrain_count_desc: "The [culture|E] is not present in at least #V 5#! [counties|E] with Steppe [terrain|E]" + + # Tradition: Ritualistic Reaving + tradition_ritualistic_reaving_name: "Ritualistic Reaving" + tradition_ritualistic_reaving_desc: "Raiding and reaving has become a staple of this culture. While rewarding in terms of plunder, loot and other categories, gaining wealth from others often leads to less of a desire in land enrichment." + m_has_pacifist_tenet_desc: "[faith|E] has a pacifistic tenet" + m_has_pacifist_tradition_desc: "[culture|E] has a pacifistic [tradition|E]" + m_already_has_raid_tradition_desc: "[culture|E] already has too similar a tradition" + m_govenment_incompatible_penalty_desc: "Government is Clan or Feudal" + + # Tradition: Aptitudinal Teachings + tradition_aptitudinal_teachings_name: "Aptitudinal Teachings" + tradition_aptitudinal_teachings_desc: "Carrying forth traditions of old, we expect theologians and scholars to conduct inquiries into the present state of affairs and question intelligently." + m_has_incompatible_alexandrian_catechism_tenet: "Faith follows teachings from the Catechetical School of Alexandria" + + # Tradition: Hard Rule + tradition_hard_rule_name: "Hard Rule" + tradition_hard_rule_desc: "This culture has a tradition of harsh punishments and a staunch ruling perogative." + m_surpasses_dread_threshold: "Your level of [dread|E] does not exceed 35" + m_less_than_high_dread_desc: "Your level of [dread|E] does not exceed 75" + m_high_dread_desc: "[dread|E] level is very high" + + # Tradition: Scandinavian Development + tradition_scandinavian_development_name: "Scandinavian Development" + tradition_scandinavian_development_desc: "Understanding the value of development, we choose to put an emphasis on investing into our lands and people." + m_no_reserve_penalty: "No Royal Reserve building in county of this [culture|E]" + m_scandinavian_innovation_requirement: "Missing Public Works [innovation|E]" + + # Tradition: Synergenistic Faith + tradition_synergenistic_faith_name: "Synergenistic Faith" + tradition_synergenistic_faith_desc: "Culture and Faith are the twin pillars that are the foundation for any realm, we must ensure the two compliment eachother." + # Tradition: Familial Bonds + tradition_familial_bonds_name: "Familial Bonds" + tradition_familial_bonds_desc: "Keeping to your word and building a bond with others is important for prosperity and enjoyment." + m_guess_you_need_more_friends_desc: "Less than ten friends" + + # Dynastic Legacy Track & Perks: Vikingr (Family, Growth, Guardian, Scholar, Honor) + m_vikingr_legacy_track_name: "Víkingr" + m_vikingr_legacy_track_desc: "Through Perspicacity, Providence, and Strength may the vikingr grow evermore prosperous" + m_vikingr_legacy_1_name: "Skuldalið" + m_vikingr_legacy_2_name: "Groði" + m_vikingr_legacy_3_name: "Vorðr" + m_vikingr_legacy_4_name: "Seiðr" + m_vikingr_legacy_5_name: "Heiðr" + + # Dynastic Legacy Track & Perks: Ghengis + m_genghis_of_the_steppe_legacy_track_name: "Legend of the Steppe" + m_genghis_of_the_steppe_legacy_track_desc: "Blood, Fire and mighty Steeds shall overcome all" + m_genghis_of_the_steppe_legacy_1_name: "Intransigent Rulers" + m_genghis_of_the_steppe_legacy_2_name: "Conspiratorial Courts" + m_genghis_of_the_steppe_legacy_3_name: "Adjudicators of the Steppe" + m_genghis_of_the_steppe_legacy_4_name: "Commandants of Strength" + m_genghis_of_the_steppe_legacy_5_name: "Terrors of the Steppe" + + + # Buildings + building_type_great_high_hall_of_asgard_01: "Hliðskjálf af Ásgarðr" + building_type_great_high_hall_of_asgard_01_desc: "The great hall was built as a monument to venerate the top qualities among the norse gods and serve as a wonderous structure to inspire humanity. Foreign stone, precious metals and other elements comprise the nearly etherial presentation and worksmanship. The great structure is thought to beget legend and instill perspicacity, wisdom, and strength to all who visit. Hidden within and amongst the mountains and taiga, accessible only by the select few with knowledge of its whereabouts with their bravery and determination matching the treacherous routes. A great wall was built in the province in support of creating a better stronghold." + building_great_high_hall_of_asgard_01: "Hliðskjálf af Ásgarðr" + building_great_high_hall_of_asgard_01_desc: "The great hall was built as a monument to venerate the top qualities among the norse gods and serve as a wonderous structure to inspire humanity. Foreign stone, precious metals and other elements comprise the nearly etherial presentation and worksmanship. The great structure is thought to beget legend and instill perspicacity, wisdom, and strength to all who visit. Hidden within and amongst the mountains and taiga, accessible only by the select few with knowledge of its whereabouts with their bravery and determination matching the treacherous routes. A great wall was built in the province in support of creating a better stronghold." + + + building_type_bohemian_keep_01: "Great Bohemian Keep" + building_type_bohemian_keep_01_desc: "A resplendent keep meant to last and serve as an important hub for the realm." + building_bohemian_keep_01: "Brick and Mortar" + building_bohemian_keep_01_desc: " It is the duty of any good stronghold, to surpass upkeep and improve the very structure." + + building_bohemian_keep_02: "Well Trained Gaurdsmen" + building_bohemian_keep_02_desc: "Among the keep should be guardsmen trained in basic subtrifuge in addition to the normal performance of duties." + + building_bohemian_keep_03: "Reinforced Brick and Mortar" + building_bohemian_keep_03_desc: "Reinforced layers and well designed spaces fit for higher capacity and better defensive capabilities." + + #Viking Duchy Building in Oslo, meant to be upgraded each era. ' Shield of Viking ' + building_type_shield_of_the_viking_01: "Víkingr Véurr" + building_type_shield_of_the_viking_01_desc: "Great structures, built for defense and militaristic purposes. Colloquially named as the viking shield, thought to be impenetrable." + building_shield_of_the_viking_01: "Grand Norse Fortress" + building_shield_of_the_viking_01_desc: "Norse warriors and master-craftsmen further the development of the defensible position by creating a wonderful fortress, inspired by Valhalla." + + building_shield_of_the_viking_02: "Elegant Corridors" + building_shield_of_the_viking_02_desc: "The structures within are improved and given elegance; adorned with foreign metal, cloth, and other decorative materials." + + building_shield_of_the_viking_03: "Center for Exoerience and Education" + building_shield_of_the_viking_03_desc: "A center has been built to facilitate various educations and competencies, along with a newly built fortified ground." + + building_shield_of_the_viking_04: "Elite Military Expansion and Training " + building_shield_of_the_viking_04_desc: "Great care has been taken to create an exceptionally well rounded norse warrior, attracting Væringi and other elite warriors alike." + + building_type_grand_yurt_01: "Grand Yurt" + building_type_grand_yurt_01_desc: "A great yurt majestically embellished and established atop a fortified position." + building_grand_yurt_01: "Grand Yurt" + building_grand_yurt_01_desc: "A great yurt majestically embellished and established atop a fortified position." + + # Norse Decisions + m_asgard_decision: "Venture out in Search of the Fabled Hliðskjálf af Ásgarðr" + m_asgard_decision_desc: "You read about a great hidden hall among the taiga and mountains within the province, and find curious indicators of its existence within the province.Explore just how expansive this new discovery is and what use it may have in furthering your people." + m_asgard_decision_tooltip: "Search for the fabled area." + m_asgard_decision_confirm: "Venture into the Unknown" + # Norse Modifier + great_hall_of_asgard_modifier: "Hliðskjálf af Ásgarðr Skapari" + great_hall_of_asgard_modifier_desc: "This dynasty's members are the original discoverers and true guardians of the Hliðskjálf af Ásgarðr." + norse_asgard_enabled_interaction: "Strategically Indebt" + norse_asgard_enabled_interaction_desc: "Learned from the grand library of Hliðskjálf af Ásgarðr, your family is adept in the ways of social engineering; through generational knowledge passed down through various secret writings." + norse_asgard_enabled_interaction.tt.success: "You successfully gain their loyalty" + norse_asgard_enabled_interaction.tt.failure: "You do not successfully gain their loyalty" + guardians_of_valhalla: "Elite of Hliðskjálf" + guardians_of_valhalla_flavor: "Elite guardians found upon the exploration of the Hliðskjálf af Ásgarðr." + # Norse Event + norse_asgard_event_title: "The Great Discovery: Hliðskjálf af Ásgarðr" + + norse_asgard_event_desc: " \nOne would not dare believe it true as it seems almost etherial. After reading up on the history of the new capital and seeing the markings within the province, I thought myself obsessed with a legend. Yet I have made the discovery of a thousand lifetimes! The Hliðskjálf af Ásgarðr! \n\n It is a vast network of structures, grand halls, and exquisitely interwoven nature. Rivers, caves, a world resembling myth! Grand halls, libraries, natural hot springs atop the mountain, among the trees. This is it. This is to be the penultimate of our dynasty! We will continue to build and create a grand legacy rivaling only the gods through perspicacity, providence and prosperity! + + norse_asgard_event_option_text: "May our family forever protect, steward, and appreciate this sacred place with each other!" + + norse_army_host: "Legendary Host of Hliðskjálf" + + # Mongol Decision + m_mongol_grand_yurt_decision: "Establish a Grand Yurt" + m_mongol_grand_yurt_decision_desc: "Commission and establish a grand yurt worthy of the great khan." + m_mongol_grand_yurt_decision_tooltip: "Commission a grand yurt in lieu of your status as the greatest of khans." + m_mongol_grand_yurt_decision_confirm: "Commission the Yurt" + + # Prisoner Release Expanded + prisoner_release_expanded_interaction: "Ask Master Warden to Negotiate Release" + prisoner_release_expanded_interaction_desc: "Set your master warden to the task of negotiating a release with your prisoner." + prisoner_release_expanded_strong_hook_option_failure_toast_title: "Doubts regarding [recipient.GetTitledFirstName]'s promise." + + prisoner_release_expanded_strong_hook_option_success: "Swears loyalty to you" + prisoner_release_expanded_strong_hook_option_failure: "Disingenuously swears loyalty to you" + + # Court Positions + master_warden_court_position: "Master Warden" + master_warden_court_position_desc: "The master warden is responsible for prisoners and dealing with unscrupulous matters of the realm." + + master_of_intrigue_court_position: "Master of Intrigue" + master_of_intrigue_court_position_desc: "The master of intrigue is responsible for expanding the ruler's capability in matters of intrigue." + + master_warden_employer_custom_effect_description: "Will allow you to task them with negotiating releases for prisoners, giving you more release options." + court_liaison_court_position: "Court Liaison" + court_liaison_court_position_desc: "The court liaison is responsible for ensuring proper maintenance of the royal court and preserving the court's image to foreign diplomats alike." + diplomatic_liaison_court_position: "Diplomatic Liaison" + diplomatic_liaison_court_position_desc: "Is responsible for expanding the ruler's capability in matters of diplomacy." + ambassador_culture_court_position: "Cultural Ambassador" + ambassador_culture_court_position_desc: "Is responsible for creating cultural cohesion within the realm." + # Instruct Physician to Treat + instruct_physician_to_treat_ill_interaction: "Instruct Court Physician to Treat" + instruct_physician_to_treat_ill_interaction_desc: "Instruct your court physician to attempt treatment on [recipient.GetTitledFirstName]." + + # Instruct Physician Localizations + it_disease_event_title: "Treatment: Disease" + it_disease_event_desc: "\nI have instructed court physician to help aid in [recipient.GetTitledFirstName]'s affliction. " + it_disease_event_option_text.a: "I wish [recipient.GetTitledFirstName] a safe treatment and recovery." + it_disease_event_option_text.b: "I mean, what is the worst that is going to happen right?" + + it_wounded_event_title: "Treatment: Wound" + it_wounded_event_desc: "\nI have instructed my court physician to help treat [recipient.GetTitledFirstName]'s wound." + it_wounded_event_option_text.a: "I hope [recipient.GetTitledFirstName]'s wound clears up.' " + it_wounded_event_option_text.b: "I mean, what is the worst that is going to happen right?" + + # Military Gift Interaction + give_military_host_interaction: "Sponsor Military Host" + give_military_host_interaction_desc: "Sponsor an army for [recipient.GetTitledFirstName]" + pledged_house_guard: "Pledged House Guard" + pledged_pikemen_unit: "Pledged Pikemen" + pledged_light_horsemen: "Pledged Light Horsemen" + pledged_bowmen: "Pledged Bowmen" + pledged_light_footmen: "Pledged Light Footmen" + funded_small_army: "[actor.GetTitledFirstName]'s Sponsored Army" + funded_modest_army: "[actor.GetTitledFirstName]'s Sponsored Army" + funded_large_army: "[actor.GetTitledFirstName]'s Sponsored Army" + mh_small_army_requirement: "Requires [gold_i]250 [gold|E] and [prestige_i]100 [prestige|E]" + mh_medium_army_requirement: "Requires [gold_i]500 [gold|E] and [prestige_i]250 [prestige|E]" + mh_large_army_requirement: "Requires [gold_i]1000 [gold|E] and [prestige_i]500 [prestige|E]" + mh_can_send_requirement: "Must select and option to send" + + # New Mongol Culture + neo_mongol: "Tibetan Mongol" + neo_mongol_name: "Tibetan Mongol" + neo_mongol_collective_noun: "Tibetan Mongols" + neo_mongol_prefix: "Tibetan Mongolic" + + \ No newline at end of file diff --git a/Realm_Management_Tour.mod b/Realm_Management_Tour.mod new file mode 100644 index 0000000..cf303a7 --- /dev/null +++ b/Realm_Management_Tour.mod @@ -0,0 +1,11 @@ +version="0.1a" +tags={ + "Balance" + "Character Interactions" + "Events" + "Gameplay" + "Schemes" +} +name="Realm Management Tour" +supported_version="1.9.2.1" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/Realm_Management_Tour" \ No newline at end of file diff --git a/Realm_Management_Tour/common/activities/activity_types/m_realm_management_tour.txt b/Realm_Management_Tour/common/activities/activity_types/m_realm_management_tour.txt new file mode 100644 index 0000000..6875245 --- /dev/null +++ b/Realm_Management_Tour/common/activities/activity_types/m_realm_management_tour.txt @@ -0,0 +1,3026 @@ + +# Copy / paste of vanilla tour for reference +# no work completed yet. + + +activity_realm_management_tour = { + is_shown = { + highest_held_title_tier > tier_barony + is_landed = yes + is_ruler = yes + has_dlc_feature = tours_and_tournaments + has_dlc_feature = advanced_activities + } + + can_start_showing_failures_only = { + 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 = { + NOT = { 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 + # } + # } + + # ai_check_interval = 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" + # } + # } + # } + + # 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 = { + # NOT = { 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 + ################### + + is_grand_activity = no + + province_filter = realm + is_single_location = no + planner_type = holder + + is_location_valid = { + ep2_phase_general_location_checks = yes + } + + cost = { + gold = { + 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 + } + } + } + } + + ui_predicted_cost = { + # All costs are balanced on County/Early Era starting point + gold = { + # 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 = { + # ai_has_cautious_personality = yes + # 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 + # } + # } + } + 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 + # } + # } + } + 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 + # } + # } + } + } + tour_entourage = { + tour_entourage_small = { + cost = { + gold = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + + 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 = { + gold > minor_gold_value + custom_tooltip = { + text = more_than_5_courtiers + any_courtier_or_guest = { count > 5 } + } + } + + # ai_will_do = { + # value = 50 + # } + + cost = { + gold = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + } + tour_entourage_grand = { + is_valid = { + gold > medium_gold_value + 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 = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + } + } + tour_luxuries = { + tour_luxuries_bad = { + cost = { + gold = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + + # 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 + is_valid = { + gold > tiny_gold_value + } + cost = { + gold = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + + # ai_will_do = { + # value = 0 + # add = { #Base amount + # value = 50 + # } + # } + } + tour_luxuries_good = { + is_valid = { + gold > tiny_gold_value + 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 = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + } + tour_furniture_normal = { + default = yes + is_valid = { + gold > medium_gold_value + 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 = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + } + tour_furniture_good = { + is_valid = { + gold > major_gold_value + 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 = { + add = { + 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 + } + # Some people get one free. + if = { + limit = { factor_zero_if_entitled_to_freebie_activity_trigger = yes } + multiply = 0 + } + } + } + } + } + } + } + + 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 + NOT = { 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 = { + 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 + } + } + } + + 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 + } + } + + 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 + NOT = { 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 = { + 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 + } + } + } + + 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 + } + } + + 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 = { + NOT = { 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 + NOT = { 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 = { + 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 + } + } + } + + 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 + } + } + + 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 + } + 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 = { + #if = { # Activity count debugging + # 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 = { + 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 } } + } + } + + # 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_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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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 = { + NOT = { 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.culture ?= { has_graphical_india_culture_group_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.culture ?= { has_graphical_mena_culture_group_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 = { #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 = { # 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 = { + trigger = { + has_current_phase = tour_phase_dinner + activity_location.culture = { has_building_gfx = indian_building_gfx } + } + 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 } + } + } + 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 = steppe_building_gfx } + } + texture = "gfx/interface/illustrations/event_scenes/ep2_feast_steppe.dds" + environment = "environment_steppe_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 ?= { + has_government = tribal_government + } + } + } + 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 = { #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 = { #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 = { has_government = tribal_government } + } + 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 = { has_government = tribal_government } } + } + 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 = { + trigger = { + activity_location.culture ?= { has_graphical_mena_culture_group_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 = { + trigger = { + activity_location.culture ?= { has_graphical_india_culture_group_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 = { + trigger = { + activity_location.culture ?= { has_graphical_mediterranean_culture_group_trigger = yes } + } + texture = "gfx/interface/illustrations/event_scenes/throneroom_mediterranean.dds" + environment = "environment_frontend_mediterranean_main" + ambience = "event:/SFX/Events/Backgrounds/throneroom_mediterranean" + } + + 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 = { + scope:host.location = scope:activity.activity_location + } + scope:host = { + add_to_list = characters + } + } + } + + scripted_animation = { + 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_body + + effect = { + if = { + limit = { + NOT = { + 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 + } + } + + 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/Realm_Management_Tour/descriptor.mod b/Realm_Management_Tour/descriptor.mod new file mode 100644 index 0000000..5145b9a --- /dev/null +++ b/Realm_Management_Tour/descriptor.mod @@ -0,0 +1,10 @@ +version="0.1a" +tags={ + "Balance" + "Character Interactions" + "Events" + "Gameplay" + "Schemes" +} +name="Realm Management Tour" +supported_version="1.9.2.1" \ No newline at end of file diff --git a/Realm_Management_Tour/localization/english/realm_management_tour_activity_l_english.yml b/Realm_Management_Tour/localization/english/realm_management_tour_activity_l_english.yml new file mode 100644 index 0000000..2d14335 --- /dev/null +++ b/Realm_Management_Tour/localization/english/realm_management_tour_activity_l_english.yml @@ -0,0 +1,7 @@ +l_english: + activity_tour_special_type_title:0 "[ActivityWindow.GetActivity.GetSpecialOption.GetOption.GetName] Success" + activity_tour_special_type_desc:0 "[ActivityWindow.GetActivity.GetSpecialOption.GetOption.GetDescription]" + activity_tour_special_type_bar_segment_0_tt:0 "Bar Segment 1" + activity_tour_special_type_bar_segment_1_tt:0 "Bar Segment 2" + activity_tour_special_type_bar_segment_2_tt:0 "Bar Segment 3" + activity_tour_special_type_bar_segment_3_tt:0 "Bar Segment 4" diff --git a/dummydir.mod b/dummydir.mod new file mode 100644 index 0000000..9b0586c --- /dev/null +++ b/dummydir.mod @@ -0,0 +1,7 @@ +version="0.1" +tags={ + "Utilities" +} +name="dummydir" +supported_version="1.14.2.2" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/dummydir" \ No newline at end of file diff --git a/dummydir/descriptor.mod b/dummydir/descriptor.mod new file mode 100644 index 0000000..49194b6 --- /dev/null +++ b/dummydir/descriptor.mod @@ -0,0 +1,6 @@ +version="0.1" +tags={ + "Utilities" +} +name="dummydir" +supported_version="1.14.2.2" \ No newline at end of file diff --git a/master.mod b/master.mod new file mode 100644 index 0000000..3a8aba1 --- /dev/null +++ b/master.mod @@ -0,0 +1,8 @@ +version="1.0" +tags={ + "Total Conversion" +} +name="Master" +supported_version="1.*" +path="/home/user0/.local/share/Paradox Interactive/Crusader Kings III/mod/master" +remote_file_id="3162040068" \ No newline at end of file diff --git a/master/common/buildings/m_buildings.txt b/master/common/buildings/m_buildings.txt new file mode 100644 index 0000000..ac296cb --- /dev/null +++ b/master/common/buildings/m_buildings.txt @@ -0,0 +1,543 @@ +# Buildings by DevZero +################################################# +# Special Buildings +################################################ +great_high_hall_of_asgard_01 = { + + asset = { + type = pdxmesh + name = "fp2_building_special_toledo_city_walls_01_a_mesh" + } + + type_icon = "icon_building_royal_forest.dds" + + is_enabled = { + OR = { + scope:holder.faith = norse_pagan + scope:holder.culture.heritage = heritage_north_germanic + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + } + + type = special + + cost_gold = 25000 + construction_time = slow_construction_time + + + character_modifier = { + knight_limit = 3 + monthly_dynasty_prestige_mult = 0.15 + monthly_dynasty_prestige = 5 + cultural_head_fascination_mult = 0.35 + monthly_lifestyle_xp_gain_mult = 0.50 + } + + province_modifier = { + monthly_income = 15 + fort_level = 3 + } + + county_modifier = { + development_growth = 0.50 + development_growth_factor = 0.50 + levy_size = 0.2 + } + + + flag = travel_point_of_interest_wonder + +} + +grand_yurt_01 = { + construction_time = slow_construction_time + + is_enabled = { + } + + + type_icon = "icon_building_military_camps.dds" + + cost = { + gold = 350 + prestige = 500 + } + + + province_modifier = { + monthly_income = 5 + fort_level = 2 + garrison_size = 0.1 + travel_danger = -10 + stationed_archer_cavalry_damage_mult = 0.35 + stationed_archer_cavalry_pursuit_mult = 0.25 + defender_holding_advantage = 8 + + } + + county_modifier = { + development_growth = 0.2 + } + + character_modifier = { + steppe_development_growth_factor = 0.20 + archer_cavalry_max_size_add = 3 + knight_limit = 2 + + } + + type = special + flag = travel_point_of_interest_martial +} +########################################################################################################################### +# Special Duchy +########################################################################################################################### +shield_of_the_viking_01 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + scope:holder.culture = { + has_cultural_pillar = heritage_north_germanic + } + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + scope:holder = { + has_title = title:d_viken + } + } + } + + + cost = { + gold = 120 + prestige = 500 + } + + levy = 1500 + max_garrison = 1500 + defender_holding_advantage = 25 + + duchy_capital_county_modifier = { + tax_mult = 0.10 + levy_size = 0.05 + garrison_size = 0.05 + hostile_raid_time = 2 + travel_danger = -15 + fort_level = 2 + + } + + province_modifier = { + fort_level = 5 + garrison_size = 1.05 + levy_size = 0.15 + stationed_maa_damage_mult = 0.25 + stationed_maa_toughness_mult = 0.25 + stationed_maa_pursuit_mult = 0.25 + stationed_maa_screen_mult = 0.25 + + + } + + character_modifier = { + knight_limit = 3 + knight_effectiveness_mult = 1 + army_maintenance_mult = -0.2 + men_at_arms_cap = 1 + men_at_arms_limit = 2 + monthly_piety = 1 + monthly_prestige = 1 + + } + + type = duchy_capital + next_building = shield_of_the_viking_02 + +} + +shield_of_the_viking_02 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + scope:holder.culture = { + has_cultural_pillar = heritage_north_germanic + } + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + scope:holder = { + has_title = title:d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_battlements + } + } + + + cost = { + prestige = expensive_building_tier_3_cost + piety = expensive_building_tier_3_cost + } + + levy = 1500 + max_garrison = 1500 + defender_holding_advantage = 30 + + duchy_capital_county_modifier = { + tax_mult = 0.20 + levy_size = 0.15 + garrison_size = 0.15 + hostile_raid_time = 3 + travel_danger = -20 + fort_level = 3 + + } + + province_modifier = { + fort_level = 8 + garrison_size = 1.2 + levy_size = 0.25 + stationed_maa_damage_mult = 0.5 + stationed_maa_toughness_mult = 0.5 + stationed_maa_pursuit_mult = 0.5 + stationed_maa_screen_mult = 0.5 + + + } + + character_modifier = { + knight_limit = 6 + knight_effectiveness_mult = 1.25 + army_maintenance_mult = -0.25 + monthly_piety = 2 + monthly_prestige = 2 + men_at_arms_cap = 2 + men_at_arms_limit = 4 + + } + + type = duchy_capital + next_building = shield_of_the_viking_03 + +} + +shield_of_the_viking_03 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + scope:holder.culture = { + has_cultural_pillar = heritage_north_germanic + } + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + scope:holder = { + has_title = title:d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_hoardings + } + } + + + cost = { + prestige = expensive_building_tier_4_cost + piety = expensive_building_tier_4_cost + } + + levy = 1750 + max_garrison = 1750 + defender_holding_advantage = 35 + + duchy_capital_county_modifier = { + tax_mult = 0.30 + levy_size = 0.25 + garrison_size = 0.25 + hostile_raid_time = 4 + travel_danger = -25 + fort_level = 4 + + } + + province_modifier = { + fort_level = 12 + garrison_size = 1.35 + levy_size = 0.35 + stationed_maa_damage_mult = 0.75 + stationed_maa_toughness_mult = 0.75 + stationed_maa_pursuit_mult = 0.75 + stationed_maa_screen_mult = 0.75 + + + } + + character_modifier = { + knight_limit = 9 + knight_effectiveness_mult = 1.5 + army_maintenance_mult = -0.35 + monthly_piety = 3 + monthly_prestige = 3 + men_at_arms_cap = 3 + men_at_arms_limit = 6 + + } + + type = duchy_capital + next_building = shield_of_the_viking_04 + +} + +shield_of_the_viking_04 = { + construction_time = slow_construction_time + type_icon = "icon_building_hall_of_heroes.dds" + + is_enabled = { + AND = { + scope:holder.culture = { + has_cultural_pillar = heritage_north_germanic + } + scope:holder.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + scope:holder = { + has_title = title:d_viken + } + } + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_machicolations + } + } + + cost = { + prestige = expensive_building_tier_4_cost + piety = expensive_building_tier_4_cost + } + + levy = 1750 + max_garrison = 1750 + defender_holding_advantage = 35 + + duchy_capital_county_modifier = { + tax_mult = 0.40 + levy_size = 0.35 + garrison_size = 0.35 + hostile_raid_time = 5 + travel_danger = -30 + fort_level = 5 + + } + + province_modifier = { + fort_level = 15 + garrison_size = 1.5 + levy_size = 0.50 + stationed_maa_damage_mult = 1 + stationed_maa_toughness_mult = 1 + stationed_maa_pursuit_mult = 1 + stationed_maa_screen_mult = 1 + + } + + character_modifier = { + knight_limit = 12 + knight_effectiveness_mult = 2 + army_maintenance_mult = -0.5 + monthly_piety = 4 + monthly_prestige = 4 + men_at_arms_cap = 4 + men_at_arms_limit = 8 + + } + + type = duchy_capital + flag = fully_upgraded_duchy_capital_building + +} + +##################################################### +# Duchy Capitol Buidlings +##################################################### +bohemian_keep_01 = { + + construction_time = slow_construction_time + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + type_icon = "icon_building_ramparts.dds" + + cost = { + gold = 120 + prestige = 500 + } + + + duchy_capital_county_modifier = { + tax_mult = 0.10 + levy_size = 0.05 + garrison_size = 0.15 + hostile_raid_time = 0.2 + travel_danger = -15 + additional_fort_level = normal_building_fort_level_tier_2 + } + + province_modifier = { + monthly_income = 3 + stationed_maa_damage_mult = normal_maa_damage_tier_1 + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + + character_modifier = { + knight_limit = 2 + knight_effectiveness_mult = 0.1 + monthly_dynasty_prestige_mult = 0.05 + + } + + + + type = duchy_capital + next_building = bohemian_keep_02 +} + +bohemian_keep_02 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_requirement_castle_city_church = { LEVEL = 01 } + building_requirement_tribal = no + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_battlements + } + } + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + cost_gold = expensive_building_tier_4_cost + + duchy_capital_county_modifier = { + tax_mult = 0.20 + levy_size = 0.1 + garrison_size = 0.25 + hostile_raid_time = 0.25 + travel_danger = -20 + additional_fort_level = normal_building_fort_level_tier_2 + } + + province_modifier = { + monthly_income = 4 + stationed_maa_damage_mult = normal_maa_damage_tier_2 + stationed_maa_toughness_mult = normal_maa_toughness_tier_2 + } + + character_modifier = { + knight_limit = 4 + knight_effectiveness_mult = 0.15 + monthly_dynasty_prestige_mult = 0.05 + intrigue = 1 + + } + + next_building = bohemian_keep_03 + type = duchy_capital + +} + +bohemian_keep_03 = { + construction_time = slow_construction_time + + can_construct_potential = { + building_requirement_castle_city_church = { LEVEL = 01 } + building_requirement_tribal = no + } + + can_construct_showing_failures_only = { + + culture = { + has_innovation = innovation_hoardings + } + } + + is_enabled = { + AND = { + county.holder = { + has_title = prev.duchy + } + barony = title:b_praha + } + } + + show_disabled = no + + cost_gold = expensive_building_tier_5_cost + + duchy_capital_county_modifier = { + tax_mult = 0.30 + levy_size = 0.15 + garrison_size = 0.25 + hostile_raid_time = 0.3 + travel_danger = -25 + additional_fort_level = normal_building_fort_level_tier_4 + } + + province_modifier = { + monthly_income = 5 + stationed_maa_damage_mult = normal_maa_damage_tier_3 + stationed_maa_toughness_mult = normal_maa_toughness_tier_3 + } + + character_modifier = { + knight_limit = 6 + knight_effectiveness_mult = 0.25 + monthly_dynasty_prestige_mult = 0.05 + intrigue = 1 + + } + + type = duchy_capital + flag = fully_upgraded_duchy_capital_building +} + +############################################################################################### +# Buildings +############################################################################################### \ No newline at end of file diff --git a/master/common/character_interactions/give_military_host_interaction.txt b/master/common/character_interactions/give_military_host_interaction.txt new file mode 100644 index 0000000..5cde1e5 --- /dev/null +++ b/master/common/character_interactions/give_military_host_interaction.txt @@ -0,0 +1,173 @@ +give_military_host_interaction = { + interface_priority = 25 + common_interaction= yes + use_diplomatic_range = yes + category = interaction_category_diplomacy + desc = give_military_host_interaction_desc + icon = sponsor_military_gift + + is_shown = { + scope:recipient = { + is_ruler = yes + highest_held_title_tier >= tier_county + } + NOT = { + scope:actor = scope:recipient + } + + } + + can_send = { + custom_tooltip = { + text = mh_can_send_requirement + OR = { + scope:small_military_gift = yes + scope:medium_military_gift = yes + scope:large_military_gift = yes + } + } + } + + on_accept = { + if = { + limit = { + scope:small_military_gift = yes + } + scope:recipient = { + give_military_host_small_effect = yes + + } + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + scope:recipient = { + give_military_host_medium_effect = yes + } + } + else_if = { + limit = { + scope:large_military_gift = yes + } + scope:recipient = { + give_military_host_large_effect = yes + } + } + } + + cost = { + gold = { + value = 0 + if = { + limit = { + scope:small_military_gift = yes + } + add = give_military_interaction_gold_cost_small + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + add = give_military_interaction_gold_cost_medium + + } + else_if = { + limit = { + scope:large_military_gift = yes + } + add = give_military_interaction_gold_cost_large + } + } + prestige = { + value = 0 + if = { + limit = { + scope:small_military_gift = yes + } + add = give_military_interaction_prestige_cost_small + } + else_if = { + limit = { + scope:medium_military_gift = yes + } + add = give_military_interaction_prestige_cost_medium + + } + else_if = { + limit = { + scope:large_military_gift = yes + } + add = give_military_interaction_prestige_cost_large + } + } + + } + + send_option = { + flag = small_military_gift + localization = "Sponsor Small Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_small_army_requirement + AND = { + gold > 250 + prestige > 100 + } + } + } + + } + } + send_option = { + flag = medium_military_gift + localization = "Sponsor Moderate Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_medium_army_requirement + AND = { + gold > 500 + prestige > 250 + } + } + } + } + + } + send_option = { + flag = large_military_gift + localization = "Sponsor Large Army" + + is_shown = { + exists = scope:actor + } + is_valid = { + scope:actor = { + custom_tooltip = { + text = mh_large_army_requirement + AND = { + gold > 1000 + prestige > 500 + } + } + } + } + } + + send_options_exclusive = yes + + # Always up to get some free military! + auto_accept = yes + + +} \ No newline at end of file diff --git a/master/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt b/master/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt new file mode 100644 index 0000000..7d51974 --- /dev/null +++ b/master/common/character_interactions/instruct_physician_to_treat_ill_interaction.txt @@ -0,0 +1,122 @@ +instruct_physician_to_treat_ill_interaction = { + interface_priority = 25 + common_interaction= yes + use_diplomatic_range = yes + category = interaction_category_friendly + desc = instruct_physician_to_treat_ill_interaction_desc + icon = icon_scheme_crypto_religion + + is_shown = { + NOT = { + OR = { + scope:actor = scope:recipient + NOT = { + scope:actor = { + exists = court_position:court_physician_court_position + } + } + } + + } + scope:recipient = { + # Remember to add court position - physician requirement + is_alive = yes + + AND = { + # Coutier / Related in some way + OR = { + is_courtier_of = scope:actor + is_close_or_extended_family_of = scope:actor + scope:recipient.dynasty = scope:actor.dynasty + } + # Has bad health traits and does not have reducing disease symptoms - currently being treated. No psychiatric afflictions here! + OR = { + has_trait = ill + has_trait = pneumonic + has_trait = great_pox + has_trait = lovers_pox + has_trait = leper + has_trait = wounded_1 + has_trait = wounded_2 + has_trait = wounded_3 + has_trait = maimed + has_trait = gout_ridden + has_trait = consumption + has_trait = cancer + has_trait = typhus + has_trait = bubonic_plague + has_trait = smallpox + has_character_modifier = infected_wound_modifier + has_character_modifier = gangrene_modifier + has_trait = sickly + } + # Is not currently being treated (reduced diseased symptoms character modifier) + NOT = { + has_character_modifier = safe_disease_treatment_success_high_modifier + has_character_modifier = safe_disease_treatment_success_low_modifier + has_character_modifier = safe_disease_treatment_failure_modifier + has_character_modifier = risky_disease_treatment_success_high_modifier + has_character_modifier = risky_disease_treatment_success_low_modifier + has_character_modifier = risky_disease_treatment_failure_modifier + has_character_modifier = safe_wound_treatment_success_high_modifier + has_character_modifier = safe_wound_treatment_success_low_modifier + has_character_modifier = safe_wound_treatment_failure_modifier + has_character_modifier = risky_wound_treatment_success_modifier + has_character_modifier = risky_wound_treatment_failure_modifier + + } + } + } + + } + + on_send = { + + scope:recipient = { + if = { + limit = { + OR = { + has_trait = sickly + has_trait = consumption + has_trait = cancer + has_trait = typhus + has_trait = bubonic_plague + has_trait = smallpox + has_trait = ill + has_trait = pneumonic + has_trait = great_pox + has_trait = lovers_pox + has_trait = leper + } + + } + it_disease_event_effect = yes + instruct_treatment_disease_effect = yes + } + else_if = { + limit = { + OR = { + has_character_modifier = infected_wound_modifier + has_character_modifier = gangrene_modifier + has_trait = wounded_1 + has_trait = wounded_2 + has_trait = wounded_3 + has_trait = maimed + } + } + it_wounded_event_effect = yes + instruct_treatment_wounded_effect = yes + } + + } + + } + + # 3102 for disease + #41 + + # Always want to be helped + auto_accept = yes + + +} \ No newline at end of file diff --git a/master/common/character_interactions/join_all_the_wars_retweak.txt b/master/common/character_interactions/join_all_the_wars_retweak.txt new file mode 100644 index 0000000..cdf0836 --- /dev/null +++ b/master/common/character_interactions/join_all_the_wars_retweak.txt @@ -0,0 +1,179 @@ +join_war_interaction = { + category = interaction_category_diplomacy + interface = interfere_in_war + special_interaction = interfere_in_war_interaction + popup_on_receive = yes + desc = join_war_interaction_desc + icon = change_allegiance + + greeting = positive + notification_text = join_war_interaction_notification + + is_shown = { + scope:recipient = { + is_at_war = yes + NOR = { + this = scope:actor + is_at_war_with = scope:actor + } + } + } + + is_valid_showing_failures_only = { + + # 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 + } + } + } + } + } + + # recipient is ally or defending against a holy war + trigger_if = { + limit = { + scope:actor = { + NOT = { target_is_liege_or_above = scope:recipient } + } + } + trigger_if = { + limit = { + scope:recipient = { + any_character_war = { + OR = { + #Must be either the same faith as the character being holy warred... + scope:recipient.faith = scope:actor.faith + #... Or, same religion, *and* you couldn't holy war them yourself. + AND = { + scope:recipient.faith.religion = scope:actor.faith.religion + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value < religious_cb_enabled_hostility_level + } + } + } + } + any_war_defender = { this = scope:recipient } + } + } + } + # Deliberately blank; we've passed the trigger and making a desc out of this doesn't make sense + } + } + # recipient is liege + trigger_else = { + custom_description = { + text = join_war_interaction_recipient_not_liege + subject = scope:recipient + scope:actor = { + target_is_liege_or_above = scope:recipient + } + } + } + } + + can_be_picked = { + exists = scope:target + scope:target = { + + # recipient is war leader + is_war_leader = scope:recipient + + # If not holy war, special exception for liege trying to put down his vassal's peasant revolt. + trigger_if = { + limit = { + is_religious_war = no + scope:actor = { target_is_vassal_or_below = scope:recipient } + primary_defender = scope:recipient + primary_attacker = { + is_leading_faction_type = peasant_faction + } + } + always = yes + } + + # making the default behavior explicit if no other trigger_(else_)ifs are valid + trigger_else = { + always = yes + } + } + + joiner_not_already_in_another_war_with_any_target_war_participants_trigger = { + WARRIOR = scope:recipient + JOINER = scope:actor + } + } + + on_accept = { + scope:target = { + hidden_effect = { + set_called_to = scope:actor + } + if = { + limit = { + is_attacker = scope:recipient + } + add_attacker = scope:actor + } + else = { + add_defender = scope:actor + } + } + scope:actor = { + stress_impact = { + craven = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + } + scope:recipient = { + if = { + limit = { + is_ai = yes + } + progress_towards_friend_effect = { + CHARACTER = scope:actor + OPINION = no + } + } + else = { + hidden_effect = { #To nudge friendship + if = { + limit = { + NOR = { + has_relation_friend = scope:actor + has_relation_potential_friend = scope:actor + } + } + set_relation_potential_friend = scope:actor + } + } + } + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0236 + } + } + + auto_accept = yes + + ai_accept = { + base = 100 # everyone wants help + } + + ai_will_do = { + base = -1000 # only players can join all the wars + } + +} \ No newline at end of file diff --git a/master/common/character_interactions/norse_asgard_enabled_interaction.txt b/master/common/character_interactions/norse_asgard_enabled_interaction.txt new file mode 100644 index 0000000..93a6f1d --- /dev/null +++ b/master/common/character_interactions/norse_asgard_enabled_interaction.txt @@ -0,0 +1,116 @@ +############################################################################################################################## +# Medievel Thievery Mod +# Developed by DevZero (some code taken from pdx) - the mod has thievery in the name after all... +# Notes: for AI inclusion, look at ai in diarch_interactions > syphon -- ai greed, boldness, honor for base, then modifiers +############################################################################################################################## + +norse_asgard_enabled_interaction = { + icon = icon_scheme_fabricate_hook + common_interaction = yes + interface_priority = 100 + category = interaction_category_friendly + desc = norse_asgard_enabled_interaction_desc + cooldown = { months = 18 } + cooldown_against_recipient = {years = 5} + + is_shown = { + scope:actor.dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + + NOT = {Scope:recipient = scope:acotr} + + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + on_accept = { + scope:actor = { + duel = { + skill = learning + target = scope:recipient + 55 = { + desc = norse_asgard_enabled_interaction.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_toast = { + title = norse_asgard_enabled_interaction.tt.success + left_icon = scope:recipient + + add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + + } + + 45 = { + desc = norse_asgard_enabled_interaction.tt.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = norse_asgard_enabled_interaction.tt.failure + left_icon = scope:recipient + + scope:recipient = { + # Vengeful characters will not take it well. + if = { + limit = { + has_trait = vengeful + can_set_relation_rival_trigger = { CHARACTER = scope:actor } + } + set_relation_rival = { + target = scope:actor + reason = rival_tried_to_embezzle + } + } + # Forgiving characters aren't too bothered. + else_if = { + limit = { has_trait = forgiving } + add_opinion = { + target = scope:actor + modifier = disappointed_opinion + opinion = -5 + } + } + # Otherwise, folks are skeptical + else = { + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = -15 + } + } + + } + + } + + } + } + } + } + + + + auto_accept = yes + + ai_will_do = { + base = 0 + } + + + + +} \ No newline at end of file diff --git a/master/common/character_interactions/prisoner_release_options_expanded.txt b/master/common/character_interactions/prisoner_release_options_expanded.txt new file mode 100644 index 0000000..bbcc399 --- /dev/null +++ b/master/common/character_interactions/prisoner_release_options_expanded.txt @@ -0,0 +1,1551 @@ +prisoner_release_expanded_interaction = { + interface_priority = 30 + common_interaction = yes + category = interaction_category_prison + special_interaction = release_from_prison_interaction + icon = prison + + desc = release_from_prison_interaction_desc + + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:take_vows = no + scope:recruit = no + } + desc = RELEASE_PRISONER_OFFER + } + desc = RELEASE_PRISONER_OFFER_CONDITIONAL + } + } + + is_shown = { + AND = { + scope:recipient = { + is_imprisoned_by = scope:actor + } + scope:actor = { + is_ai = no + is_imprisoned = no + exists = court_position:master_warden_court_position + } + + } + + } + + is_valid_showing_failures_only = { + scope:recipient = { is_busy_in_events_localised = yes } #Prisoner + scope:recipient = { + custom_description = { + text = "currently_being_tortured" + NOT = { has_character_flag = is_being_tortured } + } + } + cannot_release_former_regent_whilst_old_regent_holds_power_trigger = { + PRISONER = scope:recipient + REGENT = scope:recipient.var:imprisoned_by_diarch + } + } + + on_accept = { + if = { + limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } } + scope:recipient = { remove_character_modifier = allowed_to_go_outside } + } + if = { + limit = { scope:recipient = { has_character_modifier = moldy_gruel_diet } } + scope:recipient = { remove_character_modifier = moldy_gruel_diet } + } + if = { + limit = { scope:recipient = { is_imprisoned_by = scope:actor } } + + scope:recipient = { + # Demand Conversion + if = { + limit = { + scope:demand_conversion = yes + } + demand_conversion_interaction_effect = yes + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:actor + } + + # Struggle Catalyst + if = { + limit = { + scope:actor = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_demanding_important_conversion + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_demanding_important_conversion + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_demanding_important_conversion + character = scope:actor + } + } + } + } + } + + # Banish Landed Character + if = { + limit = { + scope:banish = yes + scope:recipient = { is_landed = yes } + } + banish = yes + if = { + limit = { + NOT = { + scope:actor = { + has_banish_reason = scope:recipient + } + } + } + scope:actor = { add_tyranny = banishment_tyranny_gain } + } + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + # Banish Unlanded Character + else_if = { + limit = { + AND = { + scope:banish = yes + scope:recipient = { + is_landed = no + is_pool_character = no # It is possible for them to end up in the pool between the interaction being sent, and it being accepted + } + } + } + if = { + limit = { + this.gold > 0 + } + pay_short_term_gold = { target = scope:actor gold = this.gold } + } + if = { + limit = { + has_any_artifact = yes + } + every_character_artifact = { + set_owner = { + target = scope:actor + history = { + location = scope:recipient.location + actor = scope:recipient + recipient = scope:actor + type = stolen + } + } + scope:actor = { + if = { + limit = { + NOT = { has_variable = stolen_artifact } + } + set_variable = { + name = stolen_artifact + value = 1 + } + } + else = { + change_variable = { + name = stolen_artifact + add = 1 + } + } + } + } + } + banish = yes + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + # 'Banish' Pool Character + else_if = { + limit = { + AND = { + scope:banish = yes + scope:recipient = { + is_landed = no + is_pool_character = yes # They'll just leave for the pool + } + } + } + if = { + limit = { + this.gold > 0 + } + pay_short_term_gold = { target = scope:actor gold = this.gold } + } + add_opinion = { + modifier = banished_me + target = scope:actor + } + } + + # Recruit Character + if = { + limit = { + scope:recruit = yes + } + if = { + limit = { + scope:actor = { + culture = { + has_cultural_parameter = can_recruit_prisoners_easily + } + } + } + add_opinion = { + modifier = loyal_servant + target = scope:actor + } + scope:actor = { + if = { + limit = { + can_add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + add_hook = { + type = loyalty_hook + target = scope:recipient + } + } + } + } + else = { + add_opinion = { + modifier = demanded_recruitment + target = scope:actor + } + } + scope:actor = { + if = { + limit = { + AND = { + scope:actor.faith = { + has_doctrine = tenet_communal_possessions + } + scope:recipient = { + has_trait = peasant_leader + } + } + } + scope:actor = { + add_piety = medium_piety_gain + } + } + } + scope:actor = { + add_courtier = scope:recipient + } + } + + # Renounce Claims + if = { + limit = { + scope:renounce_claims = yes + } + add_opinion = { + modifier = demanded_claim_renouncement + target = scope:actor + } + scope:recipient = { + every_claim = { + explicit = yes + limit = { + save_temporary_scope_as = temp_claim + OR = { + holder = scope:actor + AND = { + exists = holder + NOT = { prev = { target_is_liege_or_above = scope:actor } } + holder = { target_is_liege_or_above = scope:actor } + } + scope:actor = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:temp_claim + } + } + } + } + scope:recipient = { remove_claim = prev } + } + } + } + + # Gain Hook + if = { + limit = { + scope:gain_hook = yes + } + add_opinion = { + modifier = demanded_hook + target = scope:actor + } + scope:actor = { + add_hook = { #Hook effect must match gain_hook option condition + target = scope:recipient + type = favor_hook + } + } + } + ############################################################### This is is execute if option + if = { + limit = { + scope:demand_strong_hook = yes + } + + add_opinion = { + modifier = demanded_hook + target = scope:actor + } + + scope:actor = { + duel = { + skill = intrigue + target = scope:recipient + 35 = { + desc = prisoner_release_expanded_strong_hook_option_success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + add_hook = { + target = scope:recipient + type = loyalty_hook + } + + } + + 65 = { + desc = prisoner_release_expanded_strong_hook_option_failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + send_interface_toast = { + title = prisoner_release_expanded_strong_hook_option_failure_toast_title + left_icon = scope:recipient + } + + } + } + + add_character_flag = { + flag = flag_mod_expanded_option_demand_strong_hook + months = 2 + } + } + } + + if = { + limit = { + scope:expanded_option_ransom = yes + } + scope:recipient = { + if = { + limit = { + scope:recipient.gold > 0 + } + pay_short_term_gold = { + target = scope:actor + gold = scope:recipient.gold + } + } + else = { + pay_short_term_gold = { + target = scope:actor + gold = 0 + } + } + } + scope:actor = { + add_character_flag = { + flag = flag_mod_expanded_option_seize_gold + months = 3 + } + } + } + + # Take Vows + if = { + limit = { + scope:take_vows = yes + } + send_child_to_clergy_effect = yes + } + + # Take Vows + if = { + limit = { + scope:become_executioner = yes + } + release_as_executioner_effect = yes + } + + # No Demands Added + if = { + limit = { + scope:expanded_option_ransom = no + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:become_executioner = no + scope:recruit = no + } + # Notification to the imprisoner + scope:actor = { + send_interface_toast = { + title = recipient_released_from_prison + left_icon = scope:recipient + scope:recipient = { + add_opinion = { + modifier = released_from_prison + target = scope:actor + } + } + } + scope:actor = { + add_dread = minor_dread_loss + stress_impact = { + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + } + } + # Struggle impact + if = { + limit = { + any_character_struggle = { + involvement = involved + OR = { + has_struggle_phase_parameter = release_prisoner_diff_culture_gives_prestige + has_struggle_phase_parameter = release_prisoner_diff_faith_gives_prestige + } + } + is_diff_faith_or_culture_trigger = { + CHAR = scope:recipient + STATUS = involved + } + } + add_prestige = medium_prestige_gain + } + + # Struggle Catalyst + if = { + limit = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_important + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_important + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_release_important + character = scope:actor + } + } + } + if = { + limit = { + fp3_struggle_involves_one_supporter_and_one_detractor = { + FIRST = scope:actor + SECOND = scope:recipient + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_supporter_detractor + CHAR = scope:recipient + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_release_supporter_detractor + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_release_supporter_detractor + character = scope:actor + } + log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_release_supporter_detractor } + } + } + } + + # If we're a clan (and not making any demands) this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_released_from_own_prison.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + else = { + scope:actor = { + trigger_event = char_interaction.0160 + } + } + + # If a child was imprisoned due to yearly_4021 they'll come back to say hi + if = { + limit = { + exists = var:marked_for_revenge_in_event_yearly_4021 + } + add_opinion = { + modifier = abandoned_me_opinion + target = var:marked_for_revenge_in_event_yearly_4021 + } + if = { + limit = { + var:marked_for_revenge_in_event_yearly_4021 = { + is_alive = yes + is_ai = no + } + } + save_scope_as = child + if = { + limit = { #Make sure they're sadistic! + NOT = { has_trait = sadistic } + number_of_personality_traits < personality_trait_limit + } + add_trait = sadistic + } + var:marked_for_revenge_in_event_yearly_4021 = { + add_character_flag = { #TO make sure that they don't get spammed about the release + flag = block_for_prison_release_notification + days = 10 + } + trigger_event = yearly.4022 + } + remove_variable = marked_for_revenge_in_event_yearly_4021 + } + } + + if = { + limit = { is_imprisoned = yes } + release_from_prison = yes + } + } + + # FP3 - If prisoner is important for war + scope:actor = { # FP3 + if = { + limit = { + exists = scope:recipient.house + any_character_war = { + using_cb = fp3_free_house_member_cb + is_defender = scope:actor + primary_attacker.house = scope:recipient.house + } + } + random_character_war = { + limit = { + using_cb = fp3_free_house_member_cb + is_defender = scope:actor + primary_attacker.house = scope:recipient.house + } + primary_attacker = { + hidden_effect = { + send_interface_message = { + type = event_war_good + title = lesson_war_final_notes_victory_step_1 + left_icon = scope:recipient + right_icon = scope:actor + + show_as_tooltip = { + release_from_prison = scope:recipient + add_prestige = major_prestige_gain + prev.primary_defender = { add_prestige = major_prestige_loss } + } + } + } + add_prestige = major_prestige_gain + prev.primary_defender = { add_prestige = major_prestige_loss } + } + } + } + } + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0161 + } + } + ############################################################ this is send option + send_option = { + flag = expanded_option_ransom + localization = "Seize Gold" + + is_shown = { + exists = scope:actor + scope:recipient.gold > 0 + scope:actor = { + NOT = { + has_character_flag = flag_mod_expanded_option_seize_gold + } + } + } + + is_valid = { + always = yes + } + + + } + + send_option = { + flag = demand_strong_hook + localization = "Demand Strong Hook" + + is_shown = { + exists = scope:actor + scope:actor = { + NOT = { + has_character_flag = flag_mod_expanded_option_demand_strong_hook + } + } + } + + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_vassal_of = scope:actor + AND = { + exists = liege + liege = scope:actor + } + } + } + } + scope:actor = { + can_add_hook = { + type = loyalty_hook #Matches the hook added in the on_accept + target = scope:recipient + } + } + } + + + + } + + send_option = { + flag = demand_conversion + localization = "RELEASE_DEMAND_CONVERSION" + is_shown = { + NOT = { scope:recipient.faith = scope:actor.faith } + } + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_vassal_of = scope:actor + } + } + } + + # Cannot ask Landed Rulers to convert if they're not your vassal + custom_description = { + text = cannot_demand_unsubordinate_landed_ruler_conversion + scope:recipient = { + trigger_if = { + limit = { + is_landed = yes + } + is_vassal_or_below_of = scope:actor + } + } + } + + # Cannot ask Religious Heads to convert + custom_description = { + text = cannot_demand_religious_head_conversion + NOT = { + AND = { + exists = scope:recipient.faith.religious_head + scope:recipient.faith.religious_head = scope:recipient + } + } + } + # Cannot ask Holy Order Master to convert + custom_description = { + text = cannot_demand_holy_order_master_conversion + NAND = { + exists = scope:recipient.faith + scope:recipient.faith = { + any_faith_holy_order = { leader = scope:recipient } + } + } + } + } + } + + send_option = { + flag = renounce_claims + localization = RELEASE_RENOUNCE_CLAIMS + is_shown = { + custom_description = { + text = "release_renounce_claims" + subject = scope:recipient + scope:recipient = { + any_claim = { + explicit = yes + save_temporary_scope_as = temp_claim + OR = { + holder = scope:actor + AND = { + NOT = { prev = { target_is_liege_or_above = scope:actor } } + trigger_if = { + limit = { + exists = holder + } + holder = { target_is_liege_or_above = scope:actor } + } + } + scope:actor = { + any_held_title = { + is_de_jure_liege_or_above_target = scope:temp_claim + } + } + } + } + } + } + } + current_description = { + desc = RELEASE_RENOUNCE_CLAIMS_DESC + } + } + + send_option = { + flag = banish + localization = "RELEASE_BANISH" + is_shown = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + AND = { + is_landed = no + is_ruler = no + gold > scope:actor.gold + gold > scope:actor.medium_gold_value + scope:actor.ai_greed > low_negative_ai_value + } + AND = { + is_landed = no + is_ruler = no + gold > 0 + scope:actor = { + has_banish_reason = scope:recipient + } + } + AND = { + is_landed = no + is_ruler = no + gold > 100 + scope:actor.ai_greed >= high_positive_ai_value + } + AND = { + scope:actor = { + has_banish_reason = scope:recipient + } + scope:actor = { + opinion = { + target = scope:recipient + value <= medium_negative_opinion + } + } + } + } + } + } + trigger_if = { + limit = { + scope:recipient = { + is_landed = yes + } + } + scope:recipient = { + is_vassal_of = scope:actor + } + } + trigger_else = { + scope:recipient = { + is_courtier_of = scope:actor + } + } + custom_description = { + text = "release_banish_invalid_take_vows" + object = scope:recipient + scope:take_vows = no + } + scope:recruit = no #Should be impossible to have both but just in case + NOT = { + scope:recipient = { + is_spouse_of = scope:actor + } + } + #scope:recipient = { + # trigger_if = { + # limit = { exists = liege } + # liege = scope:actor + # } + # is_pool_character = no + #} + } + } + + send_option = { + flag = gain_hook + localization = "RELEASE_GAIN_HOOK" + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + is_vassal_of = scope:actor + AND = { + exists = liege + liege = scope:actor + } + } + } + } + scope:actor = { + can_add_hook = { + type = favor_hook #Matches the hook added in the on_accept + target = scope:recipient + } + } + } + } + + + send_option = { + flag = take_vows + localization = "RELEASE_TAKE_VOWS" + is_shown = { + scope:actor.faith = { + has_doctrine_parameter = take_vows_active + } + } + is_valid = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + is_close_or_extended_family_of = scope:actor + NOT = { + is_heir_of = scope:actor + } + } + scope:actor = { + opinion = { + target = scope:recipient + value <= medium_negative_opinion + } + } + } + scope:recipient = { + custom_description = { + text = "release_take_vows_invalid_recruit" + object = scope:recipient + OR = { + is_courtier_of = scope:actor + scope:recruit = yes + } + } + + } + custom_description = { + text = "release_vows_invalid_not_your_faith" + object = scope:recipient + subject = scope:actor + trigger_if = { + limit = { + NOT = { scope:recipient.faith = scope:actor.faith } + } + scope:demand_conversion = yes + } + } + custom_description = { + text = "release_executioner_invalid_take_vows_condition" + object = scope:recipient + scope:become_executioner = no + } + custom_description = { + text = "release_banish_invalid_take_vows" + object = scope:recipient + scope:banish = no + } + scope:recipient = { + age >= 10 + NOR = { + has_trait = excommunicated + has_trait = devoted + has_trait = incapable + } + #Do they have the "wrong" marriage type? + NOR = { + custom_description = { + text = is_married_matrilineally + subject = scope:recipient + any_spouse = { + is_female = yes + matrilinear_marriage = yes + } + } + custom_description = { + text = is_married_patrilineally + subject = scope:recipient + any_spouse = { + is_male = yes + patrilinear_marriage = yes + } + } + custom_description = { + text = matrilinear_betrothal + subject = scope:recipient + exists = betrothed + betrothed = { + is_female = yes + matrilinear_betrothal = yes + } + } + custom_description = { + text = patrilinear_betrothal + subject = scope:recipient + exists = betrothed + betrothed = { + is_male = yes + patrilinear_betrothal = yes + } + } + } + } + } + } + + + send_option = { + flag = become_executioner + localization = "RELEASE_AS_EXECUTIONER" + is_shown = { + has_ep1_court_positions_dlc_trigger = yes + scope:actor = { + has_royal_court = yes + } + scope:recipient = { + is_adult = yes + } + } + is_valid = { + scope:actor = { + NOT = { employs_court_position = executioner_court_position } + } + scope:recipient = { + trigger_if = { + limit = { scope:recruit = yes } + custom_description = { + text = "release_executioner_invalid_recruit" + object = scope:recipient + scope:recruit = yes + } + } + trigger_else = { + is_courtier_of = scope:actor + } + + custom_description = { + text = "release_executioner_invalid_take_vows_condition" + object = scope:recipient + scope:take_vows = no + } + NOT = { is_spouse_of = scope:actor } + } + } + } + + send_option = { + flag = recruit + localization = "RELEASE_RECRUIT" + is_shown = { + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + scope:recipient = { + OR = { + has_relation_best_friend = scope:actor + has_relation_friend = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_secret_relation_lover = scope:actor + is_heir_of = scope:actor + } + } + } + scope:recipient = { + is_ruler = no + NOT = { is_courtier_of = scope:actor } + } + } + } + + send_options_exclusive = no + + auto_accept = { + scope:expanded_option_ransom = no + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + + ai_accept = { + base = 1 + modifier = { + add = 100 + desc = "WANTS_FREEDOM_REASON" + } + modifier = { + trigger = { + scope:expanded_option_ransom = yes + } + add = { + value = -20 + if = { + limit = { + gold > 200 + } + multiply = 2.5 + } + else_if = { + limit = { + AND = { + gold <= 200 + gold > 100 + } + } + multiply = 1.5 + } + + if = { + limit = { + has_trait = greedy + } + multiply = 3 + } + + } + desc = "GOLD_NEGATIVE_REASON" + } + modifier = { + trigger = { + scope:demand_strong_hook = yes + } + add = { + value = -65 + if = { + limit = { + scope:recipient = { + ai_vengefulness > 0 + } + } + subtract = 10 + } + } + desc = "GAIN_HOOK_NEGATIVE_REASON" + + } + modifier = { + trigger = { + scope:recipient = { ai_zeal <= 20 } + scope:demand_conversion = yes + } + add = -20 + desc = "CONVERSION_NEGATIVE_REASON" + } + modifier = { + trigger = { + scope:recipient = { ai_zeal > 20 } + scope:demand_conversion = yes + } + add = { + value = ai_zeal + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value = faith_astray_level + } + } + } + multiply = -1 + } + else = { + multiply = -2 + } + } + desc = "CONVERSION_NEGATIVE_REASON" + } + modifier = { + add = -25 + trigger = { + scope:renounce_claims = yes + ai_greed < 0 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:renounce_claims = yes + ai_greed >= 0 + ai_greed < 26 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:become_executioner = yes + # Sadists don't care about becoming an executioner + NOR = { + has_trait = sadistic + has_trait = callous + } + } + desc = "BECOME_EXECUTIONER_REASON" + } + modifier = { + add = -75 + trigger = { + scope:renounce_claims = yes + ai_greed >= 26 + ai_greed < 51 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -95 + trigger = { + scope:renounce_claims = yes + ai_greed >= 51 + } + desc = "RENOUNCE_CLAIMS_REASON" + } + modifier = { + add = -50 + trigger = { + scope:banish = yes + } + NOT = { + scope:actor = { + has_imprisonment_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + } + desc = "BANISH_NEGATIVE_REASON" + } + modifier = { # Legalistic tradition + add = legalistic_vassal_punishment_acceptance + trigger = { + scope:banish = yes + } + scope:actor = { + has_imprisonment_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + desc = tradition_legalistic_name + } + modifier = { + add = { + value = -50 + if = { + limit = { + scope:recipient = { + ai_vengefulness > 0 + } + } + subtract = ai_vengefulness + } + } + trigger = { + scope:gain_hook = yes + } + desc = "GAIN_HOOK_NEGATIVE_REASON" + } + modifier = { + add = -30 + trigger = { + scope:take_vows = yes + } + desc = "TAKE_VOWS_NEGATIVE_REASON" + } + modifier = { + add = -10 + trigger = { + scope:recruit = yes + NOT = { + scope:actor = { + culture = { + has_cultural_parameter = can_recruit_prisoners_easily + } + } + } + } + desc = "RECRUITMET_NEGATIVE_REASON" + } + # Struggle + modifier = { + trigger = { + scope:expanded_option_ransom = yes + scope:demand_strong_hook = no + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + scope:recipient = { + any_character_struggle = { + involvement = involved + } + } + scope:actor = { + any_character_struggle = { + involvement = involved + } + } + add = { + value = 0 + if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + has_character_flag = agenda_towards_escalation + } + } + add = -100 + } + else_if = { + limit = { + scope:recipient = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + } + } + add = 200 + } + } + } + } + + # AI + ai_targets = { + ai_recipients = prisoners + } + ai_frequency = 1 + + ai_potential = { + has_prisoners = yes + } + + ai_will_do = { + base = 0 + + modifier = { + add = 20 + scope:demand_conversion = yes + } + modifier = { + add = 100 + scope:demand_conversion = yes + scope:recipient = { + is_vassal_of = scope:actor + } + } + modifier = { + add = 30 + scope:renounce_claims = yes + } + modifier = { + add = 50 + scope:banish = yes + } + modifier = { + add = 30 + scope:take_vows = yes + } + modifier = { + add = 10 + scope:recruit = yes + } + modifier = { # Rivals can rot + add = -40 + scope:actor = { + NOT = { + has_trait = forgiving + } + } + scope:recipient = { + OR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + scope:recipient = { + is_spouse_of = scope:actor + exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor } + } + } + } + } + modifier = { # Rivals can rot FOREVER if vengeful + add = -100 + scope:actor = { + NOT = { + has_trait = forgiving + } + } + scope:actor.ai_vengefulness >= very_high_positive_ai_value + scope:recipient = { + OR = { + has_relation_rival = scope:actor + has_relation_nemesis = scope:actor + scope:recipient = { + is_spouse_of = scope:actor + exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor } + } + } + } + } + modifier = { # Compassionate characters don't want to keep children in their dungeon for too long + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= low_positive_ai_value + } + scope:recipient = { + is_adult = no + time_in_prison = { years > 1 } + } + } + modifier = { # Very compassionate characters tend to release prisoners + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= very_high_positive_ai_value + } + scope:recipient = { + time_in_prison = { years > 1 } + } + } + modifier = { # Somewhat compassionate characters tend to keep people in their dungeon for a while + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= medium_positive_ai_value + } + scope:recipient = { + is_landed = no + time_in_prison = { years > 3 } + } + } + modifier = { # Only truly discompassionate characters will have their dungeon full of hapless victims after 5 years + add = 10 + scope:actor = { + is_at_war = no + ai_compassion >= low_negative_ai_value + } + scope:recipient = { + is_landed = no + time_in_prison = { years > 5 } + } + } + modifier = { # Most AI characters will let family out... + add = 10 + scope:actor = { + is_at_war = no + OR = { + ai_compassion >= very_high_positive_ai_value + AND = { + ai_compassion >= high_negative_ai_value + opinion = { + target = scope:recipient + value >= low_negative_opinion + } + } + } + } + scope:recipient = { + time_in_prison = { years > 1 } + is_landed = no + is_close_family_of = scope:actor + } + } + modifier = { # Almost all will let their own children out + add = 40 + scope:actor = { + is_at_war = no + ai_compassion >= very_high_negative_ai_value + } + scope:recipient = { + is_landed = no + is_child_of = scope:actor + } + } + # Struggle + modifier = { + trigger = { + scope:demand_conversion = no + scope:renounce_claims = no + scope:banish = no + scope:gain_hook = no + scope:take_vows = no + scope:recruit = no + } + 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_release_important + } + has_character_flag = agenda_towards_escalation + } + } + add = -100 + } + else_if = { + limit = { + scope:actor = { + any_character_struggle = { + phase_has_catalyst = catalyst_release_important + } + NOT = { + ai_greed >= 25 + } + OR = { + ai_compassion > 50 + AND = { + ai_compassion > 0 + scope:recipient = { + time_in_prison = { years > 1 } + } + } + } + } + } + add = 200 + } + } + } + modifier = { # Family Feud + add = -50 + exists = scope:actor.house + exists = scope:recipient.house + scope:actor = { + house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + has_variable = house_feud_house + var:house_feud_house = scope:recipient.house + } + } + has_opinion_modifier = { + modifier = house_feud_opinion + target = scope:recipient.house.house_head + } + } + } + + evaluate_action_increasing_house_unity = { + VALUE = 100 + } + } +} diff --git a/master/common/court_positions/types/ambassador_of_culture_court_position.txt b/master/common/court_positions/types/ambassador_of_culture_court_position.txt new file mode 100644 index 0000000..a64845d --- /dev/null +++ b/master/common/court_positions/types/ambassador_of_culture_court_position.txt @@ -0,0 +1,157 @@ +ambassador_culture_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + } + + scaling_employer_modifiers = { + terrible = { + cultural_head_acceptance_gain_mult = 0.05 + } + poor = { + + cultural_head_acceptance_gain_mult = 0.10 + } + average = { + cultural_head_acceptance_gain_mult = 0.15 + } + good = { + cultural_head_acceptance_gain_mult = 0.20 + } + excellent = { + cultural_head_acceptance_gain_mult = 0.25 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + add = { + value = learning + multiply = 1.75 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 5 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = gregarious + } + add = { + value = 20 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = diplomat + } + add = { + value = 15 + desc = court_position_diplomat_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -30 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = -25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + add = { + value = -35 + desc = court_position_schemer_trait + } + + } + if = { + limit = { has_trait = murderer } + add = { + value = -50 + desc = court_position_murderer_trait + } + + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + always = yes + } + + +} diff --git a/master/common/court_positions/types/court_liaison_court_position.txt b/master/common/court_positions/types/court_liaison_court_position.txt new file mode 100644 index 0000000..f23761f --- /dev/null +++ b/master/common/court_positions/types/court_liaison_court_position.txt @@ -0,0 +1,159 @@ +court_liaison_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = minor_court_position_salary + } + + scaling_employer_modifiers = { + terrible = { + monthly_court_grandeur_change_mult = 0.1 + } + poor = { + monthly_court_grandeur_change_mult = 0.15 + } + average = { + monthly_court_grandeur_change_mult = 0.25 + court_grandeur_baseline_add = 1 + } + good = { + monthly_court_grandeur_change_mult = 0.35 + court_grandeur_baseline_add = 2 + } + excellent = { + monthly_court_grandeur_change_mult = 0.5 + court_grandeur_baseline_add = 3 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + if = { + limit = { + has_trait = generous + } + add = { + value = 25 + desc = court_position_generous_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -20 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 10 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = arrogant + } + add = { + value = 5 + desc = court_position_arrogant_trait + } + } + + if = { + limit = { + has_trait = diplomat + } + value = 50 + desc = court_position_diplomat_trait + } + + if = { + limit = { has_trait = education_diplomacy } + add = { + value = 4 + if = { + limit = { has_trait = education_diplomacy_2 } + add = 4 + } + else_if = { + limit = { has_trait = education_diplomacy_3 } + add = 8 + } + else_if = { + limit = { has_trait = education_diplomacy_4 } + add = 12 + } + else_if = { + limit = { has_trait = education_diplomacy_5 } + add = 22 + } + desc = education_diplomacy + } + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + valid_character = { + scope:employee = { + OR = { + is_vassal_of = scope:liege + is_courtier_of = scope:liege + } + } + } + + +} \ No newline at end of file diff --git a/master/common/court_positions/types/diplomatic_liaison_court_position.txt b/master/common/court_positions/types/diplomatic_liaison_court_position.txt new file mode 100644 index 0000000..1c00171 --- /dev/null +++ b/master/common/court_positions/types/diplomatic_liaison_court_position.txt @@ -0,0 +1,185 @@ +diplomatic_liaison_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + max_personal_schemes_add = 1 + } + + scaling_employer_modifiers = { + terrible = { + personal_scheme_power_mult = -0.1 + } + poor = { + + personal_scheme_power_mult = -0.05 + } + average = { + personal_scheme_power_mult = 0 + } + good = { + personal_scheme_power_mult = 0.05 + } + excellent = { + personal_scheme_power_mult = 0.1 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = diplomacy + multiply = 2 + max = 40 + desc = court_position_skill_diplomacy + } + + add = { + value = learning + multiply = 1.25 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = 5 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = gregarious + } + add = { + value = 20 + desc = court_position_gregarious_trait + } + } + if = { + limit = { + has_trait = diplomat + } + add = { + value = 15 + desc = court_position_diplomat_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = -30 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = -25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + add = { + value = -35 + desc = court_position_schemer_trait + } + + } + if = { + limit = { has_trait = murderer } + add = { + value = -50 + desc = court_position_murderer_trait + } + + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + OR = { + AND = { + diplomacy > 16 + NOT = { + OR = { + has_trait = callous + has_trait = deceitful + has_trait = schemer + has_trait = sadistic + has_trait = murderer + } + + } + } + AND = { + OR = { + has_trait = gregarious + has_trait = diplomat + has_trait = family_first + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + diplomacy > 9 + } + + } + + } + + +} \ No newline at end of file diff --git a/master/common/court_positions/types/master_of_intrigue_court_position.txt b/master/common/court_positions/types/master_of_intrigue_court_position.txt new file mode 100644 index 0000000..43c370f --- /dev/null +++ b/master/common/court_positions/types/master_of_intrigue_court_position.txt @@ -0,0 +1,155 @@ +master_of_intrigue_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = medium_court_position_salary + } + + base_employer_modifier = { + max_hostile_schemes_add = 1 + } + + scaling_employer_modifiers = { + terrible = { + hostile_scheme_power_mult = -0.1 + } + poor = { + + hostile_scheme_power_mult = -0.05 + } + average = { + hostile_scheme_power_mult = 0 + } + good = { + hostile_scheme_power_mult = 0.05 + } + excellent = { + hostile_scheme_power_mult = 0.1 + } + } + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + + add = { + value = intrigue + multiply = 2 + max = 40 + desc = court_position_skill_intrigue + } + + add = { + value = learning + multiply = 1.75 + max = 35 + desc = court_position_skill_learning + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = -25 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = brave + } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { + has_trait = just + } + add = { + value = -20 + desc = court_position_just_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = 10 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = deceitful + } + add = { + value = 25 + desc = court_position_deceitful_trait + } + } + + if = { + limit = { + has_trait = schemer + } + value = 50 + desc = court_position_schemer_trait + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + AND = { + OR = { + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + intrigue > 11 + } + + } + + +} \ No newline at end of file diff --git a/master/common/court_positions/types/master_warden_court_position.txt b/master/common/court_positions/types/master_warden_court_position.txt new file mode 100644 index 0000000..7f3072e --- /dev/null +++ b/master/common/court_positions/types/master_warden_court_position.txt @@ -0,0 +1,157 @@ +master_warden_court_position = { + max_available_positions = 1 + category = court_position_category_royal + minimum_rank = kingdom + + valid_position = { + highest_held_title_tier >= tier_kingdom + } + + opinion = { + value = regular_court_position_opinion + } + revoke_cost = { + prestige = minor_court_position_prestige_cost + } + salary = { + round = no + gold = minor_court_position_salary + } + + scaling_employer_modifiers = { + terrible = { + monthly_county_control_change_add = 0.0 + } + poor = { + monthly_county_control_change_add = 0.0 + } + average = { + monthly_county_control_change_add = 0.05 + } + good = { + monthly_county_control_change_add = 0.1 + } + excellent = { + monthly_county_control_change_add = 0.15 + } + } + + custom_employer_modifier_description = master_warden_employer_custom_effect_description + + modifier = { + monthly_prestige = minor_court_position_prestige_salary + } + + on_court_position_received = { + basic_gained_court_position_effect = yes + + } + on_court_position_revoked = { + basic_revoked_court_position_effect = yes + + } + on_court_position_invalidated = { + basic_invalidated_court_position_effect = yes + + } + + candidate_score = { + value = 0 + } + + 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 = 1 + add = { + value = intrigue + multiply = 1.75 + max = 40 + desc = court_position_skill_intrigue + } + add = { + value = martial + multiply = 1.75 + max = 40 + desc = court_position_skill_martial + } + add = { + value = prowess + max = 20 + desc = court_position_skill_prowess + } + if = { + limit = { + has_trait = compassionate + } + add = { + value = -25 + desc = court_position_compassionate_trait + } + } + if = { + limit = { + has_trait = brave + } + add = { + value = 5 + desc = court_position_brave_trait + } + } + if = { + limit = { + has_trait = just + } + add = { + value = 15 + desc = court_position_just_trait + } + } + if = { + limit = { + has_trait = callous + } + add = { + value = 10 + desc = court_position_callous_trait + } + } + if = { + limit = { + has_trait = torturer + } + add = { + value = 25 + desc = court_position_torturer_trait + } + } + + add = court_position_aptitude_family_business_value + add = court_position_aptitude_low_penalty_value + } + + is_shown = { + OR = { + AND = { + OR = { + prowess > 15 + martial > 11 + intrigue > 15 + dread > 35 + } + 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 + dread > 35 + prowess > 15 + } + } + } + } + + +} \ No newline at end of file diff --git a/master/common/culture/cultures/m_aesir_norse.txt b/master/common/culture/cultures/m_aesir_norse.txt new file mode 100644 index 0000000..480808a --- /dev/null +++ b/master/common/culture/cultures/m_aesir_norse.txt @@ -0,0 +1,45 @@ +aesir_norse = { + color = norse + # T_ 222 þ 254 Ð 208 T_ 240 E_ + + ethos = ethos_bureaucratic + heritage = heritage_north_germanic + language = language_norse + martial_custom = martial_custom_male_only + traditions = { + tradition_things + tradition_scandinavian_development + tradition_familial_bonds + } + + # FP1 Traditions + dlc_tradition = { + trait = tradition_fp1_coastal_warriors + requires_dlc_flag = the_northern_lords + fallback = tradition_hird + } + dlc_tradition = { + trait = tradition_fp1_performative_honour + requires_dlc_flag = the_northern_lords + fallback = tradition_poetry + } + dlc_tradition = { + trait = tradition_fp1_northern_stories + requires_dlc_flag = the_northern_lords + fallback = tradition_runestones + } + + name_list = name_list_norse + + coa_gfx = { norse_coa_gfx western_coa_gfx } + building_gfx = { norse_building_gfx } + clothing_gfx = { fp1_norse_clothing_gfx northern_clothing_gfx } + unit_gfx = { norse_unit_gfx } + + ethnicities = { + 70 = caucasian_northern_blond + 15 = caucasian_northern_ginger + 10 = caucasian_northern_brown_hair + 5 = caucasian_northern_dark_hair + } +} \ No newline at end of file diff --git a/master/common/culture/cultures/m_neo_mongolic.txt b/master/common/culture/cultures/m_neo_mongolic.txt new file mode 100644 index 0000000..1411a4c --- /dev/null +++ b/master/common/culture/cultures/m_neo_mongolic.txt @@ -0,0 +1,26 @@ +neo_mongol = { + color = mongol + + ethos = ethos_bureaucratic + heritage = heritage_mongolic + language = language_mongolic + martial_custom = martial_custom_male_only + traditions = { + tradition_horse_lords + tradition_hard_rule + tradition_dwellers_of_the_steppe + tradition_steppe_tolerance + } + + + name_list = name_list_mongol + + coa_gfx = { mongol_coa_gfx steppe_coa_gfx } + building_gfx = { steppe_building_gfx } + clothing_gfx = { mongol_clothing_gfx } + unit_gfx = { mongol_unit_gfx } + + ethnicities = { + 10 = asian + } +} \ No newline at end of file diff --git a/master/common/culture/traditions/m_mcul_traditions.txt b/master/common/culture/traditions/m_mcul_traditions.txt new file mode 100644 index 0000000..adc4563 --- /dev/null +++ b/master/common/culture/traditions/m_mcul_traditions.txt @@ -0,0 +1,618 @@ +# steppe tradition +tradition_dwellers_of_the_steppe = { + category = realm + + layers = { + 0 = steward + 1 = indian/indian2.dds + 4 = steppe.dds + } + + can_pick = { + custom_tooltip = { + text = culture_in_steppe_terrain_desc + any_culture_county = { + any_county_province = { + terrain = steppe + } + } + } + } + + parameters = { + hunting_traits_more_valued = yes + pastures_building_bonuses = yes + } + + character_modifier = { + men_at_arms_recruitment_cost = 0.15 + men_at_arms_maintenance = 0.05 + knight_limit = 2 + steppe_travel_danger = steppe_medium_danger_reduction + } + + county_modifier = { + steppe_development_growth_factor = 0.2 + steppe_construction_gold_cost = -0.15 + steppe_levy_size = 0.15 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + culture_pillar:ethos_egalitarian = { is_in_list = traits } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = culture_not_egalitarian + } + } + if = { + limit = { + NOT = { + any_culture_county = { + count >= 5 + any_county_province = { + terrain = steppe + } + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = culture_in_steppe_terrain_count_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + if = { + limit = { + NOT = { + scope:character = { + any_sub_realm_county = { + count >= 2 + culture = scope:character.culture + any_county_province = { + terrain = steppe + } + } + } + } + } + multiply = 0 + } + if = { + limit = { + scope:character = { + government_has_flag = government_is_tribal + } + } + multiply = 0 + } + if = { + limit = { + scope:character = { + any_sub_realm_county = { + count >= 5 + culture = scope:character.culture + any_county_province = { + terrain = steppe + } + } + } + } + add = 100 + } + + } +} +# raid tradition +tradition_ritualistic_reaving = { + category = ritual + + layers = { + 0 = intrigue + 1 = mediterranean + 4 = battle.dds + } + + can_pick = { + scope:character.culture = { + custom_tooltip = { + text = m_already_has_raid_tradition_desc + NOT = { has_cultural_tradition = tradition_practiced_pirates } + } + custom_tooltip = { + text = m_has_pacifist_tradition_desc + NOT = { has_cultural_tradition = tradition_pacifism } + } + } + scope:character.faith = { + custom_tooltip = { + text = m_has_pacifist_tenet_desc + NOR = { + has_doctrine = tenet_dharmic_pacifism + has_doctrine = tenet_pacifism + } + } + } + + } + + parameters = { + culture_can_raid_over_land_even_if_feudal_no_restrictions = yes + culture_can_raid_at_sea_even_if_feudal_no_restrictions = yes + } + + character_modifier = { + siege_phase_time = -0.10 + movement_speed_land_raiding = 0.20 + max_loot_mult = 0.25 + development_growth_factor = -0.10 + feudal_government_tax_contribution_mult = -0.15 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + multiply = 1.5 + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # Ethos requirement. + if = { + limit = { + NOT = { + culture_pillar:ethos_bellicose = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_bellicose_desc + } + } + # Government is Feudal or Clan Extra Cost + if = { + limit = { + scope:character = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = m_govenment_incompatible_penalty_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + if = { + limit = { # Should be rare for most cultures + has_cultural_pillar = heritage_berber + } + add = 5 + } + } +} +# learning tradition +tradition_aptitudinal_teachings = { + category = societal + + layers = { + 0 = intrigue + 1 = mediterranean + 4 = aptitudinal_teachings.dds + } + + can_pick = { + custom_description = { + text = m_has_incompatible_alexandrian_catechism_tenet + scope:character.faith = { + NOT = { doctrine:tenet_alexandrian_catechism = { is_in_list = selected_doctrines } } + } + + } + } + + character_modifier = { + learning = 3 + monthly_learning_lifestyle_xp_gain_mult = 0.2 + faith_creation_piety_cost_mult = 0.20 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + multiply = 2 + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # Ethos requirement. + if = { + limit = { + NOR = { + culture_pillar:ethos_bureaucratic = { is_in_list = traits } + culture_pillar:ethos_spiritual = { is_in_list = traits } + culture_pillar:ethos_egalitarian = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = not_bureaucratic_spiritual_or_egalitarian_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } +} +# dread ruling tradition +tradition_hard_rule = { + category = realm + + layers = { + 0 = martial + 1 = mena + 2 = hard_rule_layer2.dds + 3 = 3.dds + 4 = hard_rule.dds + } + + can_pick = { + + custom_tooltip = { + text = m_surpasses_dread_threshold + scope:character.dread > 35 + } + custom_tooltip = { + text = cannot_have_tradition_court_eunuchs + NOT = { culture_tradition:tradition_court_eunuchs = { is_in_list = traits } } + } + custom_tooltip = { + text = cannot_have_tradition_merciful_blindings + NOT = { culture_tradition:tradition_merciful_blindings = { is_in_list = traits } } + } + } + + parameters = { + can_demand_higher_ransoms_from_lower_tiers = yes + can_recruit_prisoners_easily = yes + pardoning_gives_loyalty = yes + can_blind_prisoners = yes + can_castrate_prisoners = yes + } + character_modifier = { + vassal_levy_contribution_mult = -0.10 + vassal_opinion = -5 + short_reign_duration_mult = 0.3 + hostile_scheme_power_mult = 0.2 + dread_baseline_add = 20 + + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_courtly = { is_in_list = traits } + culture_pillar:ethos_stoic = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_stoic_or_courtly_desc + } + } + if = { + limit = { scope:character.dread < 75 } + add = { + value = tradition_incompatible_ethos_penalty + desc = m_less_than_high_dread_desc + } + } + if = { + limit = { scope:character.dread >= 75 } + add = { + value = tradition_incompatible_ethos_penalty + multiply = -1 + divide = 2 + desc = m_high_dread_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { value = 0 } +} +# viking development +tradition_scandinavian_development = { # Need to update values + category = regional + + layers = { + 0 = intrigue + 1 = mena/mena3.dds + 4 = scand_dev.dds + } + + is_shown = { + has_cultural_pillar = heritage_north_germanic + } + + can_pick = { + custom_tooltip = { + text = m_scandinavian_innovation_requirement + has_innovation = innovation_development_01 + } + } + + parameters = { + can_appoint_court_gardener = yes + can_enact_high_partition_succession_law = yes + coastal_agriculture_building_bonuses = yes + development_gain_on_building_complete = yes + } + + character_modifier = { + development_growth_factor = 0.05 + construction_time = 0.05 + holding_build_gold_cost = 0.15 + character_capital_county_monthly_development_growth_add = 0.2 + } + + county_modifier = { + taiga_development_growth_factor = 0.15 + mountains_development_growth_factor = 0.15 + taiga_construction_gold_cost = 0.05 + taiga_levy_size = 0.10 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_communal = { is_in_list = traits } + culture_pillar:ethos_bureaucratic = { is_in_list = traits } + culture_pillar:ethos_stoic = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + multiply = 2 + desc = not_communal_bureaucratic_or_stoic_desc + } + } + if = { + limit = { + NOT = { + any_culture_county = { + any_county_province = { + has_building_or_higher = royal_forest_01 + } + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = m_no_reserve_penalty + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } +} +# religious tradition +tradition_synergenistic_faith = { + category = ritual + + layers = { + 0 = learning + 1 = mena/mena1.dds + 4 = temple.dds + } + + can_pick = { + custom_tooltip = { + any_culture_county = { + percent >= 0.2 + any_county_province = { + has_holding_type = church_holding + } + } + text = 20_percent_churches + } + } + + parameters = { + extra_piety_from_temple_construction = yes + renown_from_temple_construction = yes + more_fervor_on_church_construction = yes + + } + character_modifier = { + monthly_learning_lifestyle_xp_gain_mult = 0.05 + monthly_piety_from_buildings_mult = 0.10 + faith_conversion_piety_cost_mult = 0.75 + church_holding_build_gold_cost = 0.15 + monthly_piety = 1 + } + + cost = { + prestige = { + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + if = { + limit = { + NOR = { + culture_pillar:ethos_courtly = { is_in_list = traits } + culture_pillar:ethos_communal = { is_in_list = traits } + culture_pillar:ethos_spiritual = { is_in_list = traits } + } + } + add = { + value = tradition_incompatible_ethos_penalty + desc = not_courtly_communal_or_spiritual_desc + } + } + if = { + limit = { + trigger_if = { + limit = { + scope:character = { + is_ai = no + } + } + NOT = { + any_ruler = { + count >= 5 + culture = prev + primary_title.tier >= tier_county + faith = scope:character.faith + has_trait = zealous + } + } + } + trigger_else = { + always = no + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + desc = rulers_with_same_faith_zealous_desc + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + ai_will_do = { + value = 0 + } + +} +# Familial tradition +tradition_familial_bonds = { + category = societal + + layers = { + 0 = intrigue + 1 = western/western2.dds + 4 = ritualised_friendship.dds + } + + can_pick = { + # Must have at least one friend. No friendless losers. Especially you, Nick. + custom_tooltip = { + text = need_at_least_one_friend + + culture_head ?= { + any_relation = { + type = friend + count >= 1 + } + } + } + } + + parameters = { + automatic_befriend_access = yes + may_propose_best_friendship = yes + may_select_friendship_synergy_bonus = yes + close_family_better_councillors = yes + close_family_better_court_positions = yes + landing_house_members_gives_renown = yes + renown_from_feasts = yes + penalty_for_revoking_titles_from_close_family = yes + } + + character_modifier = { + intrigue = -1 + hostile_scheme_power_mult = -0.05 + dynasty_opinion = 10 + } + + cost = { + prestige = { + # Base cost. + add = { + value = tradition_base_cost + desc = BASE + format = "BASE_VALUE_FORMAT" + } + # No ethos requirement: everyone likes friends. + # Need at least ten friends. + if = { + limit = { exists = culture_head } + if = { + limit = { + culture_head = { + any_relation = { + type = friend + count < 5 + } + } + } + add = { + value = tradition_unfulfilled_criteria_penalty + multiply = 2.5 + desc = m_guess_you_need_more_friends_desc + } + } + } + + multiply = tradition_replacement_cost_if_relevant + } + } + + ai_will_do = { + value = 0 + } + +} \ No newline at end of file diff --git a/master/common/decisions/m_asgard_decision.txt b/master/common/decisions/m_asgard_decision.txt new file mode 100644 index 0000000..36426a7 --- /dev/null +++ b/master/common/decisions/m_asgard_decision.txt @@ -0,0 +1,54 @@ +m_asgard_decision = { + decision_group_type = major + + sort_order = 0 + + is_shown = { + is_playable_character = yes + + AND = { + has_title = title:b_oslosyslar + title:b_oslosyslar.title_province = root.capital_province + } + + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_discovered_great_hall_of_asgard + } + } + + } + + picture = { + reference = "gfx/interface/illustrations/decisions/asgard_decision_image.dds" + } + + cost = { + gold = 1000 + prestige = 2500 + piety = 1500 + } + + effect = { + + save_scope_as = asgard_founder + + trigger_event = { + id = norse_asgard_event.0001 + } + + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_discovered_great_hall_of_asgard + } + show_as_tooltip = { + custom_tooltip = "You may find something special within the province." + } + hidden_effect = { + m_hall_of_asgard_effect = yes + } + + } + +} \ No newline at end of file diff --git a/master/common/decisions/m_dynasty_baliffs_decision.txt b/master/common/decisions/m_dynasty_baliffs_decision.txt new file mode 100644 index 0000000..111198e --- /dev/null +++ b/master/common/decisions/m_dynasty_baliffs_decision.txt @@ -0,0 +1,111 @@ +########################################################################################## +# Bailiff Decision: +# Variant of the FP3 Clan House Unity Bailiff Decision -- open to all governments. +# Developer: DevZero +########################################################################################## + +m_dynasty_bailiffs_decision = { + sort_order = 100 + picture = { + reference = "gfx/interface/illustrations/decisions/fp3/harmonious.dds" + } + desc = m_dynasty_bailiff_decision_desc + cooldown = { years = 20 } + decision_group_type = decisions + + is_shown = { + is_playable_character = yes + exists = dynasty + exists = house + } + + is_valid = { + is_dynasty_head = yes + } + + is_valid_showing_failures_only = { + is_house_head = yes + dynasty = { + NOT = { has_dynasty_modifier = m_dynasty_bailiff_decision_modifier } + } + # Must have more than 10 landed house members - to coincide with max version of unity decision -- also, this is more potent as it effects every dynasty member -- including cadets + custom_tooltip = { + text = "Must have a minimum of 10 landed house members" + number_of_landed_house_members_value >= 10 + } + } + + cost = { + gold = { + value = medium_gold_value + } + piety = { + value = unity_major_decision_piety_cost + add = { + value = 20 + multiply = { + value = number_of_landed_house_members_value + subtract = 1 # We don't want to add any extra for the first ruler + } + } + } + prestige = { + value = minor_prestige_value + add = { + value = 5 + multiply = { + value = number_of_landed_house_members_value + subtract = 1 + } + } + } + } + + effect = { + hidden_effect = { + random_list = { + 20 = { + trigger_event = { + id = m_dynasty_bailiff.0001 + days = { 4 13 } + } + } + 20 = { + trigger_event = { + id = m_dynasty_bailiff.0002 + days = { 4 13 } + } + } + 20 = { + trigger_event = { + id = m_dynasty_bailiff.0003 + days = { 4 13 } + } + } + 20 = { + trigger_event = { + id = m_dynasty_bailiff.0004 + days = { 4 13 } + } + } + 20 = { + trigger_event = { + id = m_dynasty_bailiff.0005 + days = { 4 13 } + } + } + } + } + + show_as_tooltip = { + dynasty = { + add_dynasty_modifier = { + modifier = m_dynasty_bailiff_decision_modifier + months = 50 + } + } + } + } + + +} \ No newline at end of file diff --git a/master/common/decisions/m_fervor_decision.txt b/master/common/decisions/m_fervor_decision.txt new file mode 100644 index 0000000..5b34196 --- /dev/null +++ b/master/common/decisions/m_fervor_decision.txt @@ -0,0 +1,57 @@ +m_fervor_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" + } + + sort_order = 74 + decision_group_type = decisions + cooldown = { years = 5 } + + is_shown = { + is_playable_character = yes + } + + is_valid_showing_failures_only = { + piety_level >= high_piety_level + } + + cost = { + prestige = { + value = 50 + add = minor_prestige_value + divide = high_piety_level + add = minor_prestige_value + } + piety = { + value = 500 + add = minor_piety_value + divide = 1.15 + add = medium_piety_value + } + } + + effect = { + + if = { + limit = { + exists = faith.religious_head + faith.religious_head = root + } + faith = { + change_fervor = { + value = 5 + desc = "Head of Faith Stoked Religious Fervor" + } + } + + } + else = { + faith = { + change_fervor = { + value = 2 + desc = "Faithful Adherent Stoked Religious Fervor" + } + } + } + } +} \ No newline at end of file diff --git a/master/common/decisions/m_guardians_of_valhala_recurrent_decision.txt b/master/common/decisions/m_guardians_of_valhala_recurrent_decision.txt new file mode 100644 index 0000000..ad862fd --- /dev/null +++ b/master/common/decisions/m_guardians_of_valhala_recurrent_decision.txt @@ -0,0 +1,78 @@ +m_guardians_of_valhala_recurrent_decision = { + major = yes + cooldown = { years = 10 } + + sort_order = 0 + decision_group_type = decisions + + is_shown = { + is_playable_character = yes + dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + + is_valid = { + prestige_level >= 4 + + } + + picture = { + reference = "gfx/interface/illustrations/decisions/asgard_decision_image.dds" + } + + cost = { + gold = 250 + prestige = 5000 + piety = 500 + } + + effect = { + hidden_effect = { + trigger_event = { + id = norse_recurrent_warrior_event.0001 + days = { 1 3 } + } + } + + # Effect has been given to event. + # spawn_army = { + # men_at_arms = { + # type = guardians_of_valhalla + # stacks = 10 + # } + # men_at_arms = { + # type = guardians_of_valhalla + # stacks = 10 + # } + # men_at_arms = { + # type = trebuchet + # stacks = 5 + # } + # men_at_arms = { + # type = pikemen + # stacks = 10 + # } + # men_at_arms = { + # type = pikemen + # stacks = 5 + # } + # men_at_arms = { + # type = jomsviking_pirates + # stacks = 10 + # } + # men_at_arms = { + # type = jomsviking_pirates + # stacks = 5 + # } + + # uses_supply = no + # location = capital_province + # origin = capital_province + # inheritable = yes + # name = norse_army_host + # } + + } + +} \ No newline at end of file diff --git a/master/common/decisions/m_integrate_norse_christians_decision.txt b/master/common/decisions/m_integrate_norse_christians_decision.txt new file mode 100644 index 0000000..752189a --- /dev/null +++ b/master/common/decisions/m_integrate_norse_christians_decision.txt @@ -0,0 +1,50 @@ +m_integrate_chrisitian_norse_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" + } + + sort_order = 0 + decision_group_type = major + is_shown = { + is_playable_character = yes + is_landed = yes + exists = dynasty + faith = { fp1_valid_norse_faith_for_jomsvikings_trigger = yes } + + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_integrated_norse_christians + } + } + } + + is_valid_showing_failures_only = { + piety_level >= 4 + } + + cost = { + + piety = { + value = 500 + add = minor_piety_value + divide = 0.85 + add = medium_piety_value + } + } + + effect = { + faith = { + add_doctrine = special_doctrine_ecumenical_christian + } + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_integrated_norse_christians + } + hidden_effect = { + trigger_event = { + id = m_integrate_chrisitian_norse_event.0001 + } + } + } +} \ No newline at end of file diff --git a/master/common/decisions/m_mongol_grand_yurt_decision.txt b/master/common/decisions/m_mongol_grand_yurt_decision.txt new file mode 100644 index 0000000..9340626 --- /dev/null +++ b/master/common/decisions/m_mongol_grand_yurt_decision.txt @@ -0,0 +1,56 @@ +m_mongol_grand_yurt_decision = { + major = yes + sort_order = 94 + decision_group_type = major + picture = { + reference = "gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds" + } + + is_shown = { + is_playable_character = yes + has_title = title:b_karabalgasun + + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_built_great_yurt + } + } + + } + + is_valid = { + has_trait = greatest_of_khans + } + + cost = { + prestige = 2500 + } + + effect = { + m_grand_yurt_mongol_effect = yes + + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_built_great_yurt + } + + show_as_tooltip = { + dynasty = { + add_dynasty_modifier = { + modifier = m_mongol_grand_yurt_recurrent_modifier + } + } + } + + hidden_effect = { + dynasty = { + add_dynasty_modifier = { + modifier = m_mongol_grand_yurt_recurrent_modifier + } + } + } + + + } +} \ No newline at end of file diff --git a/master/common/decisions/m_mongol_recurrent_decision.txt b/master/common/decisions/m_mongol_recurrent_decision.txt new file mode 100644 index 0000000..92f2f15 --- /dev/null +++ b/master/common/decisions/m_mongol_recurrent_decision.txt @@ -0,0 +1,40 @@ +m_mongol_grand_yurt_recurrent_decision = { + major = yes + cooldown = { years = 15 } + + sort_order = 0 + decision_group_type = decisions + + is_shown = { + is_playable_character = yes + dynasty = { + has_dynasty_modifier = m_mongol_grand_yurt_recurrent_modifier + } + } + + is_valid = { + prestige_level >= 4 + + } + + picture = { + reference = "gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds" + } + + cost = { + gold = 500 + prestige = 3500 + piety = 250 + } + + effect = { + hidden_effect = { + trigger_event = { + id = m_mongol_recurrent_event.0001 + days = { 1 3 } + } + } + + } + +} \ No newline at end of file diff --git a/master/common/defines/better_renown_retweak.txt b/master/common/defines/better_renown_retweak.txt new file mode 100644 index 0000000..ce59dc8 --- /dev/null +++ b/master/common/defines/better_renown_retweak.txt @@ -0,0 +1,5 @@ +NDynasty = { + MAX_MONTHLY_PRESTIGE_GAIN_FROM_ALIVE_MEMBERS = 20000 # Cap the above number + MONTHLY_PRESTIGE_GAIN_MULT_FOR_VASSALS_OF_SAME_DYNASTY = 0.15 # Dynasty members who are vassal of below of someone of the same dynasty have their prestige contribution multiplied with this. 0 disables their prestige contribution entirely + MONTHLY_PRESTIGE_GAIN_MULT_FOR_VASSALS_OF_SAME_DYNASTY_SPOUSE = 0.05 # Dynasty members whose spouse are vassal of below of someone of the same dynasty have their prestige contribution multiplied with this. 0 disables their prestige contribution entirely +} \ No newline at end of file diff --git a/master/common/dynasty_legacies/m_legacies.txt b/master/common/dynasty_legacies/m_legacies.txt new file mode 100644 index 0000000..8f37819 --- /dev/null +++ b/master/common/dynasty_legacies/m_legacies.txt @@ -0,0 +1,83 @@ +########################################################### +# Legacy Perks Expanded +# by dev.main +########################################################### + +# Expand fp2 legacy tracks to all dynasties +fp2_urbanism_legacy_track = { + is_shown = { + has_dlc_feature = the_fate_of_iberia + dynasty = { + OR = { + dynast = { + NOT = { + culture = { + has_cultural_pillar = heritage_iberian + } + } + } + has_dynasty_perk = fp2_coterie_legacy_1 + } + } + + } +} + +fp2_coterie_legacy_track = { + is_shown = { + has_dlc_feature = the_fate_of_iberia + dynasty = { + OR = { + dynast = { + NOT = { + culture = { + has_cultural_pillar = heritage_iberian + } + } + } + has_dynasty_perk = fp2_coterie_legacy_1 + } + } + } +} + +# New dynasty tracks +m_vikingr_legacy_track = { + is_shown = { + dynasty = { + OR = { + dynast = { + culture = { + OR = { + this = culture:norse + any_parent_culture_or_above = { + this = culture:norse + } + } + } + } + has_dynasty_perk = m_vikingr_legacy_1 + } + } + } +} + +m_genghis_of_the_steppe_legacy_track = { + is_shown = { + dynasty = { + OR = { + dynast = { + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_tibetan + has_cultural_tradition = tradition_dwellers_of_the_steppe + } + } + } + has_dynasty_perk = m_ghengis_of_the_steppe_legacy_1 + } + } + } +} \ No newline at end of file diff --git a/master/common/dynasty_perks/m_dynasty_perks.txt b/master/common/dynasty_perks/m_dynasty_perks.txt new file mode 100644 index 0000000..24bf82f --- /dev/null +++ b/master/common/dynasty_perks/m_dynasty_perks.txt @@ -0,0 +1,321 @@ +########################################################### +# Legacy Perks Expanded +# by devzero +########################################################### +# Expand fp2 legacies to all dynasties + +# URBANISM LEGACIES +fp2_urbanism_legacy_1 = { # Flourishing Cities + legacy = fp2_urbanism_legacy_track + + effect = { + # Each city increases development rate of their county + custom_description_no_bullet = { text = fp2_urbanism_legacy_1_effect } + } + + + ai_chance = { + value = 0 + if = { + limit = { + culture = { + OR = { + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_arabic + } + } + } + add = 10 + } + if = { + limit = { + can_start_new_legacy_track_trigger = no + } + multiply = 0 + } + } +} + +fp2_urbanism_legacy_2 = { # Republican Teaching + legacy = fp2_urbanism_legacy_track + + # Chance to gain an extra traits for members of the dynasty or children educated by the members of the dynasty + + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_2_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_3 = { #Replace by > faster and cheaper city development + legacy = fp2_urbanism_legacy_track + + + character_modifier = { + city_holding_build_speed = -0.1 + city_holding_build_gold_cost = -0.1 + city_holding_holding_build_speed = -0.1 + city_holding_holding_build_gold_cost = -0.1 + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_4 = { #Replace by > get prestige + cool character on dev level gain + legacy = fp2_urbanism_legacy_track + + # Gain Prestige and guest when completing a building + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_4_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_urbanism_legacy_5 = { #Replace by ??? + legacy = fp2_urbanism_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_urbanism_legacy_5_effect } + } + + ai_chance = { + value = 100 + } +} + +# COTERIE LEGACIES + +fp2_coterie_legacy_1 = { # Inner Circle + legacy = fp2_coterie_legacy_track + + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_1_effect } + } + + ai_chance = { + value = 0 + if = { + limit = { + culture = { + OR = { + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_arabic + } + } + } + add = 10 + } + if = { + limit = { + can_start_new_legacy_track_trigger = no + } + multiply = 0 + } + } +} + +fp2_coterie_legacy_2 = { # House bonds + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_2_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_coterie_legacy_3 = { # Unity + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_3_effect } + } + + character_modifier = { + dynasty_house_opinion = 10 + } + + ai_chance = { + value = 100 + } +} +fp2_coterie_legacy_4 = { # Eternal Trust + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_4_effect } + } + + ai_chance = { + value = 100 + } +} + +fp2_coterie_legacy_5 = { # Pragmatic Roots + legacy = fp2_coterie_legacy_track + + effect = { + custom_description_no_bullet = { text = fp2_coterie_legacy_5_effect } + } + + ai_chance = { + value = 100 + } +} + +# New dynasty perks +m_vikingr_legacy_1 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + negative_inactive_inheritance_chance = -0.20 + positive_inactive_inheritance_chance = 0.20 + genetic_trait_strengthen_chance = 0.2 + positive_random_genetic_chance = 0.35 + dynasty_opinion = 20 + } + + ai_chance = { value = 0 } +} + +m_vikingr_legacy_2 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + domain_limit = 1 + vassal_limit = 20 + development_growth = 0.15 + short_reign_duration_mult = -0.25 + } + ai_chance = { value = 0 } +} + +m_vikingr_legacy_3 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + knight_limit = 3 + knight_effectiveness_mult = 0.50 + men_at_arms_limit = 2 + movement_speed = 0.25 + } + + effect = { + dynasty = { + add_dynasty_modifier = { + modifier = fp1_legacy_of_piracy_modifier + } + } + } + + ai_chance = { value = 0 } +} + +m_vikingr_legacy_4 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + monthly_lifestyle_xp_gain_mult = 0.35 + stewardship = 3 + learning = 2 + } + ai_chance = { value = 0 } +} + +m_vikingr_legacy_5 = { + legacy = m_vikingr_legacy_track + + character_modifier = { + general_opinion = 15 + max_personal_schemes_add = 1 + max_hostile_schemes_add = 1 + } + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_1 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + dread_baseline_add = 15 + dread_decay_mult = -0.15 + dread_per_tyranny_add = 1 + cowed_vassal_tax_contribution_mult = 0.25 + } + + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_2 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + max_hostile_schemes_add = 1 + monthly_intrigue_lifestyle_xp_gain_mult = 0.15 + } + + effect = { + custom_description_no_bullet = { + text = glory_legacy_4_perk_effect + } + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_3 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + steppe_development_growth_factor = 0.25 + hostile_county_attrition = -0.15 + owned_hostile_scheme_success_chance_add = 15 + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_4 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + men_at_arms_limit = 1 + prowess = 3 + army_maintenance_mult = -0.05 + } + + ai_chance = { value = 0 } +} + +m_genghis_of_the_steppe_legacy_5 = { + legacy = m_genghis_of_the_steppe_legacy_track + + character_modifier = { + knight_limit = 2 + knight_effectiveness_mult = 0.25 + archer_cavalry_max_size_add = 3 + siege_weapon_siege_value_mult = 0.1 + men_at_arms_cap = 1 + } + + ai_chance = { value = 0 } +} + + + + + + + diff --git a/master/common/men_at_arms_types/give_military_host_armies.txt b/master/common/men_at_arms_types/give_military_host_armies.txt new file mode 100644 index 0000000..18bef0d --- /dev/null +++ b/master/common/men_at_arms_types/give_military_host_armies.txt @@ -0,0 +1,173 @@ +pledged_light_footmen = { + type = skirmishers + + can_recruit = { + always = no + } + + damage = 10 + toughness = 16 + pursuit = 10 + screen = 16 + + terrain_bonus = { + forest = { damage = 4 toughness = 6 } + taiga = { damage = 4 toughness = 6 } + jungle = { damage = 4 toughness = 6 } + } + + counters = { + heavy_infantry = 1 + } + + buy_cost = { gold = skirmisher_recruitment_cost } + low_maintenance_cost = { gold = skirmisher_low_maint_cost } + high_maintenance_cost = { gold = skirmisher_high_maint_cost } + + + stack = 100 + ai_quality = { value = culture_ai_weight_skirmishers } + icon = skirmishers +} + +pledged_bowmen = { + type = archers + + can_recruit = { + always = no + } + + damage = 25 + toughness = 10 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 10 toughness = 4 } + forest = { toughness = 4 screen = 4 } + taiga = { toughness = 4 screen = 4 } + } + + counters = { + skirmishers = 1 + } + + buy_cost = { gold = bowmen_recruitment_cost } + low_maintenance_cost = { gold = bowmen_low_maint_cost } + high_maintenance_cost = { gold = bowmen_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_archers + value = counter_synergy_ai_weight_archers + } + icon = bowmen +} + +pledged_light_horsemen = { + type = light_cavalry + + can_recruit = { + always = no + } + + damage = 22 + toughness = 15 + pursuit = 30 + screen = 30 + + terrain_bonus = { + plains = { damage = 15 } + drylands = { damage = 15 } + hills = { damage = -5 } + mountains = { damage = -10 pursuit = -20 } + desert_mountains = { damage = -15 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = light_cavalry_recruitment_cost } + low_maintenance_cost = { gold = light_cavalry_low_maint_cost } + high_maintenance_cost = { gold = light_cavalry_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_light_cavalry + value = counter_synergy_ai_weight_light_cavalry + } + icon = light_cavalry +} + +pledged_pikemen_unit = { + type = pikemen + + can_recruit = { + always = no + } + + damage = 22 + toughness = 24 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { toughness = 12 } + desert_mountains = { toughness = 12 } + hills = { toughness = 8 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + buy_cost = { gold = pikemen_recruitment_cost } + low_maintenance_cost = { gold = pikemen_low_maint_cost } + high_maintenance_cost = { gold = pikemen_high_maint_cost } + + + stack = 100 + ai_quality = { + value = culture_ai_weight_pikemen + value = counter_synergy_ai_weight_pikemen + } + icon = pikemen +} + +pledged_house_guard = { + type = heavy_infantry + can_recruit = { + always = no + } + + damage = 40 + toughness = 32 + pursuit = 0 + screen = 24 + + counters = { + pikemen = 2 + archers = 2 + } + + buy_cost = { gold = 50 } + low_maintenance_cost = { gold = 0 } + high_maintenance_cost = { gold = 1 } + + max_sub_regiments = 5 + + stack = 100 + ai_quality = { value = 100 } + icon = house_guard +} \ No newline at end of file diff --git a/master/common/men_at_arms_types/guardians_of_valhalla.txt b/master/common/men_at_arms_types/guardians_of_valhalla.txt new file mode 100644 index 0000000..4ad83cd --- /dev/null +++ b/master/common/men_at_arms_types/guardians_of_valhalla.txt @@ -0,0 +1,44 @@ +guardians_of_valhalla = { + type = heavy_infantry + + damage = 112 + toughness = 80 + pursuit = 50 + screen = 25 + + can_recruit = { + dynasty = { + has_dynasty_modifier = great_hall_of_asgard_modifier + } + } + + terrain_bonus = { + hills = { damage = 6 toughness = 4 } + taiga = { damage = 6 toughness = 4 } + mountains = {damage = 6 toughness = 4 } + } + + counters = { + pikemen = 1 + skirmishers = 1 + archers = 1 + heavy_infantry = 1 + } + + winter_bonus = { + normal_winter = { toughness = 8 screen = 8 } + harsh_winter = { toughness = 8 screen = 8 } + } + + siege_tier = 4 + siege_value = 0.025 + + buy_cost = { gold = 250 } + low_maintenance_cost = { gold = 0 } + high_maintenance_cost = { gold = 1 } + + stack = 100 + ai_quality = { value = 100 } + icon = varangian_veterans +} + diff --git a/master/common/modifiers/great_hall_of_asgard_modifier.txt b/master/common/modifiers/great_hall_of_asgard_modifier.txt new file mode 100644 index 0000000..07b47c6 --- /dev/null +++ b/master/common/modifiers/great_hall_of_asgard_modifier.txt @@ -0,0 +1,16 @@ +great_hall_of_asgard_modifier = { + icon = asatru_raven_positive + + life_expectancy = 5 + fertility = 0.35 + negative_random_genetic_chance = -0.5 + domain_limit = 1 + knight_limit = 3 + men_at_arms_cap = 2 + heavy_infantry_siege_value_add = 0.1 + knight_effectiveness_mult = 1 + development_growth = 0.1 + development_growth_factor = 0.2 + monthly_lifestyle_xp_gain_mult = 0.35 + +} \ No newline at end of file diff --git a/master/common/modifiers/m_dynasty_bailiff_decision_modifier.txt b/master/common/modifiers/m_dynasty_bailiff_decision_modifier.txt new file mode 100644 index 0000000..51364bb --- /dev/null +++ b/master/common/modifiers/m_dynasty_bailiff_decision_modifier.txt @@ -0,0 +1,7 @@ +m_dynasty_bailiff_decision_modifier = { + icon = county_modifier_control_positive + + monthly_county_control_growth_add = 2 + county_opinion_add = 10 + +} \ No newline at end of file diff --git a/master/common/modifiers/m_mongol_recurrent_modifier.txt b/master/common/modifiers/m_mongol_recurrent_modifier.txt new file mode 100644 index 0000000..4853b4d --- /dev/null +++ b/master/common/modifiers/m_mongol_recurrent_modifier.txt @@ -0,0 +1,3 @@ +m_mongol_grand_yurt_recurrent_modifier = { + icon = goods_positive +} \ No newline at end of file diff --git a/master/common/religion/religions/aesir_norse.txt b/master/common/religion/religions/aesir_norse.txt new file mode 100644 index 0000000..ac995a1 --- /dev/null +++ b/master/common/religion/religions/aesir_norse.txt @@ -0,0 +1,262 @@ +# aesiric_religion = { +# family = rf_pagan +# graphical_faith = pagan_gfx + +# pagan_roots = yes + +# doctrine = pagan_hostility_doctrine + +# #Main Group +# doctrine = doctrine_no_head +# doctrine = doctrine_gender_male_dominated +# doctrine = doctrine_pluralism_pluralistic +# doctrine = doctrine_theocracy_temporal + +# #Marriage +# doctrine = doctrine_monogamy +# doctrine = doctrine_divorce_allowed +# doctrine = doctrine_bastardry_legitimization +# doctrine = doctrine_consanguinity_cousins + +# #Crimes +# doctrine = doctrine_homosexuality_crime +# doctrine = doctrine_adultery_men_crime +# doctrine = doctrine_adultery_women_crime +# doctrine = doctrine_kinslaying_close_kin_crime +# doctrine = doctrine_deviancy_crime +# doctrine = doctrine_witchcraft_crime + +# #Clerical Functions +# doctrine = doctrine_clerical_function_recruitment +# doctrine = doctrine_clerical_gender_either +# doctrine = doctrine_clerical_marriage_allowed +# doctrine = doctrine_clerical_succession_temporal_appointment + +# #Allow pilgrimages +# doctrine = doctrine_pilgrimage_encouraged + +# #Funeral tradition +# doctrine = doctrine_funeral_cremation + +# traits = { +# virtues = { brave honest just dilligent stubborn scarred loyal} +# sins = { craven deceitful gluttonous } +# } + +# reserved_male_names = { +# Anund AsbjO_rn Aslak Audun Bagge Balder Brage Egil Emund Frej Gnupa Gorm Gudmund GudrO_d Hardeknud Helge Odd Orm +# Orvar Ottar Rikulfr Rurik SigbjO_rn StyrbjO_rn Starkad Styrkar SA_mund SO_lve SO_rkver Thorolf Tjudmund Toke Tolir +# TorbjO_rn Torbrand Torfinn Torgeir Toste Tyke +# } +# reserved_female_names = { +# Aslaug Bothild BjO_rg Freja Grima Gytha KrA_ka Malmfrid Thora Thordis Thyra Ragnfrid Ragnhild Svanhild Ulvhilde +# } + +# custom_faith_icons = { +# custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s +# } + +# holy_order_names = { +# { name = "holy_order_jomsvikings" } +# { name = "holy_order_faithful_of_tyr" } +# { name = "holy_order_odins_valkyries" } +# { name = "holy_order_chosen_of_freyja" } +# } + +# holy_order_maa = { jomsviking_pirates } + +# localization = { +# #HighGodName +# HighGodName = germanic_high_god_name +# HighGodName2 = germanic_high_god_name_2 +# HighGodNamePossessive = germanic_high_god_name_possessive +# HighGodNameSheHe = CHARACTER_SHEHE_HE +# HighGodHerselfHimself = CHARACTER_HIMSELF +# HighGodHerHis = CHARACTER_HERHIS_HIS +# HighGodNameAlternate = germanic_high_god_alternate +# HighGodNameAlternatePossessive = germanic_high_god_alternate_possessive + +# #Creator +# CreatorName = germanic_creator_god_name +# CreatorNamePossessive = germanic_creator_god_name_possessive +# CreatorSheHe = CHARACTER_SHEHE_HE +# CreatorHerHis = CHARACTER_HERHIS_HIS +# CreatorHerHim = CHARACTER_HERHIM_HIM + +# #HealthGod +# HealthGodName = germanic_health_god_name +# HealthGodNamePossessive = germanic_health_god_name_possessive +# HealthGodSheHe = CHARACTER_SHEHE_SHE +# HealthGodHerHis = CHARACTER_HERHIS_HER +# HealthGodHerHim = CHARACTER_HERHIM_HER + +# #FertilityGod +# FertilityGodName = germanic_fertility_god_name +# FertilityGodNamePossessive = germanic_fertility_god_name_possessive +# FertilityGodSheHe = CHARACTER_SHEHE_SHE +# FertilityGodHerHis = CHARACTER_HERHIS_HER +# FertilityGodHerHim = CHARACTER_HERHIM_HER + +# #WealthGod +# WealthGodName = germanic_wealth_god_name +# WealthGodNamePossessive = germanic_wealth_god_name_possessive +# WealthGodSheHe = CHARACTER_SHEHE_HE +# WealthGodHerHis = CHARACTER_HERHIS_HIS +# WealthGodHerHim = CHARACTER_HERHIM_HIM + +# #HouseholdGod +# HouseholdGodName = germanic_household_god_name +# HouseholdGodNamePossessive = germanic_household_god_name_possessive +# HouseholdGodSheHe = CHARACTER_SHEHE_SHE +# HouseholdGodHerHis = CHARACTER_HERHIS_HER +# HouseholdGodHerHim = CHARACTER_HERHIM_HER + +# #FateGod +# FateGodName = germanic_fate_god_name +# FateGodNamePossessive = germanic_fate_god_name_possessive +# FateGodSheHe = CHARACTER_SHEHE_THEY +# FateGodHerHis = CHARACTER_HERHIS_THEIR +# FateGodHerHim = CHARACTER_HERHIM_THEM + +# #KnowledgeGod +# KnowledgeGodName = germanic_knowledge_god_name +# KnowledgeGodNamePossessive = germanic_knowledge_god_name_possessive +# KnowledgeGodSheHe = CHARACTER_SHEHE_HE +# KnowledgeGodHerHis = CHARACTER_HERHIS_HIS +# KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + +# #WarGod +# WarGodName = germanic_war_god_name +# WarGodNamePossessive = germanic_war_god_name_possessive +# WarGodSheHe = CHARACTER_SHEHE_HE +# WarGodHerHis = CHARACTER_HERHIS_HIS +# WarGodHerHim = CHARACTER_HERHIM_HIM + +# #TricksterGod +# TricksterGodName = germanic_trickster_god_name +# TricksterGodNamePossessive = germanic_trickster_god_name_possessive +# TricksterGodSheHe = CHARACTER_SHEHE_HE +# TricksterGodHerHis = CHARACTER_HERHIS_HIS +# TricksterGodHerHim = CHARACTER_HERHIM_HIM + +# #NightGod +# NightGodName = germanic_night_god_name +# NightGodNamePossessive = germanic_night_god_name_possessive +# NightGodSheHe = CHARACTER_SHEHE_SHE +# NightGodHerHis = CHARACTER_HERHIS_HER +# NightGodHerHim = CHARACTER_HERHIM_HER + +# #WaterGod +# WaterGodName = germanic_water_god_name +# WaterGodNamePossessive = germanic_water_god_name_possessive +# WaterGodSheHe = CHARACTER_SHEHE_HE +# WaterGodHerHis = CHARACTER_HERHIS_HIS +# WaterGodHerHim = CHARACTER_HERHIM_HIM + + +# PantheonTerm = religion_the_gods +# PantheonTerm2 = religion_the_gods_2 +# PantheonTerm3 = religion_the_gods_3 +# PantheonTermHasHave = pantheon_term_have +# GoodGodNames = { germanic_good_god_thor germanic_good_god_baldr germanic_good_god_freyja germanic_good_god_tyr germanic_good_god_sif} +# DevilName = germanic_devil_name +# DevilNamePossessive = germanic_devil_name_possessive +# DevilSheHe = CHARACTER_SHEHE_HE +# DevilHerHis = CHARACTER_HERHIS_HIS +# DevilHerselfHimself = CHARACTER_HIMSELF +# EvilGodNames = { germanic_evil_god_surtr germanic_evil_god_ymir } +# HouseOfWorship = paganism_house_of_worship +# HouseOfWorship2 = paganism_house_of_worship_2 +# HouseOfWorship3 = paganism_house_of_worship_3 +# HouseOfWorshipPlural = paganism_house_of_worship_plural +# ReligiousSymbol = germanic_religious_symbol +# ReligiousSymbol2 = germanic_religious_symbol_2 +# ReligiousSymbol3 = germanic_religious_symbol_3 +# ReligiousText = germanic_religious_text +# ReligiousText2 = germanic_religious_text_2 +# ReligiousText3 = germanic_religious_text_3 +# ReligiousHeadName = germanic_religious_head_title +# ReligiousHeadTitleName = germanic_religious_head_title_name +# DevoteeMale = paganism_devotee +# DevoteeMalePlural = paganism_devoteeplural +# DevoteeFemale = paganism_devotee +# DevoteeFemalePlural = paganism_devoteeplural +# DevoteeNeuter = paganism_devotee +# DevoteeNeuterPlural = paganism_devoteeplural +# PriestMale = germanic_priest_male +# PriestMalePlural = germanic_priest_male_plural +# PriestFemale = germanic_priest_female +# PriestFemalePlural = germanic_priest_female_plural +# PriestNeuter = germanic_priest_neuter +# PriestNeuterPlural = germanic_priest_neuter_plural +# AltPriestTermPlural = paganism_priest_alternate_plural +# BishopMale = germanic_bishop_male +# BishopMalePlural = germanic_bishop_male_plural +# BishopFemale = germanic_bishop_female +# BishopFemalePlural = germanic_bishop_female_plural +# BishopNeuter = germanic_bishop_neuter +# BishopNeuterPlural = germanic_bishop_neuter_plural +# DivineRealm = germanic_divine_realm +# DivineRealm2 = germanic_divine_realm_2 +# DivineRealm3 = germanic_divine_realm_3 +# PositiveAfterLife = germanic_positive_afterlife +# PositiveAfterLife2 = germanic_positive_afterlife_2 +# PositiveAfterLife3 = germanic_positive_afterlife_3 +# NegativeAfterLife = germanic_death_deity_name +# NegativeAfterLife2 = germanic_death_deity_name_2 +# NegativeAfterLife3 = germanic_death_deity_name_3 +# DeathDeityName = germanic_death_deity_name +# DeathDeityNamePossessive = germanic_death_deity_name_possessive +# DeathDeitySheHe = CHARACTER_SHEHE_SHE +# DeathDeityHerHis = CHARACTER_HERHIS_HER +# DeathDeityHerHim = CHARACTER_HERHIM_HER +# WitchGodName = germanic_good_god_freyja +# WitchGodNamePossessive = germanic_good_god_freyja_possessive +# WitchGodHerHis = CHARACTER_HERHIS_HER +# WitchGodSheHe = CHARACTER_SHEHE_HE +# WitchGodHerHim = CHARACTER_HERHIM_HER +# WitchGodMistressMaster = mistress +# WitchGodMotherFather = mother + + +# GHWName = ghw_great_holy_war +# GHWNamePlural = ghw_great_holy_wars +# } + +# faiths = { +# aesiric_norse = { +# color = { 0.6 0.6 0.6 } +# icon = germanic_reformed +# reformed_icon = germanic_reformed + +# holy_site = uppsala +# holy_site = jorvik +# holy_site = paderborn +# holy_site = konugardr +# holy_site = ranaheim + +# doctrine = unreformed_faith_doctrine +# doctrine = special_doctrine_ecumenical_christian + +# doctrine = tenet_warmonger + +# # Gruesome Festivals, else Human Sacrifice. +# doctrine_selection_pair = { +# requires_dlc_flag = the_northern_lords +# doctrine = tenet_gruesome_festivals +# fallback_doctrine = tenet_human_sacrifice +# } + +# # Bhakti, else Ancestor Worship. +# doctrine_selection_pair = { +# requires_dlc_flag = the_northern_lords +# doctrine = tenet_bhakti +# fallback_doctrine = tenet_ancestor_worship +# } +# } +# #aesiric_norse_reformed = { +# # color = { 0.6 0.6 0.6 } +# # icon = germanic +# #} +# } +# } diff --git a/master/common/script_values/give_military_host_script_values.txt b/master/common/script_values/give_military_host_script_values.txt new file mode 100644 index 0000000..26845c6 --- /dev/null +++ b/master/common/script_values/give_military_host_script_values.txt @@ -0,0 +1,193 @@ + +give_military_interaction_gold_cost_small = { + value = 250 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_gold_cost_medium = { + value = 500 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_gold_cost_large = { + value = 1000 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_small = { + value = 100 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_medium = { + value = 250 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} +give_military_interaction_prestige_cost_large = { + value = 500 + if = { + limit = { + exists = scope:actor + } + scope:actor.culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + multiply = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + multiply = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + multiply = 1.25 + } + else = { + multiply = 0.75 + } + } + } + round = yes +} \ No newline at end of file diff --git a/master/common/scripted_effects/give_military_host_effects.txt b/master/common/scripted_effects/give_military_host_effects.txt new file mode 100644 index 0000000..7931324 --- /dev/null +++ b/master/common/scripted_effects/give_military_host_effects.txt @@ -0,0 +1,82 @@ + +give_military_host_small_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 1 + } + men_at_arms = { + type = pledged_bowmen + stacks = 1 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 1 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 1 + } + men_at_arms = { + type = pledged_house_guard + stacks = 1 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_small_army + } +} +give_military_host_medium_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 3 + } + men_at_arms = { + type = pledged_bowmen + stacks = 3 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 3 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 3 + } + men_at_arms = { + type = pledged_house_guard + stacks = 3 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_modest_army + } +} +give_military_host_large_effect = { + spawn_army = { + men_at_arms = { + type = pledged_light_footmen + stacks = 6 + } + men_at_arms = { + type = pledged_bowmen + stacks = 6 + } + men_at_arms = { + type = pledged_light_horsemen + stacks = 6 + } + men_at_arms = { + type = pledged_pikemen_unit + stacks = 6 + } + men_at_arms = { + type = pledged_house_guard + stacks = 6 + } + location = scope:recipient.capital_province + inheritable = no + name = funded_large_army + } +} \ No newline at end of file diff --git a/master/common/scripted_effects/instruct_treatment_effects.txt b/master/common/scripted_effects/instruct_treatment_effects.txt new file mode 100644 index 0000000..0e678e2 --- /dev/null +++ b/master/common/scripted_effects/instruct_treatment_effects.txt @@ -0,0 +1,81 @@ +instruct_treatment_disease_effect = { + random_list = { + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_success_high_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_success_low_modifier + years = 3 + } + } + } + + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_disease_treatment_failure_modifier + years = 3 + } + } + } + } + +} + +instruct_treatment_wounded_effect = { + random_list = { + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_success_high_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_success_low_modifier + years = 3 + } + } + } + 33 = { + scope:recipient = { + add_character_modifier = { + modifier = safe_wound_treatment_failure_modifier + years = 3 + } + } + } + } + +} + +it_disease_event_effect = { + scope:actor = { + trigger_event = { + id = instruct_health.0001 + } + } +} + +it_wounded_event_effect = { + scope:actor = { + trigger_event = { + id = instruct_health.0002 + } + } +} + +add_character_modifier = { + modifier = scratched_and_bruised + years = 3 +} diff --git a/master/common/scripted_effects/m_dynasty_bailiffs_decision_effects.txt b/master/common/scripted_effects/m_dynasty_bailiffs_decision_effects.txt new file mode 100644 index 0000000..0ab902b --- /dev/null +++ b/master/common/scripted_effects/m_dynasty_bailiffs_decision_effects.txt @@ -0,0 +1,14 @@ +########################################################################################## +# Bailiff Decision Effect: +# Adds dynasty modifier to dynasty, called from event options. +# Developer: DevZero +########################################################################################## + +m_dynasty_bailiff_decision_effect = { + dynasty = { + add_dynasty_modifier = { + modifier = m_dynasty_bailiff_decision_modifier + months = 50 + } + } +} \ No newline at end of file diff --git a/master/common/scripted_effects/m_grand_yurt_mongol_effects.txt b/master/common/scripted_effects/m_grand_yurt_mongol_effects.txt new file mode 100644 index 0000000..276ef48 --- /dev/null +++ b/master/common/scripted_effects/m_grand_yurt_mongol_effects.txt @@ -0,0 +1,5 @@ +m_grand_yurt_mongol_effect = { + province:7525 = { + add_special_building = grand_yurt_01 + } +} \ No newline at end of file diff --git a/master/common/scripted_effects/m_hidden_asgard_effecs.txt b/master/common/scripted_effects/m_hidden_asgard_effecs.txt new file mode 100644 index 0000000..43eb9d2 --- /dev/null +++ b/master/common/scripted_effects/m_hidden_asgard_effecs.txt @@ -0,0 +1,138 @@ +m_hall_of_asgard_effect = { + + province:234= { + add_special_building=great_high_hall_of_asgard_01 + } + + dynasty = { + + add_dynasty_modifier = { + modifier = great_hall_of_asgard_modifier + } + + add_dynasty_prestige = excessive_dynasty_prestige_gain + } + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + +} + diff --git a/master/common/scripted_effects/prisoner_release_expanded_effects.txt b/master/common/scripted_effects/prisoner_release_expanded_effects.txt new file mode 100644 index 0000000..7e87977 --- /dev/null +++ b/master/common/scripted_effects/prisoner_release_expanded_effects.txt @@ -0,0 +1,8 @@ +expanded_ransom_interaction_effect = { + scope:recipient = { + pay_short_term_gold = { + value = scope:recipient.gold + target = scope:actor + } + } +} \ No newline at end of file diff --git a/master/descriptor.mod b/master/descriptor.mod new file mode 100644 index 0000000..9e6d2ca --- /dev/null +++ b/master/descriptor.mod @@ -0,0 +1,7 @@ +version="1.0" +tags={ + "Total Conversion" +} +name="Master" +supported_version="1.*" +remote_file_id="3162040068" \ No newline at end of file diff --git a/master/events/instruct_physician_events.txt b/master/events/instruct_physician_events.txt new file mode 100644 index 0000000..da9b754 --- /dev/null +++ b/master/events/instruct_physician_events.txt @@ -0,0 +1,54 @@ +# Physician events to decide types of treatment + +namespace = instruct_health + +# Disease Treatment Track +instruct_health.0001 = { + type = character_event + title = it_disease_event_title + desc = it_disease_event_desc + theme = healthcare + + right_portrait = { + character = scope:recipient + animation = personality_honorable + } + + + + immediate = { + play_music_cue = "mx_cue_peace_ensues" + } + + option = { + name = it_disease_event_option_text.a + } + option ={ + name = it_disease_event_option_text.b + } + +} + +instruct_health.0002 = { + type = character_event + title = it_wounded_event_title + desc = it_wounded_event_desc + theme = healthcare + + right_portrait = { + character = scope:recipient + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_peace_ensues" + } + + option = { + name = it_wounded_event_option_text.a + } + option ={ + name = it_wounded_event_option_text.b + } + +} \ No newline at end of file diff --git a/master/events/m_dynasty_bailiff_event.txt b/master/events/m_dynasty_bailiff_event.txt new file mode 100644 index 0000000..c35b834 --- /dev/null +++ b/master/events/m_dynasty_bailiff_event.txt @@ -0,0 +1,134 @@ +################################################################################################# +# Dynasty Bailiff Decision Flavor Events: +# 5 Total -- Chosen at random after decision is made. +# Developer: DevZero +################################################################################################## + +namespace = m_dynasty_bailiff + +# Flavor Events for Decision +m_dynasty_bailiff.0001 = { + type = character_event + title = m_dynasty_bailiff_event_title + desc = m_dynasty_bailiff_event_desc + theme = family + + left_portrait = { + character = root + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + } + + option = { + name = m_dynasty_bailiff_event_option_text + m_dynasty_bailiff_decision_effect = yes + } + +} +m_dynasty_bailiff.0002 = { + type = character_event + title = m_dynasty_bailiff_event_title + desc = m_dynasty_bailiff_event_desc_2 + theme = family + + left_portrait = { + character = root + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + } + + option = { + name = m_dynasty_bailiff_event_option_text_2 + m_dynasty_bailiff_decision_effect = yes + } + +} +m_dynasty_bailiff.0003 = { + type = character_event + title = m_dynasty_bailiff_event_title + desc = m_dynasty_bailiff_event_desc_3 + theme = family + + left_portrait = { + character = root + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + } + + option = { + name = m_dynasty_bailiff_event_option_text_3.a + m_dynasty_bailiff_decision_effect = yes + } + option = { + name = m_dynasty_bailiff_event_option_text_3.b + m_dynasty_bailiff_decision_effect = yes + } + option = { + name = m_dynasty_bailiff_event_option_text_3.c + m_dynasty_bailiff_decision_effect = yes + } + option = { + name = m_dynasty_bailiff_event_option_text_3.d + m_dynasty_bailiff_decision_effect = yes + } + +} +m_dynasty_bailiff.0004 = { + type = character_event + title = m_dynasty_bailiff_event_title + desc = m_dynasty_bailiff_event_desc_4 + theme = family + + left_portrait = { + character = root + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + } + + option = { + name = m_dynasty_bailiff_event_option_text_4.a + m_dynasty_bailiff_decision_effect = yes + } + option = { + name = m_dynasty_bailiff_event_option_text_4.b + m_dynasty_bailiff_decision_effect = yes + } + +} +m_dynasty_bailiff.0005 = { + type = character_event + title = m_dynasty_bailiff_event_title + desc = m_dynasty_bailiff_event_desc_5 + theme = family + + left_portrait = { + character = root + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + } + + option = { + name = m_dynasty_bailiff_event_option_text_5.a + m_dynasty_bailiff_decision_effect = yes + } + option = { + name = m_dynasty_bailiff_event_option_text_5.b + m_dynasty_bailiff_decision_effect = yes + } + +} diff --git a/master/events/m_integrate_christian_norse_event.txt b/master/events/m_integrate_christian_norse_event.txt new file mode 100644 index 0000000..4b84391 --- /dev/null +++ b/master/events/m_integrate_christian_norse_event.txt @@ -0,0 +1,27 @@ +##################################################### +# Norse Asgard Event +# Developed by DevZero +##################################################### + +namespace = m_integrate_chrisitian_norse_event + +# Epic Event! Desciption and Title Should Match + +m_integrate_chrisitian_norse_event.0001 = { + type = character_event + title = m_integrate_chrisitian_norse_event_title + desc = m_integrate_chrisitian_norse_event_desc + theme = new_royal_court + left_portrait = { + character = root + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + option = { + name = m_integrate_chrisitian_norse_event_option_text + } +} \ No newline at end of file diff --git a/master/events/m_mongol_recurrent_event.txt b/master/events/m_mongol_recurrent_event.txt new file mode 100644 index 0000000..d038edf --- /dev/null +++ b/master/events/m_mongol_recurrent_event.txt @@ -0,0 +1,70 @@ +##################################################### +# Mongol Warriors Event +# Developed by DevZero +##################################################### + +namespace = m_mongol_recurrent_event + +# Epic Event! Desciption and Title Should Match + +m_mongol_recurrent_event.0001 = { + type = character_event + title = m_mongol_recurrent_event_title + desc = m_mongol_recurrent_event_desc + theme = new_royal_court + left_portrait = { + character = root + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + option = { + name = m_mongol_recurrent_event_option_text + + spawn_army = { + uses_supply = no + inheritable = yes + name = "Everloyal Horde to the Great Khan" + levies = { + value = 1500 + } + men_at_arms = { + type = horse_archers + stacks = 14 + } + men_at_arms = { + type = horse_archers + stacks = 10 + } + men_at_arms = { + type = light_horsemen + stacks = 10 + } + men_at_arms = { + type = light_horsemen + stacks = 10 + } + men_at_arms = { + type = armored_horsemen + stacks = 5 + } + men_at_arms = { + type = pikemen + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + location = capital_province + origin = capital_province + } + } +} \ No newline at end of file diff --git a/master/events/norse_asgard_events.txt b/master/events/norse_asgard_events.txt new file mode 100644 index 0000000..41e3027 --- /dev/null +++ b/master/events/norse_asgard_events.txt @@ -0,0 +1,27 @@ +##################################################### +# Norse Asgard Event +# Developed by DevZero +##################################################### + +namespace = norse_asgard_event + +# Epic Event! Desciption and Title Should Match + +norse_asgard_event.0001 = { + type = character_event + title = norse_asgard_event_title + desc = norse_asgard_event_desc + theme = new_royal_court + left_portrait = { + character = scope:asgard_founder + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + option = { + name = norse_asgard_event_option_text + } +} \ No newline at end of file diff --git a/master/events/norse_recurrent_warrior_event.txt b/master/events/norse_recurrent_warrior_event.txt new file mode 100644 index 0000000..a8a5674 --- /dev/null +++ b/master/events/norse_recurrent_warrior_event.txt @@ -0,0 +1,68 @@ +##################################################### +# Norse Asgard Event +# Developed by DevZero +##################################################### + +namespace = norse_recurrent_warrior_event + +# Epic Event! Desciption and Title Should Match + +norse_recurrent_warrior_event.0001 = { + type = character_event + title = norse_recurrent_warrior_event_title + desc = norse_recurrent_warrior_event_desc + theme = new_royal_court + left_portrait = { + character = root + animation = personality_honorable + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + option = { + name = norse_recurrent_warrior_option_text + + spawn_army = { + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = guardians_of_valhalla + stacks = 10 + } + men_at_arms = { + type = trebuchet + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = pikemen_unit + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + men_at_arms = { + type = jomsviking_pirates + stacks = 10 + } + + uses_supply = no + location = capital_province + origin = capital_province + inheritable = yes + name = norse_army_host + } + } +} \ No newline at end of file diff --git a/master/gfx/interface/icons/character_interactions/sponsor_military_gift.dds b/master/gfx/interface/icons/character_interactions/sponsor_military_gift.dds new file mode 100644 index 0000000..836b4d4 Binary files /dev/null and b/master/gfx/interface/icons/character_interactions/sponsor_military_gift.dds differ diff --git a/master/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds b/master/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds new file mode 100644 index 0000000..2774b3f Binary files /dev/null and b/master/gfx/interface/icons/culture_tradition/2-support/hard_rule_layer2.dds differ diff --git a/master/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds b/master/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds new file mode 100644 index 0000000..32c8d04 Binary files /dev/null and b/master/gfx/interface/icons/culture_tradition/4-items/aptitudinal_teachings.dds differ diff --git a/master/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds b/master/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds new file mode 100644 index 0000000..fff0147 Binary files /dev/null and b/master/gfx/interface/icons/culture_tradition/4-items/hard_rule.dds differ diff --git a/master/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds b/master/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds new file mode 100644 index 0000000..c28a234 Binary files /dev/null and b/master/gfx/interface/icons/culture_tradition/4-items/scand_dev.dds differ diff --git a/master/gfx/interface/icons/culture_tradition/4-items/steppe.dds b/master/gfx/interface/icons/culture_tradition/4-items/steppe.dds new file mode 100644 index 0000000..7a7b1ea Binary files /dev/null and b/master/gfx/interface/icons/culture_tradition/4-items/steppe.dds differ diff --git a/master/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds b/master/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds new file mode 100644 index 0000000..431ca20 Binary files /dev/null and b/master/gfx/interface/icons/dynasty/m_genghis_of_the_steppe_legacy_track.dds differ diff --git a/master/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds b/master/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds new file mode 100644 index 0000000..d097c10 Binary files /dev/null and b/master/gfx/interface/icons/dynasty/m_vikingr_legacy_track.dds differ diff --git a/master/gfx/interface/illustrations/decisions/asgard_decision_image.dds b/master/gfx/interface/illustrations/decisions/asgard_decision_image.dds new file mode 100644 index 0000000..9389f5d Binary files /dev/null and b/master/gfx/interface/illustrations/decisions/asgard_decision_image.dds differ diff --git a/master/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds b/master/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds new file mode 100644 index 0000000..e79771c Binary files /dev/null and b/master/gfx/interface/illustrations/decisions/grand_yurt_decision_image.dds differ diff --git a/master/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds b/master/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds new file mode 100644 index 0000000..d9bfa47 Binary files /dev/null and b/master/gfx/interface/illustrations/legacy_tracks/m_genghis_of_the_steppe_legacy_track.dds differ diff --git a/master/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds b/master/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds new file mode 100644 index 0000000..947c5b7 Binary files /dev/null and b/master/gfx/interface/illustrations/legacy_tracks/m_vikingr_legacy_track.dds differ diff --git a/master/gui/debug_toggle.gui b/master/gui/debug_toggle.gui new file mode 100644 index 0000000..3915517 --- /dev/null +++ b/master/gui/debug_toggle.gui @@ -0,0 +1,10 @@ +widget = { + size = { 0 0 } + name = "debug_toggle" + + button = { + size = { 0 0 } + onclick = "[ExecuteConsoleCommand('debug_mode')]" + shortcut = "screenshot" + } +} \ No newline at end of file diff --git a/master/gui/scripted_widgets/sgui_message_settings.txt b/master/gui/scripted_widgets/sgui_message_settings.txt new file mode 100644 index 0000000..cf69575 --- /dev/null +++ b/master/gui/scripted_widgets/sgui_message_settings.txt @@ -0,0 +1,2 @@ + +gui/debug_toggle.gui = debug_toggle \ No newline at end of file diff --git a/master/localization/english/master_l_english.yml b/master/localization/english/master_l_english.yml new file mode 100644 index 0000000..46eff59 --- /dev/null +++ b/master/localization/english/master_l_english.yml @@ -0,0 +1,278 @@ +l_english: + + #Tradition: Dwellers of the Steppe + tradition_dwellers_of_the_steppe_name: "Dwellers of the Steppe" + tradition_dwellers_of_the_steppe_desc: "This culture values vast dry fields and open skies. Preferring to settle and develop steppe lands despite the associated burdens. Equestrian and pastorial endeavors tend to flourish in this culture, though such an economical pillar brings with it a high cost of maintenance." + culture_in_steppe_terrain_desc: "The [culture|E] is not present in any [county|E] with Steppe [terrain|E]" + culture_in_steppe_terrain_count_desc: "The [culture|E] is not present in at least #V 5#! [counties|E] with Steppe [terrain|E]" + + # Tradition: Ritualistic Reaving + tradition_ritualistic_reaving_name: "Ritualistic Reaving" + tradition_ritualistic_reaving_desc: "Raiding and reaving has become a staple of this culture. While rewarding in terms of plunder, loot and other categories, gaining wealth from others often leads to less of a desire in land enrichment." + m_has_pacifist_tenet_desc: "[faith|E] has a pacifistic tenet" + m_has_pacifist_tradition_desc: "[culture|E] has a pacifistic [tradition|E]" + m_already_has_raid_tradition_desc: "[culture|E] already has too similar a tradition" + m_govenment_incompatible_penalty_desc: "Government is Clan or Feudal" + + # Tradition: Aptitudinal Teachings + tradition_aptitudinal_teachings_name: "Aptitudinal Teachings" + tradition_aptitudinal_teachings_desc: "Carrying forth traditions of old, we expect theologians and scholars to conduct inquiries into the present state of affairs and question intelligently." + m_has_incompatible_alexandrian_catechism_tenet: "Faith follows teachings from the Catechetical School of Alexandria" + + # Tradition: Hard Rule + tradition_hard_rule_name: "Hard Rule" + tradition_hard_rule_desc: "This culture has a tradition of harsh punishments and a staunch ruling perogative." + m_surpasses_dread_threshold: "Your level of [dread|E] does not exceed 35" + m_less_than_high_dread_desc: "Your level of [dread|E] does not exceed 75" + m_high_dread_desc: "[dread|E] level is very high" + + # Tradition: Scandinavian Development + tradition_scandinavian_development_name: "Scandinavian Development" + tradition_scandinavian_development_desc: "Understanding the value of development, we choose to put an emphasis on investing into our lands and people." + m_no_reserve_penalty: "No Royal Reserve building in county of this [culture|E]" + m_scandinavian_innovation_requirement: "Missing Public Works [innovation|E]" + + # Tradition: Synergenistic Faith + tradition_synergenistic_faith_name: "Synergenistic Faith" + tradition_synergenistic_faith_desc: "Culture and Faith are the twin pillars that are the foundation for any realm, we must ensure the two compliment eachother." + # Tradition: Familial Bonds + tradition_familial_bonds_name: "Familial Bonds" + tradition_familial_bonds_desc: "Keeping to your word and building a bond with others is important for prosperity and enjoyment." + m_guess_you_need_more_friends_desc: "Less than ten friends" + + # Dynastic Legacy Track & Perks: Vikingr (Family, Growth, Guardian, Scholar, Honor) + m_vikingr_legacy_track_name: "Víkingr" + m_vikingr_legacy_track_desc: "Through Perspicacity, Providence, and Strength may the vikingr grow evermore prosperous" + m_vikingr_legacy_1_name: "Skuldalið" + m_vikingr_legacy_2_name: "Groði" + m_vikingr_legacy_3_name: "Vorðr" + m_vikingr_legacy_4_name: "Seiðr" + m_vikingr_legacy_5_name: "Heiðr" + + # Dynastic Legacy Track & Perks: Ghengis + m_genghis_of_the_steppe_legacy_track_name: "Legend of the Steppe" + m_genghis_of_the_steppe_legacy_track_desc: "Blood, Fire and mighty Steeds shall overcome all" + m_genghis_of_the_steppe_legacy_1_name: "Intransigent Rulers" + m_genghis_of_the_steppe_legacy_2_name: "Conspiratorial Courts" + m_genghis_of_the_steppe_legacy_3_name: "Adjudicators of the Steppe" + m_genghis_of_the_steppe_legacy_4_name: "Commandants of Strength" + m_genghis_of_the_steppe_legacy_5_name: "Terrors of the Steppe" + + + # Buildings + building_type_great_high_hall_of_asgard_01: "Hliðskjálf af Ásgarðr" + building_type_great_high_hall_of_asgard_01_desc: "The great hall was built as a monument to venerate the top qualities among the norse gods and serve as a wonderous structure to inspire humanity. Foreign stone, precious metals and other elements comprise the nearly etherial presentation and worksmanship. The great structure is thought to beget legend and instill perspicacity, wisdom, and strength to all who visit. Hidden within and amongst the mountains and taiga, accessible only by the select few with knowledge of its whereabouts with their bravery and determination matching the treacherous routes. A great wall was built in the province in support of creating a better stronghold." + building_great_high_hall_of_asgard_01: "Hliðskjálf af Ásgarðr" + building_great_high_hall_of_asgard_01_desc: "The great hall was built as a monument to venerate the top qualities among the norse gods and serve as a wonderous structure to inspire humanity. Foreign stone, precious metals and other elements comprise the nearly etherial presentation and worksmanship. The great structure is thought to beget legend and instill perspicacity, wisdom, and strength to all who visit. Hidden within and amongst the mountains and taiga, accessible only by the select few with knowledge of its whereabouts with their bravery and determination matching the treacherous routes. A great wall was built in the province in support of creating a better stronghold." + + + building_type_bohemian_keep_01: "Great Bohemian Keep" + building_type_bohemian_keep_01_desc: "A resplendent keep meant to last and serve as an important hub for the realm." + building_bohemian_keep_01: "Brick and Mortar" + building_bohemian_keep_01_desc: " It is the duty of any good stronghold, to surpass upkeep and improve the very structure." + + building_bohemian_keep_02: "Well Trained Gaurdsmen" + building_bohemian_keep_02_desc: "Among the keep should be guardsmen trained in basic subtrifuge in addition to the normal performance of duties." + + building_bohemian_keep_03: "Reinforced Brick and Mortar" + building_bohemian_keep_03_desc: "Reinforced layers and well designed spaces fit for higher capacity and better defensive capabilities." + + #Viking Duchy Building in Oslo, meant to be upgraded each era. ' Shield of Viking ' + building_type_shield_of_the_viking_01: "Víkingr Véurr" + building_type_shield_of_the_viking_01_desc: "Great structures, built for defense and militaristic purposes. Colloquially named as the viking shield, thought to be impenetrable." + building_shield_of_the_viking_01: "Grand Norse Fortress" + building_shield_of_the_viking_01_desc: "Norse warriors and master-craftsmen further the development of the defensible position by creating a wonderful fortress, inspired by Valhalla." + + building_shield_of_the_viking_02: "Elegant Corridors" + building_shield_of_the_viking_02_desc: "The structures within are improved and given elegance; adorned with foreign metal, cloth, and other decorative materials." + + building_shield_of_the_viking_03: "Center for Exoerience and Education" + building_shield_of_the_viking_03_desc: "A center has been built to facilitate various educations and competencies, along with a newly built fortified ground." + + building_shield_of_the_viking_04: "Elite Military Expansion and Training " + building_shield_of_the_viking_04_desc: "Great care has been taken to create an exceptionally well rounded norse warrior, attracting Væringi and other elite warriors alike." + + building_type_grand_yurt_01: "Grand Yurt" + building_type_grand_yurt_01_desc: "A great yurt majestically embellished and established atop a fortified position." + building_grand_yurt_01: "Grand Yurt" + building_grand_yurt_01_desc: "A great yurt majestically embellished and established atop a fortified position." + + # Norse Decisions + m_asgard_decision: "Venture out in Search of the Fabled Hliðskjálf af Ásgarðr" + m_asgard_decision_desc: "You read about a great hidden hall among the taiga and mountains within the province, and find curious indicators of its existence within the province. Explore just how expansive this new discovery is and what use it may have in furthering your people." + m_asgard_decision_tooltip: "Search for the fabled area." + m_asgard_decision_confirm: "Venture into the Unknown" + + m_guardians_of_valhala_recurrent_decision: "Great Call for Úlfhéðnar" + m_guardians_of_valhala_recurrent_decision_desc: "Reaffirm your comittment to your people and make a great call for the summoning of elite warriors." + m_guardians_of_valhala_recurrent_decision_tooltip: "Summon Úlfhéðnar to your cause by right of the Hliðskjálf af Ásgarðr." + m_guardians_of_valhala_recurrent_decision_confirm: "Sound the Horn" + + # Norse Modifier + great_hall_of_asgard_modifier: "Hliðskjálf af Ásgarðr Skapari" + great_hall_of_asgard_modifier_desc: "This dynasty's members are the original discoverers and true guardians of the Hliðskjálf af Ásgarðr." + norse_asgard_enabled_interaction: "Strategically Indebt" + norse_asgard_enabled_interaction_desc: "Learned from the grand library of Hliðskjálf af Ásgarðr, your family is adept in the ways of social engineering; through generational knowledge passed down through various secret writings." + norse_asgard_enabled_interaction.tt.success: "You successfully gain their loyalty" + norse_asgard_enabled_interaction.tt.failure: "You do not successfully gain their loyalty" + guardians_of_valhalla: "Úlfhéðnar of Hliðskjálf" + guardians_of_valhalla_flavor: "Elite warriors loyal to the Hliðskjálf af Ásgarðr." + + # Norse Events + norse_asgard_event_title: "The Great Discovery: Hliðskjálf af Ásgarðr" + + norse_asgard_event_desc: " \nOne would not dare believe it true as it seems almost etherial. After reading up on the history of the new capital and seeing the markings within the province, I thought myself obsessed with a legend. Yet I have made the discovery of a thousand lifetimes! The Hliðskjálf af Ásgarðr! \n\n It is a vast network of structures, grand halls, and exquisitely interwoven nature. Rivers, caves, a world resembling myth! Grand halls, libraries, natural hot springs atop the mountain, among the trees. This is it. This is to be the penultimate of our people! We will continue to build and create a grand legacy rivaling only the gods through wisdom, perspicacity, providence and prosperity! + + norse_asgard_event_option_text: "May our people forever endure!" + + norse_recurrent_warrior_event_title: "Gather Úlfhéðnar" + norse_recurrent_warrior_event_desc: "My summons have been answered by a great many elite warriors. They stand ready as Odin's emissaries of Valhala. " + norse_recurrent_warrior_option_text: "For all that is Viking!" + + norse_army_host: "Legendary Host of Úlfhéðnar" + + + # Mongol Decisions + m_mongol_grand_yurt_decision: "Establish a Grand Yurt" + m_mongol_grand_yurt_decision_desc: "Commission and establish a grand yurt worthy of the great khan." + m_mongol_grand_yurt_decision_tooltip: "Commission a grand yurt in lieu of your status as the greatest of khans." + m_mongol_grand_yurt_decision_confirm: "Commission the Yurt" + + m_mongol_grand_yurt_recurrent_decision: "Gather Warriors in Spirit of the Great Khan" + m_mongol_grand_yurt_recurrent_decision_desc: "I shall summon warriors of reverence towards the great khan. All shall gather at the grand yurt." + m_mongol_grand_yurt_recurrent_decision_tooltip: "Gather warriors around the legacy of the great khan." + m_mongol_grand_yurt_recurrent_decision_confirm: "Summon Warriors" + + # Mongol Event + m_mongol_recurrent_event_title: "Gathering Forces" + m_mongol_recurrent_event_desc: "As the gathering at the grand yurt comes to a close, I am pleased to learn there are many who still revere the great khan and promise themselves in that honor. With the extra support and renewed strength, accomplishments are surely abound." + m_mongol_recurrent_event_option_text: "To the legacy of the Great Khan!" + + # Mongol Modifier + m_mongol_grand_yurt_recurrent_modifier: "Dynasty of the Great Khan" + m_mongol_grand_yurt_recurrent_modifier_desc: "This dynasty is one belonging to the greatest of all khans and has divine right of ownership over the grand yurt." + + # Prisoner Release Expanded + prisoner_release_expanded_interaction: "Ask Master Warden to Negotiate Release" + prisoner_release_expanded_interaction_desc: "Set your master warden to the task of negotiating a release with your prisoner." + prisoner_release_expanded_strong_hook_option_failure_toast_title: "Doubts regarding [recipient.GetTitledFirstName]'s promise." + + prisoner_release_expanded_strong_hook_option_success: "Swears loyalty to you" + prisoner_release_expanded_strong_hook_option_failure: "Disingenuously swears loyalty to you" + + # Court Positions + master_warden_court_position: "Master Warden" + master_warden_court_position_desc: "The master warden is responsible for prisoners and dealing with unscrupulous matters of the realm." + + master_of_intrigue_court_position: "Master of Intrigue" + master_of_intrigue_court_position_desc: "The master of intrigue is responsible for expanding the ruler's capability in matters of intrigue." + + master_warden_employer_custom_effect_description: "Will allow you to task them with negotiating releases for prisoners, giving you more release options." + court_liaison_court_position: "Court Liaison" + court_liaison_court_position_desc: "The court liaison is responsible for ensuring proper maintenance of the royal court and preserving the court's image to foreign diplomats alike." + diplomatic_liaison_court_position: "Diplomatic Liaison" + diplomatic_liaison_court_position_desc: "Is responsible for expanding the ruler's capability in matters of diplomacy." + ambassador_culture_court_position: "Cultural Ambassador" + ambassador_culture_court_position_desc: "Is responsible for creating cultural cohesion within the realm." + # Instruct Physician to Treat + instruct_physician_to_treat_ill_interaction: "Instruct Court Physician to Treat" + instruct_physician_to_treat_ill_interaction_desc: "Instruct your court physician to attempt treatment on [recipient.GetTitledFirstName]." + + # Instruct Physician Localizations + it_disease_event_title: "Treatment: Disease" + it_disease_event_desc: "\nI have instructed court physician to help aid in [recipient.GetTitledFirstName]'s affliction. " + it_disease_event_option_text.a: "I wish [recipient.GetTitledFirstName] a safe treatment and recovery." + it_disease_event_option_text.b: "I mean, what is the worst that is going to happen right?" + + it_wounded_event_title: "Treatment: Wound" + it_wounded_event_desc: "\nI have instructed my court physician to help treat [recipient.GetTitledFirstName]'s wound." + it_wounded_event_option_text.a: "I hope [recipient.GetTitledFirstName]'s wound clears up.' " + it_wounded_event_option_text.b: "I mean, what is the worst that is going to happen right?" + + # Military Gift Interaction + give_military_host_interaction: "Sponsor Military Host" + give_military_host_interaction_desc: "Sponsor an army for [recipient.GetTitledFirstName]" + pledged_house_guard: "Pledged House Guard" + pledged_pikemen_unit: "Pledged Pikemen" + pledged_light_horsemen: "Pledged Light Horsemen" + pledged_bowmen: "Pledged Bowmen" + pledged_light_footmen: "Pledged Light Footmen" + funded_small_army: "[actor.GetTitledFirstName]'s Sponsored Host" + funded_modest_army: "[actor.GetTitledFirstName]'s Sponsored Host" + funded_large_army: "[actor.GetTitledFirstName]'s Sponsored Host" + mh_small_army_requirement: "Requires [gold_i]250 [gold|E] and [prestige_i]100 [prestige|E]" + mh_medium_army_requirement: "Requires [gold_i]500 [gold|E] and [prestige_i]250 [prestige|E]" + mh_large_army_requirement: "Requires [gold_i]1000 [gold|E] and [prestige_i]500 [prestige|E]" + mh_can_send_requirement: "Must select and option to send" + + # New Mongol Culture + neo_mongol: "Tibetan Mongol" + neo_mongol_name: "Tibetan Mongol" + neo_mongol_collective_noun: "Tibetan Mongols" + neo_mongol_prefix: "Tibetan Mongolic" + + # New Norse Culture + aesir_norse: "Æsir Norse" + neo_mongol_name: "Æsir Norse" + neo_mongol_collective_noun: "Æsir Norse" + neo_mongol_prefix: "Æsir Norse" + + # New Norse Religion + # aesiric_religion: "Æsiric Norse" + # aesiric_religion_adj: "Æsiric Norse" + # aesiric_religion_adherent: "Æsiric Norse" + # aesiric_religion_adherent_plural: "Æsiric Norse" + # aesiric_religion_desc: "The native faith of the Scandinavian region combined with an unknown source from an unknown land in the west. Norse paganism revolves around reverence of gods known as the Æsir. Adherents are expected to live — and preferably die — in an honorable fashion." + + # aesiric_norse: "Æsiric Ásatrú" + # aesiric_norse_adj: "Æsiric Ásatrú" + # aesiric_norse_adherent: "Æsiric Ásatrúan" + # aesiric_norse_adherent_plural: "Æsiric Ásatrúans" + + # aesiric_norse_old: "Old Æsiric Ásatrú" + # aesiric_norse_old_adj: "Old Æsiric Ásatrú" + # aesiric_norse_old_adherent: "Old Æsiric Ásatrúan" + # aesiric_norse_old_adherent_plural: "Old Æsiric Ásatrúans" + + # Norse Decision to Integrate Christians + m_integrate_chrisitian_norse_decision: "Bond the Ásatrú-Christian Divide" + m_integrate_chrisitian_norse_decision_desc: "By Odin's wisdom, I will be the bridge between us and the christians. Bridging the divide will mean bringing prosperity and working relationships for both our people." + m_integrate_chrisitian_norse_decision_tooltip: "You seek to bring people of your faith and of christianity to a level of tolerance." + m_integrate_chrisitian_norse_decision_confirm: "Mend the Differences" + + # Norse-Christian Integration Event + m_integrate_chrisitian_norse_event_title: "Ásatrú-Christian Mending" + m_integrate_chrisitian_norse_event_desc: "\nAfter much deliberation, cooperation and familiarization, it has come to agreement that Ásatrú and Christiandom should work together towards common goals rather than fighting amongst eachother. While it is a tenuous relationship, no longer should hatred be harbored between the two. \n\nShall the bond between our people lead to prosperity!" + m_integrate_chrisitian_norse_event_option_text: "To Valhalla and Heaven!" + + # Dynasty Bailiffs Decision + m_dynasty_bailiffs_decision: "Propose Synergistic Dynasty Bailiffs" + m_dynasty_bailiffs_decision_tooltip: "Work with members of your dynasty to promote control and prosperity." + m_dynasty_bailiff_decision_desc: "Work cohesively with your landed house members to promote control and prosperity in the realms of dynasty members." + m_dynasty_bailiffs_decision_confirm: "Send Proposal" + m_dynasty_bailiff_decision_modifier: "Dynasty Bailiffs" + m_dynasty_bailiff_decision_modifier_desc: "A house of this dynasty is working together to boost properity throughout all realms of the dynasty.\n" + + # Dynasty Bailiff Event + m_dynasty_bailiff_event_title: "Dynastic Synergy: Bailiffs" + m_dynasty_bailiff_event_desc: "\n\nHaving sent a messenger to deliver letters detailing my proposal to my kinfolk, I reminisce on dynasties of old whose names live on without nary a single member of the bloodline carrying the name forward. Will those names fade with time? Could true unity between bloodlines create an everlasting name with many descendants to carry it forward in perpetuity? \n\nAfter an anxious wait, I recieve correspondence from various house members agreeing to the proposal. It shall not be said that [ROOT.Char.GetTitledFirstName] had no part in creating a dynasty that will endure!" + m_dynasty_bailiff_event_desc_2: "\n\nAwaiting a response, I contemplate what it means to be family. Some may despise thier blood, and others may revere it. For better or worse, it is essential that all members contribute to maintain the family line.\n\nAs I recieve word, the letters thusly come into agreement on a united effort to strengthen all dynastic realms. Whether through pure motive and intent or not, our houses are surely meant to live on! " + m_dynasty_bailiff_event_desc_3: "\n\nRecieving word from many of my kinfolk, one phrase struck me as quite an emphatic response: #italic 'Those who do not look upon themselves as a link, connecting the past with the future, faith their duty to the world.' #! \n\nPut succinctly, is it our duty to the world, our kin, or neither?" + m_dynasty_bailiff_event_desc_4: "\n\nAs I read the many affirmations from my kinfolk on the idea, I delve into an old book to find a befitting quote I remember regarding family history:\n\n #italic 'I am bound to them though I cannot look into their eyes or hear their voices. I honor their history. I cherish their lives. I will tell their story. I will remember them for I am the result of the very love, struggle, sacrifice and journey of thousands.' #! " + m_dynasty_bailiff_event_desc_5: "\n\nReading through the parchments, I find mutual support for the betterment of all our realms.\n\nOur realms must remain strong, else may we find the weakest link dooms us all. Luckily, this effort should help our legacies endure! + m_dynasty_bailiff_event_option_text: " #EMP [ROOT.Char.GetHouse.GetMotto]. #! " + m_dynasty_bailiff_event_option_text_2: "May we prosper!" + m_dynasty_bailiff_event_option_text_3.a: "Our duty is to the world." + m_dynasty_bailiff_event_option_text_3.b: "Our duty is to our family." + m_dynasty_bailiff_event_option_text_3.c: "Neither." + m_dynasty_bailiff_event_option_text_3.d: "Why think about it, there are realms to oversee!" + m_dynasty_bailiff_event_option_text_4.a: "Quite the introspection!" + m_dynasty_bailiff_event_option_text_4.b: "#italic Free me of thee, mighty cloud of dust! #!" + m_dynasty_bailiff_event_option_text_5.a: "To glory!" + m_dynasty_bailiff_event_option_text_5.b: "May [ROOT.Char.GetFaith.HighGodName] look upon us with pride." + + # Increase Fervor Decision + m_fervor_decision: "Use Religious Standing to Increase Fervor" + m_fervor_decision_tooltip: "Increase the fervor of your [faith|E]" + m_fervor_decision_confirm: "Reinvigorate the Faithful" + m_fervor_decision_desc: "[ROOT.Char.GetFaith.HighGodName] is due that of the faithful to stoke the hearts of fellow adherents alike." diff --git a/ugc_2220098919.mod b/ugc_2220098919.mod new file mode 100755 index 0000000..26b71a8 --- /dev/null +++ b/ugc_2220098919.mod @@ -0,0 +1,11 @@ +version="3.2.19" +tags={ + "Historical" + "Portraits" + "Graphics" +} +name="Community Flavor Pack" +picture="thumbnail.png" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2220098919" +remote_file_id="2220098919" \ No newline at end of file diff --git a/ugc_2227658180.mod b/ugc_2227658180.mod new file mode 100755 index 0000000..1f40190 --- /dev/null +++ b/ugc_2227658180.mod @@ -0,0 +1,10 @@ +version="1.3.0" +tags={ + "Events" + "Gameplay" + "Culture" +} +name="VIET Events - A Flavor and Immersion Event Mod" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2227658180" +remote_file_id="2227658180" \ No newline at end of file diff --git a/ugc_2243307127.mod b/ugc_2243307127.mod new file mode 100755 index 0000000..9bd629a --- /dev/null +++ b/ugc_2243307127.mod @@ -0,0 +1,12 @@ +version="1.12.3" +tags={ + "Bookmarks" + "Historical" + "Total Conversion" +} +name="The Fallen Eagle - 'The Last of the Romans' Update" +picture="thumbnail.png" +replace_path="gfx/interface/illustrations/loading_screens" +supported_version="1.12.5" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2243307127" +remote_file_id="2243307127" \ No newline at end of file diff --git a/ugc_2256989379.mod b/ugc_2256989379.mod new file mode 100755 index 0000000..d7c51ca --- /dev/null +++ b/ugc_2256989379.mod @@ -0,0 +1,10 @@ +version="1.11" +tags={ + "Gameplay" + "Warfare" + "Fixes" +} +name="War Alerts - Customisable War Notifications" +supported_version="1.8.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2256989379" +remote_file_id="2256989379" \ No newline at end of file diff --git a/ugc_2273832430.mod b/ugc_2273832430.mod new file mode 100755 index 0000000..eb28f39 --- /dev/null +++ b/ugc_2273832430.mod @@ -0,0 +1,14 @@ +version="1.3.0" +tags={ + "Culture" + "Events" + "Decisions" + "Gameplay" + "Map" + "Historical" + "Religion" +} +name="Regional Immersion and Cultural Enrichment (RICE)" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2273832430" +remote_file_id="2273832430" \ No newline at end of file diff --git a/ugc_2276469612.mod b/ugc_2276469612.mod new file mode 100755 index 0000000..d1573e6 --- /dev/null +++ b/ugc_2276469612.mod @@ -0,0 +1,8 @@ +version="1.0" +tags={ + "Gameplay" +} +name="Population Control (Reduce late-game lag)" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2276469612" +remote_file_id="2276469612" \ No newline at end of file diff --git a/ugc_2452585382.mod b/ugc_2452585382.mod new file mode 100755 index 0000000..862febe --- /dev/null +++ b/ugc_2452585382.mod @@ -0,0 +1,12 @@ +version="3.0.0" +tags={ + "Culture" + "Historical" + "Map" + "Graphics" +} +name="Medieval Arts" +picture="thumbnail.png" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2452585382" +remote_file_id="2452585382" \ No newline at end of file diff --git a/ugc_2461764433.mod b/ugc_2461764433.mod new file mode 100755 index 0000000..eb6784c --- /dev/null +++ b/ugc_2461764433.mod @@ -0,0 +1,9 @@ +version="1.0" +tags={ + "Character Interactions" + "Religion" +} +name="Temporal Excommunication" +supported_version="1.4.4" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2461764433" +remote_file_id="2461764433" \ No newline at end of file diff --git a/ugc_2478202444.mod b/ugc_2478202444.mod new file mode 100755 index 0000000..6181c56 --- /dev/null +++ b/ugc_2478202444.mod @@ -0,0 +1,9 @@ +version="1" +tags={ + "Gameplay" + "Utilities" +} +name="Ruler Designer Unlocked" +supported_version="1.14.2.2" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2478202444" +remote_file_id="2478202444" \ No newline at end of file diff --git a/ugc_2510421095.mod b/ugc_2510421095.mod new file mode 100755 index 0000000..c238ef9 --- /dev/null +++ b/ugc_2510421095.mod @@ -0,0 +1,9 @@ +version="1.0.1" +tags={ + "Utilities" + "Decisions" +} +name="Convert Holdings Continued" +supported_version="1.12.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2510421095" +remote_file_id="2510421095" \ No newline at end of file diff --git a/ugc_2530704149.mod b/ugc_2530704149.mod new file mode 100755 index 0000000..d55bfd7 --- /dev/null +++ b/ugc_2530704149.mod @@ -0,0 +1,10 @@ +version="1.0" +picture="thumbnail.png" +tags={ + "Balance" + "Fixes" +} +name="Better AI Education + Infinite Wards" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2530704149" +remote_file_id="2530704149" \ No newline at end of file diff --git a/ugc_2687006388.mod b/ugc_2687006388.mod new file mode 100755 index 0000000..0de0bbf --- /dev/null +++ b/ugc_2687006388.mod @@ -0,0 +1,9 @@ +version="1.2.8" +tags={ + "Utilities" +} +name="Auto accept indulgences" +picture="thumbnail.png" +supported_version="1.14.*.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2687006388" +remote_file_id="2687006388" \ No newline at end of file diff --git a/ugc_2692079378.mod b/ugc_2692079378.mod new file mode 100755 index 0000000..8644780 --- /dev/null +++ b/ugc_2692079378.mod @@ -0,0 +1,11 @@ +version="1.0." +tags={ + "Culture" + "Graphics" + "Map" + "Historical" +} +name="Medieval Arts - More Special Buildings" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2692079378" +remote_file_id="2692079378" \ No newline at end of file diff --git a/ugc_2753176859.mod b/ugc_2753176859.mod new file mode 100755 index 0000000..b7aacd4 --- /dev/null +++ b/ugc_2753176859.mod @@ -0,0 +1,10 @@ +version="1.074" +tags={ + "Decisions" + "Character Interactions" + "Utilities" +} +name="Mass Demand Conversion" +supported_version="1.13.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2753176859" +remote_file_id="2753176859" \ No newline at end of file diff --git a/ugc_2758929181.mod b/ugc_2758929181.mod new file mode 100755 index 0000000..891a453 --- /dev/null +++ b/ugc_2758929181.mod @@ -0,0 +1,10 @@ +version="1.0" +tags={ + "Decisions" + "Gameplay" +} +name="Found Universities Anywhere" +picture="thumbnail.png" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2758929181" +remote_file_id="2758929181" \ No newline at end of file diff --git a/ugc_2766931815.mod b/ugc_2766931815.mod new file mode 100755 index 0000000..e1be6a4 --- /dev/null +++ b/ugc_2766931815.mod @@ -0,0 +1,12 @@ +version="1.0.1" +tags={ + "Gameplay" + "Decisions" + "Utilities" + "Graphics" +} +name="Royal Courts Mod Collection" +picture="thumbnail.png" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2766931815" +remote_file_id="2766931815" \ No newline at end of file diff --git a/ugc_2775136333.mod b/ugc_2775136333.mod new file mode 100755 index 0000000..1061630 --- /dev/null +++ b/ugc_2775136333.mod @@ -0,0 +1,8 @@ +version="1.22.0322" +tags={ + "Decisions" +} +name="Abdication" +supported_version="1.10.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2775136333" +remote_file_id="2775136333" \ No newline at end of file diff --git a/ugc_2859278694.mod b/ugc_2859278694.mod new file mode 100755 index 0000000..7480e8f --- /dev/null +++ b/ugc_2859278694.mod @@ -0,0 +1,9 @@ +version="1.10" +tags={ + "Gameplay" + "Character Focuses" +} +name="More Legacies" +supported_version="1.13.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2859278694" +remote_file_id="2859278694" \ No newline at end of file diff --git a/ugc_2914047110.mod b/ugc_2914047110.mod new file mode 100755 index 0000000..73d89c8 --- /dev/null +++ b/ugc_2914047110.mod @@ -0,0 +1,13 @@ +version="1.3.0" +tags={ + "Schemes" + "Character Interactions" + "Decisions" + "Events" + "Gameplay" + "Warfare" +} +name="Feud" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2914047110" +remote_file_id="2914047110" \ No newline at end of file diff --git a/ugc_2962333032.mod b/ugc_2962333032.mod new file mode 100755 index 0000000..87a342b --- /dev/null +++ b/ugc_2962333032.mod @@ -0,0 +1,34 @@ +version="0.3.6" +name="A Game of Thrones" +tags={ + "Total Conversion" + "Gameplay" + "Map" +} +replace_path="common/achievements" +replace_path="common/bookmarks/bookmarks" +replace_path="common/bookmarks/groups" +replace_path="common/bookmark_portraits" +replace_path="common/coat_of_arms/dynamic_definitions" +replace_path="common/culture/cultures" +replace_path="common/culture/pillars" +replace_path="common/dna_data" +replace_path="common/dynasties" +replace_path="common/dynasty_house_motto_inserts" +replace_path="common/dynasty_house_mottos" +replace_path="common/dynasty_houses" +replace_path="common/landed_titles" +replace_path="common/religion/holy_sites" +replace_path="common/religion/religion_families" +replace_path="common/religion/religions" +replace_path="history/characters" +replace_path="history/cultures" +replace_path="common/defines/graphic" +replace_path="history/provinces" +replace_path="history/titles" +replace_path="history/wars" +replace_path="map_data/geographical_regions" +replace_path="tests" +supported_version="1.14.2.2" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2962333032" +remote_file_id="2962333032" \ No newline at end of file diff --git a/ugc_2979863382.mod b/ugc_2979863382.mod new file mode 100755 index 0000000..1c90646 --- /dev/null +++ b/ugc_2979863382.mod @@ -0,0 +1,10 @@ +version="1.5.1" +tags={ + "Utilities" + "Gameplay" +} +name="Balanced Buyable Building Slots updated" +picture="thumbnail.png" +supported_version="1.12.3" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2979863382" +remote_file_id="2979863382" \ No newline at end of file diff --git a/ugc_2979921118.mod b/ugc_2979921118.mod new file mode 100755 index 0000000..19d9bdc --- /dev/null +++ b/ugc_2979921118.mod @@ -0,0 +1,9 @@ +version="B_0.1" +tags={ + "Character Interactions" + "Gameplay" +} +name="Universal Contract Assistance & Foment Revolt" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2979921118" +remote_file_id="2979921118" \ No newline at end of file diff --git a/ugc_2986538297.mod b/ugc_2986538297.mod new file mode 100755 index 0000000..48cb323 --- /dev/null +++ b/ugc_2986538297.mod @@ -0,0 +1,8 @@ +version="0.1.2" +tags={ + "Utilities" +} +name="Divine Intervention Cheat Menu" +supported_version="1.14.2.2" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2986538297" +remote_file_id="2986538297" \ No newline at end of file diff --git a/ugc_2988672797.mod b/ugc_2988672797.mod new file mode 100755 index 0000000..8df671a --- /dev/null +++ b/ugc_2988672797.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Character Interactions" + "Gameplay" + "Balance" +} +name="Find Spouse Expanded" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2988672797" +remote_file_id="2988672797" \ No newline at end of file diff --git a/ugc_2989664759.mod b/ugc_2989664759.mod new file mode 100755 index 0000000..6779f1f --- /dev/null +++ b/ugc_2989664759.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Decisions" + "Gameplay" + "Balance" +} +name="Ingratiate Heir Decision" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2989664759" +remote_file_id="2989664759" \ No newline at end of file diff --git a/ugc_2992224656.mod b/ugc_2992224656.mod new file mode 100755 index 0000000..dab675b --- /dev/null +++ b/ugc_2992224656.mod @@ -0,0 +1,10 @@ +version="0.1A" +tags={ + "Balance" + "Character Interactions" + "Gameplay" +} +name="Vassal Fealty to Heir" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/2992224656" +remote_file_id="2992224656" \ No newline at end of file diff --git a/ugc_3004857960.mod b/ugc_3004857960.mod new file mode 100755 index 0000000..0910af8 --- /dev/null +++ b/ugc_3004857960.mod @@ -0,0 +1,9 @@ +version="1.3" +tags={ + "Character Interactions" + "Gameplay" +} +name="Grant Titles to Anyone" +supported_version="1.12.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/3004857960" +remote_file_id="3004857960" \ No newline at end of file diff --git a/ugc_3006147147.mod b/ugc_3006147147.mod new file mode 100755 index 0000000..1c97ec0 --- /dev/null +++ b/ugc_3006147147.mod @@ -0,0 +1,9 @@ +version="1" +tags={ + "Utilities" + "Graphics" +} +name="Scrollable Character Interaction Window" +supported_version="1.12.5" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/3006147147" +remote_file_id="3006147147" \ No newline at end of file diff --git a/ugc_3084203091.mod b/ugc_3084203091.mod new file mode 100755 index 0000000..8cf4bec --- /dev/null +++ b/ugc_3084203091.mod @@ -0,0 +1,11 @@ +version="11.0" +tags={ + "Gameplay" + "Utilities" + "Fixes" +} +name="Advanced Character Search" +picture="thumbnail.png" +supported_version="1.14.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/3084203091" +remote_file_id="3084203091" \ No newline at end of file diff --git a/ugc_3143275236.mod b/ugc_3143275236.mod new file mode 100755 index 0000000..4d17feb --- /dev/null +++ b/ugc_3143275236.mod @@ -0,0 +1,10 @@ +version="0.1" +tags={ + "Schemes" + "Gameplay" + "Character Interactions" +} +name="Medievel Thievery" +supported_version="1.*" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/3143275236" +remote_file_id="3143275236" \ No newline at end of file diff --git a/ugc_3219589892.mod b/ugc_3219589892.mod new file mode 100755 index 0000000..998e3fc --- /dev/null +++ b/ugc_3219589892.mod @@ -0,0 +1,10 @@ +version="1" +tags={ + "Balance" + "Gameplay" + "Graphics" +} +name="Court Positions +" +supported_version="1.12.5" +path="/ldata/lstorage/SSD_nixspand4/SteamLibrary/steamapps/workshop/content/1158310/3219589892" +remote_file_id="3219589892" \ No newline at end of file