Factorio Bloghttps://factorio.com/blog/rss2024-03-15T00:00:00+00:00WerkzeugFriday Facts #402 - Lightspeed circuitshttps://factorio.com/blog/post/fff-4022024-03-15T00:00:00Zkovarex, Rseding<p>
Hello,<br/>
if we have any circuit lovers reading, this is another dose of facts for you.
</p>
<hr>
<h3>Radar transmission network<author>kovarex</author></h3>
<p>
It might be useful sometimes, to send circuit signals over long distances. I personally never used it for anything, but when we were playtesting a while ago, Boskid insisted that we include circuit wires into our rail blueprints, because you never know when it might be useful.
</p>
<p>
I felt uneasy about it, because it goes against the coding principle of "write it when you need it", as it adds a bloat for something which might not even be useful later. But I understand, that if it actually becomes needed, it would be way harder to fix later.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-402-rail-wires.png"/>
<br/>This is how our rail system looked "just in case".
</p>
<p>
To avoid this dilemma, we added a long requested feature of wireless circuit transmission using Radars.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow" width="580px">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-402-radar-connection.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</p>
<p>
There are a lot of ways to do it, but we wanted to keep it simple. So we decided that there is just a single radar channel for each surface (still separated between red and green). This means, you don't have to configure anything, you just connect the wire and you are ready to go. If the radar loses power the circuit connection is severed.
</p>
<hr>
<h3>Cutting wires<author>kovarex</author></h3>
<p>
Since all of the circuit network improvements have motivated me to use it more these days, I got annoyed more and more by this problem:
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-402-move-goal.png" width="258px" />
<br/>I want to move the bottom set of combinators, but if I do it with cut/paste, all the wires between the 2 parts will be lost, and I have to re-wire it.
</p>
<p>
It became so annoying, that I just had to add this quality of life feature: to make it so the blueprint remembers the outside circuit wire connections, and tries to reconnect them if possible. To minimize problems, these connections are only remembered when using the cut tool, and are not (and cannot) ever be transferred into the blueprint library or blueprint export string.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow" width="330px">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-402-cut-paste-wires.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<hr>
<h3>Light speed is too slow. We need to go right to ludicrous speed!<author>Rseding</author></h3>
<p>
There's no such thing as "too fast" in Factorio. From the first machine placed, everything is about making them faster.
Faster belts, faster inserters, faster assembling machines and speed modules to make them even faster. But that's not
enough. Next you add beacons with speed modules, and then another and another.
</p>
<p>
But it's still not enough. It's never enough. Mods push the numbers even more and run into the limits of what the
<a href="https://forums.factorio.com/72618">engine itself can handle</a>.
</p>
<p>
It has been reported a 'few' times (<a href="https://forums.factorio.com/69490">69490</a> <a href="https://forums.factorio.com/107571">107571</a>
<a href="https://forums.factorio.com/60136">60136</a>) and every time we (I) said roughly the same thing: "crazy numbers get crazy results",
"unless base game runs into this, we don't want to make the crafting logic more complex/fragile", "just don't do that, 1
craft per tick is fast enough".
</p>
<p>
But then Space Age happened with its legendary speed modules and all of a sudden it's a base game problem and it was
time for me to "eat crow" and find a solution.
</p>
<h4>Handle the edge case but don't make the main case slower</h4>
<p>
Conceptually it's a simple fix: loop the crafting logic if it needs to run faster than 1 craft per tick. But things are never that
simple code-wise. Years of optimizations and features around assembling machines meant any changes done had a high
likelihood of breaking something if I didn't fully understand what each line of code was <i>supposed</i> to be doing, and
what it was actually doing.
</p>
<p>
After about 2 days of looking over the code, re-arranging, and writing comments explaining parts to myself, I had a plan
for how I was going to make it work. The final changes to make everything function correctly took about 1 hour to write,
and worked correctly the first try. That's not supposed to happen and left me with doubts. Several extra tests later,
and asking Boskid to try to break it, it was confirmed to be correct.
</p>
<p>
The 2 days of analyzing and understanding the existing code paid off!
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow", width="560px">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-402-superfast-foundry.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
<br/>A legendary foundry crafting at a swift +2500% speed, completing 4.33 crafts per tick.
</p>
<p>
The underlying issue has been fixed and (as far as I can tell) the only limit on how fast they can craft now is how many ingredients the
machine has and how much space is available in the output slots.
</p>
<hr>
<p>
As always, wirelessly transmit your thoughts to us at the usual places.
</p>
Friday Facts #401 - New terrain, new planethttps://factorio.com/blog/post/fff-4012024-03-08T00:00:00ZEarendel<p>
Surprise! There are 5 new planets in the expansion.
</p>
<p>
The first planet you arrive on is a strange new land, rich with iron, copper, coal, stone, oil, and uranium. Everything a starting factory needs and more. There's also water, fish, grass and trees. Yes, this is a fertile land, and we will thrive. We will rule over all this land, and we will call it... <strike>"This Land"</strike> "Nauvis".
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Nauvis planet icon"
title="Nauvis planet icon"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-nauvis-planet-icon.png"
style="box-shadow:none;width:256px;height:256px;"
/>
</p>
<p>
So yes, the new planet Nauvis is similar to the 1.1 version of the map, but there are some substantial updates. Hopefully this is a surprise for you, because updates to the base map weren't planned at all. It just got harder and harder to not make changes after getting more experience with the other planets and seeing things that were missing or broken.
</p>
<p>
For clarity, these changes affect the 2.0 version in general and are not exclusive to the expansion.
</p>
<p>
This has been a solo side project for me for a while and it's only just come to a conclusion. Anyway, here's the story:
</p>
<hr/>
<h3>
Stealth dunes
</h3>
<p>
After working on Fulgora, the Nauvis deserts weren't looking so good. In fact, they barely seemed like a proper desert at all. I know that the game 'had' sand dunes, but they never seemed to spawn in the areas near me. It's only flatish sand-dirt with a lot of brown grass even in the driest areas. I decided to investigate.
</p>
<p>
Earlier in 1.0's development there were sand dune decoratives in the deserts. Apparently the integration with tilesets wasn't satisfactory, so they were 'temporarily' removed. Well not removed completely, because if they were really removed then if they get put back they'd need to be respawned in existing games. Instead the decorations are still there in the game state, but they look like brown grass instead, just a temporary graphics swap. Unfortunately they were never put back.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Grassy desert"
title="Grassy desert"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-extreme-desert-1.1.png">
</p>
<p>
I wasn't a fan of the grassy desert so I enquired about changing it, but it seemed like this was an uncomfortable topic that no one really wanted to get into.
</p>
<p>
One evening I decided to clean up the old dune decorative graphics as a secret side project. I was already familiar with the assets because I'd used them in the Alien Biomes mod and I knew I could get something good done quickly.
</p>
<p>
This version uses relief effect tricks to better integrate with terrain. Basically making it much more transparent, but then adding low transparency pure white and black on top to modify the brightness of the terrain underneath.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Old dunes." title="Old dunes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-dunes-asset-before.png">
<img alt="New dunes." title="New dunes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-dunes-asset-after.png">
</div>
<p style="margin: 10px">
<i>
Old dunes | New dunes
</i>
</p>
</div>
<p>
The result looks good on all 3 of the sand types, so I could be more flexible with the placement. The old decoratives used a "peaks" autoplace format (which I won't go into, but it's an older, more limited system). I replaced it with a new noise expressions formula that's adapted from my code on other planets. That lets the dunes fade in more gradually over multiple sand types and give a nice transition effect.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Old dunes." title="Old dunes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-dunes-scene-before.png">
<img alt="New dunes." title="New dunes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-dunes-scene-after.png">
</div>
<p style="margin: 10px">
<i>
Old dunes | New dunes
</i>
</p>
</div>
<p>
The PR (pull request) to get the changes made in the main game was successful (and with no drama), so my stealth dunes project ended up as a first foot in the door to changing the Nauvis map generation.
</p>
<hr/>
<h3>
Investigating missing decoratives
</h3>
<p>
I started noticing that some of the other decoratives that I was familiar with from the graphics files didn't seem to appear in the world. Looking through the decorative placement code each one seemed to be more or less correct, or at least reasonable. They had the correct graphics, they were assigned to the correct planet, and their assigned spawn regions didn't have impossible values, so nothing obvious was wrong. But then I noticed something else, a pattern, a set of similarities. Some of the settings were uncomfortably similar, and in fact there were some that were identical to other decoratives.
</p>
<p>
That might not sound like a big deal but here's why it is. The placement of one decorative excludes the placement of other decoratives that would be placed after. They block each other. If they're trying to place in different places that's fine. If they have some overlap that's okay, the 2nd one will only appear where the 1st one didn't. If the settings are identical though, the 2nd decorative will never get placed anywhere.
</p>
<p>
So that's a problem, but also an opportunity.
</p>
<p>
This is a great way to use the skills learned from the other planets to improve the Nauvis decoratives. Not only can the new system be faster, but it can just look a lot better in terms of distribution and controlled placement.
</p>
<p>
I started mapping out all the Nauvis decoratives. There are 3 axis variables that control placement: moisture, temperature and aux. Aux is the "terrain type" variable that controls differences like the Nauvis yellow desert from the Nauvis red(-ish but still mostly yellow-brown) desert. These control the wide scale distribution, but there's also a "noise layer" variable that controls the smaller scale placement and patchiness and is like a 4th axis but with discrete increments.
</p>
<p>
It's good to map this out visually to check for unwanted overlaps, desired share of the possibility space, etc. There is a lot more overlap than I was expecting. Some decoratives were missing completely, but over half of them had their range heavily restricted by other decoratives getting in the way.
</p>
<p>
Mapping the 4D state isn't so bad, I've developed some systems for Space Exploration to deal with a 12D system, so 4D is a nice break in comparison. I can use the 3 dimensional axis in blender (XYZ) to display the main volumes occupied. The 4th axis for noise layer is the colour of the box, which in this case is really convenient because the noise layer is discrete and rangeless (it has a single value, not a min-max range).
</p>
<p>
Here's the fixed distribution. The previous state was all over the place, but I don't have a copy of that (and I don't want to do the data entry to recreate it).
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Decorative placement volumes"
title="Decorative placement volumes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-placement-volumes.png">
<i>The new decorative placement volumes visualised in blender.</i>
</p>
<p>
The old system had an extra limitation in that it can't do decorative groupings, like having large variants in the middle of a cluster and small ones further out. This wasn't problematic enough on it's own to deserve an upgrade, but being able to improve this is another side benefit.
</p>
<p>
The new system has everything remapped so that everything can be placed, but that's just the tip of the iceberg. Things have moved around to accentuate certain areas of the map. Deserts are drier. Some arid areas have more red plants, other areas more white plants. In the grassy areas there are many subregions with different mixes of plants and more clustering.
</p>
<style>
.decorative-flex-grid {
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
}
.decorative-flex-grid img {
width: 100%;
max-width: 525px;
margin: 5px;
}
</style>
<p class="decorative-flex-grid" style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-01.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-02.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-03.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-04.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-05.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-06.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-07.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-08.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-09.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-10.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-11.png">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-decorative-shots-12.png">
</p>
<p>
Sure most of it will get paved with concrete, but it feels more meaningful if that was the only area on your map (so far) that looked this way.
</p>
<hr/>
<h3>
Nauvis cliffs
</h3>
<p>
Cliffs are annoying, right? You think you'll be able to get rid of them in a few minutes so you build like they're not even there, but they just get in the way. The concept of a cliff fort sounds cool, maybe you've experimented with placing some turrets defended by cliffs, but it never works as well as you hope. Large lakes are useful barriers, but cliffs just aren't. Why is that?
</p>
<p>
The first reason is that cliffs have loads of gaps. Every gap needs to be defended, so if you have a gap in the cliff every 6-ish cliff segments then you more or less need continuous turret coverage anyway. Yes the cliff means you need fewer walls, but the enemies only need 1 gap to get through, and following a cliff is harder to build around than a good defended wall blueprint.
</p>
<p>
The second reason is that cliffs follow elevation bands. Think about it. A lake is a good defensive obstacle. You'd probably make walls as lines between lakes if they're conveniently placed. The cliffs, though, use the same elevation data as the lake. This means that in most cases the cliff is just an extra ring around the lake, and that's not useful. A cliff parallel to a lake is mainly defending against the lake direction, but there's already a lake there doing a better job, (or it's defending the coast from inland but that's not often useful either). In most cases the cliff ends up in the way if you try to make a wall between two lakes, and often it gets in the way twice.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Cliffs in Factorio 1.1"
title="Cliffs in Factorio 1.1"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-cliffs-elevation-1.1.png">
<i>Cliffs in 1.1. (High cliffiness to show the lines).</i>
</p>
<p>
For Nauvis the real objective becomes clear. If we're stuck with cliffs here, then they should exist in the most useful, least annoying way possible. This 'simple' idea ended up turning into a planet generation overhaul.
</p>
<hr/>
<h3>
Mesas terrain
</h3>
<p>
The first attempt was based around the idea of having a series of defensible plateaus. They'd have some cliffs around them, but they wouldn't follow the same lines as the lakes. To do this the land above water was mostly flattened and then the hills were added to the existing land separately.
</p>
<p>
The result was better than 1.1, but still not good enough. The cliffs wouldn't be in the way as much as 1.1, but they were only marginally more useful than before. The problem was a lack of good control over where the gaps in the cliffs go. Too many gaps in the cliff mean they're not useful as barriers against enemies while still getting in the way of building.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Cliffs in Nauvis rebuild attempt 1."
title="Cliffs in Nauvis rebuild attempt 1."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-cliffs-elevation-mesas-1.png">
<i>Cliffs in Nauvis rebuild attempt 1. (High cliffiness to show the lines).</i>
</p>
<p>
What's really needed is longer unbroken cliffs, but fewer cliffs in total. Sadly, there was no way to do that.
</p>
<p>
Let's go on a tangent for a moment.
</p>
<hr/>
<h3>
Precise cliffs
</h3>
<p>
I usually try not to look at the C++ code because every time I do I get compelled to start changing thingsā¦ (like the fluid mechanics) when really I should be focussing on other things. The call of the cliffs was just too strong, and before I knew it I was rewriting some of the core cliff placement code.
</p>
<p>
The first time this happened was when I was working on Fulgora. It was impossible to make the cliffs following the intricately placed island edges. It just didn't seem to be possible to make the cliffs and tiles match up. I found that the reason is because the cliffs are "smoothed".
</p>
<p>
Smoothing is an attempt to make cliffs coherent even when the elevation data is noisy. It was needed on old Nauvis because the elevation gets messy sometimes.
</p>
<p>
The smoothing was a nightmare for planets that need more precise cliff placement like Fulgora. Fulgora also doesn't have an erratic elevation so the smoothing wouldn't do anything useful. My first change to the cliffs C++ code was adding a way to disable smoothing on some surfaces. Suddenly all the cliffs snapped into their proper place. The cliff problem on Fulgora had been plaguing me for weeks, so to say this was a relief is an understatement.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Fulgora with cliff smoothing." title="Fulgora with cliff smoothing."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-fulgora-cliffs-before.png">
<img alt="Fulgora without cliff smoothing." title="Fulgora without cliff smoothing."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-fulgora-cliffs-after.png">
</div>
<p style="margin: 10px">
<i>
With smoothing | Without smoothing
<br/>
Please slide the white bar left and right. So satisfying.
</i>
</p>
</div>
<hr/>
<h3>
Freeform cliffs
</h3>
<p>
Back to the plan for Nauvis. I'd been thinking about the cliff situation for a while. Now that I was more familiar with the core cliff spawning code I saw a clear way of making some minor changes that would let the cliffs use a completely different noise expression for their placement.
</p>
<p>
This means that cliffs can go in directions completely independent of the planet's water. They'd use the water elevation by default, but a planet could specify a different expression if they want to.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Ideal cliff lines."
title="Ideal cliff lines."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-cliff-placement-ideal.png">
<i>
Left: Lots of cliffs but none are useful.
<br/>
Right: Fewer cliffs and has the potential to be useful.
</i>
</p>
<p>
The main plan was to make a small number of long cliffs as mentioned earlier. Fewer of them means they wouldn't get in the way as much. Long unbroken cliffs would be a better barrier against enemies, but it's also a better barrier to your base expansion, and that's a good thing.
</p>
<p>
If there's a huge cliff you're less likely to ignore it and build into it, you're more likely to build away from it. By affecting your large-scale building more, it affects your small-scale building less, and that's much less annoying.
</p>
<p>
Fewer cliffs inherently means they're also in the way less, but this is a secondary concern because you can always use the terrain controls to affect this as you like. The shape when they are there is the most important thing to justify their existence.
</p>
<p>
The plateau shapes from earlier were still a good starting place for cliff placement. It's a good starting shape for larger plateaus, but can also be used for effects like canyons. The biggest difference is scale, the features are just much larger.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Debug visualisation of cliff plateaus."
title="Debug visualisation of cliff plateaus."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-plateaus-debug.png">
<i>
Debug visualisation of cliff plateaus. Dark is a low area, bright is a high area.
</i>
</p>
<p>
This leads into another nice opportunity. The cliff "elevation" at this point is completely separate from the water elevation, but when you have a line of cliffs heading to the water, you expect the coastline to be different showing that the area above the cliff would extend further into the water as that area is higher.
</p>
<p>
So that's what I did. The cliff elevation is added to the water elevation. This creates some nice terrain features. River-like sections that lead to canyons, peninsulas guarded by cliffs, and some nice new islands.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="A river-like formation."
title="A river-like formation."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-river.png">
<i>
A river-like formation.
</i>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="A canyon-like formation."
title="A canyon-like formation."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-canyon.png">
<i>
A canyon-like formation.
</i>
</p>
<hr/>
<h3>
Remaking the terrain
</h3>
<p>
The problem is that adding the cliff elevation to water elevation decreases the amount of water. The water level can be adjusted to add more water back, but that mostly floods the canyons areas. It's the main disadvantage of the plateau shapes being surrounded by lower land, if the water level is higher it all ends up as disconnected islands. That's not ideal for Factorio because you get cut off from biters and need landfill or elevated rail to connect areas. It's better if most of the land stays connected.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Problem: Plateaus tend to create islands."
title="Problem: Plateaus tend to create islands."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-plateaus-flooded.png">
<i>
Problem: Plateaus tend to create islands.
</i>
</p>
<p>
You may remember from <a href="https://factorio.com/blog/post/fff-390">FFF-390</a> that I already have a solution to this problem. Ridge-based elevation where you have narrow strips of connected land while the rest is mostly water in disconnected lakes. It's basically the opposite of the plateaus. Using this sort of noise to make more reliable land bridges, mixing in the base terrain, and then adding the raised cliff areas, gives a really nice result for gameplay, and it looks great too.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Plateaus" title="Plateaus"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-plateaus-flooded.png">
<img alt="Mixed terrain." title="Mixed terrain."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-plateaus-placed.png">
</div>
<p style="margin: 10px">
<i>
The same raw plateaus as before. | The actual terrain of plateaus mixed with other layers.
<br/>
Notice that on the mixed terrain, the coastline gets affected by the plateau shapes, and inland areas get cliffs in the same pattern.
</i>
</p>
</div>
<p>
But wait, this has gone beyond just tweaking the terrain for better cliffs. This is getting towards overhaul territory. If it's already going to change that much, let's just make the Nauvis map the best it can be.
</p>
<p>
So that's what I did.
</p>
<p>
Let's start with the water slider. The minimum amount of water is almost all land, but there are occasional small lakes that are few and far between.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Min water, 100% scale" title="Min water, 100% scale"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-water-min.png">
<img alt="Max water, 100% scale." title="Max water, 100% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-water-max.png">
</div>
<p style="margin: 10px">
<i>
Min water, 100% scale. | Max water, 100% scale.
</i>
</p>
</div>
<p>
On the other extreme, maxed-out water results in nice-looking clusters of islands, an archipelago.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Min water, 25% scale" title="Min water, 25% scale"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-water-min-25.png">
<img alt="Max water, 25% scale." title="Max water, 25% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-water-max-25.png">
</div>
<p style="margin: 10px">
<i>
Min water, 25% scale. | Max water, 25% scale.
</i>
</p>
</div>
<p>
Once the terrain is set up to handle these extreme water values well, it allows for some macro-variation if the map is set to normal values too. On a "medium water" setting (the default), then as you get further from the surface middle the land starts to oscillate between these extremes to make some massive lakes and wide plains. It's much more varied than before.
</p>
<p>
Starting in deserts has been a common problem. I added an additional slider so that you can customise the starting area moisture without affecting the rest of the world. A forest start is significantly easier.
</p>
<p>
The terrain types for above and below cliffs have been adjusted very slightly so that sometimes there's a slight terrain difference. It's a small point, but makes it feel more 3d and integrated into the world.
</p>
<hr/>
<h3>
A dead end
</h3>
<p>
A lot of things were working really well. The terrain looked much better, it was better to play on, but it wasn't perfect.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="A canyon path blocked by water."
title="A canyon path blocked by water.."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-blocked-canyon.png">
<i>
A canyon path blocked by water.
</i>
</p>
<p>
When exploring by car, a lot of the old problems with exploration and navigation were still present. You follow a gap between forests but there's a small lake blocking the path. You follow a line of cliffs for a gap, but it's blocked by trees. But now there's a new problem where you can follow a land bridge, but then there's a perpendicular cliff blocking your path.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="A tree path blocked by a cliff."
title="A tree path blocked by a cliff."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-blocked-trees.png">
<i>
A tree path blocked by a cliff.
</i>
</p>
<p>
The problem is the cliff system, the land bridge system, and the trees system don't know anything about each other. That's not really solvable though, because the tree system still used the same 'peaks' definitions as the decoratives mentioned earlier.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="A landbridge blocked by trees."
title="A landbridge blocked by trees."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-blocked-landbridge.png">
<i>
A landbridge blocked by trees.
</i>
</p>
<p>
So I changed that too.
</p>
<hr/>
<h3>
Forest noise
</h3>
<p>
Like with the decoratives, the more I looked into the trees system the more problems I found. In general it was a bit better because 'most' of the trees were capable of spawning, but there was one tree that was completely excluded because it required a temperature that didn't exist on the planet.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Tree placement volumes"
title="Tree placement volumes"
src="https://cdn.factorio.com/assets/blog-sync/fff-401-odd-tree-volume.png">
<i>The cage boxes show the new tree placement volumes, except the box for 1 tree has been put back to it's original place. Can you guess which one it is?</i>
</p>
<p>
These sorts of problems are very hard to prevent. It takes a huge amount of organisation and understanding to find a lot of these problems. Even then it takes a while to build a complete picture of what's going on, so when some small thing needs to be adjusted, like adjusting the noise that generates temperature, it's difficult to tell if you've accidentally made a particular tree never spawn. If you change the noise layer of a decorative, you check it and that decorative looks fine, but it's hard to tell if you've made some other random decorative never spawn. We do have tests to warn against accidental changes but sometimes these negatives get mixed in with other changes where it's expected that map generation will have changed so they don't get noticed.
</p>
<p>
Anyway, as with the decoratives, the tree placement has been changed to make areas more characterful.
</p>
<p>
As before dry areas generally have reduced tree density while moist areas have more but the difference is more extreme and more consistent. The absolute zero-moisture desert now doesn't have any trees at all.
</p>
<p>
Do any of these trees look new to you?
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-trees-01.png">
</p>
<p>
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-trees-02.png">
</p>
<p>
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-trees-03.png">
</p>
<p>
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-trees-04.png">
</p>
<p>
All of this looks nice, which is great, but it's really all for the end goal of integrating the trees with the other systems for better gameplay.
</p>
<hr/>
<h3>
Natural paths
</h3>
<p>
This is what really ties everything together.
</p>
<p>
The land bridges are defined by ridges, meaning there's a continuous ribbon that determines the high point. When there's a land bridge, this ribbon line travels roughly down the middle of the strip of land. These ribbons are areas that should be kept clear, so they're added to a list of paths.
</p>
<p>
The plateaus actually use a very similar system to the ridges but it's inverted. The ribbon lines instead of being high points are low points, essentially the "canyon" areas between the hills. If you're following a cliff edge from below you'll often get funnelled into these areas, so it's important that these areas are not blocked by trees, so they're also added to paths.
</p>
<p>
Dense forests are also a problem for moving around especially if you set the tree density slider to the max and try to move in a moist section of the landscape. An extra set of lines for forest trails was added to the set of paths too.
</p>
<p>
All of these path lines are combined and subtracted from both cliff and tree placement. The result is extremely convenient and feels natural. Forest trails would be the result of animal movement, and it makes sense for these to be connected to the gaps in cliffs because that's where they can get through. If you're following a path over a land bridge then there's always a way through any cliffs and trees you might encounter.
</p>
<div class="panel-inset p0" style="text-align: center; margin-top:20px; margin-bottom: 20px;">
<div class="juxtapose">
<img alt="Debug visualisation of paths." title="Debug visualisation of paths."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-paths-canyon-forest-landbridge.png">
<img alt="Max-trees landscape showing paths." title="Max-trees landscape showing paths."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-paths-landscape.png">
</div>
<p style="margin: 10px">
<i>
Left: Red = Canyon path, Blue = Landbridge path, Green = tree path.
<br/>
Right: A landscape with maximum tree settings to more clearly show the paths.
</i>
</p>
</div>
<p>
There are of course exceptions where things block each other, but these tend to be coincidences. For example, terrain just happens to connect between two lakes making what is effectively a land bridge, but because it was not created by the special land bridge system, the route is not protected and it has a chance to get clogged with trees.
</p>
<p>
The true test of this for me, was to set trees and cliffs to maximum settings and try to navigate the map by car. And you know what? That's actually a really cool map to move around on now.
</p>
<hr/>
<h3>
Finishing touches
</h3>
<p>
Here are the results:
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Map at 100% scale."
title="Map at 100% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-map-100-01.png">
<i>Map at 100% scale.</i>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Map at 50% scale."
title="Map at 50% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-map-50-01.png">
<i>Map at 50% scale. Note: When changing scale only elevation-style features are resized. Things like ore stay in the same place.</i>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Map at 25% scale."
title="Map at 25% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-map-25-01.png">
<i>Map at 25% scale.</i>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Map at 25% scale."
title="Map at 25% scale."
src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-map-25-02.png">
<i>Another map at 25% scale.</i>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-scene-01.png">
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-scene-02.png">
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-scene-03.png">
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-401-final-scene-04.png">
</p>
<p>
I've put a lot of work into this and I've been testing it heavily through the entire process, it's finally working really well. There's still more testing to do because it's such a big change and it affects everyone in a very significant way. There are some more minor things to do a bit later, like more patchy forest edges, but that's not a significant change to gameplay.
</p>
<p>
The safety net for all these changes is that the new terrain is extremely customisable. Even if you don't like some setting it's easy to adjust the map the way you like it. For example, I made some extra changes to the cliff frequency slider so that a value below 100% will remove cliffs from huge regions of the map.
</p>
<p>
Also if you <i>really</i> like the old terrain it's still there along with the single-island mapgen option.
</p>
<hr/>
<p>
As always, follow the trails to the usual places.
</p>
<!-- juxtapose.js -->
<script src="https://cdn.knightlab.com/libs/juxtapose/latest/js/juxtapose.min.js"></script>
<link rel="stylesheet" href="https://cdn.knightlab.com/libs/juxtapose/latest/css/juxtapose.css">Friday Facts #400 - Chart search and Pinshttps://factorio.com/blog/post/fff-4002024-03-01T00:00:00Zkovarex, Klonan<p>
Hello,
<br/>Is it me you're looking for?
</p>
<hr>
<h3>The UI search<author>kovarex</author></h3>
<p>
When it comes to UI, one of the things we are proud of is the standard search feature in every window where it's even remotely relevant.
It all comes nicely together. You stop thinking about it, and press the CTRL + F shortcut to search whenever you look for something.
</p>
<p>
But once we got really used to it, we suddenly started to want to search even when not in some window, but just in the game itself.
This combined with the fact, that the most frequented question in multiplayer games was, <i>"Hey, where do we make X please?"</i> (especially once planets were added).
</p>
<p>
Which lead us to the most obvious complementary feature:
</p>
<hr>
<h3>The map search<author>kovarex</author></h3>
<p>
Why not extend the searching to the whole map as well?
</p>
<p>
We were not sure about what exactly should be searchable, so we just started from the most obvious, the production search.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-400-map-search.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
<i>How could we play without this?</i>
</p>
<h4>Other searchable stuff</h4>
<p>
After the production search, we added a few things that we found useful after playtesting:
<ul>
<li>Map tags, which merge into one group when they are on top of assemblers of the same thing.</li>
<li>Train stops, which are forced to be at the end of the list, as in some cases there tends to be A LOT of them.</li>
</ul>
</p>
<p>
We could consider to add more to the search, like the locations of logistic chests containing some item, but we decided to not go down this rabbit hole for now. Mainly because it would naturally lead to the need of making all items in containers searchable, and it would become a performance nightmare, not even talking about the possible huge spam of the search results.
</p>
<p>
Of course, there might be some good ideas of other things we could make searchable, you can let us know!
</p>
<hr>
<h3>Pins<author>kovarex</author></h3>
<p>
As we show in the search part, there are these little pins next to the search result, which are the connection to the related feature: The pins.
</p>
<p>
The motivation for pins was like: <i>"I'm in a big base, I search for an item, and try to go there. Halfway there, I kind of lose my place and have to search for it again to keep myself on track"</i>. It didn't feel right. If only I could somehow mark the place where I want to go.
</p>
<p>
So the feature was created, and obviously, it is not rocket science, but the devil is in the details:
<ul>
<li>You can pin a search result using the pin button, but there is also shortcut to pin any position or entity, by default ALT + Right click.</li>
<li>Every pin shows you its location on the screen, or when offscreen, it shows you an arrow at the edge of the screen with the distance to it. This is mainly for when you just want to run towards your destination.</li>
<li>Since we don't expect a crazy amount of pins to exist, we added a list of all your pins right under the minimap, where it can be edited or removed.</li>
<li>The pin can be edited to change the caption, and you can also decide to not always show the arrow for the pin. This is mainly for cases when you use the pin as more of a long term bookmark.</li>
</ul>
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-400-pins.png">
</p>
<p>
The most typical usages of the pins:
<ul>
<li>You just temporarily pin something (possibly a search result) to run there.</li>
<li>You pin something as a reminder of what you want to do next.</li>
<li>You pin your car or spidertron, so you can find it.</li>
<li>You pin your friends in a multiplayer game, so you always know their location.</li>
<li>When you die, it automatically pins the location of your corpse, so you can actually find it.</li>
</ul>
</p>
<h4>But we have tags and pings, isn't this too much?</h4>
<p>
It might seem a little bit too confusing to have map tags, pings and also pins, but I still believe that all of them should exist at the same time, as they have their own use-cases.
<ul>
<li>Map tags are shared between everyone on the map, and are meant as a persistent marker of some position.</li>
<li>Pings are a very temporary way to show a place to someone in a multiplayer game.</li>
<li>Pins are unique for each player, and each player can choose what they find important.</li>
</ul>
</p>
<hr>
<h3>New Alerts GUI<author>Klonan</author></h3>
<p>
The old alerts system was quite simple, and for its simplicity it was functional enough.<br/>
If you clicked the flashing alert slot, it would open the map at the 'most important' alert.
</p>
<p>
However with Space age, as with all things, we need to go further. Opening the map on a random planet when you click an alert isn't that useful. You might not care about some wall damage on Nauvis, but your Space platform being smashed apart is quite a different story.
</p>
<p>
Now when you click on an Alert slot, it will open the new Alerts Overview:
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-400-alerts-gui.png">
</p>
<p>
The list of items is separated by planet, and clicking an item will take you to the location on the map. There is also the button to pin the Alert, so you can utilize the Pins feature as mentioned before.
</p>
<p>
The Alerts are still segregated by category, so things like missing materials and damage alerts show as separate alert slots as it is now.
</p>
<hr>
<p>
As always, pin your thoughts at the usual places.
</p>
Friday Facts #399 - Trash to Treasurehttps://factorio.com/blog/post/fff-3992024-02-23T00:00:00ZEarendel, kovarex, V453000<p>
Hello, It's Earendel back for another electric adventure.<br/>
You got your first look at Fulgora in <a href="https://factorio.com/blog/post/fff-398">FFF-398</a>. (If you haven't read that already please read that first.)
Now let's take a look at the new planet's mechanics.
</p>
<hr>
<h3>Lightning storms</h3>
<p>
Every night on Fulgora brings an immense lightning storm. Lightning hits things at random based on material and height.
If you're wandering around in the middle of nowhere expect to get zapped a few times.
It can kill you and wreck your stuff so look for shelter when it starts getting dark.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-lightning-devastation.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
<i>Damage and frequency boosted for demonstration purposes.</i>
</p>
<p>
Ruins provide initial safe areas.
Not only are some of the large structures more likely to get hit because they're big and metal,
but there are some ancient alien lightning attractors dotted around that guarantee protection in a moderate radius.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Lightning protection area"
title="Lightning protection area"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-protection-area.png">
<i>The area with guaranteed protection is highlighted cyan when you interact with the structures.</i>
</p>
<p>
Some of your own structures, like rails, can handle being struck by lightning, but most structures will take a lot of damage if they get hit.
If you need to throw down a few structures of your own it's not a bad idea to do it near these ancient attractors.
<p>
<hr>
<h3>Lightning Collection</h3>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-lightning-rod.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
Soon after arriving on Fulgora you'll figure out how to make your own lightning rods.
These protect a slightly smaller area than the alien lightning attractors, but you can place them where you want.
Better yet, lightning rods can capture some of the energy from each strike and add it to your electrical network.
You'll need a solid amount of accumulators to store all that energy though.
</p>
<p>
There's something really satisfying about the sky trying to kill you but then you turn it around and exploit it. Lightning just went from a threat to a resource.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-lightning-collector.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
Once you're producing the planet's science pack you can unlock lightning collectors.
An upgrade from the simple lightning rod, these collectors protect a much larger area
and convert much more of each bolt's energy into usable electricity.
</p>
<p>
It may not seem obvious but the range is a double benefit.
Not only can you protect a greater area with fewer collectors, but if they're at the edge of a plateau they can reach lightning further away from the plateau and grab lightning that would be unreachable with a smaller collection area.
This is especially significant for very small plateaus as you'll see below.
</p>
<hr>
<h3>Islands of stability</h3>
<p>
The plateaus of Fulgora are like islands.
They are surrounded by sinking oil sands that act like quicksand for structures.
You can walk across them, but the only things you can build on the sinking sands are elevated rail supports and offshore pumps.
</p>
<p>
Lightning is collected based on the bolts that would strike that area naturally, meaning that each island has a maximum energy collection rate with full coverage.
Islands are usually separated by a gap that's larger than (basic quality) big electric poles, so in most cases each island will have its own electrical network.<br/>
Island size matters.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="Fulgora mapgen"
title="Fulgora mapgen"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-fulgora-mapgen.png">
</p>
<p>
There are different types of island. The largest islands have expansive desert and more natural terrain. There's more space to build and more area to collect power, but no resources.
</p>
<p>
Medium islands are usually cities and have a mix of space and resources, but the resources are not as rich. These islands are a good place to get started though, as they have a good balance of space, resources, and ancient protection from lightning.
</p>
<p>
The small islands have some special significance. They're always isolated by a moat. The resources here are far richer but the lack of building space means they will probably need off-site processing.
</p>
<p>
The result is that you'll typically be motivated to create a train network that spans over many islands using elevated rails.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Scrap recycling recipe"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-fulgora-train-network.png"
style="box-shadow:none;"
/>
<br><i>Screenshot of a late game Fulgora factory. This is with older map generation, but demonstrates connecting islands with trains well.
<br>Early on, islands are oases for multi-level train crossings, but very late in the game you unlock the ability to landfill the oily ocean.
<br>As this is late game, you can also spot structures like rail ramps and electric poles placed in the middle of oil.</i>
</p>
<hr>
<h3>The first impressions<author>kovarex</author></h3>
<p>
The things described so far work quite well and were not mechanically touched since the initial design. But the rest didn't have such a straightforward creation story.
</p>
<p>
When I was doing the historically first playthrough of the planets content in January 2022, everything was different.<br/>
I visited Fulgora as the 3rd planet. At that time it was a pristine desert planet. The only things special about it were the lightning, the islands, one new ore, and a few new recipes. Each island only had 1 resource, and water only existed on certain islands as water springs (like oil), but all of the resource mining, the processing, and the usual intermediates were all the same as on Nauvis.<br/>
And since it was the 3rd planet already, I started to feel worn out from the repetition of doing the same old mines, smelting, circuit production, oil refining etc.
</p>
<p>
At this time I started to feel skeptical about the whole expansion. It felt like the problem of per-planet repetition is not really solvable, and the whole idea of the expansion is fundamentally broken. Not a good place to be.
</p>
<p>
This problem of repetition was relevant to basically all the planets so it felt hard to solve.
Giving up was just not an option, we had to try to improve things one step at a time, and hope for the best.
</p>
<p>
Since Fulgora needed some revamp and as I felt desperate, I was very open to wild changes.
The first idea was a nuclear option and it sounded something like this:
</p>
<p style="margin-left:40px; margin-right:40px; color:#ffe6c0;">
<i>"Remove the resources and just put some trash that some aliens have dumped on the planet, it could be directly transformed into any basic resource through assembling machines, so the game would be shortened and the repetitive parts removed."</i>
</p>
<p>
This would already be an improvement, but Earendel took it a step further in a way that made everything fit together nicely.
This was an amazing opportunity to integrate the recycler into the game.
</p>
<p>
Up until this point the recycler was mostly just a "quality recycling resource sink tool".<br/>
However, if the resource you're mining is made of some high-level scrap and the recycler just transforms it into all kinds of intermediate products in a fixed ratio, then the gameplay could become much more interesting.<br/>
The challenge wouldn't be getting the resources, but dealing with the flow of random/mixed products, sorting them, handling the excess, etc.<br/>
This proved to be a viable idea, and step by step it led us to the current state of the planet.
</p>
<hr>
<h3>Ruins and resources<author>Earendel</author></h3>
<p>
Factorio has certain themes around the engineer's impact on the world. There was something that felt really out of character for the engineer to collect and effectively 'clean up' trash from a planetary dump.
</p>
<p>
If the only sign of the aliens on the planet is piles of trash, it isn't very interesting from a lore or visual perspective.
It's much more fun if they have an actual presence there. So, if we're going to officially add technological aliens to the lore, we should do it right.
And for Factorio that means tearing through an archaeological site with a mining drill.
</p>
<p>
So the planet is no longer a dump, it's a ruin, albeit a heavily polluted one. Inhabitants are gone, but their technology remains.
</p>
<p>
The main resource on Fulgora is Scrap.
It's not just trash but a big polluted mix of ruined machinery, fallen architecture, ice and rock.
The scraps of an ancient civilization.
This conceptual change also plays really nicely into getting higher tier items to feed into the recycling mechanic.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-scrap-mining.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<hr>
<h3>Recycling</h3>
<p>
The recycler is unlocked by mining scrap and is critical to Fulgora's industry.
When you recycle scrap, you get a few low-level products like ice, and stone, but you also get some high-level items like processing units.
You don't get certain things like copper and iron directly.
For those you'll need to recycle things like processing units and their recycled products repeatedly until you get the resources you need.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-scrap-recycling.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Scrap recycling recipe"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-scrap-recycling-recipe.png"
style="box-shadow:none;"
/>
<br><i>The scrap recycling recipe as we have it now.</i>
</p>
<p>
Crafting on Fulgora feels fresh, yet familiar as you don't need to learn many new items or recipes.
Essentially the entire crafting tree is inverted.
</p>
<p>
There are quite a few ways to handle the 12-byproduct recipe - inserter filters, splitter filters, sorting it by robots, circuit network, and it's the place where the new train interrupts can be very handy.
</p>
<p>
Having quick access to high tier components means getting back into space after landing on Fulgora can be much faster than on other planets.
You might even enjoy bringing some of the expensive items back too, that's all up to you.
</p>
<hr>
<h3>Fulgoran fluids</h3>
<p>
As you may already know, the recycler can only output solids. So how do you get fluids on Fulgora?
</p>
<p>
The polluted sinking wasteland between islands is full of oil.
If you put an offshore pump into the sinking sands you can pump out some usable heavy oil.
Infinite heavy oil is <i>slick</i>, because it basically reduces oil processing into a bit of cracking.
This can be done with the usual recipes, but for that you'll need some water.
</p>
<p>
The planet has no surface water, it's far too cold and dry.
The only source of water in the planet is the ice you get while mining scrap.
The ice can be melted into water in a chemical plant easily enough, but you do need to decide when and where to use it.
</p>
<p>
Needing ice for cracking and the other water recipes is pretty <i>cool</i> because there's still some scarcity to light oil and petroleum.
</p>
<hr>
<h3>Holmium</h3>
<p>
Fulgora's unique resource is Holmium.
It's a very rare element in the solar system and Fulgora is the only planet where it can be found.
Unfortunately the previous inhabitants also knew how precious it was, so there are no longer any accessible deposits.
</p>
<p>
However rare metals such as this don't just disappear after they are mined. Holmium oxides (ore) can be recovered from the debris and scattered remains of this long forgotten civilization. The ore is processed into some holmium intermediates such as electrolyte, superconductors, and supercapacitors. These new things are then turned into the unique end products of this planet, which include the electromagnetic science pack.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Electromagnetic science pack"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-electromagnetic-science-pack.png"
style="box-shadow:none;width:128px;height:128px;"
/>
</p>
<hr>
<h3>Electromagnetic plant</h3>
<p>
This machine can make a lot of different stuff, but is specialised for the manufacture of electronics and electromagnets.
It's this planet's equivalent of the <a href="https://factorio.com/blog/post/fff-387">foundry</a>, and like the foundry, it's a game-changer when you get it.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-electro-plant-closeup.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
The electromagnetic plant is a 4x4 machine with a crafting speed of 2, a built-in productivity bonus of +50%, and 5 module slots.
</p>
<p>
It can craft wire, circuits, electric poles, accumulators, lightning rods, supercapacitors, the new science pack, more electromagnetic plants, various tesla items, a few other things, and last but not least, modules.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-399-electromagnetic-plant.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
The built-in productivity is really significant here, because unlike productivity modules, built-in productivity is not restricted to intermediates only. As you know, productivity is most amazing when it starts multiplying over multiple recipe steps. Tier 3 modules are crafted in multiple steps, so making all the steps in electromagnetic plants really compounds the bonuses.
</p>
<hr>
<h3>Quality Module 3</h3>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Quality module 3"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-quality-module-3.png"
style="box-shadow:none;width:128px;height:128px;"
/>
</p>
<p>
Fulgora is also the planet where you unlock quality module 3s.
</p>
<p>
When you combine tier 3 quality modules with the 5 module slots in the electromagnetic plant, plus the built-in productivity and recyclers to clean up the rejects, then it suddenly starts to be really convenient to mass-produce modules with quality.
</p>
<p>
The craziness usually starts with making the highest quality T3 Quality modules you can get.
Quality quality modules adding more quality to new quality modules... so around and around we go in a wonderful quality carousel that ends with some very powerful machines crammed with very potent quality modules.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img
alt="An electromagnetic plant full of rare quality module 3s"
title="An electromagnetic plant full of rare quality module 3s"
src="https://cdn.factorio.com/assets/blog-sync/fff-399-quality-stacking.png">
</p>
<p>
From there you make modules of other kinds, and over time you add all of the other things like assembling machines, chemical plants, platform components, equipment, spidertrons.
Because growth is the only activity the factory deserves, and now that means 'vertical' growth too.
</p>
<p>
But wait, there's more. Remember that space platforms benefit from quality even more than ground bases. Space platforms are one of the main focal points for quality after power armor and the equipment grid. Quality means you can make platforms smaller but still do as much, or the same size while doing more and moving faster. This makes Fulgora another great option as your first stop after Nauvis. Which will you choose?
</p>
<hr>
<h3>Conclusion<author>kovarex</author></h3>
<p>
This planet is an excellent example of why development behind closed doors for some time was a good idea. We could experiment and make decisions that would normally be viewed as extreme, like overhauling how an entire planet works.
</p>
<p>
This allowed us to transform one of the most repetitive planets into one of the most novel ones. Since we were doing similar kinds of drastic changes all over the place, the original overall desperation described earlier is now long gone.<br/>
I'm not saying that everyone will enjoy the expansion, but now at least we do. This is quite an important requirement for a good game, isn't it? :)
</p>
<hr>
<p>
Are you as amped for this planet as we are? As always, let us know at the usual places.
</p>
Friday Facts #398 - Fulgorahttps://factorio.com/blog/post/fff-3982024-02-16T00:00:00ZEarendel<p>
Hello there,<br/>
Where shall we go today?
</p>
<hr>
<h3>Welcome to Fulgora</h3>
<p>
You land on an unfamiliar planet, a lifeless and desolate place.
The thin air is freezing cold but bone dry.
A distant sun twinkles in the dull purple of the sky.
Wispy clouds race by as a gale whips up sand that grates against your armour.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<img
alt="Fulgora planet icon"
title="Fulgora planet icon"
src="https://cdn.factorio.com/assets/blog-sync/fff-398-fulgora-planet-icon.png"
style="box-shadow:none;width:256px;height:256px;"
/>
</p>
<p>
As you look around, you find yourself in a desert with endlessly snaking dunes of dust-like sand.
The dust almost seems to hover as though gravity were overwhelmed by static electricity.
As you press forward, you pass peculiar pillars of fused sand and metal.
The sand gives way to rock as you find yourself on the edge of a wind-swept plateau.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-398-tour-natural.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
Standing on the cliff-edge, you see similar landforms in the distance:
Flat tables of rock standing tall from the shifting dark terrain below.
The sky dims, and in a flash, the thunder that was on the horizon only moments ago is upon you.
Lightning pierces the sky and strikes your energy shield. It can't take many strikes like this.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<i>Flashing lights warning.</i>
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-398-tour-lightning.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
In the stormy night you run to evade the lightning while looking for shelter.
Suddenly, multiple bolts of lightning strike the same location nearby.
Some unknown silhouette looms over you.
Could it be some rock formation, or perhaps another pillar of fused sand?
No, this is nothing natural. This is alien.
</p>
<p>
What is this alien structure?
It is clearly ancient and beaten by the elements, but it does at least seem immune to the lightning.
Deconstructing it gives some useful materials but no more answers.
Perhaps it would have been more useful intact.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-398-tour-outskirts.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
As day breaks, the sun glistens off the dark substance below the plateaus's cliffs.
The surface seems to be a dark churning layer of oil mixed with sand.
This is not a pristine new world after all, this is an already polluted one.
</p>
<p>
You descend the plateau into the dark shifting terrain. The disgusting tar-like mixture sticks to your feet.
The oil is not so deep that you cannot walk through it, but the soft sand below forces you to keep moving.
</p>
<p>
As you climb the next plateau you find an ancient paved road that leads through another desert.
The rubble of ancient walls protrudes from the sand in places revealing a convoluted pattern of corridors and passages.
As you travel further, some of the ruins show signs of ancient machinery poking through the sand.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline class="shadow">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-398-tour-city.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</p>
<p>
In the distance you see some much larger structures in clusters.
The strange rounded shapes of the ruined architecture makes them look like robed figures huddled together.
The one road becomes a network of many roads that each lead to towering alien buildings.
</p>
<p>
Few of the buildings retain their roofs, many of them must have been much taller, skyscrapers maybe.
Using one as a vantage point, countless more sites like this can be seen on the horizon.
This was not just a mining town or an outpost city, this was a whole civilization.
</p>
<p>
Yet all that moves over this grave landscape now, is the sun, the sky, and the sand.
</p>
<a href="https://cdn.factorio.com/assets/blog-sync/fff-398-tour-full.mp4" title="Hidden full video" target="_blank"><hr></a>
<h3>Conclusion</h3>
<p>
Some of the sounds, decoratives and structures are either placeholders or still need more work.
The combination of all the assets so far, despite being unfinished, gives this new planet a really distinct mood and atmosphere.
</p>
<p>
Of course, it's not just the aesthetics that makes Fulgora unique.
We'll be back with more details about the mechanics and what you can do on Fulgora soon.
</p>
<hr>
<p>
As always, shock us with your thoughts at the usual places.
</p>
Friday Facts #397 - Factoriopediahttps://factorio.com/blog/post/fff-3972024-02-09T00:00:00ZPard<p>
Hello,<br/>
we have gathered here today to talk about a new quality of life feature coming with 2.0.
</p>
<hr>
<h3>Motivation</h3>
<p>
Factorio has a quite a lot of items and recipes. Since the new things are unlocked over time, the number is manageable. However with Space age, there are a lot of new things you unlock, and you can start to lose track. Mods have had this sort of problem for a long time, and there are also mods which help to solve it , such as <a href="https://mods.factorio.com/mod/FNEI">FNEI</a> and <a href="https://mods.factorio.com/mod/RecipeBook">Recipe Book</a>.
</p>
<h4>The core of the problem</h4>
<p>
The core of the problem is the recipe tree discovery, which has 2 directions:
</p>
<p>
The first direction is discovering what do I need to craft an item. When I want to craft an inserter, I can hover the recipe to find out what I need. But maybe I don't know how electronic circuits are made, so now I have to go, and search the electronic circuit in the crafting menu, to find it and look at its own ingredients, etc.<br/>
This process is already slow and annoying, but at least it is possible.
</p>
<p>
The other direction is much worse. For example, you discover you can craft an advanced circuit, and you want to figure out the purpose of the item. This mostly means: "What do I make with this".<br/>
Answering this question is almost impossible through some kind of search now, and you just have to look through everything, or check the wiki.
</p>
<p>
The solution to this problem was clear when we already had all the necessary information in the game. All we needed to do was just aggregate the useful information in one GUI. And just like that, Factoriopedia was born.
</p>
<hr>
<h3>The Factoriopedia</h3>
<p>
As many of you have noticed in <a href="https://factorio.com/blog/post/fff-380">FFF-380</a> there is a new button with a book icon placed conveniently between "tips and tricks" and the "train overview". Hiding behind this button is the new internal encyclopedia of all useful Factorio knowledge.
</p>
<p>
With the Factoriopedia, you can see the problem is solved, as the advanced circuit entry not only shows all the ingredients which you directly browse, but it also shows the list of all the recipes using this item as ingredient. It also provides a quick reference to the technology needed to unlock the recipe, so you can quickly take a look how to get there.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-advanced-circuit.png">
</p>
<p>
Technically, recipes and items and entities are independent objects, but for most of the player structures, these are tightly connected. With this in mind, we made sure, that in these cases, it is always present as one merged entry.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-pole.png"><br/>
<i>Item, Recipe and entity merged into one entry with all the info in one place.</i>
</p>
<p>
Whenever you hover an item/recipe/entity etc. We often provide lists of related entries. But since it is a tooltip, you can't really go and click those to explore further. However, in Factoriopedia, it is not a tooltip, so you can browse through these normally.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-furnace.png" width="434"><br/>
<i>The list of accepted fuel we added to the description of furnaces is now even more useful in Factoriopedia.</i>
</p>
<p>With the rise of specialised machines in Space Age, having the list of all the supported recipes is more useful than ever.</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-foundry.png" width="434"><br/>
</p>
<p>
Looking at planets gives you mainly info about all the local resources, and planet specific recipes.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-vulcanus.png" width="434"><br/>
</p>
<p>
If an item has alternative recipes they are also shown.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-alternative-recipes.png" width="434"><br/>
</p>
<p>
Since parts of the expansion can be toggled the same way as we do with mods, naturally the Factoriopedia will support the information about any modded content added to the game.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-397-quality.png" width="434"><br />
<i>Tooltip showing additional data when the Quality mod is enabled.</i>
</p>
<p>
These are just the most obvious examples and we covered many more similar kind of relationships to aid discoverability.
</p>
<h4>Alt is your friend</h4>
<p>
Factoriopedia can be opened by clicking the dedicated button, but that isn't very convenient. Especially when we are looking at an object in the game and scratching our heads saying: "What the hell is this supposed to do?".
</p>
<p>
Don't worry you can just ALT + Left click practically anything, and you will be transported right to the correct Factoriopedia page. Whether it is an unfamiliar building, (un)friendly neighbor, a forgotten item in your inventory, or a strange new recipe.
</p>
<p>
From this point, you can continue to navigate Factoriopedia by clicking each individual button.
</p>
<hr>
<h3>Browse history</h3>
<p>
To wrap things up we have to address the elephant in the room in the form of the two arrows next to the search button.
</p>
<p>
When you navigate through GUIs in the game we store the history of what you had open. You can then use the standard ALT + Left arrow and ALT + Right arrow to go backwards or forwards (or the back/forward on the mouse). Using it feels very natural.
</p>
<p>
The initial motivation for this system was the interactions with multiple planets and remote view.
The typical scenario is when you do something remotely on a different planet, and close the remote view, you can just
press the shortcut to return to where you left off immediately. This might feel like a little detail, but it is one of
the many features that we can't live without anymore.
</p>
<p>
This system was extended over time to include Factoriopedia, Technology GUI, Blueprint library, Train overview, and many others.
</p>
<hr>
<p>
As always, help us expand our feedbackpedia at the usual places.
</p>
Friday Facts #396 - Sound improvements in 2.0https://factorio.com/blog/post/fff-3962024-02-02T00:00:00ZDonion, Ian<p>
Hello,<br/>
Today we will be looking at (and listening to!) many of the sound improvements we have been working on for 2.0.
</p>
<hr>
<h3>Working sound accents</h3>
<p>
The sound an entity makes when it is active is usually a single looping main sound, some entities might have sounds that play when they become active or when they stop working and go idle.
In addition there are several properties and modifiers that can be used to control working sounds a little bit more.
But there is only so much one can do creatively with a single looping sound when it needs to work in all situations.
</p>
<p>
The ability to synchronize the sounds of a machine to its animation was very high on the list of requested audio features.
What I came up with was the concept of <i>Sound accents</i>. Shorter sounds which get played at a specific frame of a specific animation.
Initially I expected a machine would get two or three sound accents to complement its main sound and that would be it. But Ian had other ideas.
</p>
<p>
Starting with the foundry, besides its main sound, there are twelve sound accents to emphasize individual components and sections of the animation.
And he didn't stop there, there are now machines with an even more complex sound set. We might show them at some later date, but now let's get back to the foundry.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-foundry-normal.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video><video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-foundry-normal-debug.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
<p style="text-align: center; margin: 5px auto 20px auto;">
<i>Working sound visualization on the right, bigger box represents the main sound, smaller boxes represent individual sound accents.</i>
</p>
</p>
<p>
Trying to speed up or slow down a sound of a machine to match its animation speed (modules, beacons, low power) doesn't work very well (slowing down especially).
That's why in 1.1 it's used rarely and we only speed sounds up, for example steam engine sound works like this.
But having many shorter sounds directly tied to specific animation frames solves this problem in a natural way.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-foundry-fast.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video><video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-foundry-slow.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
<p style="text-align: center; margin: 5px auto 20px auto;">
<i>Fast foundry on the left and very slow foundry on the right.</i>
</p>
</p>
<hr>
<h3>Multiple main working sounds</h3>
<p>
Now that we have multiple sounds for one machine in the form of sound accents, could we do something interesting by having multiple main sounds as well?
As it turns out, yes! If we combine it with some other tricks of ours.
Mainly activity matching, the ability to match a sound's volume or playback speed to the machine's activity rate.
Activity rate is the way a machine reports how fast it's doing whatever it's doing, it could be as simple as reporting 1.0 when it's working and 0.0 otherwise.
It could be a vehicle's speed, or something a little more <i>creative</i>.
</p>
<p>
Let's look at a couple of examples with vehicles to see what we can do with it in 2.0.
</p>
<p>
In 1.1 a car has one main sound which plays faster as the car goes faster. This is serviceable but we can do better.
Let's use two sounds, idling sound and driving sound. As the car's speed increases, the idling sound's volume quickly decreases until is completely silent,
at the same time the driving sound's volume increases from silence to its maximum volume. At some point the driving sound's pitch starts to increase as well, though this is scaled so it doesn't go too high.
</p>
<p>
The tank received the same treatment, together with a separate sound for its tracks.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-car-tank.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
And of course trains couldn't have been left behind. This includes different sounds when the train is on elevated rails.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-train.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
</p>
<hr>
<h3>Additional machine sounds</h3>
<p>
Did you notice the different sounds when the car was going over different tiles or resources, or the sounds that cargo wagon doors made in the previous videos?
They don't work well as working sounds, so a different approach was needed.
</p>
<p>
We could add special logic into each entity's update to handle additional sounds and we've done that for some things in the past, for example artillery turret had its rotation sound in the update logic.
This is fine only as long as the number of entities with additional sound logic is very small, but becomes inefficient and wasteful when you try to add sounds to entities there is a lot of (like mining drills and robots).
</p>
<p>
We really wanted it, so a new system, creatively named <i>Additional sounds</i>, was born.
A bunch of old and new entities already take advantage of this system, let's take a look at one of them, the big mining drill (last time it was shown it had only placeholder sounds).
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-colossal-mining-drill.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
</p>
<hr>
<h3>Ambient sounds</h3>
<p>
We had many ideas for 1.0 that we weren't able to implement at the time. One was having a more immersive ambient system, rather than just one wind sound.
I devised a wind system that played a different wind track when you are zoomed in, one that was quite basic, then a more interesting one as you zoomed out (with a cross-fade between the two).
This evolved into the idea of having a semi-persistent ambience, for example on Vulcanus you can hear the sound of distant volcanos at a low level, with pauses of varying lengths.
</p>
<p>
But how about adding more specific ambient sounds based on the players location? For this we couldn't use the usual game industry approach of ambient trigger boxes or pre-painted regions, because our maps are generated, not handmade.
So we came up with the idea of adding sounds to tiles and entities based on specific conditions.
</p>
<p>
Once we had this tech in place, I started to add sounds such as a gentle water-lap to bodies of water and leaf rustle to trees. I then realised that we could have invisible creatures, for example small non-hostile alien birds in the trees, that only play if the player is within a certain radius of trees numbering above a specified threshold. There is also a random pause between each sound.
Taking this idea further, we are able to specify whether they play according to the time of day, or the zoom level of the camera.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-ambient.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
<p style="text-align: center; margin: 5px auto 20px auto;">
<i>Next time you're setting a forest on fire, remember it might be someone's home.</i>
</p>
</p>
<hr>
<h3>Other sound improvements</h3>
<h4>Item sounds</h4>
<p>
When we released 1.0, Kovarex told me that it was his wish to have item specific inventory sounds in the game.
At that time we only had one sound for moving items, and it was okay, but maybe a little bit boring, and it didn't give you any special feedback.
He explained that they needed to be a bit like the wire connect and disconnect sounds, and this helped me to understand what he meant.
</p>
<p>
Through trial and error, I worked out what sounds could be grouped together (e.g. small and large metallic items) and which needed to be unique.
Some needed more iteration than others, as it was sometimes hard to figure out what the sound should be.
After all, what is the sound of a Speed module? In that particular case, I ended up using a synth sound as it needed to be abstract.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<div class="panel-inset p0 m0">
<video controls playsinline>
<source src="https://cdn.factorio.com/assets/blog-sync/fff-396-item-sounds.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
</div>
</p>
<h4>Advanced volume control</h4>
<p>
It was mentioned that ambient sounds have some more control over their volume. When this was done, Ian would start asking if it could be used for other sounds as well.
I didn't see any reason why not so I took all of these parameters and put them together into <i>Advanced volume control</i> properties. They let us do some neat things.
</p>
<p>
The attenuation with distance can be changed from the default linear to a more natural sounding exponential curve. There is also the option of logarithmic, cosine or S-curve or no attenuation at all if you want to do something different.
We can change how the sound attenuates with the zoom level in a similar way.
It's possible to specify a darkness threshold in order to have certain sounds play only at night time.
Last tool in this toolbox are <i>Dynamic sound modifiers</i>. These allow us to change the level of a sound just for a specific game context.
There can be dynamic volume modifiers which are applied only when in the menu simulation or when in tips and tricks, when driving a vehicle or when a train is on elevated rails.
</p>
<h4>Sound aggregation</h4>
<p>
In certain situations, there can be a lot of sounds wanting to be played at the same time. Combat with many biters is a typical scenario, biters and turrets attacking create a <i>lot</i> of sound.
If there wasn't a hard limit on the number of sounds that can play at a given time, it could quickly turn into a wall of noise.
</p>
<p>
Sound aggregation is one way to deal with this, when a sound would be playing many times, instances of it that exceed a certain limit can be culled or have their volume reduced.
This system is already in 1.1 but it can be used only for handful of sounds in specific scenarios.
For 2.0 the system was greatly improved to be usable by most sounds and more control over which sounds will be adjusted was added.
With these changes the soundscape of those problematic scenarios is now under control.
</p>
<h4>Sound priority</h4>
<p>
Related to the problem of having too many sounds is that sometimes there wouldn't be enough resources left for more important sounds, for example GUI effects or certain player actions.
The obvious solution is to introduce a priority system for sounds and that's exactly what we did. To kick things off, many player actions like building were given higher priority and several biter sounds were deprioritized.
</p>
<h4>Test suite</h4>
<p>
We like tests around here.
Soon after I started working on various sound related issues and features I also began building up our audio test suite.
Starting with creating a simple framework to be able to test at least basic audio features, like checking a sound is playing when it's supposed to.
The suite grew over time, covering existing features and fixes for various bugs, as well as covering brand new features (and fixes for brand new bugs).
</p>
<p>
Having such a test suite proved extremely helpful when redesigning or expanding different parts of the audio system and is very helpful to make sure those pesky bugs won't creep their way back in.
</p>
<h4>Music</h4>
<p>
I am sure you all want to hear about the new music coming in Factorio: Space Age, but we are saving that for a future FFF, stay tuned!
</p>
<hr>
<p>
All of these new or improved features, with the exception of the custom logic of additional sounds, are available in prototypes, modders will be able to use them in the same way as we do in-house.
</p>
<p>
As always, sound out your thoughts at the usual places.
</p>Friday Facts #395 - Generic interrupts and Train stop priorityhttps://factorio.com/blog/post/fff-3952024-01-26T00:00:00ZKlonan<p>
Hello,<br/>
Another trains FFF!
</p>
<hr>
<h3>Generic interrupt</h3>
<p>
We first showcased the new Schedule interrupts in <a href="https://factorio.com/blog/post/fff-389">FFF-389</a>. They allow you to control your trains using conditions and target destinations.
</p>
<p>
We have played with schedule interrupts extensively, and they work very well for controlling larger numbers of trains and train systems.
One small problem/annoyance/crime is that you need to add an interrupt for each type of item manually. So if you want the train to handle Iron gear wheel, you need to create a new interrupt specifying "If you have Iron gear wheel, go to Iron gear wheel dropoff".
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-395-lots-of-interrupts.png">
<br /><i>Lots of interrupts...</i>
</p>
<p>
It gets a bit boring and tedious adding new interrupts, and in our mind the goal is clear, "If you have Item X, go to X dropoff".
</p>
<p>
So that is exactly what we did using a new special wildcard signal called 'Any item'.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-395-generic-interrupt.png">
<br /><i>A 'Generic interrupt' using the any item signal.</i>
</p>
<p>
When a train is evaluating an interrupt which uses the 'Any item' signal, it will check the interrupt conditions against each item in the cargo, and the first one that passes will be the 'passing item' for the interrupt. The passing item will replace the 'Any item' in the interrupt target name and target wait conditions.
</p>
<p>
We also have similar signals for 'Any Fluid', 'Any Fuel' and 'Any Signal'. Using these signals, the interrupt is more generalised and hands-off, as long as you ensure you have your train stops named consistently.
</p>
<h4>But what if I don't have a "Personal Battery equipment MK2 dropoff"?</h4>
<p>
So one important thing to make this work, is that the game has to be fail-safe for stops that don't exist.
In 1.1, if a train stop doesn't exist (or is disabled), the stop is completely skipped/ignored in the schedule.
This can create a big problem, a train can just decide to go again to item pickup while already full.
</p>
<p>
So in 2.0, we have changed it so that trains will 'No path' for stops that don't exist.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-395-no-stop-no-path.png">
<br /><i>A train with a 'Stop that doesn't exist' goes to 'No path' state.</i>
</p>
<p>
This means the train will never do something unexpected, and it will be the players configuration error causing the train to wait around for better orders.</p>
<h4>Does it still skip if I disable a stop with circuit network?</h4>
<p>
This leads us onto another change in 2.0, disabling stops will no longer cause trains to skip the stations and repath. We have had the skipping behavior in the game for a long time, but effectively using it has always been a bit janky. Since we added trains limits in 1.1, the usage has been very limited, and can cause a lot of problems if you approach the feature naively.
</p>
<p>
For example, if you disable a stop while a train is en-route, the train may very well be in a position where it can't path anywhere else (e.g. just turning the corner to arrive). This would cause the train to 'no path' while sticking out onto the mainline, causing chaos for the rest of the trains.
</p>
<p>
So in 2.0, disabled trains stops will act as if they have 'Train limit = 0':
<ul>
<li>If a train is on the way and the stop is disabled, it will continue to the stop regardless.</li>
<li>If a train is told to go to a disabled stop, it will enter the 'Destination full' state and wait until it is enabled.</li>
</ul>
</p>
<p>
This change will prevent the damage that disabling stops causes, and means you can have a slightly easier time controlling stops with circuit network. For example, with an artillery outpost, just wire up a chest to read how much ammo is left, and only enable the stop if ammo is empty. This way you don't need to include any combinators to translate the lack of ammo into a Train limit.
</p>
<hr>
<h3>Alert for 'No path'</h3>
<p>
More trains means more chance of something unexpected happening.
In Space age, where the players' attention is split between multiple planets, is is especially important that the player is made aware of problems in the train system. So it only made sense to add an alert for trains with 'no path'.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-395-no-path-alert.png">
</p>
<p>
With the new 'Generic interrupt', it means if the train picks up an item for which you have no associated train stop, you will be notified about it, and can decide how to solve it.
</p>
<hr>
<h3>Easier train dispatching</h3>
<p>
Another annoyance which becomes more clear with larger train systems, is the pain of creating and dispatching new trains.
With the ability to blueprint trains, it is almost painless, but you still need to manually set them to automatic mode.
</p>
<p>
No Longer! Now when a train blueprint is fully built (importantly, including fuel requests), it will switch to automatic mode.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls muted playsinline
style="box-shadow: inset 0px 0px 3px 0px #000000, 0px -2px 2px -1px #000000, -2px 0px 2px -2px #0f0d0c, 2px 0px 2px -2px #0f0d0c, 0px 2px 2px -2px #ebe6e4;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-395-train-automatic-dispatch.mp4" type='video/mp4' />
Trains playback not supported on your device.
</video>
</p>
<p>
This is the last piece of the puzzle, and now if you need to add another 5, 10, 20, 50 trains to your network, it is just a matter of stamping down the train blueprint as many times as needed; No further manual intervention necessary.
</p>
<p>
Additionally, there were quite a few inconsistencies with blueprinting trains, bugs and unexpected behaviors, which made it a little bit unreliable if the schedule in the blueprint would actually 'stick' to the new train, and if all the wagons would connect correctly. So we've fixed all the cases we could find for 2.0.
</p>
<hr>
<h3>Train stop priority</h3>
<p>
Trains generally prefer stations closer to them. With static routes and limits, the system worked okay.
When you have individual train routes for each item, they always have some consistent level of service for that item.
If you have 10 iron mines and 3 iron trains, then you know you will always have some trains working that route.
</p>
<p>
However with generic schedules and 'One big bag of trains', it can happen that all the trains are busy moving around advanced products and nothing is there
to direct trains to the mining outposts, especially as the mining outposts are normally far away on the periphery of the base.
</p>
<p>
Another motivation here was the situation of decommissioning old stations. We want the trains already at the stop to "Get out of here", but often times they would just sit and go "Well my destination is full". So another goal was "When I tell a train to go somewhere manually, I want it to have priority".
</p>
<p>
So we added the feature of Train stop priority:
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-395-train-stop-priority.png">
</p>
<p>
The way it works, is that the priority of a train stop has two effects:
<ol>
<li>When searching for a destination, trains will prefer a higher priority train stop.</li>
<li>When trains are trying to leave a stop, trains at stops with higher priority are dispatched first.</li>
</ol>
</p>
<p>
Train stops have a default priority of 50, and players can adjust it to any number they want from 0 to 255. The slider in the train stop suggests values from 10 to 90, but you can be more precise with the textfield. We also added the ability to set the priority using the circuit network.
</p>
<p>
Additionally, there are some special cases where trains are given the absolute max priority of 255:
<ul>
<li>When the player manually tells the train to go somewhere.</li>
<li>When a train has 'no path' or 'destination full' in the middle of the tracks (i.e. not waiting at a train stop).
</li>
</ul>
</p>
<hr>
<h3>Icons for Train status</h3>
<p>
Factorio veterans will know well the flying text popup of 'No Path' and 'Destination full'. Valuable information, but it has always felt a bit ugly and distracting (some people also really hated seeing them in screenshots).
</p>
<p>
So in 2.0, we changed it so that these states are shown to the player with an icon drawn over the locomotive, and we added the train status to the GUI and tooltip.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video loop autoplay muted playsinline
style="box-shadow: inset 0px 0px 3px 0px #000000, 0px -2px 2px -1px #000000, -2px 0px 2px -2px #0f0d0c, 2px 0px 2px -2px #0f0d0c, 0px 2px 2px -2px #ebe6e4;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-395-status-alerts.mp4" type='video/mp4' />
Trains playback not supported on your device.
</video>
</p>
<p>
The 'No path' icon flashes to let you know that something is wrong.
Destination full is just a solid icon shown in alt-mode.
These should make it easier to tell at a glance what a train is up to, without having to do the mental pause to verify there is no flying text notification coming soon.
</p>
<hr>
<p>
As always, dispatch your thoughts to us at the usual places.
</p>Friday Facts #394 - Assembler flipping and circuit controlhttps://factorio.com/blog/post/fff-3942024-01-19T00:00:00Zkovarex, Josh<p>
Hello,<br/>
let me show you another dose of things we just can't stop ourselves from doing.
</p>
<hr>
<h3>Assembling machine circuit control<author>kovarex</author></h3>
<p>
Being able to change the recipe of an assembling machine using circuit network is an obvious feature, and we considered it in the past.
</p>
<p>
The idea was always postponed, as we didn't see an easy way to solve the problem of potentially having unrelated items to deal with when the recipe was changed.<br/>
But, the solution is actually pretty easy, we just create a special "dump inventory" in the assembling machine and put the extra items there.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-assambler-with-dump-items.png"><br/>
Assembling machine controlled to produce wooden chests right after it was producing electronic circuits.
</p>
<p>
The dump inventory is right next to the products, and can be removed from the assembling machine in the same way as the normal products.
This means you have to be careful when creating designs which use the circuit network to set recipes, as you must ensure that you handle the leftover item output.
</p>
<p>
Another important part about setting the recipe, is that it will only check the 'Set recipe' signal when it finishes
crafting, so it won't cancel any in-progress crafts, and you don't have to worry about precise timing.
</p>
<p>
Once we figured out how to handle setting the recipe, we could easily add some more utilities:
<ul>
<li><strong>Enable/Disable</strong> - Simple on/off switch like a lot of circuit controls</li>
<li><strong>Set recipe</strong> - Set the recipe of the assembler based on the incoming signals</li>
<li><strong>Read ingredients</strong> - Outputs the ingredients and count required for the current recipe</li>
<li><strong>Read recipe finished</strong> - A one tick signal emitted when a crafting cycle completes</li>
<li><strong>Read working</strong> - Outputs a signal continuously while the assembler is crafting</li>
</ul>
</p>
<p>
All these things together should make it possible to make more generic assembler setups for those who like to dig deep into the automation of automation.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video autoplay muted loop playsinline
style="box-shadow: inset 0px 0px 3px 0px #000000, 0px -2px 2px -1px #000000, -2px 0px 2px -2px #0f0d0c, 2px 0px 2px -2px #0f0d0c, 0px 2px 2px -2px #ebe6e4;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-394-generic-assembler.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
<br>
<i>A 'Generic assembler' setup configured to craft high quality inserters from raw ingredients.</i>
</p>
</p>
<hr>
<h3>Flipping for real<author>Josh</author></h3>
<p>
With the release of version 1.1 Blueprint Flipping was introduced, allowing you to flip a whole set of items
horizontally or vertically before placing them (<a href="https://factorio.com/blog/post/fff-364">FFF-364</a>). It came with some caveats however, many buildings with fluid
inputs/outputs couldn't be flipped.
</p>
<p>
For most entities in the game, flipping them is simple. Mirror their position about the centre of the blueprint, then
rotate 180 degrees if necessary, since if something is facing northwards then flipping horizontally has no effect on the
direction. Repeat this for every item in a blueprint and you've got yourself a flipped blueprint.
</p>
<p>
There are some interesting caveats to this, like undergrounds, which you rarely want to actually turn around, since now
the outputs would be facing each other, you generally want to just reverse the direction their belts travel. Splitters
also need input and output priorities flipping. The flipped splitters in this image have opposite priorities, the left
splitter has its priority as "left" and the right has its priority as "right" to achieve the same effect of prioritising
items from the north.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-flipping-1.png">
</p>
<p>
There are some more complex cases that just don't work with this rotation method and therefore have to be blocked for
now, like Oil Refineries. If you ask to flip a refinery, the blueprint will block you, because it just doesn't make
sense, there is no way to rotate a refinery into a flipped state. At best your fluid setup wouldn't work, at worst you
would now be mixing fluids like this (notice the steam pipes now lead to the oil inputs on the copied refinery):
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-flipping-2.png">
</p>
<p>
The only proper solution is to flip for real. Actually flip the building about an axis to produce a mirrored result so
that the inputs and outputs are where you might expect them to be. This is easier said than done though, the pipes still
have to line up with the connection points on the building itself or we end up in even weirder territory of fluids going
into walls. There needed to be limits on how buildings could flip.
</p>
<p>
After a lot of doodling on graph paper to visualise all the options, I ended up only allowing buildings to flip over
their line of symmetry, so all inputs and outputs would still match once flipped. If a building doesn't have any
symmetry, it still can't be flipped as there's nowhere for the pipe to go on the other side of the building (looking at
you Pumpjack).
</p>
<p>
The Oil Refinery has horizontal symmetry, so you can flip all the coordinates of the inputs and outputs over the
vertical axis and still land on a usable pipe connection. Those of you who remember your high school geometry will
realise that to perform a vertical flip, you can mirror horizontally, then perform a 180 degree rotation to get the same
result. So every building only needs one line of symmetry to be mirrored, and can then be rotated to suit. With the pipe
connections mirrored the fluid inputs/outputs now match what the flipped pipe setup needs.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-flipping-4.png">
</p>
<p>
The available symmetry for each building is detected automatically when the game loads, so mods can make use of this
feature without changing anything too. If their buildings have symmetry of their fluid connections, they can be flipped.
So I could finally tidy up some of the builds on my <a href="https://mods.factorio.com/mod/space-exploration">Space Exploration</a> playthrough.
<br/>That's when I stumbled into:
</p>
<h4>The Final Boss</h4>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-flipping-3.png">
</p>
<p>
This is the Space Manufactory from the Space Exploration mod. It has 12 pipe connections and only diagonal symmetry. It had me
back to pen and paper scratching at corners of my brain I haven't used for a while. Flipping over a diagonal doesn't
just move the position, it also rotates by 90 degrees, throwing off all my current code that could reliably just rotate
180 degrees. After some mild weeping I began reworking large chunks of code to take into account a direction adjustment
when diagonal symmetry was in play.
</p>
<p>
Eventually it worked again and I could bask in nice, clean, back to back, mirrored builds.
</p>
<p>
Now that flipping is working on all buildings and items we decided it was worth expanding that to everywhere you might
want to flip something (not just when holding a blueprint):
<ul>
<li>Hovering over a building and pressing F or G</li>
<li>Flipping something in your hand before you place it</li>
<li>When copy and pasting from one machine to another (though this won't change the direction, just the flipped nature of the pipe connections)</li>
</ul>
</p>
<p>
In this way Flipping becomes a first class operation alongside things like rotate, in that you should be able to use it
anywhere that feels natural and have it do a sensible thing.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img src="https://cdn.factorio.com/assets/blog-sync/fff-394-flipping-5.png">
</p>
<hr>
<h3>Stack Vs. Bulk inserter<author>Klonan</author></h3>
<p>
After <a href="https://factorio.com/blog/post/fff-393">last weeks FFF</a> there was a lot of discussion about the naming of Stack inserters and Bulk inserters.
In short, it makes no sense that Stack inserters don't stack items on belts and Bulk inserters do stack items on belts.
</p>
<p>
And we tend to agree, normally we try not to change too much when we are adding new features, but in this case it just makes it too confusing.
<br/>So in 2.0, <strong>Stack inserters will be renamed to Bulk inserters</strong>, and the new inserter which can place stacks of items on belts, will take the name of Stack inserter.
</p>
<hr>
<p>
As always, flip your thoughts onto us at the usual places.
</p>Friday Facts #393 - Putting things on top of other thingshttps://factorio.com/blog/post/fff-3932024-01-12T00:00:00ZV453000<p>
Hello,
<br>
I have an irresistible urge to tell you a little story. I'm sure you come here for stories, don't you?
</p>
<hr>
<h3>A story</h3>
<p>
Once upon a time, in a land where smoke, pollution and genocide is the norm, there were these developers. They have added various methods of logistics to their game, and the various methods were not always in harmony.
</p>
<p>
In the community, camps were created and on occasion arguments were raised. Eventually, even these developers added their perspective which could only be equalled to fuel to the fire. Torches and pitchforks were picked up... There were ideas how to calm this dispute, but not much came out of it. Except 96 forum pages of arguments, along with splitter output filters and priorities.
</p>
<p>
But some ideas are harder to kill than others, and one Friday a developer dug too deep. "For the lulz and discord reactions!" He thought to himself in the heat of FFF discussions, and charged his steed forward. Madness followed.
</p>
<p style="text-align: center; margin: 20px auto 20px auto;">
<video controls playsinline title = "The initial experiment Boskid spawned." style="box-shadow: inset 0px 0px 3px 0px #000000, 0px -2px 2px -1px #000000, -2px 0px 2px -2px #0f0d0c, 2px 0px 2px -2px #0f0d0c, 0px 2px 2px -2px #ebe6e4;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-boskid-went-nuts.mp4" type='video/mp4' />
Mp4 playback not supported on your device.
</video>
<br>
<i>Heresy time it was, Boskid going ape beyond the point of no return.
<br>This was the GIF posted to discord with the first experimental changes.
</i>
</p>
</p>
<p>
Justice was served as in response I gave this noble-went-mad knight reasons why his heresy can't stand. Reasons already discussed repeatedly in the past. Though I've also shared my affection for this kind of sin as I too have dreamt about it many times.
<br>
The horror went through our internal #random channel, and kovarex the mighty responded with curiosity and interest as well.
</p>
<p>
And you know how it usually goes. Reiterating reasons why it can't be done gets you to think how to do it, again... and I have indeed found a way we hadn't considered <a href="https://factorio.com/blog/post/fff-225">before</a>.
</p>
<p>
The holy grail shall now be called the <strong>Bulk inserter</strong>.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img style = "box-shadow: none" alt="Bulk inserter"
title="Bulk inserter"
src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-inserter-technology.png">
</p>
<hr>
<h3>Bulk inserter</h3>
<p>
The Bulk inserter is the only way to load belts with stacked items. The new key detail that makes it work is that the Bulk inserter only ever starts swinging when its hand is full. This guarantees it will only ever put full stacks of items on belts.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Bulk inserter is the way to put stacks on belts." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-01.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
Suddenly all of the pieces fall into place:
<ul>
<li>Inserters can only put items into empty spots on belts, no putting onto existing stacks.</li>
<li>Side-loading and splitters do not modify the stack heights at all.</li>
<li>If only Bulk inserters interact with a belt, there will be only maximally full stacks.</li>
<li>If an inserter taking items from the belt has a smaller hand than the belt stack size, it will only take as many
items as its hand can carry - leaving a non-full stack in place.</li>
<li>If you want to re-stack the belt to the maximum, you can pick up and re-drop the items with the bulk inserters.</li>
</ul>
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Normal inserters can cause smaller stacks, bulk inserters can be used to re-stack a belt." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-02.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
We have a new type of research bonus, <strong>belt stack size</strong>. At first along with the bulk inserter you just get +1 bonus, and eventually get to +3, meaning you can have at most stacks of 4 items each. Mods can increase this number but we've found that 4 is already a massive buff to belts, without completely breaking the graphics.
</p>
<p>
The bulk inserter has a greater hand capacity than the stack inserters (16 compared to 12) so it's usually superior, but its use is a bit more complicated in places where multiple items are transferred - it could get stuck waiting for the "wrong" item type. So you need to be a little careful when using it.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Inserters draw multiple items in their hand." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-08.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
You may have noticed that inserter hands now show more than one item which is beautiful to look at as you can anticipate when it will swing. This applies for all inserters, not just the bulk ones. The amount of items drawn is halved so it doesn't look too ridiculous.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Big mining drills output full stacks." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-04.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
That same evening we had a call with Boskid and Rseding where I presented this idea to them and they said it's technically doable. Boskid went ahead and implemented the bulk inserters, Rseding made Big mining drills automatically output stacks of items, and I went to think about the graphics.
</p>
<h4>But what will the Bulk inserter look like?</h4>
<p>
After some thinking I tried to make a more robust arm, with more fingers to allow holding more items together, but that was not enough. Inserter graphics get stretched in so many ways that it's very hard to make a different shape actually matter much, so I knew it'll be up to the color to really make a difference.
</p>
<p>
As you probably know, we kind of use a lot of colors for inserters already. So which one would be next? Neither pink nor black sounds great, and other colors just seem too similar to what we already have.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img style = "box-shadow: none" alt="Inserter colors"
title="Inserter colors"
src="https://cdn.factorio.com/assets/blog-sync/fff-393-inserter-colours.png">
</p>
<h4>Goodbye filter inserters</h4>
<p>
I mentioned this issue when presenting this feature on our Monday meeting, and we came to a solution. <strong>In Factorio 2.0 there will be no more filter inserters</strong> - instead, all inserters will be capable of setting 5 filters.
</p>
<p>
When you place an inserter down, we don't want it to be stuck "waiting for filters", so we added a "use filters" checkbox to the inserter GUI, which is off by default of course.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img style = "box-shadow: none" alt="Inserter GUI"
title="Inserter GUI"
src="https://cdn.factorio.com/assets/blog-sync/fff-393-inserter-filter-GUI.png">
</p>
<p>
Overall having less entities to worry about is always nice, and removing filter inserters is quite convenient in various places:
<ul>
<li>How many times has it happened to you that you are building something and you run out of stack inserters while you still have plenty stack filter inserters in your inventory?</li>
<li>In the context of Space Age, it is common that you send both types of inserters to the space platform while now you'll be fine with just one. On top of that, some of the asteroid processing and related recipes were hitting the 1 filter maximum of the stack filter inserter.</li>
<li>It can also be really convenient to be able to set filters on long handed inserters.</li>
</ul>
</p>
<p>
This frees up purple and white from inserter colors, so I could use the new inserter shapes and paint them white.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img style = "box-shadow: none" alt="Bulk inserter item icon"
title="Bulk inserter item icon"
src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-inserter-item-icon.png">
</p>
<p>
All that was left for graphics was technology icons. For programming it was making the stacked items draw correctly - which is easier said than done. I had two main conditions how it should look. The easier one was that items deeper in the stack should appear darker. The one where Posila lost half of his hair was sorting the drawing of stacked items by layer, but with some of his dark magic and hair sacrifice, he had prevailed yet again.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Stacked items on belts, darkened from the bottom and sorted in layers from the bottom up." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-05.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<hr>
<h3>Faster belt tier</h3>
<p>
When we started working on Space Age one of the obvious things to add was a new faster belt tier.
</p>
<p>
The main reason we have never added a belt tier faster than the Express belt was because it just starts looking way too quick, and the belt movement becomes quite confusing or even looking like the items are moving backwards.
</p>
<p>
The graphics are a bit more than a simple recolor. When empty, these new belts also have double the arrow spacing compared to express or fast transport belts, and there are little touches like hints of dark arrows which help to see the belt move correctly.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "A new faster belt tier." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-07.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<p>
The undergrounds of these belts can reach 2 tiles further than Express underground belts, which is convenient in a lot of places.
</p>
<p>
When full of items, at their 60 items/s speed, it becomes really hard to tell if the items are moving or not. We've observed that items with randomized icons like raw ores don't have this problem. After some brief thinking, Hrusa had the idea to randomize the colors of items on belts. You won't notice the effect at a glance but it helps to see the movement a lot.
</p>
<p>
<div class="panel-inset p0 m0">
<video title = "Full, stacked, fastest belts." autoplay muted loop playsinline style="display: block;">
<source src="https://cdn.factorio.com/assets/blog-sync/fff-393-bulk-06.mp4" type='video/mp4'/>
Mp4 playback not supported on your device.
</video>
</div>
</p>
<hr>
<h3>Conclusion</h3>
<p>
Increasing belt throughput was something we had really wanted to do for a while now, and <a href="https://factorio.com/blog/post/fff-375">Quality</a> magnified this desire 6.25 times (machines can work 2.5 times faster * speed modules can get 2.5 times faster). Not to mention some of Space Age's producers craft much quicker than assembling machines do.
</p>
<p>
For a while we had restrained our hopes by just adding a faster belt tier, but we knew we'd ideally want something more, and the belt stacking had always been the ideal candidate, we just didn't see a way how to implement it.
</p>
<p>
One of our concerns was that if transport belt throughput multiplies, you might never need to use more than 1 or 2 belts worth of throughput for almost any item, reducing the logistics challenge drastically.
With Space Age adding planets, we can now easily lock things quite far in the technology tree, which is the case for both the Bulk inserter and the faster belts, with each being unlocked on a different planet.
<br>
Also, we were always hesitant to add more entities, but now Space Age adds quite a few and one more inserter tier isn't that much more to add, especially as we've removed 2 filter inserters in turn.
</p>
<p>
People who build factories optimized for UPS (updates per second) eventually got the idea of using circuit network to force inserters to fill their hand before swinging. This new type of inserter can now do this out of the box, resulting in a nice little performance optimization.
</p>
<p>
This might be personal affection but I also think items on top of each other look absolutely psycho in a very good way. Obviously some items look more wild than others and we might consider to do something about it if we have time, but for what matters is that the feature works and it's a lot of fun to play with.
</p>
<p>
In the end, our old dream of stacks of items on belts finally became a reality, and belts with bots lived happily ever after.
</p>
<p style="text-align: center; margin:auto; margin-top:20px; margin-bottom: 20px;">
<img style = "box-shadow: none" alt="Happily ever after."
title="Happily ever after."
src="https://cdn.factorio.com/assets/blog-sync/fff-393-happily-ever-after.png">
</p>
<hr>
<p>
Please do bless us by stacking up your thoughts and beliefs in the usual places.
</p>