N3OW/N3OW/common/scripted_effects/20_health_effects.txt
2025-10-30 12:41:45 +00:00

4103 lines
97 KiB
Text

#health effects list#
###################
# DISEASE EFFECTS #
###################
### GENERAL CONTRACT/RECOVER EFFECTS ###
# contract_disease_effect - Adds disease trait, sends treatment and notification events etc. NO contraction event. Needs argument DISEASE (trait name) and TREATMENT_EVENT (yes/no).
# contract_disease_notify_effect - Sends a "contracted disease" event in 5-15 days. The event checks if the disease is valid and runs contract_disease_effect to apply the disease trait. Needs argument DISEASE (trait name).
# recover_from_disease_effect - Checks if has disease, removes it and sets any immunity, and sends appropriate notifications to other characters. Needs argument DISEASE (trait name). Does not send event to character who contracts disease.
#recover_from_disease_notify_effect - Checks if has disease, removes it and sets any immunity in an event for the character in question, and sends appropriate notifications to other characters. Needs argument DISEASE (trait name).
### STD EFFECTS ###
# contract_lovers_pox_from - sends the scoped character "contracted lover's pox" event if argument PARTNER has lover's pox. Uses PARTNER in event.
# contract_great_pox_from - sends the scoped character "contracted early lover's pox" event if argument PARTNER has great pox. Uses PARTNER in event.
# risk_of_std_from_effect - 50% chance of running contract_lovers_pox_from effect and 30% chance of running contract_great_pox_from effect
### CONTAGIOUS DISEASE ###
# create_contagion_list_effect - Creates a list of characters who might contract contagious disease (smallpox/plague) from scope
### SIDE EFFECTS ###
# epilepsy_fever_risk_effect
# epilepsy_brain_trauma_risk_effect
###############################
# GAIN/INCREASE WOUND EFFECTS #
###############################
# increase_wounds_no_death_effect - increases wound level without killing
# increase_wounds_effect - increases wound level with chance of death
# maimed_in_battle_effect
########################################
#EFFECTS FOR WEIGHT GAIN/LOSS #
########################################
#target_weight_modifier_effect - Increases character variable that's used in the weight balancing
########################################
#EFFECTS FOR COURT PHYSICIAN TREATMENT #
########################################
### COURT PHYSICIAN MANAGEMENT ###
# set_court_physician_effect
# fire_court_physician_effect
# save_court_physician_as
# invalidate_physician_effect
### COURT PHYSICIAN RANK UP ###
#physician_level_up_chance_effect
#mystic_level_up_chance_effect
#physician_rank_up_tooltip_effect
### DISEASE TREATMENT OPTIONS ###
# safe_disease_treatment_effect
# risky_disease_treatment_effect
# mystic_disease_treatment_effect
# no_disease_treatment_effect
# find_court_physician_effect
# deny_disease_treatment_effect
### WOUND TREATMENT OPTIONS ###
# safe_wound_treatment_effect
# risky_wound_treatment_effect
### DISEASE TREATMENT OUTCOMES ###
# set_worst_disease_effect
# add_disease_treatment_modifier_effect
# disease_treatment_results_effect
# disease_treatment_result_tooltip_effect
# remove_disease_treatment_effect
### WOUND TREATMENT OUTCOMES ###
# add_wound_treatment_modifier_effect
# wound_treatment_result_tooltip_effect
# wound_treatment_results_effect
### DISEASE TREATMENT LOGIC ###
# save_health_court_owner_effect
# pick_own_disease_treatment_effect
# decide_who_picks_disease_treatment_effect
# liege_picks_treatment_effect
### WOUND LOGIC ###
# pick_own_wound_treatment_effect
# decide_who_picks_wound_treatment_effect
### FAILED TREAMENT EFFECTS ###
# add_failed_treatment_of_me_opinions_effect
# add_failed_treatment_of_kin_opinions_effect
# downgrade_failed_treatment_of_me_opinions_effect
# downgrade_failed_treatment_of_kin_opinions_effect
# execute_physician_effect
# imprison_physician_effect
# chastise_physician_effect
# forgive_physician_effect
### DISEASE MESSAGES ###
# inform_liege_about_disease_treatment_effect
# activate_outbreak_story_effect
### WOUND MESSAGES ###
# inform_liege_about_wound_treatment_effect
######################
#EFFECTS FOR SUICIDE #
######################
# committed_suicide_effect
# attempted_suicide_effect
##############################################################################################
# LIST ENDS HERE
####################
# DISEASE EFFECTS #
####################
#Adds the disease in question and sends notifications to everyone who should know. Checks validity and sends treatment event. Needs the arguments DISEASE (trait name, only exception is early_great_pox - it should be added as great_pox and then the effect will figure out whether the character should have early_great_pox first) and TREATMENT_EVENT (yes/no). Does NOT send an event to the character who gets the disease.
contract_disease_effect = {
if = { #Is the disease valid?
limit = { can_contract_disease_trigger = { DISEASE = $DISEASE$ } }
hidden_effect = {
#SET SCOPES
save_scope_as = sick_character
save_scope_value_as = {
name = disease_type
value = flag:$DISEASE$
}
save_temporary_scope_value_as = {
name = treatment_event
value = flag:$TREATMENT_EVENT$
}
if = {
limit = { #Should I get early great pox instead of great pox?
scope:disease_type = flag:great_pox
NOR = {
has_trait = lovers_pox
has_trait = early_great_pox
}
}
save_scope_value_as = {
name = disease_type
value = flag:early_great_pox
}
}
#Data collection
disease_data_save_contraction_effect = { DISEASE = $DISEASE$ }
#TREATMENT EVENT
if = {
limit = {
scope:treatment_event = flag:yes
}
trigger_event = {
id = health.3100
days = 5
}
}
else_if = {
limit = { scope:treatment_event = flag:no } #This is just here to stop errors
}
}
#NON-CONTAGIOUS DISEASES
if = {
limit = {
OR = {
scope:disease_type = flag:ill
scope:disease_type = flag:pneumonic
scope:disease_type = flag:gout_ridden
scope:disease_type = flag:leper
scope:disease_type = flag:cancer
scope:disease_type = flag:ergotism
}
}
if = { #Removes ill if progressing to pneumonia
limit = {
scope:disease_type = flag:pneumonic
has_trait = ill
}
remove_trait = ill
}
add_trait_force_tooltip = $DISEASE$
}
#CONTAGIOUS DISEASES
if = {
limit = {
OR = {
scope:disease_type = flag:smallpox
scope:disease_type = flag:measles
scope:disease_type = flag:dysentery
scope:disease_type = flag:bubonic_plague
scope:disease_type = flag:typhus
scope:disease_type = flag:consumption
}
}
add_trait_force_tooltip = $DISEASE$
}
#STD DISEASES
else_if = { #Lover's pox
limit = { scope:disease_type = flag:lovers_pox }
add_trait_force_tooltip = lovers_pox
hidden_effect = {
#Trigger regular contagion checks
trigger_event = {
id = health.1200
days = { 60 1000 } #This first one can happen quite fast, the following checks are delayed 250-10000 days depending on traits
}
}
}
else_if = { #Early great pox
limit = { scope:disease_type = flag:early_great_pox }
add_trait_force_tooltip = early_great_pox
hidden_effect = {
trigger_event = {
id = health.1013 #Reveals the true disease
days = { 90 150 }
}
}
}
else_if = { #Great pox
limit = { scope:disease_type = flag:great_pox }
hidden_effect = {
remove_trait = lovers_pox #If you get Great Pox and already have lover's pox, we pretend that lover's pox was the first symptoms
remove_trait = early_great_pox
}
add_trait_force_tooltip = great_pox
hidden_effect = {
#Trigger regular contagion checks
trigger_event = {
id = health.1201
days = { 250 1500 } #This first one can happen quite fast, the following checks are delayed 350-10000 days depending on traits
}
}
}
#RECOVERY
if = { #Ill
limit = { scope:disease_type = flag:ill }
trigger_event = {
id = health.1101
days = { ill_recovery_min ill_recovery_max }
}
}
else_if = { #Pneumonic
limit = { scope:disease_type = flag:pneumonic }
trigger_event = {
id = health.1102
days = { pneumonic_recovery_min pneumonic_recovery_max }
}
}
else_if = { #Gout
limit = { scope:disease_type = flag:gout_ridden }
random = {
chance = 25
modifier = {
has_trait = gluttonous
add = -15
}
modifier = {
has_trait = temperate
add = 15
}
trigger_event = {
id = health.1103
days = { gout_ridden_recovery_min gout_ridden_recovery_max } #1 to 30 years
}
}
}
else_if = { #Typhus
limit = { scope:disease_type = flag:typhus }
trigger_event = {
id = health.1105
days = { 45 150 }
}
}
else_if = { #Consumption
limit = { scope:disease_type = flag:consumption }
trigger_event = {
id = health.1106
days = { 365 2190 } #1 to 6 years
}
}
else_if = { #Cancer
limit = { scope:disease_type = flag:cancer }
random = {
chance = 1
trigger_event = {
id = health.1107
days = { 365 3650 } #1 to 10 years
}
}
}
else_if = { #Great pox
limit = {
OR = {
scope:disease_type = flag:early_great_pox
scope:disease_type = flag:great_pox
}
}
trigger_event = {
id = health.1109
days = { 730 5475 } #2 to 15 years (note that early pox progresses into great pox in 60-150 days and great pox leads to lunacy after 5 to 15 years)
}
}
else_if = { #Smallpox
limit = { scope:disease_type = flag:smallpox }
trigger_event = {
id = health.1110
days = { smallpox_min_recovery_time smallpox_max_recovery_time }
}
}
else_if = { #Bubonic Plague
limit = { scope:disease_type = flag:bubonic_plague }
trigger_event = {
id = health.1111
days = { bubonic_plague_min_recovery_time bubonic_plague_max_recovery_time }
}
}
else_if = { #Measles
limit = { scope:disease_type = flag:measles }
trigger_event = {
id = health.1112
days = { measles_min_recovery_time measles_max_recovery_time }
}
}
else_if = { #Dysentery
limit = { scope:disease_type = flag:dysentery }
trigger_event = {
id = health.1113
days = { dysentery_min_recovery_time dysentery_max_recovery_time }
}
}
else_if = { #Ergotism
limit = { scope:disease_type = flag:ergotism }
trigger_event = {
id = health.1114
days = { ergotism_min_recovery_time ergotism_max_recovery_time }
}
}
#No recovery for leper and lover's pox
#EPILEPSY RISK
if = {
limit = { scope:disease_type = flag:ill }
epilepsy_fever_risk_effect = { CHANCE = 1 }
}
else_if = {
limit = {
OR = {
scope:disease_type = flag:pneumonic
scope:disease_type = flag:typhus
scope:disease_type = flag:consumption
scope:disease_type = flag:measles
scope:disease_type = flag:dysentery
scope:disease_type = flag:smallpox
scope:disease_type = flag:bubonic_plague
}
}
epilepsy_fever_risk_effect = { CHANCE = 5 }
}
#NOTIFICATIONS: CONTAGIOUS DISEASE, FAMILY & SEX PARTNER STD, NOTIFICATIONS & LIEGE TREATMENT EVENTS
#List creation:
#Imprisoner/court owner if contagious
if = {
limit = {
OR = {
scope:disease_type = flag:smallpox
scope:disease_type = flag:bubonic_plague
scope:disease_type = flag:measles
scope:disease_type = flag:dysentery
scope:disease_type = flag:typhus
scope:disease_type = flag:consumption
}
is_ruler = no
has_health_court_owner_trigger = yes #Imprisoner or court owner
}
save_health_court_owner_effect = { SCOPE_NAME = health_court_owner }#Imprisoner or court owner
scope:health_court_owner = {
add_to_temporary_list = disase_notification_list
}
}
#Sex partners if STD
if = {
limit = {
OR = {
scope:disease_type = flag:lovers_pox
scope:disease_type = flag:early_great_pox
scope:disease_type = flag:great_pox
}
}
every_consort = {
add_to_temporary_list = disase_notification_list
}
every_relation = {
type = lover
add_to_temporary_list = disase_notification_list
}
}
#Family if the disease is somewhat dangerous
if = {
limit = {
sick_enough_for_relative_to_care_trigger = yes
}
every_parent = {
limit = {
is_playable_character = yes
}
add_to_temporary_list = disase_notification_list
}
every_spouse = {
limit = {
is_playable_character = yes
}
add_to_temporary_list = disase_notification_list
}
every_heir_title = {
limit = {
exists = holder
}
holder = {
if = {
limit = {
player_heir = scope:sick_character
}
add_to_temporary_list = disase_notification_list
}
}
}
}
#Go through list and send notifications
every_in_list = {
list = disase_notification_list
#Send a STD warning event
if = {
limit = {
OR = {
scope:disease_type = flag:lovers_pox
scope:disease_type = flag:early_great_pox
scope:disease_type = flag:great_pox
}
OR = {
is_consort_of = scope:sick_character
has_relation_lover = scope:sick_character
}
}
scope:sick_character = { save_scope_as = std_partner }
if = {
limit = { scope:disease_type = flag:great_pox }
trigger_event = {
id = health.2002 #Partner has great pox
days = { 7 14 }
}
}
else = {
trigger_event = {
id = health.2001 #Partner has lover's pox/early great great pox
days = { 7 14 }
}
}
}
#Send a notification/treatment event to family
else_if = {
limit = {
OR = {
#It's a player heir
trigger_if = {
limit = { exists = player_heir }
player_heir = scope:sick_character
}
#Or a child/spouse who is really sick or this character has to pick their treatment
AND = {
is_spouse_of = scope:sick_character #we only send you your spouse and primary heir to avoid event spam with plagues
OR = {
#The sick character is dying
health < death_chance_dying_health
#This character gets to pick sick character's treatment
trigger_if = {
limit = { exists = scope:sick_character.liege }
this = scope:sick_character.liege
scope:sick_character = { liege_picks_treatment_trigger = yes }
}
}
}
}
}
trigger_event = {
id = health.2201 #Important character is sick
days = 3
}
#set a variable, so you are sure to get a follow-up
if = {
limit = { is_ai = no }
scope:sick_character = {
add_to_variable_list = {
name = recovery_event_receivers
target = prev
}
}
}
}
else_if = {
limit = {
exists = scope:epidemic
is_target_in_variable_list = {
name = notified_of_epidemics
target = scope:epidemic
}
}
# Don't get spammed by courtiers and guests falling sick during epidemics
}
#Send a feed message
else = {
send_interface_message = {
type = msg_disease_contraction
left_icon = scope:sick_character
localization_values = {
disease_trait = trait:$DISEASE$
message_receiver = this
}
show_as_tooltip = {
scope:sick_character = {
if = {
limit = { scope:disease_type = flag:early_great_pox }
add_trait_force_tooltip = early_great_pox
}
else = {
add_trait_force_tooltip = $DISEASE$
}
}
}
}
if = {
limit = { is_ai = no }
add_to_variable_list = {
name = notified_of_epidemics
target = scope:epidemic
}
}
}
}
}
hidden_effect = {
if = {
limit = {
exists = scope:epidemic
}
give_epidemic_immunity = { EPIDEMIC = scope:epidemic }
# Give appropriate memory
if = {
limit = {
scope:disease_type ?= flag:bubonic_plague
}
create_character_memory = {
type = ce1_contracted_black_death
}
}
else = {
create_character_memory = {
type = ce1_contracted_epidemic
}
scope:new_memory = {
if = {
limit = {
NOT = { exists = var:epidemic_infected }
}
set_variable = {
name = epidemic_infected
value = scope:epidemic.epidemic_type.epidemic_trait
}
}
}
}
}
}
}
#Triggers an event giving you the disease (if you meet the conditions) and notifying everyone who should know. Needs the arguments DISEASE trait name, only exception is early_great_pox - it should be added as great_pox and then the effect will figure out whether the character should have early_great_pox first)
contract_disease_notify_effect = {
save_scope_value_as = {
name = disease_type
value = flag:$DISEASE$
}
#Ill
if = {
limit = { scope:disease_type = flag:ill }
trigger_event = { id = health.1001 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:pneumonic }
trigger_event = { id = health.1002 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:gout_ridden }
trigger_event = { id = health.1003 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:leper }
trigger_event = { id = health.1004 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:typhus }
trigger_event = { id = health.1005 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:consumption }
trigger_event = { id = health.1006 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:cancer }
trigger_event = { id = health.1007 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:lovers_pox }
trigger_event = { id = health.1008 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:great_pox }
trigger_event = { id = health.1009 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:smallpox }
trigger_event = { id = health.1010 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:measles }
trigger_event = { id = health.1015 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:dysentery }
trigger_event = { id = health.1016 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:ergotism }
trigger_event = { id = health.1017 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:bubonic_plague }
trigger_event = { id = health.1011 days = { 5 15 } }
}
}
#Removes the disease in question and sends notifications to everyone who should know. Needs the arguments DISEASE (trait name, only exception is early_great_pox - it should be removed as great_pox). Does NOT send an event to the character who gets the disease.
recover_from_disease_effect = {
hidden_effect = {
save_scope_value_as = {
name = disease_type
value = flag:$DISEASE$
}
if = {
limit = {
has_trait = early_great_pox
scope:disease_type = flag:great_pox
}
save_scope_value_as = {
name = disease_type
value = flag:early_great_pox
}
}
}
if = { #They actually have the disease you want to remove
limit = { has_trait = $DISEASE$ }
save_scope_as = sick_character
#Notifications (first, because some notifications need to check health which are changed when traits are removed)
hidden_effect = {
#IMPORTANT CHARACTER (add to list)
if = {
limit = { #The disease has to be somewhat dangerous
OR = {
health < death_chance_dying_health
NOR = {
scope:disease_type = flag:ill
scope:disease_type = flag:gout_ridden
scope:disease_type = flag:lovers_pox
scope:disease_type = flag:early_great_pox
}
}
}
every_parent = {
limit = { is_playable_character = yes }
add_to_temporary_list = disase_notification_list
}
every_child = {
limit = { is_playable_character = yes }
add_to_temporary_list = disase_notification_list
}
every_spouse = {
limit = {
is_playable_character = yes
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
every_heir_title = {
limit = {
exists = holder
}
holder = {
if = {
limit = {
player_heir ?= scope:sick_character
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
}
}
}
#PARTNERS WHO WANT TO KNOW ABOUT STDS (add to list)
if = {
limit = {
OR = {
scope:disease_type = flag:great_pox
scope:disease_type = flag:lovers_pox
scope:disease_type = flag:early_great_pox
}
}
every_relation = {
type = lover
limit = {
is_playable_character = yes
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
every_concubine = {
limit = {
is_playable_character = yes
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
}
#IMPOTANT CHARACTER NOTIFICATION EVENT
every_parent = {
limit = {
inform_about_relative_recovery_trigger = yes
}
add_to_temporary_list = disase_notification_list
}
every_spouse = {
limit = {
inform_about_relative_recovery_trigger = yes
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
every_heir_title = {
limit = {
exists = holder
}
holder = {
if = {
limit = {
player_heir = scope:sick_character
inform_about_relative_recovery_trigger = yes
NOT = { is_in_list = disase_notification_list }
}
add_to_temporary_list = disase_notification_list
}
}
}
#Go through list and send notifications
every_in_list = {
list = disase_notification_list
if = {
limit = {
OR = {
#This character received an event when
scope:sick_character = {
is_target_in_variable_list = {
name = recovery_event_receivers
target = prev
}
}
#It's your player heir
trigger_if = {
limit = { exists = player_heir }
player_heir = scope:sick_character
}
}
}
trigger_event = health.2202
}
else = {
save_scope_as = message_receiver
send_interface_message = {
type = msg_disease_recovery
left_icon = scope:sick_character
title = disease_recovery_feed_message.t
show_as_tooltip = {
scope:sick_character = {
if = {
limit = { scope:disease_type = flag:early_great_pox }
remove_trait_force_tooltip = early_great_pox
}
else = {
remove_trait_force_tooltip = $DISEASE$
}
}
}
}
}
}
}
clear_variable_list = recovery_event_receivers
#TRAIT REMOVAL
remove_trait = $DISEASE$
#IMMUNITY
hidden_effect = {
if = {
limit = { scope:disease_type = flag:smallpox }
add_character_flag = disease_immunity_smallpox
}
else_if = {
limit = { scope:disease_type = flag:measles }
add_character_flag = disease_immunity_measles
}
else_if = {
limit = { scope:disease_type = flag:bubonic_plague }
add_character_flag = disease_immunity_bubonic_plague
}
}
}
}
#Triggers an event removing the disease (if you meet the conditions) and notifying everyone who should know. Needs the arguments DISEASE trait name. No events exist for leper, lovers_pox and early_great_pox.
recover_from_disease_notify_effect = {
save_scope_value_as = {
name = disease_type
value = flag:$DISEASE$
}
if = {
limit = { scope:disease_type = flag:ill }
trigger_event = { id = health.1101 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:pneumonic }
trigger_event = { id = health.1102 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:gout_ridden }
trigger_event = { id = health.1103 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:typhus }
trigger_event = { id = health.1105 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:consumption }
trigger_event = { id = health.1106 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:cancer }
trigger_event = { id = health.1107 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:great_pox }
trigger_event = { id = health.1109 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:smallpox }
trigger_event = { id = health.1110 days = { 5 15 } }
}
else_if = {
limit = { scope:disease_type = flag:bubonic_plague }
trigger_event = { id = health.1111 days = { 5 15 } }
}
}
#If partner has lover's pox, the character gets it through an event. Needs argument PARTNER
contract_lovers_pox_from = {
$PARTNER$ = { save_scope_as = infecting_partner }
if = {
limit = { scope:infecting_partner = { has_trait = lovers_pox } }
contract_disease_notify_effect = { DISEASE = lovers_pox }
}
}
#If partner has great pox, the character gets it through an event. Needs argument PARTNER
contract_great_pox_from = {
$PARTNER$ = { save_scope_as = infecting_partner }
if = {
limit = {
scope:infecting_partner = {
OR = {
has_trait = early_great_pox
has_trait = great_pox
}
}
}
contract_disease_notify_effect = { DISEASE = great_pox }
}
}
#50% risk of herpes (if partner has it) and 30% risk of great pox (if partner has it). Added through event. Needs argument PARTNER
risk_of_std_from_effect = {
random = {
chance = 50
modifier = {
add = -30
has_perk = wash_your_hands_perk
}
contract_lovers_pox_from = { PARTNER = $PARTNER$ }
}
random = {
chance = 30
modifier = {
add = -10
has_perk = wash_your_hands_perk
}
modifier = {
add = -30
has_character_flag = contraction_cooldown_great_pox
}
contract_great_pox_from = { PARTNER = $PARTNER$ }
}
}
#Creates a list of characters which might contract a disease from you (for plague and smallpox)
create_contagion_list_effect = {
$CONTAGION_COURT_OWNER$ = {
if = {
limit = {
NOR = {
this = $SICK_CHARACTER$
is_in_list = contagion_list
}
}
add_to_temporary_list = contagion_list
}
every_courtier_or_guest = {
limit = {
NOR = {
this = $SICK_CHARACTER$
is_in_list = contagion_list
}
}
add_to_temporary_list = contagion_list
}
every_prisoner = {
limit = {
NOR = {
this = $SICK_CHARACTER$
is_in_list = contagion_list
}
}
add_to_temporary_list = contagion_list
}
}
$SICK_CHARACTER$ = {
every_scheme = {
limit = {
friendly_scheme_trigger = yes
NOT = { scheme_target_character = { is_in_list = contagion_list } }
}
scheme_target_character = { add_to_temporary_list = contagion_list }
}
every_targeting_scheme = {
limit = {
friendly_scheme_trigger = yes
NOT = { scheme_owner = { is_in_list = contagion_list } }
}
scheme_owner = { add_to_temporary_list = contagion_list }
}
}
}
### SIDE EFFECTS ###
epilepsy_fever_risk_effect = {
hidden_effect = {
if = {
limit = { age <= 12 }
random = {
chance = $CHANCE$
modifier = {
age >= 9
factor = 0.7
}
debug_log = "Epilepsy: fever"
trigger_event = {
id = trait_specific.2001 #Gain "possessed"
days = { 30 300 }
}
}
}
}
}
epilepsy_brain_trauma_risk_effect = {
hidden_effect = {
random = {
chance = $CHANCE$
debug_log = "Epilepsy: brain trauma"
trigger_event = {
id = trait_specific.2001 #Gain "possessed"
days = { 30 300 }
}
}
}
}
###############################
###############################
# GAIN/INCREASE WOUND EFFECTS #
###############################
###############################
increase_wounds_no_death_effect = {
save_temporary_scope_value_as = {
name = treatment_type
value = flag:$REASON$
}
change_trait_rank = {
trait = wounded
rank = 1
max = 3
}
if = { #Wounds from treatments give no infection and no additional treatment
limit = { NOT = { scope:treatment_type = flag:treatment } }
#CHANCE OF INFECTION
hidden_effect = {
random = {
chance = 10
trigger_event = {
id = health.0201
days = { 30 60 }
}
}
}
#HANDLE TREATMENT
if = { #To send notification message or trigger the right event
limit = {
has_trait_rank = {
trait = wounded
rank = 1
}
court_physician_available_trigger = yes
}
save_scope_as = sick_character
safe_wound_treatment_effect = yes #Wounded 1 only gives a "result of treatment" notification" if you have a physician, i.e. you get no events about it.
}
else_if = {
limit = {
has_trait_rank = {
trait = wounded
rank = 2
}
has_recent_wound_treatment_trigger = no
}
#A "real" event if you're not receiving treatment
#Nothing happens if you're already being treated for wounds
trigger_event = {
id = health.0102
days = { 2 3 }
}
}
else_if = {
limit = {
has_trait_rank = {
trait = wounded
rank = 3
}
has_recent_wound_treatment_trigger = no
}
#A "real" event if you're not receiving treatment
#Nothing happens if you're already being treated for wounds
trigger_event = {
id = health.0104
days = { 2 3 }
}
#Epilepsy risk
epilepsy_brain_trauma_risk_effect = { CHANCE = 5 }
}
}
# To stop the game from complaining about unused character flags since we only specifically check
# the treatment reason for risk of further or infection
if = {
limit = {
exists = flag:$REASON$
}
}
}
increase_wounds_children_no_death_effect = {
hidden_effect = {
random_list = {
75 = {
if = {
limit = {
has_character_modifier = scratched_and_bruised
}
remove_character_modifier = scratched_and_bruised
}
add_character_modifier = {
modifier = scratched_and_bruised
years = 3
}
}
25 = {
increase_wounds_no_death_effect = { REASON = wounds }
}
}
}
}
#increase_wounds_effect
increase_wounds_effect = {
if = {
limit = {
has_trait_rank = {
trait = wounded
rank < 3
}
}
increase_wounds_no_death_effect = { REASON = $REASON$ }
}
else_if = { #Using an if because this needs to never go wrong
limit = {
has_trait_rank = {
trait = wounded
rank = 3
}
}
death = {
death_reason = death_$REASON$
}
}
}
maimed_in_battle_effect = {
random_list = {
4 = {
trigger = {
NOT = {
has_trait = one_legged
}
}
add_trait_force_tooltip = one_legged
increase_wounds_effect = { REASON = fight }
}
2 = {
trigger = {
NOT = {
has_trait = disfigured
}
}
add_trait_force_tooltip = disfigured
increase_wounds_effect = { REASON = fight }
epilepsy_brain_trauma_risk_effect = { CHANCE = 5 }
}
4 = {
trigger = {
NOT = {
has_trait = one_eyed
}
}
add_trait_force_tooltip = one_eyed
increase_wounds_effect = { REASON = fight }
epilepsy_brain_trauma_risk_effect = { CHANCE = 5 }
}
4 = {
trigger = {
NOT = {
has_trait = maimed
}
}
apply_maimed_trait_and_modifier_effect = yes
epilepsy_brain_trauma_risk_effect = { CHANCE = 5 }
}
}
}
apply_maimed_trait_and_modifier_effect = {
add_trait = maimed
add_character_modifier = {
modifier = recently_maimed_modifier
years = 1
}
}
#########################################
# EFFECTS FOR WEIGHT GAIN/LOSS #
#########################################
target_weight_modifier_effect = {
if = {
limit = {
NOT = { has_variable = character_weight_variable }
}
set_variable = {
name = character_weight_variable
value = 0
}
}
change_variable = {
name = character_weight_variable
add = $VALUE$
}
}
#########################################
# EFFECTS FOR COURT PHYSICIAN TREATMENT #
#########################################
### COURT PHYSICIAN MANAGEMENT ###
set_court_physician_effect = {
$PHYSICIAN$ = {
if = {
limit = {
NOT = { liege = $EMPLOYER$ }
}
$EMPLOYER$ = { add_courtier = $PHYSICIAN$ }
}
}
$EMPLOYER$ = {
#Replace existing court physician if one exists
if = {
limit = {
employs_court_position = court_physician_court_position
any_court_position_holder = {
type = court_physician_court_position
count > 0
}
}
every_court_position_holder = {
type = court_physician_court_position
save_temporary_scope_as = old_physician
$EMPLOYER$ = {
replace_court_position = {
recipient = $PHYSICIAN$
holder = scope:old_physician
court_position = court_physician_court_position
}
reverse_add_opinion = {
target = scope:old_physician
modifier = disappointed_opinion
opinion = -15
}
reverse_add_opinion = {
target = $PHYSICIAN$
modifier = hired_me_opinion
}
}
}
}
#Else just straight up appoint
else = {
appoint_court_position = {
recipient = $PHYSICIAN$
court_position = court_physician_court_position
}
reverse_add_opinion = {
target = $PHYSICIAN$
modifier = hired_me_opinion
}
}
#Trigger treatments if needed
hidden_effect = {
if = {
limit = {
has_treatable_disease_trigger = yes
has_recent_treatment_trigger = no
}
save_scope_as = sick_character
trigger_event = {
id = health.3101
days = { physician_treatment_delay_ruler_min physician_treatment_delay_ruler_max }
}
}
else_if = {
limit = {
has_recent_wound_treatment_trigger = no
has_wounds_trigger = yes
}
save_scope_as = sick_character
trigger_event = {
id = health.4001
days = { physician_treatment_delay_ruler_min physician_treatment_delay_ruler_max }
}
}
every_courtier_or_guest = {
if = {
limit = {
has_treatable_disease_trigger = yes
has_recent_treatment_trigger = no
}
set_worst_disease_effect = yes
save_scope_as = sick_character
decide_who_picks_disease_treatment_effect = yes #Sends health.3101 to them or 3102 to liege (you)
}
else_if = {
limit = {
has_recent_wound_treatment_trigger = no
has_wounds_trigger = yes
}
save_scope_as = sick_character
decide_who_picks_wound_treatment_effect = yes
}
}
}
}
}
save_court_physician_as_effect = {
hidden_effect = {
if = {
limit = { exists = court_owner }
court_owner = {
random_court_position_holder = {
type = court_physician_court_position
limit = {
is_physically_able = yes
}
save_scope_as = $SCOPE_NAME$
}
}
}
}
}
###COURT PHYSICIAN RANK UP###
physician_rank_up_tooltip_effect = {
scope:physician = {
if = {
limit = {
exists = var:physician_level_up
}
show_as_tooltip = {
if = {
limit = { var:physician_level_up = flag:physician }
if = {
limit = {
has_trait_xp = {
trait = lifestyle_physician
value > 5
}
}
add_trait_xp = {
trait = lifestyle_physician
value = 10
}
}
else = { add_trait_force_tooltip = lifestyle_physician }
}
else_if = {
limit = { var:physician_level_up = flag:mystic }
if = {
limit = {
has_trait_xp = {
trait = lifestyle_mystic
value > 5
}
}
add_trait_xp = {
trait = lifestyle_mystic
value = 10
}
}
else = { add_trait_force_tooltip = lifestyle_mystic }
}
}
}
}
}
#Needs argument CHANCE
physician_level_up_chance_effect = {
if = {
limit = {
is_alive = yes
NAND = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
}
random = {
chance = $CHANCE$
physician_lifestyle_rank_up_effect = yes
#Used by physician_rank_up_tooltip_effect, to be shown in treatment outcome...
set_variable = { name = physician_level_up value = flag:physician days = 15 }
#...or in notification
if = {
limit = {
liege ?= { this != scope:sick_character }
}
liege = {
send_interface_message = { #Should be feed message, because it's not hugely important
type = event_court_physician_good
title = physician_level_up_chance_effect.t
left_icon = scope:physician
physician_rank_up_tooltip_effect = yes
}
}
}
}
}
}
#Needs argument CHANCE
mystic_level_up_chance_effect = {
if = {
limit = {
NAND = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
is_alive = yes
}
random = {
chance = $CHANCE$
ai_mystic_lifestyle_rank_up_effect = yes
#Used by physician_rank_up_tooltip_effect, to be shown in treatment outcome...
set_variable = { name = physician_level_up value = flag:mystic days = 15 }
#...or in notification
if = {
limit = {
liege ?= { this != scope:sick_character }
}
liege = {
send_interface_message = {
type = event_court_physician_good
title = physician_level_up_chance_effect.t
left_icon = scope:physician
physician_rank_up_tooltip_effect = yes
}
}
}
#Have a tiny chance to become witch
hidden_effect = {
if = {
limit = {
is_ai = yes
NOR = {
any_secret = { type = secret_witch }
has_trait = witch
}
}
random = {
modifier = {
factor = 0
ai_zeal >= medium_positive_ai_value
}
modifier = {
factor = 2
ai_zeal <= high_negative_ai_value #high and not medium because mystic traits already remove some ai_zeal
}
chance = 5
give_witch_secret_or_trait_effect = yes
}
}
}
}
}
}
###DISEASE TREATMENT OPTIONS###
safe_disease_treatment_effect = {
$TREATMENT_PICKER$ = { save_scope_as = treatment_picker }
$PATIENT$ = {
custom_tooltip = safe_diseaste_treatment.tt
hidden_effect = {
save_court_physician_as_effect = { SCOPE_NAME = physician }
if = {
limit = {
NOT = { exists = scope:sick_character }
}
save_scope_as = sick_character
} #If a sick character was not already saved we save the patient as Sick Character here
if = {
limit = {
exists = scope:physician
court_physician_available_trigger = yes
}
#Physician skill up
scope:physician = {
random_list = {
90 = { #physician
trigger = {
NAND = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
}
physician_level_up_chance_effect = { CHANCE = 10 }
}
10 = { #Mystic
trigger = {
NOR = {
AND = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
AND = { #Because then this would be the only option which is weird
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
}
OR = {
NAND = { #Either, this is my first rank up
has_trait = lifestyle_physician
has_trait = lifestyle_mystic
}
has_trait = lifestyle_mystic #I have already chosen this path
}
}
modifier = {
has_trait = lifestyle_mystic
factor = 2
}
modifier = {
ai_zeal >= medium_positive_ai_value
factor = 0
}
mystic_level_up_chance_effect = { CHANCE = 10 }
}
}
}
# OUTCOME RANDOMIZATION
random_list = {
70 = { # Success
modifier = {
factor = scope:physician.physician_safe_treatment_skill_factor
# 1 for an average learning skill character without traits
# 0.2 min for low learning
# ~3 for high skill character without traits
# ~12 for high skill character with best trait (physician_3)
}
modifier = { # Bump the death numbers a bit
$PATIENT$ = { is_ruler = no }
factor = 0.8
}
modifier = { # Pool characters should die more
$PATIENT$ = { is_pool_character = yes }
factor = 0.2
}
trigger_event = health.3103 #Safe treatment sucess
}
30 = { # Failure
trigger_event = health.3104 #Safe treatment failure
}
70 = { # Failure on purpose
trigger = {
court_physician_can_fail_on_purpose_trigger = yes
}
opinion_modifier = {
who = scope:physician
opinion_target = scope:sick_character
multiplier = -1 # Adds 100 for -100 opinion
}
modifier = {
factor = { #To keep it scaling with success
add = scope:physician.physician_safe_treatment_skill_factor
divide = 2
}
}
modifier = { #Are they already trying to kill you?
add = 40
scope:sick_character = {
any_targeting_scheme = {
scheme_type = murder
OR = {
scheme_owner = scope:physician
any_scheme_agent_character = { this = scope:physician }
}
}
}
}
trigger_event = health.3104 #Safe treatment failure
}
}
}
}
}
}
risky_disease_treatment_effect = {
$TREATMENT_PICKER$ = { save_scope_as = treatment_picker }
$PATIENT$ = {
custom_tooltip = risky_diseaste_treatment.tt
scope:treatment_picker = {
stress_impact = {
craven = medium_stress_impact_gain
content = minor_stress_impact_gain
}
}
hidden_effect = {
save_court_physician_as_effect = { SCOPE_NAME = physician }
if = {
limit = {
exists = scope:physician
court_physician_available_trigger = yes
}
#Physician skill up
scope:physician = {
physician_level_up_chance_effect = { CHANCE = 10 }
}
random_list = {
1 = { #Success
modifier = {
scope:physician = {
learning >= mediocre_skill_rating
learning < medium_skill_rating
}
factor = 2
}
modifier = {
scope:physician = {
learning >= medium_skill_rating
learning < decent_skill_rating
}
factor = 4
}
modifier = {
scope:physician = {
learning >= decent_skill_rating
learning < high_skill_rating
}
factor = 7
}
modifier = {
scope:physician = {
learning >= high_skill_rating
}
factor = 10
}
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 5
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
factor = 5
}
# Liege Perk bonus
modifier = {
exists = scope:physician.liege
scope:physician.liege = {
has_perk = anatomical_studies_perk
}
factor = 2
}
modifier = { # Bump the death numbers a bit
$PATIENT$ = { is_ruler = no }
factor = 0.8
}
modifier = { # Pool characters should die more
$PATIENT$ = { is_pool_character = yes }
factor = 0.2
}
#Critical or normal success?
random_list = {
1 = {
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
factor = 2
}
modifier = {
scope:disease_type = flag:leper
factor = 0
}
modifier = {
scope:disease_type = flag:cancer
factor = 0.2
}
# Liege Perk bonus
modifier = {
exists = scope:physician.liege
scope:physician.liege = {
has_perk = anatomical_studies_perk
}
factor = 2
}
trigger_event = health.3105 #Critical success
}
5 = {
trigger_event = health.3106 #Normal success
}
}
}
10 = { #Failure
trigger_event = health.3107 #Failure
}
5 = { #Failure on purpose
trigger = {
court_physician_can_fail_on_purpose_trigger = yes
}
modifier = {
OR = {
has_relation_rival = scope:physician
reverse_opinion = {
target = scope:physician
value <= -20
}
}
factor = 2
}
modifier = { #Are they already trying to kill you?
add = 40
scope:sick_character = {
any_targeting_scheme = {
scheme_type = murder
OR = {
scheme_owner = scope:physician
any_scheme_agent_character = { this = scope:physician }
}
}
}
}
trigger_event = health.3107 #Risky treatment failure
}
}
}
}
}
}
mystic_disease_treatment_effect = {
$TREATMENT_PICKER$ = { save_scope_as = treatment_picker }
$PATIENT$ = {
custom_tooltip = mystic_diseaste_treatment.tt
scope:treatment_picker = {
stress_impact = {
paranoid = minor_stress_impact_gain
zealous = major_stress_impact_gain
craven = medium_stress_impact_gain
}
}
hidden_effect = {
save_court_physician_as_effect = { SCOPE_NAME = physician }
if = {
limit = {
exists = scope:physician
court_physician_available_trigger = yes
}
#Physician skill up
scope:physician = {
mystic_level_up_chance_effect = { CHANCE = 15 }
}
}
else = {
debug_log = "No Physician existed in a mystic_treatment_effect! Why was the option even available?"
}
random_list = {
1 = { #Success
modifier = {
scope:physician = {
learning >= mediocre_skill_rating
learning < medium_skill_rating
}
factor = 2
}
modifier = {
scope:physician = {
learning >= medium_skill_rating
learning < decent_skill_rating
}
factor = 4
}
modifier = {
scope:physician = {
learning >= decent_skill_rating
learning < high_skill_rating
}
factor = 7
}
modifier = {
scope:physician = {
learning >= high_skill_rating
}
factor = 10
}
modifier = {
scope:physician = { has_trait = lifestyle_mystic }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 50
}
}
factor = 5
}
modifier = {
scope:physician = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 50
}
}
factor = 5
}
# Liege Perk bonus
modifier = {
scope:physician.liege = {
has_perk = anatomical_studies_perk
}
factor = 2
}
modifier = { # Bump the death numbers a bit
$PATIENT$ = { is_ruler = no }
factor = 0.8
}
modifier = { # Pool characters should die more
$PATIENT$ = { is_pool_character = yes }
factor = 0.2
}
#Critical or normal success?
random_list = {
1 = {
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 1.5
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 3
}
modifier = {
is_adult = no
factor = 0
}
modifier = {
scope:disease_type = flag:leper
factor = 0
}
modifier = {
scope:disease_type = flag:cancer
factor = 0.1
}
# Liege Perk bonus
modifier = {
scope:physician.liege = {
has_perk = anatomical_studies_perk
}
factor = 2
}
trigger_event = health.3108 #Critical success
}
5 = {
trigger_event = health.3109 #Normal success
}
}
}
10 = { #Failure
trigger_event = health.3110 #Failure
}
5 = { #Failure on purpose
trigger = {
court_physician_can_fail_on_purpose_trigger = yes
}
modifier = {
OR = {
has_relation_rival = scope:physician
reverse_opinion = {
target = scope:physician
value <= -20
}
}
factor = 2
}
modifier = { #Are they already trying to kill you?
add = 40
scope:sick_character = {
any_targeting_scheme = {
scheme_type = murder
OR = {
scheme_owner = scope:physician
any_scheme_agent_character = { this = scope:physician }
}
}
}
}
trigger_event = health.3110 #Failure
}
}
}
}
}
no_disease_treatment_effect = {
custom_tooltip = no_treatment_effect.tt
}
find_court_physician_effect = {
custom_tooltip = health.3101.e.tt
hidden_effect = {
# Stop AI taking physicians via event, since they've got an AI prioritisation system to work with.
## We do this in the effect rather than elsewhere for script hygiene.
if = {
limit = { is_ai = no }
add_character_flag = { flag = already_sick days = 30 }
add_character_flag = { flag = searching_for_physician days = court_physician_search_max }
trigger_event = {
id = health.3001 days = { court_physician_search_min court_physician_search_max }
}
}
}
}
deny_treatment_effect = {
$TREATMENT_PICKER$ = { save_scope_as = treatment_picker }
$PATIENT$ = {
custom_tooltip = deny_treatment_effect.tt
add_opinion = {
target = root
modifier = cruelty_opinion
opinion = -20
}
}
}
###WOUND TREATMENT OPTIONS###
safe_wound_treatment_effect = {
custom_tooltip = safe_wound_treatment.tt
hidden_effect = {
save_court_physician_as_effect = { SCOPE_NAME = physician }
if = {
limit = {
exists = scope:physician
court_physician_available_trigger = yes
}
#Physician skill up
scope:physician = {
if = {
limit = {
NAND = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
}
physician_level_up_chance_effect = { CHANCE = 10 }
}
}
random_list = {
10 = { #Success
modifier = {
scope:physician = {
learning >= mediocre_skill_rating
learning < medium_skill_rating
}
factor = 2
}
modifier = {
scope:physician = {
learning >= medium_skill_rating
learning < decent_skill_rating
}
factor = 4
}
modifier = {
scope:physician = {
learning >= decent_skill_rating
learning < high_skill_rating
}
factor = 7
}
modifier = {
scope:physician = {
learning >= high_skill_rating
}
factor = 10
}
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
factor = 4
}
if = {
limit = {
has_trait = wounded_1
}
trigger_event = {
id = health.0100
days = { 2 3 }
}
}
else = {
trigger_event = health.4101 #Safe treatment success
}
}
50 = { #Failure
if = {
limit = {
has_trait = wounded_1
}
trigger_event = {
id = health.0101
days = { 2 3 }
}
}
else = {
trigger_event = health.4102 #Safe treatment failure
}
}
}
}
}
}
risky_wound_treatment_effect = {
custom_tooltip = risky_wound_treatment.tt
hidden_effect = {
save_court_physician_as_effect = { SCOPE_NAME = physician }
if = {
limit = {
exists = scope:physician
court_physician_available_trigger = yes
}
#Physician skill up
scope:physician = {
physician_level_up_chance_effect = { CHANCE = 10 }
}
random_list = {
1 = { #Success
modifier = {
scope:physician = {
learning >= mediocre_skill_rating
learning < medium_skill_rating
}
factor = 2
}
modifier = {
scope:physician = {
learning >= medium_skill_rating
learning < decent_skill_rating
}
factor = 4
}
modifier = {
scope:physician = {
learning >= decent_skill_rating
learning < high_skill_rating
}
factor = 7
}
modifier = {
scope:physician = {
learning >= high_skill_rating
}
factor = 10
}
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
factor = 4
}
modifier = { #Gangrene! Lower chance of success
factor = 0.5
has_character_modifier = gangrene_modifier
}
#Critical or normal success?
random_list = {
1 = {
modifier = {
scope:physician = { has_trait = lifestyle_physician }
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 50
}
}
factor = 2
}
modifier = {
scope:physician = {
has_trait = lifestyle_physician
has_trait_xp = {
trait = lifestyle_physician
value >= 100
}
}
factor = 2
}
modifier = {
has_character_modifier = infected_wound_modifier
factor = 0.7
}
modifier = { #Gangrene! Lower chance of critical success
has_character_modifier = gangrene_modifier
factor = 0.7
}
trigger_event = health.4103 #Critical success
}
5 = {
trigger_event = health.4104 #Normal success
}
}
}
10 = { #Failure
trigger_event = health.4105 #Failure
}
}
}
}
}
###DISEASE TREATMENT OUTCOMES###
set_worst_disease_effect = {
if = {
limit = { has_trait = bubonic_plague }
save_scope_value_as = {
name = disease_type
value = flag:bubonic_plague
}
}
else_if = {
limit = { has_trait = cancer }
save_scope_value_as = {
name = disease_type
value = flag:cancer
}
}
else_if = {
limit = { has_trait = smallpox }
save_scope_value_as = {
name = disease_type
value = flag:smallpox
}
}
else_if = {
limit = { has_trait = measles }
save_scope_value_as = {
name = disease_type
value = flag:measles
}
}
else_if = {
limit = { has_trait = dysentery }
save_scope_value_as = {
name = disease_type
value = flag:dysentery
}
}
else_if = {
limit = { has_trait = ergotism }
save_scope_value_as = {
name = disease_type
value = flag:ergotism
}
}
else_if = {
limit = { has_trait = consumption }
save_scope_value_as = {
name = disease_type
value = flag:consumption
}
}
else_if = {
limit = { has_trait = typhus }
save_scope_value_as = {
name = disease_type
value = flag:typhus
}
}
else_if = {
limit = { has_trait = great_pox }
save_scope_value_as = {
name = disease_type
value = flag:great_pox
}
}
else_if = {
limit = { has_trait = pneumonic }
save_scope_value_as = {
name = disease_type
value = flag:pneumonic
}
}
else_if = {
limit = { has_trait = leper }
save_scope_value_as = {
name = disease_type
value = flag:leper
}
}
else_if = {
limit = { has_trait = gout_ridden }
save_scope_value_as = {
name = disease_type
value = flag:gout_ridden
}
}
else_if = {
limit = { has_trait = ill }
save_scope_value_as = {
name = disease_type
value = flag:ill
}
}
}
add_disease_treatment_modifier_effect = {
#Treatment length depends on whether the disease has a short or long duration
#Successful treatments come in two strengths per treatment type, low for diseases with low health penalty and high for diseases with high health penalty
#Negative treatments only have one strength per treatment type
#Successful safe treatments remove most of the penalty for low -health diseases but only 1/2-1/4 of penalty for high -health diseases
#Successful risky/mystic treatments remove almost all of the penalty for all diseases (with plague being the main exception, that penalty is roughly halved)
#Safe treatment:success
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
#SAFE TREATMENT: SUCCESS
if = {
limit = {
scope:treatment_result_treatment = flag:safe
scope:treatment_result_outcome = flag:success
}
if = {
limit = {
has_short_disease_type_trigger = yes
has_high_health_penalty_disease_type_trigger = yes
}
add_character_modifier = { modifier = safe_disease_treatment_success_high_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = no
has_high_health_penalty_disease_type_trigger = yes
}
add_character_modifier = { modifier = safe_disease_treatment_success_high_modifier days = disease_treatment_long_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = yes
has_high_health_penalty_disease_type_trigger = no
}
add_character_modifier = { modifier = safe_disease_treatment_success_low_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = no
has_high_health_penalty_disease_type_trigger = no
}
add_character_modifier = { modifier = safe_disease_treatment_success_low_modifier days = disease_treatment_long_duration }
}
}
#SAFE TREATMENT: FAILURE
else_if = {
limit = {
scope:treatment_result_treatment = flag:safe
scope:treatment_result_outcome = flag:failure
}
if = {
limit = { has_short_disease_type_trigger = yes }
add_character_modifier = { modifier = safe_disease_treatment_failure_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = { has_short_disease_type_trigger = no }
add_character_modifier = { modifier = safe_disease_treatment_failure_modifier days = disease_treatment_long_duration }
}
}
#RISKY & MYSTIC TREATMENT: CRITICAL SUCCESS
else_if = {
limit = {
OR = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_treatment = flag:mystic #A succcessful mystic treatment shouldn't be noticeable from the outside, so using same modifiers
}
scope:treatment_result_outcome = flag:critical_success
}
#General cooldown
add_character_flag = {
flag = contraction_cooldown_general
years = 2
}
if = {
limit = { scope:disease_type = flag:consumption }
remove_trait_force_tooltip = consumption
add_character_flag = { flag = contraction_cooldown_consumption years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:cancer }
remove_trait_force_tooltip = cancer
add_character_flag = { flag = contraction_cooldown_cancer years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:great_pox }
remove_trait_force_tooltip = great_pox
add_character_flag = { flag = contraction_cooldown_great_pox years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:gout_ridden }
remove_trait_force_tooltip = gout_ridden
add_character_flag = { flag = contraction_cooldown_gout_ridden years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:ill }
remove_trait_force_tooltip = ill
#No cooldown, common disease
}
else_if = {
limit = { scope:disease_type = flag:pneumonic }
remove_trait_force_tooltip = pneumonic
add_character_flag = { flag = contraction_cooldown_pneumonic years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:typhus }
remove_trait_force_tooltip = typhus
add_character_flag = { flag = contraction_cooldown_typhus years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:measles }
remove_trait_force_tooltip = measles
#No cooldown, immunity
}
else_if = {
limit = { scope:disease_type = flag:dysentery }
remove_trait_force_tooltip = dysentery
add_character_flag = { flag = contraction_cooldown_dysentery years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:ergotism }
remove_trait_force_tooltip = ergotism
add_character_flag = { flag = contraction_cooldown_ergotism years = 20 }
}
else_if = {
limit = { scope:disease_type = flag:smallpox }
remove_trait_force_tooltip = smallpox
#No cooldown, immunity
}
else_if = {
limit = { scope:disease_type = flag:bubonic_plague }
remove_trait_force_tooltip = bubonic_plague
#No cooldown, immunity
}
}
#RISKY & MYSTIC TREATMENT: SUCCESS
else_if = {
limit = {
OR = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_treatment = flag:mystic #A succcessful mystic treatment shouldn't be noticeable from the outside, so using same modifiers
}
scope:treatment_result_outcome = flag:success
}
if = {
limit = {
has_short_disease_type_trigger = yes
has_high_health_penalty_disease_type_trigger = yes
}
add_character_modifier = { modifier = risky_disease_treatment_success_high_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = no
has_high_health_penalty_disease_type_trigger = yes
}
add_character_modifier = { modifier = risky_disease_treatment_success_high_modifier days = disease_treatment_long_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = yes
has_high_health_penalty_disease_type_trigger = no
}
add_character_modifier = { modifier = risky_disease_treatment_success_low_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = {
has_short_disease_type_trigger = no
has_high_health_penalty_disease_type_trigger = no
}
add_character_modifier = { modifier = risky_disease_treatment_success_low_modifier days = disease_treatment_long_duration }
}
}
# RISKY TREATMENT FAILURE
else_if = {
limit = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_outcome = flag:failure
}
if = {
limit = { has_short_disease_type_trigger = yes }
add_character_modifier = { modifier = risky_disease_treatment_failure_modifier days = disease_treatment_short_duration }
}
else_if = {
limit = { has_short_disease_type_trigger = no }
add_character_modifier = { modifier = risky_disease_treatment_failure_modifier days = disease_treatment_long_duration }
}
}
}
disease_treatment_result_tooltip_effect = {
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
#Show death or treatment outcome
if = {
limit = { scope:sick_character = { is_alive = no } }
custom_tooltip = health.3200.death.tt
}
else = {
show_as_tooltip = {
scope:sick_character = {
add_disease_treatment_modifier_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
#Risky
if = {
limit = { has_variable = treatment_strategy }
if = {
limit = { var:treatment_strategy = flag:amputation }
add_trait_force_tooltip = one_legged
}
else_if = {
limit = { var:treatment_strategy = flag:disfigurement }
add_trait_force_tooltip = disfigured
}
else_if = {
limit = { var:treatment_strategy = flag:eye }
add_trait_force_tooltip = one_eyed
}
else_if = {
limit = {
var:treatment_strategy = flag:castration
age >= 12
}
add_trait_force_tooltip = eunuch_1
}
else_if = {
limit = {
var:treatment_strategy = flag:castration
age < 12
}
add_trait_force_tooltip = beardless_eunuch
}
}
if = {
limit = { has_variable = mystic_side_effect }
#Mystic
if = {
limit = { var:mystic_side_effect = flag:lunatic }
add_trait_force_tooltip = lunatic_1
}
else_if = {
limit = { var:mystic_side_effect = flag:possessed }
add_trait_force_tooltip = possessed_1
}
else_if = {
limit = { var:mystic_side_effect = flag:dull }
add_trait_force_tooltip = dull
}
else_if = {
limit = { var:mystic_side_effect = flag:craven }
add_trait_force_tooltip = craven
}
else_if = {
limit = { var:mystic_side_effect = flag:paranoid }
add_trait_force_tooltip = paranoid
}
else_if = {
limit = { var:mystic_side_effect = flag:massive_stress_gain }
add_stress = massive_stress_gain
}
}
}
}
}
}
disease_treatment_results_effect = {
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
#APPLY MODIFIERS (OR REMOVE TRAITS)
add_disease_treatment_modifier_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
#RISKY TREATMENT: DETERMINING TREATMENT STRATEGY AND REMOVING BODY PART
if = {
limit = { scope:treatment_result_treatment = flag:risky }
random_list = {
1 = { #Medicine
trigger = {
OR = { #Only use for cancer if no body part can be removed
NOT = { scope:disease_type ?= flag:cancer }
AND = {
scope:disease_type ?= flag:cancer
has_trait = one_eyed
has_trait = one_legged
has_trait = disfigured
OR = {
is_female = yes
is_eunuch_trigger = yes
}
}
}
}
set_variable = {
name = treatment_strategy
value = flag:medicine
days = 30
}
}
1 = { #Amputation
trigger = {
NOT = { has_trait = one_legged }
OR = {
has_amputation_type_disease_trigger = yes
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
add_trait_force_tooltip = one_legged
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:amputation
days = 30
}
if = {
limit = { has_amputation_type_disease_trigger = no }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
1 = { #Disfigurement
trigger = {
NOT = { has_trait = disfigured }
OR = {
has_disfigurement_type_disease_trigger = yes
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
add_trait_force_tooltip = disfigured
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:disfigurement
days = 30
}
if = {
limit = { has_disfigurement_type_disease_trigger = no }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
1 = { #Castration
trigger = {
is_male = yes
is_eunuch_trigger = no
OR = {
scope:disease_type ?= flag:cancer
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
if = {
limit = {
age >= 12
}
add_trait_force_tooltip = eunuch_1
}
else = {
add_trait_force_tooltip = beardless_eunuch
}
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:castration
days = 30
}
if = {
limit = { NOT = { scope:disease_type ?= flag:cancer } }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
1 = { #Remove eye
trigger = {
NOT = { has_trait = one_eyed }
OR = {
scope:disease_type ?= flag:cancer
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
add_trait_force_tooltip = one_eyed
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:eye
days = 30
}
if = {
limit = { NOT = { scope:disease_type ?= flag:cancer } }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
}
}
#RISKY TREATMENT FAILURE: DEATH?
if = {
limit = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_outcome = flag:failure
}
if = {
limit = {
OR = {
AND = { #Dies from wound upgrading past lvl 3
has_trait = wounded_3
AND = {
has_variable = treatment_strategy
OR = {
var:treatment_strategy = flag:amputation
var:treatment_strategy = flag:disfigurement
var:treatment_strategy = flag:eye
var:treatment_strategy = flag:castration
}
}
}
AND = {
is_ai = yes
health <= 0
}
}
}
add_character_flag = die_risky_treatment
}
}
#MYSTIC TREATMENT: OCCULT OR SIMPLY QUESTIONABLE TREATMENT
if = {
limit = { scope:treatment_result_treatment = flag:mystic }
random_list = {
100 = { #Occult
modifier = {
scope:physician = {
OR = {
any_secret = { type = secret_witch }
has_trait = witch
}
}
factor = 10
}
random_list = {
10 = { #Regular occult
hidden_effect = {
set_variable = {
name = treatment_strategy
value = flag:occult
days = 30
}
}
}
2 = { #Cannibal occult
trigger = {
NOR = {
has_trait = cannibal
any_secret = { type = secret_cannibal }
}
}
hidden_effect = {
set_variable = {
name = treatment_strategy
value = flag:occult_cannibal
days = 30
}
}
give_cannibal_secret_or_trait_effect = yes
}
2 = { #Deviant occult
trigger = {
is_adult = yes
NOR = {
has_trait = deviant
any_secret = { type = secret_deviant }
}
NOT = { scope:treatment_result_outcome = flag:failure }
}
hidden_effect = {
set_variable = {
name = treatment_strategy
value = flag:occult_deviant
days = 30
}
}
give_deviant_secret_or_trait_effect = yes
}
}
}
50 = { #Questionable
hidden_effect = {
set_variable = {
name = treatment_strategy
value = flag:questionable
days = 30
}
}
}
}
#MYSTIC TREATMENT: SPECIAL EFFECTS
if = {
limit = { scope:treatment_result_outcome = flag:failure }
random_list = {
10 = {
trigger = { NOT = { has_trait = lunatic } }
set_variable = {
name = mystic_side_effect
value = flag:lunatic
days = 30
}
add_trait_force_tooltip = lunatic_1
}
10 = {
trigger = { NOT = { has_trait = possessed } }
set_variable = {
name = mystic_side_effect
value = flag:possessed
days = 30
}
add_trait_force_tooltip = possessed_1
}
10 = {
trigger = {
NOR = {
has_trait = dull
has_trait = intellect_good
has_trait = shrewd
}
}
set_variable = {
name = mystic_side_effect
value = flag:dull
days = 30
}
add_trait_force_tooltip = dull
}
10 = {
trigger = { NOT = { has_trait = craven } }
set_variable = {
name = mystic_side_effect
value = flag:craven
days = 30
}
add_trait_force_tooltip = craven
}
10 = {
trigger = { NOT = { has_trait = paranoid } }
set_variable = {
name = mystic_side_effect
value = flag:paranoid
days = 30
}
add_trait_force_tooltip = paranoid
}
15 = {
set_variable = {
name = mystic_side_effect
value = flag:massive_stress_gain
days = 30
}
add_stress = massive_stress_gain
}
}
}
#Stress for occult treatments
if = {
limit = { has_variable = treatment_strategy }
if = {
limit = { var:treatment_strategy = flag:occult }
stress_impact = {
zealous = major_stress_impact_gain
}
}
else_if = {
limit = { var:treatment_strategy = flag:occult_cannibal }
stress_impact = {
zealous = major_stress_impact_gain
compassionate = major_stress_impact_gain
}
}
else_if = {
limit = { var:treatment_strategy = flag:occult_deviant }
stress_impact = {
zealous = major_stress_impact_gain
chaste = major_stress_impact_gain
}
}
}
}
#RETURN VISIT TO THE DOCTOR!
hidden_effect = {
if = {
limit = {
NOT = { #Risky/mystic critical success cures completely, no need for another visit
scope:treatment_result_outcome = flag:critical_success
}
}
if = {
limit = { has_short_disease_type_trigger = yes }
trigger_event = {
id = health.3100 #Sends health.3101 to me or 3102 to liege
days = disease_treatment_short_duration_plus_1
}
}
else = {
trigger_event = {
id = health.3100 #Sends health.3101 to me or 3102 to liege
days = disease_treatment_long_duration_plus_1
}
}
}
}
#FAILED TREATMENT OPINIONS
if = {
limit = {
scope:treatment_result_outcome = flag:failure
OR = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_treatment = flag:mystic
}
}
add_failed_treatment_of_kin_opinions_effect = yes
}
physician_rank_up_tooltip_effect = yes #Shows trait gain if physician ranked up
}
###WOUND TREATMENT OUTCOMES###
add_wound_treatment_modifier_effect = {
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
###SUCCESS###
if = {
limit = {
OR = {
scope:treatment_result_outcome = flag:success
scope:treatment_result_outcome = flag:critical_success
}
}
#Infection is always removed
if = {
limit = { has_character_modifier = infected_wound_modifier }
remove_character_modifier = infected_wound_modifier
save_scope_value_as = {
name = infection
value = yes
}
}
#Gangrene is removed if you picked risky
else_if = {
limit = {
has_character_modifier = gangrene_modifier
scope:treatment_result_treatment = flag:risky
}
remove_character_modifier = gangrene_modifier
save_scope_value_as = {
name = gangrene
value = yes
}
}
#Applying correct modifier or removing correct trait (unless there's still an active treatment, could happen if you got treated for a wound and then got infection/gangrene)
if = {
limit = { has_recent_wound_treatment_trigger = no }
#Safe treatment
if = {
limit = { scope:treatment_result_treatment = flag:safe }
#Add modifier or remove wounded_1 trait
if = {
limit = { has_character_modifier = gangrene_modifier }
add_character_modifier = { modifier = safe_wound_treatment_success_high_modifier days = wound_treatment_success_duration }
}
else_if = {
limit = { has_trait = wounded_1 }
remove_trait = wounded_1
}
else_if = {
limit = {
OR = {
has_trait = wounded_2
has_trait = wounded_3
}
}
add_character_modifier = { modifier = safe_wound_treatment_success_low_modifier days = wound_treatment_success_duration }
}
}
#Risky treatment critical success
else_if = {
limit = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_outcome = flag:critical_success
}
#Remove a trait level
if = {
limit = { has_trait = wounded_1 }
remove_trait = wounded_1
}
else_if = {
limit = { has_trait = wounded_2 }
remove_trait = wounded_2 #We do it like this so you can see the trait you've lost
add_trait = wounded_1
}
else_if = {
limit = { has_trait = wounded_3 }
remove_trait = wounded_3
add_trait = wounded_2
}
}
#Risky treatment regular success
else_if = {
limit = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_outcome = flag:critical_success
}
add_character_modifier = { modifier = risky_wound_treatment_success_modifier days = wound_treatment_success_duration }
}
}
}
###FAILURE###
else_if = {
limit = { scope:treatment_result_outcome = flag:failure }
#Safe treatment failure
if = {
limit = { scope:treatment_result_treatment = flag:safe }
add_character_modifier = { modifier = safe_wound_treatment_failure_modifier days = wound_treatment_failure_duration }
}
if = {
limit = { scope:treatment_result_treatment = flag:risky }
add_character_modifier = { modifier = risky_wound_treatment_failure_modifier days = wound_treatment_failure_duration }
}
}
}
wound_treatment_result_tooltip_effect = {
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
#Show death or treatment outcome
if = {
limit = { scope:sick_character = { is_alive = no } }
custom_tooltip = health.3200.death.tt
}
else = {
show_as_tooltip = {
scope:sick_character = {
add_wound_treatment_modifier_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
if = {
limit = { has_variable = treatment_strategy }
if = {
limit = { var:treatment_strategy = flag:amputation }
add_trait_force_tooltip = one_legged
}
else_if = {
limit = { var:treatment_strategy = flag:disfigurement }
add_trait_force_tooltip = disfigured
}
else_if = {
limit = { var:treatment_strategy = flag:eye }
add_trait_force_tooltip = one_eyed
}
else_if = {
limit = {
var:treatment_strategy = flag:castration
age >= 12
}
add_trait_force_tooltip = eunuch_1
}
else_if = {
limit = {
var:treatment_strategy = flag:castration
age < 12
}
add_trait_force_tooltip = beardless_eunuch
}
}
}
}
}
}
wound_treatment_results_effect = {
save_temporary_scope_value_as = {
name = treatment_result_treatment
value = flag:$TREATMENT$
}
save_temporary_scope_value_as = {
name = treatment_result_outcome
value = flag:$OUTCOME$
}
#APPLY MODIFIERS (OR REMOVE TRAITS)
add_wound_treatment_modifier_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
#RISKY TREATMENT: DETERMINING TREATMENT STRATEGY AND REMOVING BODY PART
if = {
limit = { scope:treatment_result_treatment = flag:risky }
random_list = {
1 = { #Medicine
trigger = {
OR = { #Only use for gangrene if no body part can be removed
NOT = { has_character_modifier = gangrene_modifier }
AND = {
has_character_modifier = gangrene_modifier
has_trait = one_eyed
has_trait = one_legged
has_trait = disfigured
OR = {
is_female = yes
is_eunuch_trigger = yes
}
}
}
}
set_variable = {
name = treatment_strategy
value = flag:medicine
days = 30
}
}
1 = { #Amputation
trigger = {
NOT = { has_trait = one_legged }
OR = {
has_infected_or_gangrenous_wound_trigger = yes
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
add_trait_force_tooltip = one_legged
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:amputation
days = 30
}
if = {
limit = { has_infected_or_gangrenous_wound_trigger = no }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
1 = { #Disfigurement
trigger = {
NOT = { has_trait = disfigured }
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
add_trait_force_tooltip = disfigured
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:disfigurement
days = 30
}
}
1 = { #Castration
trigger = {
is_male = yes
is_eunuch_trigger = no
OR = {
has_infected_or_gangrenous_wound_trigger = yes
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
if = {
limit = {
age >= 12
}
add_trait_force_tooltip = eunuch_1
}
else = {
add_trait_force_tooltip = beardless_eunuch
}
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:castration
days = 30
}
if = {
limit = { has_infected_or_gangrenous_wound_trigger = no }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
1 = { #Remove eye
trigger = {
NOT = { has_trait = one_eyed }
OR = {
has_infected_or_gangrenous_wound_trigger = yes
AND = {
scope:treatment_result_outcome = flag:failure
scope:physician = { NOT = { has_trait = lifestyle_physician } }
}
}
}
add_trait_force_tooltip = one_eyed
increase_wounds_no_death_effect = { REASON = treatment }
set_variable = {
name = treatment_strategy
value = flag:eye
days = 30
}
if = {
limit = { has_infected_or_gangrenous_wound_trigger = no }
add_character_flag = { flag = physician_used_wrong_method days = 30 }
}
}
}
#Fallback
if = {
limit = { NOT = { exists = var:treatment_strategy } }
set_variable = {
name = treatment_strategy
value = flag:medicine
days = 30
}
}
}
#RISKY TREATMENT FAILURE: DEATH?
if = {
limit = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_outcome = flag:failure
OR = {
AND = { #Dies from wound upgrading past lvl 3
has_trait = wounded_3
OR = {
var:treatment_strategy = flag:amputation
var:treatment_strategy = flag:disfigurement
var:treatment_strategy = flag:eye
var:treatment_strategy = flag:castration
}
}
AND = { #AIs die immediately if their health is reduced to 0 or below
is_ai = yes
health <= 0
}
}
}
add_character_flag = die_surgery
}
#RETURN VISIT TO THE DOCTOR!
hidden_effect = {
if = {
limit = {
has_trait = wounded
NOT = { has_character_flag = die_surgery }
}
if = {
limit = { scope:treatment_result_outcome = flag:failure }
trigger_event = {
id = health.4999 #Sends health.4001 to me or 4002 to liege
days = wound_treatment_failure_duration_plus_1
}
}
else = {
trigger_event = {
id = health.4999 #Sends health.4001 to me or 4002 to liege
days = wound_treatment_success_duration_plus_1
}
}
}
}
#FAILED TREATMENT OPINIONS
if = {
limit = {
scope:treatment_result_outcome = flag:failure
OR = {
scope:treatment_result_treatment = flag:risky
scope:treatment_result_treatment = flag:mystic
}
}
add_failed_treatment_of_kin_opinions_effect = yes
}
physician_rank_up_tooltip_effect = yes #Shows trait gain if physician ranked up
}
###DISEASE TREATMENT LOGIC###
save_health_court_owner_effect = { #Should match has_health_court_owner_trigger
if = {
limit = { exists = imprisoner }
imprisoner = { save_scope_as = $SCOPE_NAME$ }
}
else_if = {
limit = { exists = court_owner } #Courtiers: liege. Guest: host. Ruler: themselves.
court_owner = { save_scope_as = $SCOPE_NAME$ }
}
}
pick_own_disease_treatment_effect = {
if = {
limit = { is_adult = yes }
custom_tooltip = pick_own_treatment_effect.adult.tt
}
else = {
custom_tooltip = pick_own_treatment_effect.child.tt
}
hidden_effect = {
trigger_event = {
id = health.3101
days = { 5 10 }
}
}
}
#Who treats a sick character?
decide_who_picks_disease_treatment_effect = {
if = {
limit = {
liege_picks_treatment_trigger = yes
}
liege = {
trigger_event = {
id = health.3102 #Liege decides
days = { physician_treatment_delay_subject_min physician_treatment_delay_subject_max }
}
}
}
else = {
trigger_event = {
id = health.3101 #I decide
days = { physician_treatment_delay_ruler_min physician_treatment_delay_ruler_max }
}
}
}
liege_picks_treatment_effect = {
if = {
limit = {
liege_picks_treatment_trigger = yes
}
liege = {
trigger_event = {
id = health.3102 #Liege decides
days = { 5 10 }
}
}
}
}
remove_disease_treatment_effect = {
hidden_effect = {
if = {
limit = {
has_treatable_disease_trigger = no
}
remove_character_modifier = safe_disease_treatment_success_high_modifier
remove_character_modifier = safe_disease_treatment_success_low_modifier
remove_character_modifier = safe_disease_treatment_failure_modifier
remove_character_modifier = risky_disease_treatment_success_high_modifier
remove_character_modifier = risky_disease_treatment_success_low_modifier
remove_character_modifier = risky_disease_treatment_failure_modifier
}
}
}
###WOUNDS TREATMENT LOGIC###
pick_own_wound_treatment_effect = {
if = {
limit = { is_adult = yes }
custom_tooltip = pick_own_treatment_effect.adult.tt
}
else = {
custom_tooltip = pick_own_treatment_effect.child.tt
}
hidden_effect = {
trigger_event = {
id = health.4001
days = { 5 10 }
}
}
}
decide_who_picks_wound_treatment_effect = {
if = {
limit = {
liege_picks_treatment_trigger = yes
}
liege = {
trigger_event = {
id = health.4002 #Liege decides
days = { 10 20 }
}
}
}
else = {
trigger_event = {
id = health.4001 #I decide
days = { 5 15 }
}
}
}
###FAILED TREAMENT EFFECTS###
add_failed_treatment_of_me_opinions_effect = {
#Physician scope is set in the events that reference this effect
if = {
limit = {
scope:physician = {
is_alive = yes
}
court_physician_available_trigger = yes
this != scope:physician
}
if = {
limit = {
OR = {
has_character_flag = physician_used_wrong_method
scope:physician = { has_character_modifier = chastised_physician_modifier }
scope:sick_character = {
exists = var:treatment_strategy
OR = {
var:treatment_strategy = flag:amputation
var:treatment_strategy = flag:disfigurement
var:treatment_strategy = flag:eye
var:treatment_strategy = flag:castration
}
}
}
}
hidden_effect = {
add_opinion = {
target = scope:physician
modifier = botched_my_treatment_crime_opinion
}
}
show_as_tooltip = {
add_opinion = {
target = scope:physician
modifier = botched_my_treatment_crime_opinion
}
}
}
else = {
hidden_effect = {
add_opinion = {
target = scope:physician
modifier = failed_to_treat_me_crime_opinion
}
}
show_as_tooltip = {
add_opinion = {
target = scope:physician
modifier = failed_to_treat_me_opinion
}
}
}
}
}
add_failed_treatment_of_kin_opinions_effect = {
#Physician scope is set in the events that reference this effect
hidden_effect = {
if = {
limit = {
scope:physician = {
is_alive = yes
}
court_physician_available_trigger = yes
this != scope:physician
}
every_close_family_member = {
add_to_temporary_list = failed_treatment_opinion
}
every_heir_title = {
limit = {
exists = holder
}
holder = {
if = {
limit = {
player_heir = scope:sick_character
NOT = { is_in_list = failed_treatment_opinion }
}
add_to_temporary_list = failed_treatment_opinion
}
}
}
every_in_list = {
list = failed_treatment_opinion
limit = {
this != scope:physician
}
if = {
limit = {
scope:sick_character = {
has_character_flag = die_risky_treatment
is_alive = no
has_character_flag = physician_used_wrong_method
scope:physician = { has_character_modifier = chastised_physician_modifier }
trigger_if = {
limit = { has_variable = treatment_strategy }
OR = {
var:treatment_strategy = flag:amputation
var:treatment_strategy = flag:disfigurement
var:treatment_strategy = flag:eye
var:treatment_strategy = flag:castration
var:treatment_strategy = flag:occult
var:treatment_strategy = flag:occult_cannibal
var:treatment_strategy = flag:occult_deviant
}
}
}
}
add_opinion = {
target = scope:physician
modifier = botched_treatment_of_kin_crime_opinion
}
}
else = {
add_opinion = {
target = scope:physician
modifier = failed_to_treat_kin_crime_opinion
}
}
}
}
}
}
downgrade_failed_treatment_of_me_opinions_effect = {
#Physician scope is set in the events that reference this effect
hidden_effect = {
if = {
limit = {
scope:physician = {
is_alive = yes
}
court_physician_available_trigger = yes
}
if = {
limit = {
has_opinion_modifier = {
target = scope:physician
modifier = botched_my_treatment_crime_opinion
}
}
remove_opinion = {
target = scope:physician
modifier = botched_my_treatment_crime_opinion
}
add_opinion = {
#add nice opinion version
target = scope:physician
modifier = botched_my_treatment_crime_opinion
}
}
if = {
limit = {
has_opinion_modifier = {
target = scope:physician
modifier = failed_to_treat_me_crime_opinion
}
}
remove_opinion = {
target = scope:physician
modifier = failed_to_treat_me_crime_opinion
}
add_opinion = {
target = scope:physician
modifier = failed_to_treat_me_opinion
}
}
}
}
}
downgrade_failed_treatment_of_kin_opinions_effect = {
hidden_effect = {
if = {
limit = {
has_opinion_modifier = {
target = scope:physician
modifier = botched_treatment_of_kin_crime_opinion
}
}
remove_opinion = {
target = scope:physician
modifier = botched_treatment_of_kin_crime_opinion
}
add_opinion = {
#add nice opinion version
target = scope:physician
modifier = botched_treatment_of_kin_opinion
}
}
if = {
limit = {
has_opinion_modifier = {
target = scope:physician
modifier = failed_to_treat_kin_crime_opinion
}
}
remove_opinion = {
target = scope:physician
modifier = failed_to_treat_kin_crime_opinion
}
add_opinion = {
target = scope:physician
modifier = failed_to_treat_kin_opinion
}
}
}
}
execute_physician_effect = {
execute_prisoner_effect = {
VICTIM = scope:physician
EXECUTIONER = root
}
stress_impact = {
compassionate = major_stress_impact_gain
just = minor_stress_impact_gain
forgiving = medium_stress_impact_gain
}
}
imprison_physician_effect = {
custom_tooltip = health.3107.d.tt
imprison_character_effect = {
TARGET = scope:physician
IMPRISONER = root
}
root = { remove_relation_court_physician = scope:physician }
stress_impact = {
compassionate = medium_stress_impact_gain
just = minor_stress_impact_gain
forgiving = minor_stress_impact_gain
}
}
chastise_physician_effect = {
scope:physician = {
add_character_modifier = {
modifier = chastised_physician_modifier
years = 5
}
}
if = {
limit = {
exists = scope:sick_character
scope:sick_character = { this = root }
}
downgrade_failed_treatment_of_me_opinions_effect = yes #You can no longer punish them
}
else_if = {
limit = {
exists = scope:sick_character
}
downgrade_failed_treatment_of_kin_opinions_effect = yes #You can no longer punish them
}
stress_impact = {
vengeful = medium_stress_impact_gain
}
}
forgive_physician_effect = {
if = {
limit = {
exists = scope:sick_character
scope:sick_character = { this = root }
}
downgrade_failed_treatment_of_me_opinions_effect = yes #You can no longer punish them
}
else_if = {
limit = {
exists = scope:sick_character
}
downgrade_failed_treatment_of_kin_opinions_effect = yes #You can no longer punish them
}
reverse_add_opinion = {
target = scope:physician
modifier = grateful_opinion
opinion = 15
}
stress_impact = {
vengeful = major_stress_impact_gain
wrathful = medium_stress_impact_gain
}
}
###DISEASE MESSAGES###
inform_liege_about_disease_treatment_effect = {
hidden_effect = {
save_scope_value_as = {
name = treatment
value = flag:$TREATMENT$
}
save_scope_value_as = {
name = outcome
value = flag:$OUTCOME$
}
#To save scope for portrait
if = {
limit = {
scope:physician != scope:sick_character
}
scope:physician = { save_scope_as = portrait }
}
#Is liege generally responsible for our treatment?
if = {
limit = { liege_is_responsible_for_treatment_trigger = yes }
#Toast messages for success and minor failures: only if liege actually picked the treatment
#Event for major failures and death: always
liege = {
#CRITICAL SUCCESS & SUCCESS (TOAST)
if = {
limit = {
exists = scope:treatment_picker
this = scope:treatment_picker
OR = {
scope:outcome = flag:success
scope:outcome = flag:critical_success
}
}
send_interface_toast = {
title = court_physician_treatment_success_message_title
left_icon = scope:sick_character
right_icon = scope:portrait
disease_treatment_result_tooltip_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
}
}
#FAILURE
else_if = {
limit = { scope:outcome = flag:failure }
#SAFE FAILURE (TOAST)
if = {
limit = {
exists = scope:treatment_picker
this = scope:treatment_picker
scope:treatment = flag:safe
}
send_interface_toast = {
title = court_physician_treatment_failure_message_title
left_icon = scope:sick_character
right_icon = scope:portrait
wound_treatment_result_tooltip_effect = { TREATMENT = $TREATMENT$ OUTCOME = $OUTCOME$ }
}
}
#RISKY FAILURE (EVENT)
else_if = {
limit = { scope:treatment = flag:risky }
save_scope_value_as = {
name = disease_or_wound
value = flag:disease
}
trigger_event = health.3200
}
#MYSTIC FAILURE (EVENT)
else_if = {
limit = { scope:treatment = flag:mystic }
trigger_event = health.3201
#reveal secret in this event
}
}
#DEATH (EVENT)
else_if = {
limit = { scope:outcome = flag:death }
add_character_flag = {
flag = sent_relevant_death_event #This blocks further death events triggered by death_management.0001
days = 5
}
trigger_event = health.3200
}
}
}
}
}
### WOUND MESSAGES ###
inform_liege_about_wound_treatment_effect = {
hidden_effect = {
save_scope_value_as = {
name = treatment
value = flag:$TREATMENT$
}
save_scope_value_as = {
name = outcome
value = flag:$OUTCOME$
}
#Is liege generally responsible for our treatment?
if = {
limit = { liege_is_responsible_for_treatment_trigger = yes }
#Success and minor failure: no message
#Major failure and death: event
liege = {
#RISKY FAILURE
if = {
limit = {
scope:outcome = flag:failure
scope:treatment = flag:risky
}
save_scope_value_as = {
name = disease_or_wound
value = flag:wound
}
trigger_event = health.3200
}
#RISKY DEATH
else_if = {
limit = { scope:outcome = flag:death }
save_scope_value_as = {
name = disease_or_wound
value = flag:wound
}
add_character_flag = {
flag = sent_relevant_death_event #This blocks further death events triggered by death_management.0001
days = 5
}
trigger_event = health.3200
}
}
}
}
}
#Currently no message to liege because liege never picks wound treatment and safe success is not noteworthy
#Effect run when you commit suicide
committed_suicide_effect = {
if = {
limit = {
any_vassal = { }
}
every_vassal = {
custom = all_vassals
add_opinion = {
modifier = suicide_opinion
target = root
opinion = -30
}
}
}
if = {
limit = {
is_ai = yes
exists = dynasty
}
dynasty = {
add_dynasty_prestige = medium_dynasty_prestige_loss
}
}
else_if = {
limit = { exists = dynasty }
dynasty = {
add_dynasty_prestige_level = -1
}
}
add_piety_level = -1
death = {
death_reason = death_suicide
}
}
#Effect run when you attempt to commit suicide
attempted_suicide_effect = {
add_piety_level = -1
}
# Remove infirm when adding incapable so that the player doesn't just immediately die.
upgrade_infirm_to_incapable_effect = {
# Stealthily remove infirm
hidden_effect = {
if = {
limit = { has_trait = infirm }
remove_trait = infirm
}
}
# And add in capable.
add_trait = incapable
# Logging.
log_harm_event_incapability_as_variable_effect = yes
}