971 lines
24 KiB
Text
971 lines
24 KiB
Text
namespace = fp1_tbc
|
|
|
|
##################################################
|
|
# #Scope:actor-side Events
|
|
# 0001 - 0040 Bout Maintenance & Setup
|
|
# 0041 - 0060 Scope:actor Results
|
|
#
|
|
# #Scope:recipient-side Events
|
|
# 0101 - 0110 Champion Selection
|
|
# 0111 - 0130 Scope:recipient Results
|
|
##################################################
|
|
|
|
|
|
|
|
|
|
|
|
##################################################
|
|
# SCOPE:ACTOR-SIDE EVENTS
|
|
|
|
##################################################
|
|
# Bout Maintenance & Setup
|
|
# by Ewan Cowhig Croft
|
|
# 0001 - 0040
|
|
##################################################
|
|
|
|
# Everything is set for the bout to begin!
|
|
fp1_tbc.0001 = {
|
|
type = character_event
|
|
window = duel_event
|
|
title = fp1_tbc.0001.t
|
|
desc = {
|
|
desc = fp1_tbc.0001.desc.intro
|
|
first_valid = {
|
|
triggered_desc = {
|
|
trigger = { scope:champion = scope:recipient }
|
|
desc = fp1_tbc.0001.desc.recipient_fighting
|
|
}
|
|
desc = fp1_tbc.0001.desc.recipient_has_champion
|
|
}
|
|
desc = fp1_tbc.0001.desc.outro
|
|
}
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:actor
|
|
scripted_animation = duel_wield_weapon
|
|
}
|
|
right_portrait = {
|
|
character = scope:champion
|
|
scripted_animation = duel_wield_weapon
|
|
}
|
|
override_background = { reference = terrain_scope }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
# If, for any reason, scope:recipient has died or been imprisoned, then the bout is cancelled.
|
|
scope:recipient = {
|
|
is_alive = yes
|
|
is_imprisoned = no
|
|
}
|
|
# Check that scope:actor is still in a valid state to fight.
|
|
trial_by_combat_shown_and_not_invalid_trigger = yes
|
|
# And scope:champion likewise.
|
|
scope:champion = {
|
|
OR = {
|
|
this = scope:recipient
|
|
eligible_knight_to_champion_trial_by_combat_trigger = yes
|
|
}
|
|
}
|
|
}
|
|
|
|
on_trigger_fail = {
|
|
# Inform both parties that the duel has invalidated.
|
|
scope:actor = {
|
|
send_interface_toast = {
|
|
title = fp1_tbc.0001.trigger_failure.actor
|
|
left_icon = scope:recipient
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
send_interface_toast = {
|
|
title = fp1_tbc.0001.trigger_failure.recipient
|
|
left_icon = scope:actor
|
|
}
|
|
}
|
|
# Reset scope:actor's cooldowns against scope:recipient.
|
|
scope:actor = {
|
|
remove_interaction_cooldown = challenge_to_trial_by_combat_interaction
|
|
remove_interaction_cooldown_against = {
|
|
interaction = challenge_to_trial_by_combat_interaction
|
|
target = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
|
|
immediate = {
|
|
play_music_cue = "mx_cue_combat_stinger"
|
|
# Nab scope:champion's location for terrain.
|
|
scope:champion.location = {
|
|
save_scope_as = background_terrain_scope
|
|
# And scope:champion's location name for loc.
|
|
barony = { save_scope_as = duel_location }
|
|
}
|
|
}
|
|
|
|
# Almost there.
|
|
option = {
|
|
name = fp1_tbc.0001.a
|
|
|
|
# Inform scope:actor that the bout will begin immediately.
|
|
custom_tooltip = fp1_tbc.0001.a.tt
|
|
# Configure the bout.
|
|
## Tribals strip to the waist.
|
|
single_combat_apply_default_shirtlessness_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:champion
|
|
}
|
|
## Deadly fights.
|
|
if = {
|
|
limit = { scope:tbc_death = yes }
|
|
configure_start_single_combat_effect = {
|
|
SC_INITIATOR = scope:actor
|
|
SC_ATTACKER = scope:actor
|
|
SC_DEFENDER = scope:champion
|
|
FATALITY = always
|
|
FIXED = no
|
|
LOCALE = terrain_scope
|
|
OUTPUT_EVENT = fp1_tbc.0011
|
|
INVALIDATION_EVENT = fp1_tbc.0021
|
|
}
|
|
}
|
|
## Non-deadly fights.
|
|
else = {
|
|
configure_start_single_combat_effect = {
|
|
SC_INITIATOR = scope:actor
|
|
SC_ATTACKER = scope:actor
|
|
SC_DEFENDER = scope:champion
|
|
FATALITY = no
|
|
FIXED = no
|
|
LOCALE = terrain_scope
|
|
OUTPUT_EVENT = fp1_tbc.0011
|
|
INVALIDATION_EVENT = fp1_tbc.0021
|
|
}
|
|
}
|
|
# No stress for single-option events.
|
|
ai_chance = {
|
|
# AI will always choose single option.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
scripted_effect fp1_tbc_non_lethal_results_effect = {
|
|
if = {
|
|
limit = {
|
|
scope:recipient = { is_alive = yes }
|
|
}
|
|
# TbC ends in cash settlement.
|
|
if = {
|
|
limit = { scope:tbc_gold = yes }
|
|
fp1_tbc_gold_effect = {
|
|
TBC_VICTOR = scope:actor
|
|
TBC_LOSER = scope:recipient
|
|
}
|
|
}
|
|
# TbC ends in favour settlement.
|
|
if = {
|
|
limit = { scope:tbc_weak_hook = yes }
|
|
fp1_tbc_hook_effect = {
|
|
TBC_VICTOR = scope:actor
|
|
TBC_LOSER = scope:recipient
|
|
}
|
|
}
|
|
# TbC ends in mandated humiliation.
|
|
if = {
|
|
limit = { scope:tbc_humiliation = yes }
|
|
fp1_tbc_humiliation_effect = {
|
|
TBC_LOSER = scope:recipient
|
|
TBC_VICTOR = scope:actor
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
scripted_effect fp1_tbc_consume_imprisonment_reasons_effect = {
|
|
if = {
|
|
limit = {
|
|
scope:actor = { is_alive = yes }
|
|
scope:recipient = { is_alive = yes }
|
|
}
|
|
scope:actor = { consume_imprisonment_reasons = scope:recipient }
|
|
}
|
|
}
|
|
|
|
# Bout has ended, inform affected parties.
|
|
fp1_tbc.0011 = {
|
|
hidden = yes
|
|
|
|
immediate = {
|
|
# If any clothes were stripped, put 'em back on.
|
|
single_combat_clean_shirtlessness_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:champion
|
|
}
|
|
# Did scope:actor win?
|
|
if = {
|
|
limit = { scope:sc_victor = scope:actor }
|
|
# Apply effects; we do this separately so that there's not a weird day's delay.
|
|
fp1_tbc_non_lethal_results_effect = yes
|
|
# And send out the ending events.
|
|
scope:actor = {
|
|
trigger_event = {
|
|
id = fp1_tbc.0041
|
|
days = 1
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
trigger_event = {
|
|
id = fp1_tbc.0121
|
|
days = 1
|
|
}
|
|
}
|
|
}
|
|
# Or was it scope:champion?
|
|
else_if = {
|
|
limit = { scope:sc_victor = scope:champion }
|
|
# If scope:actor is still alive, they gain stress.
|
|
if = {
|
|
limit = {
|
|
scope:actor = { is_alive = yes }
|
|
}
|
|
fp1_tbc_actor_defeated_effect = {
|
|
TBC_LOSER = scope:actor
|
|
TBC_VICTOR = scope:recipient
|
|
}
|
|
}
|
|
# And send out the ending events.
|
|
scope:actor = {
|
|
trigger_event = {
|
|
id = fp1_tbc.0051
|
|
days = 1
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
trigger_event = {
|
|
id = fp1_tbc.0111
|
|
days = 1
|
|
}
|
|
}
|
|
}
|
|
# If both parties are alive, and aren't good losers/don't have good reasons to forgive each other, then we mark them as potential rivals.
|
|
if = {
|
|
limit = {
|
|
scope:actor = {
|
|
is_alive = yes
|
|
NOR = {
|
|
has_trait = humble
|
|
has_trait = content
|
|
has_trait = just
|
|
has_trait = forgiving
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
is_alive = yes
|
|
NOR = {
|
|
has_trait = humble
|
|
has_trait = content
|
|
has_trait = just
|
|
has_trait = forgiving
|
|
}
|
|
can_set_relation_potential_rival_trigger = { CHARACTER = scope:actor }
|
|
}
|
|
}
|
|
scope:actor = { set_relation_potential_rival = scope:recipient }
|
|
}
|
|
}
|
|
}
|
|
|
|
# Bout has invalidated, inform affected parties.
|
|
fp1_tbc.0021 = {
|
|
hidden = yes
|
|
|
|
immediate = {
|
|
# Put your shirts back on.
|
|
single_combat_clean_shirtlessness_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:recipient
|
|
}
|
|
# Inform both parties that the duel has invalidated.
|
|
scope:actor = {
|
|
send_interface_toast = {
|
|
title = fp1_tbc.0021.trigger_failure.actor
|
|
left_icon = scope:recipient
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
send_interface_toast = {
|
|
title = fp1_tbc.0021.trigger_failure.recipient
|
|
left_icon = scope:actor
|
|
}
|
|
}
|
|
# Reset scope:actor's cooldowns against scope:recipient.
|
|
scope:actor = {
|
|
remove_interaction_cooldown = challenge_to_trial_by_combat_interaction
|
|
remove_interaction_cooldown_against = {
|
|
interaction = challenge_to_trial_by_combat_interaction
|
|
target = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Scope:recipient has declined.
|
|
fp1_tbc.0031 = {
|
|
type = letter_event
|
|
opening = fp1_tbc.0031.opening
|
|
desc = fp1_tbc.0031.desc
|
|
sender = scope:recipient
|
|
|
|
option = { name = fp1_tbc.0031.a }
|
|
}
|
|
|
|
##################################################
|
|
# Scope:actor Results
|
|
# by Ewan Cowhig Croft
|
|
# 0041 - 0060
|
|
##################################################
|
|
|
|
# Scope:actor has won the bout.
|
|
fp1_tbc.0041 = {
|
|
type = character_event
|
|
title = fp1_tbc.0041.t
|
|
desc = {
|
|
desc = fp1_tbc.0041.desc.intro
|
|
# Scope:champion died in the fighting; no need to loc for a separate scope:champion, as they can't fight to the death.
|
|
triggered_desc = {
|
|
trigger = {
|
|
scope:champion = { is_alive = no }
|
|
}
|
|
desc = fp1_tbc.0041.desc.opponent_died
|
|
}
|
|
# Scope:champion is still alive.
|
|
triggered_desc = {
|
|
trigger = {
|
|
scope:champion = { is_alive = yes}
|
|
}
|
|
desc = {
|
|
first_valid = {
|
|
# Scope:recipient fought for themselves.
|
|
triggered_desc = {
|
|
trigger = { scope:champion = scope:recipient }
|
|
desc = fp1_tbc.0041.desc.opponent_lives.recipient_fighting
|
|
}
|
|
# Scope:recipient had a designated champion instead.
|
|
desc = fp1_tbc.0041.desc.opponent_lives.recipient_has_champion
|
|
}
|
|
}
|
|
}
|
|
# Reward, if anything.
|
|
first_valid = {
|
|
# Gold.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_gold = yes }
|
|
desc = fp1_tbc.0041.desc.reward.gold
|
|
}
|
|
# Weak hook.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_weak_hook = yes }
|
|
desc = fp1_tbc.0041.desc.reward.weak_hook
|
|
}
|
|
# Humiliation.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_humiliation = yes }
|
|
desc = fp1_tbc.0041.desc.reward.humiliation
|
|
}
|
|
# No outcome for death, since that's handled more succinctly above.
|
|
}
|
|
desc = fp1_tbc.0041.desc.outro
|
|
}
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:actor
|
|
animation = personality_bold
|
|
}
|
|
right_portrait = {
|
|
character = scope:recipient
|
|
animation = shock
|
|
}
|
|
override_background = { reference = throne_room }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
# Juuuust need to double-check that they're actually alive.
|
|
is_alive = yes
|
|
}
|
|
|
|
immediate = {
|
|
# Show duel results from the player's POV.
|
|
show_as_tooltip = { fp1_tbc_non_lethal_results_effect = yes }
|
|
# Sadly, we have to apply some effects here instead of in the initial output event in order to not break tooltips.
|
|
single_combat_have_slain_kin_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:champion
|
|
}
|
|
fp1_tbc_consume_imprisonment_reasons_effect = yes
|
|
}
|
|
|
|
# The bout closes.
|
|
option = {
|
|
name = fp1_tbc.0041.a
|
|
|
|
# No stress for single-option events.
|
|
ai_chance = {
|
|
# AI will always choose single option.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
# Scope:actor has lost the bout.
|
|
fp1_tbc.0051 = {
|
|
type = character_event
|
|
title = fp1_tbc.0051.t
|
|
desc = {
|
|
desc = fp1_tbc.0051.desc.intro
|
|
# Scope:actor is still alive (alternatives not included because, well...).
|
|
first_valid = {
|
|
# Scope:recipient fought for themselves.
|
|
triggered_desc = {
|
|
trigger = { scope:champion = scope:recipient }
|
|
desc = fp1_tbc.0051.desc.opponent_lives.recipient_fighting
|
|
}
|
|
# Scope:recipient had a designated champion instead.
|
|
desc = fp1_tbc.0051.desc.opponent_lives.recipient_has_champion
|
|
}
|
|
desc = fp1_tbc.0051.desc.outro
|
|
}
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:actor
|
|
animation = shock
|
|
}
|
|
right_portrait = {
|
|
character = scope:recipient
|
|
animation = personality_bold
|
|
}
|
|
override_background = { reference = throne_room }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
# Juuuust need to double-check that they're actually alive.
|
|
is_alive = yes
|
|
}
|
|
|
|
immediate = {
|
|
# Show duel results from the player's POV.
|
|
if = {
|
|
limit = {
|
|
scope:actor = { is_alive = yes }
|
|
}
|
|
fp1_tbc_actor_defeated_effect = {
|
|
TBC_LOSER = scope:actor
|
|
TBC_VICTOR = scope:recipient
|
|
}
|
|
}
|
|
show_as_tooltip = {
|
|
fp1_tbc_consume_imprisonment_reasons_effect = yes
|
|
single_combat_have_slain_kin_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:champion
|
|
}
|
|
}
|
|
}
|
|
|
|
# The bout closes.
|
|
option = {
|
|
name = fp1_tbc.0051.a
|
|
|
|
# No stress for single-option events.
|
|
ai_chance = {
|
|
# AI will always choose single option.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
##################################################
|
|
# SCOPE:RECIPIENT-SIDE EVENTS
|
|
|
|
##################################################
|
|
# Champion Selection
|
|
# by Ewan Cowhig Croft
|
|
# 0101 - 0110
|
|
##################################################
|
|
|
|
scripted_trigger fp1_tbc_knights_with_high_opinion_filter_trigger = {
|
|
# Has a ludicrously high opinion of scope:recipient.
|
|
opinion = {
|
|
target = scope:recipient
|
|
value >= 95
|
|
}
|
|
# And isn't one of the other knights presented.
|
|
NOR = {
|
|
AND = {
|
|
exists = scope:knight_best
|
|
this = scope:knight_best
|
|
}
|
|
AND = {
|
|
exists = scope:knight_exotic
|
|
this = scope:knight_exotic
|
|
}
|
|
AND = {
|
|
exists = scope:knight_alternative
|
|
this = scope:knight_alternative
|
|
}
|
|
}
|
|
}
|
|
|
|
# Scope:recipient has accepted a challenge to a Trial-by-Combat & must designate a champion due to ineligibility.
|
|
fp1_tbc.0101 = {
|
|
type = character_event
|
|
title = fp1_tbc.0101.t
|
|
desc = fp1_tbc.0101.desc
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:recipient
|
|
animation = disbelief
|
|
}
|
|
right_portrait = {
|
|
character = scope:knight_best
|
|
animation = personality_honorable
|
|
}
|
|
lower_left_portrait = scope:knight_alternative
|
|
lower_center_portrait = scope:knight_exotic
|
|
lower_right_portrait = scope:knight_opinion
|
|
override_background = { reference = throne_room }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
}
|
|
|
|
immediate = {
|
|
play_music_cue = "mx_cue_prison"
|
|
|
|
# First, grab all available knights that are suitable for the Trial-by-Combat.
|
|
every_knight = {
|
|
limit = {
|
|
eligible_knight_to_champion_trial_by_combat_trigger = yes
|
|
NOT = {
|
|
has_court_position = champion_court_position #EP1: Pluck out the champion title holder
|
|
}
|
|
}
|
|
add_to_list = fp1_tbc_valid_knights_list
|
|
}
|
|
# Then, sort through the list, selecting the knight with the highest prowess.
|
|
ordered_in_list = {
|
|
list = fp1_tbc_valid_knights_list
|
|
order_by = prowess
|
|
save_scope_as = knight_best
|
|
}
|
|
# After that, we grab the most interesting knight (looking at assorted prowess-ish pecial traits and factoring for those) who isn't scope:knight_best.
|
|
ordered_in_list = {
|
|
list = fp1_tbc_valid_knights_list
|
|
limit = {
|
|
NOT = {
|
|
exists = scope:knight_best
|
|
this = scope:knight_best
|
|
}
|
|
has_relevant_special_single_combat_trait_trigger = yes
|
|
}
|
|
order_by = sce_has_single_combat_special_traits_value
|
|
save_scope_as = knight_exotic
|
|
}
|
|
#EP1: Fetch your champion if they exist
|
|
if = {
|
|
limit = {
|
|
employs_court_position = champion_court_position
|
|
any_court_position_holder = {
|
|
type = champion_court_position
|
|
is_physically_able_adult = yes # eligible_knight_to_champion_trial_by_combat_trigger checks for prowess, and its not mandatory that the champ has high value
|
|
}
|
|
}
|
|
random_court_position_holder = {
|
|
type = champion_court_position
|
|
save_scope_as = knight_alternative #same scope name is used due to limited portrait logic
|
|
}
|
|
}
|
|
# Then take the second highest-prowess knight who isn't scope:knight_best or scope:knight_exotic.
|
|
# EP1: Only do this if the court position of champion isn't already filled
|
|
ordered_in_list = {
|
|
list = fp1_tbc_valid_knights_list
|
|
limit = {
|
|
NOR = {
|
|
this = scope:knight_best
|
|
AND = {
|
|
exists = scope:knight_exotic
|
|
this = scope:knight_exotic
|
|
}
|
|
}
|
|
NOT = { employs_court_position = champion_court_position }
|
|
}
|
|
order_by = prowess
|
|
save_scope_as = knight_alternative
|
|
}
|
|
# Next, if we've got any knight who isn't scope:knight_best, scope:knight_exotic, or scope:knight_alternative, and who would literally murder for you, we grab them.
|
|
if = {
|
|
limit = {
|
|
any_in_list = {
|
|
list = fp1_tbc_valid_knights_list
|
|
fp1_tbc_knights_with_high_opinion_filter_trigger = yes
|
|
}
|
|
}
|
|
# First, add them to a sub-list.
|
|
every_in_list = {
|
|
list = fp1_tbc_valid_knights_list
|
|
limit = { fp1_tbc_knights_with_high_opinion_filter_trigger = yes }
|
|
add_to_list = fp1_tbc_high_opinion_knights_list
|
|
}
|
|
# Next, try to pluck out knightly soulmates.
|
|
if = {
|
|
limit = {
|
|
any_in_list = {
|
|
list = fp1_tbc_high_opinion_knights_list
|
|
any_relation = {
|
|
type = soulmate
|
|
this = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
random_in_list = {
|
|
list = fp1_tbc_high_opinion_knights_list
|
|
limit = {
|
|
any_relation = {
|
|
type = soulmate
|
|
this = scope:recipient
|
|
}
|
|
}
|
|
save_scope_as = knight_opinion
|
|
}
|
|
}
|
|
# Otherwise, order by prowess and select the best.
|
|
else = {
|
|
ordered_in_list = {
|
|
list = fp1_tbc_high_opinion_knights_list
|
|
order_by = prowess
|
|
save_scope_as = knight_opinion
|
|
}
|
|
}
|
|
}
|
|
# Finally, if shenanigans have somehow deprived us of a scope:knight_best, then we want to generate someone to fill that minimum slot.
|
|
if = {
|
|
limit = {
|
|
NOT = { exists = scope:knight_best }
|
|
}
|
|
create_character = {
|
|
gender_female_chance = root_soldier_female_chance
|
|
location = scope:recipient.capital_province
|
|
template = new_warrior_character
|
|
faith = scope:recipient.capital_county.faith
|
|
culture = scope:recipient.capital_county.culture
|
|
save_scope_as = knight_best
|
|
}
|
|
add_courtier = scope:knight_best
|
|
}
|
|
}
|
|
|
|
# Take the most skilled knight.
|
|
option = {
|
|
name = fp1_tbc.0101.a
|
|
|
|
trigger = {
|
|
exists = scope:knight_best
|
|
}
|
|
|
|
# Select scope:knight_best to represent you in the bout.
|
|
scope:knight_best = { save_scope_as = champion }
|
|
custom_tooltip = fp1_tbc.0101.a.tt
|
|
custom_tooltip = fp1_tbc.0101.bout_moves_forward
|
|
highlight_portrait = scope:knight_best
|
|
|
|
# RP/functional choice: no stress charge.
|
|
ai_chance = {
|
|
base = 100
|
|
ai_value_modifier = {
|
|
ai_rationality = 0.75
|
|
ai_boldness = -0.5
|
|
}
|
|
}
|
|
}
|
|
|
|
# EP1: Take your already designated champion
|
|
option = {
|
|
name = fp1_ep1_tbc.0101.e
|
|
trigger = {
|
|
exists = scope:knight_alternative
|
|
scope:knight_alternative = { has_court_position = champion_court_position }
|
|
}
|
|
|
|
# Select scope:knight_best to represent you in the bout.
|
|
scope:knight_alternative = { save_scope_as = champion }
|
|
custom_tooltip = fp1_ep1_tbc.0101.e.tt
|
|
custom_tooltip = fp1_tbc.0101.bout_moves_forward
|
|
highlight_portrait = scope:knight_alternative
|
|
|
|
# RP/functional choice: no stress charge.
|
|
ai_chance = {
|
|
base = 100
|
|
ai_value_modifier = {
|
|
ai_rationality = 0.75
|
|
ai_boldness = -0.5
|
|
}
|
|
}
|
|
}
|
|
|
|
# Take the next most skilled knight.
|
|
option = {
|
|
name = fp1_tbc.0101.b
|
|
trigger = {
|
|
exists = scope:knight_alternative
|
|
scope:knight_alternative = { NOT = { has_court_position = champion_court_position } }
|
|
}
|
|
|
|
# Select scope:knight_best to represent you in the bout.
|
|
scope:knight_alternative = { save_scope_as = champion }
|
|
custom_tooltip = fp1_tbc.0101.b.tt
|
|
custom_tooltip = fp1_tbc.0101.bout_moves_forward
|
|
highlight_portrait = scope:knight_alternative
|
|
|
|
# RP/functional choice: no stress charge.
|
|
ai_chance = {
|
|
# There's no reason for the AI to ever take this option, we offer it entirely for players who dislike/wish to preserve their best knight.
|
|
base = 0
|
|
}
|
|
}
|
|
|
|
# Take the knight with the most special traits that *isn't* the most skilled knight.
|
|
option = {
|
|
name = fp1_tbc.0101.c
|
|
trigger = { exists = scope:knight_opinion }
|
|
|
|
# Select scope:knight_best to represent you in the bout.
|
|
scope:knight_exotic = { save_scope_as = champion }
|
|
custom_tooltip = fp1_tbc.0101.c.tt
|
|
custom_tooltip = fp1_tbc.0101.bout_moves_forward
|
|
highlight_portrait = scope:knight_exotic
|
|
|
|
# RP/functional choice: no stress charge.
|
|
ai_chance = {
|
|
base = 100
|
|
ai_value_modifier = {
|
|
ai_rationality = 0.5
|
|
ai_boldness = 0.25
|
|
}
|
|
}
|
|
}
|
|
|
|
# Take the knight who likes me the most.
|
|
option = {
|
|
name = fp1_tbc.0101.d
|
|
trigger = { exists = scope:knight_opinion}
|
|
|
|
# Select scope:knight_best to represent you in the bout.
|
|
scope:knight_opinion = { save_scope_as = champion }
|
|
custom_tooltip = fp1_tbc.0101.d.tt
|
|
custom_tooltip = fp1_tbc.0101.bout_moves_forward
|
|
highlight_portrait = scope:knight_opinion
|
|
|
|
# RP/functional choice: no stress charge.
|
|
ai_chance = {
|
|
base = 100
|
|
ai_value_modifier = {
|
|
ai_sociability = 0.5
|
|
ai_rationality = -0.75
|
|
}
|
|
}
|
|
}
|
|
|
|
# Then, we skip over to scope:actor to inform them what's up.
|
|
after = {
|
|
# Clean up any errant scopes we no longer need to avoid debug bloat.
|
|
clear_saved_scope = knight_best
|
|
if = {
|
|
limit = { exists = scope:knight_exotic }
|
|
clear_saved_scope = knight_exotic
|
|
}
|
|
if = {
|
|
limit = { exists = scope:knight_alternative }
|
|
clear_saved_scope = knight_alternative
|
|
}
|
|
if = {
|
|
limit = { exists = scope:knight_opinion }
|
|
clear_saved_scope = knight_opinion
|
|
}
|
|
# And transition.
|
|
scope:actor = { trigger_event = fp1_tbc.0001 }
|
|
}
|
|
}
|
|
|
|
fp1_tbc.0102 = {
|
|
desc = debug_main
|
|
theme = prison
|
|
|
|
option = {
|
|
name = interaction_debug_main
|
|
}
|
|
}
|
|
|
|
##################################################
|
|
# Scope:recipient Results
|
|
# by Ewan Cowhig Croft
|
|
# 0111 - 0130
|
|
##################################################
|
|
|
|
# Scope:recipient has won the bout.
|
|
fp1_tbc.0111 = {
|
|
type = character_event
|
|
title = fp1_tbc.0111.t
|
|
desc = {
|
|
desc = fp1_tbc.0111.desc.intro
|
|
# Scope:actor died in the fighting; we don't account for
|
|
triggered_desc = {
|
|
trigger = {
|
|
scope:actor = { is_alive = no }
|
|
}
|
|
desc = fp1_tbc.0111.desc.opponent_died.recipient_fighting
|
|
}
|
|
# Scope:actor is still alive.
|
|
triggered_desc = {
|
|
trigger = {
|
|
scope:actor = { is_alive = yes}
|
|
}
|
|
desc = {
|
|
first_valid = {
|
|
# Scope:recipient fought for themselves.
|
|
triggered_desc = {
|
|
trigger = { scope:champion = scope:recipient }
|
|
desc = fp1_tbc.0111.desc.opponent_lives.recipient_fighting
|
|
}
|
|
# Scope:recipient had a designated champion instead.
|
|
desc = fp1_tbc.0111.desc.opponent_lives.recipient_has_champion
|
|
}
|
|
}
|
|
}
|
|
desc = fp1_tbc.0111.desc.outro
|
|
}
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:recipient
|
|
animation = personality_bold
|
|
}
|
|
right_portrait = {
|
|
character = scope:actor
|
|
animation = shock
|
|
}
|
|
override_background = { reference = throne_room }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
# Juuuust need to double-check that they're actually alive.
|
|
is_alive = yes
|
|
}
|
|
|
|
immediate = {
|
|
# Show duel results from the player's POV.
|
|
if = {
|
|
limit = {
|
|
scope:actor = { is_alive = yes }
|
|
}
|
|
fp1_tbc_actor_defeated_effect = {
|
|
TBC_LOSER = scope:actor
|
|
TBC_VICTOR = scope:recipient
|
|
}
|
|
}
|
|
# Sadly, we have to apply some effects here instead of in the initial output event in order to not break tooltips.
|
|
single_combat_have_slain_kin_effect = {
|
|
ATTACKER = scope:actor
|
|
DEFENDER = scope:champion
|
|
}
|
|
fp1_tbc_consume_imprisonment_reasons_effect = yes
|
|
}
|
|
|
|
# The bout closes.
|
|
option = {
|
|
name = fp1_tbc.0111.a
|
|
|
|
# No stress for single-option events.
|
|
ai_chance = {
|
|
# AI will always choose single option.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
# Scope:recipient has lost the bout.
|
|
fp1_tbc.0121 = {
|
|
type = character_event
|
|
title = fp1_tbc.0121.t
|
|
desc = {
|
|
desc = fp1_tbc.0121.desc.intro
|
|
# We don't need to account for scope:champion dying in the fighting; if it was scope:recipient, then they're dead, and a separate champion cannot be challenged to a fight to the death.
|
|
# Scope:champion is still alive.
|
|
first_valid = {
|
|
# Scope:recipient fought for themselves.
|
|
triggered_desc = {
|
|
trigger = { scope:champion = scope:recipient }
|
|
desc = fp1_tbc.0121.desc.champion_lives.recipient_fighting
|
|
}
|
|
# Scope:recipient had a designated champion instead.
|
|
desc = fp1_tbc.0121.desc.champion_lives.recipient_has_champion
|
|
}
|
|
# Reward, if anything.
|
|
first_valid = {
|
|
# Gold.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_gold = yes }
|
|
desc = fp1_tbc.0121.desc.reward.gold
|
|
}
|
|
# Weak hook.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_weak_hook = yes }
|
|
desc = fp1_tbc.0121.desc.reward.weak_hook
|
|
}
|
|
# Humiliation.
|
|
triggered_desc = {
|
|
trigger = { scope:tbc_humiliation = yes }
|
|
desc = fp1_tbc.0121.desc.reward.humiliation
|
|
}
|
|
# No outcome for death, since that's handled more succinctly above.
|
|
}
|
|
desc = fp1_tbc.0121.desc.outro
|
|
}
|
|
theme = prison
|
|
left_portrait = {
|
|
character = scope:recipient
|
|
animation = shock
|
|
}
|
|
right_portrait = {
|
|
character = scope:actor
|
|
animation = personality_bold
|
|
}
|
|
override_background = { reference = throne_room }
|
|
|
|
trigger = {
|
|
# DLC check.
|
|
has_fp1_dlc_trigger = yes
|
|
# Juuuust need to double-check that they're actually alive.
|
|
is_alive = yes
|
|
}
|
|
|
|
immediate = {
|
|
# Show duel results from the player's POV.
|
|
show_as_tooltip = { fp1_tbc_non_lethal_results_effect = yes }
|
|
# Sadly, we have to apply some effects here instead of in the initial output event in order to not break tooltips.
|
|
fp1_tbc_consume_imprisonment_reasons_effect = yes
|
|
}
|
|
|
|
# The bout closes.
|
|
option = {
|
|
name = fp1_tbc.0121.a
|
|
|
|
# No stress for single-option events.
|
|
ai_chance = {
|
|
# AI will always choose single option.
|
|
base = 100
|
|
}
|
|
}
|
|
}
|