Skip to content

Instantly share code, notes, and snippets.

@Akjosch
Created September 11, 2025 08:58
Show Gist options
  • Save Akjosch/ce54597c35441250d3e71dfa0bd7358f to your computer and use it in GitHub Desktop.
Save Akjosch/ce54597c35441250d3e71dfa0bd7358f to your computer and use it in GitHub Desktop.
Custom pre_ftl_tech_progress_situation for Stellaris, with more true-to-reality progress times
# Monthly Technological Progress of pre-FTL civilizations.
# 12200 years in total
# 10000 BC stone
# 4000 BC bronze
# 1200 BC iron
# 1300 AC late medieval
# 1500 AC renaissance
# 1700 AC steam
# 1800 AC industrial
# 1900 AC machine
# 1940 AC atomic
# 1960 AC early space
# 2200 AC end
# Total progress needed 210000 * 12 = 2520000
@stone_progress_rate = 35 # 6000 years
@bronze_progress_rate = 75 # 2800 years
@iron_progress_rate = 84 # 2500 years
@early_progress_rate = 1050 # 200 years (late medieval, renaissance)
@mid_progress_rate = 2100 # 100 years (steam, industrial)
@machine_progress_rate = 5250 # 40 years
@atomic_progress_rate = 10500 # 20 years
@early_space_progress_rate = 875 # 240 years
@low_awareness = 100
@partial_awareness = 200
@high_awareness = 300
@full_awareness = 400
# AI empires don't have pulse events, so we're using non-player facing situations to give them a monthly on-action
pre_ftl_tech_progress_situation = { # This situation's name-key is used in pre-FTL tech level UI code, do not change without code support!
picture = GFX_evt_acquire_asset
complete_icon_frame = GFX_situation_outcome_frame_blue
complete_icon = GFX_situation_outcome_meh
on_progress_complete = {
# Tech up and start the situation again!
custom_tooltip = situation_unknown_outcome_approach
hidden_effect = { destroy_situation = this }
owner = {
country_event = { id = preftl.0 }
}
}
on_abort = {
#Effects when Situation is cancelled via abort_trigger trigger
hidden_effect = { destroy_situation = this }
owner = {
country_event = { id = preftl.0 }
} #Allows situation to be aborted to 'force' technological progress
}
abort_trigger = {
owner = {
is_primitive = no
}
}
on_fail = {
log_error = "pre_ftl_tech_progress_situation situation failed, this is not meant to happen"
# Restart the situation
# if we don't do this, the game crashes to desktop when you try to open the diplomacy screen
custom_tooltip = situation_unknown_outcome_approach
hidden_effect = { destroy_situation = this }
owner = {
start_situation = {
type = pre_ftl_tech_progress_situation
}
}
}
on_monthly = {
random_events = {
95 = 0
5 = preftl.50 # Random event gatekeeper
}
events = {
preftl.5 # Technological progress & setback gatekeeper
preftl.20 # Societal Enlightenment gatekeeper
awareness.200 # Awareness Decay
}
}
stages = {
high_level = {
icon = GFX_situation_stage_1
icon_background = GFX_situation_stage_frame_blue
end = 2520000
}
}
monthly_progress = {
# Total: 2520000
base = 0
modifier = {
add = @stone_progress_rate
desc = stone_age
owner = {
has_country_flag = stone_age
}
}
modifier = {
add = @bronze_progress_rate
desc = bronze_age
owner = {
has_country_flag = bronze_age
}
}
modifier = {
add = @iron_progress_rate
desc = iron_age
owner = {
has_country_flag = iron_age
}
}
modifier = {
add = @early_progress_rate
desc = early_age
owner = {
OR = {
has_country_flag = late_medieval_age
has_country_flag = renaissance_age
}
}
}
modifier = {
add = @mid_progress_rate
desc = mid_age
owner = {
OR = {
has_country_flag = steam_age
has_country_flag = industrial_age
}
}
}
modifier = {
add = @machine_progress_rate
desc = machine_age
owner = {
has_country_flag = machine_age
}
}
modifier = {
add = @atomic_progress_rate
desc = atomic_age
owner = {
has_country_flag = atomic_age
}
}
modifier = {
add = @early_space_progress_rate
desc = early_space_age
owner = {
has_country_flag = early_space_age
}
}
modifier = {
add = @low_awareness
desc = awareness_low
owner = {
current_awareness_level = low
}
}
modifier = {
add = @partial_awareness
desc = awareness_partial
owner = {
current_awareness_level = medium
}
}
modifier = {
add = @high_awareness
desc = awareness_high
owner = {
current_awareness_level = high
}
}
modifier = {
add = @full_awareness
desc = awareness_full
owner = {
current_awareness_level = full
}
}
modifier = {
mult = 1.5
desc = acquired_tech
owner = {
has_country_flag = acquired_tech
}
}
modifier = {
mult = 2
desc = technological_breakthrough
has_situation_flag = technological_breakthrough
}
modifier = {
mult = 1.25
desc = technological_breakthrough
has_situation_flag = belives_the_great_gestalt
}
modifier = {
mult = 1.25
desc = technological_breakthrough
has_situation_flag = successful_asteroid_interception
}
modifier = {
mult = 0.25
desc = technological_setback
has_situation_flag = technological_setback
}
modifier = {
mult = 0.50
desc = technological_setback
mid_game_years_passed <= 0
}
modifier = {
mult = 0
desc = tech_frozen
owner = { has_country_flag = tech_frozen }
}
modifier = {
mult = 0
desc = tech_frozen
owner = {
capital_scope = {
is_planet_class = pc_habitat
}
}
}
modifier = {
mult = 3
desc = open_technological_enlightenment
owner = {
has_country_flag = open_technological_enlightenment_pact
capital_scope = {
has_observation_outpost = yes
observation_outpost_owner = {
if = {
limit = {
is_galactic_community_formed = yes
is_galactic_community_member = yes
}
NOT = { is_active_resolution = resolution_pre_ftl_stances_equal_standing }
}
else = {
always = yes
}
}
}
}
}
modifier = {
mult = 4.5
desc = open_technological_enlightenment
owner = {
has_country_flag = open_technological_enlightenment_pact
capital_scope = {
has_observation_outpost = yes
observation_outpost_owner = {
is_galactic_community_formed = yes
is_galactic_community_member = yes
is_active_resolution = resolution_pre_ftl_stances_equal_standing
}
}
}
}
modifier = {
mult = 1.5
desc = good_trade
owner = {
capital_scope = {
has_modifier = fruitful_coop_planet_mod
}
}
}
modifier = {
mult = 1.25
desc = payback_student
owner = {
has_country_flag = open_technological_enlightenment_pact
capital_scope = {
has_observation_outpost = yes
observation_outpost_owner = {
has_modifier = payback_student
}
}
}
}
}
approach = {
name = approach_revolt_do_nothing
icon = GFX_situation_approach_this_is_fine
icon_background = GFX_situation_approach_bg_yellow
default = yes
on_select = {
custom_tooltip = deficit_approach_do_nothing_tooltip
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment