1. Factorio
  2. News

Factorio News

Version 0.17.52

Bugfixes


  • Fixed a crash related to equipment rendering.
  • Fixed a crash related to tile building. more

You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.

Version 0.17.51 released

Bugfixes


  • Fixed crashes related to creating tile-ghost entities through the Lua API. more
  • Fixed that configuring blueprints and then directly exporting to a string didn't work correctly. (https://forums.factorio.com/71977) more
  • 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.
  • Fixed missing fluid icons on new ghosts. more
  • 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).
  • Added optional lamp prototype property "always_on".
Scripting


  • Added "entity_to_ignore" to LuaSurface::request_path.
  • Added target, orientation, and orientation_target to LuaRendering::draw_polygon().
  • Added LuaGameScript::item_subgroup_prototypes, item_group_prototypes, fuel_category_prototypes, resource_category_prototypes, achievement_prototypes, module_category_prototypes, equipment_category_prototypes, trivial_smoke_prototypes, shortcut_prototypes, and recipe_category_prototypes read.
  • Added LuaControl::character_mining_progress read.
  • Added LuaEntity::can_shoot().
  • Added LuaEntityPrototype::always_on read.
  • Added LuaGuiElement type "line".
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.

Friday Facts #300 - Special edition

Hello, this Special Friday Facts post is too long to post here on Steam, so we would like to invite you to read it on our website.

Version 0.17.50 released

Changes


  • Inserters are slightly faster when picking up from belts as they can now select an item and pick it up in the same tick.
Bugfixes


  • Fixed a special case of assembler pipe connection bug. more
  • Fixed a crash when trying to check for mod updates with mods that have dependencies not on the mod portal.
  • Fixed that multiple modded inserters aiming for the same belt would compete for the same item. more
  • Fixed that opening signal by circuit network could let train to go to a reserved/occupied block. more
  • Fixed that it was possible to build a special rail crossing that didn't merge the blocks and allowed trains to cross without collisions. more
  • Fixed a crash related to pathfinding toward a moving target, such as when the player was fighting biters. (https://forums.factorio.com/71989 https://forums.factorio.com/72011)
  • Fixed turret ranges would not render properly on some models of Apple computers with Intel integrated GPU. more
  • Fixed most of the Map Editor GUI would still work when doing replays. more
  • Fixed that "the hand" didn't work correctly in the Map Editor when the inventory was full. more
  • Fixed that cut ignored the not-minable and not-deconstructable flags in some cases. more
  • Fixed rail signal to block binding that occurred in special cases. more
  • Fixed shooting would refresh only the first beam if multiple beams were active. more
  • Fixed that cloning rails with locomotive on top in the map editor made the copied rails not minable even when the locomotive was removed. more
  • Fixed another train pathfinding issue related to re-pathing while in chain signal sequence. more
Scripting


  • Added LuaEntity::energy_generated_last_tick read.
  • Added LuaGameScript::parse_map_exchange_string().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.

Friday Facts #299 - Everything is more complex than expected


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.