Removed the message of "<X> is in the way" when building over the exact same entity with same direction and position as in cursor. more
Rails under trains can be marked for deconstruction. more
Better latency hiding in multiplayer when experiencing connection issues. Less issues with rubber-banding or character teleporting.
Latency hiding is no longer completely disabled when the character is shooting. Character position and animation are still not latency-hidden while the character is in combat (10 seconds after shooting or taking damage). This should make combat smoother in multiplayer.
The Linux version of the game now depends on PulseAudio.
Bugfixes
Fixed adding conditions to a train station after it was dragged. more
Improved drawing of a wall preview in some special cases. more
Fixed that the sync-mods-with-save could in some cases leave mods enabled. more
Added Right Control as secondary binding for "Temporary station modifier" controls. more
Fixed that migrating saves could in some cases mess up damage bonuses. more
Added a migration for unloadable saves because of invalid train paths caused by bugs in previous versions. more
Fixed that rails wouldn't build correctly if they had a fast_replaceable_group defined. more
Fixed flamethrower turret tooltip was missing info about created fire. more
Fixed that modded units with minimal attack range wouldn't try to get away from a target if they were too close. more
Fixed that train built from blueprint could miss a connection occasionally due the rail building order. more
Fixed that electric-energy-interface and heat-interface entity types didn't export properly in blueprint string format. more
Fixed Compilatron speech bubble hologram effect would cause entire screen to flicker when "Full color depth" graphics option was disabled. more
Fixed a map corruption issue related to building blueprints outside of the map through script. more
Fixed that too long description of shortcut tool could make the selection frame to be too big and unclosable. more
Fixed that reading 'disabled' from train stop control behaviors from Lua would report bad values in some cases. more
Fixed that rich text tooltips would flicker in multiplayer. more
Fixed possible crash in NPE when Compilatron builds an iron mining setup. more
Fixed multiplayer issue where a client and server would sometimes send a large amount of data, causing players with slower connection to disconnect (https://factorio.com/blog/post/fff-302)
Fixed that the wind sound would cut off abruptly when the technology screen was opened. more
Fixed that inserter tooltips would list pollution despite inserters being unable to produce pollution. more
Fixed that the bar of train wagon in blueprint was lost when the game was saved and loaded. more
Fixed that textfield selection wasn't removed when the focus was lost. more
Modding
Equipment with the "manual" shape now renders backgrounds/outlines automatically like equipment with the "full" shape.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.
For many weeks now the GFX department has been focused on preparing replacements for the placeholder graphics of the campaign crash site. The subject as usual is not that easy because we had to first solve the main concept of the crash site.
It happens that those new entities belong to the Factorio universe, but they come from a different reality than the usual DIY/diesel punk of the game. So we had to invent a new way to design machines that look like Factorio but that are not too familiar.
Here a proof of concept of the look:
The concept is that the big (medium) spaceship broke into pieces as it crash landed, and lost many components that the player, during the introduction, will repair and use for his own profit.
The look of the spaceship remnants are a little bit based on the designs of the 60’s/70’s pulp Sci-Fi. Fortunately we can keep the look of Factorio due the accident, which allows us to destroy and dirty up the machines show many inner mechanical details.
It is also part of the concept that all the machines that the player builds, are based on an existing technology from his home planet. So the machines that we see in the regular game are like 'cheap' versions of the original ones.
For the lab, we keep the dome shape and the beams inside in order to keep consistency with the regular laboratory. So slowly the player gets used to the meaning of the shapes.
The generator is similar to a substation -more or less-, connectable like a pole but it also produces electricity. Sometimes we really have to invent.
This works like an assembling machine. The design is more based in the (yet unshown) redesign of the assembling machines, rather than on the actual 'classic' ones.
These cylinders are like chests. We decided to make them cylindrical instead of a box for this difference in technology level that we are speaking about. The player will recognize them for the shape, color, and they also always have a number printed. You don’t really want to know the meaning of the numbers.
All this new content is a work in progress, and we made these new entities first for the testing of the campaign. Based on feedback with testers we will have the chance to tweak and adapt whatever is necessary. In the case of the introduction, the positioning of the entities can have a large impact on the flow of the gameplay. Once we are more sure of the final placement, we can see how all the pieces will fit together.
The next round for the crash site is the main crashed spaceship, and some other assets that converts the scene into a full composition, more proper for the introduction of the game.
Mods do crazy things
I've heard it many times and said it myself: "It's only ..., there aren't a lot of them in the base game so it should be fine." And then mods come along and bring a slap of reality: if a mod *can* do something a mod *will* do something.
The other week I got a bug report that the game was using a large amount of memory and took an excessive amount of time to exit. After reading over the bug report I had my theories as to why it might be happening but first I needed to reproduce it. A few failed attempts later I got the correct set of mods and mod settings to make it happen. To my surprise (well not really - it happens almost every time with these things now) - it wasn't what I thought it was going to be.
Sprites. Not the video-texture kind but the internal wrapper class we use to store information about the video-texture. The game was creating an insane amount of them due to what the mod was doing. Specifically: the mod was making a lot of variations of each biter, spitter, worm, biter nest, and spitter nest. Normally that's not a problem - the game can do that easily. The problem came from how worms work. Worms have multiple directions with multiple animations for each direction. The end result is each base game worm creates 7668 sprites. ... "It's only 7668 sprites per worm, there aren't a lot of them in the base game so it should be fine." The base game has 4 worms: small, medium, large, behemoth. This mod was asking the game to make 3020.
The base game:
188'056 sprites on the main menu
1.281 seconds from launch to the main menu
245 MB idling on the main menu
0.1 seconds to exit
The mods:
41'071'478 sprites on the main menu
47.395 seconds from launch to the main menu
15'791 MB idling on the main menu
47.5 seconds to exit
Many ideas and attempts later (plus fixing all the broken stuff introduced by those changes with the assistance of Oxyd) I had reduced the time complexity of making and destroying the sprites by a significant amount and found that some just weren't needed.
The result:
23'681'677 sprites on the main menu
37.444 seconds from launch to the main menu
5'484 MB idling on the main menu
2.9 seconds to exit
A significant improvement on every measurement. I always love working on these kinds of problems because they almost always involve a lot of thinking and experiments.
As always, let us know what you think on our forum.
Fixed that the Lua API would allow the same non-infinite technology to be queued multiple times. more
Fixed a crash when queuing things to be crafting during the crafting finished event. more
Fixed train pathfinding bug related to two different station connected to the same rail from different sides when one after another is in the schedule. more
Fixed rail signal consistency when rail is removed from reserved signal. more
Added "buffer-rename-workaround" config setting as a possible workaround for rendering glitches on some Sandy Bridge and Ivy Bridge GPUs. more
Fixed an issue that made unit group pathfinding fail often, resulting in very few biter attacks. more
Fixed that the hovering entity tooltip would still follow the cursor while in the menu. more
Fixed a crash when exiting the campaign during the same tick as a script-triggered autosave.
Fixed that incompatible dependencies would effect mod sort order.
Replay button in new game GUI is now remembered after confirm. more
Changed rendering of belts to use linear interpolation for minification to reduce flickering effect on some zoom levels. more
Fixed that units could sometimes get stuck forever. more
Fixed that multiplayer replay would crash the game if it contained a blueprint transferred using the blueprint library. more
Fixed that LuaEntity::destroy({raise_destroy=false}) would still raise the destroy event. more
Fixed that the style debug tooltips could in some cases show multiple at once. more
Fixed that robots could get stuck if the chest they're trying to put items into was blocked. more
Fixed that the update mods GUI would incorrectly disable the "Update selected" button in some cases. more
Fixed that building concrete/stone paths wouldn't use all tile variations in some cases. more
Fixed a performance problem related to large amounts of incredibly fast robots and storage chests. more
Fixed turret range overlay in map was not rendering correctly. more
Fixed that turret tooltips could show damage modifiers from the wrong force. more
Prevented possible number overflow in train condition gui. more
Modding
Added uses_stack to the thrown capsule item action.
Removed the rail-category prototype type.
resource_autoplace_settings has been made public (require('resource-autoplace').resource_autoplace_settings) and the API improved. It will automatically allocate a unique resource index for each patch_set_name. 'patch_set_name' and 'autoplace_control_name' can be independently specified. 'seed1' can be specified as a parameter. The global function 'get_next_resource_index' is obsolete and has been deleted.
Equipment shapes can be defined as "manual" (a set of points).
You might have noticed that a lot of rail related stuff was broken during these past releases, and now it is working more or less fine again. The story behind is is not so trivial.
Rail signal logic
The rail signal logic for automated trains is quite straightforward:
As a train moves forward, it tries to reserve signals in front of it. If it can reserve a signal, the whole block guarded by the signal gets reserved for the train. If the train can't reserve the signal, as the block is reserved or occupied by different train(s), it stops in front of the signal and waits. Once the train passes a signal and enters a new block, it removes the reservation on the signal and block it had reserved. Once it exits the block, the block can be reserved and entered by other trains.
This looks nice and simple, nothing fundamentally wrong could happen with this logic right? Especially since we have it there for almost five years and it all just works right?
If the answer to this was "Yes", it would be quite a stupid buildup, so the answer is "No" :).
The counter example
So in this example, the train is approaching from the right. The problem is, that it reserves the block number 2 twice since there is a special rule, that a train can enter a reserved or occupied block as long as it is reserved by itself.
Since the train reserved the block 2 twice but removed both of the block reservations by entering it, the second reservation, which the train still counts on, isn't applied on the block 2, and the block is basically open for any other train to enter. This can lead to collisions and surprisingly also desyncs since we don't save block reservations, but deduce them from signal reservations while the game is being loaded.
The solution
Once the problem was identified, the solution was quite straightforward. I added support for block to be reserved multiple times, removing the reservation decreases the counter, and the block is freed only if all the reservations are removed.
But the real bugs and problems started after, because we now need to be extra sure that the block is reserved exactly the same amount of times as it is unreserved. The logic around this was far from rigid before as it just wasn't needed. Quite a few strict checks were added all over the place, to make sure that an internally incompatible state doesn't appear, since we don't really want to have to fix these "this block is closed forever" bugs where it would be close to impossible figure out how the game got into that state.
P.S. Since we can now use train stops as waypoints, not only blocks, but rail signals can be reserved more than once as well, as a train can plan path in a circle and reserve the same signal twice along the path.
The effect
You can see how the internal changes of rails bumped our crash report counts, but it will hopefully go back to normal soon.
Well, you can't make an omelette without breaking some eggs... but overall the trend continues toward stability.
As always, let us know what you think on our forum.
Fixed using repeat_count in RotatedAnimation definition would cause crash. more
Fixed rail signal consistency in case of reserved signal being invalidated by building a rail that puts both sides into same block.
Fixed rail crash related to marking reserved signal for deconstruction.
Fixed that programmatically set locale for autoplace controls didn't work. more
Fixed that scrollpane consumed the mouse wheel events even when not activated, which blocked the other (parent) scrollpane. more
Fixed that re-pathing in chain signal sequence didn't respect the need for green exit when the re-pathing was based on manual change of target station. more
Fixed that changing state of rail signal by circuit network didn't properly update state of parent circuit signals. more
Fixed that rail signal disabled by circuit network didn't prevent train passing by it if it guards a block that is already reserved/occupied by the same train. more
Limited of usage of tab/shift-tab to move between textboxes as other objects didn't support it and it seems like it isn't worth to try to support it for everything. (https://forums.factorio.com/69656)more
Reduced the UPS impact of a large number of biters trying to pathfind. more
Fixed that tabbing could move to invisible or disabled widgets.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.