Friday Facts #417 - Space Age development

Posted by kovarex on 2024-06-28

Hello,
we usually show finished stuff in Friday facts these days, but I personally always liked to have a peek behind the curtains and see the (temporary) mess there. This motivated me to do some kind of overview of how the overall expansion development felt from my perspective. If you are like me, you might appreciate it.

Our story starts in February 2021 with FFF-365 when we announced the plan to do the expansion pack.


The first year - 2021 - Creating the skeleton

Firstly, we focused on hiring, and the team was doubled to almost 30 people, with the GFX department notably expanding from 2 to 8 people.

Creating the plan - vertical slice

The first and obvious step, was a lot of long discussions about the high-level plan of the whole expansion. Since we wanted to iterate the design as soon as possible, we used the expression "vertical slice" very often. The vertical slice was meant to be the most bare-bones way of playing through the expansion so we could start improving based on the feedback. Retroactively, this was a very good idea.

We hired Earendel and he was keen on helping with the game design part. Because of his vast experience with modding and unprecedented productivity he was always able to provide a fully working draft of the planet and its mechanics very fast. If possible, he often wrote some of the mechanics draft with Lua scripting, to have the testable version before it was accepted and properly integrated into the engine in C++.

Earendel's drafts were always over the top when it comes to gameplay complexity, so we usually started by simplifying it to half of its original size, and then half again soon after... but it is way easier to shave off from a prototype, leaving the best bits, rather then creating things from scratch.

Planets

The next thing to do was the planets, as most of other stuff relates to them in one way or another. The class Planet was created on 2021-01-26 so it was basically a few days before the first expansion pack announcement. We always knew we wanted to have an expansion based on going to different planets, so the support for independent surfaces was in the game code for years already. Since mods were often using multiple surfaces, it was reasonably tested already. This saved us a lot of trouble, but there was still a lot of things to tweak to make the independent surfaces and planets work well enough to our standards.

At this time, we made the decision, that planets will be prototype based and tightly related to the progression, as opposed to exploration of semi-infinite randomly generated planets.

So we just decided on the main theme of each of the planets, and started laying the groundwork needed for that, like the possibility to specify certain conditions of where certain recipes be crafted, different properties of the planets affecting things like solar panels power, and also UI support to be able to switch between places comfortably.

Space platforms

Space platforms were the second most important part of the structure, as they connect the planets, and are related to other game sub-systems.

Elevated rails (FFF-378)

We knew that elevated rails just have to be part of the expansion from the start.
Since this was one of the biggest challenges of the expansion, it felt like a good call to start it ASAP.

Spoilables (FFF-414)

We didn't know the exact recipes and content we would need on Gleba, but we already knew spoilables would be needed, so the support was also implemented in the first year.


The second year - 2022 - First playable prototype

After a year (!), we had another update FFF-367, the TL;DR version is: "Big parts of the game are playable, and we are approaching a state where we can playtest from start to finish", with an asterisk of "In the most bare-bones way possible".

The first playthrough

That statement was true, as it was around this time when I started the first brave attempt to play the whole expansion from start to finish.

The playthrough was happening over the span of 7 months and it was nowhere near possible to actually play from start to finish at the beginning of it. But the idea was to try to push through by filling-in all the gaps between the individual pieces of functional content as I move forward in the game.

When I started, the planetary logistics part wasn't functional yet, so I had to expand the factory and test other things (like elevated rails and quality) before going to space.

Since I built bigger on Nauvis and I wanted to test elevated rails and the train system more, I was more motivated to improve it. This is when I made train interrupts and Klonan made the train groups (FFF-389).

Space logistics

The first version of space logistics was absolutely horrible to use as you had several semi-unrelated buildings on the space platform called space platform ejectors.

Each ejector was an individual building with independent inventory and semi-independent requests

Working with this was a pain, similar to the way things were supplied into the space, which was described later in the FFF-381.
So it was janky, but hey it was something we could build on.


Look, the engines have "flames" now

Pushing through planets

Vulcanus was the first planet to test, as it didn't have very specific technical requirements compared to other planets (Gleba with its agriculture and Fulgora with lightning wasn't ready yet).


Bare-bones Vulcanus with temporary elevated rails graphics.

Gleba was the second one. Regarding the landing pads, you can see one of the problems of the original design, where every landing pad was individually accepting some cargo from space. This had 3 main problems:

  1. It was very annoying to manage each of the item requests individually.
  2. Since the landing pads were not logistic providers yet, we tended to have this repeated pattern of landing pad → passive provider chest everywhere.
  3. Since you could build landing pads anywhere, it felt a little bit too cheesy, to be able to drop items from space anywhere needed. This is one of the reasons why now we have just one expandable landing pad per planet.


Bare-bones Gleba with early landing pads and way too many harvestable types of plants.

Fulgora was the third planet to visit, with its original base-game like design, it's the place where I started to be skeptical (more later).


Bare-bones Fulgora with temporary elevated rails graphics, and vanilla-like ore mining.

Long story short, 7 months later with 370 hours(!) clocked in the save, I was finally able to get to the end screen.

Shortly after that, we had an office LAN party, where we tried to do a multiplayer playthrough, to get more feedback and also to test the multiplayer. We played from Monday to Friday, and we barely got to the last planet quite exhausted on the last day, never really being able to finish the whole thing.

The first iteration and conclusion

Finishing the expansion for the first time was good and bad at the same time.

Good, because now we had a base, and it could only get better from here on out. The graphics, sound and music would be updated. The UX of the new systems would be improved, and the game would be balanced overall.

Bad, because I had some serious doubts about the expansion pack concept, mostly explained in the FFF-399.
There were a huge number of problems, and while the vast majority had a clear solution, some of them were different:

  1. It was too long (370 hours is way too much, even considering the teething problems).
  2. It was too repetitive (this is before the Fulgora, and other changes).
  3. Some of the mechanics were too clunky/annoying to use when scaled up (space platform logistics, trains, etc.).
  4. The sheer scale of all the things needed to be done was just too big and it often felt too grindy.

The conclusion was a very specific set of guidelines for the rest of the development:

  • The game progression needs to be faster. Mostly by lowering the cost of stuff, reducing unnecessary recipe steps, and increasing quality of life capabilities.
  • The planet specific gameplay needs to be more distinct.

This is when the Fulgora change was done, Vulcanus was altered to get basic resources from lava to avoid copper/iron/stone mining sites, and Gleba plants you harvested was reduced from 12(!) to 2. We also allowed the usage of planet specific producers to be exported to other places, which greatly increased the motivation to expand, and also made the progression faster and more rewarding, as these machines are strong.


The third year - 2023 - The grind

I played the game from start to finish once again, it took 240 hours, which is still way too much. But it needs to be considered that I went quite heavy with the factory size, trying to get almost everything in legendary quality, with the goal of 1 million science per minute (SPM).
I haven't reached 1M SPM yet, but I might get there before we release :).

Overall, it was shorter than the original 370 hours, and mainly, it felt more fun.

Most of the work probably went into thousands of little things, but let me name a few more significant changes.

Explaining the new stuff

We realized we need a better way to understand the new parts of the game, so Factoriopedia was created (FFF-397).
Since the mechanics were stabilised, we started to cover them with new tips and tricks, and while on it, the overall capabilities of these were improved.
We are now able to show GUI interactions in the simulations (I find it kind of cool, that we actually have two complete independent active UI states in the game, one in the simulation and one being controlled by the player). We also made a much more powerful skip trigger system, and reviewed practically all of the tip triggers to be more precise.

Gameplay and UI

We finished the first iteration of the Gleba enemy (to be shown later). We made further improvements to the remote view, as it is used more and more in the expansion.
The logistic groups were done and properly integrated into the refactored version of the space logistics, so the update of what is needed in the system of import planet -> platforms -> export planets could be done by a single user action.

The asteroid catcher

Finishing the asteroid catcher (FFF-385) was a big deal, mainly because we were very cautious about its logic being extremely light on performance.
Seeing it in-game was one of the big milestones in the way the platform felt.

Graphics

The looks of the planets were getting more into official shape.
The space platform wasn't just grey squares anymore (FFF-381).
The sounds of a lot of the new effects were covered, as well as a lot of old things in the backlog.
Most of the machines became fully animated final versions of what they were supposed to be.

This is also the time when we resumed the weekly FFF, as we felt we have enough to show weekly until the release.
It helped motivate us to finish things so they can be presented.


The fourth year - 2024 - Things coming together

In the fourth year, we finished the second game design iteration.
More and more team members also went ahead and finished their playthroughs, which was getting more and more smooth.

After that, we made even more shortenifications, which resulted in the second LAN party playthrough we had a week ago to be finished on day 4 without even trying too hard to speedrun.
This was a clear sign, that following the guidelines we created 2 years ago had results. And not only was it possible to finish playing the expansion faster, it also felt more fun.

The main problem was that in the last day, we weren't able to continue the multiplayer with everyone connected while having 60 UPS, we had to slow the game to 85% speed for everyone's computer being able to keep up.

Current state

The fluid changes (FFF-416) combined with the foundry (FFF-387), and the fact that trains with molten metals have way higher item density compared to iron/copper plates makes it possible to make endgame setups be very different compared to the base game end game.

I like how the foundry is super strong on its own, and it can alter the way you build, but it only works well as long as you have a steady stream of calcite coming from Vulcanus, as it is the only planet where you can mine it.
This is the example of when investigating problems like "why no iron", can lead you all the way to a different planet. And I love it!


With the usage of calcite, big mining productivity, and foundries, it gets very efficient to turn the mining outposts to molten metal exporters directly.


Foundries and electromagnetic plants are a good friends in the endgame.
Notice, that each of the outputs is 8 stacked (FFF-393) green belts, so it is equivalent of 85.3 fully compressed blue belts of production.
This is the power of legendary quality.

There is one more building typically combined with foundry and electromagnetic plants, which will be covered later.


The elevated production rates can force your rail intersection designs to get crazy.


The low stack size of coal and stone combined with the inability to melt it, makes their processing special in a way.


Since you can't push simple grid-like blueprints in the early stage of Vulcanus, combined with the difficult terrain, makes unique outposts.


The last picture could give you a glimpse into the possible scale of the game at the very end.
These bulk inserters (what used to be stack inserters) are being mass transported to another planet as an ingredient to create legendary stack inserters (FFF-393).

The third iteration

The third iteration is happening just now. The main focus is on the vast amount of feedback we got from the last LAN party.
It is going to be focused on 2 main categories:

  • Bugs, quality of life features and balancing.
  • Optimisations. The factory just gets bigger in Space Age, and we need to make some programmer magic to make it smooth.

Since things are getting stable and I'm starting to be pretty happy with the state of the game now, we are ready to give a specific date of the Space Age release...
Which we will tell you next week :)


As always, let us know your thoughts at the usual places.