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.
Fixed undo of circuit conditions of entities in the ghost state. more
Fixed train pathing inconsistency between normal station departure and waypoint. more
Fixed problems related to rail path waypoints and station removal.
Fixed logarithmic sliders not showing value of 1. more
Fixed logarithmic sliders showing the same value for some positions.
Fixed logarithmic sliders not showing correct initial position.
Fixed Rich text icons not working in rotated text. more
Fixed a crash when loading saves converted to scenarios in the map editor after changing mods. more
Fixed that the inventory hand was not activated when the cursor was auto-refilled when entity building, tile building, fast transferring, repairing, using capsules or dropping items. more
Fixed that fast-replacing ghosts would not transfer settings.
Fixed that double clicking on a list box scroll bar would trigger the confirm action. more
Fixed train GUI preview not centering on locomotive when opening the color picker. more
Fixed gui clipping for scrollpane inside a scrollpane. more
Fixed biters ignoring the player when building a new base. more
Fixed that copying settings with a blueprint would not show returned materials. more
Fixed turret ranges with huge radius would not render correctly when zooming into a map. more
Fixed that the reset queue would reset if the the game window is resized whilst the technology GUI is open. more
Fixed that resizing the game window would clear the search filter in the technology GUI. more
Fixed that crafting machines with an empty fluid_boxes key could be rotated. more
Fixed train state not updating properly in some specific cases. more
Fixed mining drill showing misleading message when building on top of invalid resources. more
Fixed a crash related to assemblers that sometimes occurred during loading 0.16 modded games.
Fixed a crash when opening map too fast after creating a new game or new surface. more
Fixed LuaPlayer::open_map, close_map, zoom_to_world would mutate rendering state while render thread was possibly using it causing crash. more
Changed the custom scale slider in interface settings to be disabled when automatic scale is selected.
Fixed train path finding in a special case of a loop with no signals and exactly one intersection. more
Fixed clipping when the preset description in the map generator is scrollable. more
Better path selection within one segment that is in a loop. more
Hello, This week has been non-eventful. We are fixing bugs. There is not much to say, and I have updated the graph to reflect the status of the ongoing Dev vs. Bug war:
The massive spike is the specific crash we talked about in the last FFF.
EGX Rezzed
We will be attending EGX Rezzed in 2 weeks. This week I have been finishing all the preparation work, such as furniture and equipment rental, accommodation, our itinerary etc. We will have a booth in the South Vault, with a couple of PCs for playing the game. If you are also attending be sure to pop by (We might have some free swag).
This will probably be the only conference we will exhibit at this year, as there is some non-trivial team effort in arranging our attendance, and we want to focus that effort into finishing 1.0. Saying that, each time we exhibit at a new conference we learn a lot, and its good to have a couple under our belt before deciding our post-1.0 event plans.
Splitter belt compression
There were different kind of Splitter compression problems over the years and we had to apply more and more fine-tune tricks to keep it as good as possible in all the special cases, which became even more complicated with input/output priorities etc.
Our situation became worse in 0.16 by the fact, that we started to have the debug option of show-transport-line-gaps, which suddenly made even the smallest gap, previously unnoticeable, possible to be seen by the players. On top of that, once we made the gaps 0.25 of a tile in 0.17, even without the debug option, the circuit network can now easily notice any slight compression imperfection. This basically means, that the proper compression of a belt has more value.
When we encounter situations like this in the bug reports (and similar), we have to try to fix it.
In this situation for example, the timing of the incoming items allows the Iron plate to move through the Splitter, but in a way, that it is slightly further from the previous.The internal code is logical, but from the players perspective, it doesn't really make sense that adding an extra item on the input can make the output little bit less compressed.
There were a few different ideas of how to fix it. One of them was that the Splitter could basically have a tiny internal inventory that would work as a buffer. But due to the change to the logic and possible performance implications, we decided this idea isn't good enough.
The solution we settled on is actually quite simple. This is the way how Splitter worked before, it had 0.5 tile long ramps of inputs, and 0.5 tile long ramps of outputs.
So we just extended the input ramp by a little (+0.2 tiles) and used that extra length as a small buffer. With some extra logic to properly transfer the position of the items from input to output, this solution was able to solve all the little timing problems.
The only real change for players is that Splitters need 20% more items for the belt to be fully backed up which is kind of insignificant.
Invalid usernames
As you might remember, even if you've bought Factorio from Steam, in order to join multiplayer, the game asked you to register an account. We have the typical restrictions on username characters: alphanumerics and the characters ._-.
Back in December, one of our developers made a slight code edit that inadvertently made it possible to register an account from in-game without checking whether the username is valid... In two months we have gathered 1,945 registered accounts that don't conform to the intended restrictions. Things mostly work fine with arbitrary usernames, but one big problem is that it's impossible for server owners to ban people with spaces in their usernames!
Most people who registered an account like that intended no harm, but sadly we can't let arbitrary usernames stand, so they will be asked to change their username on factorio.com when they attempt to log in.
My apologies to users too sexy for your party, NOT THE BEES!!!!!, your mum lives in a tent, and ' or 1=1; --.
As always, let us know what you think on our forum.
Disabled vanilla pollution attacks in the NPE until after the final wave.
Changing teams in PvP will try to preserve the current character. more
Bugfixes
Fixed alerts showing for trees and rocks in the NPE more
Fixed solid fuel not triggering "fuel furnace" quest item more
Potentially fixed scrap metal crash bug again more
Fixed that a fluid furnace revived from a ghost would not work. more
Fixed that launching tutorials could leave the running game in a broken state. more
Fixed that clearing the ghost cursor did not clear the hand in the quickbar. more
Fixed Compilatron blocking placement of burner inserter in NPE more
Fixing a bug from last version that allowed fluid mixing by setting a recipe in assembler. more
Different alert when unable to revive ghost due to fluid mixing by hand vs. by robot. more
Fixed spitters would not properly target construction robots that are blocked from fulfilling their task. more
Fixed a crash when joining Steam game invites while a multiplayer connection is in progress.
Fixed that the "research finished" indicator would display the wrong technology level. more
Fixed a crash when removing the end rail of a temporary train order. more
Fixed that cargo wagon filters wouldn't get preserved in blueprint strings. more
Scripting
Fixed that printing the output of LuaProfiler anywhere except log(...) would cause a desync. Note: this means if the results are shown in things like player.print() they won't persist through save/load (but won't cause desyncs).
Fixed Electric Pole smart coverage placement not building over other pole ghosts. more
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.