N3OW/common/scripted_triggers/00_secret_triggers.txt

595 lines
14 KiB
Text

#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
}
}
}