﻿# 2.6.22 — The D: household dynamics.
# Extends CK3's own relationships/schemes instead of replacing them with a parallel simulation.

# Patron scope. Rebuild the visible household roster from the persistent intimate registry and current spouses.
domcom_the_d_prepare_roster_effect = {
    save_scope_as = domcom_d_patron
    clear_variable_list = domcom_the_d_roster
    if = {
        limit = { has_variable_list = domcom_intimate_registry }
        every_in_list = {
            variable = domcom_intimate_registry
            limit = { is_alive = yes age >= 18 }
            save_temporary_scope_as = domcom_d_member
            scope:domcom_d_patron = {
                if = { limit = { NOT = { any_in_list = { variable = domcom_the_d_roster this = scope:domcom_d_member } } } add_to_variable_list = { name = domcom_the_d_roster target = scope:domcom_d_member } }
            }
        }
    }
    every_spouse = {
        limit = { is_alive = yes age >= 18 }
        save_temporary_scope_as = domcom_d_member
        scope:domcom_d_patron = {
            if = { limit = { NOT = { any_in_list = { variable = domcom_the_d_roster this = scope:domcom_d_member } } } add_to_variable_list = { name = domcom_the_d_roster target = scope:domcom_d_member } }
        }
    }
}

# Patron scope. One bounded household beat; called at most once every 60 days.
domcom_the_d_pulse_effect = {
    if = {
        limit = {
            is_alive = yes
            age >= 18
            NOT = { has_character_flag = domcom_the_d_pulse_cooldown }
        }
        add_character_flag = { flag = domcom_the_d_pulse_cooldown days = 60 }
        domcom_the_d_prepare_roster_effect = yes
        clear_variable_list = domcom_d_seen_actors
        # At most three pair evaluations per pulse, regardless of harem/household size.
        domcom_the_d_pick_pair_effect = yes
        domcom_the_d_pick_pair_effect = yes
        domcom_the_d_pick_pair_effect = yes
        clear_variable_list = domcom_d_seen_actors
    }
}

# Patron scope.
domcom_the_d_pick_pair_effect = {
    if = {
        limit = { has_variable_list = domcom_the_d_roster }
        random_in_list = {
            variable = domcom_the_d_roster
            limit = { is_alive = yes NOT = { is_in_list = domcom_d_seen_actors } }
            save_temporary_scope_as = domcom_d_actor
        }
        if = {
            limit = { exists = scope:domcom_d_actor }
            add_to_variable_list = { name = domcom_d_seen_actors target = scope:domcom_d_actor }
            random_in_list = {
                variable = domcom_the_d_roster
                limit = { is_alive = yes NOT = { this = scope:domcom_d_actor } }
                save_temporary_scope_as = domcom_d_target
            }
            if = { limit = { exists = scope:domcom_d_target } domcom_the_d_resolve_pair_effect = yes }
        }
    }
}

# Patron scope; actor/target are temporary scopes.
domcom_the_d_resolve_pair_effect = {
    # Positive household chemistry: high opinion plus sociable/generous personalities can become real vanilla friendship.
    if = {
        limit = {
            scope:domcom_d_actor = {
                opinion = { target = scope:domcom_d_target value >= 55 }
                NOT = { has_relation_friend = scope:domcom_d_target }
                NOT = { has_relation_rival = scope:domcom_d_target }
                OR = { has_trait = gregarious has_trait = generous has_trait = compassionate has_trait = content }
            }
        }
        random = {
            chance = 18
            scope:domcom_d_actor = {
                set_relation_friend = scope:domcom_d_target
                add_character_modifier = { modifier = domcom_d_household_harmony years = 3 }
            }
            change_variable = { name = domcom_d_positive_beats add = 1 }
            scope:domcom_d_target = { add_character_modifier = { modifier = domcom_d_household_harmony years = 3 } }
        }
    }

    # Competitive chemistry: personality + genuinely poor opinion can harden into a vanilla rivalry.
    if = {
        limit = {
            scope:domcom_d_actor = {
                opinion = { target = scope:domcom_d_target value <= -35 }
                NOT = { has_relation_rival = scope:domcom_d_target }
                OR = { has_trait = ambitious has_trait = arrogant has_trait = vengeful has_trait = wrathful has_trait = paranoid has_trait = sadistic }
            }
        }
        random = {
            chance = 22
            scope:domcom_d_actor = {
                set_relation_rival = scope:domcom_d_target
                add_character_modifier = { modifier = domcom_d_household_tension years = 5 }
            }
            change_variable = { name = domcom_d_negative_beats add = 1 }
            scope:domcom_d_target = { add_character_modifier = { modifier = domcom_d_household_tension years = 5 } }
        }
    }

    # Extreme hostility can spill into CK3's own murder scheme system. Rare by design and entirely background.
    if = {
        limit = {
            scope:domcom_d_actor = {
                opinion = { target = scope:domcom_d_target value <= -70 }
                OR = { has_relation_rival = scope:domcom_d_target has_relation_nemesis = scope:domcom_d_target }
                intrigue >= 10
                OR = { has_trait = vengeful has_trait = sadistic has_trait = wrathful }
            }
        }
        random = {
            chance = 7
            scope:domcom_d_actor = {
                start_scheme = { type = murder target_character = scope:domcom_d_target }
                add_character_modifier = { modifier = domcom_d_household_blood_feud years = 10 }
            }
            change_variable = { name = domcom_d_scheme_beats add = 1 }
        }
    }
}
