Jump to content
IGNORED

[Stellaris] Modding Help, Ideas and Suggestions


Raana

Recommended Posts

With all of the ideas now floating around for modding Stellaris I thought it might be a good idea to have a designated thread for helping each other out and passing around ideas. That way we can avoid hijacking already existing threads and maybe coordinate some tie-ins between mods and avoid potential overlaps as well.

 

Also, Passing around suggestions for event image artwork could be another thing to link in this thread.

 

There is also a Discord chat server started by mk40 for discussing Stellaris modding:  https://discord.gg/TrkNsGU

 

Edit: I need to update the list of up-to-date mods.

Link to comment

I actually just saw that post too and I was considering doing the same thing myself. I figured the altered shape would be a good way to set them apart from the vanilla icons, given the theme they're part of, and if anything I plan to use them in my own mod at least.

Link to comment

I found working with on_actions to be both highly rewarding and, at times, incredibly frustrating. So here's a notes that might help you out while modding.

 

Some on_actions don't have any scopes while others do. The best way to figure out which have scopes and which don't is too look at the on_action file in the game's folder.

 

You can use on_actions such as on_yearly_pulse and on_five_year_pulse to have events repeat.

 

# No scope, like on_game_start
on_yearly_pulse = {
	events = {
		interstellar_exchange.1	
	}
}

In my mod, Massa (yes I'm shamelessly plugging my mod in here), I use an on_yearly_pulse to call an event called interstellar_exchange.1

This event is then used to randomly select one of three country events.

 

# Interstellar Exchange Caller
event = {
	id = interstellar_exchange.1
	hide_window = yes
	is_triggered_only = yes
	
	immediate = {
		every_country = {
			limit = { is_ai = no }
			random_list = {
				50 = { country_event = { id = interstellar_exchange.2 } }
				30 = { country_event = { id = military_affairs.1 } }
				20 = { country_event = { id = robotsex.1 } }
			}
		}
	}
}

You can also randomize when exactly these events will fire by doing something like country_event = { id = robotsex.1 days = 50 random = 5 } which will set it up so that the event robotsex.1 will fire 50 days from now plus or minus five days.

 

When an on_action specifies scope that means that scope applies to whats in its own brackets and not what it may be calling. A solid example of this is the on_action on_planet_occupied. It specifies ROOT as being the planet, FROM as the planet owner, and FROMFROM as the planet occupier. What this means is if you have it set up so on_planet_occupied calls an event, that event will NOT have those same scopes (I think you can do things like PREVROOT and whatnot, but I haven't tested that yet).

 

I HIGHLY recommend you try using save_event_target_as when using on_actions as it can make things a lot simpler for you.

 

# A planets controller becomes a country not the same as the owner.
# Root = Planet
# From = Planet Owner
# FromFrom = Planet Controller (the one occupying)
on_planet_occupied = {
	FROMFROM = { save_event_target_as = planet_occupier }
	FROM = { save_event_target_as = planet_owner }
	ROOT = { save_event_target_as = invasion_location }
	events = { 
		sexyplanet_war.gate
	}
}

This way further done the chain I can simply use event_target:planet_occupier whenever I want to do something with the planet's occupier.

# Fires on on_planet_occupied from on_actions
planet_event = {
	id = sexyplanet_war.gate
	hide_window = yes
	is_triggered_only = yes
	
	
	immediate = {
		event_target:planet_occupier = {
			country_event = { id = sexyplanet_war.1 }
		}
		event_target:planet_owner = {
			country_event = { id = sexyplanet_war.2 }
		}
	}
	
}
#Spoils of War (Attacker)
country_event = {
	id = sexyplanet_war.1
	title = "sexyplanet_war.1.name"
	desc = "sexyplanet_war.1.desc"
	picture = GFX_xeno_gangrape_1
	show_sound = event_ground_battle
	location = event_target:invasion_location
	
	is_triggered_only = yes
	
	option = {
		name = sexyplanet_war.1.a
	}
	
	option = {
		name = sexyplanet_war.1.b
		Trigger = {
			event_target:planet_occupier = {
				OR = {
					has_ethic = ethic_militarist
					has_ethic = ethic_fanatic_militarist
				}
			}
		}
		add_influence = 10
	}
}

 

If this sounds like common sense to you then great! You are probably better at programming than I who spent days pulling his hair out trying to make an event fire whenever a planet was occupied (yes I figured it out and yes this code DOES work in game). For the rest of you hopefully I'll have saved you some of the pain I've suffered and maybe given you some ideas for your own mods.

Link to comment

While I hadn't any immediate plans for occupation events I'll have to keep those in mind if I do get any ideas.

 

The first two scripts, however, will be useful for some of the events I'm working on. I will need to make some minor adjustments since I want different events to trigger off of different conditions, but I think I saw the limit conditions I need in the vanilla files. So I don't think it'll be too tricky to do (could be wrong though haven't messed much with events until now).

Link to comment

I suspect I'll need some help when I start working on the second part of my mod. I'm planning on adding a number of 0 point cost "-phile" species traits exclusive to each other that I'm planning on tying each to an empire-wide sort of story event chain. Somewhat similar to the precursor events, but without the crapshoot that is finding each objective on planetary surveys.

 

Though if anyone knows the proper -phile prefix for something with tentacles I would appreciate it. I'm using cephalophile at the moment because cephalopods are tentacled creatures usually, but the actual cephalo- prefix actually means that something's "related to the head or skull."

Link to comment

I'm going to be toying around with a few possibilities for starting event chains that don't rely on surveys for the Primordial chain. A few things that might work though is 1) linking it to an on_action such as on_game_start or on_annual_pulse. 2) Give it a mean_time_to_happen. 3) Set it up to be similar to the Worm-in-Waiting event chain in that it activates when a ship of yours enters a system of a blackhole (you could probably set it up for any type of star or planet).

Link to comment

Scratch my previous troubles with opinion modifiers. Managed to figure them out so I can mix and match positive and negative AI empire opinions now.

 

Also, here's a preview and a download for the vector .svg file of the heart-shaped icons I'll be using in my own mod. If anyone's interested in using them as well.

5a6e03ee9d3e2_TraitsConcept.png.62931f5e1e2985a62f46d19b5a20bf8b.png

Traits.svg

Link to comment
  • 2 weeks later...

I updated the first post with the discord link (I think that's the right link) so there's an easy location to find it.

 

I also added some links to the more gameplay oriented Stellaris mods for the same reason. I know there are species portrait mods as well, but aside from Sexy Xenos I'm not sure which ones are up to date, and in the case of the Kagami species I'm not familiar with the setting they're from. So I'm not sure what to put as summaries for download links.

Link to comment
  • 2 weeks later...

This is driving me nuts.

 

#Futa sadists (hidden)
planet_event = {
	id = sexycolony.3
	hide_window = yes
	is_triggered_only = yes
	
	trigger = {
		has_owner = yes
		has_ground_combat = no
		is_occupied_flag = no
		Owner = { has_technology = tech_gene_tailoring }
		count_pops = {
			limit = {
				is_non_sapient_robot = no
				pop_has_trait = trait_behavior_sadistic 
				is_enslaved = no
			}
			count > 2
		}
		count_pops = {
			limit = {
				is_non_sapient_robot = no
				OR = {
					NOT = { pop_has_trait = trait_behavior_sadistic }
					AND = {
						pop_has_trait = trait_behavior_sadistic
						is_enslaved = yes
					}
				}
			}
			count > 2
		}	
	}

	immediate = {
		owner = { 
			country_event = { id = sexycolony.4 }
		}
	
	while = {
		limit = {
			count_pops = {
				limit = {
					is_non_sapient_robot = no
					is_enslaved = no
					pop_has_trait = trait_behavior_sadistic
					has_modifier = sadomasochist_fun
				}
				count < 2
			}
		}
		random_pop = {
			limit = {
				is_growing = no
				pop_has_trait = trait_behavior_sadistic
				is_enslaved = no
				NOT = {
					has_modifier = sadomasochist_fun
				}
			}
			add_modifier = {
				modifier = sadomasochist_fun
				days = 100
			}
		}
	}
	While = {
		limit = {
			count_pops = {
				limit = {
					is_non_sapient_robot = no
					NOR = {
						has_modifier = sadomasochist_fun
						has_modifier = abused_by_sadist
					}
					OR = {
						Not = { pop_has_trait = trait_behavior_sadistic }
						enslaved_sadist = yes
					}
				}
				count < 2
			}
		}
		random_pop = {
			limit = {
					is_non_sapient_robot = no
					NOR = {
						has_modifier = sadomasochist_fun
						has_modifier = abused_by_sadist
					}
					OR = {
						Not = { pop_has_trait = trait_behavior_sadistic }
						enslaved_sadist = yes
					}
			}
			IF = {
				limit = {
					This = { pop_has_trait = trait_behavior_masochistic }
				}
				add_modifier = {
							modifier = sadomasochist_fun
							days = 100
						}
				else = {
					add_modifier = {
						modifier = abused_by_sadist
						days = 100
					}
				}
			}
		}
	}
	}
}

So what's supposed to happen is that it calls a separate event which gives the description and image (this is due to limitations of the diplomatic window) and then find two sadist pops and give them the modifier sadomasochist_fun and then find another two pops who are either not sadists or are enslaved sadists and give them another modifier. I've tried everything, but I can't get it to look for those other pops (the nonsadists or enslaved sadists) and give them the modifier. The error log also isn't bringing up any issues. I'm at a complete loss here.

Link to comment

I'll admit I'm not super familiar with event modding yet so this may not necessarily help, but I remember trying a similar setup with an event that was separated by normal empires, hive empires and machine empires.

 

The intent was an event that would trigger when a leader leveled. It would pick which empire type the empire it triggered for qualified as. Then it would go through the process of randomly deciding if it would assign an appropriate trait, themed to the empire type, to the leader. It always worked for the normal empires because they were first on the list to be checked, but it never worked for the other two. I ended up having to separate each leader level check into their own events.

 

Something I would try is maybe put an AND = {} around the two count_pops in the trigger portion. Since I'm guessing you want it to only trigger when both are true for the world. Then you may have to separate the second population modifier application into a second, hidden event that is triggered.

 

Again, not sure if that will actually work, but it's the best guess I can think of with what I know about event scripting.

Link to comment
On 2/20/2018 at 12:40 AM, darkspleen said:

Hmm... Well its certainly worth a try.

Out of curiosity, did it work?

 

 

Also, for anyone interested. The Apocalypse update either changed or removed some of the modifiers used before the update so I had to go through and figure out which ones still worked for another mod of mine. So here's the list of modifiers I know still work (assuming I didn't miss any) for anyone that wants to use them. I tried splitting them into categories based on what they do:

 

Spoiler

General and/or Uncategorized


all_technology_research_speed = 0.10
num_tech_alternatives_add = 1
max_rivalries = 5
rivalry_influence_gain = 0.5
diplomacy_influence_cost = -0.5
leader_age = 10
leader_cost = 0.20
leader_skill_levels = 1
species_leader_exp_gain = 0.25
faction_influence_mult = 0.3
faction_happiness = 0.2
terraforming_cost_mult = -0.25
terraform_speed_mult = 0.25
edict_cost = -0.10
edict_length_mult = 1.00
force_disparity_fire_rate_mult = 0.5			# NEW in Apocalypse
megastructure_build_speed_mult = 1.00
damage_vs_country_type_fallen_empire_mult = 0.33
damage_vs_country_type_awakened_fallen_empire_mult = 0.33
mod_distance_to_capital_static_modifier_efficiency_mult = -0.5
BIOLOGICAL_species_trait_points_add = 1
ROBOT_species_trait_points_add = 1
modify_species_cost_mult = -0.1

 

Specific Research Branches


category_materials_research_speed_mult = 0.1
category_propulsion_research_speed_mult = 0.1
category_voidcraft_research_speed_mult = 0.1
category_industry_research_speed_mult = 0.1
category_field_manipulation_research_speed_mult = 0.1
category_particles_research_speed_mult = 0.1
category_computing_research_speed_mult = 0.1
category_psionics_research_speed_mult = 0.1
category_new_worlds_research_speed_mult = 0.1
category_statecraft_research_speed_mult = 0.1
category_biology_research_speed_mult = 0.1
category_military_theory_research_speed_mult = 0.1

Country and Subject Modifiers


country_resource_energy_mult = 0.20
country_resource_minerals_mult = 0.20
country_resource_food_mult = 0.20
country_resource_unity_mult = 0.10
country_resource_influence_mult = 0.10
country_resource_influence_add = 1
country_physics_tech_research_speed = 0.1
country_society_tech_research_speed = 0.1
country_engineering_tech_research_speed = 0.1
country_leader_cap = 1
country_leader_pool_size = 5
country_core_sector_system_cap = 5
country_sector_cap_add = 5
country_trust_growth = 0.50
country_trust_cap_add = 50
country_trade_attractiveness = 0.05
country_unrest_unhappy_pop_effect_mult = -0.10
country_unrest_unhappy_slave_effect_mult = -0.25
country_naval_cap_add = 80
country_naval_cap_mult = 0.1
country_command_limit_add = 20
country_ship_upgrade_cost_mult = -0.20
country_starbase_influence_cost_mult = -0.20		# NEW or CHANGED in Apocalypse
country_starbase_upkeep_mult = -0.10			# NEW or CHANGED in Apocalypse
country_starbase_capacity_add = 2			# NEW or CHANGED in Apocalypse
country_claim_influence_cost_mult = -0.20
country_border_friction_mult = -0.5
country_vassal_naval_capacity_contribution_mult = 0.50
country_subject_acceptance_add = 20
country_subject_power_penalty_mult = 2.0
country_subject_trust_cap_add = 50
country_subject_technology_sharing_mult = 0.30
country_integration_cooldown_mult = -0.50
subject_integration_influence_cost_mult = -0.5
subject_tribute_mult = 0.125
subject_influence_gain_mult = 0.5

Tile Modifiers


tile_resource_energy_mult = 0.10
tile_resource_minerals_mult = 0.10
tile_resource_food_mult = 0.10
tile_resource_unity_mult = 0.10
tile_resource_physics_research_mult = -0.75
tile_resource_society_research_mult = -0.75
tile_resource_engineering_research_mult = -0.75

Planetary Modifiers


planet_migration_all_pull = 0.25
planet_migration_xeno_pull = 0.50
planet_building_cost_mult = -0.1
planet_building_upkeep_mult = -0.15
planet_building_build_speed_mult = 0.10
planet_clear_blocker_cost_mult = -0.25
planet_clear_blocker_time_mult = -0.25
planet_unrest_mult = -0.1
planet_orbital_bombardment_damage = -0.75
planet_army_build_speed_mult = 0.50
planet_army_build_cost_mult = -0.25
planet_colony_development_speed_mult = 1.00
colony_start_num_pops_add = 1
tradition_cost_num_colonies_mult = -0.20		# CHANGED in Apocalypse (used to be Xeno pops)

Population Modifiers


pop_growth_speed = 0.10
pop_happiness = 0.05
pop_owner_happiness = 0.05
pop_other_species_owner_happiness = 0.05
pop_citizen_happiness = 0.05
pop_other_species_happiness = 0.05
pop_eff_wo_slaves = -0.1
pop_environment_tolerance = 0.05
pop_resource_output = 0.05
pop_slave_resource_output = 0.10
slave_mineral_output = 0.10
slave_food_output = 0.10
pop_robot_upkeep_mult = -0.10
pop_robot_build_speed_mult = 0.33
pop_robot_production_output = -0.20
pop_consumer_goods_mult = -0.15
pop_food_req_mult = -0.15
pop_migration_speed = 0.5
pop_resettlement_cost_mult = -0.5
pop_government_ethic_attraction = 0.50
pop_ethics_shift_speed_mult = 0.5
pop_ethic_xenophile_attraction_mult = 0.5
pop_ethic_xenophobe_attraction_mult = 0.5
pop_ethic_authoritarian_attraction_mult = 0.5
pop_ethic_egalitarian_attraction_mult = 0.5
pop_ethic_materialist_attraction_mult = 0.5
pop_ethic_spiritualist_attraction_mult = 0.5
pop_ethic_militarist_attraction_mult = 0.5
pop_ethic_pacifist_attraction_mult = 0.5

Ship Modifiers


weapon_type_kinetic_weapon_damage_mult = 0.15
weapon_type_energy_weapon_damage_mult = 0.15
weapon_type_explosive_weapon_damage_mult = 0.15
ship_upkeep_mult = -0.05
ship_weapon_damage = 1.0
ship_weapon_range_mult = 0.5
ship_hull_add = 50000
ship_shield_add = 100000
ship_hull_mult = 1.0
ship_armor_mult = 1.0					# CHANGED in Apocalypse
ship_shield_mult = 1.0
ship_evasion_mult = 0.05
ship_disengage_chance_mult = 0.25			# NEW in Apocalypse
ship_hull_regen_add_perc = 0.5
ship_armor_regen_add_perc = 0.5				# NEW in Apocalypse
ship_shield_regen_add_perc = 0.5
ship_hull_regen_add_static = 10
ship_armor_regen_add_static = 20			# NEW in Apocalypse
ship_shield_regen_add_static = 30
ship_tracking_add = -5
ship_fire_rate_mult = 0.20
ship_home_territory_fire_rate_mult = 0.40
ship_speed_mult = 0.20
ship_interstellar_speed_mult = 0.50               	#Note: Doesn't work in civics.
ship_speed_reduction = 0.5                       	#Note: Doesn't work in civics.
ship_sensor_range_add = 2
ship_anomaly_generation_chance_mult = 0.10
ship_anomaly_research_speed_mult = 0.20
ship_anomaly_fail_risk = -0.10
science_ship_survey_speed = 0.25
shipclass_science_ship_evasion_add = 30

Ship Class Modifiers


shipsize_corvette_build_cost_mult = -0.2
shipsize_destroyer_build_cost_mult = -0.2
shipsize_cruiser_build_cost_mult = -0.2
shipsize_battleship_build_cost_mult = -0.2
shipsize_colonizer_build_speed_mult = 1
shipsize_colonizer_build_cost_mult = -0.5
shipsize_science_build_cost_mult = -0.25
shipsize_constructor_build_cost_mult = -0.25
shipsize_mining_station_build_cost_mult = -0.25
shipclass_military_station_build_cost_mult = -0.15           #Defense Platform
shipclass_military_station_damage_mult = 0.25                #Defense Platform
shipclass_military_station_hull_mult = 0.25                  #Defense Platform
shipsize_military_station_small_build_cost_mult = -0.33      #Defense Platform, Not sure if the same type as above
shipsize_military_station_small_build_speed_mult = 1.00      #Defense Platform, Not sure if the same type as above

Starbase Modifiers (all are either new or their usage was changed in Apocalypse)


shipclass_starbase_damage_mult = 0.25
shipclass_starbase_hull_mult = 0.10
starbase_shipyard_build_cost_mult = -0.10
starbase_shipyard_build_speed_mult = 0.20
starbase_module_build_cost_mult  = -0.1
starbase_upgrade_cost_mult = -0.20
starbase_upgrade_speed_mult = 1.00
starbase_defensive_war_ship_build_speed_mult = 1.00

Army Modifiers


army_starting_experience_add = 100
army_experience_gain_mult = 0.33
army_upkeep_mult = -0.15
army_damage_mult = 0.15
army_attack_damage_mult = 0.5
army_defense_damage_mult = 0.2
army_morale_damage_mult = 0.15
army_morale = 0.2
army_attack_morale_mult = 0.5
army_defense_morale_mult = 0.5
army_health = 0.5
army_attack_health_mult = 0.5
army_defense_health_mult = 0.5
army_disengage_chance_mult = 0.20			# NEW in Apocalypse
army_collateral_damage_mult = -0.33			# NEW in Apocalypse

 

Editing as I find more.

Link to comment
  • 3 weeks later...

Hey there, totally newbie here. I thought about jumping into modding Stellaris. Got bit of coding experience, and so far, event doesn't seem to bother me. Though, I'm having some problem with .dds files. For some reason, when I convert png to dds, the icon looks a bit blurry. What program do you all use to make the dds files?

 

And a question to the community. What kind of mods do you all wish to see? Certain fetish? More image pack?

Link to comment

I am playing (or played) with all modifications of stellaris introduced here... And I found one problem that (in my point of view) should be solved. As player I am enjoying content of all these mods but there is that one problem. Traits that are the same.... but they are not the same. To be more specific there are traits with that are souposed to represent same thing but have different trait cost, different pros and cons. It would be awesome if there would be some (i hate that word) normalisation. 

I had to say that, i hate it but i play your awesome mods anyways... :smile: Keep it going. Wish you good luck and no problems with brackets

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...