Friday Facts #213 - The little things 2

Posted by Klonan on 2017-10-20

Hello, we are still here, working on the game.

Tutorial dependencies

As we were going through and polishing some of the mini-tutorials, we hit a bit of a problem. We wanted to introduce a new concept to the player, but we don't enforce or encourage any order to the tutorials. This means a player might start the ghost rail tutorial before he knows what ghosts are, or play the rail signal tutorial before he knows how to use the trains.

The solution is to add dependencies to the tutorials, so we recommend to the player, "You should play this tutorial before another".

Another advantage of this is that it sorts the tutorials better. Now suggested or unplayed tutorials will show at the top of the list, tutorials with missing dependencies will show in the middle, and complete tutorials will be at the bottom. From a tutorial design standpoint it makes things a lot easier. I can make safe assumptions about what skills the player has, and not have to worry about re-teaching the basics in every tutorial 'just in case'.

Logistic request pasting

Logistic chest pasting is a great quality of life feature when setting up 'shopping malls' with logistic bots. Drop a assembling machine and requester chest, set the recipe, then copy-paste from the assembler to the requester chest. The design question is how much should the logistic chest request? Quick recipes like electronic circuits need a lot of materials to avoid idle time, while items that are slow to craft, like modules, can result in a lot of materials sitting idle in the chest. This creates a lot of cases where the pasted amounts needed to be adjusted manually.

One of our community contributors, Mylon, designed a new system, which is now integrated into 0.16. The system scales the count of requested items to the crafting time of the recipe, and to the speed of the specific assembling machine. It aims to keep the chest supplied with 30 seconds of crafting ingredients. So notice in this example how the amounts varying between the machines being pasted from:

Adding modules and beacons to a design and then repeating the copy paste will recalculate the requested amounts, whereas before the amounts would need to be modified by hand. We still have a prototype defined recipe paste multiplier for very expensive items, like Nuclear reactors and Satellites, but overall this new system will be much more flexible, and deal with most of the annoying cases.

Buildability checks

"Is the thing in the cursor buildable where it is being held?". It sounds simple at first, but as the game has advanced it has quickly become anything but. Not all entities have the same buildability rules:

  • Gates can be built on rails - but not all rails.
  • Mining drills can only be built on the correct ore type.
  • Rail signals can only be built next to rails.
  • Offshore pumps can only be built at the edge of water and land.

To complicate things even more the rules change when building ghosts:

  • Other entities are ignored if they're marked for deconstruction.
  • Signals can be built anywhere instead of only next to rails.
  • Ghosts ignore ghosts of other forces.
  • Tile ghosts can't be built on tiles of the same type (it wouldn't do anything).

When shift clicking blueprints:

  • Trees and rocks are ignored - since they will be marked for deconstruction if they are in the way.
  • Anything that can't be built is just ignored in the blueprint.

There are so many special cases and so many combinations of when things can and can't be built (or can be ignored when building) that I've probably missed a few of them here. Something that has been missing for some time now has been making all of these variations render correctly in the preview you see before you build something.

A simple example is when holding a blueprint over a patch of ore with shift held down. Any trees and rocks in the way will be marked for deconstruction, and the ghosts will be placed. In 0.15 the preview would not be updated, so the drills would show as red. Now in 0.16 they rendered correctly:

It's a very small thing, but one more thing that when it 'just works', it makes the overall experience that much better, after all, perfection is just doing a lot of little things right.

As always, if you have any suggestions or ideas, please let us know on our forums.