﻿# Faith editor for CK3 1.20. Cached doctrine membership; live visibility and editing.
# All mutations revalidate the selected character and rite at execution time.

DI_faith_editor_init_sgui = {
    scope = character
    effect = {
        DI_fe_ensure_catalogue_effect = yes
        if = { limit = { NOT = { exists = var:DI_primary_character } } set_variable = { name = DI_primary_character value = root } }
        remove_variable = DI_fe_main_rite_mode
        remove_variable = DI_fe_add_tenet_mode
        remove_variable = DI_fe_personal_add_mode
        remove_variable = DI_fe_personal_remove_mode
        remove_variable = DI_doctrine_to_replace
        clear_variable_list = DI_core_tenets
        clear_global_variable_list = DI_core_tenets
        clear_variable_list = DI_main_tenets
        clear_global_variable_list = DI_main_tenets
        clear_variable_list = DI_marriage_tenets
        clear_global_variable_list = DI_marriage_tenets
        clear_variable_list = DI_crimes_tenets
        clear_global_variable_list = DI_crimes_tenets
        clear_variable_list = DI_clergy_tenets
        clear_global_variable_list = DI_clergy_tenets
        clear_variable_list = DI_other_tenets
        clear_global_variable_list = DI_other_tenets
        clear_variable_list = DI_doctrines_all
        clear_global_variable_list = DI_doctrines_all
    }
}

DI_fe_tenet_dlc_required_sgui = {
    scope = character
    saved_scopes = { tenet }
    is_valid = {
        exists = scope:tenet
        DI_fe_tenet_requires_dlc_trigger = yes
    }
}

DI_fe_tenet_dlc_available_sgui = {
    scope = character
    saved_scopes = { tenet }
    is_valid = {
        exists = scope:tenet
        DI_fe_tenet_dlc_available_trigger = yes
    }
}

DI_fe_target_current_sgui = {
    scope = character
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
    }
}

DI_fe_sync_target_sgui = {
    scope = character
    effect = {
        remove_variable = DI_fe_old_tenet
        remove_variable = DI_fe_add_tenet_mode
        remove_variable = DI_fe_picker_rite
        remove_variable = DI_fe_rite
        remove_variable = DI_fe_personal_add_mode
        remove_variable = DI_fe_personal_remove_mode
        remove_variable = DI_fe_character
        if = {
            limit = { exists = var:DI_primary_character var:DI_primary_character = { is_alive = yes } }
            set_variable = { name = DI_fe_character value = var:DI_primary_character }
            if = {
                limit = { has_variable = DI_fe_main_rite_mode exists = var:DI_primary_character.faith.main_rite }
                set_variable = { name = DI_fe_rite value = var:DI_primary_character.faith.main_rite }
            }
            else_if = {
                limit = { NOT = { has_variable = DI_fe_main_rite_mode } exists = var:DI_primary_character.rite }
                set_variable = { name = DI_fe_rite value = var:DI_primary_character.rite }
            }
        }
    }
}

DI_fe_use_character_rite_sgui = {
    scope = character
    effect = {
        remove_variable = DI_fe_main_rite_mode
    }
}

DI_fe_use_main_rite_sgui = {
    scope = character
    effect = {
        set_variable = { name = DI_fe_main_rite_mode value = yes }
    }
}

DI_fe_cancel_tenet_sgui = {
    scope = character
    effect = {
        remove_variable = DI_fe_old_tenet
        remove_variable = DI_fe_personal_add_mode
        remove_variable = DI_fe_personal_remove_mode
        remove_variable = DI_fe_add_tenet_mode
        remove_variable = DI_fe_picker_rite
    }
}

DI_fe_open_add_tenet_sgui = {
    scope = character
    saved_scopes = { target_rite }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:target_rite
        scope:target_rite = var:DI_fe_rite
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:target_rite
                scope:target_rite = var:DI_fe_rite
            }
            remove_variable = DI_fe_old_tenet
            set_variable = { name = DI_fe_add_tenet_mode value = yes }
            remove_variable = DI_fe_personal_add_mode
            remove_variable = DI_fe_personal_remove_mode
            set_variable = { name = DI_fe_picker_rite value = scope:target_rite }
        }
    }
}

DI_fe_select_tenet_sgui = {
    scope = character
    saved_scopes = { tenet target_rite }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:tenet
        scope:target_rite = var:DI_fe_rite
        scope:target_rite = {
            rite_has_tenet = scope:tenet
        }
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:tenet
                scope:target_rite = var:DI_fe_rite
                scope:target_rite = { rite_has_tenet = scope:tenet }
            }
            remove_variable = DI_fe_add_tenet_mode
            set_variable = { name = DI_fe_old_tenet value = scope:tenet }
            remove_variable = DI_fe_personal_add_mode
            remove_variable = DI_fe_personal_remove_mode
            set_variable = { name = DI_fe_picker_rite value = scope:target_rite }
        }
    }
}

DI_fe_tenet_dlc_required_sgui = {
    scope = character
    saved_scopes = { tenet }
    is_valid = {
        exists = scope:tenet
        DI_fe_tenet_requires_dlc_trigger = yes
    }
}

DI_fe_replace_tenet_sgui = {
    scope = character
    saved_scopes = { tenet target_rite }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:tenet
        DI_fe_tenet_dlc_available_trigger = yes
        exists = var:DI_fe_picker_rite
        scope:target_rite = var:DI_fe_rite
        var:DI_fe_picker_rite = scope:target_rite
        scope:target_rite = {
            NOT = { rite_has_tenet = scope:tenet }
        }
        OR = {
            AND = {
                has_variable = DI_fe_add_tenet_mode
            }
            AND = {
                NOT = { has_variable = DI_fe_add_tenet_mode }
                exists = var:DI_fe_old_tenet
                scope:target_rite = {
                    rite_has_tenet = root.var:DI_fe_old_tenet
                }
            }
        }
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:tenet
                DI_fe_tenet_dlc_available_trigger = yes
                exists = var:DI_fe_picker_rite
                scope:target_rite = var:DI_fe_rite
                var:DI_fe_picker_rite = scope:target_rite
                scope:target_rite = {
                    NOT = { rite_has_tenet = scope:tenet }
                }
                OR = {
                    AND = {
                        has_variable = DI_fe_add_tenet_mode
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_add_tenet_mode }
                        exists = var:DI_fe_old_tenet
                        scope:target_rite = {
                            rite_has_tenet = root.var:DI_fe_old_tenet
                        }
                    }
                }
            }
            if = {
                limit = { has_variable = DI_fe_add_tenet_mode }
                scope:target_rite = {
                    add_rite_tenet = scope:tenet
                }
            }
            else = {
                scope:target_rite = {
                    remove_rite_tenet = root.var:DI_fe_old_tenet
                    add_rite_tenet = scope:tenet
                }
            }
            remove_variable = DI_fe_old_tenet
            remove_variable = DI_fe_add_tenet_mode
            remove_variable = DI_fe_picker_rite
        }
    }
}

DI_fe_set_doctrine_sgui = {
    scope = character
    saved_scopes = { doctrine target_rite main_only }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:doctrine
        scope:target_rite = var:DI_fe_rite
        OR = {
            scope:main_only = flag:no
            scope:target_rite = var:DI_primary_character.faith.main_rite
        }
        scope:target_rite = { NOT = { rite_has_doctrine = scope:doctrine } }
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:doctrine
                scope:target_rite = var:DI_fe_rite
                OR = {
                    scope:main_only = flag:no
                    scope:target_rite = var:DI_primary_character.faith.main_rite
                }
                scope:target_rite = { NOT = { rite_has_doctrine = scope:doctrine } }
            }
            # Native replacement overwrites only this doctrine group.
            scope:target_rite = { change_rite_doctrine = scope:doctrine }
        }
    }
}

DI_fe_remove_doctrine_sgui = {
    scope = character
    saved_scopes = { doctrine target_rite main_only }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:doctrine
        scope:target_rite = var:DI_fe_rite
        OR = {
            scope:main_only = flag:no
            scope:target_rite = var:DI_primary_character.faith.main_rite
        }
        scope:target_rite = { rite_has_doctrine = scope:doctrine }
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:doctrine
                scope:target_rite = var:DI_fe_rite
                OR = {
                    scope:main_only = flag:no
                    scope:target_rite = var:DI_primary_character.faith.main_rite
                }
                scope:target_rite = { rite_has_doctrine = scope:doctrine }
            }
            scope:target_rite = { remove_rite_doctrine = scope:doctrine }
        }
    }
}

DI_fe_remove_tenet_sgui = {
    scope = character
    saved_scopes = { tenet target_rite }
    is_valid = {
        exists = var:DI_primary_character
        var:DI_primary_character = { is_alive = yes }
        exists = var:DI_fe_character
        var:DI_fe_character = var:DI_primary_character
        exists = var:DI_fe_rite
        OR = {
            AND = {
                has_variable = DI_fe_main_rite_mode
                var:DI_primary_character.faith.main_rite = var:DI_fe_rite
            }
            AND = {
                NOT = { has_variable = DI_fe_main_rite_mode }
                var:DI_primary_character.rite = var:DI_fe_rite
            }
        }
        exists = scope:tenet
        scope:target_rite = var:DI_fe_rite
        scope:target_rite = { rite_has_tenet = scope:tenet }
    }
    effect = {
        if = {
            limit = {
                exists = var:DI_primary_character
                var:DI_primary_character = { is_alive = yes }
                exists = var:DI_fe_character
                var:DI_fe_character = var:DI_primary_character
                exists = var:DI_fe_rite
                OR = {
                    AND = {
                        has_variable = DI_fe_main_rite_mode
                        var:DI_primary_character.faith.main_rite = var:DI_fe_rite
                    }
                    AND = {
                        NOT = { has_variable = DI_fe_main_rite_mode }
                        var:DI_primary_character.rite = var:DI_fe_rite
                    }
                }
                exists = scope:tenet
                scope:target_rite = var:DI_fe_rite
                scope:target_rite = { rite_has_tenet = scope:tenet }
            }
            scope:target_rite = { remove_rite_tenet = scope:tenet }
        }
    }
}
