• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

Stellaris Dev Diary #269 - Digging a Grave, and Galactic Matters

Hello there!

I’m CheerfulGoth, a content designer on Stellaris, and today I’m excited to share the design process behind the Tiyanki Grave Mound that was added in the Fornax patch!

Concept and Planning​

To allow new content designers to familiarize themselves with all aspects of the game, they are usually assigned some onboarding tasks. The Tiyanki Graveyard was a combination of two such tasks: designing a unique solar system with new ships on patrol, and creating an arc site.

Stellaris already includes a massive amount of content, and one of the hardest things as a new content designer is to avoid retelling stories. I decided to focus on space critters, because they have relatively few events associated with them, and most of these haven’t been touched in years. We already have a system where Tiyanki are born, so why not show where they die?

Something that struck me while rereading all our Tiyanki-related content was that killing them allows you to research the Regenerative Hull Tissue, but their superior healing abilities don’t have any narrative impact. This gave me the idea of a sort of ‘elephant graveyard’ full of wriggling corpses that don’t stop growing even if they’re dead.

After getting the main concept approved, it was time to build the event chain. The onboarding tasks required me to create new ship types, so I decided to make some static Tiyanki gravekeepers protecting the arc site. I knew some players would never hurt a Tiyanki, though, and I wanted to keep the content accessible to different playstyles. A special project was thus added, allowing pacifist players to lure away the gravekeepers without hurting them.

Prototype​

Communication between different departments is crucial when working on a team. I wanted my ball of corpses to look the part, but the art team was busy working on Toxoids — so instead of requesting art assets for a minor onboarding task, I experimented with what was already in the game. After all, we already have a perfectly good Tiyanki Matriarch corpse. Why not scale it down and spawn a couple copies around a planet, wrapping it in tentacles?

My first attempts, however, produced... Unintended results:

tiyanki_1 (1).png

Space in Stellaris is actually flat: all planets and spaceships are bound to an invisible 2D plane. We can offset the coordinate of ambient objects (decorations) to make them appear above or below the plane, but we usually use this kind of trick only for temporary VFX, like when a planet cracker hovers over a planet.

Figuring out how to wrap a planet in corpses took a bit of experimentation, but eventually we got there!

tiyanki2.jpg

Implementation​

Once implemented in-game, the content gets tested for bugs by QA. While testing, we noticed a curious issue: the graveyard looked fine when you encountered it the first time:

tiyanki3.jpg


But if you closed the system view and opened it again...

tiyanki4.jpg


...It ballooned into a fleshy monstrosity whose size rivaled the Sun!

The cause, as fellow Content Designer @Caligula Caesar discovered, turned out to be an obscure bug that resulted in offset decorations being incorrectly sized during initialization.. As mentioned above, we usually use offset for temporary VFX, so this bug has never been noticed since release!

Final Art​

At this point, the art department stared at my work in mild horror and decided it was best to create an unique asset for it. The graveyard looked fine, but smashing ambient objects together is not standard practice and could potentially create performance issues. Nevertheless, the horrible mishmash provided a useful reference for the concept art and the final model:

TiyankiGraveyard_01.jpg

final.jpg

Notes for modders​

My graveyard was dismantled, but I hope it will inspire you to create even worse abominations.
Here’s a handy summary on how to offset ambient objects. When spawning an event object, make sure sure to use use_3d_location = yes to be able to adjust its position.

CommandExampleResult
entity_offset

Offsets an object on the horizontal axis (left or right).

Takes both fixed values or a min/max amount (useful for randomly spawning multiple objects in a while block).
create_ambient_object = {
while = {
count = 10
create_ambient_object = {
type = "small_dead_tiyanki_object"
use_3d_location = yes
entity_offset = { min = -10 max = 10 }
location = this
}
}
}
image2021-10-21_16-13-10.png

Objects spawned with random horizontal offset.
entity_offset_height

Offsets an object on the vertical axis (up or down).

Takes both fixed values or a min/max amount (useful for randomly spawning multiple objects in a while block).
create_ambient_object = {
while = {
count = 10
create_ambient_object = {
type = "small_dead_tiyanki_object"
use_3d_location = yes
entity_offset_height = { min = -10 max = 10 }
location = this
}
}
}
image2021-10-21_16-13-58.png

Objects spawned with random vertical offset.
entity_offset_angle

Offsets the angle at which the object is spawned in relationship to its spawning point. Think of a clock: the base entity is the pivot, while the new objects are spawned around it.

Takes both fixed values or a min/max amount (useful for randomly spawning multiple objects in a while block).
create_ambient_object = {
while = {
count = 10
create_ambient_object = {
type = "small_dead_tiyanki_object"
use_3d_location = yes
entity_offset_angle = { min = 0 max = 360 }
location = this
}
}
}
image2021-10-21_16-15-29.png

Objects spawned with random angles.
entity_face_object

Automatically rotates the object towards the target.

Scope: planet, fleet, star, this.
create_ambient_object = {
type = "small_dead_tiyanki_object"
use_3d_location = yes
entity_face_object = star
}
image2021-10-22_10-7-16.png

Left group is set to face the star (not in the screen). Second group is set to face this (the planet they spawned from).
base_angle_towards

Determines the default angle of the object in relationship to the base entity.

Scope: planet, fleet, star, this.
create_ambient_object = {
type = "small_dead_tiyanki_object"
use_3d_location = yes
base_angle_towards = this
}
image2021-10-22_10-24-45.png

Both Tiyankis have an angle of 0°. One is set to base_angle_towards = star, and is aligned to its "face" like the planets. The second is set to base_angle_towards = this, where this is a planet with an angle of 180°


No tiyankis were harmed in the making of this dev diary.

-------

But that is not all! For I, @Caligula Caesar, have something quite cool to show off, namely some experimentations with galaxy shapes.
We haven’t made any changes to the available galaxy shapes for… I think since release, unless I am mistaken. Anyway, we wanted to spice things up a bit, and took a look at whether we could persuade our galaxy generator to create new shapes.

First we taught it a few new tricks. Now you can define a new galaxy in script and feed parameters into it, and it will be available to select in the galaxy generation screen. This means that when modders inevitably decide we didn’t go far enough in this dev diary, they can make their own combinations without replacing existing ones. It now also doesn’t determine its behaviour based on what the galaxy shape is called. With this I mean, in the current version the 2-spiral galaxy will always have two spiral arms, and you can merely tweak how thick and twisting these arms are - this is no longer the case. Now you can freely define how many arms you wish to have, and also combine them with a ring if you so please.

As a result, we could add a few new shapes. For instance, we could add some spiral galaxies with different numbers of arms:

LUTARlG8v-ajavCobLYSwrhNcN9lxddhLCOTjtpPpWWu8SEZpd3bFF_fCy0_KkQtUknde8KWtuGciFwPUpw8_A9Y-GNaUVgAARaWm0vADqWwoadaDByhQ6TxPbRyUf4hrnqux0uDVhYpIFoG7p9l9kqecrb9lXtAoq5xvz9XhUPeZZl8yI56hiyi1Q


NK1GP88G4_I7hdV5FYSLC_jKplRKdpuPk9AnfpEbZmO-jk90QLqbLMTjgkS8E3k1E-wshYkyAfSuM7i_yViiK49HK94uRnr-6hdMOBl9bCXiCxlb0TeEhoNjnkyystaIteIRops1gjwVCErS5ZdoYWS7cujxqMWXW5fASY83F_ELkRO5FIBrHIz0Jg


1iC_lKONUKkplNKq49lRUHoK1NKVgA6FUM8ro7Xr3bpn2e5IChj3fDE9ph2JQEClc-vXUVluFc8N_0ZBxohhfER2_GCufBhdX4XTMSkm-mfgA3HlMbQB2rW9Y7rBrnkYJf-6oVe1Q33qLrKE_1wgvCpwEsQ7s4EiODVZ3SiSKV1Dyo6JvjvFH_cgtw


But there was more we could do. In particular, we wanted to make a few galaxy shapes that would create some unusual galactic terrain, and some potentially interesting asymmetric starts. For instance, we could make a twist on the two-arm spiral galaxy that has very thick, slightly winding arms, resembling a bar galaxy:

F6WdytSWBCmPg_nj2kb8547hxpePWcFygXSlsydXQM_Ebmf7cHt082OCUw5I-tTRMLG8-AAke-WqsP9po4ZgfxAmLnLx_gUgf1J2aiwPZhs1_M3pFHM2CI76NGCLglZRUscJ-qMGJKZDCYRrDqe1jO0WCUg1tzOrwoMdIvWbe8vCRIcd3bJP6eiEXw

Credit: NASA and STScI​
SVFBGVJbnX5ZNBhg0pinQ2aWZRVLemOuHO42nrQ3LbJMusuZN0jPKCY1iWuUNkPFjJMwl3qkGDCuttxOellGh7J97B0OEhTiG-TQyLM1HkCSzKLbNklhF2sknKSfXuGUG90BI4SDgp4mW4-ZZJnxbAn242kkvHB7r6ldaRsC_ZRmFz4xgxkX42nb4Q

Yes, those two halves are connected by a single hyperlane

A ring galaxy and a spiral galaxy could be combined to make a “cartwheel” galaxy:

KYzoZqCJhQ3YSrr6BkSvWl-L3cRSxb5GJ8GkvB4s-JQy2pDnAoso3bj3e2eZ9J-KBKbjpqyB8TaEppWjAXDNC2v32IJB-IuC2HLsLsqxFL2zvB4RLdv8HC9v217itqotmG-Q0AEpAMe-zck0HVi5CkjrCQT_hwkAnIJvPRz6N7gYngNxvXQcG4HeUw

Credit: NASA, ESA, CSA, STScI and Webb ERO Production Team​
K88zv-F4g6ySjk3_I-LQFExTOOJk7RpsRy1jEbDbxAqGoXNDeDnmtgCZXtTH9FA5olvQY-MsfjcxpsO2aeAz3fbs4bj29EXDvzAoGu2PFPFWOpOhdoQU5muFvaaIt94kfGqUz2TthL85zSGr5jCQirxlFomox1vfR7Cx1V1SuRhbVb3RiLRTC2VnOw


Alternatively, we could omit an arm of a 4-arm spiral, and create something we dubbed the “hedgehog”:

v4OKroo3O7tD5AKP5wAxUPVDYp9pvLKJqWr-jUOBU_rd7QfxQ1PpdXCB7KPirCip0MZiF4Mxt2CvR5clPPjUc8Uiscy33Bp7YDg8jdze2sBpPJH4V6LgtuhvKYoErnV9yCdebiN-1ux9yPgCwnq-eFRehGvef6qS4tVJAQGv7tCbFT-3y6bj5GQCMQ


Finally, in a bout of silliness, I also added the “starburst”, which is a shape that is actually impossible in reality, but might create some interesting gameplay:

kJAdox3yzZpeVeHJ3GK_N-Z_qMRm3gvWYgDlZeh4APnd8KoKgi6d--QQlx-QYWopvb0JvO3Ducn7XY4dbUHm1tprTy5Vl7x-1karSm67nlrtxASenzTUElNJgmMvNkTX9muj3hoctGfO4GgWibum-qApIXMYMzYdL2HAf3TKgy17IZw6aUKQa10ocw


Another thing related to galaxy shapes which we’ve looked at a bit is static galaxies. This is the system modders use to generate a specific preset galaxy, for instance certain total conversion mods. It turns out that the code for generating a random galaxy (i.e. those we usually generate) and that used for static galaxies differ completely, which specifically became an issue during galaxy generation: the two different versions of the code probably did the same thing once upon a time, but inevitably the code has diverged, so modders reported numerous issues with static galaxies. For instance, it was not possible to use secondary species, and there were a number of small issues with starting setups, such as starbases and sectors not automatically spawning. It also wouldn’t call the empire_init on_actions, which would cause further divergence from how things would be if a regular galaxy was generated.

Anyway, I probably shouldn’t talk about this, since the code has not yet even been approved, but I tried to combine as much of the random galaxy and static galaxy code as possible, resolving a fair few issues with the latter, and hopefully making it more robust in the future. (Also, on the prompting of a modder, I added the ability to specify "effect = { }" in a particular system’s entry in a static galaxy. And you should now be able to create several static galaxy maps rather than being limited to one).

So, basically, for players who enjoy mods that create bespoke galaxies, you will probably be able to get access to much improved versions of these in the near future. (Can't promise it will definitely be in the next patch).
 
  • 108Like
  • 91Love
  • 10
  • 5
Reactions:
Hello there!

I’m CheerfulGoth...
Very important question:
How did you get your name, CheerfulGoth? I like it!
Oh and the graveyard is hecking neat too. Thanks for that ^_^ It's always cool when we get new stuff for our space critters. I havent actually seen the graveyard in-game yet, does the pacify option work for gestalts as well? Other pacify options (amoeba and crystals) dont exist for gestalts (except through the GC via other empires' proposal), hence my worry.
 
  • 1
Reactions:
What i would like to see beside that amazing new shapes are galaxys with more stars! Since hyper relays are a thing it feels 1000 stars are not enough anymore. Something like 2k or even 3k stars would be incredible cool.
I know of course that this could maybe come with some technical problems (at least modded bigger galaxys have those) but it's indeed quite high on my wish list.
We actually considered it, but it turned out to be a fairly bad idea for several reasons. As Iggy said, we'd have to overhaul the galaxy generator to not take exponentially longer to create. There's also places in the code where there's an assumption that we won't have more than a certain number of solar systems, so we would likely end up encountering some crashes or interesting bugs. And then there's that the game has some core assumptions of the galaxy map being a certain physical size which proved very hard to disentangle (we didn't manage it for the time being). Finally, even if we overcame these challenges, adding say 50% more stars than Huge galaxies would have considerable performance implications, since even if we reduced the number of habitable planets, there'd still eventually be a lot of habitats, and pathfinding becomes considerably more complicated the more nodes are involved.
Are flags set against the different arms and any systems in the inter-arm space? To let us hook in to that at startup and tweak hyperlanes or systems around arm-chokepoints a bit further?

Checking if I understand this right, is this different from the system effects of (e.g.) black holes and neutron stars?

I don't think there is an easy way to apply effects to all ships (without using an aura/starbase) or colonies (without some looping scripts, or spawning in a nebula and editing the 'in_nebula' effects).

Separately, would it be possible to get an on action for ships leaving a system via a hyperlane? Right now there are onactions for entering a system via hyperlane or using bypasses but not for leaving via HL.
  • (Something like This system from fleet, from from destination)
  • it would open up a bit of space for playing with dynamic hyperlane speeds (rather than them all being 1-2 days travel time, leaving a black hole system might reduce interstellar (IS) speed by 90%, for example, if base IS speed was slowed down, leaving a neutron star could speed you up, and so on).
I don't think flags are set on them. It's basically like the current ring or spiral galaxies. Just combined.

As for the effect = { }, it lets you run a solar system scope effect on that system. Happens after it has been initialised. E.g. you could decide to spawn the Tiyanki Graveyard system, but in this particular static galaxy, you want to double the number of Tiyanki in it, and in this effect field you'd be able to do so.
I'd love more like this, gameplay first, style galaxies. This one looks great though obviously not very balanced for all empires but I don't think that is a big problem. Have some empires spawn locations set in the in the petals, others closer to the core.

Would it be possible to make "split" galaxies/areas which would not have direct hyperlane connections at start of the game? Eg. connected through wormholes or maybe some higher rank Hyperlane which would require mid or late game tech to access? Kind of like "alien grade" hyperlanes in David Weber/Steve White Starfire series based on Starfire board game if I remember right.
Not via random galaxies - it seems to always want systems connected in some way, which is probably a good thing, because it could be annoying if it randomly happened to you. But we can manually spawn systems (there's one off the edge of the galactic map in 3.5 which you should totally disturb). We can also manually delete hyperlanes. And in the static galaxies I mentioned, one can define manually where each star should spawn and where the hyperlanes should be between them, so this would be very possible there.
 
  • 32
  • 4Like
Reactions:
Very important question:
How did you get your name, CheerfulGoth? I like it!
Oh and the graveyard is hecking neat too. Thanks for that ^_^ It's always cool when we get new stuff for our space critters. I havent actually seen the graveyard in-game yet, does the pacify option work for gestalts as well? Other pacify options (amoeba and crystals) dont exist for gestalts (except through the GC via other empires' proposal), hence my worry.
Actually, you can get the project to pacify amoebas as a gestalt when you get the "Lost amoeba" anomaly (Bubbles) WITHOUT finishing the first contact project for space amoebas.
 
  • 5
Reactions:
Actually, you can get the project to pacify amoebas as a gestalt when you get the "Lost amoeba" anomaly (Bubbles) WITHOUT finishing the first contact project for space amoebas.
Really? I'll have to test that, that's neat. Of course that means I need to find bubbles, havent seen her in a few games now.
 
  • 4Like
Reactions:
Very important question:
How did you get your name, CheerfulGoth? I like it!
Oh and the graveyard is hecking neat too. Thanks for that ^_^ It's always cool when we get new stuff for our space critters. I havent actually seen the graveyard in-game yet, does the pacify option work for gestalts as well? Other pacify options (amoeba and crystals) dont exist for gestalts (except through the GC via other empires' proposal), hence my worry.
as someone who just encountered it with a friendly hive, yes it does
 
  • 1Like
Reactions:
This "abomination" looks incredible, and quite interesting how you brought it to life. There's something about biological entities of various nature being the size of celestial bodies that is quite... unsettling. We need more!

But what got me -really- intrigued is the Ultima Vigilis System, now there's something there...
 
  • 2
  • 1Like
Reactions:
Another thing related to galaxy shapes which we’ve looked at a bit is static galaxies. This is the system modders use to generate a specific preset galaxy, for instance certain total conversion mods. It turns out that the code for generating a random galaxy (i.e. those we usually generate) and that used for static galaxies differ completely, which specifically became an issue during galaxy generation: the two different versions of the code probably did the same thing once upon a time, but inevitably the code has diverged, so modders reported numerous issues with static galaxies. For instance, it was not possible to use secondary species, and there were a number of small issues with starting setups, such as starbases and sectors not automatically spawning. It also wouldn’t call the empire_init on_actions, which would cause further divergence from how things would be if a regular galaxy was generated.


Anyway, I probably shouldn’t talk about this, since the code has not yet even been approved, but I tried to combine as much of the random galaxy and static galaxy code as possible, resolving a fair few issues with the latter, and hopefully making it more robust in the future. (Also, on the prompting of a modder, I added the ability to specify "effect = { }" in a particular system’s entry in a static galaxy. And you should now be able to create several static galaxy maps rather than being limited to one).

So, basically, for players who enjoy mods that create bespoke galaxies, you will probably be able to get access to much improved versions of these in the near future. (Can't promise it will definitely be in the next patch).

This is really, really good news, and I hope these changes do make it through to an upcoming release. I've made a huge preset handcrafted galaxy for a mod, and it is so frustrating to constantly experience issues with secondary species (it is a crapshoot whether or not they spawn, often not), as well as the empire_init actions. Thank you.
 
Yes, those two halves are connected by a single hyperlane
And that hyperline comes and go through a black hole, which means the Dimensional horror is keeping the two half of the galaxy separated :)
Nice setup for a game in which half the galaxy is just waiting to get invaded by an empire that already controls half of it :)
 
  • 5Haha
  • 3Like
Reactions:
You ppl from Paradox are making Stellaris be one my favorites strategy games ever! Hope Ck3 reach that, its in competition with other yet, I love the 2D interface the game have, i love looking at my ships over the planets and battles.

I'm sure with the new Web telescope a lot new ideas will come to you guys, maybe one day: Span 2 galaxies in a game play?

I love the new galaxies, gives lot idea of gameplay, maybe my problem is because i'm rational and perharps the Milk Way had or have some other species in some place in the galaxy but i can't just see the milk way being the UNE and Commonwealth territory only for now

You guys didn't talked about the New ships though...
 
  • 3Like
Reactions:
Pls add some of these galaxies as default selectable ones! I don't want to have to forego achievements in favour of more interesting galaxies! I've played 4 arm spirals and ring galaxies for the last.. 6 years now. Damn, that's a long time.
 
For the “Starburst” galaxy type, would it be possible to have an increased chance of wormholes or L-Gates at the ends of the spokes? I think that would make the gameplay in them much more interesting.

Also I’ll throw another comment asking for a map maker system/program. It would be a lot of work I’m guessing, but the ability to make custom maps and scenarios, and share them on the steam workshop, would MASSIVELY increase replayability and DLC sales ;)
 
  • 3
Reactions:
I love everything in this dev diary.
 
  • 4
Reactions:
New story content and customization options are always good. Keep up the good work.

Just a quick question: could it be possible to get at some point useable galaxy core? Unclaimable and uncolonizable space, riddled with black holes than could be used for travel (and maybe even to tell some cool stories).
 
  • 2
  • 1
Reactions:
Question: what are minimum galaxy sizes for each of these shapes?
Large for 6-arm spiral. Bar ("yingyang") galaxy works on tiny. 3-arm spiral works on small. The others need medium.
 
  • 24
  • 4Like
  • 1Love
Reactions:
instead of increasing the number of stars , you could try to increase the size of what is considerate a "system" .

we have already multiple stars system, but you could add way more stars ... you could even make "systems" the current "constellation" . so , the galatic map doesn't get bigger \ there is no particolary additional pathfinding involved .

toh, there is still the problem of alot more planets\habitable planets .
 
  • 6
  • 2
  • 1
Reactions:
@CheerfulGoth - do these work with megastructures (especially ring world segments)?

entity_face_object

base_angle_towards


Right now IIRC we can only create ring world objects which face the center of the system, but being able to create a ring world which faces some other object -- like a sun which orbits a black hole -- would be really cool.
 
  • 2Like
Reactions:
@CheerfulGoth

This seems really neat.

I do have a question though. The new Galaxy shapes are discussed as being a code change for modders. I don't know if you can say but as players can we expect new officially Galaxy shapes that do not require mods. Sometimes a nice vanilla game play experience is nice. I think it would be fun to see new shapes implemented into the vanilla game. I love that Stellaris does stick to a realistic galaxy approach and contains shapes that space has but I think the silly option looks awesome as well. It would be really cool to see some not so realistic galaxies find themselves in the core game for fun.
 
  • 2
Reactions: