575 lines
14 KiB
Text
575 lines
14 KiB
Text
namespace = ep1_decision
|
|
|
|
##################################################
|
|
#
|
|
# Royal Court Court Grandeur Level & Amenity Decisions Events
|
|
#
|
|
# COURT GRANDEUR LEVELS
|
|
# 0001 - 0010 Host Fundraiser
|
|
# 0011 - 0020 Host Summit
|
|
#
|
|
# AMENITIES
|
|
# 0101 - 0110 Order Mass Eviction
|
|
# 0111 - 0120 Commission Exotic Bedchamber
|
|
##################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##################################################
|
|
# COURT GRANDEUR LEVELS
|
|
ep1_decision.0201 = {
|
|
type = character_event
|
|
title = ep1_decision.0201.t
|
|
desc = ep1_decision.0201.desc
|
|
theme = education
|
|
left_portrait = scope:good_linguist
|
|
lower_left_portrait = scope:cheap_linguist
|
|
right_portrait = scope:medium_linguist
|
|
lower_right_portrait = scope:scholarly_linguist
|
|
override_background = { reference = throne_room }
|
|
|
|
immediate = {
|
|
### Save cultures and languages
|
|
# Find 1st culture that speaks target language natively
|
|
random_culture_global = {
|
|
limit = {
|
|
exists = culture_head
|
|
scope:target_court_language = { has_court_language_of_culture = prev }
|
|
}
|
|
save_scope_as = ling_cul_1
|
|
}
|
|
# Save liege as example to fetch faiths if relevant
|
|
if = {
|
|
limit = {
|
|
exists = scope:language_scheme_type
|
|
liege = { has_court_language_of_culture = root.liege.culture }
|
|
}
|
|
liege = { save_scope_as = ling_cul_1_ruler }
|
|
}
|
|
# Otherwise find random cul_1 ruler
|
|
else = {
|
|
linguist_random_realm_effect = { CULTURE = ling_cul_1 }
|
|
}
|
|
# Find 2nd culture that speaks target language natively
|
|
if = {
|
|
limit = {
|
|
any_culture_global = {
|
|
exists = culture_head
|
|
scope:target_court_language = { has_court_language_of_culture = prev }
|
|
THIS != scope:ling_cul_1
|
|
}
|
|
}
|
|
random_culture_global = {
|
|
limit = {
|
|
exists = culture_head
|
|
scope:target_court_language = { has_court_language_of_culture = prev }
|
|
THIS != scope:ling_cul_1
|
|
}
|
|
save_scope_as = ling_cul_2
|
|
}
|
|
}
|
|
# If none, duplicate 1st
|
|
else = {
|
|
scope:ling_cul_1 = { save_scope_as = ling_cul_2 }
|
|
}
|
|
# Save random ruler of cul 2 to find faith
|
|
linguist_random_realm_effect = { CULTURE = ling_cul_2 }
|
|
# Save own culture
|
|
culture = { save_scope_as = ling_cul_3 }
|
|
# Bonus languages good linguists may know in addition to root and target
|
|
linguist_bonus_culture_effect = { CULTURE = ling_cul_1 }
|
|
linguist_bonus_culture_effect = { CULTURE = ling_cul_2 }
|
|
linguist_bonus_culture_effect = { CULTURE = ling_cul_3 }
|
|
#### Create Linguists
|
|
hidden_effect = {
|
|
# Poor Linguist
|
|
if = {
|
|
limit = { has_trait = greedy }
|
|
create_character = {
|
|
dynasty = none
|
|
template = court_linguist_cheap_template
|
|
location = root.capital_province
|
|
save_scope_as = cheap_linguist
|
|
}
|
|
}
|
|
# Average Linguist
|
|
create_character = {
|
|
dynasty = none
|
|
template = court_linguist_medium_template
|
|
location = root.capital_province
|
|
save_scope_as = medium_linguist
|
|
}
|
|
# Good Linguist
|
|
create_character = {
|
|
dynasty = none
|
|
template = court_linguist_good_template
|
|
culture = scope:ling_cul_2
|
|
faith = scope:ling_cul_2_ruler.faith
|
|
location = root.capital_province
|
|
save_scope_as = good_linguist
|
|
}
|
|
# Scholarly Linguist
|
|
if = {
|
|
limit = { has_trait = scholar }
|
|
create_character = {
|
|
dynasty = none
|
|
template = court_linguist_good_template
|
|
culture = scope:ling_cul_1
|
|
faith = scope:ling_cul_1_ruler.faith
|
|
location = root.capital_province
|
|
trait = scholar
|
|
save_scope_as = scholarly_linguist
|
|
}
|
|
if = {
|
|
limit = {
|
|
exists = scope:ling_cul_2_bonus
|
|
NOT = {
|
|
scope:scholarly_linguist = { knows_language_of_culture = scope:ling_cul_2_bonus }
|
|
}
|
|
}
|
|
scope:scholarly_linguist = { learn_language_of_culture = scope:ling_cul_2_bonus }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Expensive linguist, great teacher
|
|
option = {
|
|
name = ep1_decision.0201.a
|
|
pay_short_term_gold = {
|
|
target = scope:good_linguist
|
|
gold = medium_gold_value
|
|
}
|
|
learn_language_linguist_effect = { LINGUIST = scope:good_linguist }
|
|
stress_impact = {
|
|
greedy = medium_stress_impact_gain
|
|
}
|
|
ai_chance = {
|
|
base = 100
|
|
modifier = {
|
|
short_term_gold < medium_gold_value
|
|
factor = 0
|
|
}
|
|
}
|
|
}
|
|
|
|
# Cheaper linguist; less learning, not a good teacher
|
|
option = {
|
|
name = ep1_decision.0201.b
|
|
pay_short_term_gold = {
|
|
target = scope:medium_linguist
|
|
gold = minor_gold_value
|
|
}
|
|
learn_language_linguist_effect = { LINGUIST = scope:medium_linguist }
|
|
stress_impact = {
|
|
greedy = medium_stress_impact_gain
|
|
}
|
|
ai_chance = {
|
|
base = 100
|
|
modifier = {
|
|
short_term_gold < minor_gold_value_check
|
|
factor = 0
|
|
}
|
|
}
|
|
}
|
|
|
|
# I know a good tutor through scholarly circles!
|
|
option = {
|
|
name = ep1_decision.0201.c
|
|
trait = scholar
|
|
trigger = { has_trait = scholar }
|
|
learn_language_linguist_effect = { LINGUIST = scope:scholarly_linguist }
|
|
ai_chance = {
|
|
base = 100
|
|
}
|
|
}
|
|
|
|
# I'm cheap, get me anyone who can vaguely speak my language
|
|
option = {
|
|
name = ep1_decision.0201.d
|
|
trait = greedy
|
|
trigger = { has_trait = greedy }
|
|
learn_language_linguist_effect = { LINGUIST = scope:cheap_linguist }
|
|
ai_chance = {
|
|
base = 1000
|
|
modifier = { # Don't do it if you can hire the cool guy
|
|
has_trait = scholar
|
|
factor = 0
|
|
}
|
|
}
|
|
}
|
|
|
|
# On seconds thoughts, I won't hire a linguist at all...
|
|
option = {
|
|
name = ep1_decision.0201.e
|
|
ai_chance = {
|
|
base = 0
|
|
modifier = {
|
|
short_term_gold < minor_gold_value_check
|
|
NOR = {
|
|
has_trait = scholar
|
|
has_trait = greedy
|
|
}
|
|
add = 10
|
|
}
|
|
}
|
|
}
|
|
|
|
after = {
|
|
every_in_list = {
|
|
list = court_linguist_list
|
|
limit = {
|
|
NOT = { is_courtier_of = root }
|
|
}
|
|
silent_disappearance_effect = yes
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##################################################
|
|
# AMENITIES
|
|
|
|
##################################################
|
|
# Out with the Old
|
|
# by Ewan Cowhig Croft
|
|
# 0101 - 0110
|
|
##################################################
|
|
|
|
# Pay a little prestige to boot out all the guests from your palace.
|
|
ep1_decision.0101 = {
|
|
type = character_event
|
|
title = ep1_decision.0101.t
|
|
desc = ep1_decision.0101.desc
|
|
theme = court
|
|
left_portrait = {
|
|
character = root
|
|
animation = personality_rational
|
|
}
|
|
override_background = { reference = throne_room }
|
|
|
|
immediate = {
|
|
# Grab the capital for easy loc.
|
|
capital_barony = { save_scope_as = capital }
|
|
}
|
|
|
|
# Scope:capital is not an inn. Away, leeches!
|
|
option = {
|
|
name = ep1_decision.0101.a
|
|
|
|
# Evict your guests.
|
|
order_mass_eviction_decision_guests_only_effect = yes
|
|
|
|
stress_impact = {
|
|
shy = minor_stress_impact_loss
|
|
gregarious = medium_stress_impact_gain
|
|
}
|
|
ai_chance = {
|
|
# AI cannot access this event.
|
|
base = 100
|
|
}
|
|
}
|
|
|
|
# Everyone who doesn't have a job or a close blood tie, *out*!
|
|
option = {
|
|
name = ep1_decision.0101.b
|
|
trigger = {
|
|
# If you have no spare rooms at all, you can dismiss useless courtiers for a bit extra.
|
|
amenity_level = {
|
|
target = court_lodging_standards
|
|
value <= low_amenity_level
|
|
}
|
|
}
|
|
|
|
# Charge an extra premium.
|
|
add_prestige = {
|
|
value = order_mass_eviction_decision_cost_value
|
|
multiply = -1
|
|
}
|
|
# Evict your guests *&* courtiers.
|
|
order_mass_eviction_decision_courtiers_&_guests_effect = yes
|
|
|
|
stress_impact = {
|
|
shy = medium_stress_impact_loss
|
|
gregarious = major_stress_impact_gain
|
|
}
|
|
ai_chance = {
|
|
# AI cannot access this event.
|
|
base = 100
|
|
}
|
|
}
|
|
|
|
# On seconds thoughts, this is unbecoming...
|
|
option = {
|
|
name = ep1_decision.0101.c
|
|
|
|
# Return invested prestige.
|
|
hidden_effect = { add_prestige_no_experience = order_mass_eviction_decision_cost_value }
|
|
# & reset the cooldown.
|
|
remove_decision_cooldown = order_mass_eviction_decision
|
|
|
|
# No stress impact for cancelling out of the decision.
|
|
ai_chance = {
|
|
# AI cannot access this event.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
##################################################
|
|
# Grandiose Decor
|
|
# by Ewan Cowhig Croft
|
|
# 0111 - 0120
|
|
##################################################
|
|
|
|
# For technical reasons, this trigger can't be the same as exoticise_a_grand_hall_decision_list_builder_guts_trigger, but maintains (almost) technical parity with it.
|
|
scripted_trigger ep1_decision_0111_list_builder_guts_trigger = {
|
|
# Is the title presently active?
|
|
is_title_created = yes
|
|
# Filter out anyone already in the list.
|
|
NOT = { is_in_list = royal_courts_list }
|
|
# Check assorted holder things.
|
|
holder = {
|
|
# Filter out anyone who has the right rank but lacks a mechanical royal court.
|
|
has_royal_court = yes
|
|
this != root
|
|
# Can the two communicate?
|
|
in_diplomatic_range = root
|
|
}
|
|
}
|
|
|
|
scripted_effect ep1_decision_0111_apply_hall_effect = {
|
|
# Add mutual opinion for each non-AI involved with the interaction.
|
|
$CHOICE$ = {
|
|
if = {
|
|
limit = { is_ai = yes }
|
|
add_opinion = {
|
|
target = root
|
|
modifier = flattered_opinion
|
|
opinion = 30
|
|
}
|
|
}
|
|
}
|
|
if = {
|
|
limit = { is_ai = yes }
|
|
add_opinion = {
|
|
target = $CHOICE$
|
|
modifier = impressed_opinion
|
|
opinion = 30
|
|
}
|
|
}
|
|
# Gain a fraction of the CGV difference.
|
|
change_current_court_grandeur = $CHOICE$.ep1_decision_0111_proportional_cgv_gain_value
|
|
# Pay prestige proportional to how much CGV is gained.
|
|
add_prestige = $CHOICE$.ep1_decision_0111_proportional_prestige_cost_value
|
|
# Hand over a lil participation prestige for $CHOICE$ so that they know someone thinks their court is rad.
|
|
$CHOICE$ = {
|
|
send_interface_toast = {
|
|
title = ep1_decision.0111.toast.t
|
|
left_icon = root
|
|
# Give a little more for emperors doing this.
|
|
if = {
|
|
limit = { $CHOICE$.primary_title.tier >= tier_empire }
|
|
add_prestige = medium_prestige_gain
|
|
}
|
|
# Otherwise, just a few crumbs of prestige.
|
|
else = { add_prestige = minor_prestige_gain }
|
|
}
|
|
}
|
|
|
|
# Stress impact handled in the scripted effect, since it'll always be the same for each char.
|
|
stress_impact = {
|
|
architect = minor_stress_impact_loss
|
|
humble = medium_stress_impact_loss
|
|
arrogant = major_stress_impact_gain
|
|
}
|
|
}
|
|
|
|
# Arrange for a major room to be remodelled with decor inspired by a more grandiose culture.
|
|
ep1_decision.0111 = {
|
|
type = character_event
|
|
title = ep1_decision.0111.t
|
|
desc = ep1_decision.0111.desc
|
|
theme = court
|
|
left_portrait = {
|
|
character = root
|
|
animation = throne_room_conversation_4
|
|
}
|
|
lower_left_portrait = scope:option_1
|
|
lower_center_portrait = scope:option_2
|
|
lower_right_portrait = scope:option_3
|
|
|
|
immediate = {
|
|
# Build a list of suitable courts.
|
|
## We add the title rather than the characters to the list for a cleaner debug tooltip in-game.
|
|
every_empire = {
|
|
limit = { ep1_decision_0111_list_builder_guts_trigger = yes }
|
|
# Rack 'em up.
|
|
add_to_list = royal_courts_list
|
|
}
|
|
every_kingdom = {
|
|
limit = { ep1_decision_0111_list_builder_guts_trigger = yes }
|
|
# Rack 'em up.
|
|
add_to_list = royal_courts_list
|
|
}
|
|
# Then, filter through the list and grab appropriate options.
|
|
ordered_in_list = {
|
|
list = royal_courts_list
|
|
max = 4
|
|
check_range_bounds = no
|
|
order_by = {
|
|
# Use CGV as a base.
|
|
add = holder.court_grandeur_current
|
|
# Weight up for neighbouring realms.
|
|
if = {
|
|
limit = {
|
|
holder = {
|
|
OR = {
|
|
any_neighboring_and_across_water_realm_same_rank_owner = { this = root }
|
|
any_neighboring_and_across_water_top_liege_realm_owner = { this = root }
|
|
}
|
|
}
|
|
}
|
|
multiply = 5
|
|
}
|
|
}
|
|
if = {
|
|
limit = {
|
|
NOT = { exists = scope:option_1 }
|
|
}
|
|
holder = { save_scope_as = option_1 }
|
|
}
|
|
else_if = {
|
|
limit = {
|
|
NOT = {
|
|
holder = { this = scope:option_1 }
|
|
exists = scope:option_2
|
|
}
|
|
}
|
|
holder = { save_scope_as = option_2 }
|
|
}
|
|
else_if = {
|
|
limit = {
|
|
NOT = {
|
|
holder = { this = scope:option_1 }
|
|
holder = { this = scope:option_2 }
|
|
exists = scope:option_3
|
|
}
|
|
}
|
|
holder = { save_scope_as = option_3 }
|
|
}
|
|
}
|
|
}
|
|
|
|
# Scope:option_1 is a grand, grand place.
|
|
option = {
|
|
name = {
|
|
trigger = { scope:option_1.court_grandeur_current > root.court_grandeur_current }
|
|
text = ep1_decision.0111.a.greater_cgv
|
|
}
|
|
name = {
|
|
trigger = { always = yes }
|
|
text = ep1_decision.0111.a.lesser_cgv
|
|
}
|
|
trigger = { exists = scope:option_1 }
|
|
|
|
# Build a hall in the relevant scope's style.
|
|
ep1_decision_0111_apply_hall_effect = { CHOICE = scope:option_1 }
|
|
|
|
# Stress_impact block handled in the scripted effect.
|
|
ai_chance = {
|
|
# Generally equal likelihood for each option.
|
|
base = 100
|
|
# Otherwise, people want to model themselves after characters they like.
|
|
#opinion_modifier = { opinion_target = scope:option_1 }
|
|
}
|
|
}
|
|
|
|
# I find the architecture of scope:option_2 enthralling!
|
|
option = {
|
|
name = {
|
|
trigger = { scope:option_2.court_grandeur_current > root.court_grandeur_current }
|
|
text = ep1_decision.0111.b.greater_cgv
|
|
}
|
|
name = {
|
|
trigger = { always = yes }
|
|
text = ep1_decision.0111.b.lesser_cgv
|
|
}
|
|
trigger = { exists = scope:option_2 }
|
|
|
|
# Build a hall in the relevant scope's style.
|
|
ep1_decision_0111_apply_hall_effect = { CHOICE = scope:option_2 }
|
|
|
|
# Stress_impact block handled in the scripted effect.
|
|
ai_chance = {
|
|
# Generally equal likelihood for each option.
|
|
base = 100
|
|
# Otherwise, people want to model themselves after characters they like.
|
|
#opinion_modifier = { opinion_target = scope:option_2 }
|
|
}
|
|
}
|
|
|
|
# Perhaps a scope:option_3ikkan lounge?
|
|
option = {
|
|
name = {
|
|
trigger = { scope:option_3.court_grandeur_current > root.court_grandeur_current }
|
|
text = ep1_decision.0111.c.greater_cgv
|
|
}
|
|
name = {
|
|
trigger = { always = yes }
|
|
text = ep1_decision.0111.c.lesser_cgv
|
|
}
|
|
trigger = { exists = scope:option_3 }
|
|
|
|
# Build a hall in the relevant scope's style.
|
|
ep1_decision_0111_apply_hall_effect = { CHOICE = scope:option_3 }
|
|
|
|
# Stress_impact block handled in the scripted effect.
|
|
ai_chance = {
|
|
# Generally equal likelihood for each option.
|
|
base = 100
|
|
# Otherwise, people want to model themselves after characters they like.
|
|
#opinion_modifier = { opinion_target = scope:option_3 }
|
|
}
|
|
}
|
|
|
|
# These all seem quite foreign...
|
|
option = {
|
|
name = ep1_decision.0111.d
|
|
|
|
# Refund the gold paid; we mention this in a tooltip so that it's a bit less noticeable.
|
|
hidden_effect = { add_gold = var:exoticise_a_grand_hall_decision_refund_value }
|
|
custom_tooltip = ep1_decision.0111.d.tt
|
|
# Take the decision off cooldown.
|
|
remove_decision_cooldown = exoticise_a_grand_hall_decision
|
|
|
|
# No stress impact for cancelling out.
|
|
ai_chance = {
|
|
# If the AI has gotten this far, they should pick an option.
|
|
base = 0
|
|
}
|
|
}
|
|
|
|
after = {
|
|
# Whatever else happens, clear the refund value.
|
|
remove_variable = exoticise_a_grand_hall_decision_refund_value
|
|
}
|
|
}
|
|
|