This commit is contained in:
Fishedotjpg 2025-12-05 22:36:07 +00:00
parent 1d8698f72b
commit 9716fe80f6
527 changed files with 1641520 additions and 0 deletions

195
N3OW/events/_events.info Normal file
View file

@ -0,0 +1,195 @@
=== Structure ===
Note: this is very very incomplete...
event_namespace.42 = {
type = character_event/letter_event/court_event/activity_event # Default to character, what type of event this is
scope = scope_type # Optional, defaults to character, will make this event fire with a different expected root scope. none can be used to have no scopes set up.
window = window_name # Optional, what special event file and widget in gui/event_windows should this event use, only used for character events
# If you have a cooldown, the recipient will get a variable saved with that duration. The variable name will be the event ID
# Anything that checks that an event is legal to fire will also check that the recipient doesn't have that variable
cooldown = {
days/weeks/months/years = script value
}
# DLC or Mod that this Event belongs to, shown in Event Window if set.
content_source = X
# Specify a character portrait to appear in the event on the specified position.
left_portrait = X
right_portrait = X
center_portrait = X # not used in all event types
lower_left_portrait = X
lower_center_portrait = X
lower_right_portrait = X
sender = X # for letter events, required
# X can be one of:
X = event target
X = {
character = event target
trigger = ... # optional, a trigger saying whether this portrait should be visible, in the scope of the portrait character, the event scope is accessible as root scope
animation = animation name # optional, the animation to show for this portrait. It's used if no triggered animations pass their trigger. The default animation will be used if nothing is this item is not specified.
scripted_animation = key_of_scripted_animation # optional, instead of 'animation' you can also define a 'scripted_animation'
# A list of triggered animations. The first triggered animation that passes the trigger check will be used.
triggered_animation = {
trigger = ...
animation = animation name
# Instead of 'animation' you can also define a 'scripted_animation'
scripted_animation = key_of_scripted_animation
### brief: camera ( database key, optional )
# A camera type defined for a triggered animation will override the default
# camera defined for the event portrait if that animation is chosen
#
camera = camera_name
}
triggered_animation = ...
# A list of triggered outfits. The first triggered otfit that passes the trigger check will be used.
triggered_outfit = {
trigger = ...
outfit_tags = ...
remove_default_outfit = ...
hide_info = ...
}
triggered_outfit = ...
# Override camera to be used instead of the normal event ones
camera = camera_key
outfit_tags = { tag1 tag2 } # Specifies outfit tags for this portrait in ascending priority (i.e. tag2 will "override" tag1 here if anything with tag2 is found in a specific portrait modifier category)
remove_default_outfit = yes/no # If set to yes, portrait modifier categories in which nothing matches any of the event tags will be disabled completely (no by default)
hide_info = yes/no # If set to yes, only the portrait will be shown, with no identifiable elements (no CoA, tooltips, clicks...) (no by default)
}
# Specify an artifact to appear in the event on the specified position
artifact = {
target = event target
position = lower_left_portrait/lower_center_portrait/lower_right_portrait
# Can't be in the same position as a portrait
trigger = ... # Optional, as for character portraits
}
# This will be run if a queued event (or one triggered immediately from script) does not fulfil its trigger
# Events failing to trigger from an on-action will *not* run this
on_trigger_fail = {
some effect
}
# Specify custom widgets to embed in the event. See section about Custom Widgets below.
widgets = {
widget = {
# Trigger that controls the availability of the widget. Scope: same as the event, after immediate effect. Default: always = yes
is_shown = {}
# Name of the widget to use. Must be at the path <event_window_widgets>/<widget_name>.gui
gui = "<widget_name>"
# Name of the widget where this custome widget will be insert
container = "<container_widget_name>"
# Some widgets require a custom controller (see below). Default: default
controller = <controller_type>
# Effect to set up the scope as required by the controller. Scope: same as the event, after immediate effect, doesn't modify the event scope, though. Default: {}
setup_scope = {}
}
}
widget = { ... } # alternative syntax for a single widget. Follows the same info as the widget in the widgets parameter
option = { # An option the player/AI can pick
# Localization key for the event option button text
name = X
# The effects that will be run when picking the options. Written directly here with no label
X..
# A trigger that has to be fulfilled for this option to be valid.
trigger = {}
# If the event is invalid, but this trigger is valid, then the option will be shown (but disabled).
# This behavior is also influenced by the EVENT_OPTIONS_SHOWN_HIDE_UNAVAILABLE or SCHEME_PREPARATION_OPTIONS_SHOWN_HIDE_UNAVAILABLE defines depending on event type.
show_as_unavailable = {}
# Highlights the event portrait of this character while this option is hovered. This is in addition to the automatic highlighting when hovering an event option that has an effect that affects portrait characters.
highlight_portrait = scope:a_character
reason = <flag> # Special reason for why this option is unlocked, can be any arbitrary string, is be checked in the UI to show special by reason
# Parameters to impact the way ai-characters pick options to resolve their events
# We have 2 mutually exclusive parameters; ai_chance, and ai_will_select where the only difference is the syntax for calculating the value
ai_chance = { # See common/scripted_modifiers/_scripted_modifiers.info for more details
base = 10
modifier = {
add = 5
<trigger>
}
modifier = {
factor = 0.5
<trigger>
}
}
ai_will_select = { # See common/script_values/_script_values.info for more details
base = 10
if = {
limit = {
<trigger>
}
add = 5
}
else_if = {
limit = {
<trigger>
}
multiply = 0.5
}
}
}
theme = "" # Theme to use in the event. For a list, check: 00_event_themes.txt
override_background = { # A background that can be shown when the event pops up. This overrides the theme one. In case that there are multiples the first one that fits the trigger will be the one selected. In case none fits the ones inthe theme will be checked after.
trigger = {} # Receives the event scope to check if it's valid.
reference = "" # Path to the texture
}
override_transition = { # A transition that can be shown when the event pops up, before the event options and backgrounds. This overrides the theme one. In case that there are multiples the first one that fits the trigger will be the one selected. In case none fits the ones inthe theme will be checked after.
trigger = {} # Receives the event scope to check if it's valid.
reference = "" # Path to the texture
}
override_effect_2d = { # A 2d effect that can be put on top of the background. This overrides the theme one. In case that there are multiples the first one that fits the trigger will be the one selected. In case none fits the ones inthe theme will be checked after.
trigger = {} # Receives the event scope to check if it's valid.
reference = "" # key to the effect
}
override_icon = { # An icon that can be shown when the event pops up. This overrides the theme one. In case that there are multiples the first one that fits the trigger will be the one selected. In case none fits the ones inthe theme will be checked after.
trigger = {} # Receives the event scope to check if it's valid.
reference = "" # Path to the texture
}
override_header_background = { # The header asset located behind the event icon. This overrides the header asset defined by the theme. If there are multiples defined here, the first one that passes its trigger will be selected. If none are valid, then the theme's header asset will be used
trigger = {}
reference = ""
}
override_sound = { # A sound that can be played when the event pops up. This overrides the theme one. In case that there are multiples the first one that fits the trigger will be the one selected. In case none fits the ones inthe theme will be checked after.
trigger = {} # Receives the event scope to check if it's valid.
reference = "" # Reference of the sound
}
orphan = yes # The game will not log an error about this event being unreferenced. Useful for debug events
}
=== Custom Widgets ===
Custom widgets can be embedded into events.
GUI files must be placed at the event_window_widgets path (see paths.settings). The name of the file must match the widget name.
Some widgets that modify the game require a custom controller. This should be documented in the widget's GUI file.
The data context type available in the GUI depends on the controller type.
Some controllers require special scope setup, which should be documented under Notes below. Use the setup_scope effect for that.
Available controllers:
Controller Type | Data Context Name | Notes
------------------------+----------------------------------------+-------------------------------------------------------------------------------------------------------------
default | EventWindowWidget | Default controller, no special behavior
name_character | EventWindowWidgetNameCharacter | Changes a character's name. Scope must have the name_character_target saved scope.
text | EventWindowWidgetEnterText | Saves some text onto the character.
event_chain_progress | EventWindowWidgetChainProgress | Displays progress through an event chain, needs event_chain_length and event_chain_progress scope values set
struggle_info | EventWindowCustomWidgetStruggleInfo | Displays information for the struggle, needs "start" scope value set
situation_info | EventWindowCustomWidgetSituationInfo | Displays information for the situation

View file

@ -0,0 +1,891 @@
namespace = accolade
#Accolade rank gain notification
# by Jason Cantalini
accolade.0001 = {
hidden = yes
trigger = {
exists = acclaimed_knight
has_dlc_feature = accolades
}
immediate = {
scope:changing_accolade = {
acclaimed_knight = {
save_scope_as = acclaimed_knight
}
}
if = {
limit = {
scope:changing_accolade = {
accolade_rank >= 5
}
}
send_interface_message = {
type = msg_accolade_gained_rank
title = accolade.0001.notification_high
desc = accolade_rank_unlock_notification_tooltip_high
left_icon = scope:acclaimed_knight
}
}
else = {
send_interface_message = {
type = msg_accolade_gained_rank
title = accolade.0001.notification_low
desc = accolade_rank_unlock_notification_tooltip_low
left_icon = scope:acclaimed_knight
}
}
}
}
#Accolade rank loss notification
# by Jason Cantalini
accolade.0002 = {
hidden = yes
trigger = {
has_dlc_feature = accolades
}
immediate = {
if = {
limit = {
exists = scope:changing_accolade.acclaimed_knight
}
scope:changing_accolade = {
acclaimed_knight = {
save_scope_as = acclaimed_knight
}
}
if = {
limit = {
scope:changing_accolade = {
accolade_rank >= 5
}
}
send_interface_message = {
type = msg_accolade_lost_rank
title = accolade.0002.notification_high
left_icon = scope:acclaimed_knight
desc = {
first_valid = {
triggered_desc = {
trigger = {
scope:acclaimed_knight = {
is_alive = yes
}
}
desc = accolade_rank_loss_notification_tooltip_high
}
desc = accolade_rank_loss_notification_tooltip_high_dead
}
}
}
}
else_if = {
limit = {
scope:changing_accolade = {
accolade_rank >= 1
}
}
send_interface_message = {
type = msg_accolade_lost_rank
title = accolade.0002.notification_low
left_icon = scope:acclaimed_knight
desc = {
first_valid = {
triggered_desc = {
trigger = {
scope:acclaimed_knight = {
is_alive = yes
}
}
desc = accolade_rank_loss_notification_tooltip_low
}
desc = accolade_rank_loss_notification_tooltip_low_dead
}
}
}
}
else = {
send_interface_message = {
type = msg_accolade_lost_rank
title = accolade.0002.notification_low
left_icon = scope:acclaimed_knight
desc = {
first_valid = {
triggered_desc = {
trigger = {
scope:acclaimed_knight = {
is_alive = yes
}
}
desc = accolade_rank_loss_notification_tooltip_no_rank
}
desc = accolade_rank_loss_notification_tooltip_no_rank_dead
}
}
}
}
}
else_if = {
limit = {
NOT = { exists = scope:changing_accolade.acclaimed_knight }
scope:changing_accolade = { accolade_rank >= 1 }
}
send_interface_message = {
type = msg_accolade_lost_rank
title = accolade.0002.notification_empty
desc = accolade_rank_loss_notification_tooltip_empty
}
}
else = {
send_interface_message = {
type = msg_accolade_lost_rank
title = accolade.0002.notification_low
desc = accolade_rank_loss_notification_tooltip_empty_no_rank
}
}
}
}
#Accolade becomes idle
# by Jason Cantalini
accolade.0003 = {
hidden = yes
trigger = {
has_dlc_feature = accolades
}
immediate = {
send_interface_toast = {
type = msg_accolade_active
title = accolade.0003.accolade_becomes_idle.tt
custom_tooltip = accolade.0003.accolade_becomes_idle_effects.tt
}
}
}
#Accolade succession with unchanged types
# by Jason Cantalini
accolade.0004 = {
hidden = yes
trigger = {
has_dlc_feature = accolades
}
immediate = {
send_interface_toast = {
type = msg_accolade_succession
title = accolade.0004.new_acclaimed_knight.tt
left_icon = scope:new_acclaimed_knight
custom_tooltip = accolade.0004.new_acclaimed_knight_name.tt
custom_tooltip = accolade.glory_loss.tt
}
}
}
#Accolade succession with new secondary type
# by Jason Cantalini
accolade.0005 = {
hidden = yes
trigger = {
has_dlc_feature = accolades
}
immediate = {
send_interface_toast = {
type = msg_accolade_succession_toast
title = accolade.0005.new_acclaimed_knight_new_type.tt
left_icon = scope:new_acclaimed_knight
custom_tooltip = accolade.0005.new_accolade_type.tt
custom_tooltip = accolade.0005.new_acclaimed_knight_succeeds.tt
custom_tooltip = accolade.glory_loss.tt
}
}
}
#Find Accolade Successor knight creation event
accolade.0006 = {
hidden = yes
trigger = {
exists = scope:accolade_in_need
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
is_healthy = yes
save_temporary_scope_as = temp_knight
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:temp_knight
}
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
is_healthy = yes
save_temporary_scope_as = temp_knight
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:temp_knight
}
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
#if = { # Balance testing variables
# limit = {
# NOT = {
# exists = global_var:accolade_fail
# }
# }
# set_global_variable = {
# name = accolade_fail
# value = 1
# }
#}
#else = {
# change_global_variable = {
# name = accolade_fail
# add = 1
# }
#}
accolade_character_creation_effect = yes
}
#else = { # Balance testing variables
# if = {
# limit = {
# NOT = {
# exists = global_var:accolade_success
# }
# }
# set_global_variable = {
# name = accolade_success
# value = 1
# }
# }
# else = {
# change_global_variable = {
# name = accolade_success
# add = 1
# }
# }
#}
if = {
limit = {
exists = scope:chosen_knight
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
# make sure the chosen knight is not already a courtier
scope:chosen_knight ?= {
NOT = { is_courtier_of = root }
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0007
days = 1
}
}
}
}
#Find Accolade Successor join event
accolade.0007 = {
hidden = yes
immediate = {
if = {
limit = {
exists = scope:accolade_in_need
exists = scope:chosen_knight
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
#SEND A TOAST NOTIFICATION
send_interface_toast = {
type = event_toast_effect_neutral
title = accolade.0007.notification
left_icon = scope:chosen_knight
custom_tooltip = accolade_call_acclaimed_knight_tooltip
hidden_effect = {
scope:chosen_knight = {
if = {
limit = {
NOT = { is_knight_of = root }
}
}
}
}
}
}
else = {
send_interface_message = {
type = event_accolade_bad_text
title = accolade.0007.notification_fail
desc = accolade_find_successor_fail_notification_tooltip
}
}
}
}
#Call Acclaimed Knight first knight
accolade.0008 = {
hidden = yes
trigger = {
exists = scope:empty_accolade_1
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
scope:empty_accolade_1 = {
save_scope_as = accolade_in_need
}
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
accolade_character_creation_effect = yes
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0013
days = 1
}
}
}
#Call Acclaimed Knight second knight
accolade.0009 = {
hidden = yes
trigger = {
exists = scope:empty_accolade_2
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
scope:empty_accolade_2 = {
save_scope_as = accolade_in_need
}
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_clergy = no
is_healthy = yes
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_clergy = no
is_healthy = yes
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
accolade_character_creation_effect = yes
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0013
days = 1
}
}
}
#Call Acclaimed Knight third knight
accolade.0010 = {
hidden = yes
trigger = {
exists = scope:empty_accolade_3
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
scope:empty_accolade_3 = {
save_scope_as = accolade_in_need
}
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
accolade_character_creation_effect = yes
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0013
days = 1
}
}
}
#Call Acclaimed Knight fourth knight
accolade.0011 = {
hidden = yes
trigger = {
exists = scope:empty_accolade_4
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
scope:empty_accolade_4 = {
save_scope_as = accolade_in_need
}
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
accolade_character_creation_effect = yes
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0013
days = 1
}
}
}
#Call Acclaimed Knight fifth knight
accolade.0012 = {
hidden = yes
trigger = {
exists = scope:empty_accolade_5
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
immediate = {
# try to find a pool character first
scope:empty_accolade_5 = {
save_scope_as = accolade_in_need
}
every_courtier_or_guest = {
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
every_pool_character = {
province = root.capital_province
limit = {
ep2_can_be_accolade_successor_base_trigger = yes
can_be_knight_trigger = { ARMY_OWNER = root }
is_valid_successor_for_accolade = scope:accolade_in_need
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
}
is_clergy = no
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = this
}
is_healthy = yes
}
add_to_list = potential_knights
}
random_in_list = {
list = potential_knights
save_scope_as = chosen_knight
}
# create a character if needed
if = {
limit = {
NOT = { exists = scope:chosen_knight }
}
accolade_character_creation_effect = yes
}
if = {
limit = {
can_recruit_character_to_court_trigger = {
RECRUITER = root
RECRUITEE = scope:chosen_knight
}
}
add_courtier = scope:chosen_knight
}
trigger_event = {
id = accolade.0013
days = 1
}
}
}
#Call Accolade Knight join event
accolade.0013 = {
hidden = yes
immediate = {
if = {
limit = {
exists = scope:accolade_in_need
exists = scope:chosen_knight
exists = root.capital_province
highest_held_title_tier >= tier_county
NOR = {
government_has_flag = government_is_theocracy
has_character_flag = had_accolade_successor_notification
}
}
#SEND A TOAST NOTIFICATION
send_interface_toast = {
type = event_toast_effect_neutral
title = accolade.0013.notification
left_icon = scope:chosen_knight
custom_tooltip = accolade_call_acclaimed_knight_tooltip
hidden_effect = {
scope:chosen_knight = {
if = {
limit = {
NOT = { is_knight_of = root }
}
set_knight_status = force
}
}
}
}
add_character_flag = {
flag = had_accolade_successor_notification
months = 6
}
}
else_if = {
limit = {
exists = scope:accolade_in_need
exists = scope:chosen_knight
exists = root.capital_province
highest_held_title_tier >= tier_county
NOT = { government_has_flag = government_is_theocracy }
}
#SEND A FEED NOTIFICATION FOR NEXT KNIGHTS
send_interface_message = {
type = event_accolade_good_with_text
title = accolade.0013.notification
desc = accolade_call_acclaimed_knight_tooltip
left_icon = scope:chosen_knight
scope:chosen_knight = {
if = {
limit = {
NOT = { is_knight_of = root }
}
set_knight_status = force
}
}
}
}
else = {
send_interface_message = {
type = event_accolade_bad_text
title = accolade.0013.notification_fail
desc = accolade_call_acclaimed_knight_fail_notification_tooltip
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,70 @@
namespace = coronation_events
scripted_trigger coronation_events_3001_angry_vassal_trigger = {
is_available_healthy_ai_adult = yes
opinion = {
target = scope:host
value < 10
}
}
coronation_events.3001 = {
type = letter_event
opening = coronation_events.3001.opening
desc = coronation_events.3001.desc
sender = scope:main_vassal
trigger = {
any_vassal = {
coronation_events_3001_angry_vassal_trigger = yes
count > 1
}
}
immediate = {
ordered_vassal = {
limit = {
coronation_events_3001_angry_vassal_trigger = yes
}
order_by = primary_title.tier
save_scope_as = main_vassal
}
every_vassal = {
limit = {
coronation_events_3001_angry_vassal_trigger = yes
NOT = { this = scope:main_vassal }
}
add_to_list = angry_vassals
}
}
option = { # Invite them
name = coronation_events.3001.a
show_as_tooltip = {
every_in_list = {
list = angry_vassals
add_to_activity = root.involved_activity
}
}
hidden_effect = {
every_in_list = {
list = angry_vassals
set_location = root.location
add_to_activity_without_travel = root.involved_activity
}
}
}
option = { # Nah
name = coronation_events.3001.b
add_legitimacy = major_legitimacy_loss
every_in_list = {
list = angry_vassals
add_opinion = {
target = root
modifier = not_invited_coronation_opinion
opinion = -15
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,227 @@
namespace = feast_default_axel
feast_default_axel.1001 = {
type = activity_event
title = feast_default_axel.1001.t
desc = feast_default_axel.1001.desc
theme = feast_activity
override_background = { reference = bp1_wine_cellar }
right_portrait = {
character = scope:youngster_1
animation = wedding_drunk
camera = camera_event_very_right
}
center_portrait = {
character = scope:youngster_2
animation = interested
camera = camera_event_very_left
}
left_portrait = {
character = root
triggered_animation = {
trigger = {
root = {
OR = {
has_trait = drunkard
has_trait = lifestyle_reveler
}
}
}
animation = eyeroll
}
animation = disapproval
}
cooldown = { years = 10 }
trigger = {
faith = { trait_is_sin = drunkard }
this = scope:host
scope:activity = {
any_attending_character = {
NOT = {
this = scope:host
is_spouse_of = root
}
age = { 16 25 }
is_physically_able_ai_adult = yes
num_of_relation_friend < 2
location = scope:host.location
save_temporary_scope_as = temp_first
}
any_attending_character = {
NOR = {
this = scope:host
is_spouse_of = root
this = scope:temp_first
}
age = { 16 25 }
is_physically_able_ai_adult = yes
num_of_relation_friend < 2
location = scope:host.location
number_of_traits_in_common = {
target = scope:temp_first
value >= 1
}
}
}
#serious stuff only
NOT = {
primary_title ?= title:h_china
}
}
immediate = {
involved_activity = { save_scope_as = activity }
save_scope_as = host
scope:activity = {
random_attending_character = {
limit = {
NOT = {
this = scope:host
}
age = { 16 25 }
is_physically_able_ai_adult = yes
num_of_relation_friend < 2
location = scope:host.location
}
weight = {
base = 1
modifier = {
age < 19
add = 3
}
}
save_scope_as = youngster_1
}
random_attending_character = {
limit = {
NOR = {
this = scope:host
this = scope:youngster_1
}
age = { 16 25 }
is_physically_able_ai_adult = yes
num_of_relation_friend < 2
location = scope:host.location
number_of_traits_in_common = {
target = scope:youngster_1
value >= 1
}
}
weight = {
base = 1
modifier = {
age < 19
add = 3
}
}
save_scope_as = youngster_2
}
}
scope:youngster_1 = {
progress_towards_friend_effect = {
REASON = friend_feast_talking_and_laughing
CHARACTER = scope:youngster_2
OPINION = default_friend_opinion
}
}
}
option = { # As if I would ever...
name = feast_default_axel.1001.a
trigger = { has_trait = drunkard }
add_character_modifier = {
modifier = drunk_high_spirits
years = 10
}
stress_impact = {
greedy = minor_stress_impact_loss
base = medium_stress_impact_loss
}
ai_chance = {
ai_value_modifier = {
# Doesn't like sharing
ai_greed = 1
}
modifier = {
has_trait = greedy
add = 20
}
}
}
option = { # Let the kids drink!
name = feast_default_axel.1001.b
scope:activity = {
every_attending_character = {
limit = { has_trait = gregarious }
custom = custom.every_activity_guest_with_gregarious_trait
add_opinion = {
modifier = amused_opinion
opinion = 15
target = root
}
}
}
if = {
limit = {
has_trait = lifestyle_reveler
}
add_trait_xp = {
trait = lifestyle_reveler
value = 5
}
}
add_character_modifier = {
modifier = bad_influence_modifier
years = 10
}
stress_impact = {
gregarious = medium_stress_impact_loss
}
ai_chance = {
ai_value_modifier = {
ai_sociability = 1
}
modifier = {
has_trait = lifestyle_reveler
add = 20
}
}
}
option = { # Shame on both of you!
name = feast_default_axel.1001.c
trigger = {
NOR = {
# Not allowed to judge others for drinking and/or revelling
has_trait = gregarious
has_trait = drunkard
}
}
add_prestige = medium_prestige_gain
add_dread = minor_dread_gain
reverse_add_opinion = {
modifier = unfriendly_opinion
target = scope:youngster_1
}
reverse_add_opinion = {
modifier = unfriendly_opinion
target = scope:youngster_2
}
stress_impact = {
compassionate = medium_stress_impact_gain
vengeful = minor_stress_impact_loss
}
ai_chance = {
ai_value_modifier = {
ai_boldness = 1
ai_vengefulness = 1
}
modifier = {
has_trait = compassionate
add = -40
}
}
}
}

View file

@ -0,0 +1,613 @@

namespace = feast_default_jason
# Legend
# involved_activity
# activity_host
# activity_location
scripted_trigger feast_default_jason_100_attending_soldier_trigger = {
is_ai = yes
NOT = {
this = root
}
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root }
is_adult = yes
NOT = {
is_at_war_with = root
}
}
scripted_trigger feast_default_jason_100_attending_ruler_trigger = {
gold >= minor_gold_value
is_ai = yes
is_ruler = yes
is_landed = yes
NOT = {
this = root
}
is_adult = yes
NOR = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = root }
any_ally = {
is_at_war_with = root
}
is_allied_to = root
government_has_flag = government_is_herder
}
is_at_war = no
opinion = {
target = root
value >= 0
}
trigger_if = {
limit = {
root = {
highest_held_title_tier >= tier_empire
}
}
highest_held_title_tier >= tier_duchy
}
trigger_else = {
highest_held_title_tier >= tier_county
}
current_military_strength > 0
NOR = {
any_tributary = {
is_at_war_with = root
}
suzerain ?= {
is_at_war_with = root
}
top_suzerain ?= {
is_at_war_with = root
}
any_liege_or_above = {
is_at_war_with = root
suzerain ?= {
is_at_war_with = root
}
}
any_vassal_or_below = {
is_at_war_with = root
}
AND = {
is_confederation_member = yes
confederation = {
is_house_based = no # any_confederation_member is not performant for house blocs
any_confederation_member = {
is_at_war_with = root
}
}
}
}
}
#You are stressed at the feast and your realm is at war
feast_default_jason.100 = {
type = activity_event
title = feast_default_jason.100.t
desc = feast_default_jason.100.desc
theme = feast_activity
left_portrait = {
character = root
animation = stress
}
center_portrait = {
character = scope:soldier
animation = inspect_weapon
camera = camera_event_center_pointing_forward
}
right_portrait = {
character = scope:other_ruler
animation = debating
camera = camera_event_very_right
}
lower_right_portrait = scope:foe
cooldown = { years = 10 }
trigger = {
has_raised_armies = yes
is_landed = yes
stress_level >= 1
is_at_war = yes
any_character_war = {
NOR = {
using_cb = undirected_great_holy_war
using_cb = directed_great_holy_war
}
OR = {
AND = {
primary_defender = root
defender_war_score <= 10
}
AND = {
primary_attacker = root
attacker_war_score <= 10
}
}
}
scope:activity = {
any_attending_character = {
feast_default_jason_100_attending_soldier_trigger = yes
save_temporary_scope_as = soldier_temp
}
any_attending_character = {
feast_default_jason_100_attending_ruler_trigger = yes
NOT = {
this = scope:soldier_temp
}
}
}
}
weight_multiplier = {
base = 1
modifier = {
stress_level >= 2
add = 1
}
modifier = {
stress_level >= 3
add = 1
}
}
immediate = {
scope:activity = {
ordered_attending_character = {
order_by = martial
limit = {
feast_default_jason_100_attending_soldier_trigger = yes
}
save_scope_as = soldier
}
#Try to save valid supporter if host of coronation
if = {
limit = {
activity_host = root
has_activity_type = activity_coronation
}
ordered_guest_subset = {
name = supporter
order_by = {
value = "opinion(root)"
}
limit = {
feast_default_jason_100_attending_ruler_trigger = yes
NOT = {
this = scope:soldier
}
}
save_scope_as = other_ruler
}
}
if = {
limit = {
NOT = {
exists = scope:other_ruler
}
}
ordered_attending_character = {
order_by = {
value = "opinion(root)"
}
limit = {
feast_default_jason_100_attending_ruler_trigger = yes
NOT = {
this = scope:soldier
}
}
save_scope_as = other_ruler
}
}
}
random_character_war = {
limit = {
NOR = {
using_cb = undirected_great_holy_war
using_cb = directed_great_holy_war
}
OR = {
AND = {
primary_defender = root
defender_war_score <= 10
}
AND = {
primary_attacker = root
attacker_war_score <= 10
}
}
}
save_scope_as = war
if = {
limit = {
primary_defender = root
}
primary_attacker = {
save_scope_as = foe
}
}
else = {
primary_defender = {
save_scope_as = foe
}
}
}
ordered_army = {
order_by = army_size
save_scope_as = army
location = {
save_scope_as = army_location
}
}
}
#Add ruler to war
option = {
trigger = {
#I seek advancement!
trigger_if = {
limit = {
involved_activity = {
NOT = { activity_host = root }
has_activity_type = activity_coronation
}
scope:war = {
primary_attacker = root
}
}
has_activity_intent = coronation_seize_advantages
}
#I seek aid for my people
trigger_else_if = {
limit = {
involved_activity = {
NOT = { activity_host = root }
has_activity_type = activity_coronation
}
scope:war = {
primary_defender = root
}
}
has_activity_intent = coronation_advocate_domain
}
trigger_else_if = {
limit = {
involved_activity = {
activity_host = root
has_activity_type = activity_coronation
}
has_activity_intent = coronation_embrace_supporters
}
has_activity_intent = coronation_embrace_supporters
}
trigger_else = {
diplomacy >= high_skill_rating
}
}
show_as_unavailable = {
always = yes
}
name = feast_default_jason.100.a
if = {
limit = {
scope:war = {
primary_defender = root
}
}
scope:war = {
add_defender = scope:other_ruler
}
}
else = {
scope:war = {
add_attacker = scope:other_ruler
}
}
scope:other_ruler = {
if = {
limit = {
NOR = {
is_liege_or_above_of = root
is_allied_to = root
highest_held_title_tier > root.highest_held_title_tier
}
}
add_prestige = medium_prestige_gain
}
else = {
add_prestige = minor_prestige_gain
}
}
hidden_effect = {
add_opinion = {
modifier = grateful_opinion
target = scope:other_ruler
opinion = 30
}
}
stress_impact = {
base = minor_stress_impact_loss
stubborn = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
craven = minor_stress_impact_loss
}
ai_chance = {
base = 150
ai_value_modifier = {
ai_boldness = -0.5
ai_rationality = 0.5
}
modifier = {
factor = 5
OR = {
scope:war = {
primary_defender = root
attacker_war_score >= 40
}
scope:war = {
primary_attacker = root
defender_war_score >= 40
}
scope:war = {
primary_defender = root
primary_attacker = {
current_military_strength > root.current_military_strength
}
}
scope:war = {
primary_attacker = root
primary_defender = {
current_military_strength > root.current_military_strength
}
}
}
}
modifier = {
factor = 2
has_trait = craven
scope:war = {
primary_defender = root
}
}
modifier = {
factor = 0.5
OR = {
has_trait = stubborn
has_trait = arrogant
scope:war = {
primary_defender = root
primary_attacker = {
current_military_strength < root.current_military_strength
}
}
scope:war = {
primary_attacker = root
primary_defender = {
current_military_strength < root.current_military_strength
}
}
}
}
}
}
#Spend the rest of the feast speaking of victory
option = {
name = feast_default_jason.100.b
if = {
limit = {
involved_activity = {
has_activity_type = activity_coronation
}
this = involved_activity.activity_host
}
custom_tooltip = coronation_tt_positive_tiny
involved_activity = { activity_special_type_progression_tiny = yes }
coronation_add_magnificence_log_effect = {
VALUE = flag:positive_tiny
CHAR = root
}
}
else = {
add_prestige = miniscule_prestige_gain
}
if = {
limit = {
has_activity_intent = coronation_exalt_crown
}
add_character_modifier = {
modifier = boasted_of_victories_modifier
years = 5
desc = victories_reduce_stress_add_prestige_desc
}
}
else = {
add_character_modifier = {
modifier = boasted_of_victories_modifier
years = 3
desc = victories_reduce_stress_add_prestige_desc
}
}
custom_tooltip = victories_reduce_stress_add_prestige_tt
if = {
limit = {
has_activity_intent = coronation_exalt_crown
}
custom_tooltip = feast_default_jason.100.b_exalt_the_crown
}
stress_impact = {
arrogant = minor_stress_impact_loss
ambitious = miniscule_stress_impact_loss
humble = miniscule_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_energy = 0.5
}
modifier = {
factor = 5
}
modifier = {
factor = 2
OR = {
has_trait = arrogant
has_trait = ambitious
}
}
modifier = {
factor = 0
OR = {
has_trait = humble
scope:war = {
primary_defender = root
attacker_war_score >= 30
}
scope:war = {
primary_attacker = root
defender_war_score >= 30
}
scope:war = {
primary_defender = root
primary_attacker = {
current_military_strength > root.current_military_strength
}
}
scope:war = {
primary_attacker = root
primary_defender = {
current_military_strength > root.current_military_strength
}
}
}
}
}
}
#Another round!
option = {
name = {
trigger = {
drinks_alcohol_trigger = yes
NOR = {
has_trait = comfort_eater
has_trait = gluttonous
}
}
text = feast_default_jason.100.c
}
name = {
trigger = {
OR = {
drinks_alcohol_trigger = no
has_trait = comfort_eater
has_trait = gluttonous
}
}
text = feast_default_jason.100.c_hungee
}
#Alcohol stress loss
if = {
limit = {
drinks_alcohol_trigger = yes
NOR = {
has_trait = comfort_eater
has_trait = gluttonous
}
}
if = {
limit = {
NOT = {
has_trait = drunkard
}
}
random = {
chance = 5
add_trait = drunkard
}
}
stress_impact = {
base = medium_stress_impact_loss
temperate = medium_stress_impact_gain
diligent = miniscule_stress_impact_gain
vengeful = miniscule_stress_impact_gain
drunkard = medium_stress_impact_loss
lifestyle_reveler = medium_stress_impact_loss
gregarious = miniscule_stress_impact_loss
content = minor_stress_impact_loss
lazy = minor_stress_impact_loss
fickle = miniscule_stress_impact_loss
calm = miniscule_stress_impact_loss
patient = miniscule_stress_impact_loss
}
}
#Food stress loss
if = {
limit = {
OR = {
drinks_alcohol_trigger = no
has_trait = comfort_eater
has_trait = gluttonous
}
}
if = {
limit = {
NOT = {
has_trait = comfort_eater
}
}
random = {
chance = 5
add_trait = comfort_eater
}
}
stress_impact = {
base = medium_stress_impact_loss
temperate = medium_stress_impact_gain
diligent = miniscule_stress_impact_gain
vengeful = miniscule_stress_impact_gain
gluttonous = medium_stress_impact_loss
comfort_eater = medium_stress_impact_loss
gregarious = miniscule_stress_impact_loss
content = minor_stress_impact_loss
lazy = minor_stress_impact_loss
fickle = miniscule_stress_impact_loss
calm = miniscule_stress_impact_loss
patient = miniscule_stress_impact_loss
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = -0.5
ai_energy = -0.5
}
modifier = {
factor = 2
OR = {
has_trait = gluttonous
has_trait = drunkard
has_trait = comfort_eater
has_trait = lifestyle_reveler
has_trait = content
has_trait = lazy
}
}
modifier = {
factor = 0
OR = {
has_trait = temperate
has_trait = diligent
has_trait = vengeful
}
}
}
}
}

View file

@ -0,0 +1,142 @@

namespace = feast_default_joe
scripted_trigger feast_default_joe_1010_agent_trigger = {
is_ai = yes
intrigue > mediocre_skill_rating # avoid suck
$SCHEME$ = {
any_scheme_agent_slot = { save_temporary_scope_as = agent_slot_temp }
}
is_valid_as_agent_in_slot = scope:agent_slot_temp
save_temporary_scope_as = agent_temp
NOR = {
$SCHEME$ = { scheme_is_character_agent = scope:agent_temp } # Not already in the scheme
has_any_bad_relationship_with_character_trigger = { CHARACTER = root } # Doesn't hate you
}
}
feast_default_joe.1010 = { # Get agent to join your scheme
type = activity_event
title = feast_default_joe.1010.t
desc = feast_default_joe.1010.desc
theme = feast_activity
left_portrait = {
character = root
animation = scheme
}
right_portrait = {
character = scope:agent
animation = war_over_win
}
lower_center_portrait = scope:scheme.scheme_target_character
cooldown = { years = 10 }
trigger = {
any_scheme = { save_temporary_scope_as = scheme_temp }
scope:activity = {
any_attending_character = {
feast_default_joe_1010_agent_trigger = { SCHEME = scope:scheme_temp }
}
}
}
immediate = {
scope:activity = {
every_attending_character = {
limit = {
root = { any_scheme = { save_temporary_scope_as = scheme_temp } }
feast_default_joe_1010_agent_trigger = { SCHEME = scope:scheme_temp }
scope:agent_slot_temp = { is_filled = no } # prefer schemes with unfilled slots
}
alternative_limit = {
root = { any_scheme = { save_temporary_scope_as = scheme_temp } }
feast_default_joe_1010_agent_trigger = { SCHEME = scope:scheme_temp }
}
add_to_list = agent_list
scope:scheme_temp = { add_to_list = scheme_list }
}
}
random_in_list = { # Pick a scheme
list = scheme_list
weight = {
base = 1
modifier = { add = scheme_success_chance }
}
save_scope_as = scheme
}
random_in_list = { # Pick an agent
list = agent_list
limit = { feast_default_joe_1010_agent_trigger = { SCHEME = scope:scheme } }
weight = {
base = 1
modifier = { add = intrigue }
is_of_major_interest_to_weight_up_modifier = { CHARACTER = scope:scheme.scheme_target_character }
}
save_scope_as = agent
}
}
option = { # Attract all
name = feast_default_joe.1010.a
trigger = {
custom_tooltip = {
text = feast_default_joe.1010.a.trigger
OR = {
intrigue >= decent_skill_rating
has_trait = schemer
}
}
}
skill = intrigue
show_as_unavailable = { always = yes }
custom_tooltip = {
text = all_guests_agent_more_likely_join_scheme_tt
scope:activity = {
every_attending_character = {
limit = {
is_valid_as_agent_in_any_slot = scope:scheme
trigger_if = {
limit = { exists = scope:scheme.scheme_target_character }
NOT = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:scheme.scheme_target_character }
}
}
}
scope:scheme = {
add_to_variable_list = {
name = increased_agent_join_acceptance
target = prev
months = 6
}
}
}
}
}
}
option = { # Focus on one
name = feast_default_joe.1010.b
custom_tooltip = {
text = agent_more_likely_join_scheme_tt
scope:scheme = {
add_to_variable_list = {
name = increased_agent_join_acceptance
target = scope:agent
months = 6
}
}
}
}
option = {
name = feast_default_joe.1010.c
add_prestige = medium_prestige_loss
scope:scheme = { change_opportunities = 1 }
}
option = {
name = feast_default_joe.1010.d
scope:scheme = { add_scheme_progress = 15 }
}
}

View file

@ -0,0 +1,502 @@
namespace = feast_default_laurence
#Bitter rebelious fellow vassal wants to murder your liege at your feast
feast_default_laurence.100 = {
type = activity_event
title = feast_default_laurence.100.t
desc = feast_default_laurence.100.desc
theme = feast_activity
override_background = { reference = corridor_night }
left_portrait = {
character = root
animation = personality_dishonorable
camera = camera_event_very_left
}
center_portrait = {
character = scope:conspiratorial_fellow
#animation = marshal_dagger
animation = marshal
camera = camera_event_left_forward
}
right_portrait = {
character = scope:intent_target
animation = wedding_drunk
camera = camera_event_right_away
}
cooldown = { years = 10 }
trigger = {
# Correct intent for vibes time.
has_activity_intent = murder_attendee_intent
# Some extra cautious validity checks.
intent_target ?= {
is_alive = yes
}
liege = intent_target
#Someone who has been in a war with our liege and therefore has a grudge
scope:activity = {
any_attending_character = {
this != root
is_ai = yes
any_memory = {
OR = {
has_memory_type = offensive_war
has_memory_type = defensive_war
}
any_memory_participant = {
this = root.intent_target
}
}
}
}
}
immediate = {
save_scope_as = feast_host
scope:activity = {
random_attending_character = {
limit = {
this != root
is_ai = yes
any_memory = {
OR = {
has_memory_type = offensive_war
has_memory_type = defensive_war
}
any_memory_participant = {
this = root.intent_target
}
}
}
save_scope_as = conspiratorial_fellow
random_memory = {
limit = {
OR = {
has_memory_type = offensive_war
has_memory_type = defensive_war
}
any_memory_participant = {
this = root.intent_target
}
}
save_scope_as = war_memory
}
}
}
intent_target = {
save_scope_as = intent_target
}
}
# You agree to turn a blind eye to his murder attempt on your liege
option = {
name = feast_default_laurence.100.a
scope:conspiratorial_fellow = {
duel = {
skill = intrigue
value = scope:intent_target.intrigue
30 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -39
}
min = 5
desc = feast_default_laurence.100.a.tt.success
scope:intent_target = {
trigger_event = feast_default_laurence.101
}
show_as_tooltip = {
scope:conspiratorial_fellow = {
unknown_murder_effect = {
VICTIM = scope:intent_target
MURDERER = scope:conspiratorial_fellow
REASON = death_murder
}
add_trait = murderer
}
}
}
70 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -39
}
min = 10
desc = feast_default_laurence.100.a.tt.failure
root = {
send_interface_toast = {
type = event_intrigue_bad
title = feast_default_laurence.100.a.tt.failure
left_icon = scope:intent_target
scope:conspiratorial_fellow = {
add_prestige = medium_prestige_loss
add_secret = {
type = secret_murder_attempt
target = scope:intent_target
}
reverse_add_opinion = {
target = scope:intent_target
modifier = suspicion_opinion
opinion = -60
}
}
}
}
}
}
}
stress_impact = {
brave = minor_stress_impact_loss
wrathful = medium_stress_impact_loss
ambitious = medium_stress_impact_loss
content = medium_stress_impact_gain
calm = minor_stress_impact_gain
craven = miniscule_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = craven
factor = 0
}
modifier = {
has_trait = brave
factor = 2
}
modifier = {
has_trait = calm
factor = 0
}
modifier = {
has_trait = wrathful
factor = 2
}
modifier = {
has_trait = content
factor = 0
}
modifier = {
has_trait = ambitious
factor = 2
}
}
}
# Simply gather information on HerHis habits and ticks.
option = {
name = feast_default_laurence.100.b
# Do we already have a scheme against them? If so, add the modifier immediately.
if = {
limit = {
any_scheme = {
scheme_type = murder
scheme_target_character = scope:intent_target
}
}
random_scheme = {
limit = {
scheme_type = murder
scheme_target_character = scope:intent_target
}
add_scheme_modifier = { type = feast_learnt_habits_modifier }
}
}
# Otherwise, note that we notify them that they'll gain a bonus to murdering this character if they start in the next X years.
else = {
# If we've already got someone logged for this, warn that we'll overwrite them.
if = {
limit = { has_variable = feast_events_ewan_0001_bonus_value }
custom_tooltip = feast_events_ewan.0001.e.tt.bonus_to_murder_scheme.overwrite
}
# Set the variable.
set_variable = {
name = feast_events_ewan_0001_bonus_value
value = scope:intent_target
years = feast_events_ewan_0001_murder_scheme_bonus_time_to_use_value
}
# Inform the player.
custom_tooltip = feast_events_ewan.0001.e.tt.bonus_to_murder_scheme
}
stress_impact = {
craven = miniscule_stress_impact_loss
wrathful = medium_stress_impact_loss
ambitious = medium_stress_impact_loss
content = medium_stress_impact_gain
brave = minor_stress_impact_gain
calm = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = brave
factor = 0
}
modifier = {
has_trait = craven
factor = 2
}
modifier = {
has_trait = calm
factor = 0
}
modifier = {
has_trait = wrathful
factor = 2
}
modifier = {
has_trait = content
factor = 0
}
modifier = {
has_trait = ambitious
factor = 2
}
}
}
#Threaten conspiratorial_fellow and get hook
option = {
name = feast_default_laurence.100.c
if = {
limit = {
can_add_hook = {
target = scope:conspiratorial_fellow
type = suspicious_activity_hook
}
}
add_hook = {
type = suspicious_activity_hook
target = scope:conspiratorial_fellow
}
add_intrigue_lifestyle_xp = minor_lifestyle_xp
}
else = {
add_intrigue_lifestyle_xp = major_lifestyle_xp
}
stress_impact = {
paranoid = medium_stress_impact_loss
vengeful = minor_stress_impact_loss
deceitful = medium_stress_impact_loss
forgiving = miniscule_stress_impact_gain
honest = minor_stress_impact_gain
trusting = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = forgiving
factor = 0
}
modifier = {
has_trait = vengeful
factor = 2
}
modifier = {
has_trait = honest
factor = 0
}
modifier = {
has_trait = deceitful
factor = 2
}
modifier = {
has_trait = trusting
factor = 0
}
modifier = {
has_trait = paranoid
factor = 2
}
}
}
}
#You were killed by a vassal at another vassal's murder intent feast
feast_default_laurence.101 = {
type = activity_event
title = feast_default_laurence.100.t
desc = feast_default_laurence.101.desc
theme = feast_activity
left_portrait = {
character = scope:intent_target
animation = sick_stomach
camera = camera_event_very_left
}
right_portrait = {
character = scope:feast_host
animation = wedding_drunk
camera = camera_event_right_away
}
option = {
name = feast_default_laurence.101.a
scope:conspiratorial_fellow = {
unknown_murder_effect = {
VICTIM = scope:intent_target
MURDERER = scope:conspiratorial_fellow
REASON = death_murder
}
add_trait = murderer
}
scope:feast_host = {
trigger_event = feast_default_laurence.102
}
}
}
#Your guest succeeded at murdering your liege
feast_default_laurence.102 = {
type = activity_event
title = feast_default_laurence.100.t
desc = feast_default_laurence.102.desc
theme = feast_activity
left_portrait = {
character = scope:feast_host
animation = personality_dishonorable
camera = camera_event_very_left
}
center_portrait = {
character = scope:intent_target
animation = sick_stomach
camera = camera_event_very_left_activity
}
right_portrait = {
character = scope:conspiratorial_fellow
animation = sword_coup_degrace
camera = camera_event_right_away
}
#Befriend murderer but gain murder trait!
option = {
name = feast_default_laurence.102.a
add_intrigue_lifestyle_xp = minor_lifestyle_xp
set_relation_friend = {
reason = friend_bonded_over_sins
target = scope:conspiratorial_fellow
}
reverse_add_opinion = {
target = scope:conspiratorial_fellow
modifier = befriended_opinion
opinion = 50
}
scope:feast_host = {
add_trait = murderer
}
stress_impact = {
gregarious = medium_stress_impact_loss
trusting = medium_stress_impact_loss
shy = minor_stress_impact_gain
paranoid = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = shy
factor = 0
}
modifier = {
has_trait = gregarious
factor = 2
}
modifier = {
has_trait = paranoid
factor = 0
}
modifier = {
has_trait = trusting
factor = 2
}
}
}
#Attempt to imprison him for his crime
option = {
name = feast_default_laurence.102.b
flavor = feast_default_laurence.102.b.flavor
duel = {
skill = intrigue
value = scope:conspiratorial_fellow.intrigue
30 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -39
}
min = 10
send_interface_toast = {
type = event_intrigue_good
title = feast_default_laurence.102.b.tt.success
left_icon = scope:conspiratorial_fellow
rightfully_imprison_character_effect = {
TARGET = scope:conspiratorial_fellow
IMPRISONER = scope:feast_host
}
add_intrigue_lifestyle_xp = medium_lifestyle_xp
reverse_add_opinion = {
target = scope:conspiratorial_fellow
modifier = betrayed_me_opinion
opinion = -80
}
}
}
70 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -39
}
min = 5
send_interface_toast = {
type = event_intrigue_bad
title = feast_default_laurence.102.b.tt.fail
left_icon = scope:conspiratorial_fellow
reverse_add_opinion = {
target = scope:conspiratorial_fellow
modifier = betrayed_me_opinion
opinion = -30
}
}
desc = feast_default_laurence.102.b.tt.fail
}
}
stress_impact = {
deceitful = medium_stress_impact_loss
paranoid = medium_stress_impact_loss
arbitrary = minor_stress_impact_loss
honest = medium_stress_impact_gain
trusting = medium_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = deceitful
factor = 2
}
modifier = {
has_trait = honest
factor = 0
}
modifier = {
has_trait = paranoid
factor = 2
}
modifier = {
has_trait = trusting
factor = 0
}
modifier = {
has_trait = arbitrary
factor = 2
}
modifier = {
has_trait = just
factor = 0
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,560 @@
namespace = feast_events_flavor
#######################################
# By Veronica Pazos and Jay Zaborowski
# feast_events_flavor.0001 - Dynasty member of someone you have a relation with approaches you
# feast_events_flavor.0002 - A former rival reminisces with you
# Dynasty member of someone you have a relation with approaches you
# by Veronica Pazos
scripted_trigger feast_events_flavor_0001_appropriate_guest = {
is_ai = yes
is_adult = yes
NOR = {
has_any_good_relationship_with_character_trigger = { CHARACTER = root }
has_any_bad_relationship_with_character_trigger = { CHARACTER = root }
dynasty = root.dynasty
is_courtier_of = root
overlord ?= root
}
save_temporary_scope_as = guest_temp
dynasty ?= {
any_dynasty_member = {
NOT = { this = scope:guest_temp }
NOT = { is_spouse_of = scope:guest_temp } # We exclude their spouses to avoid weirdness
OR = {
AND = {
has_any_good_relationship_with_character_trigger = { CHARACTER = root }
NOT = { has_any_bad_relationship_with_character_trigger = { CHARACTER = root } }
}
AND = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = root }
NOT = { has_any_good_relationship_with_character_trigger = { CHARACTER = root } }
}
}
}
}
}
feast_events_flavor.0001 = {
type = activity_event
title = feast_events_flavor.0001.t
desc = {
desc = feast_events_flavor.0001.desc.intro
first_valid = {
triggered_desc = {
trigger = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
}
desc = feast_events_flavor.0001.desc.good
}
desc = feast_events_flavor.0001.desc.bad
}
}
theme = feast_activity
left_portrait = {
character = root
triggered_animation = {
trigger = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target } }
animation = happiness
}
animation = dismissal
}
right_portrait = {
character = scope:guest
triggered_animation = {
trigger = {
root = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target } }
}
animation = toast_goblet
}
animation = schadenfreude
}
lower_left_portrait = scope:relation_target
cooldown = { years = 10 }
trigger = {
involved_activity = {
any_attending_character = {
feast_events_flavor_0001_appropriate_guest = yes
}
}
}
immediate = {
involved_activity = {
random_attending_character = {
limit = {
feast_events_flavor_0001_appropriate_guest = yes
}
save_scope_as = guest
dynasty = {
random_dynasty_member = {
limit = {
is_ai = yes
NOT = { this = scope:guest }
NOT = { is_spouse_of = scope:guest } # We exclude their spouses to avoid weirdness
OR = {
AND = {
has_any_good_relationship_with_character_trigger = { CHARACTER = root }
NOT = { has_any_bad_relationship_with_character_trigger = { CHARACTER = root } }
}
AND = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = root }
NOT = { has_any_good_relationship_with_character_trigger = { CHARACTER = root } }
}
}
}
save_scope_as = relation_target
}
}
}
}
}
option = { # Special diplo option
name = feast_events_flavor.0001.aa
trigger = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
has_trait = family_first
NOT = { is_allied_to = scope:guest }
}
custom_tooltip = feast_alliance_effect_tooltip
create_alliance = {
target = scope:guest
allied_through_owner = root
allied_through_target = scope:guest
}
stress_impact = {
callous = major_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = callous
factor = 0
}
}
}
option = { # If it's a good relationship, extend it
name = feast_events_flavor.0001.a
trigger = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
NOT = { has_relation_friend = scope:guest }
}
if = {
limit = {
has_activity_intent = befriend_attendee_intent
intent_target ?= scope:guest
}
complete_activity_intent = yes
}
set_relation_friend = {
target = scope:guest
reason = friend_feast_bonding
}
stress_impact = {
gregarious = major_stress_impact_loss
shy = medium_stress_impact_gain
callous = major_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = gregarious
factor = 2
}
modifier = {
OR = {
has_trait = shy
has_trait = callous
}
factor = 0
}
}
}
option = { # If it's a good relationship, sing their praises
name = feast_events_flavor.0001.b
trigger = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
}
add_prestige = minor_prestige_gain
every_vassal_or_below = {
limit = {
this != scope:guest
is_ai = yes
has_vassal_stance = courtly
is_vassal_of = root
}
custom = every_participating_courtly_vassal
add_opinion = {
modifier = feast_had_good_talk
target = root
opinion = 10
}
}
stress_impact = {
callous = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = callous
factor = 0
}
}
}
option = { # If it's bad, double down
name = feast_events_flavor.0001.c
trigger = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
}
add_dread = minor_dread_gain
set_relation_rival = {
target = scope:guest
reason = rival_insulted_dynasty
}
stress_impact = {
callous = major_stress_impact_loss
vengeful = major_stress_impact_loss
wrathful = major_stress_impact_loss
compassionate = major_stress_impact_gain
craven = major_stress_impact_gain
calm = major_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
OR = {
has_trait = callous
has_trait = wrathful
has_trait = vengeful
}
factor = 2
}
modifier = {
OR = {
has_trait = compassionate
has_trait = craven
has_trait = calm
}
factor = 0
}
}
}
option = { # If it's bad, apologise
name = feast_events_flavor.0001.d
show_as_unavailable = {
has_trait = callous # We show it but we don't even let you click it kekw
}
trigger = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
NOT = { has_trait = callous }
}
if = {
limit = { has_relation_rival = scope:relation_target }
remove_relation_rival = scope:relation_target
}
else_if = {
limit = { has_relation_nemesis = scope:relation_target }
remove_relation_nemesis = scope:relation_target
}
else = {
scope:relation_target = {
add_opinion = {
target = root
modifier = apologized_opinion
opinion = 25
}
}
}
stress_impact = {
craven = major_stress_impact_loss
vengeful = major_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = forgiving
factor = 2
}
modifier = {
has_trait = vengeful
factor = 0
}
}
}
option = { # Enough talking about them
name = feast_events_flavor.0001.e
if = {
limit = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:relation_target }
}
scope:guest = {
add_opinion = {
target = root
modifier = feast_had_good_talk
opinion = 10
}
}
}
else = {
every_vassal_or_below = {
limit = {
this != scope:guest
is_ai = yes
has_vassal_stance = courtly
is_participant_in_activity = root.involved_activity
}
custom = every_participating_courtly_vassal
add_opinion = {
modifier = impressed_opinion
target = root
opinion = 10
}
}
}
stress_impact = {
base = medium_stress_impact_loss
}
ai_chance = {
base = 100
modifier = {
has_trait = craven
factor = 0
}
}
}
}
# A former rival reminisces with you
# By Jay Zaborowski
feast_events_flavor.0002 = {
type = activity_event
title = feast_events_flavor.0002.t
desc = feast_events_flavor.0002.desc
theme = feast_activity
right_portrait = {
character = root
animation = laugh
}
left_portrait = {
character = scope:former_rival
animation = drink_goblet
}
cooldown = { years = 10 }
trigger = {
involved_activity = {
any_attending_character = {
NOT = { this = root }
is_physically_able_ai_adult = yes
any_memory = {
OR = {
has_memory_type = stopped_being_rivals
has_memory_type = let_go_of_rivalry
}
memory_participant:rival = root
}
}
}
}
immediate = {
involved_activity = {
random_attending_character = {
limit = {
NOT = { this = root }
is_physically_able_ai_adult = yes
any_memory = {
OR = {
has_memory_type = stopped_being_rivals
has_memory_type = let_go_of_rivalry
}
memory_participant:rival = root
}
}
save_scope_as = former_rival
get_quirk_character_effect = yes
}
}
}
option = { # Seduce
name = feast_events_flavor.0002.a
trigger = {
trigger_if = {
limit = { is_married = yes }
OR = {
might_cheat_on_every_partner_trigger = yes
is_ai = no # Players can do as they like
}
}
OR = {
has_trait = lustful
has_trait = rakish
has_trait = seducer
has_trait = deviant
}
is_attracted_to_gender_of = scope:former_rival
scope:former_rival = { is_attracted_to_gender_of = root }
}
trait = lustful
trait = rakish
trait = seducer
trait = deviant
had_sex_with_effect = {
CHARACTER = scope:former_rival
PREGNANCY_CHANCE = pregnancy_chance
}
progress_towards_lover_effect = {
CHARACTER = scope:former_rival
REASON = lover_distracting_sex
OPINION = default_lover_opinion
}
stress_impact = {
chaste = medium_stress_impact_gain
celibate = major_stress_impact_gain
vengeful = major_stress_impact_gain
forgiving = medium_stress_impact_loss
}
ai_chance = {
base = 200
}
}
option = { # Become friends
name = feast_events_flavor.0002.b
trigger = { can_set_relation_friend_trigger = { CHARACTER = scope:former_rival } }
set_relation_friend = { reason = friend_feast_recounted_rivalry target = scope:former_rival }
stress_impact = {
gregarious = major_stress_impact_loss
forgiving = major_stress_impact_loss
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = shy
opinion = {
value <= medium_negative_opinion
target = scope:former_rival
}
}
}
modifier = {
factor = 2
has_trait = gregarious
}
}
}
option = { # Time to go back to old times - give prestige
name = feast_events_flavor.0002.c
trigger = { can_set_relation_rival_trigger = { CHARACTER = scope:former_rival } }
set_relation_rival = { reason = rival_bad_chemistry target = scope:former_rival }
add_prestige = medium_prestige_gain
if = {
limit = {
OR = {
faith = { trait_is_virtue = forgiving }
faith = { trait_is_sin = vengeful }
}
}
custom_tooltip = feast_events_flavor.0002.c.vengeful_sinful.tt #This will lose you piety because Forgiving is Virtuous or Vengeful is Sinful
add_piety = major_piety_loss
}
if = {
limit = {
OR = {
faith = { trait_is_sin = forgiving }
faith = { trait_is_virtue = vengeful }
}
}
custom_tooltip = feast_events_flavor.0002.c.forgiving_sinful.tt #This will lose you piety because Forgiving is Virtuous or Vengeful is Sinful
add_piety = major_piety_gain
}
stress_impact = {
forgiving = medium_stress_impact_gain
vengeful = major_stress_impact_loss
}
ai_chance = {
base = 0
modifier = {
add = 10 # Not enough on its own to be Vengeful
has_trait = vengeful
}
modifier = {
add = 100
opinion = {
value <= medium_negative_opinion
target = scope:former_rival
}
}
modifier = {
factor = 0
OR = {
has_trait = forgiving
has_trait = craven # Isn't about to start a fight
}
}
}
}
option = { # It feels good to turn the other cheek!
name = {
text = {
first_valid = {
triggered_desc = {
trigger = {
OR = {
faith = { trait_is_virtue = forgiving }
faith = { trait_is_sin = vengeful }
}
}
desc = feast_events_flavor.0002.d.virtuous
}
desc = feast_events_flavor.0002.d
}
}
}
if = {
limit = {
OR = {
faith = { trait_is_virtue = forgiving }
faith = { trait_is_sin = vengeful }
}
}
custom_tooltip = feast_events_flavor.0002.d.virtuous.tt # This option is available because Forgiving is Virtuous or Vengeful is Sinful
add_piety = major_piety_gain
add_character_modifier = { modifier = feast_turning_the_other_cheek_modifier years = 10 }
}
else_if = {
limit = {
NOR = {
faith = { trait_is_sin = forgiving }
faith = { trait_is_virtue = vengeful }
}
}
add_piety = medium_piety_gain
}
reverse_add_opinion = {
target = scope:former_rival
modifier = friendliness_opinion
opinion = 10
}
stress_impact = {
base = minor_stress_impact_loss
forgiving = medium_stress_impact_loss
}
ai_chance = {
base = 150
}
}
}

View file

@ -0,0 +1,137 @@

namespace = feast_events_klank
feast_events_klank.1001 = {
type = activity_event
title = feast_events_klank.1001.t
desc = feast_events_klank.1001.desc
theme = feast_activity
right_portrait = {
character = scope:terrified_onlooker
animation = shock
camera = camera_event_right_away
}
left_portrait = {
character = root
animation = scheme
camera = camera_event_very_left
}
center_portrait = {
character = scope:fellow_torturer
animation = assassin
camera = camera_event_very_right
}
cooldown = { years = 10 }
trigger = {
has_trait = torturer
NOT = {
has_trait = gluttonous
}
involved_activity = {
any_attending_character = {
has_trait = torturer
is_ai = yes
opinion = {
target = root
value >= 20
}
intrigue <= root.intrigue
NOT = {
this = root
}
}
any_attending_character = {
NOR = {
has_trait = torturer
has_trait = callous
has_trait = sadistic
this = root
}
}
}
}
immediate = {
set_random_entertainment_text_effect = yes
involved_activity = {
random_attending_character = {
limit = {
has_trait = torturer
is_ai = yes
intrigue <= root.intrigue
opinion = {
target = root
value >= medium_positive_opinion
}
NOT = {
this = root
}
}
save_scope_as = fellow_torturer
}
random_attending_character = {
limit = {
NOR = {
has_trait = torturer
has_trait = callous
has_trait = sadistic
NOT = {
this = root
}
}
}
save_scope_as = terrified_onlooker
}
}
}
option = { #nah, the other way is better
name = feast_events_klank.1001.a
add_intrigue_lifestyle_xp = major_lifestyle_xp
scope:fellow_torturer = {
add_intrigue_lifestyle_xp = major_lifestyle_xp
add_intrigue_skill = 1
}
}
option = { #yeah, you're right
name = feast_events_klank.1001.b
progress_towards_friend_effect = {
REASON = friend_common_interests
CHARACTER = scope:fellow_torturer
OPINION = default_friend_opinion
}
add_intrigue_lifestyle_xp = minor_lifestyle_xp
scope:fellow_torturer = {
add_intrigue_lifestyle_xp = minor_lifestyle_xp
}
}
option = { #actually, I've been thinking recently
name = feast_events_klank.1001.c
trigger = {
learning >= 16
}
show_as_unavailable = { always = yes }
add_intrigue_lifestyle_perk_points = 1
add_prestige = medium_prestige_gain
progress_towards_friend_effect = {
REASON = friend_common_interests
CHARACTER = scope:fellow_torturer
OPINION = default_friend_opinion
}
scope:fellow_torturer = {
add_intrigue_lifestyle_perk_points = 1
add_intrigue_skill = 1
}
ai_chance = {
base = 200
}
}
}

View file

@ -0,0 +1,95 @@
namespace = feast_mkc
feast_mkc.0001 = {
type = activity_event
title = feast_mkc.0001.t
desc = feast_mkc.0001.desc
theme = feast_activity
left_portrait = {
character = ROOT
animation = thinking
camera = camera_event_very_left
}
right_portrait = {
character = scope:guest_lost_loved_pet
animation = sadness
camera = camera_event_very_right
}
cooldown = { years = 10 }
trigger = {
has_named_cat_trigger = yes
scope:activity = {
any_attending_character = {
NOT = { ROOT = this }
any_memory = {
has_memory_type = cat_died
}
}
}
}
immediate = {
scope:activity = {
random_attending_character = {
limit = {
NOT = { ROOT = this }
any_memory = { has_memory_type = cat_died }
}
save_scope_as = guest_lost_loved_pet
}
}
random_owned_story = {
limit = {
story_type = story_cycle_pet_cat
}
save_scope_as = pet_cat_story
}
}
option = {
name = feast_mkc.0001.a
scope:guest_lost_loved_pet = {
stress_impact = {
base = medium_stress_impact_loss
}
add_opinion = {
modifier = feast_helped_overcome_loss_opinion
target = root
}
hidden_effect = {
reverse_add_opinion = {
modifier = feast_sympathy_over_loss_opinion
target = root
}
}
}
stress_impact = {
compassionate = minor_stress_impact_loss
}
}
option = {
name = feast_mkc.0001.b
scope:guest_lost_loved_pet = {
stress_impact = {
base = minor_stress_impact_loss
}
}
custom_tooltip = bonus_to_petting_pet_tt
hidden_effect = {
scope:pet_cat_story = {
set_variable = {
name = bonus_to_petting_pet
}
}
}
}
}

View file

@ -0,0 +1,206 @@
namespace = feast_events_tova
feast_events_tova.0001 = { #Pleasure Dome Feast
type = activity_event
title = feast_events_tova.0001.t
desc = feast_events_tova.0001.desc
theme = feast_activity
override_background = { reference = mpo_city_steppe }
left_portrait = {
character = root
animation = schadenfreude
}
center_portrait = {
character = scope:palace_admirer
animation = admiration
}
right_portrait = {
character = scope:honorary_guest
animation = thinking
}
cooldown = { years = 20 }
trigger = {
has_mpo_dlc_trigger = yes
scope:activity.activity_location = {
has_building_or_higher = pleasure_dome
}
this = scope:activity.activity_host
involved_activity = {
any_attending_character = {
highest_held_title_tier >= tier_county
this != root
}
}
}
immediate = {
if = {
limit = {
exists = scope:activity.special_guest:honorary_guest
}
scope:activity.special_guest:honorary_guest = { save_scope_as = honorary_guest }
}
else_if = {
limit = { exists = scope:activity.special_guest:honorary_guest_regular }
scope:activity.special_guest:honorary_guest_regular = { save_scope_as = honorary_guest }
}
else = {
involved_activity = {
random_attending_character = {
limit = {
highest_held_title_tier >= tier_county
this != root
}
save_scope_as = honorary_guest
}
}
}
involved_activity = {
random_attending_character = {
limit = {
NOT = { this = root }
NAND = {
exists = scope:honorary_guest
this = scope:honorary_guest
}
}
save_scope_as = palace_admirer
}
}
}
weight_multiplier = {
base = 1
modifier = {
factor = 1.5
involved_activity = {
has_activity_option = {
category = special_type
option = feast_type_tsagaan_sar
}
}
}
}
option = { #A place worthy to host such mighty warriors as us!
name = feast_events_tova.0001.a
trigger = {
involved_activity = {
any_attending_character = {
is_vassal_of = root
has_vassal_stance = glory_hound
}
}
}
add_prestige = minor_prestige_loss
involved_activity = {
every_attending_character = {
limit = {
is_vassal_of = root
has_vassal_stance = glory_hound
}
custom = every_glory_hound_vassal
add_opinion = {
target = root
modifier = obedience_opinion
}
}
}
ai_chance = {
base = 100
modifier = {
has_trait = humble
factor = 0
}
modifier = {
has_trait = arrogant
factor = 2
}
}
stress_impact = {
arrogant = medium_stress_impact_loss
humble = major_stress_impact_gain
}
}
option = { #Impress most important guest.
name = feast_events_tova.0001.b
duel = {
target = scope:honorary_guest
skill = diplomacy
50 = { #They are impressed by your opulence
desc = feast_events_tova.0001.b.success
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
min = 5
send_interface_toast = {
type = event_toast_effect_good
title = feast_events_tova.0001.b.success
left_icon = root
right_icon = scope:honorary_guest
add_hook = {
target = scope:honorary_guest
type = loyalty_hook
}
}
}
50 = { #They are not impressed by your palace
desc = feast_events_tova.0001.b.failure
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
min = 5
send_interface_toast = {
type = event_toast_effect_bad
title = feast_events_tova.0001.b.failure
left_icon = root
right_icon = scope:honorary_guest
add_hook = {
target = scope:honorary_guest
type = favor_hook
}
stress_impact = {
base = miniscule_stress_gain
diligent = miniscule_stress_gain
ambitious = miniscule_stress_gain
}
}
}
}
ai_chance = {
base = 100
}
}
option = { #Truly, this is a great testament to my rule.
name = feast_events_tova.0001.c
dynasty = {
add_dynasty_prestige = medium_dynasty_prestige_value
}
stress_impact = {
base = medium_stress_impact_loss
}
ai_chance = {
base = 100
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,489 @@

namespace = feast_default_alex
# Someone reminds you of a positive memory you share
feast_default_alex.100 = {
type = activity_event
title = feast_default_alex.100.t
desc = feast_default_alex.100.desc
theme = feast_activity
right_portrait = {
character = scope:guest
animation = wedding_drunk
camera = camera_event_very_right
}
center_portrait = {
character = root
animation = interested
}
left_portrait = {
character = scope:other_guest
animation = storyteller
camera = camera_event_very_left
}
cooldown = { years = 10 }
trigger = {
scope:activity = {
any_attending_character = {
this != root
is_physically_able_ai_adult = yes
NOT = { has_relation_rival = root }
any_memory = {
has_memory_category = positive
NOT = {
has_memory_category = private
}
any_memory_participant = {
this = root
}
}
opinion = {
target = root
value > 0
}
save_temporary_scope_as = guest_temp
}
#There is a third attendee in existence
any_attending_character = {
count >= 2
NOT = {
this = root
}
opinion = {
target = root
value > 0
}
}
}
}
weight_multiplier = {
base = 1
modifier = {
add = 3
has_activity_intent = befriend_attendee_intent
intent_target ?= {
involved_activity ?= root.involved_activity
is_physically_able_ai_adult = yes
NOT = { has_relation_rival = root }
any_memory = {
has_memory_category = positive
any_memory_participant = {
this = root
}
NOT = {
has_memory_category = private
}
}
opinion = {
target = root
value > 0
}
}
}
}
immediate = {
save_scope_as = root_scope
scope:activity = {
activity_host = { save_scope_as = host }
random_attending_character = {
limit = {
this != root
is_physically_able_ai_adult = yes
NOT = { has_relation_rival = root }
any_memory = {
has_memory_category = positive
any_memory_participant = {
this = root
}
NOT = {
has_memory_category = private
}
}
opinion = {
target = root
value > 0
}
}
weight = {
base = 1
modifier = {
add = 1000
root = {
has_activity_intent = befriend_attendee_intent
}
root.intent_target ?= this
}
modifier = {
add = 50
has_relation_potential_friend = root
}
modifier = {
add = 10
is_of_major_interest_to_root_trigger = yes
}
modifier = {
add = 5
is_of_minor_interest_to_root_trigger = yes
}
}
assign_quirk_effect = yes
save_scope_as = guest
random_memory = {
limit = {
has_memory_category = positive
any_memory_participant = {
this = root
}
NOT = {
has_memory_category = private
}
}
save_scope_as = guest_memory
}
}
random_attending_character = {
limit = {
NOR = {
this = root
this = scope:guest
}
opinion = {
target = root
value > 0
}
}
save_scope_as = other_guest
}
}
}
option = {
trigger = {
OR = {
has_trait = arrogant
has_trait = callous
has_trait = sadistic
has_trait = vengeful
has_trait = wrathful
has_trait = arbitrary
has_trait = fickle
}
scope:guest = {
NOR = {
is_spouse_of = root
is_close_family_of = root
any_vassal = {
this = root
}
}
}
}
name = feast_default_alex.100.aa
add_prestige = minor_prestige_gain
reverse_add_opinion = {
modifier = insulted_opinion
target = scope:guest
opinion = -30
}
scope:guest = {
add_stress = medium_stress_gain
add_prestige = medium_prestige_loss
}
stress_impact = {
gregarious = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
humble = minor_stress_impact_gain
forgiving = minor_stress_impact_gain
}
ai_chance = {
base = 3
modifier = {
factor = 0
OR = {
has_trait = gregarious
has_trait = compassionate
has_trait = humble
has_trait = forgiving
}
}
}
}
option = {
name = feast_default_alex.100.a
progress_towards_friend_effect = {
REASON = friend_showed_personal_interest
CHARACTER = scope:guest
OPINION = 20
}
stress_impact = {
gregarious = medium_stress_impact_loss
}
}
option = {
name = feast_default_alex.100.b
add_diplomacy_lifestyle_xp = miniscule_lifestyle_xp
stress_impact = {
base = minor_stress_impact_loss
}
ai_chance = {
base = 1
modifier = {
factor = 0
stress <= 0
has_focus_diplomacy = no
}
}
}
}
# There's a terrible plague in a nearby realm
feast_default_alex.200 = {
type = activity_event
title = feast_default_alex.200.t
desc = feast_default_alex.200.desc
theme = feast_activity
center_portrait = {
character = root
animation = drink_goblet
}
right_portrait = {
character = scope:guest
animation = worry
}
cooldown = { years = 10 }
trigger = {
scope:activity = {
any_attending_character = {
this != root
is_physically_able_ai_adult = yes
NOT = { has_relation_rival = root }
top_liege = root.top_liege
OR = {
has_personality_emotional_trigger = yes
has_personality_submissive_trigger = yes
}
}
}
any_epidemic = {
save_temporary_scope_as = the_epidemic
any_infected_province = {
squared_distance = {
target = root.location
value <= squared_distance_large
}
exists = barony.holder.top_liege
}
NOT = {
any_infected_province = {
barony.holder.top_liege ?= root.involved_activity.activity_host.top_liege
}
}
}
}
immediate = {
save_scope_as = root_scope
scope:activity = {
activity_host = { save_scope_as = host }
random_attending_character = {
limit = {
this != root
is_physically_able_ai_adult = yes
NOT = { has_relation_rival = root }
top_liege = root.top_liege
OR = {
has_personality_emotional_trigger = yes
has_personality_submissive_trigger = yes
}
}
weight = {
base = 1
modifier = {
add = 1000
root = {
has_activity_intent = befriend_attendee_intent
}
root.intent_target ?= this
}
modifier = {
add = 50
has_relation_potential_friend = root
}
modifier = {
add = 10
is_of_major_interest_to_root_trigger = yes
}
modifier = {
add = 5
is_of_minor_interest_to_root_trigger = yes
}
}
assign_quirk_effect = yes
save_scope_as = guest
}
}
random_epidemic = {
limit = {
save_temporary_scope_as = the_epidemic
any_infected_province = {
squared_distance = {
target = root.location
value <= squared_distance_large
}
exists = barony.holder.top_liege
}
NOT = {
any_infected_province = {
barony.holder.top_liege ?= root.involved_activity.activity_host.top_liege
}
}
}
save_scope_as = epidemic
random_infected_province = {
limit = {
squared_distance = {
target = root.location
value <= squared_distance_large
}
exists = barony.holder.top_liege
}
barony.holder.top_liege = { save_scope_as = afflicted_top_liege }
}
}
hidden_effect = {
create_character = {
template = peasant_character
dynasty = none
location = root.location
culture = root.location.culture
faith = root.location.faith
gender_female_chance = 50
save_scope_as = sick_peasant
}
scope:sick_peasant = {
add_trait = scope:epidemic.epidemic_type.epidemic_trait
}
}
}
option = {
name = feast_default_alex.200.a
trigger = {
this = scope:activity.activity_host
scope:activity.activity_location.county = {
holder = scope:activity.activity_host
NOT = {
has_county_modifier = plague_preparations_modifier
}
}
}
remove_short_term_gold = miniscule_gold_value
add_prestige = minor_prestige_gain
scope:activity.activity_location.county = {
add_county_modifier = {
modifier = plague_preparations_modifier
years = 10
}
}
scope:guest = {
add_opinion = {
target = root
modifier = thankful_opinion
opinion = 20
}
stress_impact = {
base = medium_stress_impact_loss
}
}
stress_impact = {
craven = medium_stress_impact_loss
compassionate = medium_stress_impact_loss
generous = medium_stress_impact_loss
}
}
option = {
name = feast_default_alex.200.b
trigger = {
has_activity_intent = befriend_attendee_intent
intent_target ?= scope:guest
}
add_internal_flag = special
progress_towards_friend_effect = {
REASON = friend_supported_at_feast
CHARACTER = scope:guest
OPINION = 20
}
scope:guest = {
stress_impact = {
base = minor_stress_impact_loss
}
}
stress_impact = {
sadistic = medium_stress_impact_gain
arbitrary = medium_stress_impact_gain
compassionate = medium_stress_impact_loss
}
ai_chance = {
base = 1
modifier = {
factor = 0
OR = {
has_trait = sadistic
has_trait = arbitrary
}
}
}
}
option = {
name = feast_default_alex.200.c
add_piety = minor_piety_gain
stress_impact = {
zealous = minor_stress_impact_loss
humble = minor_stress_impact_loss
compassionate = minor_stress_impact_loss
forgiving = minor_stress_impact_loss
cynical = medium_stress_impact_gain
}
scope:guest = {
stress_impact = {
base = minor_stress_impact_loss
cynical = minor_stress_impact_gain
}
}
ai_chance = {
base = 1
modifier = {
factor = 0
has_trait = cynical
}
}
}
option = {
name = feast_default_alex.200.d
stress_impact = {
base = minor_stress_impact_loss
}
scope:guest = {
stress_impact = {
base = minor_stress_impact_gain
}
}
}
after = {
scope:sick_peasant = { silent_disappearance_effect = yes }
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,941 @@
# FEAST ACTIVITY KEY EVENTS
# Most custom variables checked here will have been set by the "welcoming" events in feast_activity_standard_events
# Each unique key event gets a range of 50 IDs. This should more than suffice in all cases.
namespace = feast_main_befriend
################################
# Feast Befriend Events
# by Petter Vilberg
################################
###
# Weight and setup event
###
feast_main_befriend.0001 = {
type = activity_event
hidden = yes
trigger = {
not_hosting_a_murder_feast = yes
OR = {
AND = {
scope:activity = {
has_variable = potential_friend
}
scope:activity.var:potential_friend = {
opinion = {
target = scope:activity.activity_host
value > 20
}
}
}
AND = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
scope:activity = {
any_attending_character = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
}
}
}
weight_multiplier = {
base = 1
opinion_modifier = {
trigger = { exists = scope:activity.var:potential_friend }
who = scope:activity.var:potential_friend
opinion_target = scope:activity.activity_host
multiplier = 0.1
step = 0.1
}
modifier = {
add = 2
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
modifier = {
add = -0.5
NOT = { has_activity_intent = befriend_attendee_intent }
NOT = {
scope:activity = {
has_variable = potential_friend
}
}
}
modifier = {
add = -0.5
is_ai = yes
}
}
immediate = {
if = {
limit = {
scope:activity = {
has_variable = potential_friend
var:potential_friend = {
opinion = {
target = scope:activity.activity_host
value > 20
}
}
}
}
scope:activity.var:potential_friend = {
save_scope_as = potential_friend
}
}
else_if = {
limit = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
intent_target = {
save_scope_as = potential_friend
}
}
else = {
scope:activity = {
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
save_scope_as = potential_friend
}
}
}
scope:activity = {
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
this != scope:potential_friend
highest_held_title_tier > 1
OR = {
has_trait = arrogant
has_trait = vengeful
}
}
save_scope_as = arrogant_guest
}
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
this != scope:potential_friend
trigger_if = {
limit = { exists = scope:arrogant_guest }
this != scope:arrogant_guest
}
highest_held_title_tier > 1
OR = {
has_trait = humble
has_trait = compassionate
any_secret = {
type = secret_cannibal
}
}
}
save_scope_as = kind_to_lower_nobility
}
if = {
limit = {
exists = scope:kind_to_lower_nobility
scope:kind_to_lower_nobility = {
any_secret = { type = secret_cannibal }
}
}
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
this != scope:potential_friend
trigger_if = {
limit = { exists = scope:arrogant_guest }
this != scope:arrogant_guest
}
trigger_if = {
limit = { exists = scope:kind_to_lower_nobility }
this != scope:kind_to_lower_nobility
}
OR = {
has_trait = gluttonous
has_trait = lifestyle_reveler
}
}
save_scope_as = glutton_target
}
}
activity_host = {
trigger_event = feast_main_befriend.1001
}
scope:potential_friend = {
trigger_event = feast_main_befriend.2001
}
if = {
limit = {
exists = scope:arrogant_guest
}
scope:arrogant_guest = {
trigger_event = feast_main_befriend.2002
}
}
if = {
limit = {
exists = scope:kind_to_lower_nobility
}
scope:kind_to_lower_nobility = {
trigger_event = feast_main_befriend.2003
}
}
if = {
limit = {
exists = scope:glutton_target
}
scope:glutton_target = {
trigger_event = feast_main_befriend.2004
}
}
every_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
this != scope:potential_friend
trigger_if = {
limit = { exists = scope:arrogant_guest }
this != scope:arrogant_guest
}
trigger_if = {
limit = { exists = scope:kind_to_lower_nobility }
this != scope:kind_to_lower_nobility
}
trigger_if = {
limit = { exists = scope:glutton_target }
this != scope:glutton_target
}
}
trigger_event = feast_main_befriend.3001
}
}
}
}
##########################
# Main event for Host
##########################
feast_main_befriend.1001 = {
title = feast_main_befriend.1001.t
type = activity_event
desc = {
desc = feast_main_befriend.1001.opening
desc = feast_main_befriend.1001.getting_close
triggered_desc = {
trigger = { exists = scope:arrogant_guest }
desc = {
desc = feast_main_befriend.1001.arrogant_guest
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = feast_main_befriend.1001.arrogant_kind_link
}
}
}
first_valid = {
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = {
desc = feast_main_befriend.1001.kind_to_lower_nobility
triggered_desc = {
trigger = {
scope:kind_to_lower_nobility = {
any_secret = { type = secret_cannibal }
}
}
desc = feast_main_befriend.1001.really_hungry
}
}
}
desc = feast_main_befriend.1001.no_kind_target
}
desc = feast_main_befriend.1001.friendship
}
theme = feast_activity
center_portrait = {
character = root
animation = toast
}
right_portrait = {
character = scope:potential_friend
animation = happiness
}
lower_right_portrait = scope:kind_to_lower_nobility
trigger = {
OR = {
any_scheme = {
type = befriend
scheme_target_character = {
involved_activity ?= scope:activity
}
}
AND = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
scope:activity = {
any_attending_character = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
}
}
}
immediate = {
play_music_cue = mx_cue_meadandwine
if = {
limit = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
intent_target = { save_scope_as = potential_friend }
}
else_if = {
limit = {
any_scheme = {
type = befriend
scheme_target_character = {
involved_activity ?= scope:activity
}
}
}
random_scheme = {
type = befriend
limit = {
scheme_target_character = {
involved_activity ?= scope:activity
}
}
scheme_target_character = {
save_scope_as = potential_friend
}
}
}
else = {
scope:activity = {
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
save_scope_as = potential_friend
}
}
}
}
option = {
name = feast_main_befriend.1001.a
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:potential_friend }
}
set_relation_friend = { reason = friend_feast_talking_and_laughing target = scope:potential_friend }
# Complete activity intent if relevant
if = {
limit = {
exists = involved_activity
has_activity_intent = befriend_attendee_intent
intent_target ?= scope:potential_friend
intent_target.involved_activity ?= root.involved_activity
}
save_scope_as = intent_completer
send_interface_toast = {
title = activity_intent_complete_toast
left_icon = scope:potential_friend
complete_activity_intent = yes
}
}
}
else = {
progress_towards_friend_effect = {
REASON = friend_feast_talking_and_laughing
CHARACTER = scope:potential_friend
OPINION = default_friend_opinion
}
}
if = {
limit = {
any_scheme = {
type = befriend
scheme_target_character = scope:potential_friend
}
}
random_scheme = {
type = befriend
limit = {
scheme_target_character = scope:potential_friend
}
end_scheme = yes
}
}
}
after = {
hidden_effect = {
# Fire the end events
trigger_event = {
id = feast_main_befriend.5001
days = 10
}
}
}
}
##########################
# Main Event for Potential Friend
##########################
feast_main_befriend.2001 = {
title = feast_main_befriend.2001.t
type = activity_event
desc = {
desc = feast_main_befriend.1001.opening
desc = feast_main_befriend.2001.getting_close
triggered_desc = {
trigger = { exists = scope:arrogant_guest }
desc = {
desc = feast_main_befriend.2001.arrogant_guest
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = feast_main_befriend.2001.arrogant_kind_link
}
}
}
first_valid = {
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = {
desc = feast_main_befriend.2001.kind_to_lower_nobility
triggered_desc = {
trigger = {
scope:kind_to_lower_nobility = {
any_secret = { type = secret_cannibal }
}
}
desc = feast_main_befriend.2001.really_hungry
}
}
}
desc = feast_main_befriend.2001.no_kind_target
}
desc = feast_main_befriend.2001.friendship
}
theme = feast_activity
left_portrait = root
right_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:kind_to_lower_nobility
lower_right_portrait = scope:arrogant_guest
option = {
name = feast_main_befriend.2001.a
add_prestige = medium_prestige_gain
show_as_tooltip = {
set_relation_friend = scope:activity.activity_host
hidden_effect = {
add_opinion = {
target = scope:activity.activity_host
modifier = bonded_at_feast_opinion
}
}
}
}
}
##########################
# Main Event for Arrogant Guest
##########################
feast_main_befriend.2002 = {
title = feast_main_befriend.2002.t
type = activity_event
desc = {
desc = feast_main_befriend.1001.opening
desc = feast_main_befriend.2002.arrogant_guest
triggered_desc = {
trigger = {
exists = scope:kind_to_lower_nobility
}
desc = feast_main_befriend.2002.disgusted_by_kindness
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
right_portrait = {
character = scope:kind_to_lower_nobility
animation = personality_compassionate
}
option = {
name = feast_main_befriend.2002.a
add_prestige = medium_prestige_loss
if = {
limit = {
exists = scope:kind_to_lower_nobility
}
add_opinion = {
modifier = disgusted_by_humility_opinion
target = scope:kind_to_lower_nobility
}
progress_towards_rival_effect = {
CHARACTER = scope:kind_to_lower_nobility
REASON = rival_feast_commoners
OPINION = 0
}
}
if = {
limit = {
faith = { has_doctrine_parameter = host_honored_guests_active }
}
custom_description_no_bullet = {
text = feast_main_befriend.2002.because_of_hospitality_tenet
}
add_piety = medium_piety_loss
}
}
}
##########################
# Main Event for Kind to Nobility
##########################
feast_main_befriend.2003 = {
title = feast_main_befriend.2003.t
type = activity_event
desc = {
desc = feast_main_befriend.2003.opening
triggered_desc = {
trigger = { exists = scope:arrogant_guest }
desc = feast_main_befriend.2003.arrogant_guest
}
first_valid = {
triggered_desc = {
trigger = {
any_secret = { type = secret_cannibal }
exists = scope:glutton_target
}
desc = feast_main_befriend.2003.kind_to_glutton
}
triggered_desc = {
trigger = {
any_secret = { type = secret_cannibal }
}
desc = feast_main_befriend.2003.cannibal_kindness
}
desc = feast_main_befriend.2003.kind_to_lower_nobility
}
desc = feast_main_befriend.2003.ending
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:arrogant_guest
option = {
name = feast_main_befriend.2003.a
scope:activity = {
every_attending_character = {
limit = {
feast_default_participant_trigger = yes
trigger_if = {
limit = { exists = scope:arrogant_guest }
this != scope:arrogant_guest
}
}
add_opinion = {
target = root
modifier = impressed_with_humility_opinion
}
}
}
if = {
limit = {
exists = scope:arrogant_guest
}
show_as_tooltip = {
scope:arrogant_guest = {
add_prestige = minor_prestige_loss
}
}
}
}
}
##########################
# Main Event for Glutton Target
##########################
feast_main_befriend.2004 = {
title = feast_main_befriend.2004.t
type = activity_event
desc = {
desc = feast_main_befriend.2003.opening
triggered_desc = {
trigger = { exists = scope:arrogant_guest }
desc = feast_main_befriend.2004.arrogant_guest
}
desc = feast_main_befriend.2004.kindness_from_other
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
right_portrait = {
character = scope:kind_to_lower_nobility
animation = personality_compassionate
}
lower_right_portrait = scope:arrogant_guest
option = {
name = feast_main_befriend.2004.a
stress_impact = {
base = medium_stress_loss
}
progress_towards_friend_effect = {
REASON = friend_had_a_great_feast_together
CHARACTER = scope:kind_to_lower_nobility
OPINION = 0
}
hidden_effect = {
if = {
limit = {
exists = scope:kind_to_lower_nobility
NOT = { has_trait = arrogant }
}
add_opinion = {
modifier = impressed_with_humility_opinion
target = scope:kind_to_lower_nobility
}
}
}
}
}
##########################
# Generic Main Event for Guests
##########################
feast_main_befriend.3001 = {
title = feast_main_befriend.3001.t
type = activity_event
desc = {
desc = feast_main_befriend.2003.opening
triggered_desc = {
trigger = { exists = scope:arrogant_guest }
desc = {
desc = feast_main_befriend.3001.arrogant_guest
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = feast_main_befriend.1001.arrogant_kind_link
}
}
}
first_valid = {
triggered_desc = {
trigger = { exists = scope:kind_to_lower_nobility }
desc = {
desc = feast_main_befriend.3001.kind_to_lower_nobility
triggered_desc = {
trigger = {
scope:kind_to_lower_nobility = {
any_secret = { type = secret_cannibal }
}
}
desc = feast_main_befriend.3001.really_hungry
}
}
}
}
desc = feast_main_befriend.3001.ending
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:arrogant_guest
option = {
name = feast_main_befriend.3001.a
if = {
limit = {
exists = scope:kind_to_lower_nobility
NOT = { has_trait = arrogant }
}
add_opinion = {
modifier = impressed_with_humility_opinion
target = scope:kind_to_lower_nobility
}
}
}
}
##########################################################
# END EVENTS
# 5000-5999
##########################################################
# Fire End Events
feast_main_befriend.5001 = {
type = activity_event
hidden = yes
trigger = {
#verify that the activity still exists
exists = scope:activity
}
immediate = {
scope:activity = {
activity_host = {
save_scope_as = host_saying_goodbye
if = {
limit = { exists = primary_partner }
random_consort = {
limit = {
this = scope:activity.activity_host.primary_partner
is_available_ai = yes
}
alternative_limit = {
is_available_ai = yes
}
save_scope_as = spouse
}
}
scope:potential_friend = {
trigger_event = feast_main_befriend.5003
}
}
every_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
this != scope:potential_friend
}
trigger_event = feast_main_befriend.5004
}
activity_host = { trigger_event = feast_main_befriend.5002 }
}
}
}
#################
# Host End Event
#################
feast_main_befriend.5002 = {
type = activity_event
title = feast_main_befriend.5002.t
desc = feast_main_befriend.5002.desc
theme = feast_activity
center_portrait = {
character = root
animation = toast
}
right_portrait = {
character = scope:potential_friend
animation = happiness
}
trigger = {
OR = {
any_scheme = {
type = befriend
scheme_target_character = {
involved_activity ?= scope:activity
}
}
AND = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
scope:activity = {
any_attending_character = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
}
}
}
immediate = {
if = {
limit = {
has_activity_intent = befriend_attendee_intent
intent_target ?= {
is_alive = yes
}
}
intent_target = { save_scope_as = potential_friend }
}
else_if = {
limit = {
any_scheme = {
type = befriend
scheme_target_character = {
involved_activity ?= scope:activity
}
}
}
random_scheme = {
type = befriend
limit = {
scheme_target_character = {
involved_activity ?= scope:activity
}
}
scheme_target_character = {
save_scope_as = potential_friend
}
}
}
else = {
scope:activity = {
random_attending_character = {
limit = {
feast_default_participant_trigger = yes
this != scope:activity.activity_host
NOT = { has_relation_friend = root }
opinion = {
target = scope:activity.activity_host
value > 35
}
}
save_scope_as = potential_friend
}
}
}
}
option = {
name = feast_main_befriend.5002.a
scope:potential_friend = {
add_opinion = {
modifier = bonded_at_feast_opinion
target = root
}
}
}
}
#################
# Friend End Event
#################
feast_main_befriend.5003 = {
type = activity_event
title = feast_main_befriend.5003.t
desc = feast_main_befriend.5003.desc
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:spouse
option = {
name = feast_main_befriend.5003.a
scope:host_saying_goodbye = {
add_opinion = {
modifier = bonded_at_feast_opinion
target = scope:potential_friend
}
}
feast_end_guest_effect = yes
}
}
###################
# General Guest End Event
###################
feast_main_befriend.5004 = {
type = activity_event
title = feast_main_befriend.5004.t
desc = feast_main_befriend.5004.desc
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
option = {
name = feast_main_befriend.5004.a
add_hosted_feast_modifier_towards_character = { CHARACTER = scope:activity.activity_host }
feast_end_guest_effect = yes
}
}

View file

@ -0,0 +1,768 @@
# FEAST ACTIVITY KEY EVENTS
# Most custom variables checked here will have been set by the "welcoming" events in feast_activity_standard_events
# Each unique key event gets a range of 50 IDs. This should more than suffice in all cases.
namespace = feast_main_live_fowl
############################
# A LIVELY DISH
# 0051 - 0100
############################
# Among a number of delightfully presented entremets, a peacock [or other fowl] turns out to still be alive.
# 0051 - 0060: Standard setup and descriptive events.
# 0061 - 0070: Standard unique followup events.
# 0091 - 0100: Standard end events.
####
# Weight and Setup Event
####
feast_main_live_fowl.0001 = {
type = activity_event
hidden = yes
trigger = {
trigger_if = {
limit = {
scope:activity.activity_host = {
has_variable = last_feast_was
}
}
NOT = { scope:activity.activity_host.var:last_feast_was = flag:live_fowl }
}
scope:activity = {
NOT = {
has_activity_option = {
category = feast_option_courses
option = feast_courses_bad
}
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
this != scope:activity.activity_host
save_temporary_scope_as = fowl_dinner_target
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
}
NOT = { has_trait = lazy }
NOT = { has_trait = compassionate }
save_temporary_scope_as = fowl_bird_chaser
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
this = scope:fowl_bird_chaser
}
count > 1
}
}
}
immediate = {
scope:activity = {
# Someone has to take the pain for the enjoyment of others.
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
this != scope:activity.activity_host
}
save_scope_as = fowl_dinner_target
}
# A sadistic character kills the bird
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
has_trait = sadistic
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
}
}
random = {
chance = 50
save_scope_as = fowl_bird_killer
}
}
# If the bird is not killed, someone chases it out.
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOT = { exists = scope:fowl_bird_killer }
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
}
NOT = { has_trait = lazy }
NOT = { has_trait = compassionate }
NOT = { has_trait = sadistic }
}
save_scope_as = fowl_bird_chaser
}
activity_host = {
set_variable = {
name = last_feast_was
value = flag:live_fowl
}
if = {
limit = {
NAND = {
exists = scope:fowl_bird_killer
this = scope:fowl_bird_killer
}
}
# Generic host event, as long as they are not the bird killer.
trigger_event = feast_main_live_fowl.0003
}
}
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
AND = {
exists = scope:fowl_bird_killer
this = scope:fowl_bird_killer
}
AND = {
exists = scope:fowl_bird_chaser
this = scope:fowl_bird_chaser
}
}
}
# Generic guest description event
trigger_event = feast_main_live_fowl.0002
}
scope:fowl_dinner_target = {
trigger_event = feast_main_live_fowl.0004
}
if = {
limit = { exists = scope:fowl_bird_killer }
scope:fowl_bird_killer = {
trigger_event = feast_main_live_fowl.0005
}
}
if = {
limit = { exists = scope:fowl_bird_chaser }
scope:fowl_bird_chaser = {
trigger_event = feast_main_live_fowl.0006
}
}
}
}
}
###
# Generic event for Guests
###
feast_main_live_fowl.0002 = {
title = feast_main_live_fowl.0002.t
type = activity_event
desc = {
desc = feast_main_live_fowl.0002.entremets_served
first_valid = {
# If a character kills the bird
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = feast_main_live_fowl.0002.bird_killed
}
# If a named character chases the bird out
triggered_desc = {
trigger = {
exists = scope:fowl_bird_chaser
}
desc = feast_main_live_fowl.0002.bird_chased_by_character
}
# If a servant chases it away.
desc = feast_main_live_fowl.0002.bird_chased_away
}
}
theme = feast_activity
left_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
right_portrait = {
character = scope:fowl_bird_killer
animation = anger
}
option = {
name = feast_main_live_fowl.0002.a
add_character_modifier = {
modifier = feast_raucous_entertainment_modifier
years = 5
}
if = {
limit = { exists = scope:fowl_bird_killer }
show_as_tooltip = {
scope:fowl_bird_killer = {
add_dread = medium_dread_gain
}
}
}
}
}
###
# Event for Host
###
feast_main_live_fowl.0003 = {
title = feast_main_live_fowl.0003.t
type = activity_event
desc = {
desc = feast_main_live_fowl.0003.entremets_served
first_valid = {
# If a character kills the bird
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = {
desc = feast_main_live_fowl.0003.bird_killed
}
}
# If a named character chases the bird out
triggered_desc = {
trigger = {
exists = scope:fowl_bird_chaser
}
desc = {
desc = feast_main_live_fowl.0003.bird_chased_by_character
}
}
# If a servant chases it away.
desc = feast_main_live_fowl.0003.bird_chased_away
}
}
theme = feast_activity
right_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
left_portrait = {
character = root
animation = shock
}
center_portrait = {
character = scope:fowl_bird_killer
animation = anger
}
immediate = {
play_music_cue = mx_cue_meadandwine
}
trigger = {
NOT = {
has_character_modifier = feast_raucous_entertainment_modifier
}
}
option = {
name = feast_main_live_fowl.0003.a
add_character_modifier = {
modifier = feast_raucous_entertainment_modifier
years = 5
}
if = {
limit = { exists = scope:fowl_bird_killer }
show_as_tooltip = {
scope:fowl_bird_killer = {
add_dread = medium_dread_gain
}
}
}
}
after = {
hidden_effect = {
trigger_event = {
id = feast_main_live_fowl.9000
days = 10
}
scope:activity = {
add_activity_log_entry = {
key = feast_live_fowl_log
tags = { good }
score = 25
character = root
target = scope:fowl_dinner_target
}
}
}
}
}
###
# Event for Bird Target
###
# The guest that suffers the fowl's wrath.
feast_main_live_fowl.0004 = {
title = feast_main_live_fowl.0004.t
type = activity_event
desc = {
desc = feast_main_live_fowl.0004.entremets_served
first_valid = {
# If a character kills the bird
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = feast_main_live_fowl.0004.bird_killed
}
# If a named character chases the bird out
triggered_desc = {
trigger = {
exists = scope:fowl_bird_chaser
}
desc = feast_main_live_fowl.0004.bird_chased_by_character
}
# If a servant chases it away.
desc = feast_main_live_fowl.0004.bird_chased_away
}
}
theme = feast_activity
left_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
right_portrait = {
character = scope:fowl_bird_killer
animation = anger
}
option = {
name = feast_main_live_fowl.0004.a
if = {
limit = { has_trait = wounded_3 }
add_internal_flag = dangerous
}
random_list = {
15 = {
increase_wounds_effect = {
REASON = feast_accident
}
add_character_flag = was_wounded_by_bird_at_feast
}
85 = { } # Nothing happens
}
add_character_modifier = {
modifier = feast_suspicious_of_food_modifier
years = 10
}
if = {
limit = { exists = scope:fowl_bird_killer }
show_as_tooltip = {
scope:fowl_bird_killer = {
add_dread = medium_dread_gain
}
}
}
}
after = {
hidden_effect = {
random = {
chance = 15
scope:activity.activity_host = {
save_scope_as = host
}
trigger_event = {
id = feast_main_live_fowl.1001
days = { 10 20 }
}
}
}
}
}
###
# Event for Bird Killer
###
feast_main_live_fowl.0005 = {
title = feast_main_live_fowl.0005.t
type = activity_event
desc = {
desc = feast_main_live_fowl.0005.entremets_served
desc = feast_main_live_fowl.0005.bird_killed
}
theme = feast_activity
left_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
right_portrait = {
character = scope:activity.activity_host
animation = shock
}
option = {
name = feast_main_live_fowl.0005.a
add_dread = medium_dread_gain
add_character_modifier = {
modifier = feast_display_of_ruthlessness_modifier
years = 10
}
}
}
###
# Event for Bird Chaser
###
feast_main_live_fowl.0006 = {
title = feast_main_live_fowl.0006.t
type = activity_event
desc = {
desc = feast_main_live_fowl.0006.entremets_served
desc = feast_main_live_fowl.0006.bird_chased_by_character
}
theme = feast_activity
left_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
right_portrait = {
character = scope:fowl_bird_killer
animation = anger
}
option = {
name = feast_main_live_fowl.0006.a
add_character_modifier = {
modifier = feast_bird_based_exercise_modifier
years = 5
}
}
}
##################
# FOLLOW-UPS
##################
# Become scarred from the bird peck
feast_main_live_fowl.1001 = {
type = activity_event
title = feast_main_live_fowl.1001.t
desc = feast_main_live_fowl.1001.desc
theme = feast_activity
left_portrait = {
character = root
animation = pain
}
lower_left_portrait = scope:host
option = {
name = feast_main_live_fowl.1001.a
if = {
limit = { has_character_flag = was_wounded_by_bird_at_feast }
if = {
limit = {
has_trait = wounded
}
change_trait_rank = {
trait = wounded
rank = -1
}
}
}
add_trait = scarred
add_trait_xp = {
trait = scarred
value = {
integer_range = {
min = 5
max = 25
}
}
}
if = {
limit = {
scope:host = { is_alive = yes }
}
progress_towards_rival_effect = {
CHARACTER = scope:host
REASON = rival_bird_pecked
OPINION = 0
}
}
}
}
##################
# END EVENT SETUP
##################
feast_main_live_fowl.9000 = {
type = activity_event
hidden = yes
trigger = {
exists = scope:activity
}
immediate = {
scope:activity = {
# Fire the end event for the host
activity_host = {
save_scope_as = host_saying_goodbye
if = {
limit = { exists = primary_partner }
random_consort = {
limit = {
this = scope:activity.activity_host.primary_partner
is_available_ai = yes
}
alternative_limit = {
is_available_ai = yes
}
save_scope_as = spouse
}
}
}
# Fire the end event for every participant except specials
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
this = scope:fowl_dinner_target
AND = {
exists = scope:fowl_bird_killer
this = scope:fowl_bird_killer
}
AND = {
exists = scope:fowl_bird_chaser
this = scope:fowl_bird_chaser
}
}
}
trigger_event = feast_main_live_fowl.9001
}
# Fire special guest end events
if = {
limit = {
exists = scope:fowl_dinner_target
}
scope:fowl_dinner_target = {
trigger_event = feast_main_live_fowl.9003
}
}
if = {
limit = {
exists = scope:fowl_bird_killer
}
scope:fowl_bird_killer = {
trigger_event = feast_main_live_fowl.9004
}
}
if = {
limit = {
exists = scope:fowl_bird_chaser
}
scope:fowl_bird_chaser = {
trigger_event = feast_main_live_fowl.9005
}
}
activity_host = { trigger_event = feast_main_live_fowl.9002 }
}
}
}
###################
# Guest End event
###################
feast_main_live_fowl.9001 = {
type = activity_event
title = feast_main_live_fowl.9001.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = feast_main_live_fowl.9001.bird_killer
}
desc = feast_main_live_fowl.9001.no_bird_killer
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
right_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
lower_left_portrait = scope:spouse
lower_right_portrait = scope:fowl_bird_killer
option = {
name = feast_main_live_fowl.9001.a
stress_impact = {
base = minor_stress_loss
}
}
}
######################
# Host End event
######################
feast_main_live_fowl.9002 = {
type = activity_event
title = feast_main_live_fowl.9002.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = feast_main_live_fowl.9002.bird_killer
}
desc = feast_main_live_fowl.9002.no_bird_killer
}
}
theme = feast_activity
left_portrait = {
character = root
animation = personality_bold
}
right_portrait = {
character = scope:fowl_dinner_target
animation = pain
}
option = {
name = feast_main_live_fowl.9002.a
stress_impact = {
base = minor_stress_loss
}
}
}
########################
# Bird Target end event
########################
feast_main_live_fowl.9003 = {
type = activity_event
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fowl_bird_killer
}
desc = feast_main_live_fowl.9003.bird_killer
}
desc = feast_main_live_fowl.9003.no_bird_killer
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:spouse
option = {
name = feast_main_live_fowl.9003.a
increase_wounds_no_death_effect = { REASON = wild_animal }
add_opinion = {
modifier = feast_victimised_in_prank
target = scope:activity.activity_host
}
progress_towards_rival_effect = {
CHARACTER = scope:activity.activity_host
OPINION = 0
REASON = rival_fowl_prank
}
}
}
##################
# Bird Killer end event
##################
feast_main_live_fowl.9004 = {
type = activity_event
desc = feast_main_live_fowl.9004.desc
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:spouse
option = {
name = feast_main_live_fowl.9004.a
add_dread = minor_dread_gain
stress_impact = {
callous = medium_stress_impact_loss
sadistic = medium_stress_impact_loss
}
}
}
##################
# Bird Chaser end event
##################
feast_main_live_fowl.9005 = {
type = activity_event
desc = feast_main_live_fowl.9005.desc
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = happiness
}
lower_left_portrait = scope:spouse
option = {
name = feast_main_live_fowl.9005.a
add_prestige = minor_prestige_gain
stress_impact = {
shy = medium_stress_impact_gain
}
}
}

View file

@ -0,0 +1,968 @@
# FEAST ACTIVITY KEY EVENTS
# Most custom variables checked here will have been set by the "welcoming" events in feast_activity_standard_events
namespace = feast_main_stable_breakin
######################
# STABLE BREAK-IN
# by Petter Vilberg
######################
# Some guests break into the host's stables and drunkenly ride around on animals.
# Trigger and weight event
feast_main_stable_breakin.0001 = {
type = activity_event
hidden = yes
trigger = {
trigger_if = {
limit = {
scope:activity.activity_host = { has_variable = last_feast_was }
}
NOT = { scope:activity.activity_host.var:last_feast_was = flag:stable_breakin }
}
scope:activity = {
any_attending_character = {
feast_default_participant_including_player_trigger = yes
NOT = { has_trait = temperate }
this != scope:activity.activity_host
}
}
}
immediate = {
scope:activity = {
# Someone to be responsible for the break-in.
random_attending_character = {
# Either someone who fits the bill
limit = {
feast_default_participant_including_player_trigger = yes
OR = {
has_trait = lifestyle_reveler
has_trait = lunatic
has_trait = shrewd
}
this != scope:activity.activity_host
}
# Or just someone who's had a little too much to drink
alternative_limit = {
feast_default_participant_including_player_trigger = yes
NOT = { has_trait = temperate }
this != scope:activity.activity_host
}
save_scope_as = breakin_stager
}
# If someone is unfortunate enough to be a deviant in the wrong place at the wrong time...
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
OR = {
has_trait = deviant
any_secret = {
type = secret_deviant
}
}
NOR = {
this = scope:breakin_stager
this = scope:activity.activity_host
}
}
save_scope_as = breakin_deviant
random = {
chance = 30
modifier = {
add = 20
scope:breakin_deviant = {
has_trait = lustful
}
}
scope:activity = {
set_variable = {
name = deviant_discovered
value = yes
}
}
}
}
# If there's no deviant, make sure the stager has support from someone
if = {
limit = {
NOT = {
exists = scope:breakin_deviant
}
}
random_attending_character = {
limit = { # A Master of the Horse is the perfect accomplice!
feast_default_participant_including_player_trigger = yes
has_court_position = master_of_horse_court_position
}
alternative_limit = {
feast_default_participant_including_player_trigger = yes
this != scope:breakin_stager
this != scope:activity.activity_host
}
save_scope_as = breakin_helper
}
}
# We need at least one more bystander, if there are enough guests
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:breakin_stager
AND = {
exists = scope:breakin_deviant
this = scope:breakin_deviant
}
AND = {
exists = scope:breakin_helper
this = scope:breakin_helper
}
}
this != scope:activity.activity_host
}
save_scope_as = breakin_bystander
}
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:breakin_stager
AND = {
exists = scope:breakin_bystander
this = scope:breakin_bystander
}
AND = {
exists = scope:breakin_deviant
this = scope:breakin_deviant
}
AND = {
exists = scope:breakin_helper
this = scope:breakin_helper
}
}
this != scope:activity.activity_host
}
trigger_event = feast_main_stable_breakin.0002
}
activity_host = {
set_variable = {
name = last_feast_was
value = flag:stable_breakin
}
trigger_event = feast_main_stable_breakin.0003
}
if = {
limit = { exists = scope:breakin_bystander }
scope:breakin_bystander = {
trigger_event = feast_main_stable_breakin.0007
}
}
# If the one causing the break-in is not also a deviant, the stager gets their event.
scope:breakin_stager = {
trigger_event = feast_main_stable_breakin.0004
}
if = {
limit = {
exists = scope:breakin_deviant
scope:breakin_deviant != scope:breakin_stager
}
scope:breakin_deviant = {
trigger_event = feast_main_stable_breakin.0005
}
}
if = {
limit = { exists = scope:breakin_helper }
scope:breakin_helper = {
trigger_event = feast_main_stable_breakin.0006
}
}
}
}
}
###
# Generic guest event
###
feast_main_stable_breakin.0002 = {
type = activity_event
title = feast_main_stable_breakin.0002.t
desc = {
# Pick out who the introduction describes the stager as acting with
first_valid = {
triggered_desc = {
# The helper that is chosen if no deviant.
trigger = {
exists = scope:breakin_helper
}
desc = feast_main_stable_breakin.0002.breakin_with_helper
}
triggered_desc = {
# The deviant, so they are partly responsible for their own demise
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant != scope:breakin_stager
}
desc = feast_main_stable_breakin.0002.breakin_with_deviant
}
# A fallback in case your feast doesn't have that many guests.
desc = feast_main_stable_breakin.0002.breakin_with_noone
}
triggered_desc = {
# Some more fun if there are enough feast participants to sustain it.
trigger = {
exists = scope:breakin_bystander
}
desc = feast_main_stable_breakin.0002.bystander_riding
}
first_valid = {
# If the deviant is discovered doing deviant things.
triggered_desc = {
trigger = {
scope:activity = { has_variable = deviant_discovered }
}
desc = feast_main_stable_breakin.0002.deviant_discovered
}
# A signoff in case there is no deviant discovery.
#desc = feast_main_stable_breakin.0002.what_a_silly_bunch
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:breakin_stager
animation = jockey_victory
camera = camera_event_horse_right
}
lower_center_portrait = scope:breakin_helper
lower_right_portrait = scope:breakin_deviant
option = {
name = feast_main_stable_breakin.0002.a
trigger = {
NOT = {
scope:activity = { has_variable = deviant_discovered }
}
}
add_character_modifier = {
modifier = feast_livestock_at_feast_modifier
years = 5
}
}
option = {
name = feast_main_stable_breakin.0002.b
trigger = {
exists = scope:activity.var:deviant_discovered
NOR = {
has_trait = deviant
any_secret = {
type = secret_deviant
}
}
}
add_character_modifier = {
modifier = feast_livestock_at_feast_modifier
years = 5
}
show_as_tooltip = {
scope:breakin_deviant = {
add_prestige = major_prestige_loss
}
}
}
option = {
name = feast_main_stable_breakin.0002.secret_of_my_own
trigger = {
exists = scope:activity.var:deviant_discovered
OR = {
has_trait = deviant
any_secret = {
type = secret_deviant
}
}
}
scope:breakin_deviant = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 20
}
}
progress_towards_friend_effect = {
REASON = friend_fellow_deviant
CHARACTER = scope:breakin_deviant
OPINION = 0
}
hidden_effect = {
add_opinion = {
target = scope:breakin_deviant
modifier = pity_opinion
opinion = 20
}
}
}
}
###
# Host event
###
feast_main_stable_breakin.0003 = {
title = feast_main_stable_breakin.0003.t
type = activity_event
desc = {
# Pick out who the introduction describes the stager as acting with
first_valid = {
triggered_desc = {
# The helper that is chosen if no deviant.
trigger = {
exists = scope:breakin_helper
}
desc = feast_main_stable_breakin.0003.breakin_with_helper
}
triggered_desc = {
# The deviant, so they are partly responsible for their own demise
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant != scope:breakin_stager
}
desc = feast_main_stable_breakin.0003.breakin_with_deviant
}
# A fallback in case your feast doesn't have that many guests.
desc = feast_main_stable_breakin.0003.breakin_with_noone
}
triggered_desc = {
# Some more fun if there are enough feast participants to sustain it.
trigger = {
exists = scope:breakin_bystander
}
desc = feast_main_stable_breakin.0003.bystander_riding
}
first_valid = {
# If the deviant is discovered doing deviant things.
triggered_desc = {
trigger = {
scope:activity = {
has_variable = deviant_discovered
}
}
desc = feast_main_stable_breakin.0003.deviant_discovered
}
# A signoff in case there is no deviant discovery.
#desc = feast_main_stable_breakin.0003.what_a_silly_bunch
}
}
theme = feast_activity
left_portrait = {
character = scope:breakin_stager
animation = jockey_victory
camera = camera_event_horse_left
}
right_portrait = {
character = scope:breakin_helper
animation = shame
}
lower_right_portrait = scope:breakin_deviant
immediate = {
play_music_cue = mx_cue_meadandwine
}
option = {
name = feast_main_stable_breakin.0003.a
add_prestige = minor_prestige_loss
add_character_modifier = {
modifier = feast_livestock_at_feast_modifier
years = 10
}
}
after = {
hidden_effect = {
# Activity End Event setup
trigger_event = {
id = feast_main_stable_breakin.9000
days = 10
}
scope:activity = {
add_activity_log_entry = {
key = feast_stable_breakin_log
tags = { good }
score = 25
character = root
target = scope:breakin_stager
}
}
}
}
}
####
# Stager event
####
feast_main_stable_breakin.0004 = {
title = feast_main_stable_breakin.0004.t
desc = {
# Start the event by describing who planted the idea.
first_valid = {
# The "regular" helper
triggered_desc = {
trigger = {
exists = scope:breakin_helper
}
desc = feast_main_stable_breakin.0004.breakin_with_helper
}
# The deviant, though you may not know.
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant != scope:breakin_stager
}
desc = feast_main_stable_breakin.0004.breakin_with_deviant
}
# You've come up with the idea all on your own. Sorry, no excuses!
desc = feast_main_stable_breakin.0004.breakin_with_noone
}
# If someone goes crazy
triggered_desc = {
trigger = {
exists = scope:breakin_bystander
}
desc = feast_main_stable_breakin.0004.bystander_riding
}
# Signoff based on whether the deviant makes poor choices.
first_valid = {
# If a deviant is discovered, the stager should also get to know about it.
triggered_desc = {
trigger = {
scope:activity = { has_variable = deviant_discovered }
}
desc = feast_main_stable_breakin.0004.deviant_discovered
}
# Regular signoff.
desc = feast_main_stable_breakin.0004.signoff
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:breakin_helper
animation = shame
}
lower_center_portrait = scope:breakin_bystander
lower_right_portrait = scope:breakin_deviant
option = {
name = feast_main_stable_breakin.0004.a
add_prestige = minor_prestige_loss
increase_wounds_effect = { REASON = horse_riding_accident }
}
}
###
# Deviant event
###
feast_main_stable_breakin.0005 = {
title = feast_main_stable_breakin.0005.t
desc = {
# Deviant shares a good idea with the stager.
desc = feast_main_stable_breakin.0005.breakin
# Things go a little crazy.
triggered_desc = {
trigger = {
exists = scope:breakin_bystander
scope:activity = { has_variable = deviant_discovered }
}
desc = feast_main_stable_breakin.0005.bystander_riding
}
first_valid = {
# Uh-oh.
triggered_desc = {
trigger = {
scope:activity = { NOT = { has_variable = deviant_discovered } }
}
desc = feast_main_stable_breakin.0005.deviant_discovered
}
# Nothing happened, or...?
desc = feast_main_stable_breakin.0005.got_away_with_it
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:breakin_stager
animation = jockey_victory
camera = camera_event_horse_right
}
lower_center_portrait = scope:breakin_helper
lower_right_portrait = scope:breakin_bystander
option = {
name = feast_main_stable_breakin.0005.a
add_prestige = major_prestige_loss
if = {
limit = {
any_secret = {
type = secret_deviant
}
scope:activity = { has_variable = deviant_discovered }
}
random_secret = {
type = secret_deviant
expose_secret = scope:activity.activity_host
}
}
}
}
###
# Helper event
###
feast_main_stable_breakin.0006 = {
title = feast_main_stable_breakin.0006.t
type = activity_event
desc = {
# Helping the stager break in, then having fun.
desc = feast_main_stable_breakin.0006.breakin_with_helper
# Other people might be having fun, too!
triggered_desc = {
trigger = {
exists = scope:breakin_bystander
scope:activity = { NOT = { has_variable = deviant_discovered } }
}
desc = feast_main_stable_breakin.0006.bystander_riding
}
first_valid = {
# Some people might be having a little too much fun.
triggered_desc = {
trigger = {
scope:activity = { has_variable = deviant_discovered }
}
desc = feast_main_stable_breakin.0006.deviant_discovered
}
# Everything happens to be at the right level of fun.
desc = feast_main_stable_breakin.0006.all_in_good_fun
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:breakin_stager
animation = jockey_victory
camera = camera_event_horse_right
}
lower_center_portrait = scope:breakin_bystander
lower_right_portrait = scope:breakin_deviant
option = {
name = feast_main_stable_breakin.0006.a
scope:breakin_stager = {
add_opinion = {
target = root
modifier = feast_helped_during_breakin
}
}
if = {
limit = { exists = scope:breakin_bystander }
scope:breakin_bystander = {
add_opinion = {
target = root
modifier = feast_helped_during_breakin
}
}
}
if = {
limit = {
exists = scope:breakin_deviant
}
scope:breakin_deviant = {
add_opinion = {
target = root
modifier = feast_helped_during_breakin
}
}
}
}
}
###
# Bystander event
###
feast_main_stable_breakin.0007 = {
title = feast_main_stable_breakin.0007.t
type = activity_event
desc = {
# The stager is mainly responsible themselves.
desc = feast_main_stable_breakin.0007.breakin
# Root is having so much fun!
desc = feast_main_stable_breakin.0007.bystander_riding
first_valid = {
# Uuuuh, deviant doing their thing is highly unfortunate.
triggered_desc = {
trigger = {
scope:activity = { has_variable = deviant_discovered }
}
desc = feast_main_stable_breakin.0007.deviant_discovered
}
# What a great time we had.
desc = feast_main_stable_breakin.0007.what_a_silly_bunch
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:breakin_stager
animation = jockey_victory
camera = camera_event_horse_right
}
lower_center_portrait = scope:breakin_helper
lower_right_portrait = scope:breakin_deviant
option = {
name = feast_main_stable_breakin.0007.a
add_prestige = minor_prestige_loss
scope:breakin_stager = {
add_opinion = {
target = root
modifier = feast_helped_during_breakin
}
}
if = {
limit = {
exists = scope:breakin_deviant
}
scope:breakin_deviant = {
add_opinion = {
target = root
modifier = feast_helped_during_breakin
}
}
}
}
}
##################
# END EVENT SETUP
##################
feast_main_stable_breakin.9000 = {
type = activity_event
hidden = yes
trigger = {
exists = scope:activity
}
immediate = {
scope:activity = {
# Set up scopes
activity_host = {
save_scope_as = host_saying_goodbye
if = {
limit = { exists = primary_partner }
random_consort = {
limit = {
this = scope:activity.activity_host.primary_partner
is_available_ai = yes
}
alternative_limit = {
is_available_ai = yes
}
save_scope_as = spouse
}
}
}
# Fire the end event for every participant except specials
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
this = scope:breakin_stager
AND = {
exists = scope:breakin_helper
this = scope:breakin_helper
}
AND = {
exists = scope:breakin_bystander
this = scope:breakin_bystander
}
AND = {
exists = scope:breakin_deviant
this = scope:breakin_deviant
}
}
}
trigger_event = feast_main_stable_breakin.9001
}
# Fire special guest end events
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
OR = {
this = scope:breakin_stager
AND = {
exists = scope:breakin_helper
this = scope:breakin_helper
}
AND = {
exists = scope:breakin_bystander
this = scope:breakin_bystander
}
AND = {
exists = scope:breakin_deviant
this = scope:breakin_deviant
}
}
}
trigger_event = feast_main_stable_breakin.9003
}
if = {
limit = {
exists = scope:breakin_deviant
}
scope:breakin_deviant = {
trigger_event = feast_main_stable_breakin.9004
if = {
limit = { exists = scope:activity.var:deviant_discovered }
set_variable = {
name = was_i_discovered
value = scope:activity.var:deviant_discovered
}
}
}
}
activity_host = { trigger_event = feast_main_stable_breakin.9002 }
}
}
}
###################
# Guest End event
###################
feast_main_stable_breakin.9001 = {
type = activity_event
title = feast_main_stable_breakin.9001.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant = {
has_variable = was_i_discovered
}
}
desc = feast_main_stable_breakin.9001.deviant_caught
}
desc = feast_main_stable_breakin.9001.in_good_fun
}
}
theme = feast_activity
left_portrait = {
character = scope:host_saying_goodbye
animation = happiness
}
center_portrait = {
character = scope:spouse
animation = personality_bold
}
right_portrait = {
character = scope:breakin_stager
animation = jockey_idle
camera = camera_event_horse_right
}
lower_center_portrait = scope:breakin_deviant
lower_right_portrait = scope:breakin_bystander
option = {
name = feast_main_stable_breakin.9001.a
stress_impact = {
base = medium_stress_impact_loss
}
}
}
######################
# Host End event
######################
feast_main_stable_breakin.9002 = {
type = activity_event
title = feast_main_stable_breakin.9001.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant = { has_variable = was_i_discovered }
}
desc = feast_main_stable_breakin.9002.deviant_caught
}
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant = {
NOT = { has_variable = was_i_discovered }
}
}
desc = feast_main_stable_breakin.9002.in_good_fun_or_what
}
desc = feast_main_stable_breakin.9002.in_good_fun
}
}
theme = feast_activity
right_portrait = {
character = scope:breakin_stager
animation = wedding_drunk
}
center_portrait = {
character = scope:breakin_bystander
animation = personality_bold
}
left_portrait = {
character = root
animation = happiness
}
lower_center_portrait = scope:breakin_deviant
option = {
name = feast_main_stable_breakin.9002.a
stress_impact = {
base = medium_stress_impact_loss
}
}
}
########################
# Stager, helper and bystander end event
########################
feast_main_stable_breakin.9003 = {
type = activity_event
title = feast_main_stable_breakin.9001.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant = {
has_variable = was_i_discovered
}
}
desc = feast_main_stable_breakin.9003.deviant_caught
}
desc = feast_main_stable_breakin.9003.in_good_fun
}
}
theme = feast_activity
left_portrait = {
character = scope:host_saying_goodbye
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
option = {
name = feast_main_stable_breakin.9003.a
stress_impact = {
base = medium_stress_impact_loss
}
}
}
#####################
# Deviant end event
#####################
feast_main_stable_breakin.9004 = {
type = activity_event
title = feast_main_stable_breakin.9001.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:breakin_deviant
scope:breakin_deviant = {
has_variable = was_i_discovered
}
}
desc = feast_main_stable_breakin.9004.deviant_caught
}
desc = feast_main_stable_breakin.9004.in_good_fun
}
}
theme = feast_activity
left_portrait = {
character = scope:host_saying_goodbye
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
option = {
name = feast_main_stable_breakin.9004.a
if = {
limit = { NOT = { exists = var:was_i_discovered } }
feast_end_guest_effect = yes
}
else = {
stress_impact = {
deviant = medium_stress_impact_gain
}
}
}
}

View file

@ -0,0 +1,879 @@
# FEAST ACTIVITY KEY EVENTS
# Most custom variables checked here will have been set by the "welcoming" events in feast_activity_standard_events
# Each unique key event gets a range of 50 IDs. This should more than suffice in all cases.
namespace = feast_main_stew_flood
############################
# THE STEW FLOOD
# by Petter Vilberg
############################
# 0001 - 0010: Standard setup and descriptive events.
# 0031 - 0040: Extraneous events
# 0041 - 0050: Standard end events.
# A giant cauldron of stew tips over in the middle of the meal
# Half the hall gets covered in a sea of stew.
####
# Weight and Setup Event
####
feast_main_stew_flood.0001 = {
type = activity_event
hidden = yes
trigger = {
trigger_if = {
limit = { scope:activity.activity_host = { has_variable = last_feast_was } }
NOT = { scope:activity.activity_host.var:last_feast_was = flag:stew_flood }
}
NOT = {
scope:activity = {
has_activity_option = {
category = feast_option_food
option = feast_food_good
}
}
}
scope:activity = {
any_attending_character = {
feast_default_participant_including_player_trigger = yes
this != scope:activity.activity_host
drinks_alcohol_trigger = yes
save_temporary_scope_as = stew_sea_blamed_temp
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
has_trait = gluttonous
NOR = {
this = scope:activity.activity_host
this = scope:stew_sea_blamed_temp
}
save_temporary_scope_as = stew_sea_glutton_temp
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
has_trait = temperate
NOR = {
this = scope:activity.activity_host
this = scope:stew_sea_blamed_temp
this = scope:stew_sea_glutton_temp
}
save_temporary_scope_as = stew_sea_horrified_character_temp
}
any_attending_character = {
feast_default_participant_including_player_trigger = yes
this != scope:stew_sea_blamed_temp
this != scope:stew_sea_glutton_temp
this != scope:stew_sea_horrified_character_temp
this != scope:activity.activity_host
}
}
}
weight_multiplier = {
base = 1
}
immediate = {
scope:activity = {
# Find someone who can take the blame
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
this != scope:activity.activity_host
drinks_alcohol_trigger = yes
}
save_scope_as = stew_sea_blamed
}
# Find someone who can cause themselves shame by eating off the floor.
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
has_trait = gluttonous
NOR = {
this = scope:activity.activity_host
this = scope:stew_sea_blamed
}
}
random_list = { #Gluttons should not eat from the floor at _every_ feast where we spill food
25 = { save_scope_as = stew_sea_glutton }
75 = { }
}
}
# Find someone who can be horrified by the waste
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
has_trait = temperate
NOR = {
this = scope:activity.activity_host
this = scope:stew_sea_blamed
}
}
save_scope_as = stew_sea_horrified_character
}
# Find someone who gets covered in stew
random_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
# Not any of the other targets
this != scope:stew_sea_blamed
trigger_if = {
limit = { exists = scope:stew_sea_glutton }
this != scope:stew_sea_glutton
}
trigger_else = { always = yes }
trigger_if = {
limit = { exists = scope:stew_sea_horrified_character }
this != scope:stew_sea_horrified_character
}
trigger_else = { always = yes }
this != scope:activity.activity_host
OR = { # Prefer someone arrogant, beautiful or angry
has_trait = arrogant
has_trait = beauty_good
has_trait = wrathful
trigger_if = {
limit = {
exists = scope:activity.special_guest:honorary_guest_regular
}
this = scope:activity.special_guest:honorary_guest_regular
}
}
}
alternative_limit = {
feast_default_participant_including_player_trigger = yes
# Not any of the other targets
this != scope:stew_sea_blamed
trigger_if = {
limit = { exists = scope:stew_sea_glutton }
this != scope:stew_sea_glutton
}
trigger_if = {
limit = { exists = scope:stew_sea_horrified_character }
this != scope:stew_sea_horrified_character
}
this != scope:activity.activity_host
OR = { # Take someone who might have an outsized reaction
has_trait = stubborn
has_trait = callous
has_trait = sadistic
has_trait = paranoid
has_trait = lunatic
}
}
alternative_limit = { # Fallback
# Not any of the other targets
feast_default_participant_including_player_trigger = yes
this != scope:stew_sea_blamed
trigger_if = {
limit = { exists = scope:stew_sea_glutton }
this != scope:stew_sea_glutton
}
trigger_if = {
limit = { exists = scope:stew_sea_horrified_character }
this != scope:stew_sea_horrified_character
}
this != scope:activity.activity_host
}
save_scope_as = stew_sea_gets_covered
}
activity_host = {
set_variable = {
name = last_feast_was
value = flag:stew_flood
}
if = {
limit = {
NOR = {
AND = {
exists = scope:stew_sea_horrified_character
this = scope:stew_sea_horrified_character
}
AND = {
exists = scope:stew_sea_glutton
this = scope:stew_sea_glutton
}
AND = {
exists = scope:stew_sea_gets_covered
this = scope:stew_sea_gets_covered
}
}
}
trigger_event = feast_main_stew_flood.0003
}
}
every_attending_character = {
# Every participant that does not get a special event.
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
AND = {
exists = scope:stew_sea_glutton
this = scope:stew_sea_glutton
}
AND = {
exists = scope:stew_sea_horrified_character
this = scope:stew_sea_horrified_character
}
AND = {
exists = scope:stew_sea_gets_covered
this = scope:stew_sea_gets_covered
}
this = scope:activity.activity_host
}
}
# Standard key event
trigger_event = feast_main_stew_flood.0002
}
if = {
limit = { exists = scope:stew_sea_gets_covered }
scope:stew_sea_gets_covered = {
trigger_event = feast_main_stew_flood.0004
}
}
if = {
limit = { exists = scope:stew_sea_glutton }
scope:stew_sea_glutton = {
trigger_event = feast_main_stew_flood.0005
}
}
if = {
limit = { exists = scope:stew_sea_horrified_character }
scope:stew_sea_horrified_character = {
trigger_event = feast_main_stew_flood.0006
}
}
}
}
}
####
# Standard Descriptive Event
####
feast_main_stew_flood.0002 = {
title = feast_main_stew_flood.0002.t
type = activity_event
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:stew_sea_blamed
root = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0002.stew_introduction_blamed
}
# Introduction, which also places blame.
triggered_desc = {
# If there is a character to blame, they'll be named and shamed
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0002.stew_introduction_blame
}
# Fallback using blaming a generic servant if there aren't enough characters
desc = feast_main_stew_flood.0002.stew_introduction
}
triggered_desc = {
# Someone may get covered by meat stew, which is terrible for them.
trigger = {
exists = scope:stew_sea_gets_covered
}
desc = feast_main_stew_flood.0002.someone_got_covered
}
# A general description of the state of things after the accident:
desc = feast_main_stew_flood.0002.splash_desc_standard
first_valid = {
# A character may bring shame upon themselves by eating off the floor.
triggered_desc = {
# If there is a horrified witness to the action.
trigger = {
exists = scope:stew_sea_glutton
exists = scope:stew_sea_horrified_character
}
desc = feast_main_stew_flood.0002.every_target
}
triggered_desc = {
# If there is someone eating off the floor, but no named witness.
trigger = {
exists = scope:stew_sea_glutton
}
desc = feast_main_stew_flood.0002.only_glutton
}
triggered_desc = {
# If there is a horrified witness, but nobody eating off the floor.
trigger = {
exists = scope:stew_sea_horrified_character
}
desc = feast_main_stew_flood.0002.only_horror
}
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:stew_sea_blamed
animation = shame
}
lower_left_portrait = scope:stew_sea_gets_covered
lower_center_portrait = scope:stew_sea_glutton
lower_right_portrait = scope:stew_sea_horrified_character
option = {
name = feast_main_stew_flood.0002.a
stress_impact = {
base = minor_stress_impact_gain
shy = minor_stress_impact_gain
}
}
}
###
# Descrptive Event for Host
###
feast_main_stew_flood.0003 = {
title = feast_main_stew_flood.0003.t
type = activity_event
desc = {
first_valid = {
# Introduction, which also places blame.
triggered_desc = {
# If there is a character to blame, they'll be named and shamed
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0003.stew_introduction_blame
}
# Fallback using blaming a generic servant if there aren't enough characters
desc = feast_main_stew_flood.0003.stew_introduction
}
triggered_desc = {
# Someone may get covered by meat stew, which is terrible for them.
trigger = {
exists = scope:stew_sea_gets_covered
}
desc = feast_main_stew_flood.0003.someone_got_covered
}
# A general description of the state of things after the accident:
desc = feast_main_stew_flood.0003.splash_desc_standard
first_valid = {
# A character may bring shame upon themselves by eating off the floor.
triggered_desc = {
# If there is a horrified witness to the action.
trigger = {
exists = scope:stew_sea_glutton
exists = scope:stew_sea_horrified_character
}
desc = feast_main_stew_flood.0003.every_target
}
triggered_desc = {
# If there is someone eating off the floor, but no named witness.
trigger = {
exists = scope:stew_sea_glutton
}
desc = feast_main_stew_flood.0003.only_glutton
}
triggered_desc = {
# If there is a horrified witness, but nobody eating off the floor.
trigger = {
exists = scope:stew_sea_horrified_character
}
desc = feast_main_stew_flood.0003.only_horror
}
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:stew_sea_blamed
animation = shame
}
lower_left_portrait = scope:stew_sea_gets_covered
lower_center_portrait = scope:stew_sea_glutton
lower_right_portrait = scope:stew_sea_horrified_character
immediate = {
play_music_cue = mx_cue_meadandwine
}
option = {
name = feast_main_stew_flood.0003.a
add_prestige = medium_prestige_loss
add_character_modifier = {
modifier = feast_spilled_stew_modifier
years = 5
}
}
after = {
hidden_effect = {
trigger_event = {
id = feast_main_stew_flood.0040
days = 10
}
scope:activity = {
add_activity_log_entry = {
key = feast_stew_flood_log
tags = { good }
score = 25
character = root
target = scope:stew_sea_gets_covered
scope:stew_sea_gets_covered = {
add_prestige = minor_prestige_loss
}
}
}
}
}
}
###
# Descriptive Event for Getting Covered
###
feast_main_stew_flood.0004 = {
title = feast_main_stew_flood.0004.t
type = activity_event
desc = {
# First part of event desc
first_valid = {
triggered_desc = {
# If there is a named character to blame.
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0004.stew_introduction_blame
}
# No named character to blame:
desc = feast_main_stew_flood.0004.stew_introduction
}
# Second part of the event desc
desc = feast_main_stew_flood.0004.getting_covered
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:stew_sea_blamed
animation = shame
}
lower_center_portrait = scope:stew_sea_glutton
lower_right_portrait = scope:stew_sea_horrified_character
option = {
name = feast_main_stew_flood.0004.a
if = {
limit = { exists = scope:stew_sea_blamed }
add_opinion = {
modifier = feast_got_stew_all_over_me
target = scope:stew_sea_blamed
}
}
else = { #If no one else is to blame I blame my host
scope:stew_sea_gets_covered = {
add_opinion = {
modifier = feast_got_stew_all_over_me
target = root
}
}
}
}
}
###
# Descriptive Event for Glutton
###
feast_main_stew_flood.0005 = {
title = feast_main_stew_flood.0005.t
type = activity_event
desc = {
first_valid = {
# First part of gluttons desc
triggered_desc = {
# If there's a named character to blame
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0005.stew_introduction_blame
}
# Fallback for not having a named blame character
desc = feast_main_stew_flood.0005.stew_introduction
}
# Second part of the gluttons desc
desc = feast_main_stew_flood.0005.cannot_resist
triggered_desc = {
# If the horrified character is watching them, that detail is appended.
trigger = {
exists = scope:stew_sea_horrified_character
}
desc = feast_main_stew_flood.0005.being_watched
}
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:stew_sea_blamed
animation = shame
}
lower_left_portrait = scope:stew_sea_gets_covered
lower_right_portrait = scope:stew_sea_horrified_character
option = {
name = feast_main_stew_flood.0005.a
scope:activity = {
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOT = {
has_trait = gluttonous
}
}
add_opinion = {
modifier = feast_disgracefully_ate_from_floor
target = root
}
}
}
}
}
###
# Descriptive Event for Horrified
###
feast_main_stew_flood.0006 = {
title = feast_main_stew_flood.0006.t
type = activity_event
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0006.stew_introduction
}
desc = feast_main_stew_flood.0006.stew_introduction_blame
}
triggered_desc = {
trigger = {
exists = scope:stew_sea_glutton
}
}
desc = feast_main_stew_flood.0006.shocking_experience
}
theme = feast_activity
left_portrait = {
character = scope:activity.activity_host
animation = shock
}
right_portrait = {
character = scope:stew_sea_blamed
animation = shame
}
lower_left_portrait = scope:stew_sea_gets_covered
lower_center_portrait = scope:stew_sea_glutton
option = {
name = feast_main_stew_flood.0006.a
stress_impact = {
base = medium_stress_gain
}
}
}
##################
# END EVENT SETUP
##################
feast_main_stew_flood.0040 = {
type = activity_event
hidden = yes
trigger = {
exists = scope:activity
}
immediate = {
scope:activity = {
activity_host = {
save_scope_as = host
if = {
limit = { exists = primary_partner }
random_consort = {
limit = {
feast_default_participant_including_player_trigger = yes
this = scope:activity.activity_host.primary_partner
is_available_ai = yes
}
alternative_limit = {
feast_default_participant_including_player_trigger = yes
is_available_ai = yes
}
save_scope_as = spouse
}
}
}
# Fire the end event for every participant except specials
every_attending_character = {
limit = {
feast_default_participant_including_player_trigger = yes
NOR = {
this = scope:activity.activity_host
AND = {
exists = scope:stew_sea_gets_covered
this = scope:stew_sea_gets_covered
}
AND = {
exists = scope:stew_sea_blamed
this = scope:stew_sea_blamed
}
}
}
trigger_event = feast_main_stew_flood.0041
}
# Fire special guest end events
if = {
limit = {
exists = scope:stew_sea_gets_covered
}
scope:stew_sea_gets_covered = {
trigger_event = feast_main_stew_flood.0043
}
}
if = {
limit = {
exists = scope:stew_sea_blamed
}
scope:stew_sea_blamed = {
trigger_event = feast_main_stew_flood.0044
}
}
# Fire the end event for the host
activity_host = {
trigger_event = feast_main_stew_flood.0042
}
}
}
}
###################
# Guest End event
###################
feast_main_stew_flood.0041 = {
type = activity_event
title = feast_main_stew_flood.0041.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0041.blame_placed
}
desc = feast_main_stew_flood.0041.no_blame_placed
}
}
theme = feast_activity
left_portrait = {
character = scope:host
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
option = {
name = feast_main_stew_flood.0041.a
stress_impact = {
base = minor_stress_impact_loss
}
show_as_tooltip = {
if = {
limit = {
exists = scope:stew_sea_blamed
}
scope:stew_sea_gets_covered = {
add_opinion = {
modifier = feast_got_stew_all_over_me
target = scope:stew_sea_blamed
}
}
}
else = {
scope:stew_sea_gets_covered = {
add_opinion = {
modifier = feast_got_stew_all_over_me
target = scope:host
}
}
}
}
}
}
######################
# Host End event
######################
feast_main_stew_flood.0042 = {
type = activity_event
title = feast_main_stew_flood.0042.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0042.blame_placed
}
desc = feast_main_stew_flood.0042.no_blame_placed
}
}
theme = feast_activity
left_portrait = {
character = scope:host
animation = happiness
}
right_portrait = {
character = scope:stew_sea_blamed
triggered_animation = {
trigger = {
exists = scope:stew_sea_blamed
}
animation = shame
}
triggered_animation = {
trigger = {
NOT = { exists = scope:stew_sea_blamed }
}
animation = shock
}
}
option = {
name = feast_main_stew_flood.0042.a
show_as_tooltip = {
if = {
limit = {
exists = scope:stew_sea_blamed
}
scope:stew_sea_gets_covered = {
add_opinion = {
modifier = feast_got_stew_all_over_me
target = scope:stew_sea_blamed
}
}
}
else = {
scope:stew_sea_gets_covered = {
add_opinion = {
modifier = feast_got_stew_all_over_me
target = root
}
}
}
}
stress_impact = {
base = minor_stress_impact_loss
}
}
}
########################
# Got Covered end event
########################
feast_main_stew_flood.0043 = {
type = activity_event
title = feast_main_stew_flood.0042.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:stew_sea_blamed
}
desc = feast_main_stew_flood.0043.blame_placed
}
desc = feast_main_stew_flood.0043.no_blame_placed
}
}
theme = feast_activity
left_portrait = {
character = scope:host
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
immediate = {
increase_wounds_no_death_effect = { REASON = burned }
}
option = {
name = feast_main_stew_flood.0043.a
stress_impact = {
base = minor_stress_impact_gain
}
}
}
feast_main_stew_flood.0044 = {
type = activity_event
title = feast_main_stew_flood.0042.t
desc = feast_main_stew_flood.0044.desc
theme = feast_activity
left_portrait = {
character = scope:host
animation = happiness
}
right_portrait = {
character = scope:spouse
animation = personality_bold
}
option = {
name = feast_main_stew_flood.0044.a
stress_impact = {
base = minor_stress_impact_gain
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,686 @@
namespace = hold_court
# 7000-7999 - James Beaumont
# 7000 - Fair Share
# 7010 - Two Faiths, One Family
# 7020 - The Shield of Faith
# Fair Share
# Low-dev counties want some money
# 7000
scripted_trigger hc_7000_valid_county = {
hc_7000_low_dev = yes
OR = {
AND = {
exists = holder
holder != root
}
any_direct_de_facto_vassal_title = {
exists = holder
holder != root
}
}
}
scripted_trigger hc_7000_low_dev = {
development_level <= {
value = root.capital_county.development_level
subtract = 10
}
}
hold_court.7000 = {
type = court_event
title = hold_court.7000.t
desc = hold_court.7000.desc
theme = realm
cooldown = { years = 15 }
court_scene = {
button_position_character = scope:local_leader
court_event_force_open = yes
show_timeout_info = no
should_pause_time = yes
roles = {
scope:local_leader = {
group = petitioners_group
animation = beg
}
}
}
widget = {
gui = "event_window_widget_event_chain_progress"
container = "custom_widgets_container"
controller = event_chain_progress
}
trigger = {
any_sub_realm_county = {
hc_7000_valid_county = yes
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_administrative }
}
immediate = {
random_sub_realm_county = {
limit = {
hc_7000_valid_county = yes
}
save_scope_as = low_dev_county
if = {
limit = {
exists = holder
holder != root
}
holder = { save_scope_as = local_leader }
}
else = {
random_direct_de_facto_vassal_title = {
limit = {
exists = holder
holder != root
}
holder = { save_scope_as = local_leader }
}
}
}
}
# Divert resources to the low counties
option = {
name = hold_court.7000.a
every_sub_realm_county = {
limit = {
hc_7000_low_dev = yes
}
custom = every_county_10_dev_below_capital
add_county_modifier = {
modifier = hc_7000_dev_boost
years = 15
}
}
capital_county = {
add_county_modifier = {
modifier = hc_7000_dev_reduction
years = 15
}
}
remove_treasury_or_gold = medium_treasury_or_gold_value
stress_impact = {
callous = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = -1
ai_compassion = 1
}
modifier = {
factor = 0
short_term_treasury_or_gold <= medium_treasury_or_gold_value
}
}
}
# Perhaps they should move to the capital ¯\_(ツ)_/¯
option = {
name = hold_court.7000.b
every_sub_realm_county = {
limit = {
hc_7000_low_dev = yes
}
custom = every_county_10_dev_below_capital
add_county_modifier = {
modifier = hc_7000_dev_reduction
years = 15
}
}
capital_county = {
add_county_modifier = {
modifier = hc_7000_dev_boost
years = 15
}
}
remove_treasury_or_gold = minor_treasury_or_gold_value
stress_impact = {
compassionate = minor_stress_impact_gain
humble = minor_stress_impact_gain
just = minor_stress_impact_gain
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = -1
ai_compassion = -1
}
modifier = {
factor = 0
short_term_treasury_or_gold <= minor_treasury_or_gold_value
}
}
}
# Man don't care
option = {
name = hold_court.7000.c
stress_impact = {
generous = minor_stress_impact_gain
just = miniscule_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 1
ai_compassion = -1
}
}
}
after = {
scope:local_leader = { clear_court_event_participation = yes }
# Finish up the chain if relevant.
hold_court_queue_post_event_effect = yes
}
}
# Two Faiths, One Family
# Diff-daith neighbour wants to be besties
# 7010
scripted_trigger hc_7010_valid_neighbour = {
NOT = {
has_trait = zealous
is_allied_to = root
has_relation_rival = root
has_trait = holy_warrior
}
ai_compassion > ai_zeal
faith = {
faith_hostility_level = {
target = root.faith
value >= faith_hostile_level
}
}
any_child ?= {
save_temporary_scope_as = foreign_princess_temp
hc_7010_valid_prince = yes
is_courtier_of = prev
root = {
any_child = {
hc_7010_valid_prince = yes
is_courtier_of = root
allowed_to_marry_character_gender_trigger = { CHARACTER = scope:foreign_princess_temp }
}
}
}
}
scripted_trigger hc_7010_valid_prince = {
is_married = no
is_concubine = no
is_betrothed = no
is_adult = yes
fertility >= medium_fertility
can_marry_trigger = yes
}
hold_court.7010 = {
type = court_event
title = hold_court.7010.t
desc = hold_court.7010.desc
theme = realm
cooldown = { years = 15 }
court_scene = {
button_position_character = scope:friendly_neighbour
court_event_force_open = yes
show_timeout_info = no
should_pause_time = yes
roles = {
scope:friendly_neighbour = {
group = petitioners_group
animation = personality_compassionate
}
}
}
lower_left_portrait = scope:potential_prince
lower_right_portrait = scope:foreign_princess
widget = {
gui = "event_window_widget_event_chain_progress"
container = "custom_widgets_container"
controller = event_chain_progress
}
trigger = {
top_liege = this
any_neighboring_and_across_water_top_liege_realm_owner = {
faith = {
faith_hostility_level = {
target = root.faith
value >= faith_hostile_level
}
}
count >= 2
}
any_neighboring_and_across_water_top_liege_realm_owner = {
hc_7010_valid_neighbour = yes
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_administrative }
}
immediate = {
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = {
hc_7010_valid_neighbour = yes
}
save_scope_as = friendly_neighbour
random_child = {
limit = {
save_temporary_scope_as = foreign_princess_temp
hc_7010_valid_prince = yes
is_courtier_of = prev
root = {
any_child = {
hc_7010_valid_prince = yes
is_courtier_of = root
allowed_to_marry_character_gender_trigger = { CHARACTER = scope:foreign_princess_temp }
}
}
}
save_scope_as = foreign_princess
root = {
random_child = {
limit = {
hc_7010_valid_prince = yes
is_courtier_of = root
allowed_to_marry_character_gender_trigger = { CHARACTER = scope:foreign_princess }
}
save_scope_as = potential_prince
}
}
}
}
}
# The two shall be wed at once!
option = {
name = {
text = {
first_valid = {
triggered_desc = {
trigger = {
OR = {
religion = religion:judaism_religion
scope:neighboring_ruler = { religion = religion:judaism_religion }
}
}
desc = hold_court.7010.a.jewish # To life, to life, l'chaim. L'chaim, l'chaim, to life. ♪♪
}
desc = hold_court.7010.a
}
}
}
set_relation_friend = {
target = scope:friendly_neighbour
reason = friend_beyond_faith
}
marry_spouse_1_dominant = {
SPOUSE_1 = scope:potential_prince
SPOUSE_2 = scope:foreign_princess
}
add_truce_both_ways = {
character = scope:friendly_neighbour
years = 10
name = truce_religious_tolerance
}
add_character_modifier = {
modifier = hc_7010_tolerance
years = 10
}
stress_impact = {
callous = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
brave = minor_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 1
ai_vengefulness = -1
ai_zeal = -10
}
}
}
# See how this lunatic speaks of heresy! They must be destroyed!
option = {
name = hold_court.7010.b
if = {
limit = {
NOT = {
has_trait = holy_warrior
}
}
add_trait = holy_warrior
}
else = {
add_character_modifier = {
modifier = hc_7010_holy_war
years = 10
}
}
progress_towards_rival_effect = {
REASON = rival_planning_holy_war
CHARACTER = scope:friendly_neighbour
OPINION = default_rival_opinion
}
stress_impact = {
compassionate = medium_stress_impact_gain
cynical = minor_stress_impact_gain
just = minor_stress_impact_gain
arbitrary = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -1
ai_vengefulness = 1
ai_zeal = 2.5
}
}
}
# I don't wanna do this
option = {
name = hold_court.7010.c
reverse_add_opinion = {
modifier = disappointed_opinion
opinion = -10
target = scope:friendly_neighbour
}
stress_impact = {
compassionate = minor_stress_impact_gain
diligent = minor_stress_impact_gain
just = minor_stress_impact_gain
zealous = minor_stress_impact_gain
}
ai_chance = {
base = 0
}
}
after = {
scope:friendly_neighbour = { clear_court_event_participation = yes }
# Finish up the chain if relevant.
hold_court_queue_post_event_effect = yes
}
}
# The Shield of Faith
# Same-faith ruler offers to sponsor a reformation
# 7020
scripted_trigger hc_7020_valid_same_faith_friend = {
top_liege = this
this != root
NOT = {
has_relation_rival = root # I would never work with you!
has_trait = zealous # I would never change the old ways!
}
any_sub_realm_barony = {
is_holy_site_of = root.faith
holder.faith ?= root.faith
}
}
scripted_trigger hc_7020_valid_threat = {
# You see them as a threat to your religion
NOT = { faith = { has_doctrine_parameter = unreformed } }
religion != root.religion
faith = {
faith_hostility_level = {
target = root.faith
value >= faith_hostile_level
}
}
# They are encroaching on your religion in some way
OR = {
# They control a large amount of your faith's lands
any_sub_realm_county = {
count >= 4
faith = root.faith
# Religiously protected people within their realm should not count towards this
holder.faith != root.faith
}
# They recently attacked you
any_memory = {
memory_type = war_won
memory_participant:loser ?= root
}
# They control one of your holy sites
any_sub_realm_barony = {
is_holy_site_of = root.faith
# The holy site is not held by a vassal of your faith
holder.faith != root.faith
}
}
}
hold_court.7020 = {
type = court_event
title = hold_court.7020.t
desc = {
desc = hold_court.7020.desc.intro
first_valid = {
triggered_desc = {
trigger = {
scope:threatening_ruler = {
any_sub_realm_county = {
count >= 4
faith = root.faith
holder.faith != root.faith
}
}
}
desc = hold_court.7020.desc.mid.oppression
}
triggered_desc = {
trigger = {
scope:threatening_ruler = {
any_memory = {
memory_type = war_won
memory_participant:loser ?= root
}
}
}
desc = hold_court.7020.desc.mid.recent_war
}
triggered_desc = {
trigger = {
scope:threatening_ruler = {
any_sub_realm_barony = {
is_holy_site_of = root.faith
holder.faith != root.faith
}
}
}
desc = hold_court.7020.desc.mid.holy_site
}
}
desc = hold_court.7020.desc.outro
}
theme = realm
cooldown = { years = 15 }
court_scene = {
button_position_character = scope:same_faith_friend
court_event_force_open = yes
show_timeout_info = no
should_pause_time = yes
roles = {
scope:same_faith_friend = {
group = petitioners_group
animation = personality_compassionate
}
}
}
widget = {
gui = "event_window_widget_event_chain_progress"
container = "custom_widgets_container"
controller = event_chain_progress
}
trigger = {
is_ai = no # AI reformation should always follow the rules
piety_level >= medium_piety_level
faith = { has_doctrine_parameter = unreformed }
any_sub_realm_barony = {
is_holy_site_of = root.faith
holder.faith ?= root.faith
}
faith = {
holy_sites_controlled >= 3
any_faith_character = {
hc_7020_valid_same_faith_friend = yes
}
}
any_neighboring_and_across_water_top_liege_realm_owner = {
hc_7020_valid_threat = yes
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_administrative }
}
immediate = {
random_sub_realm_barony = {
limit = {
is_holy_site_of = root.faith
holder.faith ?= root.faith
}
save_scope_as = holy_site
}
faith = {
random_faith_character = {
limit = { hc_7020_valid_same_faith_friend = yes }
save_scope_as = same_faith_friend
}
}
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = { hc_7020_valid_threat = yes }
save_scope_as = threatening_ruler
}
}
# The reformation is neccessary
option = {
name = hold_court.7020.a
remove_treasury_or_gold = major_treasury_or_gold_value
progress_towards_friend_effect = {
REASON = friend_united_by_faith
CHARACTER = scope:same_faith_friend
OPINION = default_friend_opinion
}
custom_tooltip = {
text = ignore_3_site_rule_tt
add_character_flag = ignore_3_holy_site_rule
}
custom_tooltip = {
text = friend_will_convert_tt
scope:same_faith_friend = {
add_character_flag = forced_conversion_on_reform
}
}
stress_impact = {
zealous = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
shy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 1
ai_vengefulness = 1
ai_rationality = 1
ai_zeal = -2
}
modifier = {
factor = 0
short_term_treasury_or_gold < major_treasury_or_gold_value
}
}
}
# Stay strong, brother. We must not sacrifice our ways
option = {
name = hold_court.7020.b
add_piety = medium_piety_gain
add_character_modifier = {
modifier = hc_7020_guardian_of_the_old_ways
years = 15
}
scope:same_faith_friend = {
add_character_modifier = {
modifier = hc_7020_guardian_of_the_old_ways
years = 15
}
}
stress_impact = {
cynical = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = -1
ai_vengefulness = 1
ai_zeal = 2.5
}
}
}
# We must join together in faith
option = {
name = hold_court.7020.c
trigger = {
NOT = { is_allied_to = scope:same_faith_friend }
}
create_alliance = {
target = scope:same_faith_friend
allied_through_owner = root
allied_through_target = scope:same_faith_friend
}
stress_impact = {
shy = minor_stress_impact_gain
callous = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 1
ai_sociability = 1
ai_boldness = -1
ai_vengefulness = 1
ai_zeal = 2.5
}
}
}
after = {
scope:same_faith_friend = { clear_court_event_participation = yes }
# Finish up the chain if relevant.
hold_court_queue_post_event_effect = yes
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,802 @@
namespace = tour_grounds_events
############################
## Tour Mini-Activity: Tour Grounds
############################
## Vassal Events
## 7000-7999
## by Claudia Baldassi
############################
# tour_grounds_events.7000 - Liege: Vassal accidentally tours you past a room/building they didn't want you to see: it has all the nice things
# tour_grounds_events.7001 - Vassal: Try to keep your liege from your secret stash room
#####################################################################################
######################
## Vassal Events
## 7000-7999
## by Claudia Baldassi
######################
# Liege: Vassal accidentally tours you past a room/building they didn't want you to see: it has all the nice things they didn't want you to try and tax whilst you're here (e.g., their best horses)
scripted_trigger tour_grounds_has_artifacts_trigger = {
any_character_artifact = {
is_equipped = no
exists = var:quality
var:quality >= 40
count >= 2
}
}
scripted_trigger tour_grounds_has_food_trigger = {
has_trait = gluttonous
is_vegetarian_trigger = no
}
scripted_trigger tour_grounds_has_wine_trigger = {
OR = {
has_trait = drunkard
has_trait = lifestyle_reveler
}
drinks_alcohol_trigger = yes
}
scripted_trigger tour_grounds_has_falcons_trigger = {
OR = {
AND = {
has_trait = lifestyle_hunter
has_trait_xp = {
trait = lifestyle_hunter
track = falconer
value >= trait_second_level
}
}
has_character_modifier = peregrine_falcon
}
}
scripted_trigger tour_grounds_has_dogs_trigger = {
OR = {
has_trait = lifestyle_hunter
house ?= { has_house_modifier = hold_court_8140_house_modifier }
}
}
scripted_trigger tour_grounds_has_horses_trigger = {
OR = {
AND = {
has_trait = tourney_participant
has_trait_xp = {
trait = tourney_participant
track = horse
value >= trait_second_level
}
}
any_owned_story = {
type = story_cycle_martial_lifestyle_warhorse
}
has_character_modifier = warfare_tamer_of_horses_modifier
has_character_modifier = horse_story_modifier
}
}
scripted_trigger tour_grounds_has_gold_trigger = {
OR = {
has_trait = greedy
gold >= 300
}
}
scripted_effect tour_grounds_tax_everything_effect = {
pay_short_term_gold = {
target = root
gold = medium_gold_value
}
if = {
limit = { vassal_contract_obligation_level_can_be_increased = feudal_government_taxes }
vassal_contract_increase_obligation_level = feudal_government_taxes
}
else = {
every_sub_realm_county = {
add_county_modifier = {
modifier = tour_liege_extra_taxation_county_modifier
years = 10
}
}
}
add_opinion = {
target = root
modifier = annoyed_opinion
opinion = -20
}
}
tour_grounds_events.7000 = {
type = activity_event
title = tour_grounds_events.7000.t
desc = {
desc = tour_grounds_events.7000.desc
first_valid = {
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_artifacts_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_artifacts
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_food_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_pantry
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_wine_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_cellar
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_falcons_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_falcons
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_dogs_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_dogs
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_horses_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_horses
}
triggered_desc = {
trigger = {
scope:stop_host_scope = {
tour_grounds_has_gold_trigger = yes
}
}
desc = tour_grounds_events.7000.desc_gold
}
desc = tour_grounds_events.7000.desc_fallback
}
}
theme = tour_grounds
cooldown = { years = 1 }
left_portrait = {
character = root
animation = shock
}
right_portrait = {
character = scope:stop_host_scope
animation = shame
}
override_background = { reference = corridor_day }
immediate = {
if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_artifacts_trigger = yes
}
}
scope:stop_host_scope = {
random_character_artifact = {
limit = {
is_equipped = no
exists = var:quality
var:quality >= 40
}
save_scope_as = this_artifact
}
}
}
}
# Option A: tax EVERYTHING
option = {
name = tour_grounds_events.7000.a
scope:stop_host_scope = {
send_interface_toast = {
title = tour_grounds_events.7000.a.tt
left_icon = root
tour_grounds_tax_everything_effect = yes
}
}
if = {
limit = {
scope:activity = {
has_activity_option = {
category = special_type
option = tour_type_taxation
}
}
}
increase_tour_success_effect = { POINTS = 1 }
}
stress_impact = {
generous = medium_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 1
}
modifier = {
has_trait = compassionate
add = -50
}
}
}
# Option B: commandeer all
option = {
name = tour_grounds_events.7000.b
trigger = {
OR = {
has_trait = greedy
scope:activity = {
has_activity_option = {
category = special_type
option = tour_type_taxation
}
}
scope:activity = {
has_activity_option = {
category = special_type
option = tour_type_intimidation
}
}
}
}
scope:stop_host_scope = {
send_interface_toast = {
title = tour_grounds_events.7000.b.tt
left_icon = root
if = {
limit = {
exists = scope:this_artifact
}
pay_short_term_gold = {
target = root
gold = major_gold_value
}
scope:this_artifact = {
set_owner = root
}
}
else_if = {
limit = {
OR = {
tour_grounds_has_food_trigger = yes
tour_grounds_has_wine_trigger = yes
tour_grounds_has_falcons_trigger = yes
tour_grounds_has_dogs_trigger = yes
house ?= { has_house_modifier = hold_court_8140_house_modifier }
tour_grounds_has_horses_trigger = yes
}
}
pay_short_term_gold = {
target = root
gold = major_gold_value
}
custom_tooltip = tour_grounds_events.7000.b.tt.2
}
else = {
scope:stop_host_scope = {
pay_short_term_gold = {
target = root
gold = massive_gold_value
}
}
}
}
}
if = {
limit = {
scope:stop_host_scope = {
OR = {
tour_grounds_has_food_trigger = yes
tour_grounds_has_wine_trigger = yes
}
}
}
add_character_modifier = {
modifier = tours_grounds_luxury_dining_modifier
years = 15
}
}
else_if = {
limit = {
scope:stop_host_scope = {
OR = {
tour_grounds_has_falcons_trigger = yes
tour_grounds_has_dogs_trigger = yes
}
}
}
add_character_modifier = {
modifier = tours_grounds_hunting_companions_modifier
years = 15
}
if = {
limit = {
scope:stop_host_scope = {
has_character_modifier = peregrine_falcon
}
}
add_character_modifier = peregrine_falcon
}
else_if = {
limit = {
scope:stop_host_scope = {
house ?= { has_house_modifier = hold_court_8140_house_modifier }
}
}
house = { add_house_modifier = { modifier = hold_court_8140_house_modifier years = 30 } }
}
}
else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_horses_trigger = yes
}
}
add_character_modifier = {
modifier = tours_grounds_excellent_horses_modifier
years = 15
}
}
scope:stop_host_scope = {
add_opinion = {
target = root
modifier = insult_opinion
opinion = -40
}
}
if = {
limit = {
scope:activity = {
has_activity_option = {
category = special_type
option = tour_type_intimidation
}
}
}
increase_tour_success_effect = { POINTS = 1 }
}
else_if = {
limit = {
scope:activity = {
has_activity_option = {
category = special_type
option = tour_type_taxation
}
}
}
increase_tour_success_effect = { POINTS = 2 }
}
stress_impact = {
generous = major_stress_impact_gain
compassionate = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 2
}
modifier = {
has_trait = compassionate
add = -75
}
}
}
# Option C: common interest
option = {
name = tour_grounds_events.7000.c
trigger = {
trigger_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_food_trigger = yes
}
}
tour_grounds_has_food_trigger = yes
}
trigger_else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_wine_trigger = yes
}
}
tour_grounds_has_food_trigger = yes
}
trigger_else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_falcons_trigger = yes
}
}
tour_grounds_has_falcons_trigger = yes
}
trigger_else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_dogs_trigger = yes
}
}
OR = {
tour_grounds_has_dogs_trigger = yes
any_owned_story = { type = story_cycle_pet_dog }
}
}
trigger_else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_horses_trigger = yes
}
}
tour_grounds_has_horses_trigger = yes
}
trigger_else_if = {
limit = {
scope:stop_host_scope = {
tour_grounds_has_gold_trigger = yes
}
}
has_trait = greedy
}
trigger_else = {
always = no
}
}
scope:stop_host_scope = {
send_interface_toast = {
title = tour_grounds_events.7000.c.tt
left_icon = root
custom_tooltip = tour_grounds_events.7000.c.tt.2
add_character_modifier = {
modifier = tours_grounds_sharing_tips_with_friend_modifier
years = 10
}
}
}
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:stop_host_scope }
}
set_relation_friend = { reason = friend_common_interests target = scope:stop_host_scope }
}
add_character_modifier = {
modifier = tours_grounds_sharing_tips_with_friend_modifier
years = 15
}
stress_impact = {
greedy = medium_stress_impact_gain
shy = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = greedy
add = -75
}
modifier = {
has_trait = shy
add = -50
}
modifier = {
has_trait = gregarious
add = 100
}
}
}
# Option D: you saw nothing
option = {
name = tour_grounds_events.7000.d
reverse_add_opinion = {
target = scope:stop_host_scope
modifier = grateful_opinion
opinion = 30
}
scope:stop_host_scope = {
send_interface_toast = {
title = tour_grounds_events.7000.d.tt
left_icon = root
if = {
limit = {
root = {
can_add_hook = {
target = scope:stop_host_scope
type = favor_hook
}
}
}
root = {
add_hook = {
target = scope:stop_host_scope
type = favor_hook
}
}
}
}
}
stress_impact = {
greedy = major_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = greedy
add = -100
}
}
}
}
# Vassal: Try to keep your liege from your secret stash room
tour_grounds_events.7001 = {
type = activity_event
title = tour_grounds_events.7000.t
desc = {
desc = tour_grounds_events.7001.desc
first_valid = {
triggered_desc = {
trigger = {
tour_grounds_has_artifacts_trigger = yes
}
desc = tour_grounds_events.7001.desc_artifacts
}
triggered_desc = {
trigger = {
tour_grounds_has_food_trigger = yes
}
desc = tour_grounds_events.7001.desc_pantry
}
triggered_desc = {
trigger = {
tour_grounds_has_wine_trigger = yes
}
desc = tour_grounds_events.7001.desc_cellar
}
triggered_desc = {
trigger = {
tour_grounds_has_falcons_trigger = yes
}
desc = tour_grounds_events.7001.desc_falcons
}
triggered_desc = {
trigger = {
tour_grounds_has_dogs_trigger = yes
}
desc = tour_grounds_events.7001.desc_dogs
}
triggered_desc = {
trigger = {
tour_grounds_has_horses_trigger = yes
}
desc = tour_grounds_events.7001.desc_horses
}
triggered_desc = {
trigger = {
tour_grounds_has_gold_trigger = yes
}
desc = tour_grounds_events.7001.desc_gold
}
desc = tour_grounds_events.7001.desc_fallback
}
desc = tour_grounds_events.7001.desc_conclusion
}
theme = tour_grounds
left_portrait = {
character = root
animation = shame
}
right_portrait = {
character = scope:visiting_liege
animation = shock
}
override_background = { reference = corridor_day }
trigger = {
NOT = { has_character_flag = was_extorted_by_visiting_liege }
}
weight_multiplier = {
base = 1
modifier = {
OR = {
tour_grounds_has_artifacts_trigger = yes
tour_grounds_has_food_trigger = yes
tour_grounds_has_wine_trigger = yes
}
add = 1
}
modifier = {
OR = {
tour_grounds_has_falcons_trigger = yes
tour_grounds_has_dogs_trigger = yes
tour_grounds_has_horses_trigger = yes
}
add = 2
}
}
immediate = {
add_character_flag = {
flag = was_extorted_by_visiting_liege
days = 30 #Only once per visit
}
}
#Option A: try to distract
option = {
name = tour_grounds_events.7001.a
duel = {
skills = { diplomacy intrigue }
target = scope:visiting_liege
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = tour_grounds_events.7001.a.success
send_interface_toast = {
title = tour_grounds_events.7001.a.success.tt
left_icon = scope:visiting_liege
add_character_modifier = {
modifier = tour_grounds_hidden_assets_modifier
years = 15
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = tour_grounds_events.7001.a.failure
custom_tooltip = tour_grounds_events.7001_followup
scope:visiting_liege = { trigger_event = tour_grounds_events.7000 }
send_interface_toast = {
title = tour_grounds_events.7001.a.failure.tt
left_icon = scope:visiting_liege
}
}
}
ai_chance = {
base = 100
modifier = {
has_trait = deceitful
add = 100
}
}
}
#Option B: Bribe
option = {
name = tour_grounds_events.7001.b
duel = {
skills = { stewardship intrigue }
target = scope:visiting_liege
60 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
modifier = {
scope:visiting_liege = { has_trait = greedy }
add = 20
}
desc = tour_grounds_events.7001.b.success
send_interface_toast = {
title = tour_grounds_events.7001.b.success.tt
left_icon = scope:visiting_liege
add_character_modifier = {
modifier = tour_grounds_hidden_assets_modifier
years = 15
}
pay_short_term_gold = {
target = scope:visiting_liege
gold = major_gold_value
}
}
scope:visiting_liege = {
if = {
limit = {
is_ai = no
}
send_interface_toast = {
title = tour_grounds_events.7001.b.tt
custom_tooltip = tour_grounds_events.7001.b.tt.2
show_as_tooltip = {
root = {
pay_short_term_gold = {
target = scope:visiting_liege
gold = major_gold_value
}
}
}
}
}
else = {
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 30
}
}
}
}
40 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = tour_grounds_events.7001.a.failure
scope:visiting_liege = { trigger_event = tour_grounds_events.7000 }
custom_tooltip = tour_grounds_events.7001_followup
send_interface_toast = {
title = tour_grounds_events.7001.a.failure.tt
left_icon = scope:visiting_liege
}
}
}
ai_chance = {
base = 100
}
}
#Option C: I was JUST about to take you there!
option = {
name = tour_grounds_events.7001.c
scope:visiting_liege = { trigger_event = tour_grounds_events.7000 }
custom_tooltip = tour_grounds_events.7001_followup
if = {
limit = {
scope:visiting_liege = { is_ai = yes }
can_add_hook = {
target = scope:visiting_liege
type = favor_hook
}
}
add_hook = {
target = scope:visiting_liege
type = favor_hook
}
}
ai_chance = {
base = 100
modifier = {
has_trait = honest
add = 100
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,503 @@
namespace = tour_general
############################
## Journal Events
## 5000-5999
## by James Beaumont
############################
# tour_general.5000 - Failing to solve the puzzle
# tour_general.5010 - Solving the journal
# tour_general.5020 - The journal is stolen
#####################################################################################
############################
## Journal Events
## 5000-5999
## by James Beaumont
############################
# Failing to get the journal open
tour_general.5000 = {
type = character_event
title = tour_general.5000.title
desc = tour_general.5000.desc
theme = learning
left_portrait = {
character = root
animation = personality_rational
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
option = { # Drat!
name = tour_general.5000.a
stress_impact = {
base = major_stress_impact_gain
patient = minor_stress_impact_loss
arrogant = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
}
ai_chance = {
base = 50
}
}
option = { # Try again!
name = tour_general.5000.b
duel = {
skill = learning
value = high_skill_rating
50 = { # You solve the puzzle!
compare_modifier = {
value = scope:duel_value
multiplier = 0.5
}
custom_tooltip = {
text = open_the_journal_tt
trigger_event = tour_general.5010
}
}
50 = { # You fail
compare_modifier = {
value = scope:duel_value
multiplier = -0.5
}
show_as_tooltip = {
add_stress = major_stress_gain
}
hidden_effect = {
trigger_event = tour_general.5001
}
}
}
stress_impact = {
base = major_stress_impact_gain
patient = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
stubborn = minor_stress_impact_loss
}
ai_chance = {
base = 0
}
}
}
# Failing to get the journal open, again!
tour_general.5001 = {
type = character_event
title = tour_general.5001.title
desc = tour_general.5001.desc
theme = learning
left_portrait = {
character = root
animation = personality_rational
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
option = { # Drat!
name = tour_general.5001.a
stress_impact = {
base = major_stress_impact_gain
patient = minor_stress_impact_loss
arrogant = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
}
ai_chance = {
base = 50
}
}
option = { # Bust open the damn lock!
name = tour_general.5001.b
duel = {
skill = prowess
value = high_skill_rating
50 = { # You break it
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
}
desc = the_journal_is_destroyed_tt
send_interface_toast = {
title = the_journal_is_destroyed_tt
left_icon = root
random_owned_story = {
type = story_cycle_mysterious_journal
end_story = yes
}
destroy_artifact = scope:mysterious_journal
}
}
50 = { # You crack it open
compare_modifier = {
value = scope:duel_value
multiplier = 0
}
desc = open_the_journal_tt
custom_tooltip = {
text = more_mysteries_inside_tt
trigger_event = tour_general.5010
}
}
50 = { # You are too weak
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
}
desc = fail_to_open_journal_tt
hidden_effect = {
send_interface_toast = {
title = fail_to_open_journal_tt
left_icon = root
}
}
}
}
stress_impact = {
base = medium_stress_impact_gain
patient = medium_stress_impact_gain
arrogant = medium_stress_impact_loss
stubborn = medium_stress_impact_loss
}
ai_chance = {
base = 0
}
}
}
# You got the journal open, now to decipher it...
scripted_trigger journal_answer_is_1 = {
scope:mysterious_journal = {
var:answer_variable = 1
}
}
scripted_trigger journal_answer_is_2 = {
scope:mysterious_journal = {
var:answer_variable = 2
}
}
scripted_trigger journal_answer_is_3 = {
scope:mysterious_journal = {
var:answer_variable = 3
}
}
scripted_trigger journal_answer_is_4 = {
scope:mysterious_journal = {
var:answer_variable = 4
}
}
tour_general.5010 = {
type = character_event
title = tour_general.5010.title
desc = {
desc = tour_general.5010.desc.intro
first_valid = {
triggered_desc = {
trigger = { journal_answer_is_1 = yes }
desc = tour_general.5010.desc.puzzle.a
}
triggered_desc = {
trigger = { journal_answer_is_2 = yes }
desc = tour_general.5010.desc.puzzle.b
}
triggered_desc = {
trigger = { journal_answer_is_3 = yes }
desc = tour_general.5010.desc.puzzle.c
}
triggered_desc = {
trigger = { journal_answer_is_4 = yes }
desc = tour_general.5010.desc.puzzle.d
}
}
desc = tour_general.5010.desc.outro
}
theme = learning
left_portrait = {
character = root
animation = happiness
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
immediate = {
if = {
limit = {
scope:mysterious_journal = {
NOT = { exists = var:answer_variable }
}
}
hidden_effect = {
scope:mysterious_journal = {
random_list = {
25 = {
set_variable = {
name = answer_variable
value = 1
}
}
25 = {
set_variable = {
name = answer_variable
value = 2
}
}
25 = {
#You need to have a title/realm for this to be a relevant reward
trigger = { is_landed = yes }
set_variable = {
name = answer_variable
value = 3
}
}
25 = {
set_variable = {
name = answer_variable
value = 4
}
}
}
}
}
}
}
option = { # Answer A
name = tour_general.5010.a
custom_tooltip = {
text = attempt_to_solve_the_cipher_tt
if = {
limit = {
journal_answer_is_1 = yes
}
trigger_event = tour_general.5011
}
}
ai_chance = {
base = 50
modifier = {
factor = 0
journal_answer_is_1 = no
}
}
}
option = { # Answer B
name = tour_general.5010.b
custom_tooltip = {
text = attempt_to_solve_the_cipher_tt
if = {
limit = {
journal_answer_is_2 = yes
}
trigger_event = tour_general.5012
}
}
ai_chance = {
base = 50
modifier = {
factor = 0
journal_answer_is_2 = no
}
}
}
option = { # Answer C
name = tour_general.5010.c
trigger = { is_landed = yes }
custom_tooltip = {
text = attempt_to_solve_the_cipher_tt
if = {
limit = {
journal_answer_is_3 = yes
}
trigger_event = tour_general.5013
}
}
ai_chance = {
base = 50
modifier = {
factor = 0
journal_answer_is_3 = no
}
}
}
option = { # Answer D
name = tour_general.5010.d
custom_tooltip = {
text = attempt_to_solve_the_cipher_tt
if = {
limit = {
journal_answer_is_4 = yes
}
trigger_event = tour_general.5014
}
}
ai_chance = {
base = 50
modifier = {
factor = 0
journal_answer_is_4 = no
}
}
}
}
# Generic solving the puzzle reward
scripted_effect generic_journal_reward = {
random_owned_story = {
type = story_cycle_mysterious_journal
set_variable = {
name = journal_complete_solved
value = yes
}
}
add_prestige = major_prestige_gain
add_dynasty_prestige = major_dynasty_prestige_gain
}
# You solved it! It's a book about grotesques!
tour_general.5011 = {
type = character_event
title = tour_general.5011.title
desc = tour_general.5011.desc
theme = learning
left_portrait = {
character = root
animation = ecstasy
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
immediate = {
generic_journal_reward = yes
scope:mysterious_journal = {
set_artifact_name = artifact_journal_of_grotesques
set_artifact_description = artifact_journal_of_grotesques_desc
set_artifact_rarity = illustrious
remove_artifact_modifier = artifact_stress_gain_1_penalty_modifier
add_artifact_modifier = artifact_monthly_prestige_gain_per_dread_add_4_modifier
add_artifact_modifier = artifact_dread_gain_mult_4_modifier
add_artifact_modifier = artifact_learning_1_modifier
add_artifact_modifier = artifact_intrigue_2_modifier
}
}
option = { # Omg that's so cool
name = tour_general.5011.a
ai_chance = {
base = 50
}
}
}
# You solved it! It's a book about advanced theology!
tour_general.5012 = {
type = character_event
title = tour_general.5012.title
desc = tour_general.5012.desc
theme = learning
left_portrait = {
character = root
animation = ecstasy
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
immediate = {
generic_journal_reward = yes
scope:mysterious_journal = {
set_artifact_name = artifact_journal_of_theology
set_artifact_description = artifact_journal_of_theology_desc
set_artifact_rarity = illustrious
remove_artifact_modifier = artifact_stress_gain_1_penalty_modifier
add_artifact_modifier = artifact_monthly_piety_6_modifier
add_artifact_modifier = artifact_learning_2_modifier
add_artifact_modifier = artifact_domain_tax_same_faith_mult_4_modifier
add_artifact_modifier = artifact_monthly_learning_lifestyle_xp_4_modifier
}
}
option = { # Omg that's so cool
name = tour_general.5012.a
ai_chance = {
base = 50
}
}
}
# You solved it! It's a secret history of your realm!
tour_general.5013 = {
type = character_event
title = tour_general.5013.title
desc = tour_general.5013.desc
theme = tour_stop
left_portrait = {
character = root
animation = ecstasy
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
immediate = {
generic_journal_reward = yes
scope:mysterious_journal = {
set_artifact_name = artifact_journal_secret_history
set_artifact_description = artifact_journal_secret_history_desc
set_artifact_rarity = illustrious
remove_artifact_modifier = artifact_stress_gain_1_penalty_modifier
add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_12_modifier
add_artifact_modifier = artifact_monthly_intrigue_lifestyle_xp_4_modifier
add_artifact_modifier = artifact_intrigue_2_modifier
}
}
option = { # Omg that's so cool
name = tour_general.5013.a
ai_chance = {
base = 50
}
}
}
# You solved it! It's a book of martial arts techniques
tour_general.5014 = {
type = character_event
title = tour_general.5014.title
desc = tour_general.5014.desc
theme = tour_stop
left_portrait = {
character = root
animation = ecstasy
}
artifact = {
target = scope:mysterious_journal
position = lower_right_portrait
}
immediate = {
generic_journal_reward = yes
scope:mysterious_journal = {
set_artifact_name = artifact_journal_of_martial_arts
set_artifact_description = artifact_journal_of_martial_arts_desc
set_artifact_rarity = illustrious
remove_artifact_modifier = artifact_stress_gain_1_penalty_modifier
add_artifact_modifier = artifact_prowess_8_modifier
add_artifact_modifier = artifact_monthly_martial_lifestyle_xp_4_modifier
add_artifact_modifier = artifact_martial_2_modifier
}
}
option = { # Omg that's so cool
name = tour_general.5014.a
ai_chance = {
base = 50
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,804 @@
namespace = tour_travel
############################
### Highwaymen on your route
### By James Beaumont
############################
tour_travel.9010 = {
type = character_event
title = tour_travel.9010.t
desc = tour_travel.9010.desc
theme = travel_tour
left_portrait = {
character = root
triggered_animation = {
trigger = {
has_trait = craven
}
animation = fear
}
triggered_animation = {
trigger = { has_trait = brave }
animation = personality_bold
}
animation = thinking
}
right_portrait = {
character = scope:travel_leader
animation = worry
}
cooldown = { years = 2 }
trigger = {
has_activity_intent = justice_intent
root.location.county = {
NOT = { county_control = 100 }
}
}
weight_multiplier = {
base = 1
modifier = {
add = 2
root.location.county = {
NOT = { county_control <= 75 }
}
}
modifier = {
add = 2
root.location.county = {
NOT = { county_control <= 50 }
}
}
modifier = {
add = 2
root.location.county = {
NOT = { county_control <= 25 }
}
}
}
immediate = {
if = {
limit = {
exists = current_travel_plan.travel_leader
}
current_travel_plan.travel_leader = { save_scope_as = travel_leader }
}
else = {
current_travel_plan = {
random_entourage_character = {
weight = {
base = 1
modifier = {
add = prowess
}
}
save_scope_as = travel_leader
}
}
}
current_travel_plan = {
next_destination_province = { save_scope_as = next_destination }
}
}
option = { #Just go around them
name = tour_travel.9010.a
current_travel_plan = {
delay_travel_plan = { weeks = 1 }
}
stress_impact = {
craven = minor_stress_impact_loss
patient = minor_stress_impact_loss
impatient = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_energy = 1
ai_boldness = -1
ai_vengefulness = -1
ai_honor = -1
}
}
}
option = { #Go in and clear em out!
name = tour_travel.9010.b
scope:travel_leader = {
duel = {
skill = prowess
value = high_skill_rating
# Success.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
root = {
send_interface_toast = {
title = tour_travel.9010.success
left_icon = scope:travel_leader
location.county = {
change_county_control = 20
add_county_modifier = {
modifier = highwaymen_eliminated_modifier
years = 15
}
}
}
}
}
# Failure.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
root = {
send_interface_toast = {
title = tour_travel.9010.failure
left_icon = scope:travel_leader
scope:travel_leader = { increase_wounds_effect = { REASON = fight } }
increase_wounds_no_death_effect = { REASON = fight }
}
}
}
}
}
stress_impact = {
just = minor_stress_impact_loss
brave = minor_stress_impact_loss
patient = minor_stress_impact_gain
craven = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_energy = -1
ai_boldness = 1
ai_vengefulness = 1
ai_honor = 1
}
}
}
}
############################
### Possibly innocent man up for execution
### By James Beaumont
############################
scripted_trigger tour_travel_9020_valid_criminal_trigger = {
is_physically_able_adult = yes
OR = {
any_secret = { is_criminal_for = prev }
root = {
has_imprisonment_reason = prev
}
trait_is_criminal_in_faith_trigger = {
TRAIT = adulterer
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = fornicator
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = sodomite
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = witch
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = cannibal
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = deviant
FAITH = root.faith
GENDER_CHARACTER = this
}
trait_is_criminal_in_faith_trigger = {
TRAIT = incestuous
FAITH = root.faith
GENDER_CHARACTER = this
}
has_trait = murderer
}
}
tour_travel.9020 = {
type = character_event
title = tour_travel.9020.t
desc = {
desc = tour_travel.9020.desc.intro
first_valid = {
triggered_desc = {
trigger = {
scope:accused_character = {
tour_travel_9020_valid_criminal_trigger = yes
}
}
desc = tour_travel.9020.desc.outro.guilty
}
desc = tour_travel.9020.desc.outro
}
}
theme = travel_tour
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:accused_character
animation = prisonhouse
triggered_outfit = {
remove_default_outfit = no
outfit_tags = { beggar_rags }
}
}
cooldown = { years = 2 }
trigger = {
has_activity_intent = justice_intent
}
immediate = {
hidden_effect = {
if = {
limit = {
any_pool_character = {
province = root.location
}
}
random_pool_character = {
province = root.location
weight = {
base = 1
modifier = {
factor = 2
tour_travel_9020_valid_criminal_trigger = yes
}
}
save_scope_as = accused_character
}
}
else = {
create_character = {
location = root.capital_province
template = generic_peasant_character
faith = root.location.faith
culture = root.location.culture
save_scope_as = accused_character
}
scope:accused_character = {
add_character_flag = {
flag = silently_disappear_me
years = 1
}
random_list = {
10 = {
trigger = {
root.faith = { has_doctrine_parameter = deviancy_illegal }
}
add_trait = deviant
}
10 = {
trigger = {
root.faith = { has_doctrine_parameter = witchcraft_illegal }
}
add_trait = witch
}
10 = {
trigger = {
trait_is_criminal_in_faith_trigger = {
TRAIT = adulterer
FAITH = root.faith
GENDER_CHARACTER = this
}
}
add_trait = adulterer
}
10 = {
trigger = {
trait_is_criminal_in_faith_trigger = {
TRAIT = fornicator
FAITH = root.faith
GENDER_CHARACTER = this
}
}
add_trait = fornicator
}
10 = {
trigger = {
trait_is_criminal_in_faith_trigger = {
TRAIT = cannibal
FAITH = root.faith
GENDER_CHARACTER = this
}
}
add_trait = cannibal
}
10 = {
add_trait = murderer
}
60 = { # They're innocent
}
}
}
}
decide_court_position_to_give_effect = {
CANDIDATE = scope:accused_character
EMPLOYER = root
}
}
}
option = { # Support the execution
name = tour_travel.9020.a
root.location.county = {
change_county_control = minor_county_control_gain
}
scope:accused_character = {
death = {
death_reason = death_execution
killer = root
}
}
if = {
limit = {
scope:accused_character = {
tour_travel_9020_valid_criminal_trigger = yes
}
}
stress_impact = {
arbitrary = minor_stress_impact_loss
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
just = medium_stress_impact_loss
forgiving = major_stress_impact_gain
compassionate = major_stress_impact_gain
}
}
else = {
stress_impact = {
arbitrary = minor_stress_impact_loss
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
just = major_stress_impact_gain
forgiving = major_stress_impact_gain
compassionate = major_stress_impact_gain
}
}
ai_chance = {
base = 10
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = yes
OR = {
has_trait = compassionate
has_trait = forgiving
}
}
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = no
OR = {
has_trait = compassionate
has_trait = forgiving
has_trait = just
}
}
}
}
option = { # Let them go
name = tour_travel.9020.b
root.location.county = {
change_county_control = minor_county_control_loss
}
if = {
limit = {
scope:accused_character = {
tour_travel_9020_valid_criminal_trigger = yes
}
}
stress_impact = {
forgiving = medium_stress_impact_loss
compassionate = medium_stress_impact_loss
arbitrary = minor_stress_impact_gain
callous = minor_stress_impact_gain
just = medium_stress_impact_gain
}
}
else = {
stress_impact = {
just = minor_stress_impact_loss
forgiving = minor_stress_impact_loss
compassionate = minor_stress_impact_loss
arbitrary = minor_stress_impact_gain
callous = minor_stress_impact_gain
}
}
ai_chance = {
base = 10
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = yes
OR = {
has_trait = arbitrary
has_trait = callous
has_trait = sadistic
has_trait = just
}
}
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = no
OR = {
has_trait = arbitrary
has_trait = callous
has_trait = sadistic
}
}
}
}
option = { # Let them serve you as penance
name = tour_travel.9020.c
trigger = {
has_royal_court = yes
OR = {
has_trait = compassionate
has_trait = forgiving
has_trait = just
}
}
add_courtier = scope:accused_character
hidden_effect = {
scope:accused_character = {
if = {
limit = { exists = scope:activity }
add_to_activity_without_travel = scope:activity
}
}
}
current_travel_plan = {
add_companion = scope:accused_character
}
add_hook = {
type = indebted_hook
target = scope:accused_character
}
distribute_determined_court_position_effect = {
CANDIDATE = scope:accused_character
EMPLOYER = root
}
consume_imprisonment_reasons = scope:accused_character
if = {
limit = {
scope:accused_character = {
tour_travel_9020_valid_criminal_trigger = yes
}
}
stress_impact = {
forgiving = medium_stress_impact_loss
compassionate = medium_stress_impact_loss
just = medium_stress_impact_loss
arbitrary = minor_stress_impact_gain
callous = minor_stress_impact_gain
}
}
else = {
stress_impact = {
just = major_stress_impact_loss
forgiving = major_stress_impact_loss
compassionate = major_stress_impact_loss
arbitrary = minor_stress_impact_gain
callous = minor_stress_impact_gain
}
}
ai_chance = {
base = 10
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = yes
OR = {
has_trait = arbitrary
has_trait = callous
has_trait = sadistic
has_trait = just
}
}
modifier = {
factor = 0
tour_travel_9020_valid_criminal_trigger = no
OR = {
has_trait = arbitrary
has_trait = callous
has_trait = sadistic
}
}
}
}
after = {
if = {
limit = {
is_ai = yes
scope:accused_character = {
has_character_flag = silently_disappear_me
}
}
scope:accused_character = {
silent_disappearance_effect = yes
}
}
}
}
############################
### Visit a tavern
### By James Beaumont
############################
tour_travel.9030 = {
type = character_event
title = tour_travel.9030.t
desc = {
desc = tour_travel.9030.desc.intro
first_valid = {
triggered_desc = {
trigger = {
drinks_alcohol_trigger = no
}
desc = tour_travel.9030.desc.mid.hashish
}
desc = tour_travel.9030.desc.mid
}
desc = tour_travel.9030.desc.outro
}
theme = travel_tour
override_background = { reference = bp1_bonfire }
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:drunky_entourage
triggered_animation = {
trigger = {
drinks_alcohol_trigger = no
}
animation = admiration
}
animation = drink_goblet
}
cooldown = { years = 2 }
trigger = {
has_activity_intent = reduce_stress_intent
is_adult = yes
current_travel_plan = {
any_entourage_character = {
this != root
is_ai = yes
is_adult = yes
}
}
}
immediate = {
current_travel_plan = {
random_entourage_character = {
limit = {
this != root
is_ai = yes
is_adult = yes
}
weight = {
base = 1
modifier = {
factor = 10
OR = {
has_trait = drunkard
has_trait = hashishiyah
}
}
modifier = {
factor = 2
has_trait = gluttonous
}
modifier = {
factor = 2
NOT = { has_trait = temperate }
}
}
save_scope_as = drunky_entourage
}
}
}
option = { # Hell yeah, an easy break
name = tour_travel.9030.a
current_travel_plan = {
delay_travel_plan = { weeks = 1 }
}
if = {
limit = {
drinks_alcohol_trigger = yes
}
add_character_modifier = {
modifier = stress_drinking_binge
years = 5
}
}
else = {
add_character_modifier = {
modifier = hashish_with_friend_modifier
years = 5
}
}
stress_impact = {
base = medium_stress_impact_loss
lazy = minor_stress_impact_loss
drunkard = minor_stress_impact_loss
hashishiyah = minor_stress_impact_loss
gluttonous = minor_stress_impact_loss
diligent = minor_stress_impact_gain
impatient = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
factor = 0
OR = {
has_trait = diligent
has_trait = impatient
}
}
}
}
option = { # I have no time for distractions!
name = tour_travel.9030.b
stress_impact = {
diligent = minor_stress_impact_loss
impatient = minor_stress_impact_loss
lazy = minor_stress_impact_gain
drunkard = minor_stress_impact_gain
hashishiyah = minor_stress_impact_gain
gluttonous = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
factor = 0
OR = {
has_trait = lazy
has_trait = drunkard
has_trait = hashishiyah
has_trait = gluttonous
}
}
}
}
}
############################
### Peasants chatting about their favourite heroes
### By James Beaumont
############################
tour_travel.9040 = {
type = character_event
title = tour_travel.9040.t
desc = tour_travel.9040.desc
theme = travel_tour
left_portrait = {
character = root
animation = personality_bold
triggered_outfit = {
remove_default_outfit = no
outfit_tags = { beggar_rags }
}
}
right_portrait = {
character = scope:peasant
triggered_animation = {
trigger = {
drinks_alcohol_trigger = no
}
animation = admiration
}
animation = drink_goblet
}
cooldown = { years = 2 }
trigger = {
has_activity_intent = spread_legend_intent
is_location_valid_for_travel_event_on_land = yes
}
immediate = {
root.location = {
save_scope_as = county_scope
save_scope_as = background_wilderness_scope # For theme
}
create_character = {
location = scope:county_scope
template = drunken_peasant_character
culture = scope:county_scope.culture
faith = scope:county_scope.faith
save_scope_as = peasant
}
}
option = { # Let me tell you about my legend :)
name = tour_travel.9040.a
current_travel_plan = {
delay_travel_plan = { weeks = 1 }
}
duel = {
skill = diplomacy
target = scope:peasant
50 = {
desc = tour_travel.9040.a.success
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
}
send_interface_toast = {
title = tour_travel.9040.a.success
left_icon = root
right_icon = scope:peasant
add_prestige = medium_prestige_gain
add_character_modifier = {
modifier = ce1_legendary_taverns
years = 15
}
}
}
50 = {
desc = tour_travel.9040.a.failure
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
}
send_interface_toast = {
title = tour_travel.9040.a.failure
left_icon = root
add_prestige = medium_prestige_loss
add_character_modifier = {
modifier = ce1_legend_mocked
years = 10
}
}
}
}
ai_chance = {
base = 100
}
}
option = { # Ah, I shan't bother them
name = tour_travel.9040.b
add_stress = medium_stress_loss
ai_chance = {
base = 10
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,499 @@
namespace = tournament_events
##################################################
# You are offered a favour by a pretty person
# by James Beaumont
# 8000
##################################################
scripted_trigger 8000_valid_to_offer_favor = {
is_ai = yes
is_adult = yes
is_lowborn = no # Prevent random uninteresting pool characters from showing up
OR = {
AND = {
is_married = no
is_concubine = no
}
is_consort_of = root
might_cheat_on_every_partner_trigger = yes
}
NOT = {
relation_with_character_is_incestuous_in_faith_trigger = {
CHARACTER = root
FAITH = root.faith
}
}
OR = {
is_attracted_to_gender_of = root
has_sexuality = asexual # This is romance and courtship, asexuals should be fine with it most of the time
}
OR = {
AND = {
root.faith = { NOT = { has_doctrine_parameter = homosexuality_accepted } }
NOT = { sex_same_as = root }
}
root.faith = { has_doctrine_parameter = homosexuality_accepted }
}
NOR = {
has_relation_soulmate = root
# Celibates should abstain always
has_trait = celibate
# No priests giving favours
AND = {
is_clergy = yes
NOT = { faith = { has_doctrine_parameter = clergy_can_marry } }
}
}
}
tournament_events.8000 = { # Start
type = activity_event
title = tournament_events.8000.t
desc = {
desc = tournament_events.8000.desc.intro
first_valid = {
triggered_desc = {
trigger = {
any_in_list = {
list = potential_favour_givers
count > 1
}
}
desc = tournament_events.8000.desc.mid.two
}
desc = tournament_events.8000.desc.mid
}
first_valid = {
triggered_desc = {
trigger = {
NOR = {
is_attracted_to_gender_of = scope:favor_giver_1
is_attracted_to_gender_of = scope:favor_giver_2
has_sexuality = asexual
}
}
desc = tournament_events.8000.desc.outro.homo
}
}
}
theme = tournament_locale_camp
left_portrait = {
character = root
animation = thinking
}
right_portrait = {
character = scope:favor_giver_1
animation = flirtation
}
lower_right_portrait = {
character = scope:favor_giver_2
animation = flirtation
}
cooldown = { years = 1 }
trigger = {
activity_is_competing_trigger = yes
scope:activity = {
any_guest_subset_current_phase = { # There is a spectator who fancies you
name = spectator
8000_valid_to_offer_favor = yes
}
}
NOT = { has_trait = celibate }
OR = { # For AI priests in tournaments
is_clergy = no
faith = { has_doctrine_parameter = clergy_can_marry }
}
}
weight_multiplier = {
base = 1
modifier = {
factor = 2
has_activity_intent = woo_attendee_intent
}
}
immediate = {
hidden_effect = {
save_scope_as = favor_recipient
scope:activity = {
every_guest_subset_current_phase = {
name = spectator
limit = { 8000_valid_to_offer_favor = yes }
add_to_list = potential_favour_givers
}
random_in_list = {
list = potential_favour_givers
weight = {
base = 20
modifier = { # If they are wooing you, they're much more likely to do this
factor = 100
has_activity_intent = woo_attendee_intent
intent_target = root
}
modifier = { # Get their intent target where possible
add = 20
this = root.intent_target
}
modifier = { # Get someone fertile for the player
add = 20
fertility > low_fertility
}
modifier = { # They love knights and stuff
add = 20
has_trait = gallant
}
modifier = {
add = ai_honor
}
modifier = { # Cheaters are possible, but should be less likely
add = 20
OR = {
AND = {
is_married = no
is_concubine = no
}
is_consort_of = root
is_concubine_of = root
}
}
modifier = { # Get someone interesting
add = 20
is_claimant = yes
}
modifier = {
add = 20
OR = {
has_same_sinful_trait = root
has_same_virtue_trait = root
}
}
}
save_scope_as = favor_giver_1
hidden_effect = {
create_artifact_tournament_favor_effect = {
OWNER = scope:favor_giver_1
RECIPIENT = root
}
}
scope:newly_created_artifact = { save_scope_as = favor_1 }
}
if = {
limit = {
any_in_list = {
list = potential_favour_givers
count > 1
}
}
random_in_list = {
list = potential_favour_givers
limit = {
this != scope:favor_giver_1
}
weight = {
base = 20
modifier = { # If they are wooing you, they're much more likely to do this
factor = 100
has_activity_intent = woo_attendee_intent
intent_target = root
}
modifier = { # Get their intent target where possible
add = 20
this = root.intent_target
}
modifier = {
add = 20
fertility > low_fertility
}
modifier = {
add = 20
has_trait = gallant
}
modifier = {
add = ai_honor
}
modifier = {
OR = {
AND = {
is_married = no
is_concubine = no
}
is_consort_of = root
is_concubine_of = root
}
}
modifier = {
add = 20
OR = {
has_same_sinful_trait = root
has_same_virtue_trait = root
}
}
}
save_scope_as = favor_giver_2
hidden_effect = {
create_artifact_tournament_favor_effect = {
OWNER = scope:favor_giver_2
RECIPIENT = root
}
}
scope:newly_created_artifact = { save_scope_as = favor_2 }
}
}
}
}
add_prestige = medium_prestige_gain
custom_tooltip = tournament_events.1251.favor_tt
}
option = { # Why, suitor 1 is perfect for me!
name = tournament_events.8000.a
scope:activity = {
add_activity_log_entry = {
key = tournament_favor_given_log
score = 25
tags = { favors good }
character = scope:favor_recipient
target = scope:favor_giver_1
# Effects
show_as_tooltip = {
scope:favor_1 = { set_owner = root }
}
hidden_effect = {
if = {
limit = { exists = scope:favor_2 }
destroy_artifact = scope:favor_2
}
}
}
}
hidden_effect = {
scope:favor_1 = { equip_artifact_to_owner_replace = yes }
}
if = {
limit = {
NOT = {
# They are not wooing me
scope:favor_giver_1 = {
any_scheme = {
type = courting
scheme_target_character = root
}
}
# I am not wooing them
any_scheme = {
type = courting
scheme_target_character = root
}
}
}
scope:favor_giver_1 = {
start_scheme = {
type = courting
target_character = root
}
}
}
else = {
set_relation_soulmate = {
reason = soulmate_tournament
target = scope:favor_giver_1
}
}
reverse_add_opinion = {
target = scope:favor_giver_1
modifier = flattered_opinion
opinion = 20
}
if = {
limit = { exists = scope:favor_giver_2 }
reverse_add_opinion = {
target = scope:favor_giver_2
modifier = rebuffed_opinion
opinion = -15
}
}
stress_impact = {
gallant = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
chaste = minor_stress_impact_gain
cynical = minor_stress_impact_gain
zealous = minor_stress_impact_gain
humble = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
factor = 0
OR = {
has_trait = chaste
has_trait = cynical
has_trait = zealous
has_trait = humble
}
}
modifier = {
factor = 0.5
NOT = { # Only 0.5 since gay characters may pretend to be interested in a homophobic environment
is_attracted_to_gender_of = scope:favor_giver_1
has_sexuality = asexual
}
}
}
}
option = { # Why, suitor 2 is perfect for me!
name = tournament_events.8000.b
trigger = {
exists = scope:favor_giver_2
}
scope:activity = {
add_activity_log_entry = {
key = tournament_favor_given_log
score = 25
tags = { favors good }
character = scope:favor_recipient
target = scope:favor_giver_1
# Effects
show_as_tooltip = {
scope:favor_2 = { set_owner = root }
}
hidden_effect = {
if = {
limit = { exists = scope:favor_1 }
destroy_artifact = scope:favor_1
}
}
}
}
hidden_effect = {
scope:favor_2 = { equip_artifact_to_owner_replace = yes }
}
if = {
limit = {
NOT = {
# They are not wooing me
scope:favor_giver_2 = {
any_scheme = {
type = courting
scheme_target_character = root
}
}
# I am not wooing them
any_scheme = {
type = courting
scheme_target_character = root
}
}
}
scope:favor_giver_2 = {
start_scheme = {
type = courting
target_character = root
}
}
}
else = {
set_relation_soulmate = {
reason = soulmate_tournament
target = scope:favor_giver_2
}
}
reverse_add_opinion = {
target = scope:favor_giver_2
modifier = flattered_opinion
opinion = 20
}
reverse_add_opinion = {
target = scope:favor_giver_1
modifier = rebuffed_opinion
opinion = -15
}
stress_impact = {
gallant = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
chaste = minor_stress_impact_gain
cynical = minor_stress_impact_gain
zealous = minor_stress_impact_gain
humble = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
factor = 0
OR = {
has_trait = chaste
has_trait = cynical
has_trait = zealous
has_trait = humble
}
}
modifier = {
factor = 0.5
NOT = {
is_attracted_to_gender_of = scope:favor_giver_1
has_sexuality = asexual
}
}
}
}
option = { # Oh bugger off both of you
name = tournament_events.8000.c
add_prestige = medium_prestige_gain
activity_tournament_change_contestant_score_effect = { SCORE = increase_minor }
reverse_add_opinion = {
target = scope:favor_giver_1
modifier = rebuffed_opinion
opinion = -15
}
hidden_effect = {
if = {
limit = { exists = scope:favor_1 }
destroy_artifact = scope:favor_1
}
if = {
limit = { exists = scope:favor_2 }
destroy_artifact = scope:favor_2
}
}
if = {
limit = { exists = scope:favor_giver_2 }
reverse_add_opinion = {
target = scope:favor_giver_2
modifier = rebuffed_opinion
opinion = -15
}
}
stress_impact = {
gallant = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
lustful = minor_stress_impact_gain
rakish = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
factor = 0
OR = {
has_trait = gallant
has_trait = arrogant
has_trait = lustful
has_trait = rakish
}
}
modifier = {
factor = 0.5
NOT = {
is_attracted_to_gender_of = scope:favor_giver_1
has_sexuality = asexual
}
}
}
}
}

View file

@ -0,0 +1,604 @@
namespace = jason_first_race_event
##################################################
# A Mess of Legs
# by Jason Cantalini
# 4700
##################################################
scripted_trigger jason_first_race_event_1_opponent_trigger = {
is_ai = yes
exists = var:contest_aptitude
this != root
OR = {
is_lowborn = no
is_landed = no
}
}
#Two racers collide with each other
jason_first_race_event.1 = {
type = activity_event
title = jason_first_race_event.1.t
desc = {
desc = jason_first_race_event.1.desc
first_valid = {
triggered_desc = {
trigger = {
OR = {
has_trait = paranoid
has_trait = vengeful
has_trait = wrathful
has_relation_rival = scope:opponent
has_relation_nemesis = scope:opponent
}
NOR = {
has_trait = trusting
has_trait = forgiving
has_trait = compassionate
}
}
desc = jason_first_race_event.1.desc.suspicious
}
triggered_desc = {
trigger = {
OR = {
has_trait = trusting
has_trait = forgiving
has_trait = compassionate
}
}
desc = jason_first_race_event.1.desc.sympathetic
}
}
}
theme = tournament_contest
window = widget_activity_locale_fullscreen_event
left_portrait = {
character = root
animation = disbelief
}
right_portrait = {
character = scope:opponent
animation = fear
}
trigger = {
exists = var:contest_aptitude
scope:activity = {
any_guest_subset_current_phase = {
name = qualified
this = root
}
any_guest_subset_current_phase = {
name = qualified
jason_first_race_event_1_opponent_trigger = yes
}
NOT = {
any_attending_character = {
is_ai = no
this != root
}
}
# Only one event removing competitors should occur
any_guest_subset_current_phase = {
name = qualified
count >= 8
}
}
#Standard checks.
NOT = { has_character_flag = horse_race_contest_event_cooldown }
}
immediate = {
tournament_pivotal_flavor_variable_effect = { CONTEST = horse_race ID = 10 }
add_character_flag = {
flag = horse_race_contest_event_cooldown
years = 1
}
tournament_horse_race_fetch_horse_effect = yes
scope:activity = {
random_guest_subset_current_phase = {
name = qualified
limit = {
jason_first_race_event_1_opponent_trigger = yes
}
weight = {
base = 1
activity_recurring_character_weight_modifier = { VALUE = 100 }
}
save_scope_as = opponent
try_to_create_recurring_character_effect = { CHARACTER = root }
}
}
scope:opponent = {
tournament_horse_race_fetch_horse_effect = yes
activity_tournament_change_contestant_score_effect = { SCORE = decrease_minor }
}
root.var:horse_race_jockey = { save_scope_as = jockey }
activity_tournament_change_contestant_score_effect = { SCORE = decrease_minor }
}
# Accuse the other horse's owner of sabotaging you
option = {
name = jason_first_race_event.1.a
flavor = jason_first_race_event.1.a.tt
progress_towards_rival_effect = {
CHARACTER = scope:opponent
REASON = rival_race_sabotage_accusation
OPINION = -40
}
duel = {
skills = { diplomacy intrigue }
value = 10
#You convince everyone that this affront merits a restart
45 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
modifier = {
add = 20
dread > medium_dread
}
modifier = {
add = 40
dread > high_dread
}
modifier = {
add = 50
scope:host = {
this = root
}
}
modifier = {
add = 25
highest_held_title_tier = tier_kingdom
}
modifier = {
add = 50
highest_held_title_tier = tier_empire
}
send_interface_toast = {
title = jason_first_race_event.1.a.tt.win
left_icon = root
right_icon = scope:opponent
tournament_contest_knocked_out_effect = { CHARACTER = scope:opponent }
}
desc = jason_first_race_event.1.a.tt.win
}
#You sound petty and no one listens
55 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
send_interface_toast = {
title = jason_first_race_event.1.a.tt.lose
left_icon = root
right_icon = scope:opponent
scope:activity = {
add_activity_log_entry = {
key = contest_horse_race_collision_log
tags = { contest bad }
score = 30
character = root
target = scope:opponent
}
every_attending_character = {
limit = {
NOR = {
this = root
this = scope:opponent
}
}
custom = every_tournament_attendee_tt
add_opinion = {
target = root
modifier = contempt_opinion
opinion = -10
}
}
}
}
desc = jason_first_race_event.1.a.tt.lose
}
}
stress_impact = {
forgiving = medium_stress_impact_gain
trusting = minor_stress_impact_gain
compassionate = miniscule_stress_impact_gain
wrathful = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
callous = miniscule_stress_impact_loss
sadistic = miniscule_stress_impact_loss
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = forgiving
has_trait = trusting
}
}
modifier = {
add = -50
OR = {
has_trait = compassionate
has_trait = honest
has_trait = shy
has_trait = content
has_trait = calm
}
}
modifier = {
add = -50
OR = {
diplomacy <= low_skill_rating
intrigue <= low_skill_rating
}
}
modifier = {
add = -25
OR = {
diplomacy < medium_skill_rating
intrigue < medium_skill_rating
}
}
modifier = {
add = -50
diplomacy <= decent_skill_rating
intrigue <= decent_skill_rating
}
modifier = {
add = 100
OR = {
diplomacy >= high_skill_rating
prowess >= high_skill_rating
}
}
modifier = {
add = 100
OR = {
has_trait = vengeful
has_trait = arbitrary
has_trait = deceitful
has_trait = paranoid
has_trait = greedy
}
}
modifier = {
add = 50
highest_held_title_tier = tier_kingdom
}
modifier = {
add = 100
highest_held_title_tier = tier_empire
}
modifier = {
add = 150
scope:host = {
this = root
}
}
modifier = {
add = 75
dread > medium_dread
}
}
}
# Console your opponent and apologize
option = {
trigger = {
OR = {
NOR = {
has_relation_rival = scope:opponent
has_relation_nemesis = scope:opponent
has_trait = paranoid
has_trait = vengeful
has_trait = wrathful
has_trait = sadistic
}
OR = {
has_relation_rival = scope:opponent
has_relation_nemesis = scope:opponent
OR = {
has_trait = trusting
has_trait = forgiving
has_trait = compassionate
}
}
}
}
name = jason_first_race_event.1.b
flavor = jason_first_race_event.1.b.tt
scope:activity = {
add_activity_log_entry = {
key = contest_horse_race_collision_log
tags = { contest bad }
score = 30
character = root
target = scope:opponent
# Effect
root = {
progress_towards_friend_effect = {
CHARACTER = scope:opponent
REASON = friend_shared_disappointment
OPINION = 40
}
}
}
}
stress_impact = {
forgiving = minor_stress_impact_loss
wrathful = major_stress_impact_gain
sadistic = major_stress_impact_gain
paranoid = major_stress_impact_gain
vengeful = major_stress_impact_gain
callous = medium_stress_impact_gain
arrogant = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = wrathful
has_trait = sadistic
has_trait = paranoid
has_trait = vengeful
has_trait = callous
}
}
modifier = {
add = -50
has_trait = arrogant
}
modifier = {
add = 100
has_trait = forgiving
}
}
}
# Try to encourage your jockey
option = {
name = jason_first_race_event.1.c
flavor = jason_first_race_event.1.c.tt
duel = {
skill = diplomacy
value = 10
#Your jockey gets back on track
45 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
modifier = {
has_trait_xp = {
trait = tourney_participant
track = horse
value >= 20
}
add = 20
}
modifier = {
has_trait_xp = {
trait = tourney_participant
track = horse
value >= 50
}
add = 30
}
modifier = {
has_trait_xp = {
trait = tourney_participant
track = horse
value >= 80
}
add = 50
}
send_interface_toast = {
title = jason_first_race_event.1.c.tt.win
left_icon = root
right_icon = scope:opponent
desc = jason_first_race_event.1.c.tt.lose
create_character_memory = {
type = successful_race_rescue
}
activity_tournament_change_contestant_score_effect = { SCORE = increase_minor }
# add horsemanship tournament skill XP
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = horse
value = tournament_hastiludes_xp_gain_medium_value
}
}
}
desc = jason_first_race_event.1.c.tt.win
}
#Your jockey can't hear you
55 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
send_interface_toast = {
title = jason_first_race_event.1.c.tt.lose
left_icon = root
right_icon = scope:opponent
scope:activity = {
add_activity_log_entry = {
key = contest_horse_race_collision_log
tags = { contest bad }
score = 30
character = root
target = scope:opponent
}
}
activity_tournament_change_contestant_score_effect = { SCORE = decrease_miniscule }
}
desc = jason_first_race_event.1.c.tt.lose
create_character_memory = {
type = trampled_during_race_rescue
}
}
}
stress_impact = {
craven = major_stress_impact_gain
sadistic = medium_stress_impact_gain
lazy = medium_stress_impact_gain
callous = medium_stress_impact_gain
vengeful = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = sadistic
has_trait = lazy
has_trait = craven
has_trait = callous
}
}
modifier = {
add = -50
has_trait = vengeful
}
modifier = {
add = -50
OR = {
diplomacy < mediocre_skill_rating
prowess < mediocre_skill_rating
}
}
modifier = {
add = -25
OR = {
diplomacy < mediocre_skill_rating
prowess < mediocre_skill_rating
}
}
modifier = {
add = -50
diplomacy <= medium_skill_rating
prowess <= medium_skill_rating
}
modifier = {
add = -50
highest_held_title_tier = tier_empire
}
modifier = {
add = 75
OR = {
has_trait = compassionate
has_trait = brave
}
}
modifier = {
add = 25
has_trait_xp = {
trait = tourney_participant
track = horse
value >= 50
}
}
modifier = {
add = 50
has_trait_xp = {
trait = tourney_participant
track = horse
value >= 100
}
}
modifier = {
add = 50
OR = {
diplomacy >= very_high_skill_rating
prowess >= very_high_skill_rating
}
}
}
}
# Accept this unfortunate loss
option = {
name = jason_first_race_event.1.d
flavor = jason_first_race_event.1.d.tt
scope:activity = {
add_activity_log_entry = {
key = contest_horse_race_collision_log
tags = { contest bad }
score = 30
character = root
target = scope:opponent
}
}
stress_impact = {
wrathful = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
compassionate = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = wrathful
has_trait = paranoid
}
}
modifier = {
add = -50
OR = {
has_trait = compassionate
has_trait = stubborn
has_trait = greedy
}
}
modifier = {
add = 50
OR = {
has_trait = calm
has_trait = shy
}
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,877 @@
namespace = contest_events
###############################
###############################
### RECITAL - 5000-5499 ###
###############################
###############################
# Complete your own verse!
# By James Beaumont
contest_events.5000 = {
type = activity_event
title = contest_events.5000.t
desc = contest_events.5000.desc
theme = tournament_contest
window = widget_activity_locale_fullscreen_event
left_portrait = {
character = root
animation = anger
}
right_portrait = {
character = scope:enemy
animation = schadenfreude
}
cooldown = { years = 1 }
trigger = {
scope:activity = {
any_guest_subset_current_phase = {
name = qualified
contest_event_general_contestant_valid_trigger = yes
}
}
}
immediate = {
scope:activity = {
random_guest_subset_current_phase = {
name = qualified
limit = { contest_event_general_contestant_valid_trigger = yes }
save_scope_as = enemy
}
}
scope:enemy = {
select_poem_theme_incompetence_effect = yes
select_poem_subject_gender_effect = {
SUBJECT = flag:specific
SUBJECT_TARGET = root
}
}
}
# Furthermore, I had sex with your mother
option = {
name = {
trigger = {
is_attracted_to_men = yes
}
text = contest_events.5000.shagged_your_dad
}
name = contest_events.5000.shagged_your_mum
duel = {
skill = intrigue
target = scope:enemy
50 = {
modifier = {
factor = 0.5
has_trait = chaste
}
modifier = {
factor = 0.1
OR = { # Lol, no you didn't
has_trait = celibate
is_eunuch_trigger = yes
}
}
modifier = {
add = attraction
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_medium }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 2
}
}
}
}
50 = {
modifier = {
add = scope:enemy.attraction
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
progress_towards_rival_effect = {
REASON = rival_recital_insult
CHARACTER = scope:enemy
OPINION = default_rival_opinion
}
if = {
limit = { is_eunuch_trigger = yes }
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
lustful = minor_stress_impact_loss
chaste = medium_stress_impact_gain
celibate = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
honest = medium_stress_impact_gain
}
}
else = {
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
lustful = minor_stress_impact_loss
chaste = medium_stress_impact_gain
celibate = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = chaste
has_trait = celibate
has_trait = forgiving
has_trait = compassionate
}
}
}
}
# Call them a ho
option = {
name = contest_events.5000.licentious
duel = {
skills = { diplomacy intrigue }
target = scope:enemy
50 = {
modifier = { # The comment actually has a basis
factor = 2
scope:enemy = {
OR = {
is_concubine = yes
has_trait = rakish
has_trait = seducer
has_trait = lustful
has_trait = deviant
has_trait = adulterer
has_trait = fornicator
has_trait = sodomite
}
}
}
modifier = { # It's a bit of a self-burn
factor = 0.5
root = {
OR = {
is_concubine = yes
has_trait = rakish
has_trait = seducer
has_trait = lustful
has_trait = deviant
has_trait = adulterer
has_trait = fornicator
has_trait = sodomite
}
}
}
modifier = { # The crowd doesn't believe being lustful is bad
factor = 0.5
root.location.county.faith = {
trait_is_virtue = lustful
}
}
modifier = { # It is bad for them to be lecherous
add = 5
scope:enemy = {
OR = {
AND = {
is_female = yes
faith = { NOT = { has_doctrine_parameter = adultery_female_accepted } }
}
AND = {
is_male = yes
faith = { NOT = { has_doctrine_parameter = adultery_male_accepted } }
}
}
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_medium }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 10
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
progress_towards_rival_effect = {
REASON = rival_recital_insult
CHARACTER = scope:enemy
OPINION = default_rival_opinion
}
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
chaste = minor_stress_impact_loss
lustful = medium_stress_impact_gain
rakish = medium_stress_impact_gain
deviant = medium_stress_impact_gain
sodomite = medium_stress_impact_gain
fornicator = medium_stress_impact_gain
adulterer = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = lustful
has_trait = rakish
has_trait = deviant
has_trait = sodomite
has_trait = fornicator
has_trait = adulterer
}
}
}
}
# Call them stupid
option = {
name = contest_events.5000.stupid
duel = {
skill = learning
target = scope:enemy
50 = {
modifier = { # The comment actually has a basis
factor = 2
scope:enemy = {
OR = {
has_trait = dull
has_trait = intellect_bad
}
}
}
modifier = { # It's a bit of a self-burn
factor = 0.5
root = {
OR = {
has_trait = dull
has_trait = intellect_bad
}
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_medium }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 2
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
progress_towards_rival_effect = {
REASON = rival_recital_insult
CHARACTER = scope:enemy
OPINION = default_rival_opinion
}
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
chaste = minor_stress_impact_loss
dull = medium_stress_impact_gain
intellect_bad_1 = medium_stress_impact_gain
intellect_bad_2 = medium_stress_impact_gain
intellect_bad_3 = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = dull
has_trait = intellect_bad
}
}
}
}
# Call them ugly
option = {
name = contest_events.5000.ugly
duel = {
skill = diplomacy
target = scope:enemy
50 = {
modifier = { # The comment actually has a basis
factor = 2
scope:enemy = {
has_trait = beauty_bad
}
}
modifier = { # It's a bit of a self-burn
factor = 0.5
root = {
has_trait = beauty_bad
}
}
modifier = { # You're actually like so hot omg
add = attraction
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_medium }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 2
}
}
}
}
50 = {
modifier = {
add = scope:enemy.attraction
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
progress_towards_rival_effect = {
REASON = rival_recital_insult
CHARACTER = scope:enemy
OPINION = default_rival_opinion
}
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
chaste = minor_stress_impact_loss
humble = medium_stress_impact_gain
beauty_bad_1 = medium_stress_impact_gain
beauty_bad_2 = medium_stress_impact_gain
beauty_bad_3 = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = humble
has_trait = beauty_bad
}
}
}
}
}
# You speak a different language to your opponent and you have no idea what they just said
# By James Beaumont
contest_events.5010 = {
type = activity_event
title = contest_events.5010.t
desc = contest_events.5010.desc
theme = tournament_contest
window = widget_activity_locale_fullscreen_event
left_portrait = {
character = root
animation = disbelief
}
right_portrait = {
character = scope:enemy
animation = schadenfreude
}
cooldown = { years = 1 }
trigger = {
scope:activity = {
any_guest_subset_current_phase = {
name = qualified
contest_event_general_contestant_valid_trigger = yes
NOT = { root = { knows_language_of_culture = prev.culture } }
}
}
}
immediate = {
scope:activity = {
random_guest_subset_current_phase = {
name = qualified
limit = {
contest_event_general_contestant_valid_trigger = yes
NOT = { root = { knows_language_of_culture = prev.culture } }
}
save_scope_as = enemy
}
}
}
# Insult them?
option = {
name = contest_events.5010.a
duel = {
skill = intrigue
target = scope:enemy
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_minor }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 10
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
progress_towards_rival_effect = {
REASON = rival_recital_insult
CHARACTER = scope:enemy
OPINION = default_rival_opinion
}
stress_impact = {
base = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
forgiving = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = forgiving
has_trait = compassionate
}
}
}
}
# Try to guess what they meant
option = {
name = contest_events.5010.b
duel = {
skill = learning
value = high_skill_rating
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_major }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 10
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
stress_impact = {
base = minor_stress_impact_loss
dull = medium_stress_impact_gain
impatient = medium_stress_impact_gain
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = dull
has_trait = impatient
has_trait = vengeful
}
}
}
}
}
# Your poem goes well, push your luck?
# By James Beaumont
contest_events.5020 = {
type = activity_event
title = contest_events.5020.t
desc = contest_events.5020.desc
theme = tournament_contest
window = widget_activity_locale_fullscreen_event
left_portrait = {
character = root
animation = ecstasy
}
cooldown = { years = 1 }
trigger = {
scope:activity = {
any_guest_subset_current_phase = {
name = qualified
contest_event_general_contestant_valid_trigger = yes
}
}
}
immediate = {
scope:activity = {
random_guest_subset_current_phase = {
name = qualified
limit = { contest_event_general_contestant_valid_trigger = yes }
save_scope_as = enemy
}
}
hidden_effect = { # Set up the scopes for the poem loc
root = {
select_poem_subject_gender_effect = {
SUBJECT = flag:specific
SUBJECT_TARGET = scope:enemy
}
}
}
}
# Push your luck
option = {
name = contest_events.5020.a
duel = {
skill = diplomacy
target = scope:enemy
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_massive }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 10
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_medium }
}
}
}
stress_impact = {
content = medium_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = content
has_trait = humble
}
}
}
}
# Play it safe and take a bow
option = {
name = contest_events.5020.b
activity_tournament_change_contestant_score_effect = { SCORE = increase_minor }
stress_impact = {
ambitious = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = ambitious
has_trait = arrogant
has_trait = stubborn
}
}
}
}
}
# Your poem goes poorly, try to salvage it?
# By James Beaumont
contest_events.5030 = {
type = activity_event
title = contest_events.5030.t
desc = contest_events.5030.desc
theme = tournament_contest
window = widget_activity_locale_fullscreen_event
left_portrait = {
character = root
animation = ecstasy
}
cooldown = { years = 1 }
trigger = {
scope:activity = {
any_guest_subset_current_phase = {
name = qualified
contest_event_general_contestant_valid_trigger = yes
}
}
}
immediate = {
scope:activity = {
random_guest_subset_current_phase = {
name = qualified
limit = { contest_event_general_contestant_valid_trigger = yes }
save_scope_as = enemy
}
}
}
# Push your luck
option = {
name = contest_events.5030.a
duel = {
skill = diplomacy
target = scope:enemy
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = contest_events.5000.success
send_interface_toast = {
title = contest_events.5000.success
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = increase_medium }
if = {
limit = {
has_trait = tourney_participant
}
add_trait_xp = {
trait = tourney_participant
track = wit
value = 10
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = contest_events.5000.failure
send_interface_toast = {
title = contest_events.5000.failure
right_icon = scope:enemy
activity_tournament_change_contestant_score_effect = { SCORE = decrease_major }
}
}
}
stress_impact = {
content = medium_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = content
has_trait = humble
}
}
}
}
# Play it safe and take a bow
option = {
name = contest_events.5030.b
activity_tournament_change_contestant_score_effect = { SCORE = decrease_minor }
stress_impact = {
ambitious = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0
OR = {
has_trait = ambitious
has_trait = arrogant
has_trait = stubborn
}
}
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

4625
N3OW/events/birth_events.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,292 @@
#Events for blackmail
namespace = blackmail
########################
# Blackmail Handling
# 0001-0999
########################
#Character refuses to be blackmailed
blackmail.0001 = {
type = character_event
title = blackmail.0001.t
desc = blackmail.0001.desc
theme = intrigue
left_portrait = {
character = scope:recipient
animation = dismissal
}
trigger = {
exists = scope:target
scope:target = { can_be_exposed_by = root }
}
immediate = {
play_music_cue = mx_cue_murder
}
after = { remove_variable = currently_blackmailing }
option = {
name = blackmail.0001.a
scope:target = {
expose_secret = root
}
}
option = {
name = blackmail.0001.b
scope:target = {
disable_exposure_by = root
}
ai_chance = {
factor = 0
}
}
}
########################
# Blackmail-related stuff
# 1000-1999
########################
#Blackmailing someone causes Dread
blackmail.1001 = {
type = character_event
title = blackmail.1001.t
desc = blackmail.1001.desc
theme = intrigue
left_portrait = {
character = scope:blackmail_target
animation = worry
}
trigger = {
is_landed = yes
any_vassal = {
being_blackmailed_by_root_trigger = yes
}
NOT = { has_character_flag = had_event_blackmail_1001 }
}
weight_multiplier = {
base = 1
}
immediate = {
play_music_cue = mx_cue_murder
add_character_flag = {
flag = had_event_blackmail_1001
days = 3650
}
random_vassal = {
limit = {
root = {
OR = {
has_hook_of_type = {
target = prev
type = weak_blackmail_hook
}
has_hook_of_type = {
target = prev
type = strong_blackmail_hook
}
}
}
}
save_scope_as = blackmail_target
}
}
option = {
name = blackmail.1001.a
add_dread = medium_dread_gain
stress_impact = {
compassionate = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 1
ai_vengefulness = 0.5
}
}
}
option = { #Assure your vassals no one has anything to fear
name = blackmail.1001.b
add_dread = medium_dread_loss
stress_impact = {
base = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
callous = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_compassion = 2
ai_honor = 1
}
}
}
}
#Being under Blackmail causes Stress
blackmail.1002 = {
type = character_event
title = blackmail.1002.t
desc = blackmail.1002.desc
theme = intrigue
left_portrait = {
character = scope:blackmailer
animation = scheme
}
trigger = {
NOT = { has_character_flag = had_event_blackmail_1002 }
OR = {
any_vassal = {
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
AND = {
exists = liege
is_in_civil_war = no
liege = {
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
}
any_close_or_extended_family_member = {
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
}
}
weight_multiplier = {
base = 1
modifier = {
add = 0.5
has_trait = trusting
}
}
immediate = {
play_music_cue = mx_cue_murder
add_character_flag = {
flag = had_event_blackmail_1002
days = 3650
}
every_vassal = {
limit = {
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
add_to_temporary_list = blackmailers
}
liege = {
if = {
limit = {
is_in_civil_war = no
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
add_to_temporary_list = blackmailers
}
}
every_close_or_extended_family_member = {
limit = {
OR = {
has_hook_of_type = {
target = root
type = weak_blackmail_hook
}
has_hook_of_type = {
target = root
type = strong_blackmail_hook
}
}
}
add_to_temporary_list = blackmailers
}
random_in_list = {
list = blackmailers
save_scope_as = blackmailer
}
}
option = {
name = blackmail.1002.a
trigger = { NOT = { has_trait = trusting } }
show_as_unavailable = { always = yes }
stress_impact = {
base = medium_stress_gain
paranoid = minor_stress_impact_gain
}
ai_chance = {
base = 1000
}
}
option = {
name = blackmail.1002.b
trigger = {
has_trait = trusting
}
trait = trusting
stress_impact = {
base = minor_stress_impact_loss
}
ai_chance = {
base = 1000
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,144 @@

#Events handling the Spouse Councillor position in the background
namespace = councillor_spouse_background
#Ongoing event tracking background progress
councillor_spouse_background.0001 = {
hidden = yes
trigger = {
is_alive = yes
has_council_position = councillor_spouse
any_spouse = {
exists = this.cp:councillor_spouse
this.cp:councillor_spouse = root
}
}
immediate = {
if = {
limit = {
is_landed = no
is_capable_adult_ai = yes
NOT = { is_performing_council_task = task_spouse_default }
}
#Diplomacy rank up
if = {
limit = {
is_performing_council_task = task_court_politics
NOT = { has_trait = diplomat }
var:councillor_spouse_lifestyle_progress > councillor_spouse_lifestyle_rank_up_threshold
}
councillor_spouse_lifestyle_rank_up_effect = {
SKILL = diplomacy
}
}
#Martial rank up
else_if = {
limit = {
is_performing_council_task = task_chivalry
NOT = { has_trait = strategist }
var:councillor_spouse_lifestyle_progress > councillor_spouse_lifestyle_rank_up_threshold
}
councillor_spouse_lifestyle_rank_up_effect = {
SKILL = martial
}
}
#Intrigue rank up
else_if = {
limit = {
is_performing_council_task = task_court_intrigue
NOT = { has_trait = schemer }
var:councillor_spouse_lifestyle_progress > councillor_spouse_lifestyle_rank_up_threshold
}
councillor_spouse_lifestyle_rank_up_effect = {
SKILL = intrigue
}
}
#Stewardship rank up
else_if = {
limit = {
is_performing_council_task = task_manage_domain
NOT = { has_trait = architect }
var:councillor_spouse_lifestyle_progress > councillor_spouse_lifestyle_rank_up_threshold
}
councillor_spouse_lifestyle_rank_up_effect = {
SKILL = stewardship
}
}
#Learning rank up
else_if = {
limit = {
is_performing_council_task = task_patronage
NOT = { has_trait = scholar }
var:councillor_spouse_lifestyle_progress > councillor_spouse_lifestyle_rank_up_threshold
}
councillor_spouse_lifestyle_rank_up_effect = {
SKILL = learning
}
}
if = {
limit = {
NOT = { exists = scope:ranked_up }
#Prevent further progress from being added once the councillor is at max lifestyle rank:
trigger_if = {
limit = {
is_performing_council_task = task_court_politics
}
NOT = { has_trait = diplomat }
}
trigger_else_if = {
limit = {
is_performing_council_task = task_chivalry
}
NOT = { has_trait = strategist }
}
trigger_else_if = {
limit = {
is_performing_council_task = task_manage_domain
}
NOT = { has_trait = architect }
}
trigger_else_if = {
limit = {
is_performing_council_task = task_patronage
}
NOT = { has_trait = scholar }
}
trigger_else_if = {
limit = {
is_performing_council_task = task_court_intrigue
}
NOT = { has_trait = schemer }
}
trigger_else = {
always = yes
}
}
if = {
limit = {
has_variable = councillor_spouse_lifestyle_progress
}
change_variable = {
name = councillor_spouse_lifestyle_progress
add = councillor_spouse_lifestyle_progress_increase
}
}
else = {
set_variable = {
name = councillor_spouse_lifestyle_progress
value = councillor_spouse_lifestyle_progress_increase
}
}
}
}
clear_saved_scope = ranked_up
trigger_event = {
id = councillor_spouse_background.0001
months = 6
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more