Zone Rouge work part 1

Added a new flag that is special to Zone Rouge, which gives less wanderer XP and doesent give the traveler trait.
This commit is contained in:
GoTouchSomeGrass314 2026-06-06 23:44:20 +02:00
parent 80404571fc
commit 821cf5b44c
10 changed files with 238 additions and 1 deletions

View file

@ -579,7 +579,7 @@ zone_rouge_01 = {
type = special
flag = travel_point_of_interest_natural_feature
flag = travel_point_of_interest_zone_rouge
}
##########

View file

@ -0,0 +1,96 @@
GetSpecialBuildingTouristDescriptor = {
type = province
text = { # Zone Rouge
trigger = {
has_special_building = yes
has_building_or_higher = zone_rouge_01
}
localization_key = building_zone_rouge_destination_desc
}
}
GetTouristHoldingOutro = {
type = province
random_valid = yes
text = { #Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = building_zone_rouge_outro_desc
}
}
GetSpecialBuildingSong = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_building_with_flag = poi_special_buildings_zone_rouge
}
localization_key = event_song_natural_wonders_03
}
}
GetSpecialBuildingCatSleepingSpot = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_building_with_flag = poi_special_buildings_zone_rouge
}
localization_key = cats_sleeping_natural_wonders_01
}
}
GetSpecialBuildingNonsensicalClaim = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = guide_natural_wonder_5
}
}
GetSpecialBuildingPerson = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = natural_guide
}
}
MonumentTypeDesc = {
type = province
random_valid = yes
text = { # Zone Rouge
setup_scope = {
root = { save_scope_as = location }
}
trigger = {
has_travel_point_of_interest = poi_special_buildings_zone_rouge
}
localization_key = monument_beautiful_natural_wonder
}
}

View file

@ -405,6 +405,14 @@ on_building_completed = {
add_travel_point_of_interest = poi_special_buildings_economic
}
else_if = {
limit = {
has_building_with_flag = { flag = travel_point_of_interest_zone_rouge }
NOT = { has_travel_point_of_interest = poi_special_buildings_zone_rouge }
}
add_travel_point_of_interest = poi_special_buildings_zone_rouge
}
# The Builder event chain
if = {
limit = {

View file

@ -0,0 +1,11 @@
add_poi_zone_rouge_effect = {
if = {
limit = {
has_bp3_dlc_trigger = yes
}
poi_lifestyle_experience_effect = {
LIFESTYLE = wanderer
VALUE = travel_minor_lifestyle_xp
}
}
}

View file

@ -0,0 +1,35 @@
# Zone Rouge
poi_special_buildings_zone_rouge = {
build_province_list = {
every_special_building_province = {
limit = {
has_building_with_flag = { flag = travel_point_of_interest_zone_rouge }
}
add_to_list = provinces
}
}
on_visit = {
send_interface_toast = {
title = poi_special_buildings_zone_rouge.visit
left_icon = root
add_poi_zone_rouge_effect = yes
wanderer_lifestyle_destination_effect = yes
traveler_dnager_xp_effect = {
MIN = 2
MAX = 3
}
if = {
limit = {
has_government = landless_adventurer_government
has_perk = organized_muster_rolls_perk
}
add_gold = minor_gold_laamps_value
}
}
visiting_poi_effect = yes
}
}

View file

@ -0,0 +1,18 @@
Structure:
# Travel Points of Interest type
# Each entry represents a type of interesting locations to visit.
key = {
# Effect that gets triggered when a character visits a POI for the first time
# Root - Traveling character.
# scope:province - province being visited
on_visit = {}
# Optional, effect which is run monthly period to find which provinces have this type of point of interest
# If provinces are also added/removed via effects (`add_travel_point_of_interest`, `remove_travel_point_of_interest`),
# they need to be valid/invalid in this effect too.
#
# use add_to_list = provinces to return which provinces are valid
build_province_list = {}
}

View file

@ -0,0 +1,61 @@
Structure:
# Travel Option
key = {
# Trigger which has to be true to be shown while planning travel. Scope is the travel owner.
is_shown = {}
# Trigger which has to be true to be able to be picked while planning travel. Scope is the travel owner.
is_valid = {}
# Scripted cost which will be applied to the travel owner once the travel start, if the option is picked. Scope is the travel owner character.
# We have chosen to remove the gold cost and have the player choose what options they want to apply for a limited number of slots. Still maintaining it for special options.
cost = {}
# Travel modifier which gets applied to the travels safety/speed if the option is picked.
travel_modifier = {
travel_speed = number
travel_safety = number
}
# Character modifier that gets applied to the travel owner character
owner_modifier = {}
# Effect that gets triggered once the travel starts, or once the option is gained mid-travel.
# Root - Travel Owner.
# scope:travel_speed - Travel Speed (percentage points above 100%)
# scope:travel_safety - Travel Safety
on_applied_effect = {}
# Effect that gets triggered once the travel ends.
# Root - Travel Owner.
# scope:travel_speed - Travel Speed (percentage points above 100%)
# scope:travel_safety - Travel Safety
on_travel_end_effect = {}
### Brief: ai_will_do (scripted value int32)
# How likely is the AI to pick this option if valid? Options will be selected using weighted random.
# Options will be re-evaluated after each option is added.
#
# Root - Travel Plan.
# Extra scopes:
# scope:highest_future_danger_value - highest danger value on route; to compare with `travel_safety`
ai_will_do = {}
# Select which court characters are added to the travel entourage when this option is added.
# Weighted list is evaluated until all values are negative, or `max` is reached.
travel_entourage_selection = {
# List is all court characters.
# root = character in the travel plan owners' court
# scope:owner = character owning the travel plan
weight = {
value = 10
}
# Up to how many characters to select for a player
max = 2
# Up to how many characters to select for an AI
ai_max = 2
}
}

View file

@ -0,0 +1,3 @@
l_english:
TRAVEL_POINT_OF_INTEREST_TT_poi_special_buildings_zone_rouge:0 "[Province.GetHolding.GetCurrentSpecialBuildingType.GetName]"

View file

@ -0,0 +1,3 @@
l_english:
building_zone_rouge_destination_desc: "WIP"
building_zone_rouge_outro_desc: "WIP"

View file

@ -0,0 +1,2 @@
l_english:
poi_special_buildings_zone_rouge.visit:0 "Visited the [province.GetHolding.GetSpecialBuildingType.GetName]"