Factorio - posila87
Bugfixes
  • Fixed that consistency check failed on ghost wall entity on top of wall entity marked for deconstruction. more
  • Fixed, that it was possible (through mod or script) to build ghost entity of belt/wall on top of existing belt/wall causing inconsistency later on. more

You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.
Factorio - Klonan
Hello,
this post is going to be more technical than usual, yet it might still be interesting to know the background of the process for some people.

Why are there suddenly so many problems with save loading in experimental?
0.16.36 is stable, but as we needed to fix some additional bugs, we started releasing experimental releases 0.16.37 up to 0.16.42 and so on. From the perspective of the player, there were a lot of new bugs introduced, unloadable saves, weird train problems, or even the infamous version 0.16.40 that disabled all signals causing trainocalypse which even made a baby cry.
Most of these problems (apart from the trainocalypse) were actually caused on purpose. It might sound weird, but it should make sense to you soon.

Offensive programming
As far as I can tell, offensive programming is the best way to keep complicated codebase like Factorio relatively bug-free in the long run. The general idea is, that when we have some rule of something in the code being always true no matter what (this is called an invariant), we should never just ignore it if the rule is broken.

Invariant examples in Factorio that were broken
One of the invariants we had was, that there can never be wall on top of another wall. This can't be normally done, as the player can't just build wall over another wall, but with script, you can place entities even in a way that they would collide. But in the case of walls, you can't even build two walls on top of each other with a script. The reason for this is, that the walls connect to each other, and since there would be 2 walls at the same place, in multiplayer it could happen that the neighbour wall piece could connect to different walls for different players which eventually could (and it also did) cause desyncs. Similar invariants are set for belts, pipes and rails.

The second part of the problem occurred when the deconstruction planner and blueprints came into play, as we gradually changed the game in a way, that you should be able to mark any area of factory for deconstruction and plan a blueprint over it even before the area was cleaned. So suddenly, you can have a belt marked for deconstruction with another belt (in the form of a ghost) on top of it like this:



The third part of the problem was, that we decided that ghost belts and walls should connect with each other so it looks nice as explained in fff-211

To allow these 3 things to co-exist, we had to make several changes. The first thing to change was something you might have noticed: belts and walls get disconnected when marked for deconstruction.



The second thing was to allow walls (or belts) on top of each other as long as one is marked for deconstruction and other is a ghost. As things marked for deconstruction are not candidates for connection, the connection candidate is still well defined.

You can imagine, that making sure that the first invariant is still true might not be that trivial, for example:
  • Make sure, that a ghost on top of an entity marked for deconstruction gets removed when the deconstruction is cancelled.
  • Make sure, using teleport fails if the result would be in conflict with the invariant.
  • Make sure, there are not other ways it could happen we are just not aware of.

The last point is the biggest problem, because if there is some other way the invariant can be broken, I want to know about it rather than have to investigate very complex desync reports. But how do I check that this never happens without affecting performance in normal games? For these kind of things, we have a method we call "consistency check". It goes through all the map and it checks different kind of integrity stuff in it.

The checks take quite some time to perform, so calling it on every save/load would affect the game too much, so we decided to call it only on version transition, which includes also transition of any version of any mod. The check can be also executed manually using a console command:

/c game.consistency_check()

The question is, what to do when the check fails? To make sure that it will actually get reported, we decided that when the consistency check fails, the game instantly stops (crashes) and writes the cause and stack trace into the log. This forces the user (at least some of them) to give us a bug report, so we can try to figure out what is going on. After that we can just re-activate the migration that removes conflicting entities in a new version to make the save loadable again.

The train bugs
All the train bugs were also originating from the same problem. I figured out, that rail signals marked for deconstruction didn't disconnect from the rail, and could block building of blueprints with rail signals on top of them. This changed the invariant for the rail signal from always connected to rail if possible to be only connected when not marked for deconstruction.

Most of parts of the code were fixed properly, but there was one particular piece of code, that re-connected signal even when marked for deconstruction, which made the internal state inconsistent and the save not loadable until the migration to re-build rail segments was re-activated for the next version transition.

Conclusion
So now you know, why are there much more crashes when loading games and you hopefully hate me less, because now you know, that it was done in the sake of the long-term code correctness.

As always, let us know your thoughts and feedback on our forum.
Factorio - posila87
Bugfixes
  • Changed the searching logic, that searching every word separately is only done when the fuzzy search option is on. more
  • Fixed a desync when printing a Lua error to players with different installation paths. more
  • Rail signal connection merge optimisation (tens of seconds instead of tens of minutes on big maps).
  • Fixed that rail signal migration didn't update the state of the signal controlled by the circuit network. more
  • Fixed decimals displaying in production statistics that caused the numbers to be too long. more
  • Fixed high CPU usage on the main menu. more
  • Fixed an issue when joining friends games through steam. more
  • Fixed, that it was possible (with the use of script/mod) to build belt/wall entity (not ghost) on top of other belt entity marked for deconstruction, which could cause a consistency check fail later on.
  • Added train path finding penalty for train with no path equal to 1000 tiles. more
  • Fixed a crash when building modded rolling stock entities on diagonal rails. more
  • Fixed "header errors" when extracting factorio zip files with 7zip.
Scripting
  • Added LuaEntityPrototype::collision_mask_collides_with_tiles_only and collision_mask_considers_tile_transitions read.

You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.
Factorio - Klonan
New player experience
In the last several weeks/months we have been working on deciding the fate of the campaign and the demo/tutorial missions.

Hi, I'm Ben (Abregado). My experience as an educator using Factorio in the classroom means I have thoroughly examined new players (young and old), and have played the first 30 minutes of Factorio for as many hours as some players spend on a single megabase. The systems in Factorio are deep and interconnected, so creating an onboarding experience for a single concept poses many exciting challenges.

We find that the Freeplay portion of the game is already enjoyable to its target audience, but those who prefer a more guided experience only get a short campaign which doesn’t even utilize all of the features we’ve added to the game. On top of that brand new players need to dig through a tutorial which takes about 30-45 minutes to get to automation, which is what the game is about.

We want to keep the demo so that anybody who wants to try the game can do it for free, and get a proper representative introduction to what Factorio is. For Factorio, the demo should serve a dual purpose of a tutorial and a teaser, both of which we feel could be improved...

Currently we find the demo has the following problems:
  • The impact of the first level isn’t very visually representative of what Factorio is.
  • Gives the impression of being a Minecraft clone in the first tutorial mission by having to mine manually and do hand crafting.
  • Key concepts like Assembling machines and electricity are not presented for the first two levels.
  • Player actions are so heavily constrained that the player learns just how to solve the tutorial rather than learning the concepts we are trying to demonstrate.
  • Each of the levels is disconnected from the previous. Which item recipes are available, that there are suddenly built structures and the location is completely different.
  • Grindy tasks like obtaining X resources in 2nd tutorial mission don’t have any clear purpose. The player does it because they are being told to, not to achieve some other goal that would make sense in the progression.
  • A lot of information is not important and just floods the player with noise, for example many of the
    messages.
  • The places where the player gets information are scattered - Objective window in the top left, the player character talking to themselves in the console chat and the yellow "TAB bubbles".



The three different information channels competing for attention. In this case also two of them telling you the same self-explanatory information (where is the current objective shown, if you didn’t get it), while the chat informs you that your character is alive.



A typical objective without purpose. (I guess the game will tell me what is it for soon?)



Doesn’t this message resemble another game?
What we would like to achieve with the new design:
  • Create an immediately gripping environment that better sets up the Factorio feel.
  • Showing and teaching core concepts like Assembling machines and electricity in the first level using as little complexity as possible.
  • Providing goals through the technology tree, working with laboratories and the technology GUI as soon as possible.
  • Standardize the way players obtain new items. Every recipe has to be obtained through a technology - that way the player triggers recipe progression and gets them as a reward.
  • Starting a new level should start the player at a similar progression state where the previous mission left off.
  • Teaching by experimentation instead of jumping through arbitrary tasks. Letting the player coming up with their own solution of a puzzle.
  • Unify the channels the player gets information from (mostly GUI improvements).
After finishing the demo, the player should be ready to continue by playing the main campaign, or jump straight to the Freeplay.

If you had to pick one entity that represents the game to you the most, which one would it be?

In-game backer names
As you may know, some people who backed the game during the indiegogo or who decided to support the game by buying the "Mining Drill Operator" version of the game, they are able to have their name in game. These names are given to in-game Labs, Roboports, Radars and more importantly Train Stops. The backers are able to change their backer name from their account page. On every release we then update these names. While there is no longer any way to get your name in-game, we still support this feature.

Since these messages were not moderated, cheeky or offensive messages kept making their way in game. While having your trains station automatically named "Satan's Anal Railways" is mildly funny, it's a bit confusing and not very family friendly.

To avoid the need for moderation, we plan to disallow any further changes to your backer name in a week. So this is your final chance to get your final name in game. Keep in mind that at the end, we will go through the list and delete anything obscene or offensive, plus anything we find inappropriate, at our own discretion.
Hopefully we won't get a Dub the Dew incident.

As always, let us know your thoughts and feedback on our forum.
Factorio - wheybags
Bugfixes
  • Yet another rail signal connection fix.
Factorio - posila87
Bugfixes
  • Yet another rail signal connection fix.
  • Fixed a crash when killing the character during the gun_inventory_changed event. more
  • Fixed that LuaPlayer::opened wouldn't return the opened equipment grid. more
  • Fixed LuaInventory::sort_and_merge() would break furnaces and assembling machines.
  • Fixed crash when trying to migrate circuit connected entities. Any migrated entities will be disconnected. more
  • Fixed round input in team production challenge. more
  • Recipe item ingredients with a count of 0 are reported as an error instead of allowing inconsistent behaviour. more
  • Fixed missing reset of state of signal right next to removed rail. more
  • Fixed a crash that could happen in multiplayer over a poor connection. more
Modding
  • Added ItemPrototype::fuel_glow_color, it colors the fuel glow of entities that use that item as fuel.
Scripting
  • Added on_player_trash_inventory_changed event.
  • Changed LuaSurface::find_entities_filtered/find_tiles_filtered/count_entities_filtered to additionally accept a table of filters.

You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.
Factorio - HanziQ
Bugfixes
  • Fixed function of enter key in number input. more
  • Fixed consistency check and migration related to rail internal inconsistency. more
  • Fixed that rail signals weren't fast replaceable.
  • Fixed that the headless server wouldn't be able to restart for a while if it was stopped with an RCON client connected. more
  • Fixed that selecting map without a preview in the save/load dialog disallowed to delete the save by the ingame delete button.
  • Fixed wrong calculation of item insertion into splitter in some cases, which could indirectly cause inconsistency in behaviour. more
  • Fixed the game could freeze when system time changed on Windows. more
  • Localised zip opening/closing error messages + added reason or error code there.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.
Factorio - Klonan
Hello. It has been a quiet week in the office, we are slowly arranging everything needed for the office moving, which (if all goes to plan) will happen 7-11th of May.

Factorio-data repository
We received a request a short while ago from one of our mod creators, sparr, asking permission to host a public repository of all the Factorio prototype data. This has many potential uses for our community of modders and content creators:
  • Online references, cheat sheets, and calculators; can use it to automatically update when new versions are released.
  • Link directly to specific library code and entity definitions when discussing such matters on the forums, GitHub issues for mods, Discord etc.
  • Browse diffs between the versions, seeing the implementation of prototype changes we mention in the changelog.
It seemed like a pretty good idea, but we decided it would be better if we did it ourselves. That way we can verify and validate that it is correct, and also add it to our deploy process so it is fully automated. Wheybags made quick work of the implementation, so now all interested parties can check out our Factorio-data repository.

Pipe fast replace
We added the belt-fast replace feature back in 0.16 (more), but as it goes with adding QoL features, it makes us see the deficiencies in other areas.

So a very similar feature request was passed along to Dominik, "Same thing with the underground belts, but for pipes". It was completed a while back, but only recently was merged into our 0.17 branch, so I can show it off:



As always, let us know what you think on our forum.
Factorio - posila87
Bugfixes
  • Fixed drawing of icons with multiple layers. more
  • Fixed that changing force of a wall didn't update the connections, which could lead to a desync.
  • Changed that walls and gates marked for deconstruction don't connect, which solves some desync related problems with walls/gates marked for deconstruction with walls/gates ghosts on top of it.
  • Changed, that rail signals marked for deconstruction disconnect from the rails.
  • Changed, that rail signals marked for deconstruction are not blocking blueprint placement of rail signals. These changes should make it reliable to mark rail setup for deconstruction and build blueprint right on top of it before it is deconstructed.
  • Changed the logic of "toggle LUA console" key to only open and not close the console (exception are ` and F1-F12 keys). more
  • Fixed LuaEntity::splitter_output_priority read/write didn't work. more
  • Fixed malformed sprite path error would not trigger minimal mode when loading mods. more

You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.
Factorio - posila87
Changes
  • Added an option to interface settings to allow the user to change the distance of tooltips from the mouse. more
Minor Features
  • Added optional resolution and zoom parameters to the screenshot command.
Bugfixes
  • Fixed that right click didn't work in the market GUI. more
  • Fixed a modded crash related to fire flame smoke.
  • Fixed ignored_by_interaction when creating modded custom GUI elements. more
  • Fixed noise program compilation bug that resulted in broken programs. more
  • Fixed light from lamps outside of screen was not rendered properly. more
  • Fixed the steam engines in New Hope level 4. more
  • Possible fix for a crash on Linux with a multi-GPU setup. more
  • Fixed graphics of battery indicator more
  • Boiler and heat exchanger will spawn medium remnants instead of small remnants when destroyed. more
  • Fixed that a well (offshore pump with water landfilled) was not rebuildable by construction robots. more
  • Fixed gates sometimes not detecting car being driven by god controller. more
  • Fixed that some of the achievements were obtainable even when player didn't spend more than 50% of time in the game. more
  • Fixed that character window was closed when doing fast transfer between armor slot and inventory. more
  • Fixed that modded inserters would some times get stuck. more
  • Fixed that Wave defense would error when played on a headless server. more
  • Improved system of key blocking now allows more key bindings to work correctly. more
  • Fixed underground pipe ghost would block underground connections of other forces. more
  • Added missing directions to util.oppositedirection. more
  • Fixed that the sound sliders went to 200% causing a lost of audio quality. more
  • Fixed save corruption when forces are merged while there is a rocket on the map. more
  • Fixed that LuaEntity::teleport could teleport ghost belts/rails.
  • Fixed that LuaEntity::teleport of ghost walls could create wall and ghost wall on the same position which could cause desyncs.
  • Fixed that LuaEntity::teleport didn't put entities that are supposed to be aligned to grid onto grid.
  • Fixed wrong behavior of mining of a vehicle the player is in in multiplayer. more
  • Fixed crash on starting mod scenario in multiplayer for the first time. more
  • Fixed signal placeability in junction with different directions in different ways. more
  • Added electric energy consistency check to avoid one more corrupted save situation resulting from memory corruption. more
Scripting
  • Added LuaTrain::killed_players read.
  • Added LuaTrain::kill_count read.
  • Added LuaInventory::is_quickbar().
  • Added LuaInventory::get_selected_index().
  • Added LuaFluidPrototype::fuel_value read.
  • LuaEntity::teleport puts entity to correct location on the grid when it doesn't have the off-grid flag.

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