1. Factorio
  2. News

Factorio News

Version 0.18.0 released

Features


  • Steam users can now log in automatically through Steam without needing their Factorio account password.
  • Steam users without a Factorio account can create one by providing only a username.
  • Reworked main menu structure.
  • Added a "Continue" button which quickly loads the latest save game.
  • Added a "New Game" GUI that shows all the ways to play the game
  • Added a setting to the map editor to show/hide the extra entity settings.
  • Added a map editor GUI to edit force data modifiers.
  • Added a PvP team option to create a moat around the starting area.
Graphics


  • Added animation to water.
  • Added animation to trees.
  • Added LUTs and color corrected the game sprites.
  • Added sliders to the graphics settings to adjust brightness, contrast, and saturation.
  • Added on damaged effects for most entities.
  • Added specific dying explosions for most entities.
Sounds


  • New or updated sound effects include:
  • Nuclear reactor, chemical plant, furnace, fire, burner mining drill.
  • Tank.
  • Mining by hand, chopping wood
  • Roboport door, Combat robots
  • Player footsteps.
  • Biter and Spitter footsteps.
  • Worm breathing, Spitters and Biters, idling and attacking.
  • New sound features include:
  • The ability to fade out sounds instead of a sudden stop, e.g. for the furnace.
  • Varying the pitch of sounds to a min/max level, to add more variety.
  • A 'Random, no repeat' feature to reduce repetition, especially on sounds that happen frequently, such as player steps.
  • The sound for the game has also been rebalanced to highlight certain sounds and make others fade into the distance.
  • The default sound settings have also been updated to improve this mix.
Optimizations


  • Optimized particle logic.
  • Improved performance when side-loading transport belts.
  • Improved performance of inserters interacting with assembling machines and furnaces.
  • Improved performance of inserters when the circuit network turns them off.
  • Improved performance of mining drills and inserters in general.
  • Improved performance of burner entities.
  • Improved performance polluting entities.
  • Improved performance of smoke producing entities.
  • Improved performance logistic and construction robot performance when they're flying towards their target.
  • Improved performance of furnaces and assembling machines that use fluids.
  • Improved heat pipe performance by 3x.
  • Improved item request proxy performance by turning them off in 99%+ of the cases.
  • Improved locomotive, cargo wagon, and fluid wagon performance by turning them off in 99%+ of the cases.
  • Electric networks, fluids, and heat pipes are updated in parallel if you have enough cores.
  • Improved script rendering performance for text and lines.
  • Improved performance of rotated bounding boxes.
Bugfixes


  • Fixed the recipe tooltip showing negative values for some complex recipes. more
  • Fixed graphical glitch when GUI element with blurred background got out of bounds of the screen. more
  • Fixed hard coded English string in NPE. more
  • Fixed potential crash in NPE when Compilatron is pointing at something that gets deleted. more
  • Fixed issue where sometimes you couldn't move to the second area in NPE. more
  • Fixed issue where Compilatron would sometimes tell you to build more boilers when that was not the problem. more
  • Fixed issue where Compilatron's speech bubbles could block you from interacting with the world behind him. more
  • Fixed items with excessively long names squashing the count label in the recipe tooltips. more
  • Fixed accumulator charge text in statistics bouncing around because of inconsistent number of digits. more
  • Fixed train path finding penalty when there are 2 or more trains in block. more
  • Fixed a crash when creating trains during the player moved event that was caused by the player getting ejected from a vehicle because the vehicle died. more
  • Fixed a crash when removing mods that had custom GUI elements. more
  • Fixed a crash when using Lua event filters when the thing to be filtered becomes invalid. more
  • Fixed that some turret sounds could be heard on other surfaces. more
  • Fixed that the tooltip for the generator would not show its efficiency correctly. more
  • Fixed a crash related to building tiles in multiplayer with some mods. more
  • Fixed that turrets would sometimes fail to attack things that are in range. more
  • Fixed follower robot lifetime tooltip property not taking into account following_robots_lifetime_modifier. more
  • Fixed cliffs sometimes getting marked for deconstruction when they shouldn't have been. more
  • Fixed inconsistent rounding in the statistics window. more
  • Fixed a desync when setting .active=false on beacons through script. more
  • The map will be re-charted when the mod configuration changes. more
  • Fixed inserters sometimes not being highlighted when selecting a large modded vehicle. more
  • Fixed a crash when entity grid would destroy itself during update. more
  • Fixed a crash with rich text tags and dynamic images. more
  • Fixed setting the held stack of an inserter didn't update the inserter state correctly. more
  • Fixed tooltip alignment in some specific cases. more
  • Fixed a crash when lua removes pipe-to-ground between entity revive and deferred pipe connection fix. more
  • Fixed a crash when setting infinity chest filters to legacy items. more
  • Fixed that splitters could be set to have invalid bounding boxes that would lead to corrupt saves. more
  • Fixed word wrapping of rich text containing tag that doesn't fit given width would duplicate the tag on multiple lines. more
  • Fixed if migrating old achievement data to Steam Cloud failed, the old file would not be deleted resulting in the same error on every startup. more
  • Fixed train pathfinding penalty for circuit network closed rail signal was not applied in some cases. more
  • Fixed a crash when mods would define construction robots without some sprites. more
  • Fixed that trying to do 0 damage would still trigger the entity-damaged event. more
  • Fixed a save corruption issue related to modded loaders with different belt_distance values. more
  • Fixed that train would forget amount of ticks waiting at signal when doing repath. more
  • Fixed that train pathfinder was not counting penalty of last segment length in path cost. more
  • Fixed PvP error on configuration changed. more
  • Fixed pump tooltip showing double pumped amount when pumping to fluid wagon. more
  • Fixed manual ghost revive of a loader in unload mode would not work in visually matching direction. more
  • Fixed calling LuaEntity::order_deconstruction() on item-request-proxy would corrupt the game state leading to crash. more
  • Landfill can be placed over shallow water.
  • Fixed that LuaEntity::color wouldn't accept "nil" to reset the color. more
  • Fixed that train pathfinder was not counting penalty of opposite train stop at last segment.
  • Fixed that train pathfinder was counting penalty of whole starting segment instead of only part in front of locomotive. more
  • Fixed that train pathfinder would return single segment path even if there are shorter, multi segment ones. more
  • Fixed technology screen not showing modifier tooltips when tooltip descriptions are disabled. more
  • Fixed belt tooltips sometimes showing their speed in exponent format. more
Modding


  • Added UnitPrototype::light.
  • Removed the "particle" prototype type.
  • Added the "optimized-particle" prototype type.
  • Added the "burner-generator" prototype type.
  • Removed GeneratorPrototype::burner.
  • Added the "pass_through_mouse" option to speech bubble styles. This lets mouse interactions fall through to interact with the world behind.
  • Added optional "radius_color" property to capsule prototype.
  • Removed EntityPrototype::emissions_per_tick, it is replaced by emissions_per_second.
  • Removed EnergySourcePrototype::emissions_per_second_per_watt and emissions, they are replaced by emissions_per_minute.
  • Removed TilePrototype::ageing, it is replaced by pollution_absorption_per_second.
  • Removed ItemPrototype::stackable, primary_place_result_item and can_be_mod_opened, they were replaced by ItemPrototypeFlags "not-stackable", "primary-place-result" and "mod-openable".
  • Added "probability" to trigger items and trigger effect items.
  • Added "script" trigger effect item. It will call the "on_script_trigger_effect" when triggered.
  • Added AttackParameters::rotate_penalty and AttackParameters::health_penalty.
  • Added generic support for rendering radius visualisations on entities through radius_visualisation_specification.
  • Changed construction robots and logistic robots sprites to be optional.
  • Changed the loader prototype type so it has a fixed belt_distance of 0.5.
  • Added the prototype type "loader-1x1" that has a fixed belt_distance of 0.
  • Changed render layer of belt structures (underground belt, splitter, circuit connector) to object layer. They now have special sorting logic, so they are not rendered over player or cars.
  • Horizontal directions of splitter sprites were separated to two sprites (for purposes of the special sorting logic).
  • Added AttackParameters::ammo_categories.
  • Added optional artillery projectile property "rotatable".
  • Scenarios can now contain a description.json file. In the file "order" determines the sorting in the New Game gui; "multiplayer-compatible" determines weather the scenario is shown for multiplayer games.
  • Added "multiplayer-compatible" to description.json file of campaigns also.
Scripting


  • Added on_unit_group_finished_gathering and on_build_base_arrived events.
  • Added LuaRendering::bring_to_front().
  • Changed LuaGameScript::particle_prototypes to reference the optimized-particle type.
  • Added LuaGuiElement::scroll_to_item() function.
  • Renamed LuaInventory::hasbar(), getbar() and setbar() to supports_bar(), get_bar() and set_bar().
  • Added LuaEquipmentPrototype::attack_parameters read.
  • Added on_script_trigger_effect event.
  • Set lower limit of zoom parameter of LuaGameScript::take_screenshot to be 0.0315 (1 pixel per tile) instead of allowing any value greater than 0.
  • Added LuaPlayer::get_infinity_inventory_filter(), set_infinity_inventory_filter() functions.
  • Added LuaPlayer::remove_unfiltered_items, infinity_inventory_filters read/write.
  • Added LuaSurface::get_entities_with_force().
  • Added optional "dealer" parameter to LuaEntity::damage().
  • Added "force" filters to the on_built_entity and on_robot_built_entity event filters.
  • LuaSurface::min_brightness doesn't have any effect on rendering as brightness of night depends only on color LUT of night.


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

Factorio Massive Multiplayer - Big Community Games Test

Join our community hosted Massive multiplayer test

Find it in the Matching server with the name: Big Community Games Test.

You can also connect directly with the address: bigcommunitygames.uk.to







Friday Facts #330 - Main menu and File Share Shenanigans

Read this post on our website.

The main menu rework (Twinsen)

Up until I looked at the source code, I was always confused about the differences between "Start campaign", "New game" and "Scenarios". New game seems like the same thing as "Scenarios"->"Freeplay", but are there any differences? We then later added a few more bonus scenarios, but they are hidden in the scenarios menu, with no explanation about what each is, what to expect or if it works in multiplayer. I believe it's very important to communicate to new players information about the game's content. It's also important to show that freeplay is the intended way to play. So all this prompted me to rework the main menu a bit.

I started with the structure. The structure always seemed odd to me, compared to what I'm used to from other games. Important options like "Load game" are lost among options that are never used (like "Replay game").
So I came up with a new structure. It looks like this:
  • Continue
  • Single player
    • New game
    • Load game
  • Multiplayer
    • Host new game
    • Host saved game
    • Browse public games
    • Browse LAN games
    • Connect to address
  • Map Editor
    • New scenario
    • Convert save
  • Settings
    • ...
  • Mods
  • About


The first new thing to notice is the "Continue" button. Since "start the game and continue my last save" is probably the most common thing players will do, it makes sense that there is an option for this right at the top of the main menu. The button will contain the name of your latest save. Pressing it will immediately load the game and get you in game. Due to implementation complications, for now it only handles save games and it will NOT connect you to the last server you played on if your last play session was multiplayer, but I might implement that if it's highly requested.

Next, everything was grouped into either Single player or Multiplayer. There are much fewer options, since "Replay game" was moved as a small button in "Load Game", and every way to start playing the game was moved to the new "New Game" GUI.

The "New game" GUI shows all the ways to play the game. It also groups them nicely, places freeplay on top, shows a description and even a nice image. This GUI is used for new game, multiplayer hosting and map editor, thus simplifying the menu quite a bit.



For modders, scenarios can now contain a description.json file. In the file "order" determines the sorting in the New Game GUI; "multiplayer-compatible" determines whether the scenario is shown when trying to host multiplayer games. "multiplayer-compatible" was added to description.json file of campaigns also.

Steam log-in and "mini-accounts" (Twinsen)

While working on the main menu, another thing I changed quite a bit is how logging in is handled. With Sanqui's help, we did some small improvements, such as better error handling and error localization, but a more important feature is being able to log in using Steam only. I found it annoying that even though you bought the game on Steam, if you want to play online, you need to make yet another account, whose email and password you are probably going to forget.

For the Steam version of the game, when you try to use any online feature, the game will try to authenticate using Steam.
  • If you have an account and that account is linked to your Steam account, you will be automatically logged in without having to remember your password.
  • If you don't have an account, the game will ask you to choose a username (your nickname in multiplayer games) and then log you in. No password or email or email confirmation required. We call these "mini-accounts"
"Mini-accounts" can be upgraded to normal accounts by going on the website, logging in using Steam, and then adding an email and password. They can be used for the non-steam version of the game.

These changes are ready to be released, so you should see them as soon as we release 0.18, soon™.

File Share Shenanigans (wheybags)

A few years back, we were using a collection of hard drives stuffed into a leftover workstation as an office shared drive. This drive had all sorts of stuff on it, from unfinished art assets, to a collection of pictures of developers in a wind tunnel, we had it all. The inevitable day came, and we ran out of space on the disks. A decision was made at the time, to buy some new, high density drives, and put them in a QNAP enclosure. This is basically a little computer, with 4 front mounted hard drive bays, and some special software for file shares and management. We figured this should be less hassle since it’s designed to be used by normal people. This was supposed to make our lives easier, as it should be an easy-to-use setup for normal people. It even had a friendly GUI with a little clippy guy!

"It looks like you're trying to setup replicated live snapshots"

[h3]Shenanigan #1[/h3]
After only three months, unfortunately the little guy died. Doesn’t power on, just dead. Of course, we start the return process, but it’s going to take about a month to get the replacement sorted, during which time we will be without access to our files. So, we did what any reasonable capitalists would do, and we bought our way out of the problem once again, by just buying another QNAP NAS to use while we waited. When the warranty replacement arrived, we would use it as a backup target.

Side note: we couldn’t actually read our data off the drives we took out of the broken QNAP. The QNAP OS is just Linux with a custom GUI on top, so you’d expect we could get our files by plugging them into another Linux machine, but no! QNAP have customised their Linux kernel in a way that makes it impossible to read on a normal install (for those interested, they modified LVM to add some more efficient form of snapshotting, from what I can tell). Mmm... delicious vendor lock-in!

[h3]Shenanagain![/h3]
All was well with the world of large file storage in Wube software, until one day disaster struck again!
After a solid 14 months this time, the replacement NAS that we had bought also died. At this point, we begin to question our decisions.

[h3]ZFS to the rescue[/h3]
With our original setup, we had a normal PC running the ZFS filesystem. We have decided to just return to this approach. The final lesson is, that sometimes the "buy the solution" easier option is not actually easier at all. Sometimes it’s just best to invest the time and effort to do it right yourself. If you're a technically inclined person who's not afraid of a command line, you should really check out ZFS. Despite some recent misinformed statements by highly influential figures, it is a really great filesystem with advanced features not really available in any other production quality filesystems, like snapshotting, checksumming, and live replication.
Oh, and you should probably avoid QNAP NASes...

As always, let us know what you think on our forum.

Friday Facts #329 - Campaign reassessment

Read this post on our website.

Merch store open again (Klonan)

Our e-shop is now open again after taking a break over the holidays and new year.

We have also restocked our new Factorio sew-on patches, so if you didn't manage to pick one up over the last weeks, now is your chance to order one.

Campaign reassessment (Abregado, V453000, Wheybags)


[h2]Learnings from the Introduction/NPE[/h2]
After deciding to cancel the Introduction/NPE (Tutorial/Demo) we took some time to assess what we learnt. Here are just a few of the points that we took away from the experience:
  • Players dislike being told that they must restart.
  • Players (ironically) don't have regrets after they restart.
  • It is valuable for new players (< 30 hours) to rebuild 1-3 times.
  • Lowering player constraints increases design difficulty.
  • People like Compilatron to be there.
  • People don't like it when Compilatron does anything for them.


In addition to those, self-motivated discovery of new mechanics (FFF-327) is a more important part of Factorio than actually using the new mechanics. This means letting the player do things the hard way, and not rushing them to the realization that there is a better way. For example, veteran players know not to handcraft science packs for 30 minutes while standing still, but forcing a player to discover this by artificially not allowing them to handcraft, lessens the Factorio experience.

[h2]The Campaign Conundrum[/h2]
While we were working on the Introduction/NPE we were also researching and designing what we wanted from a full featured Campaign. The game already had a Campaign which took the player up until Advanced circuits, but there was a feeling that we could do better. For the last year we have been working on and off to implement the design we came up with (from here on called the Expanding campaign), as talked about in FFF-245, FFF-257, FFF-291. More specifically the design was trying to remove the feeling of lost progression that comes from starting a new level and being forced to build a new factory from scratch.

After the Introduction/NPE was cancelled, we took the holiday period to reassess if this goal was worth pursuing, and thought we should at least prototype some alternate solutions before committing completely to "the one design". The prototype came together very quickly this week because we were able to reuse a lot of work from the Expanding campaign prototype.

Now we have two prototypes and wanted to present the ideas behind them:

[h2]1. The Expanding Campaign[/h2]


This is the main prototype that we have been working on so far. A single map which starts small but grows after each objective is complete. This would emulate Freeplay gameplay in that the player can build very large bases and expand in the directions they want, but with quest objectives to steer the player towards building the rocket.

Technology and progression are preserved perfectly, since we never ask the player to start again. As a result, the player can build a really big factory. This prototype focuses more on the long term problem solving that Freeplay requires, such as deciding where your next outpost will be.

Main Problem: At the end of each 'chapter' the number of different situations the player could have gotten themselves into is near infinite. This makes it very difficult to predict the state the player is in, and construct an appropriate challenge. Clever objective and map design should be able to mitigate this issue.

[h2]2. The Separate level Campaign[/h2]


Consisting of approximately five separate missions, each with an interesting starting condition. At the start of the level, all the technologies available in the last mission are pre-researched, and the player is given a new subset of the remaining technologies to be researched.

Every level the player needs to build a new factory. They will have some starting items, and the gameplay is about short term problem solving. This would be very different from Freeplay and similar to what people expect from traditional campaign content. If the player fails, or wants to try a different strategy, they can restart the level and not lose a lot of progress.

Main Problem: Players need to rebuild their factory each level, repeating things they have already done. This is especially problematic in a game like Factorio. We imagine that this issue can be mitigated by making the starting conditions interesting.
[h2]Conclusion[/h2]
While these two prototypes have some large differences, there are many aspects they share:
  • Freeplay will stay the same regardless of the choice here.
  • No story.
  • No exploration gameplay.
  • Same tech tree as Freeplay.
  • All content of Freeplay available at some point.
  • Complex concepts (oil/logistics/trains) are broken down into smaller pieces.
  • Almost identical quest structure.


These two approaches are actually very similar in their core quests, this is more of a decision on how we present the progression. Internally we are still discussing which approach is more appropriate for Factorio.

Community spotlight - 500 player 'speedrun' (Klonan)

Over the last weekend the Youtuber The Spiffing Brit hosted a server with the goal of completing a speedrun with 500 players online at the same time. There were 2 streams in total, one on Friday evening, and another on Sunday. Things went a lot more smoothly on Sunday, and we managed to reach a peak player count of 462.

Spiff has edited down the stream from Sunday into a much shorter video, so those who could not attend can enjoy the spectacle.

[previewyoutube][/previewyoutube]

There will be some further attempts to set a new record soon, with some upgraded hardware. Just recently one of the organizers of the server on Sunday has confirmed the order of a i9-9900k with 10 gigabit networking. If you are interested in more info on the servers, you can join the discord here.

As always, let us know what you think on our forum.

Friday Facts #328 - 2019 recap

Read this post on our website.

Hello,
The office here in Prague is still 'closed' until next week, so not much is happening (so our team can rightfully rest). Things will get cracking again on Monday, and our first task is to get 0.18 done!

For that reason, the FFF today is a little on the short side.
2019 recap

2019 was quite a 'typical' year for us. We released 0.17 early in the year, did some bug-fixing for about 6 months, and then we went back to development work. Saying that, we hit some major milestones this year:
  • There was the all time concurrent player peak of over 22,500 with the 0.17 launch.
  • The historically low count of bug reports on the forum.
  • 2 million sales which we reached just last week.


You can see some correlations between this timeline and the commit frequency graph below.

Please note, the number of commits does not reflect the value and quality of an individual :).

It seems like we are somewhat 'in-sync' with each other, which I suppose has good and bad effects.

This year was also pretty good for the FFF blog itself. I would even say, this was the best year yet, with the highest quality and most well received posts we have ever produced.

In terms of readership (on our website), here are the top 5 FFF posts of this year:No surprise that our 0.17 launch announcement ones are the most popular.

And here is a graph showing the total website viewership statistics, because I also find them super interesting. You can really see the spikes every Friday :D. It is also funny, this year we started getting a lot of spam emails asking about posting 'sponsored articles' on our website. We would never accept any such proposals.



We really have a tough journey ahead of us this year, we are getting ready for the game to come out on September the 25th... Do or die, come what may. There are 9 months remaining now, and we have our work cut out. We'll keep you up to date on our progress, and we hope you will keep us up to date on your thoughts, at the usual place.