The problem with rail building is that it has too many states. It depends whether you start building the rail with shift, to use the ghost mode or not, and then it also matters whether you still hold shift, to ignore trees or not. Moving from manual building to ghost rail building means cancelling the whole rail building and starting it again with the correct modifier.
The problems were reaching the surface from time to time, and Twinsen even drew a nice little state diagram of the rail building system.
It kind of peaked with this bug report. After some time, it became clear that we should simplify it.
This is a nice example, where we can talk about change we just released (0.17.29) in a FFF.
From now on, instead of 3 modes (building manually, ghost building, ghost building + tree/rock removal), we have only 2 modes, where the ghost building without obstacle deconstruction is not available anymore. So it doesn't matter anymore how you start the building, it just matters whether you are holding shift or not at the moment, which makes it consistent with the normal entity building and the ghost icon.
Once the topic is opened, it is hard to leave it so easily, so we agreed that the rail building could be streamlined even more. The current model is, that you have to build one straight piece of rail first, and then you can use the rail builder on the edge of that rail. It is annoying generally, and especially for the new players, because he might miss the way how it is being used, as the straight rails are built exactly the same way as other entities. The reason we did it this way was mainly, because when we first introduced the (new at that time) rail builder, we weren't confident enough that it could replace even the basic straight rail building. But since the rail building is stable enough, we might go one more step forward.
The plan is that the rail won't be used to build straight rails normally the way you can now. The rail item would be always used to build by the rail planner only. Instead of having to snap to an existing rail, you could just start building anywhere on the ground. Instead of showing the rail preview when holding the item, you would see the arrow as when starting the rail building, and you could rotate it with the R key. It would make sense, to make the arrow color/size different for starting a rail planner on the ground versus snapping to an existing rail, but other than that, it would be the same.
High-res icons
Until now with the old GUI non-scalable system, we hadn't had much of a problem with the icons. We use one single version of 32px to display in the GUI slots, and the zooming system of the game takes care of the re-scaling for the rendering in the world.
This is not a perfect solution because we use the same set of icons in the GUI and in the world. That means that the zooming level of the game can re-scale them up to 25% so we lose pretty much all control of the bitmaps, and the readability of them is affected. Now with the high resolution possibilities of the new GUI system, we need to double the size of the bitmap, therefore the original icons must be 64px in order to have a correct visualization at 200% GUI scale. We are still using them in the world, so the engine can rescale them up to 9.55%. The amount of out of control pixels is now much more serious.
Unisize vs Mipmap We are exploring some possibilities and we want to keep it simple. For now we are testing the limits of our old technique: one single bitmap for all the uses.
Delight yourself with this test icon placed on the belt. 64x64px size, every square is 8px. With it you can see how extreme the resizing can become: From maximum zoom level 3.053 = 76.325% icon size. To minimum zoom level 0.382 = 9.55% icon size.
To solve the problem for making it work in all the situations we design the icons in a very synthetic way. We simplify the shape to its purest meaning like the case of the assembling machines, where 1 gear + the color indicates level 1, 2 gears means level 2, etc.
This solution works but we have a lot of icons (~355), and many of them are very complex in their shape and/or meaning. In some cases this complexity is essential at the time of designing the icon -especially the entities- so we need to find the proper synthesis for each icon as we did with the assembling machines. They work fine at any zoom level, even at 128px. But with other entities, like the big electric pole, it's more complicated to keep this level of minimalism due to the fact that the shape itself is already complicated in its essence. If we make it less complex, we wouldn't be able to recognize it anymore.
A possible solution would be using a very minimalistic flat icon, but this wouldn’t be integrated as an object in the world. We don’t like that. The other solution is using mipmaps. So we use different versions of the same icon optimized for different zoom levels. We would notice the change of version at certain zoom levels, and for solving it we must complicate the situation. This complication would be not just for the code to create some crazy crossfading effect, but also for the designers to keep the several versions of the icon close enough as to not feel the change.
I would try to be pragmatic and I bet for the unisize solution based in a proper synthesis, but it’s not going to be easy for sure, like the entire history of Factorio development.
As always, let us know what you think on our forum.
Added ability to set a maximum number of map upload slots for multiplayer servers. Setting this is recommended to prevent the server from being flooded with map fragment requests from clients.
Optimisations
Optimized alt-mode icon background rendering. more
Bugfixes
Fixed that cut tool marked trees/rocks/cliffs for deconstruction when there was other valid entity in the selection. more
Fixed that movement by keys or clicking on an alert didn't unsnap the currently followed train in the map. moremore
Fixed that the game would crash when showing blueprint library tooltips. more
Fixed that the game would crash when showing a blueprint library tooltip in multiplayer when the blueprint/book was removed by another player.
Fixed alt-mode icon background for narrow icons was very subtle. more
(0.17.31) Fixed a crash when hosting multiplayer games in some scenarios.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.
Simplified rail building. Holding shift while rail building always activates the combination of ghost-rail-building + remove-obstacles, releasing shift returns back to normal manual mode. It doesn't matter anymore, whether the rail building started with shift or not. This removed the possibility to do ghost-rail-building without the remove-obstacles, but since it seems to be almost useless, we consider it to be worth the simplification.
font/color rich text tags now have to be properly terminated. This means eg: "[color=red]Red circuits" will now need to be "[color=red]Red circuits[/color]". This fixes a number of issues with handling start/end tags. moreeven more
Enter key will be shown as "ENTER" instead of "RETURN" on Windows and Linux. more
Minor Features
Added a shortcut for increasing/decreasing/resetting UI scale, mainly for debugging of proper automatic adjustment of UI, but people might find it useful for something as well.
Bugfixes
After a realization of a big misleading mistake, the pollution per second had to be renamed to pollution per minute, because it is what it actually is. more
Fixed that tree pollution absorption was recorded as pollution emission in the statistics.
Fixed that equipment electric network priority migration wasn't present. more
Crafting group selection by typing exact recipe match will now preserve the same way as selecting the crafting group manually. more
Restored previous behavior where normal (not only underground) pipe connections reconnected when a fluidbox got removed. more
Fixed crash when robots try to revive locomotive that has both front and back wheels on rails, but no rail in-between. more
Fixed that repair packs could be lost if they didn't fit in your inventory when using personal robots. more
Added missing pipe connection arrows to flamethrower turret. more
Fixed that custom GUI style values specified directly on the elements weren't updated after UI scale change. more
Fixed that the electric network GUI would sometimes be opened when starting deconstruction planner selection on an electric pole in the map view. more
Fixed that Textfield and Sliders didn't update its size properly on UI change.
Fixed UI change update in ModSettingsGui and MapGeneratorGui with preview open.
Fixed quickbar selection disappearing when cursor stack is refreshed with a new stack. more
Fixed that nested frame styles (horizontal flow, vertical flow, header filler flow, filler) weren't initialized/updated correctly in the GUI created by script.
Fixed that the loading indicator in the browse games GUI was left of the "Back" button. more
Fixed turret prototype definition allowed ammo_type of attack_parameters to be optional resulting in crash when the turret started to shoot.
Don't consider recipes with 0 minimum amount (and possible randomised result) when resolving automatic crafting of ingredients when crafting manually. more
Scripting
Changed the LabelStyle::want_ellipsis default value to true and it is never changed to be something else now. We are considering to even remove this style property completely, as we basically want the ellipsis always when the label is squashed.
Added tile parameter to on_player_built_tile and on_robot_built_tile.
Added emissions_per_minute property in the energy source, that is supposed to replace the emissions_per_second_per_watt which was basically wrong and hard to work with, both emissions_per_second_per_watt emissions definition will work for some time (at least in 0.17) so mods don't get broken.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.
Hello, we are still focusing most of our resources towards fixing as many bugs as possible so we have stable release in reasonable time. In the meantime, the preparation for the continuation of the work on the GUI rewrite is still happening:
Character GUI mockup
The character screen is one of the most used GUI screens in the game, so we need to really try to do it right. We are moving towards the final version of the mockup, so we can start implementing it soon.
Crafting tab
Left frame
(1) Inventory: We just translated the previous okay mechanics to the new style so we don’t add nor remove any important function.
(2) Slots: Those are darker now in order to improve the contrast and readability of the icons.
Right frame
(3) Panel tabs: The regular system of tabs takes quite some extra space, so in order to keep a compact design we decided to use a new system for tabs attached to the panel itself. This is a measure we take due to the importance of this player window compared to some other panels. When a tab is selected it looks like a title for the panel frame and the inactive ones are like regular tabs.
(4) Search button: After iterating with the design of the new GUI we realised that our actual solution for the search bar is not efficient enough. Our problem was that we were placing it as a tool button in a subheader, so many times we had the situation of placing a subheader in a frame just for the search bar, no tools. This solution takes a lot of space and also can be conflicting with the space for other tools. So we decided to have the search as a panel function attached to the panel and opening it in a floating small window that can be placed anywhere in the layout, certainly very handy.
(5) Info button: This function opens an overlay with relevant information about the usage of the panel. This is a new feature and we will probably speak with more detail in future posts.
(6) Close button: You will still closing the panel with escape, no worries, but we need a graphical clue for the newcomer to learn how to close a panel. Those buttons will have tooltips explaining shortcuts and relevant information.
(7) Category tabs: The “classic” version uses buttons, For a better readability we find more proper using tabs. With a situation of a heavy modded game we will divide the space for the tabs by the number of categories, so we can have as maximum 8 tabs. For more than 8 tabs, we will add new rows below, and we will change the tabs system for the classic buttons solution increasing also the height of the panel until reaching some generous max height, after this we will be forced to use a scroll. But this solution should be very extreme.
(8) Virtual slots: The classic GUI version uses slots for everything, even for crafting buttons. We decided to go deeper on this concept and we’ve created different kinds of slots. Regular slots are used for “real” items. Things that the player has in the inventory. Virtual slots are referring to the idea of an item. And they should look like a button: like a crafting button. You must be used to them already in the 0.17 series with the action bar.
(9) Rubber grid: This tileset gives us the idea of dynamic content, and saves the balance in the composition.
Logistics tab
Feature wise, most of the changes are in this tab. In the current version, there are logistic requests and trash slots presented as two separate tabs:
As you most probably know, the requests are specifying how much to deliver from the logistic network, while the auto trash is used to specify what is the maximum before items are moved to trash slots and taken away back to the network.
There are several problems with this:
Its possible to request more than you have set in the auto-trash, leading to a infinite loop.
It is cumbersome to align the values when I want to have the maximum and minimum counts the same.
The player doesn't see it all in one place
Auto trash has infinite slots, the requests do not.
This is how the current mockup looks:
These two tabs were merged into one (1). Every slot can specify minimum (the request), maximum or any combination. The amount of slots is infinite.This means, that the slot have 6 basic variants:
(2) Requested amount is the same as maximum amount: Just the number of the request is shown.
(5) Requested amount is specified and maximum (bigger) amount is specified as well: We show the numbers in a column following the order of min/max.
(6) Requested amount is specified, maximum amount is not limited: Similar as (5), just showing the infinite symbol for maximum.
(7) Item is not requested (request amount is 0) and maximum amount is specified: We need to show 0 for the request, to differentiate it from (2)
(8) Item is not requested and maximum amount is 0: When you don't want the item to be ever in your inventory, in this case, we just show no number, same as it is in the auto trash slots now.
But this is not everything, there is one little feature in current version, where you can hover a logistic slots, and see how many robots are on the way, and how many is available in the logistic network. This is very handy thing, but not really practical to use:
So what we will have is, that the slots themselves will have color styles depending on the state.
(2) All the items are delivered: The default style.
(3) items are on the way: Yellow button style (color can change).
(4) Items not available: Red button style, no items are on the way, and there is not enough items in the network to satisfy the order at this moment.
There could be one more color for when robots are on the way, but there isn't enough in the logistic network, as when you request something that is just being slowly produced, you will have always one robot coming with the freshly created product, but it would take a long time until there is produced enough. But we need to consider whether it is worth to do it or not.
I imagine this to be useful when I come back to the base to let the logistic robots "refill" my inventory, I can just open the logistic tab, and see how the yellow slots are becoming default color, or easily spot what is missing. I already know in advance, that this is the kind of little feature that I will not understand how could I play without it.
The logistic request slot is kind of an extreme, as we need to show different kinds of information on top of each other (the icon, the slot type, and the request/trash combination type, and I hope that won't look too chaotic to new players.
Character tab
These are basically the leftovers of what the character might need to access/configure. The important thing is the weapons slots being here, which solves the problem of not being sure what shift-click is going to do. Now, when you have logistics tabs opened, shift-click moves to trash slots, and when you have the character tab opened, it moves it to weapons/armor.
Factorio at EGX Rezzed
A small part of the team is at EGX Rezzed this week. If you are attending, be sure to find them in the Indie Basement and pick up some free pins. From left to right: Wheybags, Abregado, Klonan, Twinsen, Dominik.
As always, let us know what you think on our forum.
I'm sorry to say that we have removed the RTL language translations (Hebrew and Arabic) in 0.17.20.
Until this point we've had a half implementation of RTL languages, where the text is simply flipped when we download it from Crowdin. This 'works' for a decent proportion of things, but not nearly 100%. In order to attain the level of polish we want for the 1.0 release, we would need to spend a lot of time implementing proper support for RTL layouts. This just doesn't make sense for us given our current goals, and the proportion of our player base which uses these languages (less than 0.1%). We decided that instead of completely gutting the translations, we could leave them in for those who enjoy them, but not to offer them in the GUI as defaults.
The languages will remain up on Crowdin, and the locale files will still be present in game, but there will be no option in the in-game language options dialog to choose them. If you want to use an RTL language, you will have to manually edit your config file to set your locale. Detailed instructions are available on our forum. What this also means, is that we won't be investigating any bug reports about RTL issues.
Interesting bug reports
Years ago when I was just getting into the programming field I was told by others that someone typically starts in the QA/bug tester positions and if they prove themselves can move on to do the "fun" work. That implies that the QA/bug tester positions aren't fun and that I should look forward to being done with those tasks. It was 4 years, 7 months, and 8 days ago (as of writing this) that I asked Kovarex about possibly letting me help fix bugs in Factorio and today bug fixing is my 2nd favorite part of working on Factorio (with optimizations taking first place).
The weirder and more difficult a bug is to track down the more I enjoy working on it and finally seeing it resolved. Naturally as I've spent so much time working on bug fixes (in the same code base - and always going for the difficult ones) I've gotten quite good at it. One of the fun parts of fixing the difficult bugs is putting the reproduction steps in the changelog and watching peoples reactions when they read the patch notes for that release.
Some of the more interesting ones from the 0.17 bug fixing so far:
The game would crash when bringing up the escape menu in multiplayer while in the middle of using blueprints/deconstruction planners then releasing the mouse button.
The game GUI would be hidden if the game was saved and loaded while the technology GUI was open.
Resizing the window while loading on 4k screens would cause the loading progress bar to not render (but text still worked fine).
The game would crash when removing the target rail of a temporary train order if the target rail was a dead end.
The game would crash if you opened the update-mods GUI, weren't signed in, then closed the sign-in prompt, clicked refresh, signed in, left the update-mods GUI, and came back to it (found from automatic crash logs).
The game would crash if the open GUI target become invalidated during the same tick as autosave starting (found from automatic crash logs).
The game would crash when trying to open the set-filter GUI on the ammo inventory of another player opened using the /open command (found from automatic crash logs).
The game would crash when if you re-joined a multiplayer game that you lost connection from while the tips-and-tricks window was showing (found from automatic crash logs).
The game would crash when accepting a Steam game invite if a previous attempt to manually join a multiplayer game was in progress. (found from automatic crash logs).
The game would crash when loading if you had a modded save with 2 different assembling machines with 2 different fluid recipes that both migrated to different recipes with different amounts of fluid inputs/outputs (found from automatic crash logs).
Most of these where ~10 line fixes but the reproduction steps took anywhere from a few hours to a day.
They still haven't beaten the best ones we've had previously:
The game would crash when clicking "Restart" from a running game if the new game happened to be created at the exact same memory address as the old game.
The multiplayer map transfer logic would get stuck forever trying to send the last packet if the CRC for the packet happened to be a specific value that some routers interpreted as bad/invalid/flagged to be dropped.
And finally the best: The game crashes randomly inside heavily threaded rendering logic if you have an AMD Ryzen CPU with older chipsets drives and BIOS. We still get crash reports from this one - a handful with each release. The fix for this one is simple: update the chipset drivers and BIOS. It's common enough that we'll most likely add a special message if we detect it happening. See this forum post.
Overall bug fixing is going well. We had a rough release earlier this week related to some GUI logic not working correctly. In the past we've talked about our automated test system (FFF-186) which normally tests game logic. With the rough release earlier this week it pushed me to get the test system in a shape where we can run automatic graphics tests (in hopes of avoiding the issues we had during the 2 broken versions). We still have a few small things to fix but otherwise the automatic test system can now run the full graphics interface while running the tests (in parallel). Just for fun, I set it up so it would arrange the windows in a grid:
Since forever, when killing an entity we used generic remnants (with a few exceptions, walls, rails...). We only cared about the size of the entity and it is done.
This is an okay solution, but we want more specific and natural remnants, so it is possible to recognize which entity was destroyed. That’s not really super necessary because ghosts are normally providing this information, but we are polishing the game and making everything nicer when possible. So we started experimenting with the small electric poles.
We realised how simple things can become complicated in no time with Factorio. For starters, the old generic remnants are very flat because the character can walk on top them and they have no collision box. Also they are moved from the objects layer to the corpse layer which is rendered under it. Now that we want more specific and custom remnants for entities, sometimes we need to grow in the Z-axis, which can result in something like this:
No big deal, we just need to keep the remnants in the object layer and everything is solved. The new problem is the sorting of the objects layer. Factorio renders the objects from top to bottom and from left to right. Meaning that objects on top are covered by objects below them, and objects on the left are covered by objects to their right. So we need to be very careful with remnants invading tiles not assigned to them. This makes the composition more difficult because this can happen:
In this case we were lucky, because that looks nice, but in the other direction we wouldn’t be so lucky. With more heavy remnants like nuclear reactor or oil refinery, we are not going have this happy accident anymore. Of course we will try to make these happy accidents possible with any setup, but allow me to be skeptical in this regard.
No big deal again, we just stay in our assigned tiles and we’re safe. But our chaotic composition of destruction starts to be pretty much like an Ikea assembly kit. Everything in place almost as it was before. But we still have the Z-axis let’s use it.
Well, remember that the player can walk through it and the remnants don't have collision boxes. It’s going to be really weird seeing the player literally ignoring the physicality of the world. One potential solution proposed was to add a collision box to the remnants, so we avoid this nasty visual effect. This solution seems nice from the beginning but it touches so many aspects of the actual balance of the gameplay that we dismissed it.
We are still experimenting with it, and trying to find the best approach in between all these limitations. Hopefully soon we will find a proper solution.
As always, let us know what you think on our forum.