Population Growth

In the last couple of months, I’ve been busy fleshing out the outpost/colony management screen shown in the previous blog post. Well, by “fleshing out” I mean “making all the buttons actually do something”, which in a few cases involves adding an entirely new set of mechanics into the game. The new mechanic I’d like to talk about here is “population growth”, that is, how a market grows in in size over time. (Brief aside: I’ll be using “colony”, “market”, and “outpost” interchangeably for the rest of the post. Yes, I really do need to straighten out the terminology at some point.)

pg_gilead

Market Size
Each market has a “size”, from 1 to 10. The size is logarithmic, meaning a size 6 market has 10 times the population of a size 5 market, and so on. At least, that’s what it is in terms of backstory – we’d like to be able to represent a wide range of population levels on the various planets and stations in the Sector.

In terms of mechanics, one market being 10 times more bigger/more powerful than another would make smaller markets meaningless. So, for mechanics, market size tends to be treated as somewhat more linear.

Each market has a “growth rate”, which is the progress it makes towards going up in size, expressed as a percentage per month. The rate can be negative and progress can be lost, but a market will not go down in size if progress reaches zero.

Growth Rate
The tricky part is figuring out what the growth rate for a market should be, what factors influence it, and so on. I ended up implementing a part of it twice – first a  more complex solution, and then scaling back to something simpler. I’d like to talk about both – over-designing something is an easy trap to fall into, and I think it’s interesting to look at how it happens and how one might go about not doing it.

Before going into that, though, what do we want from the growth rate? That’s always the first question to ask, so that we know what we’re aiming for with our mechanics. There are three main goals:

1) It should be pretty quick early, and very slow later. We don’t want the player to wait 10 cycles before their newly-established size 3 outpost becomes a size 4 (regardless of what “realism” might dictate here), but likewise we don’t want the player getting a bunch of size 8 markets (the biggest in the Sector as it stands) easily.

2) There should be many ways the player can influence the growth rate, either by selecting where to establish an outpost in the first place, or by doing something later.

3) The game should keep track of the “population composition”, for use in doing fun things later. A “free port” might attract the more questionable type of immigrant (“your kind of scum”, perhaps); heavy industrial activity might attract the attention of the Luddic Path, and so on.

Given these considerations, any approach is likely to have two parts. The first is calculating “incoming” population composition; for example, it might be 10 parts independent, 5 parts criminal, and 3 parts refugees. The second is calculating how much population is coming in (or going out), that is, the actual growth rate.

Initial Approach
I’m happy to report that I successfully over-complicated both parts on first go-around!

The growth rate consisted of the base growth rate, and separate multipliers for incoming and outgoing immigration. You’d need those to be separate, since it doesn’t make sense for a “good” modifier to modify the outgoing rate, and vice versa.

Figuring out the incoming population composition involved a comparison of the current market to all markets within reach, and a calculation of how much immigration was going to go each way. This resulted in pretty nice-looking population compositions – you’re getting X amount of Tri-Tachyon immigrants, and some Hegemony, and a few independents sprinkled in. Oh, the potential to do all sorts of fun things, having that information under the hood!

Then, I went to put together the tooltip for the growth rate (known at that point as the immigration rate), and it just wasn’t happening. Explaining “this modifies the positives, this modifies the negatives, even though you’re just seeing one total value” – well, it’s doable, but it’s certainly an extra burden.

The main problem was that much of the base immigration rate was due to the inscrutable “compare to all markets within reach” calculation. Showing how your market compares to potentially 50+ other markets within reach? Not going to happen. Picking out the most important ones? Fighting a losing battle, at that point. Showing that you’re getting X% immigration – the main contributing factor, more often than not – due to “factors we will only vaguely explain”? Also no good.

In my defense, the plan was – and still is – to not show the incoming population composition at all (pirates aren’t going to declare themselves as such at customs, after all), but I brushed too much under the rug with that line of thinking, and that was exposed when putting the tooltip together.

Fortunately, the stuff that went wrong was all fairly minor – the overall structure seems sound, and replacing the complicated bits wasn’t too bad.

Current Approach
Thinking it through for the second time, I started by mocking up the tooltip in a text document. I think this might be a good approach for many things in general – I mean, thinking about the UI early is always a good idea, but tooltips in particular are where the most complicated bits have to be explained, which is different from a purely-functional UI where things don’t have to be explained to the same degree.

So, what’s the simplest possible thing? A bunch of +/- modifiers to the immigration rate, adjusted by the market size so that it’s slower for larger markets. Do we really need other multipliers? Probably not, they can be nice for some things, but they also make things more difficult because several multipliers could stack with extreme results.

What about how this market compares to other nearby markets, and all that? We can just chuck that, too, and replace it with a few flat modifiers that reflect it’s overall desirability as a destination – a few points for stability, a few points for having a larger market within reach, and so on.

One thing we lose is some detail in the incoming population composition – it’s still there, but just less detailed – but frankly that might be better expressed as one-time events, such as “X amount of immigration from <faction world>”, if it’s needed.

pg_ratetooltip

Importantly, we still can change the incoming population composition as needed. For example, a habitable world will attract more members of the Luddic Church, a Commerce industry will attract some Tri-Tachyon-aligned population, a “free port” condition will attract pirates, and the use of AI cores may attract other parties.

The nice thing about making the approach simpler is it’s easier to have lots of things tie into it in this way, so the net result of losing the complexity in the mechanics is getting more depth through having more connections with other mechanics and content.

There are many things the player can do to impact their market’s growth, but I’d like to spotlight two that are particularly significant.

Free Port
“Free port” is a market condition that you can toggle on the outpost management screen. It means that the port authority and immigration officials don’t ask too many questions – everything is legal to sell, it’s no trouble if your transponder is regrettably non-functional, and so on. The effects are as follows:

  • A penalty to stability
  • A bonus to population growth
  • A bonus to the market’s shipping and reach (especially meaningful when the market is small, and the flat bonus is relatively larger)

It’s an attractive condition to toggle on early, but may lead to more problems later on in the game, as the impact from the unsavory population it attracted is felt. It’s part of a general design approach where things that give you more power also lead to more trouble.

Growth Incentives
You can spend credits to increase population growth. Conceptually, it’s good to think of this as immigration incentives. The cost goes up quite quickly as market size goes up, and the incentives take some time to take full effect – up to several cycles – but can still be the main contributor to a market’s growth.

pg_invest

The idea here is to give the player things to spend an almost unlimited amount of credits on in the late game. Not a money-sink as such, because spending money this way isn’t required – instead, the goal is to have several such options that the player can choose from when investing their near-inevitable credit surplus. Credits are what’s going to make the late game move… but that’s a topic for another time.

 

Comment thread here.

 

Tags: , , , , ,

This entry was posted on Sunday, November 19th, 2017 at 3:13 pm and is filed under Development. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.