1427 lines
36 KiB
Text
1427 lines
36 KiB
Text
|
|
namespace = fp1_shieldmaiden
|
||
|
|
|
||
|
|
scripted_trigger wrong_gender_for_fighting_in_faith_trigger = {
|
||
|
|
#Has access to the appropriate cultural parameter.
|
||
|
|
culture = { has_cultural_parameter = has_access_to_shieldmaidens }
|
||
|
|
trigger_if = { # Has the Royal Court and thus can modify pillars
|
||
|
|
limit = {
|
||
|
|
has_dlc_feature = diverge_culture # Can modify pillars
|
||
|
|
}
|
||
|
|
OR = {
|
||
|
|
AND = {
|
||
|
|
culture = { has_cultural_parameter = martial_custom_male_only_combatant }
|
||
|
|
is_female = yes
|
||
|
|
}
|
||
|
|
AND = {
|
||
|
|
culture = { has_cultural_parameter = martial_custom_female_only_combatant }
|
||
|
|
is_male = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
trigger_else = { # Does not have the Royal Court and thus combatant is governed by faith
|
||
|
|
OR = {
|
||
|
|
AND = {
|
||
|
|
faith = { has_doctrine_parameter = combatant_must_be_male_if_no_roco }
|
||
|
|
is_female = yes
|
||
|
|
}
|
||
|
|
AND = {
|
||
|
|
faith = { has_doctrine_parameter = combatant_must_be_female_if_no_roco }
|
||
|
|
is_male = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
##################################################
|
||
|
|
# Shieldmaiden Challenges You
|
||
|
|
# by Ewan Cowhig Croft
|
||
|
|
# 0001 - 0010
|
||
|
|
##################################################
|
||
|
|
|
||
|
|
scripted_trigger likely_to_be_offended_list_trigger = {
|
||
|
|
trigger_if = { # Has the Royal Court and thus can modify pillars
|
||
|
|
limit = { has_dlc_feature = diverge_culture }
|
||
|
|
culture = {
|
||
|
|
NOT = { has_cultural_parameter = martial_custom_equal_combatant }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
trigger_else = {
|
||
|
|
#Separate religions already think your ways are terrible already, co-religionists think you're making them look bad.
|
||
|
|
religion = root.religion
|
||
|
|
#No bias, no problem.
|
||
|
|
faith = {
|
||
|
|
NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
culture = {
|
||
|
|
# Warrior by merit, if strong enought you can be a warrior regardless of gender
|
||
|
|
NOT = { has_cultural_parameter = high_prowess_ignores_knight_restrictions }
|
||
|
|
}
|
||
|
|
#Existing shieldmaidens cut slack.
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
age >= childhood_education_start_age
|
||
|
|
}
|
||
|
|
|
||
|
|
scripted_trigger valid_to_become_shieldperson_trigger = {
|
||
|
|
wrong_gender_for_fighting_in_faith_trigger = yes
|
||
|
|
is_available_ai_adult = yes
|
||
|
|
prowess >= decent_skill_rating
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
NOT = { has_trait = craven }
|
||
|
|
}
|
||
|
|
|
||
|
|
scripted_trigger child_dreams_of_shieldpersonhood_trigger = {
|
||
|
|
valid_to_become_shieldperson_trigger = yes
|
||
|
|
is_courtier_of = root
|
||
|
|
location = root.location
|
||
|
|
has_character_flag = fp1_dreams_of_shieldpersondom
|
||
|
|
}
|
||
|
|
|
||
|
|
# A wrong-gender courtier wishes to fight for you
|
||
|
|
fp1_shieldmaiden.0001 = {
|
||
|
|
type = character_event
|
||
|
|
title = fp1_shieldmaiden.0001.t
|
||
|
|
desc = fp1_shieldmaiden.0001.desc
|
||
|
|
theme = martial
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:shieldmaiden
|
||
|
|
animation = personality_bold
|
||
|
|
}
|
||
|
|
right_portrait = {
|
||
|
|
character = scope:challenged_knight
|
||
|
|
animation = dismissal
|
||
|
|
}
|
||
|
|
override_background = { reference = throne_room }
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
#DLC check.
|
||
|
|
has_fp1_dlc_trigger = yes
|
||
|
|
#Standard checks.
|
||
|
|
is_available_at_peace_adult = yes
|
||
|
|
is_landed = yes
|
||
|
|
NOT = { has_character_flag = had_event_fp1_shieldmaiden_0001 }
|
||
|
|
#Has access to the appropriate cultural parameter.
|
||
|
|
culture = { has_cultural_parameter = has_access_to_shieldmaidens }
|
||
|
|
#Your society must consider one gender or the other lesser.
|
||
|
|
trigger_if = { # Has the Royal Court and thus can modify pillars
|
||
|
|
limit = { has_dlc_feature = diverge_culture }
|
||
|
|
culture = { NOT = { has_cultural_parameter = martial_custom_equal_combatant } }
|
||
|
|
}
|
||
|
|
trigger_else = {
|
||
|
|
faith = { NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } }
|
||
|
|
}
|
||
|
|
#You've got to have at least one suitable courtier or guest.
|
||
|
|
any_courtier_or_guest = { valid_to_become_shieldperson_trigger = yes }
|
||
|
|
#Aaaand you need a decent knight to be challenged.
|
||
|
|
any_knight = {
|
||
|
|
is_available_ai_adult = yes
|
||
|
|
is_ruler = no
|
||
|
|
wrong_gender_for_fighting_in_faith_trigger = no
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
weight_multiplier = {
|
||
|
|
base = 1
|
||
|
|
|
||
|
|
#More likely if you're a ruling wrong-gender person yourself.
|
||
|
|
modifier = {
|
||
|
|
add = 1
|
||
|
|
wrong_gender_for_fighting_in_faith_trigger = yes
|
||
|
|
}
|
||
|
|
#Even more so if you're actually a shieldmaiden yourself.
|
||
|
|
modifier = {
|
||
|
|
add = 1
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
}
|
||
|
|
# Weight up drastically if one of your children wishes to become a shieldmaiden.
|
||
|
|
modifier = {
|
||
|
|
add = 10
|
||
|
|
any_child = { child_dreams_of_shieldpersonhood_trigger = yes }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
#Put the event on cooldown for a decade.
|
||
|
|
add_character_flag = {
|
||
|
|
flag = had_event_fp1_shieldmaiden_0001
|
||
|
|
days = 3650
|
||
|
|
}
|
||
|
|
#Sort the best possible shieldmaiden.
|
||
|
|
ordered_courtier_or_guest = {
|
||
|
|
# Grab children who were promised first.
|
||
|
|
limit = {
|
||
|
|
is_child_of = root
|
||
|
|
child_dreams_of_shieldpersonhood_trigger = yes
|
||
|
|
}
|
||
|
|
# Otherwise, look down available courtiers.
|
||
|
|
alternative_limit = {
|
||
|
|
valid_to_become_shieldperson_trigger = yes
|
||
|
|
#Check that it makes sense for this character to ask to be your shieldmaiden.
|
||
|
|
OR = {
|
||
|
|
#Meaning they should either not be one already...
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
#... or be a wandering shieldmaiden.
|
||
|
|
is_pool_guest = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
order_by = {
|
||
|
|
value = prowess
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = brave }
|
||
|
|
add = 10
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = craven }
|
||
|
|
add = -10
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = ambitious }
|
||
|
|
add = 10
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = content }
|
||
|
|
add = -10
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = arrogant }
|
||
|
|
add = 5
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = humble }
|
||
|
|
add = -5
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = gregarious }
|
||
|
|
add = 5
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { has_trait = shy }
|
||
|
|
add = -5
|
||
|
|
}
|
||
|
|
}
|
||
|
|
save_scope_as = shieldmaiden
|
||
|
|
}
|
||
|
|
#And a suitable knight.
|
||
|
|
ordered_knight = {
|
||
|
|
limit = {
|
||
|
|
is_available_ai_adult = yes
|
||
|
|
is_ruler = no
|
||
|
|
wrong_gender_for_fighting_in_faith_trigger = no
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
}
|
||
|
|
order_by = prowess
|
||
|
|
save_scope_as = challenged_knight
|
||
|
|
}
|
||
|
|
#For reference, add all courtiers & vassals who are likely to be offended if you just let any old wrong-gender human defy societal gender norms.
|
||
|
|
every_courtier = {
|
||
|
|
limit = { likely_to_be_offended_list_trigger = yes }
|
||
|
|
add_to_list = prejudiced_courtiers_list
|
||
|
|
}
|
||
|
|
every_vassal = {
|
||
|
|
limit = { likely_to_be_offended_list_trigger = yes }
|
||
|
|
add_to_list = prejudiced_courtiers_list
|
||
|
|
}
|
||
|
|
#Finally, if scope:shieldmaiden has dreamt of this day, clear the dream. Hopefully it went positively!
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
if = {
|
||
|
|
limit = { has_character_flag = fp1_dreams_of_shieldpersondom }
|
||
|
|
remove_character_flag = fp1_dreams_of_shieldpersondom
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#You allow them to fight your knight.
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0001.a
|
||
|
|
|
||
|
|
scope:challenged_knight = {
|
||
|
|
#Your knight may hurt the prospective shieldmaiden.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
random = {
|
||
|
|
chance = scope:challenged_knight.prowess
|
||
|
|
increase_wounds_no_death_effect = { REASON = duel }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#And, depending on how fearsome they were, your knight may have been hurt right back.
|
||
|
|
random = {
|
||
|
|
chance = scope:shieldmaiden.prowess
|
||
|
|
increase_wounds_no_death_effect = { REASON = duel }
|
||
|
|
}
|
||
|
|
|
||
|
|
#Sort the duel.
|
||
|
|
duel = {
|
||
|
|
skill = prowess
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
#Your knight defeats the prospective shieldmaiden.
|
||
|
|
40 = {
|
||
|
|
compare_modifier = {
|
||
|
|
value = scope:duel_value
|
||
|
|
multiplier = 3.5
|
||
|
|
min = -49
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0001.a.tt_success
|
||
|
|
root = {
|
||
|
|
send_interface_toast = {
|
||
|
|
title = fp1_shieldmaiden.0001.a.tt_success
|
||
|
|
left_icon = scope:shieldmaiden
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
#scope:shieldmaiden is a tad miffed.
|
||
|
|
add_opinion = {
|
||
|
|
target = scope:challenged_knight
|
||
|
|
modifier = angry_opinion
|
||
|
|
opinion = -20
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#For your trouble, you and the knight split the prestige.
|
||
|
|
add_prestige = minor_prestige_gain
|
||
|
|
scope:challenged_knight = { add_prestige = minor_prestige_gain }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#Your knight is defeated.
|
||
|
|
60 = {
|
||
|
|
compare_modifier = {
|
||
|
|
value = scope:duel_value
|
||
|
|
multiplier = -3.5
|
||
|
|
min = -49
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0001.a.tt_failure
|
||
|
|
root = {
|
||
|
|
send_interface_toast = {
|
||
|
|
title = fp1_shieldmaiden.0001.a.tt_failure
|
||
|
|
left_icon = scope:shieldmaiden
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
#Officially designated a shieldmaiden!
|
||
|
|
add_trait = shieldmaiden
|
||
|
|
#Happy with the outcome of the duel.
|
||
|
|
add_opinion = {
|
||
|
|
target = scope:challenged_knight
|
||
|
|
modifier = pleased_opinion
|
||
|
|
opinion = 20
|
||
|
|
}
|
||
|
|
#If scope:shieldmaiden is a guest, you get them for free.
|
||
|
|
if = {
|
||
|
|
limit = { is_pool_guest = yes }
|
||
|
|
root = { add_courtier = scope:shieldmaiden }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_honor = 0.25
|
||
|
|
ai_energy = -0.25
|
||
|
|
ai_boldness = -0.25
|
||
|
|
}
|
||
|
|
modifier = { #Cowardly shieldmaidens don't see the necessity of a fight.
|
||
|
|
add = -40
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = craven
|
||
|
|
}
|
||
|
|
modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it (either way).
|
||
|
|
add = 20
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = brave
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#You take the challenge yourself.
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0001.b
|
||
|
|
|
||
|
|
#You may have hurt the prospective shieldmaiden in the duel.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
random = {
|
||
|
|
chance = root.prowess
|
||
|
|
increase_wounds_no_death_effect = { REASON = duel }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#Plus they may have hurt you right back.
|
||
|
|
random = {
|
||
|
|
chance = scope:shieldmaiden.prowess
|
||
|
|
increase_wounds_no_death_effect = { REASON = duel }
|
||
|
|
}
|
||
|
|
|
||
|
|
#Sort the duel.
|
||
|
|
duel = {
|
||
|
|
skill = prowess
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
#You defeat the prospective shieldmaiden.
|
||
|
|
40 = {
|
||
|
|
compare_modifier = {
|
||
|
|
value = scope:duel_value
|
||
|
|
multiplier = 3.5
|
||
|
|
min = -49
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0001.b.tt_success
|
||
|
|
send_interface_toast = {
|
||
|
|
title = fp1_shieldmaiden.0001.b.tt_success
|
||
|
|
left_icon = scope:shieldmaiden
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
#scope:shieldmaiden is a tad miffed.
|
||
|
|
add_opinion = {
|
||
|
|
target = root
|
||
|
|
modifier = angry_opinion
|
||
|
|
opinion = -20
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#Since you fought yourself, you get all the prestige.
|
||
|
|
add_prestige = medium_prestige_gain
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#You are defeated.
|
||
|
|
60 = {
|
||
|
|
compare_modifier = {
|
||
|
|
value = scope:duel_value
|
||
|
|
multiplier = -3.5
|
||
|
|
min = -49
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0001.b.tt_failure
|
||
|
|
send_interface_toast = {
|
||
|
|
title = fp1_shieldmaiden.0001.b.tt_failure
|
||
|
|
left_icon = scope:shieldmaiden
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
#Officially designated a shieldmaiden!
|
||
|
|
add_trait = shieldmaiden
|
||
|
|
#Happy with the outcome of the duel.
|
||
|
|
add_opinion = {
|
||
|
|
target = root
|
||
|
|
modifier = pleased_opinion
|
||
|
|
opinion = 20
|
||
|
|
}
|
||
|
|
#If scope:shieldmaiden is a guest, you get them for free.
|
||
|
|
if = {
|
||
|
|
limit = { is_pool_guest = yes }
|
||
|
|
root = { add_courtier = scope:shieldmaiden }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stress_impact = {
|
||
|
|
brave = medium_stress_impact_loss
|
||
|
|
craven = medium_stress_impact_gain
|
||
|
|
}
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_boldness = 0.5
|
||
|
|
ai_vengefulness = 0.25
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = 20
|
||
|
|
has_trait = brave
|
||
|
|
}
|
||
|
|
modifier = { #Weight down for stress.
|
||
|
|
add = -20
|
||
|
|
has_trait = craven
|
||
|
|
}
|
||
|
|
modifier = { #Cowardly shieldmaidens don't see the necessity of a fight.
|
||
|
|
add = -40
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = craven
|
||
|
|
}
|
||
|
|
modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it (either way).
|
||
|
|
add = 20
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = brave
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#Accept them outright.
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0001.c
|
||
|
|
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
#Grant the shieldmaiden trait.
|
||
|
|
add_trait = shieldmaiden
|
||
|
|
#Opinion gain with new shieldmaiden.
|
||
|
|
add_opinion = {
|
||
|
|
target = root
|
||
|
|
modifier = fp1_accepted_my_sword_opinion
|
||
|
|
}
|
||
|
|
#If scope:shieldmaiden is a guest, you get them for free.
|
||
|
|
if = {
|
||
|
|
limit = { is_pool_guest = yes }
|
||
|
|
root = { add_courtier = scope:shieldmaiden }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#Loyalty hook on the new shieldmaiden for your trust.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
NOR = {
|
||
|
|
has_hook_of_type = {
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
type = loyalty_hook
|
||
|
|
}
|
||
|
|
has_hook_of_type = {
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
type = ritual_best_friend_hook
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
has_hook = scope:shieldmaiden
|
||
|
|
}
|
||
|
|
hidden_effect = { remove_hook = { target = scope:shieldmaiden } }
|
||
|
|
}
|
||
|
|
add_hook = {
|
||
|
|
type = loyalty_hook
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#Opinion loss with all courtiers who do not feel they should be able to fight.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
any_in_list = {
|
||
|
|
list = prejudiced_courtiers_list
|
||
|
|
count >= 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
every_in_list = {
|
||
|
|
list = prejudiced_courtiers_list
|
||
|
|
limit = {
|
||
|
|
#Exempt shieldmaidens; we do this at this point, otherwise the shieldmaiden themself will objet to their own shieldmaidenry.
|
||
|
|
NOT = { has_trait = shieldmaiden }
|
||
|
|
}
|
||
|
|
custom = fp1_accepted_shieldmaiden_without_question
|
||
|
|
add_opinion = {
|
||
|
|
target = root
|
||
|
|
modifier = fp1_defied_religious_traditions_opinion
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stress_impact = {
|
||
|
|
arbitrary = minor_stress_impact_loss
|
||
|
|
just = minor_stress_impact_gain
|
||
|
|
arrogant = medium_stress_impact_gain
|
||
|
|
}
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_compassion = 0.5
|
||
|
|
ai_honor = 0.25
|
||
|
|
ai_zeal = -0.25
|
||
|
|
}
|
||
|
|
modifier = { #Weight down for stress.
|
||
|
|
add = 10
|
||
|
|
has_trait = arbitrary
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = -10
|
||
|
|
has_trait = just
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = -20
|
||
|
|
has_trait = arrogant
|
||
|
|
}
|
||
|
|
modifier = { #Cowardly shieldmaidens don't see the necessity of a fight.
|
||
|
|
add = 40
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = craven
|
||
|
|
}
|
||
|
|
modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it.
|
||
|
|
add = -40
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
has_trait = brave
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#Reject them outright.
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0001.d
|
||
|
|
|
||
|
|
#Hefty opinion loss.
|
||
|
|
reverse_add_opinion = {
|
||
|
|
target = scope:shieldmaiden
|
||
|
|
modifier = fp1_rejected_my_sword_opinion
|
||
|
|
}
|
||
|
|
|
||
|
|
#Stepped rivalry between you and the potential shieldmaiden.
|
||
|
|
progress_towards_rival_effect = {
|
||
|
|
REASON = rival_shieldmaiden_declined
|
||
|
|
CHARACTER = scope:shieldmaiden
|
||
|
|
OPINION = 0
|
||
|
|
}
|
||
|
|
|
||
|
|
stress_impact = {
|
||
|
|
arbitrary = minor_stress_impact_loss
|
||
|
|
arrogant = medium_stress_impact_loss
|
||
|
|
just = minor_stress_impact_gain
|
||
|
|
humble = medium_stress_impact_gain
|
||
|
|
}
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_zeal = 0.25
|
||
|
|
ai_compassion = -0.25
|
||
|
|
ai_honor = -0.25
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = 10
|
||
|
|
has_trait = arbitrary
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = 20
|
||
|
|
has_trait = arrogant
|
||
|
|
}
|
||
|
|
modifier = { #Weight down for stress.
|
||
|
|
add = -10
|
||
|
|
has_trait = just
|
||
|
|
}
|
||
|
|
modifier = { #Weight down for stress.
|
||
|
|
add = -20
|
||
|
|
has_trait = humble
|
||
|
|
}
|
||
|
|
modifier = { #Shieldmaidens are, themselves, more likely to give someone a shot.
|
||
|
|
add = -40
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
##################################################
|
||
|
|
# Shieldmaiden Stymies an Escape Attempt
|
||
|
|
# by Ewan Cowhig Croft
|
||
|
|
# 0011 - 0020
|
||
|
|
##################################################
|
||
|
|
|
||
|
|
# A shieldmaiden stops your escape attempt in its tracks.
|
||
|
|
fp1_shieldmaiden.0011 = {
|
||
|
|
type = character_event
|
||
|
|
title = fp1_shieldmaiden.0011.t
|
||
|
|
desc = fp1_shieldmaiden.0011.desc
|
||
|
|
theme = prison
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:prisoner
|
||
|
|
animation = fear
|
||
|
|
}
|
||
|
|
right_portrait = {
|
||
|
|
character = scope:shieldmaiden
|
||
|
|
animation = disapproval
|
||
|
|
}
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
#DLC check.
|
||
|
|
has_fp1_dlc_trigger = yes
|
||
|
|
#Requires a shieldmaiden to get going.
|
||
|
|
imprisoner = {
|
||
|
|
any_courtier = { suitable_shieldmaiden_gaoler_trigger = yes }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
play_music_cue = "mx_cue_prison"
|
||
|
|
save_scope_as = prisoner
|
||
|
|
imprisoner = {
|
||
|
|
#Grab an appropriate shieldmaiden.
|
||
|
|
random_courtier = {
|
||
|
|
limit = { suitable_shieldmaiden_gaoler_trigger = yes }
|
||
|
|
save_scope_as = shieldmaiden
|
||
|
|
}
|
||
|
|
#Inform the imprisoner so that they're aware they're getting value for money.
|
||
|
|
trigger_event = fp1_shieldmaiden.0012
|
||
|
|
}
|
||
|
|
scope:imprisoner = {
|
||
|
|
add_opinion = {
|
||
|
|
target = root
|
||
|
|
modifier = respect_opinion
|
||
|
|
opinion = -20
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#The shieldmaiden lays the smackdown.
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0011.a
|
||
|
|
increase_wounds_no_death_effect = { REASON = beaten }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# A shieldmaiden has stopped one of your prisoners escaping.
|
||
|
|
fp1_shieldmaiden.0012 = {
|
||
|
|
type = character_event
|
||
|
|
title = fp1_shieldmaiden.0012.t
|
||
|
|
desc = fp1_shieldmaiden.0012.desc
|
||
|
|
theme = prison
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:prisoner
|
||
|
|
animation = fear
|
||
|
|
}
|
||
|
|
right_portrait = {
|
||
|
|
character = scope:shieldmaiden
|
||
|
|
animation = disapproval
|
||
|
|
}
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
scope:prisoner = {
|
||
|
|
is_of_major_or_minor_interest_trigger = { CHARACTER = scope:imprisoner }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
play_music_cue = "mx_cue_prison"
|
||
|
|
#Show the wounds.
|
||
|
|
show_as_tooltip = {
|
||
|
|
scope:prisoner = {
|
||
|
|
increase_wounds_effect = { REASON = beaten }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#Good job!
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0012.a
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
add_opinion = {
|
||
|
|
target = scope:imprisoner
|
||
|
|
modifier = compliment_opinion
|
||
|
|
opinion = 10
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#Bad job! [in case this was an overreaction]
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0012.b
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
add_opinion = {
|
||
|
|
target = scope:imprisoner
|
||
|
|
modifier = annoyed_opinion
|
||
|
|
opinion = -10
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
##################################################
|
||
|
|
# Shieldmaiden saves you from Murder Attempt
|
||
|
|
# by Petter Vilberg & Ewan Cowhig Croft
|
||
|
|
# 0021 - 0030
|
||
|
|
##################################################
|
||
|
|
|
||
|
|
scripted_trigger suitable_shieldmaiden_savior_trigger = {
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
bodyguard_will_actually_do_job_trigger = yes
|
||
|
|
}
|
||
|
|
|
||
|
|
# Scheme owner: shieldmaiden intervenes in murder.
|
||
|
|
fp1_shieldmaiden.0021 = {
|
||
|
|
type = character_event
|
||
|
|
window = scheme_failed_event
|
||
|
|
title = fp1_shieldmaiden.0021.t
|
||
|
|
desc = {
|
||
|
|
first_valid = {
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:hired_thugs }
|
||
|
|
desc = fp1_shieldmaiden.0021.desc.thugs
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:riled_up_mob }
|
||
|
|
desc = fp1_shieldmaiden.0021.desc.mob
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:lured_into_forest }
|
||
|
|
desc = fp1_shieldmaiden.0021.desc.lured_into_forest
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:child_pushed }
|
||
|
|
desc = fp1_shieldmaiden.0021.desc.child_pushed
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0021.desc.assassin
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { exists = local_var:shieldmaiden_dies }
|
||
|
|
desc = fp1_shieldmaiden.0021.shieldmaiden_dies
|
||
|
|
}
|
||
|
|
}
|
||
|
|
theme = murder_scheme
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:owner
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
animation = fear
|
||
|
|
}
|
||
|
|
animation = stress
|
||
|
|
}
|
||
|
|
center_portrait = {
|
||
|
|
character = scope:bodyguard
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { is_alive = no }
|
||
|
|
animation = map_fear
|
||
|
|
}
|
||
|
|
animation = random_weapon_aggressive
|
||
|
|
camera = camera_event_center_pointing_left
|
||
|
|
}
|
||
|
|
right_portrait = {
|
||
|
|
character = scope:target
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
animation = rage
|
||
|
|
}
|
||
|
|
animation = paranoia
|
||
|
|
}
|
||
|
|
widget = {
|
||
|
|
gui = "event_window_widget_scheme"
|
||
|
|
container = "custom_widgets_container"
|
||
|
|
}
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
#DLC check.
|
||
|
|
has_fp1_dlc_trigger = yes
|
||
|
|
scope:target = {
|
||
|
|
any_court_position_holder = {
|
||
|
|
type = bodyguard_court_position
|
||
|
|
suitable_shieldmaiden_savior_trigger = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
# Select a murder method.
|
||
|
|
random_list = {
|
||
|
|
100 = {
|
||
|
|
save_scope_value_as = {
|
||
|
|
name = murder_method
|
||
|
|
value = flag:hired_assassin
|
||
|
|
}
|
||
|
|
}
|
||
|
|
100 = {
|
||
|
|
save_scope_value_as = {
|
||
|
|
name = murder_method
|
||
|
|
value = flag:hired_thugs
|
||
|
|
}
|
||
|
|
}
|
||
|
|
100 = {
|
||
|
|
save_scope_value_as = {
|
||
|
|
name = murder_method
|
||
|
|
value = flag:riled_up_mob
|
||
|
|
}
|
||
|
|
}
|
||
|
|
100 = {
|
||
|
|
save_scope_value_as = {
|
||
|
|
name = murder_method
|
||
|
|
value = flag:lured_into_forest
|
||
|
|
}
|
||
|
|
}
|
||
|
|
100 = {
|
||
|
|
save_scope_value_as = {
|
||
|
|
name = murder_method
|
||
|
|
value = flag:child_pushed
|
||
|
|
}
|
||
|
|
# Try to grab a suitable thing to lure them in with too.
|
||
|
|
rooftop_murder_lure_for_child_effect = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Sort our shieldmaiden
|
||
|
|
scope:target = {
|
||
|
|
ordered_court_position_holder = {
|
||
|
|
type = bodyguard_court_position
|
||
|
|
limit = { suitable_shieldmaiden_savior_trigger = yes }
|
||
|
|
order_by = { value = murder_weight_best_bodyguard_value }
|
||
|
|
save_scope_as = shieldmaiden
|
||
|
|
}
|
||
|
|
}
|
||
|
|
hidden_effect = {
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
# Shieldmaidens can't die from some murder methods.
|
||
|
|
NOR = {
|
||
|
|
scope:murder_method = flag:lured_into_forest
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
}
|
||
|
|
}
|
||
|
|
random = {
|
||
|
|
chance = {
|
||
|
|
value = 75
|
||
|
|
subtract = scope:shieldmaiden.prowess
|
||
|
|
}
|
||
|
|
set_local_variable = {
|
||
|
|
name = shieldmaiden_dies
|
||
|
|
value = yes
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if = {
|
||
|
|
limit = { exists = local_var:shieldmaiden_dies }
|
||
|
|
show_as_tooltip = {
|
||
|
|
murder_interception_handle_extra_deaths_effect = {
|
||
|
|
VICTIM = scope:shieldmaiden
|
||
|
|
REASON = death_murder
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
random_dummy_gender_assassin_effect = yes
|
||
|
|
murder_failure_effect = yes
|
||
|
|
}
|
||
|
|
|
||
|
|
#It's over.
|
||
|
|
option = { name = fp1_shieldmaiden.0021.a }
|
||
|
|
|
||
|
|
#It's not over till I say it's over!
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0021.b
|
||
|
|
trigger = {
|
||
|
|
NOT = { exists = scope:scheme_discovered }
|
||
|
|
}
|
||
|
|
restart_murder_scheme_effect = yes
|
||
|
|
}
|
||
|
|
|
||
|
|
# Fire the rest of the outcome.
|
||
|
|
after = {
|
||
|
|
scope:target = { trigger_event = fp1_shieldmaiden.0022 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Shieldmaiden saves you from murder
|
||
|
|
fp1_shieldmaiden.0022 = {
|
||
|
|
type = character_event
|
||
|
|
window = scheme_target_event
|
||
|
|
title = fp1_shieldmaiden.0022.t
|
||
|
|
desc = {
|
||
|
|
# This block is only for the setup of child_pushed.
|
||
|
|
first_valid = {
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
exists = scope:child_pushed_dog
|
||
|
|
}
|
||
|
|
desc = murder_outcome.5001.child_pushed_dog
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
exists = scope:child_pushed_cat
|
||
|
|
}
|
||
|
|
desc = murder_outcome.5001.child_pushed_cat
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
exists = scope:child_pushed_toy
|
||
|
|
}
|
||
|
|
desc = murder_outcome.5001.child_pushed_toy
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
}
|
||
|
|
desc = murder_outcome.5001.child_pushed
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Shieldmaided saves you!
|
||
|
|
first_valid = {
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:hired_thugs }
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.thugs
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:riled_up_mob }
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.mob
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:lured_into_forest }
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.lured_into_forest
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:murder_method = flag:child_pushed }
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.child_pushed
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.assassin
|
||
|
|
}
|
||
|
|
# ...but did they pay the ultimate price?
|
||
|
|
first_valid = {
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
exists = local_var:shieldmaiden_dies
|
||
|
|
scope:murder_method = flag:hired_assassin
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.assassin.shieldmaiden_dies
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
exists = local_var:shieldmaiden_dies
|
||
|
|
scope:murder_method = flag:hired_thugs
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.thugs.shieldmaiden_dies
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
exists = local_var:shieldmaiden_dies
|
||
|
|
scope:murder_method = flag:riled_up_mob
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_dies
|
||
|
|
}
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = {
|
||
|
|
NOT = { exists = local_var:shieldmaiden_dies }
|
||
|
|
scope:murder_method = flag:riled_up_mob
|
||
|
|
}
|
||
|
|
desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_lives
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# And who was responsible!?
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
desc = fp1_shieldmaiden.0022.owner_discovered
|
||
|
|
}
|
||
|
|
}
|
||
|
|
theme = murder_scheme
|
||
|
|
override_background = {
|
||
|
|
trigger = { scope:murder_method = flag:hired_thugs }
|
||
|
|
reference = wilderness_scope
|
||
|
|
}
|
||
|
|
override_background = {
|
||
|
|
trigger = {
|
||
|
|
OR = {
|
||
|
|
scope:murder_method = flag:riled_up_mob
|
||
|
|
scope:murder_method = flag:child_pushed
|
||
|
|
}
|
||
|
|
}
|
||
|
|
reference = courtyard
|
||
|
|
}
|
||
|
|
override_background = {
|
||
|
|
trigger = { scope:murder_method = flag:lured_into_forest }
|
||
|
|
reference = wilderness_forest
|
||
|
|
}
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:target
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
animation = rage
|
||
|
|
}
|
||
|
|
animation = paranoia
|
||
|
|
}
|
||
|
|
center_portrait = {
|
||
|
|
character = scope:bodyguard
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { is_alive = no }
|
||
|
|
animation = map_fear
|
||
|
|
}
|
||
|
|
animation = random_weapon_aggressive
|
||
|
|
}
|
||
|
|
right_portrait = {
|
||
|
|
character = scope:owner_to_reveal
|
||
|
|
triggered_animation = {
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
animation = fear
|
||
|
|
}
|
||
|
|
animation = stress
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
if = {
|
||
|
|
limit = { scope:murder_method = flag:hired_thugs }
|
||
|
|
scope:home_province = { save_scope_as = background_wilderness_scope }
|
||
|
|
}
|
||
|
|
# Handle the death of the Shieldmaiden if necessary
|
||
|
|
if = {
|
||
|
|
limit = { exists = local_var:shieldmaiden_dies }
|
||
|
|
murder_interception_handle_extra_deaths_effect = {
|
||
|
|
VICTIM = scope:shieldmaiden
|
||
|
|
REASON = death_murder
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#Who could do such a thing?
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0022.a
|
||
|
|
trigger = {
|
||
|
|
NOT = { exists = scope:scheme_discovered }
|
||
|
|
}
|
||
|
|
custom_tooltip = murder_save.failure_unknown_owner_tt
|
||
|
|
}
|
||
|
|
|
||
|
|
#Vengeance!
|
||
|
|
option = {
|
||
|
|
name = fp1_shieldmaiden.0022.b
|
||
|
|
trigger = { exists = scope:scheme_discovered }
|
||
|
|
custom_tooltip = murder_save.failure_known_owner_tt
|
||
|
|
}
|
||
|
|
|
||
|
|
after = {
|
||
|
|
add_character_modifier = {
|
||
|
|
modifier = watchful_modifier
|
||
|
|
days = watchful_modifier_duration
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
##################################################
|
||
|
|
# Shieldmaiden has Developed Mad Skills
|
||
|
|
# by Ewan Cowhig Croft
|
||
|
|
# 0031 - 0040
|
||
|
|
##################################################
|
||
|
|
|
||
|
|
scripted_trigger valid_for_shieldmaiden_veterancy = {
|
||
|
|
# Must actually have the shieldmaiden trait.
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
# Must still be in a situation where shieldmaidenhood is exceptional.
|
||
|
|
wrong_gender_for_fighting_in_faith_trigger = yes
|
||
|
|
}
|
||
|
|
|
||
|
|
scripted_trigger valid_for_shieldmaiden_level_up = {
|
||
|
|
# Are they an eligible shieldmaiden?
|
||
|
|
valid_for_shieldmaiden_veterancy = yes
|
||
|
|
# Have they met the level up requirements?
|
||
|
|
has_variable = shieldmaiden_veterancy
|
||
|
|
this.var:shieldmaiden_veterancy >= shieldmaiden_veterancy_cap
|
||
|
|
# Already checked for a root shieldmaiden, but we re-check for courtiers.
|
||
|
|
is_available_at_peace_adult = yes
|
||
|
|
# Finally, they mustn't have all the shieldmaiden modifiers maxed out already.
|
||
|
|
NAND = {
|
||
|
|
has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Track the number of valid battles as a shieldmaiden a character has been in.
|
||
|
|
fp1_shieldmaiden.0031 = {
|
||
|
|
hidden = yes
|
||
|
|
scope = combat_side
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
#DLC check.
|
||
|
|
has_fp1_dlc_trigger = yes
|
||
|
|
OR = {
|
||
|
|
any_side_commander = { valid_for_shieldmaiden_veterancy = yes }
|
||
|
|
any_side_knight = { valid_for_shieldmaiden_veterancy = yes }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
# Sort side commander shieldmaidens.
|
||
|
|
every_side_commander = {
|
||
|
|
limit = { valid_for_shieldmaiden_veterancy = yes }
|
||
|
|
# Boost their veterancy if they already have it.
|
||
|
|
if = {
|
||
|
|
limit = { exists = var:shieldmaiden_veterancy }
|
||
|
|
change_variable = {
|
||
|
|
name = shieldmaiden_veterancy
|
||
|
|
add = 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Or else set it up otherwise.
|
||
|
|
else = {
|
||
|
|
set_variable = {
|
||
|
|
name = shieldmaiden_veterancy
|
||
|
|
value = 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Sort side knight shieldmaidens.
|
||
|
|
every_side_knight = {
|
||
|
|
limit = { valid_for_shieldmaiden_veterancy = yes }
|
||
|
|
if = {
|
||
|
|
limit = { exists = var:shieldmaiden_veterancy }
|
||
|
|
change_variable = {
|
||
|
|
name = shieldmaiden_veterancy
|
||
|
|
add = 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else = {
|
||
|
|
set_variable = {
|
||
|
|
name = shieldmaiden_veterancy
|
||
|
|
value = 1
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Your shieldmaiden improves their skills.
|
||
|
|
fp1_shieldmaiden.0032 = {
|
||
|
|
type = character_event
|
||
|
|
title = fp1_shieldmaiden.0032.t
|
||
|
|
desc = {
|
||
|
|
first_valid = {
|
||
|
|
# Am *I* the shieldmaiden in question?
|
||
|
|
triggered_desc = {
|
||
|
|
trigger = { scope:shieldmaiden = root }
|
||
|
|
desc = fp1_shieldmaiden.0032.desc.root
|
||
|
|
}
|
||
|
|
# Or is it a courtier?
|
||
|
|
desc = fp1_shieldmaiden.0032.desc.courtier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
theme = martial
|
||
|
|
left_portrait = {
|
||
|
|
character = scope:shieldmaiden
|
||
|
|
animation = rage
|
||
|
|
}
|
||
|
|
override_background = { reference = army_camp }
|
||
|
|
|
||
|
|
trigger = {
|
||
|
|
#DLC check.
|
||
|
|
has_fp1_dlc_trigger = yes
|
||
|
|
#Standard checks.
|
||
|
|
is_available_at_peace_adult = yes
|
||
|
|
NOT = { has_character_flag = had_event_fp1_shieldmaiden_0032 }
|
||
|
|
# Must either be or have a shieldmaiden who's at veterancy cap.
|
||
|
|
OR = {
|
||
|
|
valid_for_shieldmaiden_level_up = yes
|
||
|
|
any_courtier = { valid_for_shieldmaiden_level_up = yes }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
weight_multiplier = {
|
||
|
|
base = 1
|
||
|
|
|
||
|
|
# Much more likely if you're a shieldmaiden yourself.
|
||
|
|
modifier = {
|
||
|
|
add = 2
|
||
|
|
has_trait = shieldmaiden
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
immediate = {
|
||
|
|
play_music_cue = "mx_cue_positive_effect"
|
||
|
|
add_character_flag = {
|
||
|
|
flag = had_event_fp1_shieldmaiden_0032
|
||
|
|
days = 1825
|
||
|
|
}
|
||
|
|
# Designate a valid shieldmaiden.
|
||
|
|
## First, we always level up root, if possible.
|
||
|
|
if = {
|
||
|
|
limit = { valid_for_shieldmaiden_level_up = yes }
|
||
|
|
save_scope_as = shieldmaiden
|
||
|
|
}
|
||
|
|
## Otherwise, we grab all relevant courtiers.
|
||
|
|
else = {
|
||
|
|
every_courtier = {
|
||
|
|
limit = { valid_for_shieldmaiden_level_up = yes }
|
||
|
|
add_to_list = veteran_shieldmaidens
|
||
|
|
}
|
||
|
|
}
|
||
|
|
## Select a suitable one from the list to be scope:shieldmaiden, prioritising the most veteran.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
NOT = { exists = scope:shieldmaiden }
|
||
|
|
}
|
||
|
|
ordered_in_list = {
|
||
|
|
list = veteran_shieldmaidens
|
||
|
|
order_by = var:shieldmaiden_veterancy
|
||
|
|
save_scope_as = shieldmaiden
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Next, we reduce scope:shieldmaiden's veterancy, as they'll be levelling it up in the event.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
change_variable = {
|
||
|
|
name = shieldmaiden_veterancy
|
||
|
|
subtract = shieldmaiden_veterancy_cap
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Martial: look how they command the shieldwall!
|
||
|
|
option = {
|
||
|
|
# Separate loc for first person POV.
|
||
|
|
name = {
|
||
|
|
trigger = { scope:shieldmaiden = root }
|
||
|
|
text = fp1_shieldmaiden.0032.a.root
|
||
|
|
}
|
||
|
|
# Aaaaand third person POV.
|
||
|
|
name = {
|
||
|
|
trigger = {
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
}
|
||
|
|
text = fp1_shieldmaiden.0032.a.courtier
|
||
|
|
}
|
||
|
|
# Can't have the max-level version of this modifier.
|
||
|
|
trigger = {
|
||
|
|
NOT = {
|
||
|
|
scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Process the level-up modifier for this stat block.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
# If we have no level on this path, give us the first rank.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
NOR = {
|
||
|
|
has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
add_character_modifier = shieldmaiden_level_martial_1_fp1_modifier
|
||
|
|
}
|
||
|
|
# If have the first level, quietly remove it and add the second.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_1_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_martial_2_fp1_modifier
|
||
|
|
}
|
||
|
|
# If we have the second level, quietly remove it and add the third.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_2_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# No stress involved.
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_boldness = 0.25
|
||
|
|
ai_rationality = 0.25
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Prowess: see how they swing that sword!
|
||
|
|
option = {
|
||
|
|
# Separate loc for first person POV.
|
||
|
|
name = {
|
||
|
|
trigger = { scope:shieldmaiden = root }
|
||
|
|
text = fp1_shieldmaiden.0032.b.root
|
||
|
|
}
|
||
|
|
# Aaaaand third person POV.
|
||
|
|
name = {
|
||
|
|
trigger = {
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
}
|
||
|
|
text = fp1_shieldmaiden.0032.b.courtier
|
||
|
|
}
|
||
|
|
# Can't have the max-level version of this modifier.
|
||
|
|
trigger = {
|
||
|
|
NOT = {
|
||
|
|
scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Process the level-up modifier for this stat block.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
# If we have no level on this path, give us the first rank.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
NOR = {
|
||
|
|
has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
add_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier
|
||
|
|
}
|
||
|
|
# If have the first level, quietly remove it and add the second.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier
|
||
|
|
}
|
||
|
|
# If we have the second level, quietly remove it and add the third.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# No stress involved.
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_vengefulness = 0.25
|
||
|
|
ai_honor = 0.25
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Intrigue: never a finer backstabber!
|
||
|
|
option = {
|
||
|
|
# Separate loc for first person POV.
|
||
|
|
name = {
|
||
|
|
trigger = { scope:shieldmaiden = root }
|
||
|
|
text = fp1_shieldmaiden.0032.c.root
|
||
|
|
}
|
||
|
|
# Aaaaand third person POV.
|
||
|
|
name = {
|
||
|
|
trigger = {
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
}
|
||
|
|
text = fp1_shieldmaiden.0032.c.courtier
|
||
|
|
}
|
||
|
|
# Can't have the max-level version of this modifier.
|
||
|
|
trigger = {
|
||
|
|
NOT = {
|
||
|
|
scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Process the level-up modifier for this stat block.
|
||
|
|
scope:shieldmaiden = {
|
||
|
|
# If we have no level on this path, give us the first rank.
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
NOR = {
|
||
|
|
has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier
|
||
|
|
has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
add_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier
|
||
|
|
}
|
||
|
|
# If have the first level, quietly remove it and add the second.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier
|
||
|
|
}
|
||
|
|
# If we have the second level, quietly remove it and add the third.
|
||
|
|
else_if = {
|
||
|
|
limit = { has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier }
|
||
|
|
hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier }
|
||
|
|
add_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Minor stress revolving around paranoia: what if they backstab *YOU*, after all?
|
||
|
|
if = {
|
||
|
|
limit = {
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
}
|
||
|
|
stress_impact = {
|
||
|
|
trusting = minor_stress_impact_loss
|
||
|
|
paranoid = minor_stress_impact_gain
|
||
|
|
}
|
||
|
|
}
|
||
|
|
ai_chance = {
|
||
|
|
base = 100
|
||
|
|
ai_value_modifier = {
|
||
|
|
ai_rationality = 0.5
|
||
|
|
ai_vengefulness = -0.5
|
||
|
|
}
|
||
|
|
modifier = { #Weight up for stress.
|
||
|
|
add = 10
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
has_trait = trusting
|
||
|
|
}
|
||
|
|
modifier = { #Weight down for stress.
|
||
|
|
add = -10
|
||
|
|
scope:shieldmaiden != root
|
||
|
|
has_trait = paranoid
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|