Excavation starting

This commit is contained in:
Heidesommer 2026-06-02 02:58:30 -04:00
parent ab0d893250
commit 21f3ff5fe3
19 changed files with 7723 additions and 2 deletions

File diff suppressed because it is too large Load diff

View file

@ -4735,3 +4735,29 @@ RegionalPeasantHeadgearPlural = {
parent = RegionalPeasantHeadgear
suffix = "_plural"
}
GetRegionalLootedMaterialType = {
type = character
random_valid = yes
text = {
trigger = {
location = {
terrain = tells
}
}
localization_key = looted_material_type_copper_wire
}
text = {
trigger = {
location = {
geographical_region = world_europe_south_east
}
}
localization_key = looted_material_type_cut_marble
}
text = {
localization_key = looted_material_type_relic_sack
fallback = yes
}
}

View file

@ -50,4 +50,16 @@ monotown_holding = {
texture = "gfx/interface/icons/map_icons/onmap_holding_icon.dds"
parent = domicile
alias = { monotown_holdings }
}
}
excavation_success_chance = {
alias = { excavation_success_chance_no_prefix }
texture = "gfx/interface/icons/activities/activity_hunt.dds"
parent = activity
}
excavation_sighting = {
texture = "gfx/interface/icons/activities/activity_excavation.dds"
alias = { excavation_sightings excavation_sighting_no_prefix excavation_sightings_no_prefix }
parent = activity
}

View file

@ -0,0 +1,17 @@

excavation_punished_locals_modifier = {
icon = hunt_mixed
tax_mult = 0.1
county_opinion_add = -30
}
excavation_upset_excavationing_county_modifier = {
icon = hunt_negative
county_opinion_add = -30
}
excavation_looter_training_modifier = {
icon = hunt_positive
prowess = 2
trait_track_hunter_xp_gain_mult = 0.1
}

View file

@ -0,0 +1,82 @@
# On actions for the excavation activity
# 1. Start/Method
excavation_start_events = {
trigger = {
exists = scope:activity
involved_activity.activity_host ?= this
}
events = {
excavation.0500 # Standard
}
}
# 2. Random Flavor
excavation_random_pulse = {
trigger = {
exists = scope:activity
OR = {
is_ai = no
involved_activity.activity_host ?= this
}
}
random_events = {
chance_of_no_event = {
if = {
limit = { this = scope:host }
value = 0
}
else = { value = 50 }
}
200 = excavation.4002 #A hunt guest shares a secret about someone with you
100 = excavation.4003 #Poachers in the woods
}
effect = { # Used to ensure a certain progress has been made before some events to fire
involved_activity = { set_variable = excavation_outcome_random }
}
}
# Outcome Start
excavation_outcome_start_events = {
trigger = {
exists = scope:activity
involved_activity.activity_host ?= this
}
random_events = {
}
}
# Outcome Complication
excavation_outcome_complication_events = {
trigger = {
exists = scope:activity
OR = {
is_ai = no
involved_activity.activity_host ?= this
}
}
random_events = {
}
}
# Outcome End
excavation_outcome_end_events = {
trigger = {
exists = scope:activity
involved_activity.activity_host ?= this
}
random_events = {
}
}
# End summary
excavation_end_events = {
trigger = {
exists = scope:activity
involved_activity.activity_host ?= this
}
random_events = {
1 = excavation.1003 # Success
1 = excavation.1004 # Failure
}
}

View file

@ -0,0 +1,8 @@

# Released Poachers
excavation_released_looters_opinion = {
opinion = -10
decaying = yes
years = 5
}

View file

@ -0,0 +1,284 @@
######################
# excavation STUFF
######################
excavation_activity_base_cost = {
value = standard_activity_base_cost
# Adventurer
if = {
limit = { has_government = landless_adventurer_government }
multiply = 0.25
}
}
excavation_normal_option_cost = {
value = 10
multiply = activity_cost_scale_by_tier
multiply = activity_cost_scale_by_era
}
excavation_good_option_cost = {
value = 35
multiply = activity_cost_scale_by_tier
multiply = activity_cost_scale_by_era
}
standard_excavationing_cooldown_time = {
value = 2
}
excavation_prestige_reward_value = {
# Standard value for most chars.
value = minor_prestige_value
}
excavation_piety_reward_value = {
# Standard value for most chars.
value = minor_piety_value
}
excavation_secondary_outcome = 1
excavation_participants = 10
excavation_event_delay_min = 25
excavation_event_delay_max = 35
min_default_excavation_events = 2
max_default_excavation_events = 3
chance_of_extra_excavation_events = 25
min_excavation_event_spacing = 2
max_excavation_event_spacing = 4
excavation_activity_guest_list_size_value = {
value = 4
if = {
limit = { primary_title.tier = tier_duchy }
add = 2
}
else_if = {
limit = { primary_title.tier = tier_kingdom }
add = 4
}
if = {
limit = { primary_title.tier >= tier_empire }
add = 6
}
}
excavation_prestige_guest_gain_value = {
value = excavation_prestige_reward_value
divide = 2
}
excavation_piety_guest_gain_value = {
value = excavation_piety_reward_value
divide = 2
}
excavation_activity_success_increase_minor_value = 3
excavation_activity_success_increase_medium_value = 5
excavation_activity_success_increase_major_value = 10
excavation_activity_success_increase_massive_value = 15 # use very sparingly, this is huge
excavation_activity_success_increase_adventurer_initial_medium_value = 30
excavation_activity_success_increase_adventurer_initial_high_value = 50
excavation_activity_success_decrease_minor_value = {
value = excavation_activity_success_increase_minor_value
multiply = -1
}
excavation_activity_success_decrease_medium_value = {
value = excavation_activity_success_increase_medium_value
multiply = -1
}
excavation_activity_success_decrease_major_value = {
value = excavation_activity_success_increase_major_value
multiply = -1
}
excavation_activity_success_decrease_massive_value = {
value = excavation_activity_success_increase_massive_value
multiply = -1
}
excavation_success_chance_value = {
activity_host = {
### HOST
# SKILLS
add = {
value = learning
divide = 4
ceiling = yes
max = 10
desc = learning_modifier
}
add = {
value = martial
divide = 8
ceiling = yes
max = 10
desc = martial_modifier
}
add = {
value = prowess
divide = 4
ceiling = yes
max = 10
desc = prowess_modifier
}
# TRAIT
add = {
value = 0
if = {
limit = { has_trait = lifestyle_antiquarian }
add = 3
}
desc = excavation_success_chance.trait
}
}
# GUESTS
if = { # excavationers
limit = {
any_attending_character = {
NOR = {
this = prev.activity_host
# prev.activity_host.court_position:master_of_excavation_court_position ?= this
}
OR = {
has_trait = lifestyle_antiquarian
}
}
}
add = {
value = 0
every_attending_character = {
limit = {
NOR = {
this = prev.activity_host
# prev.activity_host.court_position:master_of_excavation_court_position ?= this
}
has_trait = lifestyle_antiquarian
}
add = 3
}
desc = excavation_success_chance.attending_excavationers
}
}
min = 10
max = 80
}
excavation_success_chance_inverse_value = {
value = 100
subtract = excavation_success_chance_value
}
# PARTY SIZE
# These should ALWAYS be synced with the relevant activity option select_travel_entourage_max parameter.
excavation_entourage_party_size_small_max_value = 5
excavation_entourage_party_size_normal_max_value = 10
excavation_entourage_party_size_many_max_value = 15
excavation_entourage_base_set_weighting_value = {
if = {
limit = {
is_available_healthy_adult = yes
bannable_serving_diarch_trigger = no
OR = {
has_court_position = master_of_hunt_court_position
has_court_position = huntperson_camp_officer
has_court_position = bodyguard_court_position
has_court_position = court_physician_court_position
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:host }
has_trait = lifestyle_antiquarian
}
}
# Base
add = 50
add = ai_energy
add = ai_boldness
# We want to have MoH most of all.
if = {
limit = { has_court_position = master_of_hunt_court_position }
add = 100000
}
if = {
limit = { has_court_position = huntperson_camp_officer }
add = 100000
}
# We want bodyguards too.
if = {
limit = { has_court_position = bodyguard_court_position }
add = 50000
}
# We want doctors too.
if = {
limit = { has_court_position = court_physician_court_position }
add = 50000
}
# Adventurers bring their court.
if = {
limit = {
scope:host = { has_government = landless_adventurer_government }
}
add = 500
}
# We want friends too.
if = {
limit = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:host }
}
add = 500
}
}
if = {
limit = {
bannable_serving_diarch_trigger = yes
}
add = -1000
}
}
excavation_entourage_extras_set_weighting_value = {
value = 0
if = {
limit = {
is_available_healthy_adult = yes
is_designated_diarch = no
}
# Base
add = 150
}
}
excavation_entourage_sodding_everyone_set_weighting_value = {
value = 0
if = {
limit = {
is_available_healthy_adult = yes
is_designated_diarch = no
}
# Base
add = 50
# Alright, now we're just grabbing everyone.
## Anyone who can fight.
}
}
excavation_province_reference_value = {
value = 0
# TERRAIN
if = {
limit = {
exists = var:recent_excavation_held
}
add = {
value = -10
multiply = var:recent_hunt_held
desc = hunt_success_chance.recent_hunt_held
}
}
}

View file

@ -0,0 +1,42 @@
excavation_remove_variables_effect = {
scope:host = {
if = {
limit = { is_alive = yes }
}
}
scope:activity = {
every_attending_character = {
}
}
}
excavation_invalidation_event_effect = {
if = {
limit = { is_in_list = attendees }
}
if = {
limit = { exists = scope:activity }
custom_tooltip = excavation_ends_tt
}
custom_tooltip = excavation_invalidated_warning_tt
}
excavation_activity_success_change_effect = {
scope:activity = {
if = {
limit = {
NOT = { exists = var:excavation_success_chance_event }
}
set_variable = { name = excavation_success_chance_event value = 0 }
}
change_variable = {
name = excavation_success_chance_event
add = excavation_activity_success_$CHANGE$_value
}
set_variable = {
name = excavation_success_chance
value = excavation_success_chance_value
}
}
custom_tooltip = excavation_activity_success_$CHANGE$_tt
}

View file

@ -159,7 +159,10 @@ graphical_wilderness_ocean_trigger = {
}
graphical_hills_trigger = {
terrain = hills
OR = {
terrain = tells
terrain = hills
}
}
### Scripted illustrations

View file

@ -0,0 +1,17 @@
can_excavate_trigger = {
NOR = {
has_trait = wounded_2
has_trait = wounded_3
has_trait = infirm
has_trait = maimed
has_trait = blind
}
has_contagious_deadly_disease_trigger = no
}
is_valid_excavation_site = {
OR = {
terrain = tells
has_special_building_slot = yes
}
}

View file

@ -0,0 +1,122 @@
lifestyle_antiquarian = {
icon = hunter.dds
category = lifestyle
same_opinion = 10
ruler_designer_cost = 20
stress_loss_mult = 0.05
diplomacy = 1
desc = {
first_valid = {
triggered_desc = {
trigger = {
NOT = { exists = this }
}
desc = trait_lifestyle_antiquarian_desc
}
desc = trait_lifestyle_antiquarian_character_desc
}
}
tracks = {
archaeologist = {
50 = {
stress_loss_mult = 0.05
prowess = 1
health = 0.05
learning = 1
glory_hound_opinion = 5
culture_modifier = {
parameter = hunting_traits_more_valued
monthly_prestige = 0.5
glory_hound_same_culture_opinion = 5
}
culture_modifier = {
parameter = hunting_traits_more_pious
monthly_piety = 0.3
glory_hound_same_faith_opinion = 5
}
culture_modifier = {
parameter = forest_trait_bonuses
forest_advantage = 1
taiga_advantage = 1
}
culture_modifier = {
parameter = jungle_trait_bonuses
jungle_advantage = 1
}
}
100 = {
stress_loss_mult = 0.1
prowess = 2
health = 0.15
learning = 1
glory_hound_opinion = 10
culture_modifier = {
parameter = hunting_traits_more_valued
monthly_prestige = 0.5
glory_hound_same_culture_opinion = 5
}
culture_modifier = {
parameter = hunting_traits_more_pious
monthly_piety = 0.4
glory_hound_same_faith_opinion = 5
}
culture_modifier = {
parameter = forest_trait_bonuses
forest_advantage = 1
taiga_advantage = 1
}
culture_modifier = {
parameter = jungle_trait_bonuses
jungle_advantage = 1
}
}
}
surveyer = {
50 = {
attraction_opinion = 5
stewardship = 1
learning = 1
courtly_opinion = 5
monthly_prestige = 0.25
culture_modifier = {
parameter = hunting_traits_more_valued
monthly_prestige = 0.5
courtly_same_culture_opinion = 5
}
culture_modifier = {
parameter = hunting_traits_more_pious
monthly_piety = 0.15
courtly_same_faith_opinion = 5
}
}
100 = {
attraction_opinion = 5
stewardship = 2
learning = 1
courtly_opinion = 10
monthly_prestige = 0.5
culture_modifier = {
parameter = hunting_traits_more_valued
monthly_prestige = 0.5
courtly_same_culture_opinion = 5
}
culture_modifier = {
parameter = hunting_traits_more_pious
monthly_piety = 0.4
courtly_same_faith_opinion = 5
}
}
}
}
compatibility = {
brave = @pos_compat_low
diligent = @pos_compat_low
craven = @neg_compat_low
lazy = @neg_compat_low
}
ai_energy = 15
}