delectable

This commit is contained in:
Magpie490 2025-10-30 11:25:16 +00:00
parent f935f5a615
commit b358a492bc
443 changed files with 358171 additions and 111974 deletions

View file

@ -1,828 +0,0 @@
#Interactions relating to the head of the dynasty
adopt_interaction = {
icon = icon_dynasty
category = interaction_category_diplomacy
interface_priority = 60
desc = adopt_interaction_desc
use_diplomatic_range = yes
is_shown = {
OR = {
# Cultures that default with this tradition should still be able to adopt
scope:actor.culture = { has_cultural_parameter = allows_adoption }
NOT = {
has_game_rule = no_adoption
}
}
NOT = {
scope:recipient = scope:actor
}
scope:actor = {
is_adult = yes
OR = {
# Compassionate people like adopting
has_trait = compassionate
# Game rule as an overriding factor
has_game_rule = adoption_always_allowed
# You have no kids and your fertility is low
AND = {
any_child = {
count < 1
}
fertility <= low_fertility
}
# You are married to a same-sex partner
AND = {
is_married = yes
# People in bisexual polygamous spheres are not valid for this
NOT = {
OR = {
AND = {
any_consort = {
is_female = yes
}
is_male = yes
}
AND = {
any_consort = {
is_male = yes
}
is_female = yes
}
}
}
}
# You are unmarried and uninterested in having biological children
AND = {
is_married = no
OR = {
has_sexuality = asexual
has_sexuality = homosexual
}
}
# You have a cultrad that lets you adopt
culture = { has_cultural_parameter = allows_adoption }
}
OR = {
# You are unmarried
is_married = no
# You are the dominant partner in at least one of your marriages
AND = {
is_female = yes
matrilinear_marriage = yes
}
AND = {
is_male = yes
matrilinear_marriage = no
}
# Your marriage is same-sex
NOT = {
OR = {
AND = {
any_consort = {
is_female = yes
}
is_male = yes
}
AND = {
any_consort = {
is_male = yes
}
is_female = yes
}
}
}
}
}
scope:recipient = {
# Children only
is_adult = no
# Landless only (ruler used to catch edge-cases of landless HoF children)
is_ruler = no
# Don't get imprisoned children and so on
is_available = yes
# None of their close relatives are rulers
NOT = {
any_close_or_extended_family_member = { is_ruler = yes }
}
# They don't already belong to your house
NOT = { house = scope:actor.house }
# Don't adopt your own grandkids
NOT = {
any_ancestor = {
this = scope:actor
}
}
# Don't steal the King of France's great nephew
NOT = {
any_liege_or_above = {
prev.dynasty = dynasty
}
}
}
}
is_valid = {}
is_valid_showing_failures_only = {}
send_option = { # EP3 Influence
is_shown = { # Actor must have a government that uses influence
scope:actor = {
government_has_flag = government_has_influence
}
}
is_valid = {
# Actor has enough influence
scope:actor = { influence >= medium_influence_value }
# Both characters are within the same top realm
scope:recipient.top_liege = scope:actor.top_liege
}
flag = influence_send_option
localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE
}
send_options_exclusive = no
on_accept = {
show_as_tooltip = {
adopt_effect = {
CHILD = scope:recipient
ADOPTER = scope:actor
}
}
hidden_effect = {
scope:actor = { trigger_event = adoption.0001 }
}
}
cost = {
renown = {
value = {
add = medium_dynasty_prestige_value
if = { # Free for free adoption
limit = {
scope:actor = {
OR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
}
}
}
multiply = 0
}
if = { # Free for same-sex couples
limit = {
scope:actor = {
OR = {
AND = {
any_consort = {
is_female = yes
}
is_female = yes
}
AND = {
any_consort = {
is_male = yes
}
is_male = yes
}
}
}
}
multiply = 0
}
}
}
prestige = {
value = {
add = medium_prestige_value
if = {
limit = {
scope:actor = {
OR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
}
}
}
multiply = 0
}
}
}
piety = {
value = {
add = medium_piety_value
if = {
limit = {
scope:actor = {
OR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
}
}
}
multiply = 0
}
# No piety cost for adopting a righteous-faith child
if = {
limit = {
scope:actor.faith = {
faith_hostility_level = {
target = scope:recipient.faith
value < faith_astray_level
}
}
}
multiply = 0
}
else_if = {
limit = {
scope:actor.faith = {
faith_hostility_level = {
target = scope:recipient.faith
value > faith_astray_level
}
}
}
add = minor_piety_value
}
else_if = {
limit = {
scope:actor.faith = {
faith_hostility_level = {
target = scope:recipient.faith
value > faith_hostile_level
}
}
}
add = medium_piety_value
}
}
}
influence = {
value = 0
if = {
limit = { scope:influence_send_option = yes }
add = scope:actor.medium_influence_value
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
}
ai_potential = {
any_child = {
count < 2
}
OR = {
fertility <= low_fertility
AND = {
is_male = yes
NOT = {
any_spouse = {
fertility > low_fertility
is_female = yes
}
}
}
AND = {
is_female = yes
NOT = {
any_spouse = {
fertility > low_fertility
is_male = yes
}
}
}
}
}
ai_targets = {
ai_recipients = courtiers
ai_recipients = guests
# Friends, wards, etc.
ai_recipients = scripted_relations
max = 20
}
ai_accept = {
base = 0
modifier = { # My parents are alive
add = -15
desc = parents_are_alive_tt
OR = {
father ?= { is_alive = yes }
mother ?= { is_alive = yes }
}
}
modifier = { # I hate my mother
add = 10
desc = i_hate_my_mother_tt
exists = mother
mother = { is_alive = yes }
opinion = {
value <= medium_negative_opinion
target = mother
}
}
modifier = { # I hate my father
add = 10
desc = i_hate_my_father_tt
exists = father
father = { is_alive = yes }
opinion = {
value <= medium_negative_opinion
target = father
}
}
modifier = { # I like my mother
add = -10
desc = i_like_my_mother_tt
exists = mother
mother = { is_alive = yes }
opinion = {
value >= medium_positive_opinion
target = mother
}
}
modifier = { # I like my father
add = -10
desc = i_like_my_father_tt
exists = father
father = { is_alive = yes }
opinion = {
value >= medium_positive_opinion
target = father
}
}
modifier = { # I like you
add = {
value = 5
if = {
limit = {
opinion = {
value >= high_positive_opinion
target = scope:actor
}
}
add = 10
}
if = {
limit = {
opinion = {
value >= very_high_positive_opinion
target = scope:actor
}
}
add = 10
}
}
desc = i_like_you_tt
opinion = {
value >= medium_positive_opinion
target = scope:actor
}
}
modifier = { # You're my friend :)
add = 10
desc = youre_my_friend_tt
has_relation_friend = scope:actor
}
modifier = { # You're my guardian
add = 10
desc = youre_my_guardian_tt
has_relation_guardian = scope:actor
}
modifier = { # I have no mother
add = 5
desc = i_want_a_mother_tt
scope:actor = { is_female = yes }
OR = {
NOT = { exists = mother }
mother = { is_alive = no }
}
}
modifier = { # I have no father
add = 5
desc = i_want_a_father_tt
scope:actor = { is_male = yes }
OR = {
NOT = { exists = father }
father = { is_alive = no }
}
}
modifier = { # I am a noble!
add = -15
desc = i_am_noble_tt
has_no_particular_noble_roots_trigger = no
}
modifier = { # We are so alike ^^
add = {
value = 5
if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 2
}
}
multiply = 2
}
else_if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 3
}
}
multiply = 3
}
else_if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 4
}
}
multiply = 4
}
}
desc = we_are_alike_tt
number_of_personality_traits_in_common = {
target = scope:actor
value >= 1
}
}
modifier = { # Yo, you're offering me a place in a landed house? Sick.
add = 10
desc = ambition_tt
has_trait = ambitious
}
modifier = {
add = 25
scope:influence_send_option = yes
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
ai_frequency = 120
ai_will_do = {
base = 50
modifier = { # I am childless and my marriage will never produce heirs
add = 100
scope:actor = {
any_child = {
count < 1
}
OR = {
fertility <= low_fertility
AND = {
is_male = yes
NOT = {
any_spouse = {
fertility > low_fertility
is_female = yes
}
}
}
AND = {
is_female = yes
NOT = {
any_spouse = {
fertility > low_fertility
is_male = yes
}
}
}
}
}
}
modifier = { # I am kind and the child is an orphan
add = 100
scope:actor = {
ai_compassion >= high_positive_compassion
}
NOT = {
exists = scope:recipient.mother
exists = scope:recipient.father
}
}
modifier = { # Traits in common
add = 25
scope:actor = {
number_of_personality_traits_in_common = {
target = scope:recipient
value = 1
}
}
}
modifier = { # Traits in common
add = 25
scope:actor = {
number_of_personality_traits_in_common = {
target = scope:recipient
value = 2
}
}
}
modifier = { # Traits in common
add = 25
scope:actor = {
number_of_personality_traits_in_common = {
target = scope:recipient
value = 3
}
}
}
modifier = { # My culture is into adoption
add = 25
scope:actor = {
OR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
}
}
}
modifier = { # I like the kid
add = 25
scope:actor = {
opinion = {
value >= medium_positive_opinion
target = scope:recipient
}
}
}
modifier = { # The kid is my friend uwu
add = 25
scope:actor = {
has_relation_friend = scope:recipient
}
}
modifier = { # The kid is my ward
add = 25
scope:actor = {
has_relation_guardian = scope:recipient
}
}
modifier = { # I care about bloodlines and dynasties and whatnot
add = -25
scope:actor = {
NOR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
has_trait = humble
has_trait = callous
}
}
}
modifier = { # I will not adopt filthy filthy heretics
factor = 0
faith = {
faith_hostility_level = {
target = scope:recipient.faith
value >= faith_astray_level
}
}
}
}
}
adventurer_adopt_interaction = {
icon = icon_adopt_house_member
category = interaction_category_diplomacy
interface_priority = 60
cooldown = { years = 2 }
desc = adventurer_adopt_interaction_desc
use_diplomatic_range = yes
is_shown = {
scope:actor = { is_landless_adventurer = yes }
scope:recipient = {
is_ruler = no
# They don't already belong to your dynasty
NOT = { dynasty = scope:actor.dynasty }
}
}
is_valid = {}
is_valid_showing_failures_only = {
# Don't get imprisoned children and so on
scope:recipient = {
is_available = yes
is_courtier_of = scope:actor
opinion = {
value >= 40 # sync with define:NDomicile|TEMPERAMENT_THRESHOLD_HIGH
target = scope:actor
}
has_no_particular_noble_roots_trigger = yes
}
scope:recipient = {
NOT = { has_trait = devoted }
}
scope:recipient = {
NOT = { has_trait = gallivanter }
}
}
on_accept = {
show_as_tooltip = {
adventurer_adopt_effect = {
CHILD = scope:recipient
ADOPTER = scope:actor
}
scope:actor = { set_designated_heir = scope:recipient }
}
hidden_effect = {
scope:actor = { trigger_event = adoption.0002 }
}
}
cost = {
prestige = {
value = {
add = medium_prestige_value
if = {
limit = {
scope:actor = {
OR = {
culture = { has_cultural_parameter = free_adoption }
has_game_rule = adoption_always_allowed
}
}
}
multiply = 0
}
}
}
}
ai_accept = {
base = 0
modifier = { # My parents are alive
add = -15
desc = parents_are_alive_tt
OR = {
father ?= { is_alive = yes }
mother ?= { is_alive = yes }
}
}
modifier = { # I hate my mother
add = 10
desc = i_hate_my_mother_tt
exists = mother
mother = { is_alive = yes }
opinion = {
value <= medium_negative_opinion
target = mother
}
}
modifier = { # I hate my father
add = 10
desc = i_hate_my_father_tt
exists = father
father = { is_alive = yes }
opinion = {
value <= medium_negative_opinion
target = father
}
}
modifier = { # I like my mother
add = -10
desc = i_like_my_mother_tt
exists = mother
mother = { is_alive = yes }
opinion = {
value >= medium_positive_opinion
target = mother
}
}
modifier = { # I like my father
add = -10
desc = i_like_my_father_tt
exists = father
father = { is_alive = yes }
opinion = {
value >= medium_positive_opinion
target = father
}
}
modifier = { # I like you
add = {
value = 5
if = {
limit = {
opinion = {
value >= high_positive_opinion
target = scope:actor
}
}
add = 10
}
if = {
limit = {
opinion = {
value >= very_high_positive_opinion
target = scope:actor
}
}
add = 10
}
}
desc = i_like_you_tt
opinion = {
value >= medium_positive_opinion
target = scope:actor
}
}
modifier = { # You're my friend :)
add = 10
desc = youre_my_friend_tt
has_relation_friend = scope:actor
}
modifier = { # You're my guardian
add = 10
desc = youre_my_guardian_tt
has_relation_guardian = scope:actor
}
modifier = { # I have no mother
add = 5
desc = i_want_a_mother_tt
scope:actor = { is_female = yes }
OR = {
NOT = { exists = mother }
mother = { is_alive = no }
}
}
modifier = { # I have no father
add = 5
desc = i_want_a_father_tt
scope:actor = { is_male = yes }
OR = {
NOT = { exists = father }
father = { is_alive = no }
}
}
modifier = { # I am a noble!
add = -15
desc = i_am_noble_tt
has_no_particular_noble_roots_trigger = no
}
modifier = { # We are so alike ^^
add = {
value = 5
if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 2
}
}
multiply = 2
}
else_if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 3
}
}
multiply = 3
}
else_if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:actor
value = 4
}
}
multiply = 4
}
}
desc = we_are_alike_tt
number_of_personality_traits_in_common = {
target = scope:actor
value >= 1
}
}
modifier = { # Yo, you're offering me a place in a landed house? Sick.
add = 10
desc = ambition_tt
has_trait = ambitious
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,518 +0,0 @@
blackmail_interaction = {
category = interaction_category_hostile
common_interaction = yes
interface = blackmail
popup_on_receive = yes
icon = secret
ai_maybe = yes
desc = blackmail_interaction_desc
on_decline_summary = blackmail_decline_summary
is_shown = {
scope:recipient = {
NOT = { this = scope:actor }
age > 10
}
scope:recipient = {
any_secret = {
is_known_by = scope:actor
}
}
}
is_valid_showing_failures_only = {
scope:recipient = {
is_busy_in_events_localised = yes
}
#Not at war with them
NOT = {
scope:actor = { is_at_war_with = scope:recipient }
}
#Already have a strong hook
custom_description = {
text = "already_strong_hook"
subject = scope:actor
object = scope:recipient
NOT = {
scope:actor = { has_strong_hook = scope:recipient }
}
}
#No appropriate secret
custom_description = {
scope:recipient = {
any_secret = {
is_blackmailable_secret_trigger = {
BLACKMAILER = scope:actor
PARTICIPANT = scope:recipient
}
}
}
text = "no_blackmailable_secret"
}
}
is_highlighted = {
scope:recipient = {
any_secret = {
is_known_by = scope:actor
is_blackmailable_secret_trigger = { BLACKMAILER = scope:actor PARTICIPANT = scope:recipient }
}
}
scope:actor = {
NOR = {
has_hook_of_type = {
target = scope:recipient
type = weak_blackmail_hook
}
has_hook_of_type = {
target = scope:recipient
type = strong_blackmail_hook
}
}
}
}
has_valid_target_showing_failures_only = {
exists = scope:target
scope:target = {
is_known_by = scope:actor
is_blackmailable_secret_trigger = { BLACKMAILER = scope:actor PARTICIPANT = scope:recipient }
}
}
can_send = {
custom_description = { # Exploit prevention
text = "has_sent_interaction_already"
subject = scope:recipient
scope:actor = {
NOT = { exists = var:currently_blackmailing }
}
}
}
on_send = {
hidden_effect = {
# Block sending another interaction while rejection event is active
scope:actor = {
set_variable = {
name = currently_blackmailing
value = scope:recipient
days = 30
}
}
scope:target = {
if = {
limit = {
exists = secret_target
}
secret_target = {
save_scope_as = secret_target
}
}
if = {
limit = {
secret_type = secret_disputed_heritage
}
secret_target.father = {
save_scope_as = father
}
secret_target.real_father = {
save_scope_as = real_father
}
}
if = {
limit = {
scope:target = {
secret_type = secret_disputed_heritage
}
}
secret_target.father = {
save_scope_as = father
}
secret_target.real_father = {
save_scope_as = real_father
}
}
}
}
}
on_accept = {
scope:actor = {
remove_variable = currently_blackmailing
play_music_cue = mx_cue_murder
}
blackmail_interaction_effect = yes #Adds strong or weak hook + opinion penalty
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_blackmail.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_decline = {
#Return event about exposing the secret
#AI will always expose
if = {
limit = {
scope:actor = { is_ai = no }
}
scope:recipient = {
custom_tooltip = BLACKMAIL_INTERACTION_HUMAN_TT
}
}
show_as_tooltip = {
if = {
limit = { exists = scope:secret }
scope:secret = {
expose_secret = scope:actor
}
}
if = {
limit = { exists = scope:target }
scope:target = {
expose_secret = scope:actor
}
}
}
scope:actor = { trigger_event = blackmail.0001 }
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_blackmail.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_blocked_effect = {
scope:actor = { remove_variable = currently_blackmailing }
}
ai_accept = {
base = 0
modifier = {
add = 80
desc = BLACKMAIL_INTERACTION_BASE_ACCEPTANCE
}
modifier = {
add = -20
scope:recipient = {
has_trait = brave
}
desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE
}
modifier = {
add = -20
scope:recipient = {
has_trait = arrogant
}
desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE
}
modifier = {
add = 10
scope:recipient = {
has_trait = craven
}
desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE
}
modifier = {
add = 50
scope:recipient = {
has_trait = paranoid
}
desc = BLACKMAIL_INTERACTION_PARANOID_ACCEPTANCE
}
# Unity modifiers
evaluate_action_decreasing_house_unity = {
VALUE = 25
}
opinion_modifier = {
trigger = {
scope:recipient = {
opinion = {
target = scope:actor
value < 0
}
}
}
opinion_target = scope:recipient
who = scope:actor
multiplier = 0.3
desc = BLACKMAIL_INTERACTION_OPINION_ACCEPTANCE
}
modifier = {
add = -20
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = trust_opinion
value < 0
}
}
desc = BLACKMAIL_INTERACTION_DISTRUST_ACCEPTANCE
}
modifier = {
add = 30
any_secret = {
is_known_by = scope:actor
is_criminal_for = scope:recipient
}
desc = BLACKMAIL_MAJOR_SECRET_ACCEPTANCE
}
modifier = {
add = intimidated_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
}
ai_min_reply_days = 1
ai_max_reply_days = 5
notification_text = {
triggered_desc = {
trigger = {
scope:actor = {
opinion = {
target = scope:recipient
value > 0
}
}
}
desc = BLACKMAIL_NOTIFICATION_OPENING
}
first_valid = {
triggered_desc = {
trigger = { scope:target = { secret_type = secret_deviant } }
desc = BLACKMAIL_NOTIFICATION_SECRET_DEVIANT
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_homosexual } }
desc = BLACKMAIL_NOTIFICATION_SECRET_HOMOSEXUAL
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_murder } }
desc = BLACKMAIL_NOTIFICATION_SECRET_MURDER
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_murder_attempt } }
desc = BLACKMAIL_NOTIFICATION_SECRET_MURDER_ATTEMPT
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_cannibal } }
desc = BLACKMAIL_NOTIFICATION_SECRET_CANNIBAL
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_lover } }
desc = BLACKMAIL_NOTIFICATION_SECRET_LOVER
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_non_believer } }
desc = BLACKMAIL_NOTIFICATION_SECRET_NON_BELIEVER
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_incest } }
desc = BLACKMAIL_NOTIFICATION_SECRET_INCEST
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_witch } }
desc = BLACKMAIL_NOTIFICATION_SECRET_WITCH
}
triggered_desc = {
trigger = { scope:target = { secret_type = secret_crypto_religionist } }
desc = BLACKMAIL_NOTIFICATION_SECRET_CRYPTO_RELIGIONIST
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_disputed_heritage
secret_target.real_father = scope:actor
secret_target.mother = scope:recipient
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_ILLEGITIMATE_CHILD_ACTOR
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_disputed_heritage
secret_target.mother = scope:recipient
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_ILLEGITIMATE_CHILD_OTHER
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_disputed_heritage
secret_target.real_father = scope:actor
secret_target = {
OR = {
this = scope:recipient
is_twin_of = scope:recipient
}
}
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_ILLEGITIMATE_CHILD_TARGET_ACTOR
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_disputed_heritage
secret_target = {
OR = {
this = scope:recipient
is_twin_of = scope:recipient
}
}
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_ILLEGITIMATE_CHILD_TARGET_OTHER
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_unmarried_illegitimate_child
secret_target.real_father = scope:actor
secret_target.mother = scope:recipient
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_UNMARRIED_ILLEGITIMATE_CHILD_ACTOR
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_unmarried_illegitimate_child
secret_target.mother = scope:recipient
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_UNMARRIED_ILLEGITIMATE_CHILD_OTHER
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_unmarried_illegitimate_child
secret_target.real_father = scope:actor
secret_target = {
OR = {
this = scope:recipient
is_twin_of = scope:recipient
}
}
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_UNMARRIED_ILLEGITIMATE_CHILD_TARGET_ACTOR
}
triggered_desc = {
trigger = {
scope:target = {
secret_type = secret_unmarried_illegitimate_child
secret_target = {
OR = {
this = scope:recipient
is_twin_of = scope:recipient
}
}
}
}
desc = BLACKMAIL_NOTIFICATION_SECRET_UNMARRIED_ILLEGITIMATE_CHILD_TARGET_OTHER
}
desc = BLACKMAIL_NOTIFICATION_SECRET_FALLBACK
}
desc = BLACKMAIL_NOTIFICATION_THREAT
}
# AI
ai_targets = {
ai_recipients = known_secrets
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency = 6
ai_will_do = {
base = 100
# Unity modifiers
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
modifier = {
factor = 0
scope:actor.ai_honor >= 75
}
modifier = {
factor = 0.1
scope:actor.ai_honor >= 30
}
modifier = {
factor = 0
scope:actor.ai_honor >= -30
scope:recipient = {
has_relation_lover = scope:actor
}
}
modifier = {
factor = 0
scope:recipient = {
OR = {
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
has_relation_soulmate = scope:actor
}
}
}
}
ai_set_target = {
scope:recipient = {
random_secret = {
limit = {
is_known_by = scope:actor
is_blackmailable_secret_trigger = { BLACKMAILER = scope:actor PARTICIPANT = scope:recipient }
}
save_scope_as = target
}
}
}
}

View file

@ -1,350 +0,0 @@
# Ask to Promote your Legend
ce1_ask_to_promote_legend_interaction = {
icon = icon_contract_modification_single
category = interaction_category_diplomacy
popup_on_receive = yes
pause_on_receive = yes
can_send_despite_rejection = yes
ai_maybe = yes
interface_priority = 5
desc = ce1_ask_to_promote_legend_interaction_desc
greeting = positive
notification_text = PROMOTE_LEGEND_NOTIFICATION
is_shown = {
scope:actor.promoted_legend.legend_owner ?= scope:actor
NOT = { scope:actor = scope:recipient }
scope:recipient = {
is_landed = yes
age >= 12
is_physically_able = yes
NOT = { government_has_flag = government_is_herder }
}
}
is_valid_showing_failures_only = {
scope:recipient = {
custom_tooltip = {
text = recipient_already_promoting_legend_tt
NOT = { exists = promoted_legend }
}
}
custom_tooltip = {
text = recipient_close_or_neighbor_tt
OR = {
scope:recipient.dynasty = scope:actor.dynasty
scope:recipient = { knows_language_of_culture = scope:actor.culture }
scope:actor = {
has_friendly_relationship_with_character_trigger = { CHARACTER = scope:recipient }
}
scope:recipient = {
any_character_to_title_neighboring_county = {
any_county_province = {
any_province_legend = {
this = scope:actor.promoted_legend
}
}
}
}
}
}
}
cooldown_against_recipient = { years = 5 }
ai_min_reply_days = 2
ai_max_reply_days = 7
ai_accept = {
base = -10
## Tier
modifier = {
add = -5
scope:recipient.primary_title = {
tier = 2
}
desc = TIER_REASON_COUNT
}
modifier = {
add = -10
scope:recipient.primary_title = {
tier = 3
}
desc = TIER_REASON_DUKE
}
modifier = {
add = -20
scope:recipient.primary_title = {
tier = 4
}
desc = TIER_REASON_KING
}
modifier = {
add = -30
scope:recipient.primary_title = {
tier = 5
}
desc = TIER_REASON_EMPEROR
}
## Legend
# How cool is the legend?
modifier = {
add = 10
desc = REASON_ILLUSTRIOUS_LEGEND
scope:actor = {
promoted_legend = {
legend_quality = illustrious
}
}
}
modifier = {
add = 20
desc = REASON_MYTHICAL_LEGEND
scope:actor = {
promoted_legend = {
legend_quality = mythical
}
}
}
# Are you using a hook?
modifier = {
trigger = {
scope:hook ?= yes
}
add = 100
desc = LEGEND_HOOK_USED
}
# Are you using Gold?
modifier = {
trigger = {
scope:gold_cost ?= yes
}
add = 40
desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT
}
## Opinion
# Do they like you?
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 1
desc = AI_OPINION_REASON
}
## Personality
# Are they ambitious?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_AMBITIOUS #re-using these
add = -15
scope:recipient = {
has_trait = ambitious
}
}
# Are they content?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_CONTENT
add = 5
scope:recipient = { has_trait = content }
}
# Are they stubborn?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_STUBBORN
add = -10
scope:recipient = { has_trait = stubborn }
}
# Are they arrogant?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_ARROGANT
add = -10
scope:recipient = { has_trait = arrogant }
}
# Are they humble?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_HUMBLE
add = 10
scope:recipient = { has_trait = humble }
}
# Are they trusting?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_TRUSTING
add = 15
scope:recipient = { has_trait = trusting }
}
# Are they paranoid?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_PARANOID
add = -10
scope:recipient = { has_trait = paranoid }
}
## Dread
modifier = {
add = intimidated_halved_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_halved_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
## War
modifier = {
add = -50
scope:recipient = {
is_at_war = yes
}
desc = HOSTAGE_AT_WAR_REASON
}
## Low Gold
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = famed
}
scope:recipient = {
monthly_character_income < famed_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = illustrious
}
scope:recipient = {
monthly_character_income < illustrious_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = mythical
}
scope:recipient = {
monthly_character_income < mythical_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = 25
scope:recipient = {
is_contact_of = scope:actor
}
desc = IS_CONTACT_REASON
}
}
on_accept = {
scope:actor.promoted_legend = {
save_scope_as = promoted_legend
}
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = ce1_ask_to_promote_legend_acceptance_tt
left_icon = scope:actor
right_icon = scope:recipient
if = {
limit = { scope:hook = yes }
use_hook = scope:recipient
}
if = {
limit = { scope:gold_cost = yes }
pay_short_term_gold = {
target = scope:recipient
gold = medium_gold_value
}
promoted_legend = { # To prevent gold exploits
add_to_variable_list = {
name = accepted_promote_legend_var
target = scope:recipient
years = 10
}
}
}
scope:recipient = {
set_promoted_legend = scope:actor.promoted_legend
}
}
}
}
on_decline = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_bad
title = ce1_ask_to_promote_legend_decline_tt
left_icon = scope:actor
right_icon = scope:recipient
}
}
}
# Use gold to increase acceptance
send_option = {
flag = gold_cost
localization = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE
}
send_option = {
flag = hook
is_valid = {
scope:actor = {
has_usable_hook = scope:recipient
}
}
localization = GENERIC_SPEND_A_HOOK
}
send_options_exclusive = no
ai_potential = {
is_physically_able = yes
}
ai_targets = {
ai_recipients = neighboring_rulers
}
ai_frequency = 12
# Very similar to ai_accept, but ignores effects that are < 10 in value for brevity's sake
ai_will_do = {
base = 0
## Legends
modifier = {
add = 25
exists = promoted_legend
}
modifier = {
add = 25
promoted_legend = {
legend_quality = mythical
}
}
## Gold
modifier = {
add = -100
debt_level >= 0
}
modifier = {
add = -50
gold <= major_gold_value
}
## Personality
modifier = {
add = 25
has_trait = arrogant
}
}
}

View file

@ -1,169 +0,0 @@
# Pick a favorite child to pre-select when choosing your destiny
choose_favorite_interaction = {
category = interaction_category_friendly
icon = designate_favorite
interface_priority = 8
desc = choose_favorite_interaction_desc
is_shown = {
scope:actor = {
is_ai = no
NOT = { has_relation_favorite_child = scope:recipient }
}
scope:recipient.dynasty = scope:actor.dynasty
NOT = { scope:actor = scope:recipient }
scope:recipient = {
OR = {
is_child_of = scope:actor
is_grandchild_of = scope:actor
is_great_grandchild_of = scope:actor
}
}
}
is_valid_showing_failures_only = {
scope:actor = { is_alive = yes }
scope:recipient = {
custom_tooltip = {
text = cant_be_another_player_tt
is_ai = yes
}
custom_tooltip = {
text = favorite_child_must_be_in_good_health_tt
NOR = {
has_trait = incapable
health <= 2.5
}
}
custom_tooltip = {
text = cant_be_hostage_tt
is_hostage = no
}
custom_tooltip = {
text = cant_already_be_your_heir
NOT = {
this = scope:actor.player_heir
}
}
custom_tooltip = {
text = no_republic_or_theocracy_tt
NOR = {
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
}
}
trigger_if = {
limit = {
is_ruler = yes
}
custom_tooltip = {
text = not_baron_holy_order_merc_tt
highest_held_title_tier >= tier_county
primary_title = {
is_mercenary_company = no
is_holy_order = no
}
}
}
}
}
on_auto_accept = {
scope:recipient = {
send_interface_message = {
title = choose_favorite_interaction_notification
left_icon = scope:actor
show_as_tooltip = {
scope:actor = {
set_relation_favorite_child = { reason = favorite_child_chosen target = scope:recipient }
}
}
}
}
}
on_accept = {
assign_favourite_child_effect = {
ACTOR = scope:actor
RECIPIENT = scope:recipient
}
}
auto_accept = yes
}
remove_favorite_interaction = {
category = interaction_category_friendly
icon = designate_favorite
interface_priority = 7
desc = remove_favorite_interaction_desc
is_shown = {
scope:actor = {
is_alive = yes
has_relation_favorite_child = scope:recipient
}
}
on_auto_accept = {
scope:recipient = {
send_interface_message = {
title = remove_favorite_interaction_notification
left_icon = scope:actor
show_as_tooltip = {
scope:actor = {
remove_relation_favorite_child = scope:recipient
}
}
}
}
}
on_accept = {
scope:actor = {
random_relation = {
type = favorite_child
save_scope_as = current_favorite
}
send_interface_toast = {
title = remove_favorite_interaction_notification
left_icon = scope:actor
right_icon = scope:recipient
if = {
limit = {
exists = scope:current_favorite
}
remove_relation_favorite_child = scope:current_favorite
scope:current_favorite = {
add_opinion = {
target = scope:actor
modifier = no_more_favorite_opinion
}
}
}
custom_tooltip = remove_favorite_interaction_notification.tt
}
hidden_effect = {
every_close_or_extended_family_member = {
limit = {
is_child_of = scope:actor
is_grandchild_of = scope:actor
is_great_grandchild_of = scope:actor
}
add_opinion = {
target = scope:actor
modifier = no_more_favorite_opinion
}
add_opinion = {
target = scope:recipient
modifier = no_more_favorite_opinion
}
}
}
}
}
auto_accept = yes
}

View file

@ -1,127 +0,0 @@
#Accuse of violating sumptuary laws
#by James Beaumont
sumptuary_law_debate_interaction = {
category = interaction_category_hostile
interface_priority = 15
desc = sumptuary_law_debate_interaction_desc
icon = weaver_inspiration
common_interaction = no
is_shown = {
scope:actor = {
has_royal_court = yes
has_dlc_feature = royal_court
amenity_level = {
type = court_fashion
value <= 2
}
NOR = {
has_court_type = court_tribal
has_court_type = court_nomadic
}
}
NOT = { scope:actor = scope:recipient }
scope:recipient = {
# Character is either not a priest/zealous class of a naked priest faith or doesn't belong to a naked priest faith
OR = {
faith = { NOT = { has_doctrine_parameter = naked_priests_active } }
NOR = {
ai_zeal >= 50
has_trait = devoted
has_trait = zealous
government_has_flag = government_is_theocracy
has_council_position = councillor_court_chaplain
}
}
# They are in your realm to some capacity
OR = {
liege = scope:actor #You may debate with direct vassals and courtiers.
host = scope:actor #You may debate guests
}
}
}
is_valid_showing_failures_only = {
scope:actor = {
is_adult = yes
}
scope:recipient = {
# Friends don't accuse friends of fashion crimes
NOT = {
has_friendly_relationship_with_character_trigger = {
CHARACTER = scope:actor
}
}
}
custom_description = {
text = sumptuary_debate_has_been_debated
object = scope:recipient
scope:recipient = {
NOT = { has_character_modifier = used_sumptuary_debate_modifier } #To prevent back and forth & back-to-back challenges
NOT = { has_character_modifier = sumptuary_debated_modifier }
}
}
custom_description = {
text = sumptuary_debate_timing
scope:actor = {
NOT = { has_character_modifier = used_sumptuary_debate_modifier }
}
}
scope:recipient = {
is_adult = yes
}
scope:recipient = {
NOT = { has_strong_hook = scope:actor }
}
scope:recipient = { is_busy_in_events_localised = yes }
scope:actor = {
NOT = {
is_at_war_with = scope:recipient
}
}
}
auto_accept = yes
on_accept = {
hidden_effect = {
scope:actor = {
add_character_modifier = {
modifier = used_sumptuary_debate_modifier
years = 2
}
}
scope:recipient = {
trigger_event = {
id = court_amenities_interactions.0001
days = 1
}
add_character_modifier = {
modifier = sumptuary_debated_modifier
years = 10
}
}
}
custom_tooltip = sumptuary_debate_interaction.tt_modifiers
scope:actor = {
stress_impact = {
arbitrary = minor_stress_impact_loss
just = minor_stress_impact_gain
}
custom_tooltip = sumptuary_debate_interaction.tt_winnings_actor
}
scope:recipient = {
custom_tooltip = sumptuary_debate_interaction.tt_winnings_recipient
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_sumptuary_law.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}

View file

@ -1,385 +0,0 @@
# Interaction used to convert people when you hybridize or diverge culture
# Note that it will only be applied to vassals of the parent culture(s)
# Acceptance is checked *before* culture conversion happens so that it'll be correct in the UI
# This has the culture traits available in the traits list:
# modifier = {
# add = 10
# desc = TEST
# culture_pillar:ethos_bellicose = { is_in_list = traits }
# }
request_culture_conversion_interaction = {
category = interaction_category_religion
special_interaction = request_culture_conversion_interaction
popup_on_receive = yes
desc = ask_for_conversion_interaction_desc
hidden = yes
is_shown = {
NOT = { scope:actor.culture = scope:recipient.culture }
scope:recipient.liege = scope:actor
}
is_valid_showing_failures_only = {
}
ai_accept = {
base = -10
opinion_modifier = {
opinion_target = scope:actor
who = scope:recipient
multiplier = 1
}
modifier = {
desc = ASK_FOR_CONVERSION_SAME_CULTURE_PRESTIGE_LEVEL
add = {
value = 10
multiply = scope:actor.prestige_level
}
scope:actor.prestige_level > 0
scope:recipient.culture = scope:actor.culture
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_DIPLOMACY
add = {
value = scope:actor.diplomacy
subtract = scope:recipient.diplomacy
multiply = 5
}
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_IS_CYNICAL
add = 30
scope:recipient = {
has_trait = cynical
}
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_IS_STUBBORN
add = -30
scope:recipient = {
has_trait = stubborn
}
}
modifier = {
add = intimidated_external_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_external_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
}
ai_min_reply_days = 1
ai_max_reply_days = 5
on_accept = {
new_culture_created_vassal_conversion_effect = {
CONVERTEE = scope:recipient
CONVERTER = scope:actor
CULTURE = scope:actor.culture
}
}
}
ai_cultural_hybridization_interaction = {
hidden = yes
auto_accept = yes
ai_potential = {
has_dlc_feature = hybridize_culture
OR = {
is_independent_ruler = yes
highest_held_title_tier >= tier_kingdom
}
is_playable_character = yes
realm_size >= 4
is_physically_able_adult = yes
is_at_war = no
exists = capital_county
capital_county.holder = root
NOT = {
has_game_rule = none_hybrid_culture_ai_frequency
}
}
is_shown = {
scope:actor = {
is_ai = yes
}
exists = scope:target
}
ai_set_target = {
scope:actor = {
if = {
limit = {
exists = capital_county
any_sub_realm_county = {
NOT = {
culture = scope:actor.culture
}
culture = {
cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value }
scope:actor = {
can_hybridize = prev
}
}
}
}
every_sub_realm_county = {
limit = {
NOT = {
culture = scope:actor.culture
}
culture = {
cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value }
scope:actor = {
can_hybridize = prev
}
}
}
culture = {
add_to_list = culture_list
}
}
ordered_in_list = {
list = culture_list
limit = { culture_realm_size >= 3 }
order_by = culture_realm_size
save_scope_as = target
}
}
}
}
on_accept = {
# Global cooldowns for the lower frequency game rule settings
if = {
limit = {
has_game_rule = less_common_hybrid_culture_ai_frequency
}
set_global_variable = { name = has_ai_hybrid_event_cooldown value = yes days = 3650 }
}
scope:actor = {
create_hybrid_culture_with_side_effects = scope:target
}
}
ai_targets = {
ai_recipients = self
}
ai_frequency = 60
ai_will_do = {
base = 100
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
modifier = {
factor = 0.2
has_game_rule = less_common_hybrid_culture_ai_frequency
}
modifier = {
factor = 0
exists = global_var:has_ai_hybrid_event_cooldown
}
modifier = {
factor = 0
culture = {
has_cultural_parameter = harder_to_hybridize
}
}
modifier = { # The AI should only want to hybridize if they're the second ruler of their culture for their primary title
factor = 0
OR = {
NOT = {
exists = primary_title.previous_holder
}
AND = {
exists = primary_title.previous_holder
NOT = {
primary_title.previous_holder.culture = scope:actor.culture
}
}
}
}
modifier = { # The AI doesn't want to hybridize if their culture is more than X% bigger than the targeted culture within the same realm (unless it's in the capital, and the capital is the De Jure capital of the primary title)
factor = 0
scope:actor.culture.culture_realm_size > scope:target.culture_realm_size_larger_30_percent
NAND = {
scope:actor.primary_title.title_capital_county = scope:actor.capital_county
scope:actor.capital_county.culture = scope:target
}
}
modifier = { # Do not hybridize if 30% or more of your vassals of the relevant culture/s dislike you
factor = 0
scope:actor = {
any_vassal = {
percent >= 0.3
OR = {
culture = scope:actor.culture
culture = scope:target
}
highest_held_title_tier >= tier_county
opinion = {
target = scope:actor
value <= 0
}
}
}
}
modifier = { # The AI does not want to create multiple hybrids from the same cultures
factor = 0
any_in_global_list = {
variable = hybrid_cultures
any_parent_culture = { this = scope:target }
any_parent_culture = { this = scope:actor.culture }
}
}
# Loose requirements
modifier = { # The AI does not want to create a hybrid with a hybrid culture that has the same roots
factor = 0
has_game_rule = very_relaxed_hybrid_culture_ai_restrictions
scope:target = { is_hybrid_culture = yes }
scope:actor.culture = {
is_hybrid_culture = yes
any_parent_culture = {
save_temporary_scope_as = parent_culture_check
scope:target = {
any_parent_culture = {
this = scope:parent_culture_check
}
}
}
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture (unless a historical hybrid)
factor = 0
has_game_rule = relaxed_hybrid_culture_ai_restrictions
scope:target = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
scope:actor.culture = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture or if the target is a hybrid (unless a historical hybrid)
factor = 0
has_game_rule = default_hybrid_culture_ai_restrictions
OR = {
scope:target = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
scope:actor.culture = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture that their culture is a parent of, or share heritage of
factor = 0
scope:target = {
is_hybrid_culture = yes
any_parent_culture = {
OR = {
this = scope:actor.culture
has_same_culture_heritage = scope:actor.culture
}
}
}
}
modifier = { # The AI does not want to create a hybrid if their culture is a hybrid of the target culture, or share heritage of
factor = 0
scope:actor.culture = {
is_hybrid_culture = yes
any_parent_culture = {
OR = {
this = scope:target
has_same_culture_heritage = scope:target
}
}
}
}
modifier = { # Avoid hybridizing if your realm is of a significant size and elective, we don't want the HRE Emperor to hybdridize in ugly ways...
factor = 0
primary_title = {
has_order_of_succession = election
tier >= tier_kingdom
}
realm_size >= 50
any_vassal = {
highest_held_title_tier >= tier_county
NOT = {
culture = scope:actor.culture
}
}
}
modifier = { # Theocrats such as the Pope shouldn't hybridize; they have an influx of different cultures, it's just weird
factor = 0
government_has_flag = government_is_theocracy
}
modifier = { # Block for Scots and Gaelic specifically
factor = 0
OR = {
scope:actor.culture = culture:scottish
scope:actor.culture = culture:gaelic
}
OR = {
scope:target = culture:scottish
scope:target = culture:gaelic
}
}
# Note: As we're checking if we can hybridize with a culture *right now*, a suboptimal culture might be checked. A buffer of 10 acceptance is used by the AI to alleviate this.
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,162 +0,0 @@
#Interactions relating to factions
force_join_faction_interaction = {
category = interaction_category_vassal
special_interaction = force_join_faction
desc = force_join_faction_interaction_desc
icon = scroll_scales
force_notification = yes
greeting = positive
notification_text = FORCE_JOIN_FACTION_NOTIFICATION
is_shown = {
scope:actor = {
is_a_faction_member = yes
liege = scope:recipient.liege
NOR = {
joined_faction = scope:recipient.joined_faction
scope:recipient = scope:actor.liege
}
}
}
is_valid_showing_failures_only = {
scope:actor = {
trigger_if = {
limit = { government_has_flag = government_is_administrative }
custom_tooltip = {
text = force_join_faction_admin_requirement_desc
OR = {
has_strong_usable_hook = scope:recipient
AND = {
influence >= { value = scope:actor.monumental_influence_value multiply = 2 }
scope:recipient ?= {
NOT = { opinion = { target = scope:actor value <= -50 } }
NOT = { opinion = { target = scope:recipient.liege value >= 50 } }
}
}
}
}
}
trigger_else = {
has_strong_usable_hook = scope:recipient # Make sure to update the NFaction::POTENTIAL_FORCE_JOIN_HOOK_TYPE define if you change the type of hook used here
}
NOT = { is_at_war_with = scope:recipient }
}
scope:recipient = {
trigger_if = {
limit = { is_a_faction_member = yes }
joined_faction.faction_leader = { is_ai = yes }
}
is_forced_into_faction = no
can_join_faction = scope:actor.joined_faction
}
custom_description = {
text = barons_joining_independence_factions
NAND = {
scope:actor.joined_faction = { faction_is_type = independence_faction }
scope:recipient.highest_held_title_tier = tier_barony
}
}
}
on_accept = {
scope:actor = {
send_interface_message = {
type = event_faction_neutral
title = force_join_faction_interaction_notification
right_icon = scope:recipient
if = {
limit = { scope:hook = yes }
use_hook = scope:recipient
}
else_if = {
limit = { scope:influence = yes }
change_influence = {
value = monumental_influence_value
multiply = -2
}
}
scope:recipient = {
join_faction_forced = {
faction = scope:actor.joined_faction
forced_by = scope:actor
years = 10
}
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_forced_faction_joinage.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
#Use hook
send_option = {
is_valid = {
exists = scope:recipient
scope:actor ?= { has_strong_usable_hook = scope:recipient }
}
flag = hook
localization = GENERIC_SPEND_A_HOOK
}
#Spend influence
send_option = {
is_shown = {
scope:actor = { government_has_flag = government_is_administrative }
scope:actor.top_liege ?= { government_has_flag = government_is_administrative }
}
is_valid = { # Convincing someone with influence is not available if they hate you or love the liege
scope:actor ?= { influence >= { value = scope:actor.monumental_influence_value multiply = 2 } }
scope:recipient ?= {
NOT = { opinion = { target = scope:actor value <= -50 } }
NOT = { opinion = { target = scope:recipient.liege value >= 50 } }
}
}
flag = influence
localization = SPEND_INFLUENCE
}
send_options_exclusive = yes
# AI
ai_targets = {
ai_recipients = peer_vassals
}
ai_frequency = 12
ai_potential = {
is_independent_ruler = no
is_a_faction_member = yes
# Only force others to join a faction if you joined by your own free will
is_forced_into_faction = no
}
ai_will_do = {
base = 100
# Don't steal players' factions' members
modifier = {
factor = 0
scope:recipient = {
is_a_faction_member = yes
joined_faction = {
faction_leader = {
is_ai = no
}
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,757 +0,0 @@
#Give characters money to improve their opinion of you
gift_interaction = {
icon = icon_gold
category = interaction_category_friendly
common_interaction = yes
interface_priority = 65
desc = gift_interaction_desc
greeting = positive
notification_text = SEND_GIFT_PROPOSAL
answer_accept_key = SEND_GIFT_ACCEPT
answer_reject_key = SEND_GIFT_REJECT
ai_targets = {
ai_recipients = scripted_relations
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = head_of_faith
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
max = 10
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency = 60
is_shown = {
NOT = {
scope:recipient = scope:actor
}
# Prioritize paying back loans first
scope:actor = {
trigger_if = {
limit = {
exists = var:loan_amount_owed
exists = var:loan_holder
}
NOT = { var:loan_holder = scope:recipient }
}
}
}
is_highlighted = {
scope:recipient = {
OR = {
house ?= {
OR = {
is_dominant_family = yes
is_powerful_family = yes
}
}
}
}
}
highlighted_reason = HIGHLIGHTED_FAMILY_RATING
is_valid_showing_failures_only = {
scope:actor.gold >= gift_value
scope:recipient = {
is_busy_in_events_localised = yes
NOT = { is_imprisoned_by = scope:actor }
}
}
on_auto_accept = {
scope:recipient = {
trigger_event = char_interaction.0100
}
}
on_accept = {
scope:recipient = {
# Verify that they could become friend
if = {
limit = {
NAND = {
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_best_friend = scope:actor
}
}
gifting_leads_towards_friendship_effect = yes
}
}
scope:actor = {
# Warning for multiple gifts
if = {
limit = {
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
custom_tooltip = ALREADY_SENT_GIFT_WARNING
}
send_interface_message = {
type = event_gold_neutral
title = gift_interaction_notification
right_icon = scope:recipient
pay_short_term_gold = {
gold = gift_value
target = scope:recipient
}
stress_impact = {
greedy = medium_stress_impact_gain
}
if = {
limit = {
scope:recipient = {
NOT = {
is_heir_of = scope:actor
}
}
}
stress_impact = {
generous = medium_stress_impact_loss
}
}
#FP3 Tenet Communal Possessions Perk - piety gain for gift giving.
if = {
limit = {
scope:actor = {
faith = {
has_doctrine_parameter = piety_from_gifts_active
}
}
}
scope:actor = {
add_piety = minor_piety_gain
}
}
# Check if the target already has been sent a gift or not. If not, apply the following effects
if = {
limit = {
NOT = {
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
}
# Struggle Catalyst
if = {
limit = {
scope:actor = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_gift_independent_ruler
CHAR = scope:recipient
}
}
}
}
hidden_effect = {
scope:actor = {
every_character_struggle = {
involvement = involved
limit = { phase_has_catalyst = catalyst_gift_independent_ruler }
activate_struggle_catalyst = {
catalyst = catalyst_gift_independent_ruler
character = scope:actor
}
}
}
}
}
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:actor
SECOND = scope:recipient
}
scope:actor = {
any_character_struggle = {
#involvement = involved
activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
CATALYST = catalyst_gift_supporter_detractor_ruler
CHAR = scope:recipient
}
}
}
}
hidden_effect = {
scope:actor = {
every_character_struggle = {
#involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
CATALYST = catalyst_gift_supporter_detractor_ruler
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_gift_supporter_detractor_ruler
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_gift_supporter_detractor_ruler }
}
}
}
}
# FP2 Urbanism Legacy Perk 2: increase cultural acceptance when gifting a republican vassal
if = {
limit = {
scope:actor = {
exists = dynasty
dynasty = { has_dynasty_perk = fp2_urbanism_legacy_4 }
}
scope:recipient = {
AND = {
is_vassal_of = scope:actor
government_has_flag = government_is_special_republic
}
}
NOT = {
scope:actor.culture = scope:recipient.capital_province.county.culture
}
}
scope:recipient.capital_province.county.culture = {
change_cultural_acceptance = {
target = scope:actor.culture
value = {
value = 20
multiply = scope:recipient.capital_province.county.development_level
divide = 100
}
desc = cultural_acceptance_gain_gift_dynasty_perk
}
}
}
}
# Let's apply the opinion modifier last, as to apply everything else correctly first
scope:recipient = {
add_opinion = {
target = scope:actor
modifier = gift_opinion
opinion = send_gift_opinion
}
}
}
if = { # for tutorial purposes
limit = {
is_ai = no
scope:recipient = { is_child_of = scope:actor }
}
add_character_flag = {
flag = tutorial_sent_gift
days = 200
}
}
#Influence gain between admin rulers
if = {
limit = {
is_ruler = yes
government_has_flag = government_is_administrative
scope:recipient = {
is_ruler = yes
government_has_flag = government_is_administrative
any_held_title = {
is_noble_family_title = yes
}
}
}
if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 5
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 8
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 3
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 7
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 6
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 5
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 6
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 3
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 5
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 4
}
}
else_if = {
limit = {
scope:recipient = { influence_level >= 5 }
}
change_influence = {
value = miniscule_influence_gain
multiply = 3
}
}
else_if = {
limit = {
scope:recipient = { influence_level >= 3 }
}
change_influence = {
value = miniscule_influence_gain
multiply = 2
}
}
else = {
change_influence = miniscule_influence_gain
}
}
}
}
ai_accept = {
base = 0
modifier = {
add = 100
desc = GOLD_REASON
}
# Struggle motive
modifier = {
desc = AI_STRUGGLE_INTENT
scope:recipient = {
is_independent_ruler = yes
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
}
add = 200
}
}
}
}
ai_potential = {
is_available_at_peace_ai_adult = yes
ai_greed < medium_positive_ai_value
short_term_gold >= gift_interaction_cutoff
NOT = {
has_trait = greedy
}
ai_has_conqueror_personality = no
ai_should_focus_on_building_in_their_capital = no
}
auto_accept = {
custom_description = {
text = auto_accept_interaction_ai
object = scope:recipient
scope:recipient = {
is_ai = yes
}
}
}
ai_min_reply_days = 1
ai_max_reply_days = 1
ai_will_do = {
base = 100
modifier = { # Do not send double-gifts
factor = 0
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
modifier = { # Basic Filtering
factor = 0
scope:recipient = {
NOR = {
AND = { # Bankrupt lovers, friends and a bankrupt liege should be considered
OR = {
scope:actor = {
any_liege_or_above = {
this = scope:recipient
}
}
has_secret_relation_lover = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
}
gold < 0
}
AND = { # Generous characters will give gifts to their friends/lovers
OR = {
has_secret_relation_lover = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
}
scope:actor = {
OR = {
ai_greed <= high_negative_ai_value
AND = {
ai_greed < 0
culture = {
has_cultural_parameter = gives_more_gifts
}
}
}
}
}
AND = { # Characters with the Generous Cultural Tradition will give gifts to more people
is_ruler = yes
OR = {
is_allied_to = scope:actor
is_close_or_extended_family_of = scope:actor
}
scope:actor = {
ai_greed < 0
culture = {
has_cultural_parameter = gives_more_gifts
}
}
}
AND = { # Characters with the loyal trait more likely to give gifts to friends/lieges
OR = {
scope:actor.liege ?= this
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
is_allied_to = scope:actor
is_close_or_extended_family_of = scope:actor
}
scope:actor = {
ai_greed <= 0
has_trait = loyal
}
}
AND = { # Zealous characters want to support the defending side in GHW's
gold < 200
any_character_war = {
OR = {
using_cb = undirected_great_holy_war
using_cb = directed_great_holy_war
}
primary_defender = scope:recipient
}
scope:actor = {
ai_zeal >= 50
}
}
AND = { # Powerful vassals should be considered
is_powerful_vassal_of = scope:actor
opinion = {
target = scope:actor
value < 0
}
NOT ={
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Factioneering vassals should be considered
is_vassal_of = scope:actor
is_a_faction_member = yes
NOT ={
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Realm Priests should be considered
scope:actor = {
faith = { has_doctrine = doctrine_theocracy_temporal }
exists = cp:councillor_court_chaplain
cp:councillor_court_chaplain = scope:recipient
}
opinion = {
target = scope:actor
value <= 25
}
NOT = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Rulers at war with your rivals deserve gold if they're bankrupt
gold < 0
is_at_war = yes
any_war_enemy = {
has_relation_rival = scope:actor
}
}
AND = { # Independent ruler within the struggle should be considered
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
}
}
}
# Struggle
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
}
NOT = {
has_relation_rival = scope:recipient
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_deescalation
}
scope:recipient = {
has_character_flag = agenda_towards_deescalation
}
}
add = {
value = 150
if = {
limit = { scope:recipient = { is_ai = no} }
add = 150 # higher for human player to Prioritize them
}
# Then lower the intent depending on the gold reserve
# Base value applied if the AI has 3x the gold cutoff
multiply = {
value = short_term_gold
divide = {
value = gift_interaction_cutoff
multiply = 3
}
}
}
}
else_if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_deescalation
}
}
add = {
value = 25
if = {
limit = { scope:recipient = { is_ai = no} }
add = 150 # higher for human player to Prioritize them
}
# Then lower the intent depending on the gold reserve
# Base value applied if the AI has 3x the gold cutoff
multiply = {
value = short_term_gold
divide = {
value = gift_interaction_cutoff
multiply = 3
}
}
}
}
}
}
modifier = {
factor = 0.1
scope:recipient = {
opinion = {
target = scope:actor
value < 0
}
NAND = {
is_vassal_of = scope:actor
scope:actor = {
ai_rationality > 50
}
}
}
}
modifier = {
add = 100
scope:actor = {
is_at_war = no
has_trait = fp3_struggle_supporter
any_character_struggle = { is_struggle_type = persian_struggle }
}
scope:recipient = {
title:d_sunni.holder ?= this
gold < 0
}
}
# Nomads are slightly less likely to do this since they'd prefer to send Herd instead
modifier = {
add = -10
scope:actor = {
government_has_flag = government_is_nomadic
}
scope:recipient = {
government_has_flag = government_is_nomadic
}
}
modifier = {
factor = 0.1
scope:recipient = {
has_relation_rival = scope:actor
}
}
}
}

View file

@ -1,190 +0,0 @@

# Set one of your children as heir
#This interaction is referenced in code! If it's renamed you have to ping a coder
designate_heir_interaction = {
icon = heir
category = interaction_category_diplomacy
desc = designate_heir_interaction_desc
is_shown = {
trigger_if = {
limit = { # Admin always has access to this - Recipient just need to be their child
scope:actor = {
government_has_flag = government_is_administrative
any_held_title = {
is_noble_family_title = yes
}
}
}
scope:recipient = {
is_child_of = scope:actor
}
}
trigger_else = { # Everyone else also needs to gain access to this interaction
scope:recipient = {
is_child_of = scope:actor
}
scope:actor = {
can_designate_heir_trigger = yes
}
}
NOR = {
scope:recipient = scope:actor.designated_heir
scope:recipient = scope:actor
}
trigger_if = {
limit = {
scope:actor = { NOT = { primary_title = title:e_byzantium } }
}
custom_description = {
text = "dynasty_member_leads_election"
scope:actor = {
NAND = {
primary_title = {
has_title_law_flag = elective_succession_law
}
dynasty = primary_heir.dynasty
}
}
}
}
}
cost = {
prestige = {
value = {
add = {
if = {
limit = {
scope:actor = {
government_has_flag = government_is_administrative
any_held_title = {
is_noble_family_title = yes
}
}
}
value = designate_heir_admin_prestige_cost
}
else = {
value = designate_heir_cost
}
desc = BASE
}
if = {
limit = {
scope:actor = {
government_has_flag = government_is_landless_adventurer
}
}
multiply = {
value = 0
desc = "[adventurer|E]"
}
}
}
}
influence = {
value = {
add = 0
if = {
limit = {
scope:actor = {
government_has_flag = government_is_administrative
any_held_title = {
is_noble_family_title = yes
}
}
}
add = {
value = designate_heir_admin_influence_cost
desc = "[administrative_government|E]"
}
}
}
}
}
is_valid_showing_failures_only = {
trigger_if = {
limit = { exists = scope:recipient }
scope:recipient = {
is_busy_in_events_localised = yes
is_eunuch_trigger = no
NOR = {
has_trait = disinherited
has_trait = devoted
has_trait = order_member
has_trait = bastard
}
}
}
scope:actor = {
trigger_if = {
limit = {
government_has_flag = government_is_administrative
any_held_title = {
is_noble_family_title = yes
}
}
prestige >= designate_heir_admin_prestige_cost
influence >= designate_heir_admin_influence_cost
custom_tooltip = {
text = valid_co_emperor_candidate_liege_trigger
scope:recipient.top_liege = scope:actor.top_liege
}
}
trigger_else_if = {
limit = {
NOT = { government_has_flag = government_is_landless_adventurer }
}
prestige >= designate_heir_cost
}
trigger_else = {}
}
trigger_if = {
limit = {
scope:actor = {
government_has_flag = government_is_landless_adventurer
}
exists = scope:recipient
}
scope:recipient = {
is_adult = yes
}
}
custom_tooltip = {
text = designate_heir_interaction.tt.currently_coruling
scope:actor = {
NOT = { has_diarchy_active_parameter = diarchy_is_co_rulership }
}
}
}
on_auto_accept = {
scope:recipient = {
trigger_event = char_interaction.0120
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_neutral
title = designate_heir_interaction_notification
left_icon = scope:actor
right_icon = scope:recipient
set_designated_heir = scope:recipient
}
}
}
auto_accept = yes
}

View file

@ -1,754 +0,0 @@

invite_agent_to_scheme_interaction = {
special_interaction = invite_to_scheme_interaction
hidden = yes
# Delaying the response makes it possible to invite multiple agents to the same slot.
ai_instant_response = yes
on_accept = {
scope:recipient = {
if = {
limit = {
OR = {
always = scope:gift
always = scope:gift_significant
always = scope:offer_hook
always = scope:offer_hook_strong
always = scope:hook
always = scope:opportunities_t1
always = scope:opportunities_t2
always = scope:prestige
always = scope:influence
always = scope:council_rights
always = scope:de_jure_title
always = scope:claimed_title
always = scope:piety
always = scope:herd
}
}
force_add_to_agent_slot = {
agent_slot = scope:agent_slot
years = 5
}
}
else = { add_to_agent_slot = scope:agent_slot }
}
scope:actor = {
# No bribe.
## We hack this in to stop the window jumping around as you add or remove bribes.
if = {
limit = {
NOR = {
always = scope:gift
always = scope:gift_significant
always = scope:offer_hook
always = scope:offer_hook_strong
always = scope:hook
always = scope:opportunities_t1
always = scope:opportunities_t2
always = scope:prestige
always = scope:influence
always = scope:council_rights
always = scope:de_jure_title
always = scope:claimed_title
always = scope:piety
always = scope:herd
}
}
custom_tooltip = offer_bribes.tt.window_jump_fix
}
# Bribe
if = {
limit = { always = scope:gift }
pay_short_term_gold = {
gold = bribe_value
target = scope:recipient
}
stress_impact = { greedy = minor_stress_impact_gain }
}
# Big Bribe
if = {
limit = { always = scope:gift_significant }
pay_short_term_gold = {
gold = greater_bribe_value
target = scope:recipient
}
stress_impact = { greedy = medium_stress_impact_gain }
}
# Offer Hook
if = {
limit = { always = scope:offer_hook }
stress_impact = {
base = minor_stress_impact_gain
paranoid = major_stress_impact_gain
}
scope:recipient = {
add_hook = {
type = favor_hook
target = scope:actor
}
}
}
# Offer Strong Hook
if = {
limit = { always = scope:offer_hook_strong }
stress_impact = { base = major_stress_impact_gain }
scope:recipient = {
add_hook = {
type = strong_favor_hook
target = scope:actor
}
}
}
# Use Hook
if = {
limit = { always = scope:hook }
use_hook = scope:recipient
}
# Burn Opportunities
if = {
limit = { always = scope:opportunities_t1 }
custom_tooltip = {
text = spend_agent_charges.tt.t1
scope:scheme = {
change_opportunities = {
value = invite_agent_opportunities_t1_value
multiply = -1
}
}
}
}
# Burn More Opportunities
if = {
limit = { always = scope:opportunities_t2 }
custom_tooltip = {
text = spend_agent_charges.tt.t2
scope:scheme = {
change_opportunities = {
value = invite_agent_opportunities_t2_value
multiply = -1
}
}
}
}
# Prestige
if = {
limit = { always = scope:prestige }
add_prestige = {
value = prestige_bribe_value
multiply = -1
}
scope:recipient = { add_prestige = prestige_bribe_value }
}
# Influence
if = {
limit = { always = scope:influence }
change_influence = {
value = influence_bribe_value
multiply = -1
}
scope:recipient = { change_influence = influence_bribe_value }
}
# Council Rights
if = {
limit = { always = scope:council_rights }
scope:recipient = {
vassal_contract_set_obligation_level = {
type = council_rights
level = 1
}
set_subject_contract_modification_blocked = yes
}
}
create_title_and_vassal_change = {
type = granted
save_scope_as = change
}
# De Jure County
if = {
limit = { always = scope:de_jure_title }
random_held_title = {
limit = {
actor_has_valid_de_jure_enticement_county_trigger = yes
any_this_title_or_de_jure_above = {
holder ?= { this = scope:recipient }
}
}
change_title_holder = {
holder = scope:recipient
change = scope:change
}
}
}
# Claimed County
if = {
limit = { always = scope:claimed_title }
random_held_title = {
limit = {
actor_has_valid_claimed_enticement_county_trigger = yes
scope:recipient = { has_claim_on = prev }
}
change_title_holder = {
holder = scope:recipient
change = scope:change
}
}
}
resolve_title_and_vassal_change = scope:change
# Piety
if = {
limit = { always = scope:piety }
scope:actor = {
add_piety = {
value = piety_bribe_value
multiply = -1
}
}
scope:recipient = { add_piety = piety_bribe_value }
}
# Herd
if = {
limit = { always = scope:herd }
if = {
limit = {
scope:recipient.domicile ?= {
herd > 0
}
}
scope:actor = {
pay_herd = {
target = scope:recipient
value = domicile.herd_bribe_value
}
}
}
else = {
scope:actor = { custom_tooltip = scheme_change_herd_value }
hidden_effect = {
scope:actor.domicile = {
change_herd = {
value = herd_bribe_value
multiply = -1
}
}
scope:recipient = {
add_gold = {
value = herd_bribe_value
multiply = 0.1
}
}
}
}
}
}
# Stress.
## For scope: recipient.
scope:recipient = {
if = {
limit = {
scope:scheme = { is_scheme_category = contract }
}
# Honourable characters don't like being forced into criminal schemes.
if = {
limit = {
OR = {
has_trait = just
has_trait = compassionate
}
scope:scheme.task_contract ?= { is_criminal = yes }
}
add_opinion = {
target = scope:actor
modifier = forced_me_to_help_crimes_opinion
opinion = -20
}
stress_impact = {
just = minor_stress_impact_gain
compassionate = miniscule_stress_impact_gain
}
}
# Lazy characters don't like being made to work at all.
else_if = {
limit = { has_trait = lazy }
add_opinion = {
target = scope:actor
modifier = forced_me_to_work_opinion
opinion = -10
}
stress_impact = { lazy = miniscule_stress_impact_gain }
}
}
}
}
ai_accept = {
base = 0
scheme_modifier = {
object = scope:scheme
target = scope:recipient
}
# You should not add modifiers here! If you want to add modifiers, they should be added to either:
## - ai_agent_join_chance_hostile_general_suite_modifier
## - ai_agent_join_chance_personal_general_suite_modifier
}
auto_accept = {
trigger_if = {
limit = {
scope:recipient.var:devotee_agent_var ?= scope:actor # They are a devotee of yours
}
custom_tooltip = devotee_agent_desc
}
trigger_else_if = {
limit = {
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
always = yes
}
}
trigger_else_if = {
limit = {
scope:scheme = { is_scheme_category = contract }
}
# Should be synced with the modifiers in ai_agent_join_chance_laamp_contract_modifier, else agents'll leave the scheme immediately after joining.
scope:recipient = {
is_courtier_of = scope:actor
NOR = {
has_relation_rival = scope:actor
custom_tooltip = {
text = invite_agent_to_scheme_interaction.tt.no_stooges
AND = {
scope:actor = { has_court_position = stooge_camp_officer }
is_court_position_employer = {
court_position = stooge_camp_officer
who = scope:actor
}
}
}
}
}
}
trigger_else = { always = no }
}
options_heading = invite_agent_to_scheme_interaction.t.options_header
# Everyone
## Spend opportunities.
### x1.
send_option = {
flag = opportunities_t1
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_opportunities.tt.need_an_opportunity.t1
scope:scheme = { scheme_agent_charges >= invite_agent_opportunities_t1_value }
}
custom_tooltip = {
text = offer_opportunities.tt.cannot_offer_multiple_sets
scope:opportunities_t2 = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_OPPORTUNITIES_T1
}
### x3.
send_option = {
flag = opportunities_t2
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_opportunities.tt.need_an_opportunity.t2
scope:scheme = { scheme_agent_charges >= invite_agent_opportunities_t2_value }
}
custom_tooltip = {
text = offer_opportunities.tt.cannot_offer_multiple_sets
scope:opportunities_t1 = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_OPPORTUNITIES_T2
}
## Gold
send_option = {
flag = gift
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.gold >= bribe_value
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:gift_significant = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_GOLD
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.gold >= bribe_value }
desc = SCHEME_AGENT_GOLD_VALID
}
}
}
## Even more gold
send_option = {
flag = gift_significant
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.gold >= greater_bribe_value
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:gift = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_GOLD_SIGNIFICANT
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.gold >= greater_bribe_value }
desc = SCHEME_AGENT_GOLD_SIGNIFICANT_VALID
}
}
}
## Offer a hook
send_option = {
flag = offer_hook
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_hook.tt.cannot_offer_both_hooks
scope:offer_hook_strong = no
}
NOT = {
scope:recipient = { has_hook = scope:actor }
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HOOK
}
## Offer a strong hook
send_option = {
flag = offer_hook_strong
is_shown = {
scope:actor = { has_trait_with_flag = can_offer_strong_hook_to_agents }
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_hook.tt.cannot_offer_both_hooks
scope:offer_hook = no
}
NOT = {
scope:recipient = { has_strong_hook = scope:actor }
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HOOK_STRONG
}
## Use hook.
### Weak hook bonus is added through the scheme's agent join chance.
### Strong hook is in the auto_accept block.
send_option = {
flag = hook
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_HOOK_EXPLICIT
}
# Rulers
## Prestige
send_option = {
flag = prestige
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.prestige >= prestige_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_PRESTIGE
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.prestige >= prestige_bribe_value }
desc = SCHEME_AGENT_PRESTIGE_VALID
}
}
}
## Influence
send_option = {
flag = influence
is_shown = {
scope:actor.top_liege ?= scope:recipient.top_liege
scope:actor = { government_has_flag = government_is_administrative }
scope:recipient = {
OR = {
government_has_flag = government_is_administrative
host = { government_has_flag = government_is_administrative }
AND = {
highest_held_title_tier = tier_barony
liege = { government_has_flag = government_is_administrative }
}
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.influence >= influence_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_INFLUENCE
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.influence >= influence_bribe_value }
desc = SCHEME_AGENT_INFLUENCE_VALID
}
}
}
## Council Rights
send_option = {
flag = council_rights
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
scope:recipient.liege ?= scope:actor
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:recipient = { vassal_contract_has_modifiable_obligations = yes }
NOT = {
scope:recipient = { has_trait = lazy }
}
custom_tooltip = {
text = council_rights.tt.already_has_council_rights
scope:recipient = {
NOR = {
vassal_contract_has_flag = can_demand_council_seat
vassal_contract_has_flag = can_demand_kurultai_seat
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_COUNCIL_RIGHTS
}
## De jure county of theirs you hold.
send_option = {
flag = de_jure_title
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
scope:recipient = {
is_landed = yes
any_liege_or_above = { this = scope:actor }
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = de_jure_title.tt.no_suitable_county
scope:actor = {
any_held_title = {
actor_has_valid_de_jure_enticement_county_trigger = yes
any_this_title_or_de_jure_above = {
holder ?= { this = scope:recipient }
}
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_DE_JURE_TITLE
}
# Landless Chars
## County they hold a claim to that you hold.
send_option = {
flag = claimed_title
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_character
}
scope:recipient = {
is_ruler = no
# And you don't want them _because_ they're in your target's court.
NOT = { host = scope:scheme.scheme_target_character }
}
}
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_title
}
scope:recipient = {
is_ruler = no
# And you don't want them _because_ they're in your target's court.
NOT = { host = scope:scheme.scheme_target_title.holder }
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:recipient = {
trigger_if = {
limit = {
any_claim = { count >= 1 }
}
custom_tooltip = {
text = claimed_title.tt.no_valid_county
any_claim = { actor_has_valid_claimed_enticement_county_trigger = yes }
}
}
trigger_else = {
custom_tooltip = {
text = claimed_title.tt.no_claims
always = no
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_CLAIMED_TITLE
}
# Nomad Chars
## Use Herd
send_option = {
flag = herd
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
scope:actor = {
government_has_flag = government_is_nomadic
is_ai = no
}
scope:recipient = {
government_has_flag = government_is_nomadic
exists = domicile
}
}
is_valid = {
scope:actor.domicile.herd >= herd_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HERD
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.domicile.herd >= herd_bribe_value }
desc = SCHEME_AGENT_HERD_VALID
}
}
}
# Cofaithists
## Piety
send_option = {
flag = piety
is_shown = {
## Target amenable to this argument.
scope:recipient = {
OR = {
has_trait = devoted
has_trait = zealous
has_council_position = councillor_court_chaplain
government_has_flag = government_is_theocracy
}
}
## In-group out-group requirements.
OR = {
## Either we share a faith.
scope:actor.faith = scope:recipient.faith
## Or our faiths *really* get along.
scope:recipient.faith = {
faith_hostility_level = {
target = scope:actor.faith
value <= faith_fully_accepted_level
}
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.piety >= piety_bribe_value
NOT = {
scope:recipient = { has_trait = cynical }
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_PIETY
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.piety >= piety_bribe_value }
desc = SCHEME_AGENT_PIETY_VALID
}
}
}
send_options_exclusive = no
}

View file

@ -1,83 +0,0 @@
invite_to_activity_interaction = {
category = interaction_category_diplomacy
greeting = positive
notification_text = invite_to_activity_flavor
reply_item_key = invite_to_activity_reply_item_key
icon = activity_feast
common_interaction = yes
desc = invite_to_activity_interaction_desc
ai_maybe = yes
can_send_despite_rejection = yes
is_highlighted = {
always = yes
}
is_shown = {
exists = scope:actor.involved_activity
scope:actor = scope:actor.involved_activity.activity_host
scope:actor.involved_activity = {
is_current_phase_active = no
OR = {
has_activity_type = activity_tournament
has_activity_type = activity_wedding
has_activity_type = activity_feast
has_activity_type = activity_hunt
has_activity_type = activity_chariot_race
}
}
scope:recipient = { can_join_activity = scope:actor.involved_activity }
}
on_send = {
scope:recipient = {
invite_to_activity = scope:actor.involved_activity
}
}
on_accept = {
# Acceptance handled by the activity system itself
scope:actor = {
send_interface_message = {
type = event_activity_good_with_text
title = invite_to_activity_accepted
desc = invite_to_activity_accepted_desc
left_icon = scope:actor
right_icon = scope:recipient
scope:recipient = {
accept_activity_invite = scope:actor.involved_activity
}
}
}
}
on_decline = {
# Acceptance handled by the activity system itself
scope:actor = {
send_interface_message = {
type = event_activity_bad_with_text
title = invite_to_activity_refused
desc = invite_to_activity_refused_desc
left_icon = scope:actor
right_icon = scope:recipient
scope:recipient = {
decline_activity_invite = scope:actor.involved_activity
}
}
}
}
ai_accept = {
base = 0
## You should not add modifiers here! They won't show up in the UI
# If you want to add modifiers, they should be added to base_activity_modifier in 00_activity_scripted_modifiers.txt
# Any new activity should use base_activity_modifier = yes in their activity to get these default modifiers
activity_modifier = {
object = scope:actor.involved_activity
target = scope:recipient
}
}
}

View file

@ -1,79 +0,0 @@
revoke_leased_title_interaction = {
category = interaction_category_uncategorized
hidden = yes
desc = revoke_leased_title_interaction_desc
target_type = title
target_filter = recipient_lessee_titles
auto_accept = yes
is_shown = {
scope:actor = {
any_sub_realm_barony = {
barony_is_valid_for_holy_order_lease_cancellation_trigger = yes
lessee ?= scope:recipient
}
}
}
#is_valid = {
# scope:actor = {
# piety >= holy_order_revoke_lease_piety_cost
# }
#}
has_valid_target_showing_failures_only = {
NOT = { scope:actor = { is_at_war_with = scope:recipient } }
#scope:target = {
# NOT = {
# recent_history = {
# type = leased_out
# years = 1
# }
# }
#}
scope:target = {
has_revokable_lease = yes
lessee = scope:recipient
OR = {
county.holder = { is_ai = yes }
county.holder = scope:actor
}
}
scope:recipient = { NOT = { has_strong_hook = scope:actor } }
}
on_accept = {
revoke_holy_order_lease_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
BARONY = scope:target
}
}
# AI
ai_targets = {
ai_recipients = vassals
}
ai_frequency = 12
ai_potential = {
is_playable_character = yes
highest_held_title_tier > tier_barony
}
ai_will_do = {
base = 0
# revoke titles leased to holy orders of the wrong faith
modifier = {
add = 100
scope:recipient = {
government_has_flag = government_is_holy_order
NOT = { faith = scope:actor.faith }
}
}
}
}

View file

@ -1,47 +0,0 @@
#Break up with your Lover
break_up_with_lover_interaction = {
category = interaction_category_hostile
use_diplomatic_range = no
icon = lover
desc = break_up_with_lover_interaction_desc
is_shown = {
scope:actor = {
has_relation_lover = scope:recipient
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes }
}
on_accept = {
scope:actor = {
send_interface_message = {
type = event_sway_neutral
title = break_up_with_lover_interaction_notification
right_icon = scope:recipient
lover_breakup_effect = {
BREAKER = scope:actor
LOVER = scope:recipient
}
stress_impact = {
lustful = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_dramatic_breakup.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
}

File diff suppressed because it is too large Load diff

View file

@ -1,57 +0,0 @@
###################
# Demand Subjugation
# by Petter Vilberg
###################
mongol_demand_subjugation_interaction = {
category = interaction_category_hostile
icon = icon_dismiss_temporary_regency
auto_accept = yes
use_diplomatic_range = yes
desc = mongol_demand_subjugation_interaction_desc
is_shown = {
scope:actor = {
any_owned_story = {
story_type = story_mongol_invasion
}
highest_held_title_tier = tier_empire
is_independent_ruler = yes
}
scope:recipient = {
NOT = { this = scope:actor }
is_landless_adventurer = no
is_independent_ruler = yes
any_neighboring_top_liege_realm_owner = {
this = scope:actor
}
}
}
is_valid_showing_failures_only = {
OR = {
scope:recipient = {
highest_held_title_tier <= tier_kingdom
}
scope:actor = {
is_target_in_variable_list = {
name = subjugation_offer_under_consideration
target = scope:recipient
}
}
}
}
on_accept = {
custom_tooltip = mongol_demand_subjugation_interaction_tooltip
hidden_effect = {
scope:actor = {
save_scope_as = mongol_emperor
}
scope:recipient = {
send_mongol_subjugation_demand_effect = yes
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,420 +0,0 @@
# Poetry
###################
# Send a Poem
# by Ewan Cowhig Croft & Alexander Oltner
###################
send_poem_interaction = {
interface_priority = 30
common_interaction = yes
category = interaction_category_friendly
popup_on_receive = yes
pause_on_receive = yes
desc = send_poem_interaction_desc
is_shown = {
# Must be a poet.
scope:actor = {
OR = {
has_trait = poet
employs_court_position = master_bard_camp_officer
employs_court_position = laureate_camp_officer
}
}
# Cannot send self fan-poetry. Egoist.
NOT = { scope:actor = scope:recipient }
# May only write for adults.
scope:recipient = { is_adult = yes }
}
is_valid_showing_failures_only = {
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
send_options_exclusive = yes
cost = { prestige = minor_prestige_value }
cooldown = { years = 3 }
cooldown_against_recipient = { years = send_poem_cooldown_years_value }
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
# Set up the poem subject.
scope:actor = {
# Set up a subject gender.
select_poem_subject_gender_effect = {
SUBJECT = flag:specific
SUBJECT_TARGET = scope:recipient
}
}
# Theme Effects
## Romantic
if = {
limit = { always = scope:poem_theme_romance }
# As this is a positive poem, inform scope:actor that scope:recipient may simply accept it.
custom_tooltip = send_poem_interaction.positive_auto_accept.tt
# Show the potential duel.
show_as_tooltip = {
scope:recipient = {
send_poem_romance_duel_effect = { POV_TARGET = scope:actor }
}
}
# Set up the theme.
scope:actor = { select_poem_theme_romance_effect = yes }
# Send the response event to scope:recipient.
scope:recipient = { trigger_event = trait_specific_interactions.0001 }
}
## Mourning
else_if = {
limit = { always = scope:poem_theme_mourning }
# As this is a positive poem, inform scope:actor that scope:recipient may simply accept it.
custom_tooltip = send_poem_interaction.positive_auto_accept.tt
# Show the potential duel.
show_as_tooltip = {
scope:recipient = {
send_poem_mourning_duel_effect = { POV_TARGET = scope:actor }
}
}
# Set up the theme.
scope:actor = { select_poem_theme_mourning_effect = yes }
# Send the response event to scope:recipient.
scope:recipient = { trigger_event = trait_specific_interactions.0011 }
}
## Legacy
else_if = {
limit = { always = scope:poem_theme_legacy }
# As this is a positive poem, inform scope:actor that scope:recipient may simply accept it.
custom_tooltip = send_poem_interaction.positive_auto_accept.tt
# Show the potential duel.
show_as_tooltip = {
scope:recipient = {
send_poem_legacy_duel_effect = { POV_TARGET = scope:actor }
}
}
# Set up the theme.
scope:actor = { select_poem_theme_legacy_effect = yes }
# Send the response event to scope:recipient.
scope:recipient = { trigger_event = trait_specific_interactions.0021 }
}
## Strife
else_if = {
limit = { always = scope:poem_theme_strife }
# As this is a positive poem, inform scope:actor that scope:recipient may simply accept it.
custom_tooltip = send_poem_interaction.positive_auto_accept.tt
# Show the potential duel.
show_as_tooltip = {
scope:recipient = {
send_poem_strife_duel_effect = { POV_TARGET = scope:actor }
}
}
# Set up the theme.
scope:actor = { select_poem_theme_strife_effect = yes }
# Send the response event to scope:recipient.
scope:recipient = { trigger_event = trait_specific_interactions.0031 }
}
## Incompetence
else_if = {
limit = { always = scope:poem_theme_incompetence }
# Show the potential duel.
show_as_tooltip = {
scope:recipient = {
send_poem_incompetence_duel_effect = { POV_TARGET = scope:actor }
}
}
# Set up the theme.
scope:actor = { select_poem_theme_incompetence_effect = yes }
# Send the response event to scope:recipient.
scope:recipient = { trigger_event = trait_specific_interactions.0041 }
}
# Make sure the AI doesn't spam players
scope:recipient = {
if = {
limit = {
is_ai = no
}
add_character_flag = {
flag = ai_poem_block
years = 5
}
}
}
# Clear up hostile actions flag.
if = {
limit = {
scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
}
scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_gain
DESC = clan_unity_poetry.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
# SEND OPTIONS
## Send a romantic poem.
send_option = {
is_shown = {
# Only available if they'd be attracted to you.
scope:recipient = { is_attracted_to_gender_of = scope:actor }
# And the romance would be acceptable to both parties.
accepts_incest_with_each_other_trigger = {
CHARACTER_1 = scope:actor
CHARACTER_2 = scope:recipient
}
scope:recipient = {
freely_accepts_sodomy_with_trigger = { CHARACTER = scope:actor }
}
# Plus not if either of you have a soulmate, unless you're each other's soulmates.
scope:actor = {
OR = {
any_relation = {
type = soulmate
count = 0
}
has_relation_soulmate = scope:recipient
faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active }
}
}
scope:recipient = {
OR = {
any_relation = {
type = soulmate
count = 0
}
has_relation_soulmate = scope:actor
faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active }
}
}
# As this is a positive option, we restrict it to non-rivals and players.
scope:actor = { send_poem_positive_poem_lock_trigger = yes }
}
flag = poem_theme_romance
localization = "SEND_POEM_ROMANCE"
}
## Send a poem about legacy.
send_option = {
is_shown = {
# Scope:recipient must be a ruler & at least _potentially_ concerned.
scope:recipient = {
is_ruler = yes
NOT = { has_trait = humble }
}
# As this is a positive option, we restrict it to non-rivals and players.
scope:actor = { send_poem_positive_poem_lock_trigger = yes }
}
flag = poem_theme_legacy
localization = "SEND_POEM_LEGACY"
}
## Send a mourning poem.
send_option = {
# Scope:recipient must have at least one dead close family member.
is_shown = {
scope:recipient = {
any_close_family_member = {
even_if_dead = yes
is_alive = no
NOT = { # It's quite natural
is_grandparent_of = scope:recipient
}
}
}
}
flag = poem_theme_mourning
localization = "SEND_POEM_MOURNING"
}
## Send a poem about strife.
send_option = {
is_shown = {
# Scope:recipient must be a ruler & at least _potentially_ concerned.
scope:recipient = {
is_ruler = yes
NOT = { has_trait = humble }
}
# As this is a positive option, we restrict it to non-rivals and players.
scope:actor = { send_poem_positive_poem_lock_trigger = yes }
}
flag = poem_theme_strife
localization = "SEND_POEM_STRIFE"
}
## Send a poem about incompetence.
send_option = {
is_shown = {
# As this is a negative option, we restrict it to rivals and players.
scope:actor = { send_poem_negative_poem_lock_trigger = yes }
}
flag = poem_theme_incompetence
localization = "SEND_POEM_INCOMPETENCE"
}
auto_accept = yes
# AI
ai_potential = {
has_trait = poet
is_imprisoned = no
prestige >= 150
is_at_war = no
}
ai_target_quick_trigger = { adult = yes }
ai_targets = {
ai_recipients = scripted_relations
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = top_realm_domicile_owners
max = 10
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_frequency = 60
ai_will_do = {
base = 50
# Lustful characters prefer romance poems
modifier = {
add = 50
OR = {
has_trait = lustful
has_focus = intrigue_temptation_focus
}
scope:poem_theme_romance = yes
}
# Arrogant characters are prone to actually interact via public poetry publishing.
modifier = {
add = 20
scope:actor = { has_trait = arrogant }
}
# Certain personality types skew towards specific poem types
modifier = {
add = 10
scope:actor = {
has_trait_benevolent_trigger = yes
}
scope:poem_theme_mourning = yes
}
modifier = {
add = 10
scope:actor = {
has_trait_submissive_trigger = yes
}
scope:poem_theme_legacy = yes
}
modifier = {
add = 10
scope:actor = {
has_trait_malicious_trigger = yes
}
scope:poem_theme_strife = yes
}
## Insult people you don't like
modifier = {
add = 50
scope:poem_theme_incompetence = yes
scope:actor = {
OR = {
has_personality_malicious_trigger = yes
has_relation_potential_rival = scope:recipient
has_relation_rival = scope:recipient
}
}
}
## Players enjoy receiving poetry!
modifier = {
add = 50
scope:recipient = {
is_ai = no
}
}
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
# Characters who are not lustful don't send romantic poems to just anyone
modifier = {
factor = 0
NOR = {
has_trait = lustful
has_focus = intrigue_temptation_focus
}
scope:recipient = {
NOR = {
has_relation_lover = scope:actor
is_consort_of = scope:actor
}
}
scope:poem_theme_romance = yes
}
## Don't use insulting poems willy-nilly
modifier = {
factor = 0
scope:poem_theme_incompetence = yes
scope:actor = {
NOR = {
has_trait = arbitrary
has_trait = lunatic
has_relation_potential_rival = scope:recipient
has_relation_rival = scope:recipient
opinion = {
target = scope:recipient
value <= medium_negative_opinion
}
}
}
}
## Don't spam players while at war
modifier = {
factor = 0
scope:recipient = {
is_ai = no
is_at_war = yes
}
}
## Don't spam players when the poetry block is active
modifier = {
factor = 0
scope:recipient = {
has_character_flag = ai_poem_block
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,411 +0,0 @@
spar_with_knight_interaction = {
icon = icon_combat
interface_priority = 30
common_interaction = yes
category = interaction_category_friendly
ai_min_reply_days = 0
ai_max_reply_days = 0
popup_on_receive = yes
pause_on_receive = yes
desc = spar_with_knight_interaction_desc
greeting = positive
notification_text = REQUEST_SPARRING_TEXT
is_shown = {
scope:actor = {
culture = {
has_cultural_parameter = can_use_sparring_duel
}
}
scope:recipient = {
is_knight_of = scope:actor
}
# Can't duel yourself.
NOT = { scope:actor = scope:recipient }
}
is_valid_showing_failures_only = {
scope:actor = { can_start_single_combat_trigger = yes }
scope:actor = { can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:actor } }
# Scope:recipient must be able to fight personally.
scope:recipient = { can_start_single_combat_trigger = yes }
# Scope:recipient must not be banned from single combat.
scope:recipient = {
custom_description = {
text = fp1_tbc_recipient_banned_from_combat
can_start_single_combat_banned_checks_trigger = no
}
}
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
scope:actor = { is_at_war = no }
scope:recipient = { is_at_war = no }
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
cost = { prestige = medium_prestige_value }
cooldown = { years = 5 }
cooldown_against_recipient = { years = 10 }
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
# Set up the bout immediately.
## First inform.
scope:actor = {
custom_tooltip = challenge_to_single_combat_interaction.enter_non_lethal_bout.tt
custom_tooltip = spar_with_knight_interaction.effect.tt
custom_tooltip = spar_with_knight_interaction.negative_effect.tt
}
scope:recipient = {
custom_tooltip = spar_with_knight_interaction.effect.tt
custom_tooltip = spar_with_knight_interaction.negative_effect.tt
}
## Finally, begin.
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = army_camp
OUTPUT_EVENT = culture_tradition_events.0001
INVALIDATION_EVENT = perk_interaction.0102
}
}
ai_accept = {
base = 10 # Try to make it 0 for most interactions
modifier = {
desc = CTSC_RELATIVE_PROWESS
scope:recipient.prowess < scope:actor.prowess
add = {
value = scope:actor.prowess
subtract = scope:recipient.prowess
multiply = -2
}
}
# Personality values
ai_value_modifier = {
who = scope:recipient
ai_boldness = 0.5
ai_honor = {
if = {
limit = {
scope:recipient = {
ai_honor > 0
}
}
value = 0.25
}
}
}
modifier = {
desc = AI_REFUSAL_WOUNDED
scope:recipient = {
OR = {
has_trait = wounded
has_trait = maimed
}
}
add = -200
}
}
# AI
ai_potential = {
culture = {
has_cultural_parameter = can_use_sparring_duel
}
NOT = { has_trait = craven }
is_imprisoned = no
can_start_single_combat_trigger = yes
number_of_knights > 0
primary_title.tier > tier_barony
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_targets = {
ai_recipients = courtiers
max = 10
}
ai_frequency = 60
ai_will_do = {
base = -25
# Factor for personality (excluding realism).
modifier = {
add = {
value = ai_boldness
multiply = 1
}
}
modifier = {
add = {
value = ai_energy
multiply = 0.5
}
}
modifier = {
add = -50
prowess <= low_skill_rating
}
modifier = {
factor = 0
OR = {
has_trait = wounded
has_trait = maimed
}
}
}
}
#Appointing a Podesta over a Commune - Turning a one county holder into a Republican Vassal
#Local culture must have the parameter, as does the granting character.
#Recipient does not need to have local culture.
appoint_podesta_interaction = {
icon = grant_titles_interaction
interface_priority = 30
common_interaction = yes
category = interaction_category_vassal
ai_min_reply_days = 0
ai_max_reply_days = 0
popup_on_receive = yes
pause_on_receive = yes
desc = appoint_podesta_desc
greeting = positive
notification_text = REQUEST_REPUBLIC_TEXT
is_shown = {
NOT = { scope:actor = scope:recipient } # Can't make yourself a Podesta.
scope:actor = {
culture = {
has_cultural_parameter = can_make_republican_vassals
}
any_held_title = {
count > 1
}
}
scope:recipient = {
is_ai = yes
is_landed = yes
target_is_liege_or_above = scope:actor
NOT = { government_has_flag = government_is_special_republic }
}
}
is_valid_showing_failures_only = {
scope:recipient = { can_be_granted_titles_by = { RULER = scope:actor } }
NOT = { scope:actor = { is_at_war_with = scope:recipient } }
custom_description = {
text = too_many_republics
scope:actor = {
any_vassal = {
count < 4 #Use Script Value
highest_held_title_tier >= tier_county
government_has_flag = government_is_special_republic
}
}
}
scope:recipient = {
target_is_liege_or_above = scope:actor
NOT = { government_has_flag = government_is_special_republic }
is_claimant = no
custom_description = {
text = must_be_one_county_count
any_held_title = {
count = 1
tier = tier_county
}
}
custom_description = {
text = must_not_have_landed_relatives
NOT = {
any_close_or_extended_family_member = {
is_landed_or_landless_administrative = yes
}
}
}
custom_description = {
text = must_not_be_heir_to_any_title
scope:recipient = {
any_heir_title = {
count < 1
tier >= tier_county
}
}
}
custom_description = { #The county must be developed or have at least one city
text = county_must_have_city
any_held_title = {
count = 1
tier = tier_county
OR = {
any_county_province = {
has_holding_type = city_holding
}
development_level > 20
}
}
}
custom_description = { #County must be of a culture that has the tradition parameter
text = county_must_have_culture
any_held_title = {
count = 1
tier = tier_county
any_county_province = {
culture = {
has_cultural_parameter = can_make_republican_vassals
}
}
}
}
}
scope:recipient = { is_busy_in_events_localised = yes }
trigger_if = {
limit = {
scope:recipient = {
is_ruler = no
}
}
scope:recipient = {
is_imprisoned = no
}
}
}
cost = { prestige = minor_prestige_value }
cooldown = { years = 5 }
cooldown_against_recipient = { years = 10 }
on_accept = {
scope:actor = {
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_neutral
title = appoint_podesta_interaction_notification
left_icon = scope:actor
right_icon = scope:recipient
scope:recipient = {
show_as_tooltip = {
change_government = republic_government
create_title_and_vassal_change = {
type = returned
save_scope_as = change
add_claim_on_loss = no
}
every_vassal = {
limit = {
government_has_flag = government_is_special_republic
}
every_held_title = {
change_title_holder = {
holder = scope:recipient
change = scope:change
take_baronies = yes
}
}
}
resolve_title_and_vassal_change = scope:change
}
}
}
}
}
scope:recipient = {
change_government = republic_government
create_title_and_vassal_change = {
type = returned
save_scope_as = change
add_claim_on_loss = no
}
every_vassal = {
limit = {
government_has_flag = government_is_special_republic
}
every_held_title = {
change_title_holder = {
holder = scope:recipient
change = scope:change
take_baronies = yes
}
}
}
resolve_title_and_vassal_change = scope:change
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_gain
DESC = clan_unity_podesta.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
# AI
ai_potential = {
culture = {
has_cultural_parameter = can_make_republican_vassals
has_cultural_era_or_later = culture_era_high_medieval
}
primary_title.tier > tier_county
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = vassals
}
ai_frequency = 240
ai_will_do = {
base = 100
}
}

View file

@ -1,751 +0,0 @@
#FORGIVING INTERACTION
abandon_hook_interaction = {
interface_priority = 120
common_interaction = yes
category = interaction_category_friendly
icon = forgiving
desc = abandon_hook_interaction_desc
is_shown = {
OR = {
scope:actor = {
has_trait = forgiving
}
#Struggle
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_abandon_hook_for_all
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
}
scope:actor = {
has_usable_hook = scope:recipient
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes }
custom_description = {
scope:actor = {
NOT = {
has_hook_of_type = {
target = scope:recipient
type = house_head_hook
}
}
}
text = need_non_house_head_hook
}
custom_description = {
scope:actor = {
NOT = {
has_hook_of_type = {
target = scope:recipient
type = ritual_best_friend_hook
}
}
}
text = need_non_best_friend_hook
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_neutral
title = msg_abandon_hook_interaction_title
left_icon = scope:actor
right_icon = scope:recipient
use_hook = scope:recipient
if = {
limit = {
has_strong_hook = scope:recipient
}
stress_impact = {
forgiving = major_stress_impact_loss
}
}
else = {
stress_impact = {
forgiving = medium_stress_impact_loss
}
}
scope:recipient = {
add_opinion = {
target = scope:actor
modifier = forgiven_opinion
}
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_gain
DESC = clan_unity_abandon_hook.desc
REVERSE_NON_HOUSE_TARGET = no
}
hidden_effect = {
# Struggle Catalysts
scope:actor = {
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:actor
SECOND = scope:recipient
}
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_abandon_hook_on_supporter_detractor
}
}
every_character_struggle = {
involvement = involved
activate_struggle_catalyst = {
catalyst = catalyst_abandon_hook_on_supporter_detractor
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_abandon_hook_on_supporter_detractor }
}
}
}
}
}
ai_frequency = 60
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_target_quick_trigger = {
adult = yes
}
ai_potential = {
stress_level >= 1
}
ai_will_do = {
base = 100
}
auto_accept = yes
}
#ARBITRARY INTERACTION
dismiss_strong_hook_interaction = {
interface_priority = 120
common_interaction = yes
category = interaction_category_hostile
icon = arbitrary
cost = {
prestige = monumental_prestige_value
}
desc = dismiss_strong_hook_interaction_desc
is_shown = {
scope:actor = {
has_trait = arbitrary
}
scope:recipient = {
is_vassal_of = scope:actor
has_strong_hook = scope:actor
}
}
is_valid_showing_failures_only = {
scope:actor = {
prestige >= monumental_prestige_value
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_neutral
title = msg_dismiss_hook_interaction_title
left_icon = scope:actor
right_icon = scope:recipient
scope:recipient = {
remove_hook = { target = scope:actor }
add_opinion = {
target = scope:actor
modifier = lost_strong_hook_opinion
}
}
add_tyranny = 35
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_gain
DESC = clan_unity_dismiss_strong_hook.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
ai_frequency = 60
ai_potential = {
dread >= 50
}
ai_will_do = {
base = 100
}
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_target_quick_trigger = {
adult = yes
}
auto_accept = yes
}
dismiss_weak_hook_interaction = {
interface_priority = 120
common_interaction = yes
category = interaction_category_hostile
icon = arbitrary
cost = {
prestige = major_prestige_value
}
desc = dismiss_weak_hook_interaction_desc
is_shown = {
scope:actor = {
has_trait = arbitrary
}
scope:recipient = {
is_vassal_of = scope:actor
has_usable_hook = scope:actor
NOT = { has_strong_hook = scope:actor }
}
}
is_valid_showing_failures_only = {
scope:actor = {
prestige >= major_prestige_value
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_neutral
title = msg_dismiss_hook_interaction_title
left_icon = scope:actor
right_icon = scope:recipient
scope:recipient = {
remove_hook = { target = scope:actor }
add_opinion = {
target = scope:actor
modifier = lost_weak_hook_opinion
}
progress_towards_rival_effect = {
CHARACTER = scope:actor
REASON = rival_dismissed_weak_hook
OPINION = default_rival_opinion
}
}
add_tyranny = 15
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_gain
DESC = clan_unity_dismiss_weak_hook.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency = 60
ai_potential = {
dread >= 50
}
ai_will_do = {
base = 100
}
auto_accept = yes
}
#WRATHFUL DUELING
force_duel_criminals_interaction = {
interface_priority = 30
common_interaction = yes
category = interaction_category_hostile
ai_maybe = yes
ai_max_reply_days = 0
popup_on_receive = yes
pause_on_receive = yes
desc = force_duel_criminals_interaction_desc
icon = wrathful
greeting = negative
notification_text = REQUEST_TRIAL_BY_COMBAT_TEXT
is_shown = {
#First, verify if the actor is Wrathful
scope:actor = { has_trait = wrathful }
#Then, look to see if this character is a criminal.
scope:actor = {
OR = {
has_imprisonment_reason = scope:recipient
has_banish_reason = scope:recipient
has_execute_reason = scope:recipient
}
basic_allowed_to_imprison_character_trigger = { # And if you are allowed to imprison the target.
CHARACTER = scope:recipient
}
}
# Can't duel yourself.
NOT = { scope:actor = scope:recipient }
}
is_valid_showing_failures_only = {
# Calc some stuff that might invalidate elsewhere before the bout is sorted.
rival_single_combat_shown_and_not_invalid_trigger = yes
# Scope:recipient must be able to fight personally.
scope:recipient = { can_start_single_combat_trigger = yes }
# Scope:recipient must not be banned from single combat.
scope:recipient = {
custom_description = {
text = fp1_tbc_recipient_banned_from_combat
can_start_single_combat_banned_checks_trigger = no
}
}
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
cooldown_against_recipient = { years = 10 }
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
# Set up the bout immediately.
#Starting with the strongest punishment in case more than one reason is valid
if = {
limit = {
scope:actor = { has_execute_reason = scope:recipient }
}
## First inform.
scope:actor = {
custom_tooltip = force_duel_criminals_interaction.execute_punishment.tt
}
## Finally, begin.
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = terrain_scope
OUTPUT_EVENT = trait_specific_interactions.0155
INVALIDATION_EVENT = fp1_tbc.0102
}
}
else_if = {
limit = {
scope:actor = { has_banish_reason = scope:recipient }
}
## First inform.
scope:actor = {
custom_tooltip = force_duel_criminals_interaction.banish_punishment.tt
}
## Finally, begin.
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = terrain_scope
OUTPUT_EVENT = trait_specific_interactions.0153
INVALIDATION_EVENT = fp1_tbc.0102
}
}
else_if = {
limit = {
scope:actor = { has_imprisonment_reason = scope:recipient }
}
scope:actor = {
custom_tooltip = force_duel_criminals_interaction.imprison_punishment.tt
}
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = terrain_scope
OUTPUT_EVENT = trait_specific_interactions.0151
INVALIDATION_EVENT = fp1_tbc.0102
}
}
}
auto_accept = yes
# AI
ai_potential = {
has_trait = wrathful
is_imprisoned = no
can_start_single_combat_trigger = yes
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = courtiers
ai_recipients = guests
max = 10
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_targets = {
ai_recipients = family
max = 10
}
ai_frequency = 120
ai_will_do = {
base = -50
# Factor for personality (excluding realism).
modifier = {
add = {
value = ai_boldness
multiply = 1
}
}
modifier = { add = ai_vengefulness }
modifier = {
add = {
value = ai_energy
multiply = -0.25
}
}
# Don't challenge kinslayer-counting family, unless they're your nemesis.
modifier = {
scope:actor = {
murdering_character_is_kinslaying_in_faith_trigger = {
CHARACTER = scope:recipient
FAITH = scope:actor.faith
}
}
scope:recipient = {
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge your spouse, unless they're your nemesis.
modifier = {
scope:recipient = {
is_spouse_of = scope:actor
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge people hopelessly out of your league unless you're really, really not seeing things clearly.
modifier = {
scope:actor = {
prowess_diff = {
target = scope:recipient
value <= -15
}
ai_rationality >= high_negative_ai_value
}
add = -1000
}
}
}
#IRRITABLE DUELING
force_duel_anyone_interaction = {
#need to have a stress level >= 1
interface_priority = 30
common_interaction = yes
category = interaction_category_hostile
ai_maybe = yes
ai_max_reply_days = 0
popup_on_receive = yes
pause_on_receive = yes
desc = force_duel_anyone_interaction_desc
icon = irritable
greeting = negative
notification_text = REQUEST_TRIAL_BY_COMBAT_TEXT
is_shown = {
#Just, verify if the actor is Wrathful
scope:actor = { has_trait = irritable }
# Can't duel yourself.
NOT = { scope:actor = scope:recipient }
}
is_valid_showing_failures_only = {
# Need to be stressed to be able to force a Duel
scope:actor = {
custom_description = {
stress_level >= 1
text = not_enough_stress
}
}
# Calc some stuff that might invalidate elsewhere before the bout is sorted.
rival_single_combat_shown_and_not_invalid_trigger = yes
# Scope:recipient must be able to fight personally.
scope:recipient = { can_start_single_combat_trigger = yes }
# Scope:recipient must not be banned from single combat.
scope:recipient = {
custom_description = {
text = fp1_tbc_recipient_banned_from_combat
can_start_single_combat_banned_checks_trigger = no
}
}
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
cost = { prestige = medium_prestige_value }
cooldown_against_recipient = { years = 10 }
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
# Set up the bout immediately.
## First inform.
scope:actor = {
add_tyranny = 5
add_dread = 5
custom_tooltip = challenge_to_single_combat_interaction.victor_gets.tt
custom_tooltip = challenge_to_single_combat_interaction.loser_gets.tt
}
## Finally, begin.
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = terrain_scope
OUTPUT_EVENT = perk_interaction.0101
INVALIDATION_EVENT = fp1_tbc.0102
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_released_anger.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
# AI
ai_potential = {
has_trait = irritable
stress_level >= 1
is_imprisoned = no
can_start_single_combat_trigger = yes
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = prisoners
ai_recipients = courtiers
ai_recipients = guests
max = 1
}
ai_targets = {
ai_recipients = family
max = 10
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_frequency = 120
ai_will_do = {
base = -50
# Factor for personality (excluding realism).
modifier = {
add = {
value = ai_boldness
multiply = 1
}
}
modifier = { add = ai_vengefulness }
modifier = {
add = {
value = ai_energy
multiply = -0.25
}
}
# Don't challenge kinslayer-counting family, unless they're your nemesis.
modifier = {
scope:actor = {
murdering_character_is_kinslaying_in_faith_trigger = {
CHARACTER = scope:recipient
FAITH = scope:actor.faith
}
}
scope:recipient = {
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge your spouse, unless they're your nemesis.
modifier = {
scope:recipient = {
is_spouse_of = scope:actor
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge people hopelessly out of your league unless you're really, really not seeing things clearly.
modifier = {
scope:actor = {
prowess_diff = {
target = scope:recipient
value <= -15
}
ai_rationality >= high_negative_ai_value
}
add = -1000
}
}
}

View file

@ -1,582 +0,0 @@
feudalize_holding_interaction = {
category = interaction_category_uncategorized
hidden = yes
special_interaction = feudalize_holding
desc = feudalize_holding_interaction_desc
target_type = title
target_filter = actor_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
this = scope:recipient
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
}
}
}
can_be_picked_title = {
scope:target = {
holder = scope:actor
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
trigger_else = {
custom_description = {
text = "feudalize_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:actor
has_ongoing_construction = no
}
}
}
}
cost = {
gold = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 50
desc = BASE
}
}
else_if = {
limit = {
scope:target.county = {
culture = scope:actor.culture
}
}
add = {
value = 200
desc = BASE
}
}
else = {
add = {
value = feudalize_holding_interaction_cost
desc = BASE
}
}
if = {
limit = { # More expensive for admin to make barbarians civilized...
government_has_flag = government_is_administrative
}
add = {
value = feudalize_holding_interaction_cost
multiply = 0.25
desc = has_admin_government
}
if = {
limit = { # Admin get a bonus for high bureaucracy levels
OR = {
has_realm_law = imperial_bureaucracy_2
has_realm_law = imperial_bureaucracy_3
}
}
subtract = {
value = feudalize_holding_interaction_cost
multiply = {
value = 0.1
if = {
limit = {
has_realm_law = imperial_bureaucracy_3
}
add = 0.15
}
}
desc = imperial_bureaucracy
}
}
}
}
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
right_icon = scope:actor
if = {
limit = {
scope:target.title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
if = {
limit = {
OR = {
scope:target.county.culture = scope:actor.culture
scope:target.county = {
has_variable = was_razed
}
}
}
}
else_if = {
limit = {
OR = {
government_has_flag = government_is_tribal
scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture }
}
}
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 5
}
}
}
else = {
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 30
}
}
}
}
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = castle_holding
}
}
if = {
limit = {
scope:target = {
title_province = {
geographical_region = geographical_region:mpo_region_permafrost
}
}
}
if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier }
}
remove_county_modifier = mpo_siberian_permafrost_modifier
}
else_if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
remove_county_modifier = mpo_siberian_permafrost_modifier_bad
}
}
}
}
}
# Interaction frequency determined by code, do not change
ai_frequency = 0
# Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings
ai_will_do = {
base = 1500
}
}
tribalize_holding_interaction = {
category = interaction_category_uncategorized
hidden = yes
special_interaction = tribalize_holding
desc = tribalize_holding_interaction_desc
target_type = title
target_filter = actor_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
this = scope:recipient
government_has_flag = government_is_tribal
}
}
can_be_picked_title = {
scope:target = {
holder = scope:actor
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
trigger_else = {
custom_description = {
text = "feudalize_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:actor
has_ongoing_construction = no
}
}
}
}
cost = {
gold = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 15
desc = BASE
}
}
else = {
add = {
value = 50
desc = BASE
}
}
}
}
prestige = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 25
desc = BASE
}
}
else_if = {
limit = {
scope:target.county.culture = scope:actor.culture
}
add = {
value = 50
desc = BASE
}
}
else_if = {
limit = {
scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture }
}
add = {
value = 100
desc = BASE
}
}
else = {
add = {
value = 300
desc = BASE
}
}
}
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
right_icon = scope:actor
if = {
limit = {
OR = {
scope:target.county.culture = scope:actor.culture
scope:target.county = {
has_variable = was_razed
}
}
}
}
else = {
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 5
}
}
}
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = tribal_holding
}
}
if = {
limit = {
scope:target = {
title_province = {
geographical_region = geographical_region:mpo_region_permafrost
}
}
}
if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier }
}
remove_county_modifier = mpo_siberian_permafrost_modifier
}
else_if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
remove_county_modifier = mpo_siberian_permafrost_modifier_bad
}
}
}
}
}
# Interaction frequency determined by code, do not change
ai_frequency = 0
# Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings
ai_will_do = {
base = 1500
}
}
support_feudalize_tribal_holding_interaction = {
category = interaction_category_vassal
icon = request_funding_interaction
desc = support_feudalize_tribal_holding_interaction_desc
target_type = title
target_filter = recipient_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
NOT = { government_has_flag = government_is_tribal }
}
scope:recipient = {
target_is_liege_or_above = scope:actor
NOT = { government_has_flag = government_is_tribal }
NOT = { this = scope:actor }
any_held_title = {
tier <= tier_county
title_province = {
has_holding_type = tribal_holding
}
}
}
}
can_be_picked_title = {
scope:target = {
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:recipient
has_ongoing_construction = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
has_holding_type = tribal_holding
}
}
trigger_else = {
custom_description = {
text = "feudalize_tribal_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
cost = {
gold = {
scope:actor = {
add = {
value = feudalize_holding_interaction_cost
desc = BASE
}
if = {
limit = { # More expensive for admin to make these barbarians civilized...
government_has_flag = government_is_administrative
}
add = {
value = feudalize_holding_interaction_cost
multiply = 0.25
desc = has_admin_government
}
if = {
limit = { # Admin get a bonus for high bureaucracy levels
OR = {
has_realm_law = imperial_bureaucracy_2
has_realm_law = imperial_bureaucracy_3
}
}
subtract = {
value = feudalize_holding_interaction_cost
multiply = {
value = 0.1
if = {
limit = {
has_realm_law = imperial_bureaucracy_3
}
add = 0.15
}
}
desc = imperial_bureaucracy
}
}
}
}
}
}
is_highlighted = {
# Highlight the interaction if we have the gold to spare
scope:actor = {
gold >= {
value = feudalize_holding_interaction_cost
if = {
limit = { # More expensive for admin to convert these... Barbarians...
government_has_flag = government_is_administrative
}
multiply = {
value = 1.25
desc = has_admin_government
}
}
}
}
}
on_accept = {
scope:recipient = {
# Add some opinion to make it worthwhile
add_opinion = {
target = scope:actor
modifier = grateful_opinion
opinion = 15
}
# Notify actor and recipient
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
left_icon = scope:actor
right_icon = scope:target
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = castle_holding
}
}
}
}
}
scope:actor = {
# If you are admin, you get some influence for your efforts
if = {
limit = { government_has_flag = government_is_administrative }
change_influence = medium_influence_gain
}
}
}
# The AI doesn't check this very often - So if they have more important expenses, they will put their gold to better use first.
ai_frequency = 72
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_potential = {
# Some basic triggers
is_at_war = no
is_adult = yes
# The AI only does this if they have plenty of gold to spare
gold >= { value = feudalize_holding_interaction_cost multiply = 4 }
# Warring AI don't do this - They want to spend their gold on war!
ai_has_warlike_personality = no
ai_has_conqueror_personality = no
}
ai_will_do = {
base = 25
modifier = {
scope:actor = { ai_has_economical_boom_personality = yes }
add = 50
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,311 +0,0 @@

convert_to_witchcraft_interaction = {
icon = icon_scheme_convert_to_witchcraft
category = interaction_category_friendly
interface_priority = 90
scheme = convert_to_witchcraft
send_name = START_SCHEME
desc = convert_to_witchcraft_interaction_desc
is_shown = {
scope:actor = {
can_start_scheme = {
type = convert_to_witchcraft
target_character = scope:recipient
}
}
NOT = { scope:actor = scope:recipient }
}
is_valid_showing_failures_only = {
scope:actor = {
NOT = { is_at_war_with = scope:recipient }
can_start_scheme = {
type = convert_to_witchcraft
target_character = scope:recipient
}
}
custom_description = {
text = has_a_witch_secret_known_by_character
subject = scope:recipient
object = scope:actor
scope:recipient = { #If they are a secret witch I must not know about it
trigger_if = {
limit = {
any_secret = {
secret_type = secret_witch
}
}
any_secret = {
secret_type = secret_witch
NOT = { any_secret_knower = { this = scope:actor } }
}
}
}
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = convert_to_witchcraft_interaction_notification
left_icon = scope:actor
right_icon = scope:recipient
begin_scheme_basic_effect = {
SCHEME_TYPE = convert_to_witchcraft
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
}
}
}
}
auto_accept = yes
#AI will do
ai_potential = {
is_witch_trigger = yes
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = family
max = 5
}
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
ai_recipients = liege
ai_recipients = vassals
chance = 0.2
}
ai_frequency = 72
ai_will_do = {
base = -45
# Do I like recipient & are they trustworthy
opinion_modifier = {
who = scope:actor
opinion_target = scope:recipient
multiplier = 0.5
}
compatibility_modifier = {
who = scope:actor
compatibility_target = scope:recipient
multiplier = 0.2
}
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
}
ai_value_modifier = {
who = scope:recipient
ai_honor = 0.2
ai_compassion = 0.1
ai_rationality = 0.2
ai_greed = 0.2
ai_sociability = 0.1
}
ai_value_modifier = {
trigger = { trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = scope:recipient.faith TRAIT = witch GENDER_CHARACTER = scope:actor } }
ai_zeal = -0.5
max = 20
}
# Are they important (to me)
modifier = {
add = {
value = scope:recipient.highest_held_title_tier
subtract = scope:actor.highest_held_title_tier
multiply = 10
}
}
modifier = {
OR = {
is_close_family_of = scope:recipient
is_consort_of = scope:recipient
has_relation_lover = scope:recipient
has_relation_friend = scope:recipient
}
add = 20
}
modifier = {
OR = {
has_relation_best_friend = scope:recipient
has_relation_soulmate = scope:recipient
}
add = 30
}
modifier = {
exists = house
exists = scope:recipient.house
house = scope:recipient.house
add = 10
}
# Do I want to spread the word
ai_value_modifier = {
ai_sociability = 0.2
ai_compassion = 0.1
ai_boldness = 0.4
min = -20
}
}
}
reveal_as_witch_interaction = {
category = interaction_category_friendly
icon = icon_scheme_convert_to_witchcraft
interface_priority = 100
desc = reveal_as_witch_interaction_desc
notification_text = witch.2900.desc
is_shown = {
scope:actor = {
is_adult = yes
any_secret = {
secret_type = secret_witch
NOT = { is_known_by = scope:recipient }
}
knows_about_character_being_witch_trigger = { CHARACTER = scope:recipient }
}
scope:actor.faith = scope:recipient.faith
scope:recipient = {
is_adult = yes
}
}
is_valid_showing_failures_only = {
scope:actor = {
NOT = { is_at_war_with = scope:recipient }
}
}
on_accept = {
scope:actor = {
#Secret reveals.
random_secret = {
limit = {
secret_type = secret_witch
NOT = { is_known_by = scope:recipient }
}
save_scope_as = witch_secret
reveal_to = scope:recipient
}
#Send a reply.
trigger_event = witch.2901
#Opinion effects.
reverse_add_opinion = {
target = scope:recipient
modifier = trust_opinion
opinion = 20
}
hidden_effect = {
if = {
limit = {
can_set_relation_potential_friend_trigger = { CHARACTER = scope:recipient }
}
set_relation_potential_friend = scope:recipient
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_witch_reveal.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
force_notification = yes
#AI will do
ai_potential = {
always = yes
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = liege
ai_recipients = known_secrets
}
ai_targets = {
ai_recipients = vassals
ai_recipients = peer_vassals
chance = 0.2
}
ai_frequency = 144
ai_will_do = {
base = -45
# Do I like recipient & are they trustworthy
opinion_modifier = {
who = scope:actor
opinion_target = scope:recipient
multiplier = 0.5
}
compatibility_modifier = {
who = scope:actor
compatibility_target = scope:recipient
multiplier = 0.2
}
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
}
ai_value_modifier = {
who = scope:recipient
ai_honor = 0.2
ai_compassion = 0.1
}
# Are they important
modifier = {
add = {
value = scope:recipient.highest_held_title_tier
subtract = scope:actor.highest_held_title_tier
multiply = 10
max = 30
}
}
#Do I want to tell anyone
ai_value_modifier = {
ai_sociability = 0.2
ai_compassion = 0.1
min = -20
}
modifier = {
has_trait = paranoid
add = -40
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,468 +0,0 @@
# Character Interactions for EP1
##################
# Fund someone's inspiration
# by Linnéa Thimrén
##################
fund_inspiration_interaction = {
icon = inspiration
interface_priority = 30
common_interaction = yes
category = interaction_category_vassal
desc = fund_inspiration_interaction_desc
is_shown = {
scope:recipient = {
is_ruler = no
exists = inspiration
inspiration = {
NOT = {
exists = inspiration_sponsor
}
}
}
scope:actor = {
any_courtier_or_guest = {
this = scope:recipient
}
}
}
is_highlighted = {
always = yes
}
is_valid_showing_failures_only = {
scope:recipient = {
is_physically_able = yes
is_ruler = no
trigger_if = {
limit = {
NOT = { is_courtier_of = scope:actor }
}
can_recruit_character_to_court_trigger = {
RECRUITER = scope:actor
RECRUITEE = scope:recipient
}
}
}
scope:actor = {
can_sponsor_inspiration = scope:recipient.inspiration
gold >= scope:recipient.inspiration.base_inspiration_gold_cost
}
}
on_accept = {
fund_inspiration_effect = yes
if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = weapon_inspiration } }
custom_description_no_bullet = { text = weapon_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = armor_inspiration } }
custom_description_no_bullet = { text = armor_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = book_inspiration } }
custom_description_no_bullet = { text = book_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = weaver_inspiration } }
custom_description_no_bullet = { text = weaver_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = adventure_inspiration } }
custom_description_no_bullet = { text = adventure_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = artisan_inspiration } }
custom_description_no_bullet = { text = artisan_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = smith_inspiration } }
custom_description_no_bullet = { text = smith_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = alchemy_inspiration}}
custom_description_no_bullet = { text = alchemy_inspiration_cost_tt }
}
# Add a flag on AI to have an extra cooldown of 3 years
if = {
limit = {
scope:actor = {
is_ai = yes
NOT = {
gold >= 1000
}
OR = {
short_term_gold < ai_inspiration_desired_gold_value
ai_greed >= 50
}
}
}
scope:actor = {
add_character_flag = {
flag = recently_fund_inspiration
years = 3
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_gain
DESC = clan_unity_inspo.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = {
custom_description = {
text = auto_accept_interaction_ai
object = scope:recipient
scope:recipient = {
is_ai = yes
}
}
}
ai_frequency = 10
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
}
ai_target_quick_trigger = {
adult = yes
}
ai_potential = {
is_at_war = no
OR = {
has_royal_court = yes
government_has_flag = government_is_landless_adventurer
}
gold > ai_inspiration_desired_gold_value
NOT = { has_character_flag = recently_fund_inspiration }
ai_has_conqueror_personality = no
ai_should_focus_on_building_in_their_capital = no
}
ai_will_do = {
base = 100
modifier = { # Not as likely to fund inspirations if they already have some going (max three for very prestigious courts)
add = {
if = {
limit = {
highest_held_title_tier >= tier_empire
any_sponsored_inspiration = {
count >= 3
}
}
add = -50
}
else_if = {
limit = {
highest_held_title_tier >= tier_kingdom
any_sponsored_inspiration = {
count >= 2
}
}
add = -50
}
}
}
# Do not pointlessly fund inspirations you do not need
modifier = { # Weapons
factor = 0
scope:recipient.inspiration = {
has_inspiration_type = weapon_inspiration
}
OR = {
any_character_artifact = { # Has a fantastic item already
artifact_slot_type = primary_armament
rarity = illustrious
}
AND = { # Have a lot of artifacts already, and the inspired person isn't even very good
scope:recipient = {
weapon_inspiration_average_skill_value < 15
}
any_character_artifact = {
count >= 2
artifact_slot_type = primary_armament
}
}
}
}
modifier = { # Armor
factor = 0
scope:recipient.inspiration = {
has_inspiration_type = armor_inspiration
}
OR = {
any_character_artifact = { # Has a fantastic item already
artifact_slot_type = armor
rarity = illustrious
}
AND = { # Have a lot of artifacts already, and the inspired person isn't even very good
scope:recipient = {
armor_inspiration_average_skill_value < 15
}
any_character_artifact = {
count >= 2
artifact_slot_type = armor
}
}
}
}
modifier = { # Warlike AI's only sponsor if they've been at peace for a long time
factor = 0
ai_has_warlike_personality = yes
days_of_continuous_peace < 1825 # 5 years
}
modifier = { # Cautious AI's only sponsor if they feel safe enough
factor = 0
ai_has_cautious_personality = yes
war_chest_gold < cautious_ai_minimum_war_chest_gold
}
}
}
##################
# Indebt Guest
# by Ewan Cowhig Croft
##################
indebt_guest_interaction = {
icon = icon_hostile
interface_priority = 120
common_interaction = yes
ai_max_reply_days = 0
cooldown = { years = 5 }
category = interaction_category_hostile
ai_maybe = yes
desc = indebt_guest_interaction_desc
greeting = negative
pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED
pre_answer_no_key = ANSWER_CANT_SUCCEED
pre_answer_yes_key = ANSWER_WILL_SUCCEED
pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE
ai_potential = {
# Repeat some is_shown triggers for performance gains.
indebt_guest_interaction_basic_checks_trigger = { ACTOR = this }
}
is_shown = {
NOT = { scope:actor = scope:recipient }
# Repeat some ai_potential triggers for performance gains.
indebt_guest_interaction_basic_checks_trigger = { ACTOR = scope:actor }
# Scope:recipient must be a guest.
scope:recipient = { is_pool_guest_of = scope:actor }
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes }
scope:actor = { is_imprisoned = no }
scope:actor = { is_commanding_army = no }
# Scope:actor can't have a hook of any kind on scope:recipient already.
NOT = {
scope:actor = { has_hook = scope:recipient }
}
# Scope:actor must be able to afford the cost of the decision going wrong.
scope:actor.court_grandeur_current >= indebt_guest_interaction_lost_test_grandeur_cost_value
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
scope:actor = {
# On accept, you gain a hook & lose some opinion.
## Which we only show as a tooltip for now, since it's applied in the event.
show_as_tooltip = { indebt_guest_interaction_accepted_effect = yes }
# Pop the event.
trigger_event = ep1_character_interaction.0001
# Reminder that you'll have a chance to direct where they go.
custom_tooltip = indebt_guest_interaction.tt.direct_indebted_guest
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_indebt_guest.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_decline = {
# Send a toast.
scope:actor = {
send_interface_toast = {
type = event_toast_effect_bad
title = indebt_guest_interaction.tt.failure
left_icon = scope:recipient
# On decline, scope:recipient leaves your court...
scope:recipient = { select_and_move_to_pool_effect = yes }
# ... and you lose a bit of extra grandeur for your audacity.
change_current_court_grandeur = indebt_guest_interaction_lost_test_grandeur_cost_value
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_indebt_guest_failure.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = no
ai_accept = {
base = 50
# Standard intrigue duel.
modifier = {
add = {
value = scope:actor.intrigue
multiply = 2
}
desc = INDEBT_GUEST_INTRIGUE_ACTOR
}
modifier = {
add = {
value = scope:recipient.intrigue
multiply = -1
}
desc = INDEBT_GUEST_INTRIGUE_RECIPIENT
}
# Weight it a bit more in your favour for every point of excess CGV you have.
modifier = {
add = scope:actor.current_cgv_above_expected_exact_value
desc = INDEBT_GUEST_CURRENT_CGV_ABOVE_EXPECTED
scope:actor.current_cgv_above_expected_exact_value >= 1
}
# Some traits may also affect the chances for scope:actor...
modifier = {
add = 10
scope:actor = { has_trait = schemer }
}
modifier = {
add = 10
scope:actor = { has_trait = education_intrigue }
}
modifier = {
add = 5
scope:actor = { has_trait = deceitful }
}
modifier = {
add = 5
scope:actor = { has_trait = vengeful }
}
modifier = {
add = -10
scope:actor = { has_trait = honest }
}
modifier = {
add = -5
scope:actor = { has_trait = forgiving }
}
# ... or else for scope:recipient.
modifier = {
add = -10
scope:recipient = { has_trait = schemer }
}
modifier = {
add = -5
scope:recipient = { has_trait = education_intrigue }
}
modifier = {
add = -5
scope:recipient = { has_trait = deceitful }
}
modifier = {
add = 10
scope:recipient = { has_trait = honest }
}
}
# AI
ai_targets = {
ai_recipients = guests
chance = 0.5
}
ai_frequency = 10
ai_will_do = {
base = -100
# This is a silly way for the AI to spend its CGV, so we keep 'em off it most of the time.
# Unless they've got a scheme on the go at their nemesis' court...
modifier = {
add = 100
scope:actor = {
any_relation = {
type = nemesis
count >= 1
}
any_scheme = {
count >= 1
scheme_target_character = {
any_relation = {
type = nemesis
count >= 1
this = scope:actor
}
}
}
}
}
# ... *and* they're likely to win due to having higher intrigue, but without scope:recipient being too terrible.
modifier = {
add = 25
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= high_skill_rating }
}
modifier = {
add = 25
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= very_high_skill_rating }
}
modifier = {
add = 50
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= extremely_high_skill_rating }
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,110 +0,0 @@
find_suitable_accolade_successor_interaction = {
desc = find_suitable_accolade_successor_interaction_desc
icon = icon_combat
cooldown = { days = 730 }
hidden = yes # we use this via the accolade view only
is_shown = {
has_dlc_feature = accolades
}
is_valid_showing_failures_only = {
scope:recipient = {
accolade ?= {
NOT = { exists = accolade_successor }
has_potential_accolade_successors = no
NOT = {
primary_type = {
this = accolade_type:house_knight_attribute
}
}
}
}
scope:actor = {
highest_held_title_tier >= tier_county
}
scope:actor = {
NOT = { government_has_flag = government_is_theocracy }
}
}
on_accept = {
custom_tooltip = find_suitable_accolade_successor_interaction.tt
scope:actor = {
save_scope_as = accolade_owner
}
scope:recipient = {
save_scope_as = knight_in_need
}
scope:recipient.accolade = {
save_scope_as = accolade_in_need
}
scope:actor = {
if = {
limit = {
is_ai = yes
}
trigger_event = {
id = accolade.0006
}
}
else = {
trigger_event = {
id = accolade.0006
days = { 60 180 }
}
}
}
}
auto_accept = yes
cost = {
prestige = {
value = 75
if = {
limit = {
scope:actor = {
highest_held_title_tier >= tier_empire
}
}
add = 100
}
else_if = {
limit = {
scope:actor = {
highest_held_title_tier = tier_kingdom
}
}
add = 50
}
else_if = {
limit = {
scope:actor = {
highest_held_title_tier = tier_duchy
}
}
add = 25
}
}
}
ai_targets = {
ai_recipients = courtiers
ai_recipients = vassals
}
ai_frequency = 36
ai_will_do = {
base = 100
}
ai_potential = {
highest_held_title_tier >= tier_county
has_dlc_feature = accolades
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,114 +0,0 @@

make_noble_family_interaction = {
category = interaction_debug_admin
common_interaction = no
icon = powerful_family_shield
is_shown = {
debug_only = yes
scope:recipient = {
liege = scope:actor
is_ruler = no
}
}
auto_accept = yes
on_accept = {
scope:recipient = { create_noble_family_effect = yes }
}
}
destroy_noble_family_interaction = {
category = interaction_debug_admin
common_interaction = no
icon = icon_cross
is_shown = {
debug_only = yes
scope:recipient = {
liege = scope:actor
any_held_title = {
is_noble_family_title = yes
}
}
}
auto_accept = yes
on_accept = {
scope:recipient = {
random_held_title = {
limit = {
is_noble_family_title = yes
}
save_scope_as = title_to_destroy
scope:recipient = {
destroy_title = scope:title_to_destroy
}
}
}
}
}
invest_appointment_interaction = {
category = interaction_debug_admin
common_interaction = yes
icon = byzantine_crown_positive
target_type = title
target_filter = actor_domain_titles
is_shown = {
debug_only = yes
scope:recipient = {
government_has_flag = government_is_administrative
liege = scope:actor
}
}
auto_accept = yes
on_accept = {
scope:target = {
change_appointment_investment = {
target = scope:recipient
value = 20
}
}
}
}
transfer_title_army_maa_interaction = {
category = interaction_debug_admin
target_type = title
target_filter = actor_domain_titles
icon = request_maa_interaction
auto_accept = yes
is_shown = {
debug_only = yes
scope:recipient = {
government_has_flag = government_is_administrative
}
scope:actor = {
government_has_flag = government_is_administrative
}
scope:actor != scope:recipient
}
on_accept = {
scope:actor = {
every_maa_regiment = {
limit = {
regiment_owning_title = scope:target
}
transfer_title_maa = scope:recipient.primary_title
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -18,6 +18,16 @@
<triggers>
}
### Brief: can_construct_potential ( trigger )
# Is the scoped owner able to consider constructing this building?
#
# Supported scopes:
# root ( Character )
#
can_construct_potential = {
<triggers>
}
### Brief: on_start/on_cancelled/on_completed ( effect )
# Effects fired when construction begins, is cancelled or finishes.
#
@ -100,6 +110,16 @@
<scripted_cost>
}
### Brief: refund ( optional scripted cost )
# How much do you get by refunding this building?
# Note: If not entered, will use cost directly as fallback
#
# Ex: { gold = 500, prestige = 100 }
#
refund = {
<scripted_cost>
}
### Brief: character_modifier ( modifiers )
# Modifiers applied to the Domicile owner of this building.
# Ex: { county_opinion_add = 2, stress_loss_mult = 0.15 }
@ -113,6 +133,13 @@
<modifier>
}
### Brief: province_modifier ( modifiers )
# Modifiers applied to the Province this building is in.
# Ex: { stationed_camel_cavalry_damage_mult = high_maa_damage_tier_6 }
province_modifier = {
<modifier>
}
### Brief: ai_value ( script value )
# How desirable is the building for the AI. Evaluated alongside
# regular buildings.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,978 @@
japanese_manor = {
allowed_for_character = {
any_held_title = {
is_noble_family_title = yes
}
}
rename_window = house
illustration = "gfx/interface/illustrations/event_scenes/tgp_asia_estate.dds"
icon = "gfx/interface/icons/flat_icons/domicile_japan.dds"
map_pin_texture = "gfx/interface/icons/map_icons/map_icon_japanese_manor.dds"
map_pin_anchor = up
map_pin_lobby = yes
can_move_manually = yes
move_cooldown = { days = japanese_manor_move_cooldown_value }
move_cost = {
gold = {
value = {
value = 20
format = "BASE_VALUE_FORMAT"
desc = "BASE_VALUE"
}
domicile ?= {
switch = {
trigger = has_domicile_building_or_higher
japanese_manor_main_03 = { add = 40 }
japanese_manor_main_02 = { add = 20 }
japanese_manor_main_04 = { add = 60 }
japanese_manor_main_05 = { add = 80 }
}
}
}
}
base_external_slots = 2
domicile_building_slots = {
external_slot_1 = {
position = { 19.7% 5.5% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_01.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_01_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_01.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_01_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_05_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
external_slot_4 = {
position = { 52.3% 3% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_04_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_04_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_jungle_empty_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_05_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_03_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_03_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_03_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
main_slot = {
slot_type = main
position = { 29.7% 14.2% }
size = { 28% 34.5% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_01.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_01_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_01.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_01_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = hills
terrain = mountains
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_grain_fields_byzantine_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_manor_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_manor_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_manor_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_manor_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_manor_construction_byzantine_mask.png"
}
}
external_slot_2 = {
position = { 4.5% 20% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_02.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_02_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_02.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_02_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_jungle_empty_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_06_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_06_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_06_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_06_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
external_slot_3 = {
position = { 13.5% 45% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_03_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_03_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_jungle_empty_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_04_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_04_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_04_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty_04.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_04_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
external_slot_5 = {
position = { 64% 29% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_05_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_05_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_jungle_empty_03.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_03_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_05_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
terrain = terraced_hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty_02.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_02_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty_02.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_02_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
external_slot_6 = {
position = { 39% 47% }
size = { 15% 30% }
# Empty slot in city
empty_slot_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/asian_empty_slot_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/asian_empty_slot_06_mask.png"
}
# Empty slot
empty_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/yurt_empty_slot_06.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_06_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_jungle_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_jungle_empty_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_drylands_empty_02.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_drylands_empty_02_mask.png"
}
empty_slot_asset = {
trigger = {
domicile_location = {
OR = {
terrain = mountains
terrain = hills
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_rough_empty_05.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_rough_empty_05_mask.png"
}
empty_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_grassland_empty.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_grassland_empty_mask.png"
}
# Under Construction
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_mena_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_mena.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_mena_mask.png"
}
construction_slot_asset = {
trigger = {
domicile_location.culture = {
has_graphical_western_culture_group_trigger = yes
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_western.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_western_mask.png"
}
construction_slot_asset = {
trigger = {
owner.culture = {
OR = {
has_graphical_chinese_culture_group_trigger = yes
has_graphical_japanese_culture_group_trigger = yes
}
}
}
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_chinese.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_chinese_mask.png"
}
construction_slot_asset = {
icon = "gfx/interface/icons/flat_icons/plus.dds"
texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine.dds"
intersectionmask_texture = "gfx/interface/window_domiciles/estate_building_construction_byzantine_mask.png"
}
}
}
# Backgrounds
domicile_asset = {
trigger = {
domicile_location = {
this = root.owner.top_liege.capital_province
}
}
background = "gfx/interface/window_domiciles/asian_domicile_background_urban_terrain.dds"
foreground = "gfx/interface/window_domiciles/asian_domicile_background_urban_terrain_foreground.dds"
ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_byzantine_urban"
}
domicile_asset = {
trigger = {
domicile_location.culture = {
has_graphical_east_asia_culture_group_trigger = yes
}
}
background = "gfx/interface/window_domiciles/estate_background_steppe_terrain.dds"
foreground = "gfx/interface/window_domiciles/estate_background_steppe_terrain_foreground.dds"
ambience = "event:/DLC/CE2/Ambience/2D/Domicile/ce2_amb_2d_domicile_yurt"
}
domicile_asset = {
trigger = {
domicile_location = {
OR = {
terrain = jungle
terrain = wetlands
terrain = floodplains
}
}
}
background = "gfx/interface/window_domiciles/estate_background_jungle_terrain.dds"
foreground = "gfx/interface/window_domiciles/estate_background_jungle_terrain_foreground.dds"
ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_wetlands"
}
domicile_asset = {
trigger = {
domicile_location = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = steppe
}
}
}
background = "gfx/interface/window_domiciles/estate_background_dry_terrain.dds"
foreground = "gfx/interface/window_domiciles/estate_background_dry_terrain_foreground.dds"
ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_dry_lands"
}
domicile_asset = {
trigger = {
domicile_location = {
OR = {
terrain = hills
terrain = mountains
terrain = terraced_hills
}
}
}
background = "gfx/interface/window_domiciles/estate_background_rough_terrain.dds"
foreground = "gfx/interface/window_domiciles/estate_background_rough_terrain_foreground.dds"
ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_rough_lands"
}
domicile_asset = {
background = "gfx/interface/window_domiciles/estate_background_green_terrain.dds"
foreground = "gfx/interface/window_domiciles/estate_background_green_terrain_foreground.dds"
ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_green_lands"
}
}

View file

@ -29,6 +29,22 @@
# Domiciles that use provisions travel to a new location, otherwise it's moved instantly
provisions = no
# Is this domicile allowed to travel?
travel = no
# Does this domicile manage the herd resource
herd = no
# Does this domicile store a culture and faith? (default: no)
culture_and_faith = no
# Should this domicile also move when you move your realm capital? (default: no)
move_with_realm_capital = no
# Can you move this domicile without bespoke features?
#
can_move_manually = yes
# After moving the domicile, how many days before you can move again?
# days/weeks/months/years = X
move_cooldown = { days = 7 }

View file

@ -53,6 +53,9 @@ republic_government = {
inherit_from_dynastic_government = no
noble_families = yes
treasury = yes
administrative = yes
replace_gold_cost_by_treasury = yes
admin_allows_holding_multiple_primary_tier_titles = yes
}
ai = {
@ -68,6 +71,8 @@ republic_government = {
# Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player).
flags = {
government_is_special_republic
government_is_special_administrative
government_is_administrative
government_is_settled
government_uses_domain_limit
government_uses_domicile_but_not_adventurer
@ -406,6 +411,7 @@ administrative_government = {
dynasty_named_realms = no
landless_playable = yes
legitimacy = yes
administrative = yes
use_as_base_on_landed = yes
use_as_base_on_rank_up = yes
inherit_from_dynastic_government = no
@ -838,6 +844,7 @@ mandala_government = {
can_get_government = {
has_tgp_dlc_trigger = yes
always = no
OR = {
liege = { has_government = mandala_government }
highest_held_title_tier > tier_barony
@ -1175,6 +1182,7 @@ meritocratic_government = { # e.g. Korea, Dai Viet
can_get_government = {
has_tgp_dlc_trigger = yes
always = no
}
# Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player).

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -4,12 +4,29 @@
subject_contract = {
uses_opinion_of_liege = yes/no # if set to yes, scope:opinion_of_liege can be used in the levies and tax script math (it's a value that's updated daily for player contracts, for AI it uses NSubjectContract::OPINION_OF_LIEGE_UPDATE_INTERVAL. No by default for performance reasons.
display_mode = tree/list/radiobutton # How are the obligations displayed in the negotiate contract UI, default is radiobutton
is_shown = trigger to determine whether this obligation should be shown or not, uses the same scopes as obligation_levels
display_mode = tree/radiobutton/checkbox/hidden # How are the obligations displayed in the negotiate contract UI, default is radiobutton
# If this contract obligation should default to the (in score) level, instead to a specific one
# Default: no
defaults_to_highest_valid_level = yes/no
# Trigger that checks whether this option can be modified. Blockers will be shown in the tooltip and the option won't be clickable, but it will still be visible.
# Scope support:
# liege
# subject / vassal (for backward compatibility)
# tax_slot
# tax_collector
# opinion_of_liege = current opinion of the liege towards the subject, if uses opinion_of_liege is set to yes
#
can_be_changed = {
}
# Modifiable contract with multiple levels:
obligation_levels = {
# Scopes available:
# scope:liege the liege in the contract
# scope:liege the liege or suzerain in the contract
# scope:subject the subject in the contract
# scope:vassal the subject in the contract. Same as scope:subject. Kept in for backwards compatability.
# scope:opinion_of_liege set if uses_opinion_of_liege = yes
@ -17,19 +34,21 @@ subject_contract = {
# scope:tax_collector the collector for the above/the potential new collector
subject_obligation_low = { # choose a key for the level, it will be used for localization
levies = 0.5 # % of levies (0..1), default 0; can also use script math
tax = 0.2 # % of gold income (0..1), default 0; Can also use script math
herd = 0.2 # % of herd income (0..1), default 0; Can also use script math
min_levies = 0.1 # Optional min floor on levies. Can also use script math
min_tax = 0.0 # Optional min floor on tax. Can also use script math
min_herd = 0.0 # Optional min floor on herd. Can also use script math
levies = 0.5 # % of levies (0..1), default 0; can also use script math
tax = 0.2 # % of gold income (0..1), default 0; Can also use script math
herd = 0.2 # % of herd income (0..1), default 0; Can also use script math
barter_goods = 0.2 # % of barter goods income (0..1), default 0; Can also use script math
min_levies = 0.1 # Optional min floor on levies. Can also use script math
min_tax = 0.0 # Optional min floor on tax. Can also use script math
min_herd = 0.0 # Optional min floor on herd. Can also use script math
min_barter_goods = 0.0 # Optional min floor on barter goods. Can also use script math
contribution_desc = { ... } # Optional dynamic description used for the breakdown of the tax, levies and herd contribution
tax_contribution_postfix = "..." # Optional postfix added to the tax contribution breakdown
levies_contribution_postfix = "..." # Optional postfix added to the levies contribution breakdown
herd_contribution_postfix = "..." # Optional postfix added to the herd contribution breakdown
unclamped_contribution_label = "..." # Breakdown label for the unclamped tax/levies/herd contribution
min_contribution_label = "..." # Breakdown label for the minimum tax/levies/herd contribution the value is clamped to
@ -37,6 +56,8 @@ subject_contract = {
flag = token # Arbitrary flag, can be checked in script to see if any obligation level in the current subject contract has a flag
gui_tags = { tag_1 tag_2 ... } # List of gui tags, used to set size, color etc in gui views
score = int # Positive means it is better for the subject to have, 0 means neutral, negative is better for liege
# When changing obligations the current score and new score are compared to see if it is in favour of the subject or liege
# and by how much.
@ -48,12 +69,25 @@ subject_contract = {
liege_modifier = { <character modifiers> } # Modifiers applied to the liege in the contract
subject_modifier = { <character modifiers> } # Modifiers applied to the subject in the contract
is_shown = { <trigger> } # Is this obligation level visible for a subject (invisible levels are also not valid)
is_valid = { <trigger> } # Is this obligation level valid for a subject
# Multiplier against the total tax/levies in a contract, be careful you do not get weird stacking beavhour if multiple are on at once
# Can disable men at arms based on the title or the governor for the contract
# (Requires government to have the 'administrative' rule too)
# Default: yes - if defined in multiple obligations, will take first obligation in contract group
enable_title_maa = yes/no
# Can disable character men at arms
# Default: yes - if defined in multiple obligations, will take first obligation in contract group
enable_character_maa = yes/no
# Multiplier against the total tax/levies in a contract, be careful you do not get weird stacking behavior if multiple are on at once
tax_factor = <script value fixed point>
levies_factor = <script value fixed point>
herd_factor = <script value fixed point>
# Used in meritocratic appointment succession
# heir and candidate must have a trait with this flag in order to be eligible heir for the title
appointment_trait_flag = some_trait_flag
}
subject_obligation_normal = {
default = yes # mark a level as default (otherwise the first will be the default)

View file

@ -7,7 +7,7 @@
}
tax = {
value = 0.1
value = 0.75
#multiply = governor_efficiency
}
}
@ -20,12 +20,13 @@
administrative_themes = {
display_mode = radiobutton
is_shown = {
scope:subject.primary_title.tier >= tier_county
scope:subject.primary_title.tier >= tier_duchy
}
obligation_levels = {
admin_theme_balanced = {
default = yes
position = { 0 0 }
gui_tags = { byzantine_purple }
icon = "gfx/interface/icons/theme_administration_types/icon_balanced_administration.dds"
ai_liege_desire = {
@ -53,6 +54,7 @@ administrative_themes = {
admin_theme_civilian = {
position = { 2 0 }
icon = "gfx/interface/icons/theme_administration_types/icon_civilian_administration.dds"
gui_tags = { byzantine_purple }
ai_liege_desire = {
value = 0
@ -75,7 +77,7 @@ administrative_themes = {
if = {
limit = {
scope:liege = {
ai_has_economical_boom_personality = yes
ai_has_builder_or_pious_builder_personality = yes
}
}
add = 1
@ -105,6 +107,7 @@ administrative_themes = {
admin_theme_military = {
position = { 1 0 }
icon = "gfx/interface/icons/theme_administration_types/icon_military_administration.dds"
gui_tags = { byzantine_purple }
ai_liege_desire = {
value = 0
@ -139,7 +142,6 @@ administrative_themes = {
score = 0
color = { 0.7 0.2 0.2 1.0 }
tax_factor = -0.75
levies_factor = 0.75
subject_modifier = {
@ -148,6 +150,7 @@ administrative_themes = {
maa_damage_mult = 0.1
men_at_arms_title_cap = 2
men_at_arms_maintenance = -0.2
monthly_treasury_from_military_budget_base = 1
}
flag = admin_martial_obligation_bonus
@ -157,6 +160,7 @@ administrative_themes = {
admin_theme_frontier = {
position = { 0 1 }
icon = "gfx/interface/icons/theme_administration_types/icon_frontier_administration.dds"
gui_tags = { byzantine_purple }
ai_liege_desire = {
value = 0
@ -181,7 +185,7 @@ administrative_themes = {
any_sub_realm_county = {
any_neighboring_county = {
holder = {
NOT = { top_liege = scope:subject.top_liege }
top_liege != scope:subject.top_liege
}
}
}
@ -189,7 +193,7 @@ administrative_themes = {
}
}
tax_factor = -0.4
tax_factor = -0.2
subject_modifier = {
fort_level = 2
@ -200,6 +204,7 @@ administrative_themes = {
# Values to tweak the AI slightly in order to make them more likely to declare war
ai_boldness = 20
ai_rationality = -15
monthly_treasury_from_military_budget_base = 1.5
}
flag = admin_prowess_obligation_bonus
@ -211,6 +216,7 @@ administrative_themes = {
admin_theme_imperial = {
position = { 1 1 }
icon = "gfx/interface/icons/theme_administration_types/icon_imperial_administration.dds"
gui_tags = { byzantine_purple }
ai_liege_desire = {
value = 0
@ -288,6 +294,7 @@ administrative_themes = {
admin_theme_naval = {
position = { 2 1 }
icon = "gfx/interface/icons/theme_administration_types/icon_naval_administration.dds"
gui_tags = { byzantine_purple }
ai_liege_desire = {
value = 0
@ -354,8 +361,6 @@ administrative_themes = {
}
}
tax_factor = -0.2
liege_modifier = {
embarkation_cost_mult = -0.1
naval_movement_speed_mult = 0.1
@ -367,6 +372,7 @@ administrative_themes = {
no_disembark_penalty = yes
coastal_advantage = 10
development_growth_factor = 0.1
monthly_treasury_from_military_budget_base = 1
}
flag = admin_naval_duchy_expansion_unlocked
@ -375,3 +381,76 @@ administrative_themes = {
}
}
}
administrative_salary_rank = {
display_mode = hidden
defaults_to_highest_valid_level = yes
can_be_changed = {
always = no
}
obligation_levels = {
administrative_salary_rank_none = {
position = { 0 0 }
default = yes
ai_liege_desire = 0
ai_subject_desire = 0
}
administrative_salary_rank_duchy = {
position = { 2 0 }
parent = administrative_salary_rank_none
is_valid = {
scope:subject = {
highest_held_title_tier = tier_duchy
}
}
ai_liege_desire = 3
ai_subject_desire = 3
subject_modifier = {
monthly_treasury_from_salary_budget_base = 0.75
}
}
administrative_salary_rank_kingdom = {
position = { 3 0 }
parent = administrative_salary_rank_duchy
is_valid = {
scope:subject = {
highest_held_title_tier = tier_kingdom
}
}
ai_liege_desire = 4
ai_subject_desire = 4
subject_modifier = {
monthly_treasury_from_salary_budget_base = 1.0
}
}
administrative_salary_rank_empire = {
position = { 4 0 }
parent = administrative_salary_rank_kingdom
ai_liege_desire = 5
ai_subject_desire = 5
is_valid = {
scope:subject = {
highest_held_title_tier = tier_empire
is_landless_ruler = no
}
}
subject_modifier = {
monthly_treasury_from_salary_budget_base = 2.0
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,299 @@
japan_administrative_obligations = {
obligation_levels = {
default = {
levies = {
value = 0.1
}
tax = {
value = 0.1
}
}
}
}
### brief: administrative_themes
# This is referenced in code.
#
japan_administrative_provinces = {
display_mode = radiobutton
is_shown = {
scope:subject.primary_title.tier >= tier_county
}
obligation_levels = {
japan_administrative_province_standard = {
default = yes
position = { 0 0 }
icon = "gfx/interface/icons/celestial_administration_types/icon_standard_administration.dds"
gui_tags = { civilian }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = { is_ai = yes }
}
add = 1
# Cautious AI should tend to have a minor bias towards the default
if = {
limit = {
scope:liege = { ai_has_cautious_personality = yes }
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.7 0.7 0.7 1.0 }
enable_title_maa = no
flag = japan_administrative_province_standard
}
japan_administrative_province_trade = {
position = { 1 0 }
icon = "gfx/interface/icons/celestial_administration_types/icon_industrial_administration.dds"
gui_tags = { civilian }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = {
is_ai = yes
OR = {
has_trait = education_stewardship
stewardship >= very_high_skill_rating
}
}
}
add = 2
# Economical AI wants more of civic vassals
if = {
limit = {
scope:liege = { ai_has_builder_or_pious_builder_personality = yes }
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.2 0.2 0.7 1.0 }
is_valid = {
trigger_if = {
limit = { exists = this }
# Only for direct vassals of the top liege
scope:liege.top_liege = this
}
# There can only be a limited number of industries at a time
custom_tooltip = {
text = japan_administrative_province_trade_amount_desc
OR = {
scope:liege = {
any_vassal = {
count < japan_administrative_province_trade_max_value
vassal_contract_has_flag = japan_administrative_province_trade
}
}
scope:subject = {
OR = {
vassal_contract_has_flag = japan_administrative_province_trade
any_sub_realm_county = { is_coastal_county = yes } # Is a coastal province
}
}
}
}
}
tax_factor = 0.25
enable_title_maa = no
subject_modifier = {
development_growth_factor = 0.15
build_gold_cost = -0.1
build_speed = -0.2
}
flag = admin_ai_is_builder
flag = japan_administrative_province_trade
flag = obligation_high_taxes
}
japan_administrative_province_military = {
position = { 0 1 }
icon = "gfx/interface/icons/celestial_administration_types/icon_military_administration.dds"
gui_tags = { military }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = {
is_ai = yes
OR = {
has_trait = education_martial
martial >= very_high_skill_rating
primary_title = {
any_owned_title_maa_regiment = { count >= 3 }
}
any_sub_realm_county = { # Is a border province
any_neighboring_county = { holder.top_liege != scope:subject.top_liege }
}
}
}
}
add = 2
# Preference for vassals along the border
if = {
limit = {
scope:subject = {
any_sub_realm_county = {
any_neighboring_county = { holder.top_liege != scope:subject.top_liege }
}
}
}
add = 3
}
# Warlike AI wants more military vassals
if = {
limit = {
scope:liege = { ai_has_warlike_personality = yes }
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.7 0.2 0.2 1.0 }
is_valid = {
trigger_if = {
limit = { exists = this }
# Only for direct vassals of the top liege
scope:liege.top_liege = this
}
# There can only be a limited number of militaries at a time
custom_tooltip = {
text = japan_administrative_province_military_amount_desc
OR = {
scope:liege = {
any_vassal = {
count < japan_administrative_province_military_max_value
vassal_contract_has_flag = japan_administrative_province_military
}
}
scope:subject = { vassal_contract_has_flag = japan_administrative_province_military }
}
}
}
levies_factor = 0.5
subject_modifier = {
development_growth_factor = -0.2
monthly_county_control_growth_factor = 0.1
fort_level = 1
defender_advantage = 2
men_at_arms_maintenance = -0.15
}
flag = japan_administrative_province_military
flag = japan_administrative_military_appointment
flag = obligation_high_levies
}
}
}
japan_administrative_salary = {
display_mode = tree
is_shown = {
scope:subject.primary_title.tier >= tier_duchy
}
obligation_levels = {
salary_very_low = {
position = { 0 2 }
subject_modifier = {
subject_salary_expense_treasury_mult = -0.5
subject_salary_income_gold_mult = -0.5
}
ai_liege_desire = 1
ai_subject_desire = 5
subject_opinion = -25
score = -2
}
salary_low = {
parent = salary_very_low
position = { 1 2 }
subject_modifier = {
subject_salary_income_gold_mult = -0.25
}
ai_liege_desire = 2
ai_subject_desire = 4
subject_opinion = -15
score = 1
}
salary_medium = {
parent = salary_low
default = yes
position = { 2 2 }
subject_modifier = {
}
ai_liege_desire = 3
ai_subject_desire = 3
score = 0
}
salary_high = {
parent = salary_medium
position = { 3 2 }
subject_modifier = {
subject_salary_income_gold_mult = 0.25
}
ai_liege_desire = 4
ai_subject_desire = 2
subject_opinion = 5
score = 1
}
salary_very_high = {
parent = salary_high
position = { 4 2 }
subject_modifier = {
subject_salary_income_gold_mult = 0.5
}
ai_liege_desire = 5
ai_subject_desire = 1
subject_opinion = 10
score = 2
}
}
}

View file

@ -0,0 +1,255 @@
mandala_government_piety = {
display_mode = tree
icon = religious_icon
obligation_levels = {
mandala_piety_low = {
position = { 0 0 }
piety = 0.05
ai_liege_desire = 1
ai_subject_desire = 5
score = 1
flag = obligation_piety_low
}
mandala_piety_normal = {
parent = mandala_piety_low
position = { 1 0 }
default = yes
piety = 0.10
subject_opinion = -10
ai_liege_desire = 5
ai_subject_desire = 3
score = 0
flag = obligation_piety_normal
}
mandala_piety_high = {
parent = mandala_piety_normal
position = { 2 0 }
piety = 0.15
subject_opinion = -25
ai_liege_desire = 7
ai_subject_desire = 1
score = -1
flag = obligation_piety_high
}
}
}
mandala_government_taxes = {
display_mode = tree
icon = gold_icon
obligation_levels = {
mandala_tax_exempt = {
position = { 0 0 }
tax = exempt_feudal_tax
subject_opinion = 10
ai_liege_desire = 1
ai_subject_desire = 5
score = 2
flag = obligation_tax_exempt
}
mandala_tax_low = {
parent = mandala_tax_exempt
position = { 1 0 }
tax = low_feudal_tax
subject_opinion = 5
ai_liege_desire = {
value = 2
if = {
limit = {
scope:liege = {
ai_should_focus_on_building_in_their_capital = yes
}
}
add = 8
}
}
ai_subject_desire = 4
score = 1
flag = obligation_tax_low
}
mandala_tax_normal = {
default = yes
parent = mandala_tax_low
position = { 2 0 }
tax = normal_feudal_tax
ai_liege_desire = {
value = 3
if = {
limit = {
scope:liege = {
ai_should_focus_on_building_in_their_capital = yes
}
}
add = 7
}
}
ai_subject_desire = 3
score = 0
flag = obligation_tax_normal
}
mandala_tax_high = {
parent = mandala_tax_normal
position = { 3 0 }
tax = high_feudal_tax
subject_opinion = -15
ai_liege_desire = {
value = 4
if = {
limit = {
scope:liege = {
ai_should_focus_on_building_in_their_capital = yes
}
}
add = 6
}
}
ai_subject_desire = 2
score = -1
flag = obligation_tax_high
}
mandala_tax_extortionate = {
parent = mandala_tax_high
position = { 4 0 }
tax = extortionate_feudal_tax
subject_opinion = -25
ai_liege_desire = {
value = 5
if = {
limit = {
scope:liege = {
ai_should_focus_on_building_in_their_capital = yes
}
}
add = 5
}
}
ai_subject_desire = 1
score = -2
flag = obligation_tax_extortionate
}
}
}
mandala_government_levies = {
display_mode = tree
icon = soldier_icon
obligation_levels = {
mandala_levies_exempt = {
position = { 0 0 }
levies = 0
subject_opinion = 10
ai_liege_desire = 1
ai_subject_desire = 5
score = 2
flag = obligation_levies_exempt
}
mandala_levies_low = {
default = yes
parent = mandala_levies_exempt
position = { 1 0 }
levies = 0.1
subject_opinion = 5
ai_liege_desire = 2
ai_subject_desire = 4
score = 1
flag = obligation_levies_low
}
mandala_levies_medium = {
parent = mandala_levies_low
position = { 2 0 }
levies = 0.25
ai_liege_desire = 3
ai_subject_desire = 3
score = 0
flag = obligation_levies_medium
}
mandala_levies_high = {
parent = mandala_levies_medium
position = { 3 0 }
levies = 0.35
subject_opinion = -15
ai_liege_desire = 4
ai_subject_desire = 2
score = -1
flag = obligation_levies_high
}
mandala_levies_extortionate = {
parent = mandala_levies_high
position = { 4 0 }
levies = 0.5
subject_opinion = -25
ai_liege_desire = 5
ai_subject_desire = 1
score = -2
flag = obligation_levies_extortionate
}
}
}
mandala_government_prestige = {
display_mode = tree
icon = prestige_icon
obligation_levels = {
mandala_prestige_low = {
position = { 0 0 }
prestige = 0.05
ai_liege_desire = 1
ai_subject_desire = 5
score = 1
flag = obligation_prestige_low
}
mandala_prestige_normal = {
default = yes
parent = mandala_prestige_low
position = { 1 0 }
prestige = 0.1
subject_opinion = -10
ai_liege_desire = 5
ai_subject_desire = 3
score = 0
flag = obligation_prestige_normal
}
mandala_prestige_high = {
parent = mandala_prestige_normal
position = { 2 0 }
prestige = 0.25
subject_opinion = -25
ai_liege_desire = 7
ai_subject_desire = 1
score = -1
flag = obligation_prestige_high
}
}
}

View file

@ -0,0 +1,618 @@
meritocratic_obligations = {
obligation_levels = {
default = {
levies = {
value = 0.3
}
tax = {
value = 0.75
}
}
}
}
### brief: administrative_themes
# This is referenced in code.
#
meritocratic_provinces = {
display_mode = radiobutton
is_shown = {
scope:subject.primary_title.tier >= tier_duchy
}
obligation_levels = {
meritocratic_province_standard = {
default = yes
position = { 0 0 }
icon = "gfx/interface/icons/celestial_administration_types/icon_standard_administration.dds"
gui_tags = { civilian }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = {
is_ai = yes
}
}
add = 1
# Cautious AI should tend to have a minor bias towards the default
if = {
limit = {
scope:liege = {
ai_has_cautious_personality = yes
}
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.7 0.7 0.7 1.0 }
enable_title_maa = no
subject_modifier = {
monthly_merit_per_liege_tax = 0.8
}
flag = meritocratic_province_standard
flag = meritocratic_civil_appointment
}
meritocratic_province_industrial = {
position = { 1 0 }
icon = "gfx/interface/icons/celestial_administration_types/icon_industrial_administration.dds"
gui_tags = { civilian }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = {
is_ai = yes
OR = {
has_trait = education_stewardship
stewardship >= very_high_skill_rating
}
# Avoid replacing any military types if they have title troops already
primary_title = {
any_owned_title_maa_regiment = { count < 1 }
}
}
}
add = 2
# Economical AI wants more of civic vassals
if = {
limit = {
scope:liege = { ai_has_builder_or_pious_builder_personality = yes }
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.2 0.2 0.7 1.0 }
is_valid = {
# Only for direct vassals of the top liege
scope:liege.top_liege = scope:liege
# There can only be a limited number of industries at a time
custom_tooltip = {
text = meritocratic_province_industrial_amount_desc
OR = {
scope:liege = {
any_vassal = {
count < meritocratic_province_industrial_max_value
vassal_contract_has_flag = meritocratic_province_industrial
}
}
scope:subject = { vassal_contract_has_flag = meritocratic_province_industrial }
}
}
}
tax_factor = 0.25
enable_title_maa = no
subject_modifier = {
development_growth_factor = 0.15
build_gold_cost = -0.1
build_speed = -0.2
monthly_merit_per_liege_tax = 1.2
}
flag = admin_ai_is_builder
flag = meritocratic_province_industrial
flag = meritocratic_civil_appointment
flag = obligation_high_taxes
}
meritocratic_province_military = {
position = { 0 1 }
icon = "gfx/interface/icons/celestial_administration_types/icon_military_administration.dds"
gui_tags = { military }
ai_liege_desire = {
value = 0
if = {
limit = {
scope:subject = {
is_ai = yes
OR = {
has_trait = education_martial
martial >= very_high_skill_rating
primary_title = { any_owned_title_maa_regiment = { count >= 3 } }
any_sub_realm_county = { # Is a border province
any_neighboring_county = {
holder = {
top_liege != scope:subject.top_liege
}
}
}
}
}
}
add = 2
# Preference for vassals along the border
if = {
limit = {
scope:subject = {
any_sub_realm_county = {
any_neighboring_county = {
holder = {
top_liege != scope:subject.top_liege
}
}
}
}
}
add = 3
}
# Warlike AI wants more military vassals
if = {
limit = {
scope:liege = {
ai_has_warlike_personality = yes
}
}
add = 1
}
}
}
ai_subject_desire = 0
score = 0
color = { 0.7 0.2 0.2 1.0 }
is_valid = {
# Only for direct vassals of the top liege
scope:liege = {
top_liege = this
}
# There can only be a limited number of militaries at a time
custom_tooltip = {
text = meritocratic_province_military_amount_desc
OR = {
scope:liege = {
any_vassal = {
count < meritocratic_province_military_max_value
vassal_contract_has_flag = meritocratic_province_military
}
}
scope:subject = { vassal_contract_has_flag = meritocratic_province_military }
}
}
}
levies_factor = 0.5
subject_modifier = {
development_growth_factor = -0.2
monthly_county_control_growth_factor = 0.1
additional_fort_level = 2
defender_advantage = 4
monthly_merit_per_title_maa_value = 0.024
domain_tax_mult = -0.3
monthly_treasury_from_military_budget_base = 1.0
}
flag = meritocratic_province_military
flag = meritocratic_military_appointment
flag = obligation_high_levies
}
}
}
meritocratic_treasury = {
display_mode = tree
is_shown = {
scope:subject.primary_title.tier >= tier_duchy
}
obligation_levels = {
treasury_very_low = {
position = { 0 0 }
subject_modifier = {
monthly_treasury_from_liege_mult = -0.10
}
ai_liege_desire = 1
ai_subject_desire = 5
subject_opinion = -25
score = -2
}
treasury_low = {
parent = treasury_very_low
position = { 1 0 }
subject_modifier = {
monthly_treasury_from_liege_mult = -0.05
}
ai_liege_desire = 2
ai_subject_desire = 4
subject_opinion = -15
score = -1
}
treasury_medium = {
parent = treasury_low
default = yes
position = { 2 0 }
ai_liege_desire = 3
ai_subject_desire = 3
score = 0
}
treasury_high = {
parent = treasury_medium
position = { 3 0 }
subject_modifier = {
monthly_treasury_from_liege_mult = 0.05
}
ai_liege_desire = 4
ai_subject_desire = 2
subject_opinion = 5
score = 1
}
treasury_very_high = {
parent = treasury_high
position = { 4 0 }
subject_modifier = {
monthly_treasury_from_liege_mult = 0.10
}
ai_liege_desire = 5
ai_subject_desire = 1
subject_opinion = 10
score = 2
}
}
}
meritocratic_salary = {
display_mode = tree
is_shown = {
scope:subject.primary_title.tier >= tier_duchy
}
obligation_levels = {
salary_very_low = {
position = { 0 0 }
subject_modifier = {
monthly_treasury_from_salary_budget_mult = -0.5
}
ai_liege_desire = 1
ai_subject_desire = 5
subject_opinion = -25
score = -2
}
salary_low = {
parent = salary_very_low
position = { 1 0 }
subject_modifier = {
monthly_treasury_from_salary_budget_mult = -0.25
}
ai_liege_desire = 2
ai_subject_desire = 4
subject_opinion = -15
score = 1
}
salary_medium = {
parent = salary_low
default = yes
position = { 2 0 }
subject_modifier = {
}
ai_liege_desire = 3
ai_subject_desire = 3
score = 0
}
salary_high = {
parent = salary_medium
position = { 3 0 }
subject_modifier = {
monthly_treasury_from_salary_budget_mult = 0.25
}
ai_liege_desire = 4
ai_subject_desire = 2
subject_opinion = 5
score = 1
}
salary_very_high = {
parent = salary_high
position = { 4 0 }
subject_modifier = {
monthly_treasury_from_salary_budget_mult = 0.5
}
ai_liege_desire = 5
ai_subject_desire = 1
subject_opinion = 10
score = 2
}
}
}
meritocratic_salary_rank = {
display_mode = hidden
defaults_to_highest_valid_level = yes
can_be_changed = {
always = no
}
obligation_levels = {
meritocratic_salary_rank_none = {
position = { 0 0 }
default = yes
ai_liege_desire = 0
ai_subject_desire = 0
}
meritocratic_salary_rank_county = {
position = { 1 0 }
parent = meritocratic_salary_rank_none
is_valid = {
scope:subject = {
highest_held_title_tier = tier_county
primary_title = {
is_noble_family_title = no
}
}
}
ai_liege_desire = 2
ai_subject_desire = 2
subject_modifier = {
monthly_treasury_from_salary_budget_base = 0.3
}
}
meritocratic_salary_rank_duchy = {
position = { 2 0 }
parent = meritocratic_salary_rank_county
is_valid = {
scope:subject = {
highest_held_title_tier = tier_duchy
}
}
ai_liege_desire = 3
ai_subject_desire = 3
subject_modifier = {
monthly_treasury_from_salary_budget_base = 0.75
}
}
meritocratic_salary_rank_kingdom = {
position = { 3 0 }
parent = meritocratic_salary_rank_duchy
is_valid = {
scope:subject = {
highest_held_title_tier = tier_kingdom
}
}
ai_liege_desire = 4
ai_subject_desire = 4
subject_modifier = {
monthly_treasury_from_salary_budget_base = 1.0
}
}
meritocratic_salary_rank_empire = {
position = { 4 0 }
parent = meritocratic_salary_rank_kingdom
ai_liege_desire = 5
ai_subject_desire = 5
is_valid = {
scope:subject = {
highest_held_title_tier = tier_empire
is_landless_ruler = no
}
}
subject_modifier = {
monthly_treasury_from_salary_budget_base = 2.0
}
}
}
}
meritocratic_tribute_gold = {
display_mode = tree
icon = gold_icon
obligation_levels = {
meritocratic_tributary_tax_none = {
position = { 0 0 }
tax = 0
subject_opinion = 5
subject_modifier = {
monthly_legitimacy_add = 0.1
}
ai_liege_desire = 1
ai_subject_desire = 4
score = -2
}
meritocratic_tributary_tax_low = {
default = yes
parent = meritocratic_tributary_tax_none
position = { 1 0 }
tax = low_meritocratic_tributary_tax
subject_opinion = -5
subject_modifier = {
monthly_legitimacy_add = 0.2
}
ai_liege_desire = 2
ai_subject_desire = 3
score = -1
}
meritocratic_tributary_tax_normal = {
parent = meritocratic_tributary_tax_low
position = { 2 0 }
tax = normal_meritocratic_tributary_tax
subject_opinion = -10
subject_modifier = {
monthly_legitimacy_add = 0.3
}
ai_liege_desire = 3
ai_subject_desire = 2
score = 0
}
meritocratic_tributary_tax_high = {
parent = meritocratic_tributary_tax_normal
position = { 3 0 }
tax = high_meritocratic_tributary_tax
subject_opinion = -25
subject_modifier = {
monthly_legitimacy_add = 0.5
}
ai_liege_desire = 4
ai_subject_desire = 1
score = 1
}
}
}
meritocratic_tribute_prestige = {
display_mode = tree
icon = prestige_icon
obligation_levels = {
meritocratic_prestige_transfer_none = {
position = { 0 1 }
prestige = 0
subject_opinion = 5
subject_modifier = {
monthly_legitimacy_add = 0.1
}
ai_liege_desire = 1
ai_subject_desire = 4
score = -2
}
meritocratic_prestige_transfer_low = {
default = yes
parent = meritocratic_prestige_transfer_none
position = { 1 1 }
prestige = low_meritocratic_prestige_transfer
subject_opinion = -5
subject_modifier = {
monthly_legitimacy_add = 0.2
}
ai_liege_desire = 2
ai_subject_desire = 3
score = -1
}
meritocratic_prestige_transfer_normal = {
default = yes
parent = meritocratic_prestige_transfer_low
position = { 2 1 }
prestige = normal_meritocratic_prestige_transfer
subject_opinion = -10
subject_modifier = {
monthly_legitimacy_add = 0.3
}
ai_liege_desire = 3
ai_subject_desire = 2
score = 0
}
meritocratic_prestige_transfer_high = {
parent = meritocratic_prestige_transfer_normal
position = { 3 1 }
prestige = high_meritocratic_prestige_transfer
subject_opinion = -25
subject_modifier = {
monthly_legitimacy_add = 0.5
}
ai_liege_desire = 4
ai_subject_desire = 1
score = 1
}
}
}

View file

@ -2,103 +2,102 @@
obligation_levels = {
default = {
levies = {
if = {
limit = {
primary_title.tier >= tier_county
scope:liege.culture = {
has_cultural_parameter = republican_vassals_pay_more
scope:liege = {
if = {
limit = {
scope:vassal = {
primary_title.tier >= tier_county
}
culture = {
has_cultural_parameter = republican_vassals_pay_more
}
}
value = {
add = 0.15
# Add an extra with the right perk
if = {
limit = {
dynasty ?= {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
value = {
add = 0.15
# Add an extra with the right perk
if = {
limit = {
exists = scope:liege.dynasty
scope:liege.dynasty = {
has_dynasty_perk = fp2_urbanism_legacy_3
else = {
value = {
add = 0.1
# Add an extra with the right perk
if = {
limit = {
dynasty ?= {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
add = 0.15
}
}
}
else = {
value = {
add = 0.1
# Add an extra with the right perk
if = {
limit = {
exists = scope:liege.dynasty
scope:liege.dynasty = {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
}
tax = {
if = {
limit = { scope:liege = { government_has_flag = government_is_tribal } }
value = {
add = 0.05
# Add an extra with the right perk
scope:liege = {
if = {
limit = { government_has_flag = government_is_tribal }
value = {
add = 0.05
# Add an extra with the right perk
if = {
limit = {
exists = scope:liege.dynasty
scope:liege.dynasty = {
has_dynasty_perk = fp2_urbanism_legacy_3
if = {
limit = {
dynasty ?= {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
else_if = {
limit = {
scope:subject = {
primary_title.tier >= tier_county
}
culture = {
has_cultural_parameter = republican_vassals_pay_more
}
}
value = {
add = 0.3
# Add an extra with the right perk
if = {
limit = {
dynasty ?= {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
else = {
value = {
add = 0.2
# Add an extra with the right perk
if = {
limit = {
dynasty ?= {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
add = 0.15
}
}
}
else_if = {
limit = {
scope:subject = {
primary_title.tier >= tier_county
}
scope:liege.culture = {
has_cultural_parameter = republican_vassals_pay_more
}
}
value = {
add = 0.3
# Add an extra with the right perk
if = {
limit = {
exists = scope:liege.dynasty
scope:liege.dynasty = {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
else = {
value = {
add = 0.2
# Add an extra with the right perk
if = {
limit = {
exists = scope:liege.dynasty
scope:liege.dynasty = {
has_dynasty_perk = fp2_urbanism_legacy_3
}
}
add = 0.15
}
}
}
}
contribution_desc = {
first_valid = {

View file

@ -153,7 +153,7 @@ special_contract = {
primary_title = { has_variable = historical_margrave }
any_sub_realm_county = {
any_neighboring_county = {
NOT = { holder.top_liege = scope:subject.top_liege }
holder.top_liege != scope:subject.top_liege
}
}
}
@ -295,9 +295,7 @@ special_contract = {
religious_rights = {
display_mode = checkbox
is_shown = {
NOT = {
scope:subject.faith = scope:liege.faith
}
scope:subject.faith != scope:liege.faith
OR = {
NOT = {
scope:liege.faith = {
@ -333,9 +331,7 @@ religious_rights = {
}
religious_rights_protected = {
is_valid = {
NOT = {
scope:subject.faith = scope:liege.faith
}
scope:subject.faith != scope:liege.faith
}
parent = religious_rights_none
position = { 1 0 }
@ -578,7 +574,7 @@ jizya_special_rights = {
has_doctrine = special_doctrine_jizya
}
}
NOT = { scope:subject.faith = scope:liege.faith }
scope:subject.faith != scope:liege.faith
scope:subject = {
OR = {
NOT = {
@ -608,7 +604,7 @@ jizya_special_rights = {
has_doctrine = special_doctrine_jizya
}
}
NOT = { scope:subject.faith = scope:liege.faith }
scope:subject.faith != scope:liege.faith
}
parent = jizya_special_rights_default
position = { 1 0 }
@ -804,6 +800,7 @@ suzerain_war_participation_guarantee = {
subject_opinion = 25
# flag referenced in code, do not change without approval
flag = tributary_contract_suzerain_guarantee_override
ai_liege_desire = 0
@ -813,6 +810,31 @@ suzerain_war_participation_guarantee = {
}
}
mandala_suzerain_war_participation_guarantee = {
display_mode = checkbox
obligation_levels = {
mandala_suzerain_war_participation_guarantee_none = {
position = { 0 0 }
subject_opinion = -50
ai_liege_desire = @ai_standard_liege_desire
ai_subject_desire = 0
}
mandala_suzerain_war_participation_guarantee_available = {
parent = mandala_suzerain_war_participation_guarantee_none
default = yes
position = { 1 0 }
# flag referenced in code, do not change without approval
flag = tributary_contract_suzerain_guarantee_override
ai_liege_desire = 0
ai_subject_desire = @ai_standard_vassal_desire
}
}
}
# Do not add any more levels to this, code checks only for non-default to determine behavior
tributary_war_participation_obligation = {
display_mode = checkbox
@ -837,6 +859,12 @@ tributary_war_participation_obligation = {
always = no
}
}
trigger_else_if = {
limit = {
scope:subject.suzerain ?= { government_has_flag = government_is_steppe_admin }
}
always = yes
}
trigger_else_if = {
limit = { NOT = { scope:subject = { has_relation_blood_brother = overlord } } }
custom_tooltip = {

View file

@ -3,7 +3,7 @@
default = {
levies = {
if = {
limit = { NOT = { scope:liege.faith = scope:subject.faith } }
limit = { scope:liege.faith != scope:subject.faith }
value = 0.1
}
else = {
@ -13,7 +13,7 @@
}
tax = {
if = {
limit = { NOT = { scope:liege.faith = scope:subject.faith } }
limit = { scope:liege.faith != scope:subject.faith }
value = 0.1
}
else_if = {
@ -31,7 +31,7 @@
contribution_desc = {
first_valid = {
triggered_desc = {
trigger = { NOT = { scope:liege.faith = scope:subject.faith } }
trigger = { scope:liege.faith != scope:subject.faith }
desc = "theocracy_government_vassal_contribution_wrong_faith"
}
desc = "theocracy_government_vassal_contribution_piety_level"

View file

@ -0,0 +1,75 @@
wanua_obligations = {
obligation_levels = {
default = {
levies = {
value = 0
max = 1
scope:liege = {
add = {
value = 0.1
multiply = legitimacy_level
}
}
}
tax = {
value = 0
max = 0.5
scope:liege = {
add = {
value = 0.05
multiply = legitimacy_level
}
}
}
barter_goods = {
value = 0
max = 0.5
scope:liege = {
add = {
value = 0.05
multiply = legitimacy_level
}
}
}
}
}
}
barter_goods_obligations = {
display_mode = tree
icon = barter_icon
obligation_levels = {
barter_goods_low = {
position = { 0 0 }
barter_goods = low_barter_goods_tax
ai_liege_desire = 2
ai_subject_desire = 4
score = 1
}
barter_goods_medium = {
parent = barter_goods_low
position = { 1 0 }
default = yes
barter_goods = medium_barter_goods_tax
ai_liege_desire = 3
ai_subject_desire = 3
score = 0
}
barter_goods_high = {
parent = barter_goods_medium
position = { 2 0 }
barter_goods = high_barter_goods_tax
ai_liege_desire = 4
ai_subject_desire = 2
score = -1
}
}
}

View file

@ -2,6 +2,10 @@
feudal_contract_group = {
# <optional> Which contract within this group is the administrative province type contract
# This will be used in the interface
# Contract might be listed in 'contracts' list
admin_province_contract = administrative_themes
contracts = { # The subject contracts within this group
feudal_government_taxes
@ -17,7 +21,7 @@ feudal_contract_group = {
# REMAINING IS ONLY FOR TRIBUTARY CONTRACTS
# #########################################
is_tributary = no # Whether or not this subject contract is specifically for tributaries or not.
is_tributary = no # Whether or not this subject contract is specifically for tributaries or not.
# Whether or not the subject contract is valid.
# Scopes available:
@ -29,7 +33,7 @@ feudal_contract_group = {
# Same scopes as is_valid
tributary_can_break_free = {}
# The name of the line types that will be shown when drawing the tributary relation to the suzerain on the map.
# The name of the line types that will be shown when drawing the tributary relation to the suzerain on the map.
# Skip these parameters if you don't want a line at all.
# suzerain_line_type is used when showing a selected character's suzerain.
# tributary_line_type is used when showing a selected character's tributaries.

View file

@ -46,9 +46,12 @@ tribal_vassal = {
}
admin_vassal = {
admin_province_contract = administrative_themes
contracts = {
administrative_obligations
administrative_themes
administrative_salary_rank
}
modify_contract_layout = admin
}
@ -69,7 +72,7 @@ tributary_settled = {
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = yes
should_show_as_suzerain_realm_color = yes
contracts = {
default_tributary_taxes
default_tributary_levies
@ -111,8 +114,178 @@ tributary_subjugated = {
}
}
tributary_steppe = {
is_tributary = yes
suzerain_line_type = line_suzerain
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = yes
should_show_as_suzerain_realm_color = yes
contracts = {
default_tributary_taxes
nomad_government_prestige
suzerain_war_participation_guarantee
tributary_war_participation_obligation
}
}
herder_vassal = {
contracts = {
herder_government_obligations
}
}
celestial_vassal = {
admin_province_contract = celestial_provinces
contracts = {
celestial_obligations
celestial_ministry_obligations
celestial_provinces
celestial_treasury
celestial_salary
celestial_ministry_budget
celestial_salary_rank
}
modify_contract_layout = eastern_admin
}
tributary_celestial = {
is_tributary = yes
suzerain_line_type = line_suzerain
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = no
should_show_as_suzerain_realm_color = no
tributary_heir_succession = yes
suzerain_heir_succession = yes
is_valid_tributary_contract = {
scope:suzerain = {
highest_held_title_tier = tier_hegemony
}
}
tributary_can_break_free = {
always = yes
}
contracts = {
celestial_tribute_gold
celestial_tribute_prestige
celestial_tributary_investiture_privilege_trade
celestial_tributary_investiture_privilege_marriage
celestial_tributary_investiture_privilege_politics
}
}
mandala_vassal = {
contracts = {
mandala_government_taxes
mandala_government_piety
mandala_government_levies
religious_rights
fortification_rights
coinage_rights
succession_rights
title_revocation_rights
}
}
tributary_mandala = {
is_tributary = yes
tributary_can_break_free = {
NOT = { has_variable = tributary_has_been_reasserted_recently }
}
suzerain_line_type = line_suzerain
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = yes
should_show_as_suzerain_realm_color = yes
tributary_heir_succession = yes
suzerain_heir_succession = yes
contracts = {
mandala_government_taxes
mandala_government_piety
mandala_government_levies
mandala_suzerain_war_participation_guarantee
}
}
#Wanua, amongst others
tributary_mandala_tribal = {
is_tributary = yes
suzerain_line_type = line_suzerain
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = yes
should_show_as_suzerain_realm_color = yes
tributary_heir_succession = yes
suzerain_heir_succession = yes
contracts = {
mandala_government_taxes
mandala_government_prestige
mandala_government_piety
mandala_government_levies
mandala_suzerain_war_participation_guarantee
}
}
japan_administrative_vassal = {
admin_province_contract = japan_administrative_provinces
contracts = {
japan_administrative_obligations
japan_administrative_provinces
}
}
japan_feudal_vassal = {
contracts = {
feudal_government_taxes
feudal_government_levies
special_contract
religious_rights
fortification_rights
coinage_rights
succession_rights
war_declaration_rights
council_rights
title_revocation_rights
jizya_special_rights
}
}
wanua_vassal = {
contracts = {
wanua_obligations
}
}
tributary_wanua = {
is_tributary = yes
suzerain_line_type = line_suzerain
tributary_line_type = line_tributary
should_show_as_suzerain_realm_name = yes
should_show_as_suzerain_realm_color = yes
contracts = {
default_tributary_taxes
default_tributary_prestige
barter_goods_obligations
}
}
meritocratic_vassal = {
admin_province_contract = meritocratic_provinces
contracts = {
meritocratic_obligations
meritocratic_provinces
meritocratic_treasury
meritocratic_salary
meritocratic_salary_rank
}
modify_contract_layout = eastern_admin
}

View file

@ -404,4 +404,29 @@ tells = {
combat_width = 0.8
audio_parameter = 1.0
}
}
terraced_hills = {
color = rgb { 225 35 40 }
travel_danger_color = rgb { 225 35 40 }
travel_danger_score = hills_danger_value
provision_cost = @provisions_cost_light
province_modifier = {
supply_limit_mult = 0.1
}
county_capital_modifier = {
development_growth_factor = 0.1
}
defender_combat_effects = {
name = combat_hills
image = combat_hills
advantage = 5
}
movement_speed = 0.8
combat_width = 0.8
audio_parameter = 1.0
}

View file

@ -0,0 +1,363 @@
template POPSTextStyle
{
using = Font_Type_Standard
using = Font_Size_Small
align = left
default_format = "#medium"
block "pops_text_style"
{
}
}
template POPSButtonTextStyle
{
block "pops_button_text_style"
{
name = "pops_button_text"
parentanchor = vcenter|hcenter
font = StandardGameFont
fontsize = 15
fontcolor = { 0.86 0.86 0.73 1 }
autoresize = yes
position = { 0 0 }
align = center
}
}
template POPSErrorTextStyle
{
block "pops_error_text_style"
{
font = StandardGameFont
align = left
fontcolor = { 1 0 0 1 }
fontsize = 13
}
}
template POPSButtonStyle
{
block "pops_button_style"
{
texture = "gfx/editor_gui/editor_button.dds"
gfxtype = framedbuttongfx
spriteType = CorneredStretched
spriteborder = { 4 4 }
effectname = "NoHighlight"
framesize = { 16 16 }
upframe = 1
downframe = 2
overframe = 3
disableframe = 4
intersectionmask = yes
}
}
template POPSDropdownButtonStyle
{
block "pops_dropdown_button_style"
{
texture = "gfx/editor_gui/editor_dropdown.dds"
spriteType = CorneredStretched
gfxtype = framedbuttongfx
effectname = "NoHighlight"
spriteborder = { 4 4 }
spriteborder_right = 24
button_trigger = none
framesize = { 32 16 }
upframe = 1
downframe = 2
overframe = 3
disableframe = 4
}
}
template pops_dropdown_enum
{
block "pops_dropdown_enum"
{
alwaystransparent = no
active_item = {
widget = {
size = { 250 30 }
block "active_item"
{
}
button = {
size = { 100% 100% }
using = POPSDropdownButtonStyle
}
editor_textbox = {
block "item_text"
{
text = ""
}
position = { 10 0 }
parentanchor = vcenter|left
fontsize = 12
}
}
}
item = {
widget = {
size = { 250 20 }
block "item"
{
}
button = {
size = { 100% 100% }
texture = "gfx/editor_gui/editor_dropdown_item.dds"
spriteType = CorneredTiled
spriteborder = { 1 1 }
gfxtype = framedbuttongfx
framesize = { 8 8 }
upframe = 1
downframe = 2
overframe = 2
disableframe = 1
button_trigger = none
}
editor_textbox = {
block "item_text"
{
text = ""
}
position = { 10 8 }
fontsize = 12
}
}
}
list = {
scrollarea = {
position = { 2 30 }
autoresizescrollarea = yes
alwaystransparent = yes
maximumsize = { 250 210 }
block "scrollarea"
{
}
background = {
margin = { 2 2 }
margin_bottom = 6
margin_right = 6
texture = "gfx/editor_gui/editor_dropdown_list.dds"
spriteType = CorneredStretched
spriteborder = { 6 6 }
spriteborder_right = 8
spriteborder_bottom = 8
shaderfile = "gfx/FX/pdxgui_default.shader"
}
scrollwidget = {
dynamicgridbox = {
alwaystransparent = no
}
}
scrollbar_vertical = {
using = editor_vertical_scrollbar
}
scrollbar_horizontal = {
using = editor_horizontal_scrollbar
}
}
}
}
}
types POPS
{
type pops_vertical_spacer = widget {
block "pops_vertical_spacer"
{
size = { 0 5 }
}
}
type pops_horizontal_spacer = widget {
block "pops_horizontal_spacer"
{
size = { 5 0 }
}
}
type pops_window = window {
block "pops_window"
{
using = Window_Movable
vbox = {
using = Window_Margins
block "content_layout"
{}
}
}
}
type pops_button = button {
block "pops_button_size"
{
size = { 150 50 }
minimumsize = { 150 50 }
}
using = POPSButtonStyle
buttonText = {
textbox = {
using = POPSButtonTextStyle
}
}
}
type pops_button_wide = pops_button {
block "pops_button_size"
{
size = { 200 50 }
minimumsize = { 150 50 }
}
}
type pops_load_indicator = progressbar
{
# parentanchor = vcenter|hcenter
size = { 44 44 }
gfxtype = framedprogressbargfx
texture = "gfx/interface/loading_progress.dds"
framesize = { 44 44 }
loopinterval = 1.5
max = 0
block "load_indicator"
{
visible = no
}
}
type pops_button_load_indicator = button_standard {
pops_load_indicator = {}
}
type pops_textbox = textbox {
text = ""
block "textbox_size"
{
size = { 200 30 }
}
using = POPSTextStyle
block "textboxstyle"
{
}
}
type pops_error_textbox = textbox {
text = ""
multiline = yes
layoutpolicy_vertical = expanding
using = POPSErrorTextStyle
block "textboxstyle"
{
}
}
type pops_required_textbox = textbox {
block "required_field"
{
raw_text = "*"
}
minimumsize = { 10 -1 }
using = POPSTextStyle
autoresize = yes
block "textboxstyle"
{
}
fontcolor = { 1 0 0 1 }
}
type pops_dropdown = dropDown {
layoutpolicy_horizontal = expanding
block "pops_dropdown_name"
{
name = "pops_dropdown"
}
block "pops_dropdown"
{
}
using = pops_dropdown_enum
}
type pops_textbox_entry = hbox {
layoutpolicy_horizontal = expanding
restrictparent_min = yes
layoutpolicy_vertical = fixed
editbox_standard_with_label = {
blockoverride "editbox_label"
{
block "title"
{
raw_text = "#D Title:#!"
}
}
layoutpolicy_horizontal = expanding
block "editbox_size"
{
size = { 130 30 }
}
}
}
type pops_dropdown_entry = hbox {
layoutpolicy_horizontal = expanding
pops_required_textbox={}
pops_vertical_spacer={}
pops_textbox = {
block "title"
{
raw_text = "#D Title:#!"
}
}
pops_dropdown = {
}
}
type pops_checkbutton = hbox {
checkbutton = {
gfxtype = checkbuttongfx
shaderfile = "gfx/FX/pdxgui_pushbutton.shader"
texture = "gfx/editor_gui/editor_checkbox.dds"
framesize = { 16 16 }
size = { 32 32 }
block "checkbutton"
{
}
}
pops_horizontal_spacer={}
pops_textbox = {
multiline = yes
#size = { 300 100% }
maximumsize = { 300 800 }
minimumsize = { 200 50 }
align = top
block "label"
{
raw_text = "#D Label#!"
}
}
}
}

View file

@ -0,0 +1,668 @@
types POPS
{
type pops_login_window = window {
name = "pops_login_window"
size = { 100% 100% }
movable = no
layer = confirmation
using = Animation_ShowHide_Quick
using = Background_Full_Dim
button = {
size = { 100% 100% }
onclick = "[POPSLoginView.Hide]"
}
widget = {
size = { 600 400 }
parentanchor = center
alwaystransparent = no
using = Window_Decoration_Frontend_Spike
using = Window_Background
widget = {
position = { 45 20 }
allow_outside = yes
highlight_icon = {
size = { 44 44 }
texture = "gfx/interface/icons/flat_icons/account.dds"
alpha = 0.4
using = Master_Button_Modify_Texture
blockoverride "master_color_frame" {
frame = 4
}
}
}
vbox = {
using = Window_Margins
vbox = {
name = "log_in"
visible = "[POPSLoginView.IsLogin]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text"
{
text = "POPS_LOGIN"
}
blockoverride "button_close"
{
onclick = "[POPSLoginView.Hide]"
}
}
vbox = {
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
minimumsize = { 500 0 }
spacing = 5
margin = { 20 10 }
pops_textbox_entry = {
name = "pops_login_entry_email"
layoutpolicy_horizontal = expanding
blockoverride "title"
{
text = "EMAIL"
}
blockoverride "editbox_properties"
{
name = "pops_editbox"
text = "[POPSLoginView.GetEmail]"
focus_on_visible = yes
ontextchanged = "[POPSLoginView.SetEmail]"
onreturnpressed = "[POPSLoginView.Login]"
maxcharacters = 255
}
}
pops_textbox_entry = {
name = "pops_login_entry_password"
layoutpolicy_horizontal = expanding
blockoverride "title"
{
text = "PASSWORD"
}
blockoverride "editbox_properties"
{
name = "pops_editbox"
text = "[POPSLoginView.GetPassword]"
ontextchanged = "[POPSLoginView.SetPassword]"
onreturnpressed = "[POPSLoginView.Login]"
password = yes
}
}
text_multi = {
text = "[POPSLoginView.GetErrorMessage]"
default_format = "#X"
visible = "[Not(POPSStatusIsLoggingIn)]"
multiline = yes
layoutpolicy_horizontal = expanding
align = center
autoresize = yes
max_width = 500
}
expand = {
layoutpolicy_vertical = expanding
visible = "[Not(POPSStatusIsLoggingIn)]"
}
hbox = {
layoutpolicy_horizontal = expanding
visible = "[And(Not(POPSStatusIsLoggingIn), Not(POPSStatusIsLoggedIn))]"
spacing = 10
button_tertiary = {
text = "POPS_LOGIN_RESET_PASSWORD"
onclick = "[POPSLoginView.SetState( 'password_reset' )]"
}
expand = {}
button_primary = {
text = "[POPSLoginView.GetLoginString]"
layoutpolicy_horizontal = fixed
enabled = "[POPSLoginView.IsValidLoginInfo]"
onclick = "[POPSLoginView.Login]"
}
}
### ANIMATIONS ####
vbox = {
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
visible = "[POPSStatusIsLoggingIn]"
hbox = {
spacing = 5
text_single = {
text = "LOGGING_IN"
}
pops_load_indicator = {
blockoverride "load_indicator"
{
visible = yes
}
}
}
background = {
using = Background_Area_Border
}
}
}
vbox = {
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
visible = "[And(Not(POPSStatusIsLoggingIn), POPSStatusIsLoggedIn)]"
text_single = {
text = "POPS_LOGIN_LOGGED_IN"
}
button_standard = {
text = "CLOSE_LABEL"
layoutpolicy_horizontal = fixed
onclick = "[POPSLoginView.Hide]"
}
background = {
using = Background_Area_Border_Solid
}
}
### CREATE ACCOUNT ###
hbox = {
visible = "[And(And(Not(POPSLoginView.IsRestoringPassword), Not(POPSStatusIsLoggedIn)), Not(POPSLoginView.IsEmailSent))]"
layoutpolicy_horizontal = expanding
margin = { 20 10 }
background = {
using = Background_Area
}
text_multi = {
layoutpolicy_horizontal = expanding
text = "POPS_CREATE_ACCOUNT_CREARE_SUGGESTION"
align = nobaseline
}
expand = {}
button_standard = {
text = "CREATE_ACCOUNT"
onclick = "[OnCreateAccount]"
}
}
}
vbox = {
name = "forgot_password"
visible = "[POPSLoginView.IsRestoringPassword]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text"
{
text = "POPS_FORGOT_PASSWORD"
}
blockoverride "button_close"
{
onclick = "[POPSLoginView.Hide]"
}
}
vbox = {
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
margin = { 20 10 }
spacing = 5
vbox = {
layoutpolicy_vertical = expanding
text_multi = {
layoutpolicy_horizontal = expanding
autoresize = yes
max_width = 500
text = "POPS_LOGIN_RESET_PASSWORD_DESC"
}
spacer = {
size = { -1 20 }
}
pops_textbox_entry = {
name = "pops_login_entry_email"
layoutpolicy_horizontal = expanding
blockoverride "title"
{
text = "EMAIL"
}
blockoverride "editbox_properties"
{
name = "pops_editbox"
text = "[POPSLoginView.GetEmail]"
ontextchanged = "[POPSLoginView.SetEmail]"
onreturnpressed = "[POPSLoginView.ResetPassword]"
maxcharacters = 255
}
block "editbox_size"
{
size = { 100 0 }
}
}
expand = {
}
}
hbox = {
spacing = 10
button_standard = {
text = "CANCEL"
onclick = "[POPSLoginView.SetState( 'login' )]"
}
button_standard = {
text = "POPS_LOGIN_RESET_PASSWORD_SEND"
onclick = "[POPSLoginView.ResetPassword]"
onclick = "[POPSLoginView.SetState( 'email_sent' )]"
}
}
}
}
vbox = {
name = "forgot_password_sent"
visible = "[POPSLoginView.IsEmailSent]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text"
{
text = "POPS_FORGOT_PASSWORD"
}
blockoverride "button_close"
{
onclick = "[POPSLoginView.Hide]"
}
}
vbox = {
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
spacing = 5
margin = { 20 10 }
text_multi = {
layoutpolicy_horizontal = expanding
max_width = 500
autoresize = yes
text = "POPS_LOGIN_RESET_PASSWORD_EMAIL_SENT"
}
expand = {}
button_standard_back = {
text = "BACK_LABEL"
layoutpolicy_horizontal = fixed
onclick = "[POPSLoginView.SetState( 'login' )]"
}
}
}
vbox = {
name = "account_info"
visible = "[POPSLoginView.IsLoggedIn]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text"
{
text = "PARADOX_ACCOUNT"
}
blockoverride "button_close"
{
onclick = "[POPSLoginView.Hide]"
}
}
vbox = {
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
margin = { 20 10 }
spacer = {
size = { -1 20 }
}
vbox = {
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
vbox = {
layoutpolicy_horizontal = expanding
maximumsize = { 350 0 }
hbox = {
layoutpolicy_horizontal = expanding
spacing = 5
hbox = {
text_single = {
text = "EMAIL"
align = nobaseline
}
text_single = {
raw_text = ":"
align = nobaseline
}
}
text_single = {
default_format = "#high"
text = "[POPStatusGetUserEmailMasked]"
align = nobaseline
}
expand = {}
}
hbox = {
layoutpolicy_horizontal = expanding
spacing = 5
minimumsize = { 0 33 }
hbox = {
text_single = {
text = "USER_NAME"
align = nobaseline
}
text_single = {
raw_text = ":"
align = nobaseline
}
}
hbox = {
visible = "[Not( POPStatusIsUserNameEmpty )]"
spacing = 5
text_single = {
default_format = "#high"
text = "[POPStatusGetUserName]"
align = nobaseline
}
button_change = {
size = { 24 24 }
onclick = "[POPSLoginView.SetState( 'change_username' )]"
}
}
hbox = {
visible = "[POPStatusIsUserNameEmpty]"
button_standard = {
text = "POPS_LOGIN_ADD_USER_NAME"
onclick = "[POPSLoginView.SetState( 'change_username' )]"
}
}
expand = {}
}
spacer = {
size = { 10 30 }
}
hbox = {
layoutpolicy_horizontal = expanding
spacing = 10
visible = "[And( POPSStatusIsLoggedIn, POPSStatusIsSupportConnectedAccount )]"
button_checkbox = {
visible = "[Not( POPSLoginView.IsConnectingAccount )]"
size = { 24 24 }
checked = "[POPSStatusIsAccountConnected]"
onclick = "[POPSLoginView.ToggleConnected]"
}
pops_load_indicator = {
size = { 24 24 }
visible = "[POPSLoginView.IsConnectingAccount]"
blockoverride "load_indicator"
{
visible = yes
}
}
text_single = {
text = "POPS_LOGIN_BIND_STEAM"
align = nobaseline
}
expand = {}
}
text_multi = {
text = "[POPSLoginView.GetErrorMessage]"
default_format = "#X"
multiline = yes
layoutpolicy_horizontal = expanding
align = center
autoresize = yes
max_width = 500
}
}
expand = {}
hbox = {
spacing = 10
button_standard = {
text = "CLOSE_LABEL"
layoutpolicy_horizontal = fixed
onclick = "[POPSLoginView.Hide]"
}
button_standard = {
text = "LOGOUT"
onclick = [POPSLoginView.Logout]
onclick = "[POPSLoginView.SetState( 'login' )]"
}
}
}
}
}
vbox = {
name = "change_username"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
visible = "[POPSLoginView.IsChangingUserName]"
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text"
{
text = "PDX_USERNAME"
}
blockoverride "button_close"
{
onclick = "[POPSLoginView.Hide]"
}
}
vbox = {
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
margin = { 20 10 }
text_multi = {
text = "POPS_LOGIN_CHANGE_USER_NAME_DESC"
max_width = 500
autoresize = yes
}
spacer = {
size = { -1 20 }
}
hbox = {
spacing = 10
layoutpolicy_horizontal = expanding
vbox = {
spacing = 2
layoutpolicy_horizontal = expanding
editbox_standard_with_label = {
layoutpolicy_horizontal = expanding
blockoverride "editbox_label"
{
text = "USERNAME"
}
size = { 320 30 }
blockoverride "editbox_properties"
{
name = "edit_username"
text = "[POPStatusGetUserName]"
onreturnpressed = "[POPSLoginView.SetUserName]"
ontextedited = "[POPSLoginView.OnUserNameChange]"
maxcharacters = 255
}
}
hbox = {
visible = "[POPSLoginView.IsEmptyUserNamePrompt]"
layoutpolicy_horizontal = expanding
text_single = {
text = "POPS_LOGIN_EMPTY_USERNAME"
default_format = "#negative_value;italic"
}
}
text_multi = {
text = "[POPSLoginView.GetErrorMessage]"
default_format = "#X"
multiline = yes
layoutpolicy_horizontal = expanding
align = center
autoresize = yes
}
text_single = {
visible = "[POPSLoginView.IsSuccessfulSetName]"
text = "POPS_LOGIN_CHANGE_USERNAME_SUCCESS"
align = left
layoutpolicy_horizontal = expanding
}
}
expand = {}
}
expand = {}
hbox = {
spacing = 10
button_standard_back = {
text = "BACK_LABEL"
layoutpolicy_horizontal = fixed
onclick = "[POPSLoginView.SetState( 'logged_in' )]"
}
button_standard = {
text = "UPDATE_USERNAME"
layoutpolicy_horizontal = fixed
onclick = "[POPSLoginView.SetUserName]"
}
}
}
}
}
}
}
type pops_login_accountwidget = button_account {
name = "account"
tooltip = "[SelectLocalization( POPSStatusIsLoggedIn, 'FRONTEND_LOGGED_IN', 'FRONTEND_LOGIN_FOR_MUTLIPLAYER_TT' )]"
block "properties" {
onclick = "[POPSStatusWidget.ToggleLoginWindow]"
}
enabled = "[Not(POPSStatusIsLoggingIn)]"
pops_load_indicator = {
blockoverride "load_indicator"
{
visible = "[POPSStatusIsLoggingIn]"
size = { 15 15 }
parentanchor = right|top
widgetanchor = left
}
}
icon_circle_green = {
name = "online"
visible = "[POPSStatusIsLoggedIn]"
parentanchor = right|top
widgetanchor = left
}
icon_ring = {
name = "offline"
visible = "[Not(POPSStatusIsLoggedIn)]"
size = { 15 15 }
alpha = 0.5
parentanchor = right|top
widgetanchor = left
}
block "text" {}
}
}

View file

@ -0,0 +1,3 @@
pops_login_window = {
visible_at_creation = no
}

View file

@ -0,0 +1,161 @@
types Achievements
{
type vbox_achievement_group = vbox {
layoutpolicy_horizontal = expanding
margin = { 10 0 }
margin_top = 10
button_normal = {
layoutpolicy_horizontal = expanding
size = { 0 25 }
onclick = "[Group.ToggleCollapsed]"
hbox = {
margin = { 10 0 }
spacing = 10
background = {
using = Background_Area
margin = { 0 5 }
}
button_expand = {
onclick = "[Group.ToggleCollapsed]"
frame = "[Select_int32( Group.IsCollapsed, '(int32)1', '(int32)2' )]"
}
text_single = {
layoutpolicy_horizontal = expanding
text = "ACHIEVEMENT_GROUP_TITLE"
default_format = "#low"
align = nobaseline
tooltip = "ACHIEVEMENT_GROUP_TOOLTIP"
alwaystransparent = yes
}
expand = {}
}
}
spacer = {
size = { 5 5 }
}
vbox = {
datamodel = "[Group.AccessVisibleAchievements]"
visible = "[Not(Group.IsCollapsed)]"
layoutpolicy_horizontal = expanding
item = {
widget_achievement_list_entry = {
layoutpolicy_horizontal = expanding
}
}
}
}
type widget_achievement_list_entry = widget {
minimumsize = { 0 80 }
hbox = {
set_parent_size_to_minimum = yes
spacing = 10
margin = { 0 5 }
vbox = {
layoutpolicy_vertical = expanding
### IMAGE ####
widget = {
layoutpolicy_vertical = expanding
size = { 70 70 }
icon = {
visible = "[GUIAchievement.GetAchievement.IsUnlocked]"
texture = "[GUIAchievement.AccessTexture]"
size = { 64 64 }
alpha = "[Select_float(GUIAchievement.GetAchievement.IsUnlocked,'(float)1.0','(float)0.5')]"
tooltip = "ACHIEVEMENT_UNLOCKED"
block "achievement_icon" {}
}
#### LOCKED
highlight_icon = {
visible = "[Not(GUIAchievement.GetAchievement.IsUnlocked)]"
texture = "[GUIAchievement.AccessTexture]"
size = { 64 64 }
alpha = "[Select_float(GUIAchievement.GetAchievement.IsUnlocked,'(float)1.0','(float)0.5')]"
tooltip = "ACHIEVEMENT_LOCKED"
effectname = "GreyedOut"
highlight_icon = {
size = { 96% 97% }
parentanchor = center
texture = "gfx/interface/component_masks/mask_frame_horizontal.dds"
tintcolor = { 0 0 0 0.6 }
}
}
##### IS NOT POSSIBLE
highlight_icon = {
visible = "[Not(GUIAchievement.IsPossible)]"
texture = "[GUIAchievement.AccessTexture]"
size = { 64 64 }
alpha = "[Select_float(GUIAchievement.GetAchievement.IsUnlocked,'(float)1.0','(float)0.5')]"
tooltip = "ACHIEVEMENT_NOT_POSSIBLE"
effectname = "GreyedOut"
}
}
expand = {}
}
##TEXT###
vbox = {
layoutpolicy_horizontal = expanding
margin_bottom = 4
text_single = {
layoutpolicy_horizontal = expanding
text = "[GUIAchievement.GetName]"
alpha = "[Select_float(GUIAchievement.GetAchievement.IsUnlocked,'(float)1.0','(float)0.5')]"
tooltip = "[GUIAchievement.GetHappenedDescription]"
default_format = "#high"
max_width = 470
using = Font_Size_Medium
align = nobaseline
block "achievement_name" {}
}
hbox = {
layoutpolicy_horizontal = expanding
text_multi = {
text = "[GUIAchievement.GetDescription]"
align = nobaseline
autoresize = yes
max_width = 470
alpha = "[Select_float(GUIAchievement.GetAchievement.IsUnlocked,'(float)1.0','(float)0.5')]"
tooltip = "[GUIAchievement.GetHappenedDescription]"
block "achievement_description" {}
}
expand = {}
}
}
}
divider_light = {
parentanchor = bottom|hcenter
size = { 100% 3 }
position = { 0 -2 }
alpha = 0.5
}
}
}

View file

@ -0,0 +1,129 @@
window = {
name = "achievements_window"
size = { 100% 100% }
movable = no
layer = confirmation
using = Animation_ShowHide_Quick
using = Background_Full_Dim
button_normal = {
size = { 100% 100% }
onclick = "[AchievementWindow.Hide]"
}
widget = {
parentanchor = center
size = { 700 880 }
alwaystransparent = no
using = Window_Background
using = Window_Decoration_Frontend_Spike
vbox = {
alwaystransparent = yes
using = Window_Margins
datacontext = "[GetGameRules]"
spacing = 10
header_pattern = {
layoutpolicy_horizontal = expanding
blockoverride "header_text" {
text = "ACHIEVEMENTS"
}
blockoverride "button_close"
{
onclick = "[AchievementWindow.Hide]"
shortcut = "close_window"
}
}
hbox_achievements_info = {
name = "ironman_and_achievements_info"
visible = "[AchievementWindow.HasGameStarted]"
}
hbox = {
block "filter_locked_hbox" {}
margin = { 0 10 }
spacing = 5
text_single = {
text = "ACHIEVEMENT_FILTER_SHOW"
align = nobaseline
margin_right = 5
}
button_standard_list = {
size = { 80 25 }
text = "ACHIEVEMENT_FILTER_BUTTON_ALL"
tooltip = "ACHIEVEMENT_FILTER_ALL_TOOLTIP"
down = "[AchievementWindow.ShouldShowAll]"
onclick = "[AchievementWindow.ShowAll]"
alwaystransparent = "[AchievementWindow.ShouldShowAll]"
}
button_standard_list = {
visible = "[AchievementWindow.HasGameStarted]"
size = { 80 25 }
text = "ACHIEVEMENT_FILTER_BUTTON_POSSIBLE"
tooltip = "ACHIEVEMENT_FILTER_POSSIBLE_TOOLTIP"
down = "[AchievementWindow.ShouldShowPossible]"
onclick = "[AchievementWindow.ShowPossible]"
}
button_standard_list = {
size = { 80 25 }
text = "ACHIEVEMENT_FILTER_BUTTON_UNLOCKED"
tooltip = "ACHIEVEMENT_FILTER_UNLOCKED_TOOLTIP"
down = "[AchievementWindow.ShouldShowUnlocked]"
onclick = "[AchievementWindow.ShowUnlocked]"
}
button_standard_list = {
visible = "[Not( AchievementWindow.HasGameStarted )]"
size = { 80 25 }
text = "ACHIEVEMENT_FILTER_BUTTON_LOCKED"
tooltip = "ACHIEVEMENT_FILTER_LOCKED_TOOLTIP"
down = "[AchievementWindow.ShouldShowLocked]"
onclick = "[AchievementWindow.ShowLocked]"
}
}
### CONTENT ###
scrollbox = {
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
blockoverride "scrollbox_content" {
vbox = {
datamodel = "[AchievementWindow.AccessGroups]"
layoutpolicy_horizontal = expanding
item = {
vbox_achievement_group = {
}
}
}
}
}
hbox = {
margin = { 0 10 }
margin_top = 5
button_primary = {
text = "CLOSE_LABEL"
onclick = "[AchievementWindow.Hide]"
shortcut = "close_window"
}
}
}
}
}

View file

@ -0,0 +1,103 @@
types Achievements
{
type achievement_spacer_horizontal = widget {
size = { 5 0 }
}
type achievement_spacer_vertical = widget {
size = { 0 3 }
}
}
window = {
name = "achievement_popup_window"
alwaystransparent = yes
scissor = no
movable = no
size = { 300 500 }
widgetanchor = top|left
focuspolicy = all
block "popup_window"
{}
vbox = {
restrictparent_min = yes
block "popup_window_layout"
{}
dynamicgridbox = {
alwaystransparent = yes
datamodel = "[AchievementPopup.AccessJustUnlockedAchievements]"
layoutpolicy_vertical = expanding
block "popups_gridbox"
{}
item = {
button = {
size = { 300 64 }
maximumsize = { 300 64 }
visible = yes
focuspolicy = click
onclick = "[GUIAchievement.OnClick]"
block "achievement_unlock_popup"
{}
hbox = {
margin = { 5 5 }
using = Window_Background_Subwindow
icon = {
texture = "[GUIAchievement.AccessTexture]"
size = { 64 64 }
}
spacer = {
size = { 5 5 }
}
state = {
name = on_create
duration = 0.5
trigger_on_create = yes
alpha = 0
delay = 5
on_finish = "[GUIAchievement.Remove]"
block "popup_on_create_state"
{}
}
vbox = {
margin = { 0 3 }
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
text_single = {
text = "ACHIEVEMENT_UNLOCKED"
margin_right = 3
autoresize = no
layoutpolicy_horizontal = expanding
default_format = "#low"
minimumsize = { -1 10 }
block "achievement_unlocked_text"
{}
}
text_single = {
text = "[GUIAchievement.GetName]"
layoutpolicy_horizontal = expanding
minimumsize = { -1 16 }
default_format = "#high"
autoresize = no
using = Font_Size_Medium
align = nobaseline
margin_right = 3
block "achievement_name"
{}
}
}
}
}
}
}
}
}

View file

@ -0,0 +1,41 @@
activity_locale_widget = {
name = "locale_artisan_armorsmith_west"
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_armorsmith_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_armorsmith_west_1_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 80% 80% }
position = { 16.5% -35% }
entity_instance = "ui_tavern_smoke_small_entity"
}
activity_locale_vfx = {
size = { 80% 80% }
position = { -3.5% -24% }
entity_instance = "ui_tavern_smoke_large_entity"
}
}
widget = {
widgetid = "locale_artisan_armorsmith_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_armorsmith_west_banner"
widgetid = "locale_artisan_armorsmith_west_banner"
attachto = {
widgetid = locale_artisan_armorsmith_west
}
}

View file

@ -0,0 +1,34 @@
activity_locale_widget = {
name = "locale_artisan_farrier_west"
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_farrier_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_farrier_west_1_interaction_mask.png"
}
#blockoverride "locale_vfx"
#{
#activity_locale_vfx = {
# size = { 30% 30% }
# position = { 1000 1000 }
# entity_instance = "ui_tavern_smoke_entity"
#}
#}
widget = {
widgetid = "locale_artisan_farrier_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_farrier_west_banner"
attachto = {
widgetid = locale_artisan_farrier_west
}
}

View file

@ -0,0 +1,34 @@
activity_locale_widget = {
name = "locale_artisan_fletcher_west"
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_fletcher_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_fletcher_west_1_interaction_mask.png"
}
#blockoverride "locale_vfx"
#{
#activity_locale_vfx = {
# size = { 30% 30% }
# position = { 1000 1000 }
# entity_instance = "ui_tavern_smoke_entity"
#}
#}
widget = {
widgetid = "locale_artisan_fletcher_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_fletcher_west_banner"
attachto = {
widgetid = locale_artisan_fletcher_west
}
}

View file

@ -0,0 +1,38 @@
activity_locale_widget = {
name = "locale_artisan_india"
using = Sound_EP2_Tournament_Locale_Button_Artisan
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_artisan_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_artisan_india_interaction_mask.png"
}
#blockoverride "locale_vfx"
# {
# activity_locale_vfx = {
# size = { 100% 100% }
# position = { 8% -50% }
# entity_instance = "ui_tavern_smoke_large_entity"
# }
# }
widget = {
widgetid = "locale_artisan_india"
position = { 0% 80% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Artisan
attachto = {
widgetid = locale_artisan_india
}
}

View file

@ -0,0 +1,38 @@
activity_locale_widget = {
name = "locale_artisan_mena"
using = Sound_EP2_Tournament_Locale_Button_Artisan
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_artisan_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_artisan_mena_interaction_mask.png"
}
blockoverride "locale_vfx"
{
# activity_locale_vfx = {
# size = { 100% 100% }
# position = { 8% -50% }
# entity_instance = "ui_tavern_smoke_large_entity"
# }
}
widget = {
widgetid = "locale_artisan_mena"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Artisan
attachto = {
widgetid = locale_artisan_mena
}
}

View file

@ -0,0 +1,33 @@
activity_locale_widget = {
name = "locale_artisan_tailor_west"
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_tailor_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tailor_west_1_interaction_mask.png"
}
#blockoverride "locale_vfx"
#{
#activity_locale_vfx = {
# size = { 30% 30% }
# position = { 1000 1000 }
# entity_instance = "ui_tavern_smoke_entity"
#}
#}
widget = {
widgetid = "locale_artisan_tailor_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_tailor_west_banner"
attachto = {
widgetid = locale_artisan_tailor_west
}
}

View file

@ -0,0 +1,39 @@
activity_locale_widget = {
name = "locale_artisan_weaponsmith_west"
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_weaponsmith_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_weaponsmith_west_1_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 60% 60% }
position = { 31.0% -4% }
entity_instance = "ui_tavern_smoke_large_entity"
}
activity_locale_vfx = {
size = { 25% 25% }
position = { 39.4% 48.8% }
entity_instance = "ui_smithy_entity"
}
}
widget = {
widgetid = "locale_artisan_weaponsmith_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_weaponsmith_west_banner"
attachto = {
widgetid = locale_artisan_weaponsmith_west
}
}

View file

@ -0,0 +1,38 @@
activity_locale_widget = {
name = "locale_artisan_west"
using = Sound_EP2_Tournament_Locale_Button_Artisan
blockoverride "locale_texture"
{
size = { 27.1% 29.6% }
position = { 67% 27.6% }
texture = "gfx/interface/illustrations/activity_locales/locale_armorsmith_west_1.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_armorsmith_west_1_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 100% 100% }
position = { 8% -50% }
entity_instance = "ui_tavern_smoke_large_entity"
}
}
widget = {
widgetid = "locale_artisan_west"
position = { -10% 25% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_artisan_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Artisan
attachto = {
widgetid = locale_artisan_west
}
}

View file

@ -0,0 +1,30 @@
activity_locale_widget = {
name = "locale_camp_india"
using = Sound_EP2_Tournament_Locale_Button_Camp
blockoverride "locale_texture"
{
parentanchor = top|right
size = { 38% 38% }
position = { 0% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_camp_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_camp_india_interaction_mask.png"
}
widget = {
widgetid = "locale_camp_india"
position = { 10% 40% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_camp_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Camp
attachto = {
widgetid = locale_camp_india
}
}

View file

@ -0,0 +1,30 @@
activity_locale_widget = {
name = "locale_camp_mena"
using = Sound_EP2_Tournament_Locale_Button_Camp
blockoverride "locale_texture"
{
parentanchor = top|right
size = { 38% 38% }
position = { 0% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_camp_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_camp_mena_interaction_mask.png"
}
widget = {
widgetid = "locale_camp_mena"
position = { 10% 40% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_camp_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Camp
attachto = {
widgetid = locale_camp_mena
}
}

View file

@ -0,0 +1,30 @@
activity_locale_widget = {
name = "locale_camp_west"
using = Sound_EP2_Tournament_Locale_Button_Camp
blockoverride "locale_texture"
{
parentanchor = top|right
size = { 38% 38% }
position = { 0% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_camp_west.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_camp_west_interaction_mask.png"
}
widget = {
widgetid = "locale_camp_west"
position = { 10% 40% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_camp_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Camp
attachto = {
widgetid = locale_camp_west
}
}

View file

@ -0,0 +1,30 @@
activity_locale_widget = {
name = "locale_entertainment_india"
using = Sound_EP2_Tournament_Locale_Button_Tavern
blockoverride "locale_texture"
{
name = "pparent"
size = { 27.6% 33.3% }
position = { 16.4% 46.2% }
texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_india_interaction_mask.png"
}
widget = {
widgetid = "locale_entertainment_india"
position = { 20% 10% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_entertainment_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Tavern
attachto = {
widgetid = locale_entertainment_india
}
}

View file

@ -0,0 +1,45 @@
activity_locale_widget = {
name = "locale_entertainment_mena"
using = Sound_EP2_Tournament_Locale_Button_Tavern
blockoverride "locale_texture"
{
name = "pparent"
size = { 27.6% 33.3% }
position = { 16.4% 46.2% }
texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_mena_interaction_mask.png"
}
blockoverride "locale_vfx"
{
# activity_locale_vfx = {
# size = { 50% 100% }
# position = { 21% -55% }
# entity_instance = "ui_tavern_smoke_large_entity"
# }
# activity_locale_vfx = {
# size = { 50% 100% }
# position = { 37% -61% }
# entity_instance = "ui_tavern_smoke_small_entity"
# }
}
widget = {
widgetid = "locale_entertainment_mena"
position = { 20% 0% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_entertainment_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Tavern
attachto = {
widgetid = locale_entertainment_mena
}
}

View file

@ -0,0 +1,45 @@
activity_locale_widget = {
name = "locale_entertainment_west"
using = Sound_EP2_Tournament_Locale_Button_Tavern
blockoverride "locale_texture"
{
name = "pparent"
size = { 27.6% 33.3% }
position = { 16.4% 46.2% }
texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_west.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_entertainment_west_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 50% 100% }
position = { 20.5% -58% }
entity_instance = "ui_tavern_smoke_large_entity"
}
activity_locale_vfx = {
size = { 50% 100% }
position = { 37% -61% }
entity_instance = "ui_tavern_smoke_small_entity"
}
}
widget = {
widgetid = "locale_entertainment_west"
position = { 20% 0% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_entertainment_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Tavern
attachto = {
widgetid = locale_entertainment_west
}
}

View file

@ -0,0 +1,35 @@
activity_locale_widget = {
name = "locale_temple_india"
using = Sound_EP2_Tournament_Locale_Button_Temple
blockoverride "locale_texture"
{
size = { 21.9% 30.5% }
position = { 26.5% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_temple_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_temple_india_interaction_mask.png"
}
# activity_locale_vfx = {
# size = { 100% 100% }
# position = { 10.5% -11.0% }
# entity_instance = "ui_bird_01_entity"
# }
widget = {
widgetid = "locale_temple_india"
position = { 10% 80% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_temple_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Temple
attachto = {
widgetid = locale_temple_india
}
}

View file

@ -0,0 +1,35 @@
activity_locale_widget = {
name = "locale_temple_mena"
using = Sound_EP2_Tournament_Locale_Button_Temple
blockoverride "locale_texture"
{
size = { 21.9% 30.5% }
position = { 26.5% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_temple_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_temple_mena_interaction_mask.png"
}
activity_locale_vfx = {
size = { 100% 100% }
position = { 10.5% -11.0% }
entity_instance = "ui_bird_01_entity"
}
widget = {
widgetid = "locale_temple_mena"
position = { 10% 80% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_temple_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Temple
attachto = {
widgetid = locale_temple_mena
}
}

View file

@ -0,0 +1,35 @@
activity_locale_widget = {
name = "locale_temple_west"
using = Sound_EP2_Tournament_Locale_Button_Temple
blockoverride "locale_texture"
{
size = { 21.9% 30.5% }
position = { 26.5% 0% }
texture = "gfx/interface/illustrations/activity_locales/locale_temple_west.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_temple_west_interaction_mask.png"
}
activity_locale_vfx = {
size = { 100% 100% }
position = { 10.5% -11.0% }
entity_instance = "ui_bird_01_entity"
}
widget = {
widgetid = "locale_temple_west"
position = { 10% 80% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_temple_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Temple
attachto = {
widgetid = locale_temple_west
}
}

View file

@ -0,0 +1,66 @@
activity_locale_widget = {
name = "locale_tournament1_india"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_india_interaction_mask.png"
}
# blockoverride "locale_vfx"
# {
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 32.0% 36% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 36.7% 26.5% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 67.8% 33.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 64.0% 43.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 4% }
# position = { 61.8% 23.5% }
# entity_instance = "ui_flag_blue_entity"
# }
# }
widget = {
widgetid = "locale_tournament1_india"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament1_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament1_india
}
}

View file

@ -0,0 +1,66 @@
activity_locale_widget = {
name = "locale_tournament1_mena"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_mena_interaction_mask.png"
}
blockoverride "locale_vfx"
{
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 32.0% 36% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 36.7% 26.5% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 67.8% 33.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 64.0% 43.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 5% 4% }
# position = { 61.8% 23.5% }
# entity_instance = "ui_flag_blue_entity"
# }
}
widget = {
widgetid = "locale_tournament1_mena"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament1_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament1_mena
}
}

View file

@ -0,0 +1,66 @@
activity_locale_widget = {
name = "locale_tournament1_west"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_west.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament1_west_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 5% 5% }
position = { 32.0% 36% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 36.7% 26.5% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 67.8% 33.9% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 64.0% 43.9% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 5% 4% }
position = { 61.8% 23.5% }
entity_instance = "ui_flag_blue_entity"
}
}
widget = {
widgetid = "locale_tournament1_west"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament1_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament1_west
}
}

View file

@ -0,0 +1,165 @@
activity_locale_widget = {
name = "locale_tournament3_india"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_india.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_india_interaction_mask.png"
}
# blockoverride "locale_vfx"
# {
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 21.8% 37% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 23.6% 34% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 25.4% 31% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 29.4% 22.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 31.0% 19.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 6% 6% }
# position = { 27.0% 22.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 41.9% 16.0% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 46.5% 17.0% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 48.9% 17.4% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 53.9% 17.4% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 56.7% 15.4% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 61.9% 16.4% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 64.4% 19.8% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 75.6% 23.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 81.0% 30.8% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 74.4% 49.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 75.6% 46.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 76.8% 43.1% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 78.4% 37.8% }
# entity_instance = "ui_flag_red_entity"
# }
# }
widget = {
widgetid = "locale_tournament3_india"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament3_india_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament3_india
}
}

View file

@ -0,0 +1,165 @@
activity_locale_widget = {
name = "locale_tournament3_mena"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_mena.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_mena_interaction_mask.png"
}
blockoverride "locale_vfx"
{
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 21.8% 37% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 23.6% 34% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 25.4% 31% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 29.4% 22.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 31.0% 19.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 6% 6% }
# position = { 27.0% 22.9% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 41.9% 16.0% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 46.5% 17.0% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 48.9% 17.4% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 53.9% 17.4% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 56.7% 15.4% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 61.9% 16.4% }
# entity_instance = "ui_flag_red_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 64.4% 19.8% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 75.6% 23.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 4% 4% }
# position = { 81.0% 30.8% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 74.4% 49.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 75.6% 46.6% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 76.8% 43.1% }
# entity_instance = "ui_flag_blue_entity"
# }
# activity_locale_vfx = {
# size = { 5% 5% }
# position = { 78.4% 37.8% }
# entity_instance = "ui_flag_red_entity"
# }
}
widget = {
widgetid = "locale_tournament3_mena"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament3_mena_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament3_mena
}
}

View file

@ -0,0 +1,165 @@
activity_locale_widget = {
name = "locale_tournament3_west"
using = Sound_EP2_Tournament_Locale_Button_Grounds
blockoverride "locale_texture"
{
name = "pparent"
size = { 40.5% 44.5% }
position = { 29.8% 21.5% }
texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_west.dds"
intersectionmask_texture = "gfx/interface/illustrations/activity_locales/locale_tournament3_west_interaction_mask.png"
}
blockoverride "locale_vfx"
{
activity_locale_vfx = {
size = { 5% 5% }
position = { 21.8% 37% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 23.6% 34% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 25.4% 31% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 29.4% 22.6% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 31.0% 19.6% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 6% 6% }
position = { 27.0% 22.9% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 41.9% 16.0% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 46.5% 17.0% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 48.9% 17.4% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 53.9% 17.4% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 56.7% 15.4% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 61.9% 16.4% }
entity_instance = "ui_flag_red_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 64.4% 19.8% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 75.6% 23.6% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 4% 4% }
position = { 81.0% 30.8% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 74.4% 49.6% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 75.6% 46.6% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 76.8% 43.1% }
entity_instance = "ui_flag_blue_entity"
}
activity_locale_vfx = {
size = { 5% 5% }
position = { 78.4% 37.8% }
entity_instance = "ui_flag_red_entity"
}
}
widget = {
widgetid = "locale_tournament3_west"
position = { 33% 75% }
}
}
## Locale Banner
widget_locale_banner = {
name = "locale_tournament3_west_banner"
using = Sound_EP2_Tournament_Locale_Button_Grounds
attachto = {
widgetid = locale_tournament3_west
}
}

Some files were not shown because too many files have changed in this diff Show more