In preparation for the Game Developer's Conference we wanted to put a polish pass on the planets in Star Control: Origins.

There are about 3,000 unique planets that are split into roughly 75 different classes. Each class of planet has its own challenges, as well as its own mineral deposits that you might want to collect (along with ruins, cities, smugglers, creatures, etc.).

Today, I'm going to walk you through how we create our planet classes.

Unique, Procedural and Hand-Crafted

You can't hand craft 3,500 planets. And it would not be a good thing for every planet class to be the same. So how do we solve this? Through a mixture of procedural generation and designer balance. And this gets me up to "Programmer art" level.

The Primordial world

One of the planet classes is known as a Primordial world. These are worlds that are still simmering with active volcanoes, have a variety of minerals, and occasionally have life.

A humble beginning

Yea...not so pretty

But that's ok. We can fix all that.

We start with our planet template which is called...wait for it...Primordial. This file refers to materials (what thinks look like) and stamps (what things are shaped like).

In the game, they're located here:

In assets\PlanetTemplate are the types for every planet. In assets\Terrain is the default.terrainmaterial set. In assets\Stamplists the stamplists are available. In assets\Stamps are the stamps the stamplists use.

Setting it up

From my Primoridal planet template, I set up the stats and choose my stamp list. The stamp list is a series of stamps with weighting on them that helps determine the odds of a given stamp being chosen for a particular planet at a particular time. This way, every planet looks different.

Choose our stamps and weights

Now that I've set up my stats (the weather, what minerals are likely to show up, odds of life, temperature, gravity, etc.), I choose what stamps will be on there. Now, the fun starts.

Code: xml < stamplist > < stamp asset = "Mountain01_Basev05" weight = "1" /> < stamp asset = "TextureVariation_Grass" weight = "1" /> < stamp asset = "TextureVariation_Flowersv1" weight = "1" /> < stamp asset = "ForestA_v1" weight = "1" /> < stamp asset = "Volcano01_Basev01" weight = "1" /> < stamp asset = "Hill01_WispyRockv01v02" weight = "1" /> </ stamplist >

That's just me picking 6 stamps and putting them up. Just curious what that will do. I hit F5 on the planet and...

Mmmm. Bumpy.

Trial and Error

Over the next several minutes I pick various other stamps and end up with this:

Code: xml < stamp asset = "ForestA_v1" weight = "1" /> < stamp asset = "ForestA_v2" weight = "1" /> < stamp asset = "CanyonCap01_Basev01" weight = "1" /> < stamp asset = "CanyonOpen01_Basev01" weight = "1" /> < stamp asset = "CanyonStraight01_Basev01" weight = "1" />

Time for some atmosphere

Back in the planet template file, I can set up my atmosphere. Basically, what color is it, how transparent it is, and how thick is it.

Final Result

My Primordial planet

Now it's ready to leave the designer's "programmer art" state and move to the artists for further polishing and iteration over the months.

This is just one class of planet. Each planet of this class will be different. But you can also create specific, individual planets that can look like anything you want.

I suspect there will be a big library of planet classes made by fans (as well as specific planets) that will easily blow away my quick work here, or even the final effort, based on what I've seen people do in other games.

Feel free to ask any questions.