#Triggers revolving around secrets #has_secret_unknown_by_root_trigger #Being_blackmailed_by_root_trigger #is_blackmailable_secret_trigger #secret_is_always_interesting_trigger has_secret_unknown_by_root_trigger = { any_secret = { NOT = { is_known_by = root } } } being_blackmailed_by_root_trigger = { root = { OR = { has_hook_of_type = { target = prev type = weak_blackmail_hook } has_hook_of_type = { target = prev type = strong_blackmail_hook } } } } is_blackmailable_secret_trigger = { #Should not include is known $PARTICIPANT$ = { save_temporary_scope_as = is_blackmailable_secret_participant } $BLACKMAILER$ = { save_temporary_scope_as = is_blackmailable_secret_blackmailer } is_shunned_or_criminal_for = scope:is_blackmailable_secret_participant can_be_exposed_by = scope:is_blackmailable_secret_blackmailer #Can we actually add a hook of the correct type trigger_if = { limit = { is_shunned_for = scope:is_blackmailable_secret_participant } custom_description = { text = "already_has_a_superior_hook" subject = scope:is_blackmailable_secret_blackmailer object = scope:is_blackmailable_secret_participant scope:is_blackmailable_secret_blackmailer = { can_add_hook = { type = weak_blackmail_hook target = scope:is_blackmailable_secret_participant } } } } trigger_if = { limit = { is_criminal_for = scope:is_blackmailable_secret_participant } custom_description = { text = "already_has_a_superior_hook" subject = scope:is_blackmailable_secret_blackmailer object = scope:is_blackmailable_secret_participant scope:is_blackmailable_secret_blackmailer = { can_add_hook = { type = strong_blackmail_hook target = scope:is_blackmailable_secret_participant } } } } #If an AI promised not to reveal a secret they have to be very dishonest to do it trigger_if = { limit = { exists = var:promised_not_to_reveal} custom_description = { text = "promised_not_to_reveal_secret" var:promised_not_to_reveal = scope:is_blackmailable_secret_blackmailer scope:is_blackmailable_secret_blackmailer = { is_ai = yes ai_honor <= medium_negative_ai_value } } } #Some things you can't blackmail others about custom_description = { text = "cant_blackmail_another_witch" subject = scope:is_blackmailable_secret_blackmailer NAND = { secret_type = secret_witch scope:is_blackmailable_secret_blackmailer = { is_witch_trigger = yes } } } # Can't blackmail a crypto-religionist of the same faith trigger_if = { limit = { secret_type = secret_crypto_religionist } custom_description = { text = cannot_blackmail_crypto_religionist_of_same_faith scope:is_blackmailable_secret_blackmailer = { NOR = { exists = secret_faith secret_faith ?= scope:is_blackmailable_secret_participant.secret_faith } } } } trigger_if = { limit = { secret_type = secret_lover } custom_description = { text = cannot_blackmail_own_lover_secret NOT = { secret_target = scope:is_blackmailable_secret_blackmailer } } } trigger_if = { limit = { secret_type = secret_unmarried_illegitimate_child } custom_description = { text = cannot_blackmail_over_own_bastard secret_target = { NOR = { mother = scope:is_blackmailable_secret_blackmailer real_father = scope:is_blackmailable_secret_blackmailer } } } } trigger_if = { limit = { secret_type = secret_disputed_heritage } custom_description = { text = cannot_blackmail_over_own_bastard NOT = { secret_target = { OR = { mother = scope:is_blackmailable_secret_blackmailer real_father = scope:is_blackmailable_secret_blackmailer } } } } } } secret_is_always_interesting_trigger = { #Even if they can't be used for blackmail OR = { secret_type = secret_lover secret_type = secret_murder secret_type = secret_murder_attempt secret_type = secret_disputed_heritage secret_type = secret_unmarried_illegitimate_child secret_type = secret_crypto_religionist } } #Checks whether a secret would incriminate its secret target if known #Parameters: # TARGET secret_is_incriminating_trigger = { OR = { exists = secret_target any_secret_participant = { count >= 1 } } OR = { AND = { secret_type = secret_lover secret_target = $TARGET$ } AND = { secret_type = secret_disputed_heritage OR = { secret_target = $TARGET$ secret_target.mother = $TARGET$ any_secret_participant = { this = $TARGET$ } } } AND = { secret_type = secret_unmarried_illegitimate_child OR = { secret_target = $TARGET$ secret_target.mother = $TARGET$ any_secret_participant = { this = $TARGET$ } } } } } ###Expose secret triggers### block_exposed_secret_general_notifications = { #Because you're already getting your own, special event OR = { #Is one of the involved parties this = scope:secret_exposer this = scope:exposed_secret_character this = scope:exposed_secret_owner AND = { exists = scope:exposed_secret_target this = scope:exposed_secret_target } #For lover secret: No events for spouses or lovers, they get infidelity_confrontation.1000 instead trigger_if = { limit = { scope:secret = { secret_type = secret_lover } } OR = { is_spouse_of = scope:exposed_secret_owner has_relation_lover = scope:exposed_secret_owner is_spouse_of = scope:exposed_secret_target has_relation_lover = scope:exposed_secret_target } } #For bastard secrets: No events for child mother and real father trigger_else_if = { limit = { scope:secret = { OR = { secret_type = secret_disputed_heritage secret_type = secret_unmarried_illegitimate_child } } } OR = { scope:exposed_secret_target.mother = scope:show_me #mother scope:exposed_secret_target.real_father = scope:show_me #real father } } trigger_else = { } #Just to avoid errors } } show_me_exposed_secret_event_trigger = { expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character #Is someone who cares OR = { is_spouse_of_even_if_dead = scope:exposed_secret_character is_close_family_of = scope:exposed_secret_character AND = { exists = scope:exposed_secret_character.player_heir scope:exposed_secret_character = { player_heir = scope:show_me } } AND = { scope:exposed_secret_character = { exists = liege } scope:exposed_secret_character = { liege = scope:show_me } } AND = { #For bastards, fathers also care $SECRET$ = { secret_type = secret_disputed_heritage } exists = scope:father this = scope:father } } } show_me_exposed_secret_feed_message_trigger = { expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character NOT = { show_me_exposed_secret_event_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } } #I.e. hasn't already been notified } expose_secret_scope_saving_trigger = { #Because we save the same scopes in two triggers that need to be the same save_temporary_scope_as = show_me $CHARACTER$ = { save_temporary_scope_as = exposed_secret_character #Most of the time this is owner, but for secrets with targets/other involved parties it can also be them } $SECRET$ = { secret_owner = { save_temporary_scope_as = exposed_secret_owner } trigger_if = { limit = { exists = secret_target } secret_target = { save_temporary_scope_as = exposed_secret_target } } } } ###Triggers for give_random_likely_secret_effect give_random_likely_secret_murder_attempt_victim_trigger = { is_ai = yes save_temporary_scope_as = victim scope:murderer = { NOT = { any_secret = { secret_type = secret_murder_attempt secret_target = scope:victim } } } } give_random_likely_secret_lover_trigger = { is_adult = yes is_ai = yes NOT = { any_relation = { type = lover this = scope:lover_1 } } NOT = { is_spouse_of = scope:lover_1 } NOT = { has_trait = celibate } opinion = { target = scope:lover_1 value >= 20 } reverse_opinion = { target = scope:lover_1 value >= 20 } save_temporary_scope_as = lover_2 possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } } give_random_likely_secret_incestous_lover_trigger = { is_adult = yes is_ai = yes NOT = { any_relation = { type = lover this = scope:lover_1 } } NOT = { is_spouse_of = scope:lover_1 } OR = { save_temporary_scope_as = lover_2 possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } AND = { matching_gender_and_sexuality_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } opinion = { target = scope:lover_1 value >= 40 } reverse_opinion = { target = scope:lover_1 value >= 40 } } } } #Simple Check if a given Secret Type is blackmailable # NOTE THAT THIS CAN ONLY EVER CORRECTLY EVALUATE SECRETS THAT THE TARGET DOES NOT ALREADY HAVE # ALSO NOTE THAT IT WILL ONLY EVER RETURN TRUE FOR SECRETS THAT ARE NOT RELIANT ON HAVING A VALID TARGET secret_type_is_blackmailable_simple_trigger = { # TYPE # TARGET save_temporary_scope_value_as = { name = type_flag value = flag:$TYPE$ } trigger_if = { limit = { scope:type_flag = flag:secret_deviant } secret_deviant_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_deviant_is_shunned_trigger = { OWNER = $TARGET$ } secret_deviant_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_homosexual } secret_homosexual_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_homosexual_is_shunned_trigger = { OWNER = $TARGET$ } secret_homosexual_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_cannibal } secret_cannibal_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_cannibal_is_shunned_trigger = { OWNER = $TARGET$ } secret_cannibal_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_non_believer } secret_non_believer_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_non_believer_is_shunned_trigger = { OWNER = $TARGET$ } secret_non_believer_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_incest } secret_incest_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_incest_is_shunned_trigger = { OWNER = $TARGET$ } secret_incest_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_witch } secret_witch_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_witch_is_shunned_trigger = { OWNER = $TARGET$ } secret_witch_is_criminal_trigger = { OWNER = $TARGET$ } } NOT = { $BLACKMAILER$ = { is_witch_trigger = yes } } } trigger_else_if = { limit = { scope:type_flag = flag:secret_crypto_religionist } secret_crypto_religionist_is_valid_trigger = { OWNER = $TARGET$ } OR = { secret_crypto_religionist_is_shunned_trigger = { OWNER = $TARGET$ } secret_crypto_religionist_is_criminal_trigger = { OWNER = $TARGET$ } } } trigger_else = { #Murder stuff, Bastard secrets, etc. always = no } } random_blackmailable_secret_can_be_added_simple_trigger = { $TARGET$ = { save_temporary_scope_as = target } OR = { AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_deviant TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_deviant } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_homosexual TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_homosexual } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_cannibal TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_cannibal } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_non_believer TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_non_believer } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_incest TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_incest } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_witch TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_witch } } } } AND = { secret_type_is_blackmailable_simple_trigger = { TYPE = secret_crypto_religionist TARGET = scope:target BLACKMAILER = $BLACKMAILER$ } scope:target = { NOT = { any_secret = { secret_type = secret_crypto_religionist } } } } } } # If during the council task find secret's the spymaster can fabricate a hook on the target spymaster_task_courtier_valid_for_hook_fabrication_trigger = { is_available_ai_adult = yes save_temporary_scope_as = target_check NOR = { this = scope:councillor root = { has_hook = scope:target_check } root = { any_scheme = { scheme_target_character = scope:target_character scheme_is_character_agent = scope:target_check } } any_secret = { # Should prioritise actually finding Secrets is_known_by = root } } }