TUXDB - LINUX GAMING AGGREGATE
by NuSuey
NEWSFEED
▪️ GAMES
▪️ STEAM DECK ▪️ DEALS ▪️ CROWDFUNDING ▪️ COMMUNITY
tuxdb.com logo
Support tuxDB on Patreon
Currently supported by 9 awesome people!

🌟 Special thanks to our amazing supporters:


✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Arch Toasty][Benedikt][David Martínez Martí]

Steam ImageSteam ImageSteam ImageSteam ImageSteam ImageSteam Image
Version 1.1.76 released as stable

Changes


  • Added autosave slots to "The Rest" settings gui. more

Bugfixes


  • Fixed a crash with crafting machines using burner energy sources and items that produce burnt results. more
  • Fixed that the bonus GUI could show incorrect values for modded inserter bonuses. more
  • Fixed that additional layers of multi-layer recipe icons were tinted when building. more
  • Fixed that restoring a window minimized to the macOS dock would freeze the graphics. more
  • Fixed a crash related to failed audio initialization and switching audio devices.
  • Fixed a crash when creating surfaces during the chunk deleted event. more
  • Fixed that projectiles didn't draw oriented lights at the correct orientation. more
  • Fixed that the 'create_spidertron()' Lua function didn't set the correct minable result name. more
  • Fixed that 'item on ground' didn't show item amount in the tooltip. more
  • Fixed a crash when restarting after syncing mods with save if the mod(s) were disabled and the save had a valid replay. more
  • Fixed working sound's volume or speed not being matched to activity when fading, for example with pipes. more
  • Fixed overlaping red and green wires connected to a power switch. more
  • Fixed that moving a container with which a loader was interacting would not disconnect the loader.
  • Fixed that vehicle ammo slot filter selection would show ammos that the slot cannot accept. more
  • Fixed vehicle ammo slot style when filtered. more
  • Fixed train lights in preview would render for trains on surface a player is on, not for the surface being rendered. more
  • Fixed that cloning item entities wouldn't clone the to-be-looted flag. more
  • Fixed that boilers wouldn't consume fuel if fed fluid at maximum temperature. more
  • Fixed a desync related to custom blueprints. more
  • Fixed transport belts not decompressing overcompressed items in certain cases. more
  • Fixed drawing an extra shadow for health bars of items on ground and items on belts.
  • Fixed that connecting circuit or copper wires in map view did not work if the Build and Drag map controls conflicted. more
  • Fixed override_sound_type having no effect. more
  • Fixed a crash when trying to filter car/spider ammo slots. more
  • Fixed visual artifact in water when zoomed out.
  • Fixed 'on_entity_renamed' Lua event not including 'player_index' if copy-pasting to a train stop. more

Scripting


  • Added 'entity' to LuaPlayer::open_map and LuaPlayer::zoom_to_world, which specifies an entity to follow.
  • Added LuaRailPath::is_front read.
  • Added LuaEntityPrototype::alert_icon_scale read.
  • Added LuaBootstrap::get_prototype_history().
  • Added LuaGameScript::console_command_used read.
  • Added is_split to on_player_fast_transferred.
  • Added LuaPlayer::drag_target read.
  • Added LuaControl::surface_index and force_index read.
  • Added LuaEntity::inserter_target_pickup_count read.

Modding


  • Added LoaderPrototype::allow_rail_interaction and allow_container_interaction.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2023-02-01 15:07:42 CET ] [ Original post ]

Friday Facts #372 - 2022 recap

Hello, another year has come and gone. We know this year we were very sparse with any details about the expansion, and it is what you all really want to hear about. Trust me we really want to tell you about it, and in time we will. There are still major sections of the gameplay being changed and adjusted, and if we tell you about them now, the information would quickly become outdated and inaccurate. For now, we can offer this Christmas postcard Albert has made, which has a sneak peek of some new item icons.
As well, we do have some other topics we can discuss, on our website.


[ 2022-12-30 14:36:27 CET ] [ Original post ]

Version 1.1.74 released as stable

Changelog for 1.1.73 and 1.1.74

Bugfixes


  • Fixed items dropped on underground belts could be inserted at a wrong position when transport lines were facing east or south. more
  • Fixed DNS CNAME records confusing the SRV lookup on Windows more
  • Fixed a crash when hovering over some rich text tags and destroying the object they refer to. more
  • Fixed that "request from buffer chests" option wasn't copied between spidertrons. more
  • Fixed that "request from buffer chests" option in spidertrons reset to default when prototypes changed. more
  • Fixed directories in file dialogues not being sorted alphabetically on some systems. more
  • Fixed dropdown button font color when clicked. more
  • Fixed a crash when switching preferred audio device failed.
  • Fixed not being able to remove script areas in the map editor. more
  • Fixed that LocalisedString didn't support fallback groups in some cases when parsed from Lua. (https://forums.factorio.com/104297, https://forums.factorio.com/104303)
  • Fixed a crash when a mod defines an entity that kills itself when created. more

Modding


  • Added fallback groups format for localised string which picks the first correct translation. more
  • Transparent black in RecipePrototype::crafting_machine_tint won't cause the tint to fallback to value of default_recipe_tint. more
  • Added CarPrototype::immune_to_cliff_impacts, true by default. If set to false - entity will take damage when it collides with cliff prototype entities.

Scripting


  • Added LuaPlayer::cursor_stack_temporary read/write.
  • Added LuaPlayer::request_translations() for batching translation requests.


[ 2022-12-16 15:08:14 CET ] [ Original post ]

Friday Facts #371 - Apple Silicon

Hello, engineers! I'm a newer face at Wube and have been mainly working on expansion content for about one year now. Today, I'm here to share some exciting non-expansion news for our Mac players. Read the full blog post on our website.


[ 2022-11-25 11:05:09 CET ] [ Original post ]

Version 1.1.72 released as stable

Changelog for versions 1.1.71 and 1.1.72

Minor Features


  • Added preferred audio device output setting.
  • Added the current binary architecture to the main menu version string.
  • Improve mod update checking for large mod collections

Optimizations


  • Added native support for Apple Silicon Macs.

Graphics


  • Loaders now show their item filters in alt mode.

Bugfixes


  • Fixed a crash when canceling deconstruction of a pipe to ground while the GUI was open. more
  • Fixed entity ghosts would draw wires even if prototype of inner entity disabled it. more
  • Fixed incorrect panning of CyclicSound (for example, flamethrower turret's stream sound). more
  • Fixed that ScriptRendering requested string localisation during on_init when it was not available. more
  • Fixed Generator tooltip ignoring fluid emissions multiplier. more
  • Fixed that teleporting cars between surfaces would create the build effect smoke. more
  • Fixed a crash related to undoing mining of another forces entities after the other force had been deleted. more
  • Fixed it was possible to acquire forbidden items in the Transport belt madness levels. more
  • Fixed that linked-belt was missing from the collision mask defaults. more
  • Removed 'Fuel emissions' label from Burner info panel. more
  • Fixed that expansion parties could destroy spidertrons while building new bases. more
  • Fixed a crash when doing alt-reverse selections in zoomed-in map mode. more

Modding


  • Added Alt reverse selection support for selection tools. more

Scripting


  • Added LuaGuiElement::close_dropdown().
  • Added LuaInventory::is_full().
  • Added 'include_bar' parameter to LuaInventory::count_empty_stacks().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2022-11-22 15:08:19 CET ] [ Original post ]

Version 1.1.70 released as stable

Minor Features


  • Added mod portal bookmarks to install mods gui

Bugfixes


  • Fixed show-player-robots debug option would render lines for characters on other surfaces. more
  • Fixed using incorrect sound settings when there is no configuration file.
  • Fixed a crash related to teleporting spider vehicles with burner energy sources between surfaces.
  • Fixed that the return value of some lualib noise functions didn't have the metatable for noise expression arithmetic. more
  • Fixed simulation widgets showing savefiles trying to apply migrations in multiplayer. more
  • Fixed upgrading pair of underground belt ghosts that makes them in reach would flip one of them without updating rotation point of nearby belts. more
  • Fixed that logistic containers didn't deduplicate filters when importing them from untrusted sources which could crash the game. more
  • Fixed a hard crash when a mod called deconstruct_area() with mismatched force and the player undid deconstruction of tiles. more
  • Fixed highlight-box targeting entity not rendering before first update. more
  • Fixed spider-remote would lose connection when spider changes surface. more
  • Fixed SpidertronRemotePrototype was silently forcing stack size to 1 and not marking prototype as non stackable. more
  • Fixed that sounds with fade_out_ticks would synchronize when pausing the game while the sounds are fading out. more
  • Fixed idle sounds would synchronize when pausing the game. more
  • Fixed idle sounds for accumulators not starting in certain scenarios. more
  • Fixed idle sounds playing when they shouldn't for entities with max_sounds_per_type set.
  • Fixed inserters not highlighting the entity they would pick up from if said entity is a ghost while the inserter is not. more
  • Fixed a save's suggested save name not being updated when using non blocking saving. more
  • Fixed a crash when GUI style errors are found during loading. more
  • Fixed an item duplication when fast replacing underground belts with a damaged item. more
  • Fixed that loader could get stuck when feeding a burner generator. more
  • Fixed a crash when opening blueprint book item while tick is paused. more
  • Fixed a unit group that is building a base could have all its members distracted and still build a base. more

Scripting


  • Added LuaTechnology to LuaPlayer::opened.
  • Added LuaEntityPrototype::ammo_category read.


[ 2022-10-27 14:02:56 CET ] [ Original post ]

Friday Facts #370 - The journey to Nintendo Switch

We have a long history of trying to bring Factorio to other platforms, including consoles and mobile phones (not including April Fools). We even worked with some external companies, but the projects never even got to the point where they would run technically, let alone the complicated part of making the game playable using controllers or touch screen. After all the attempts, we even had a Friday Facts prepared that was going to say something along the lines of "we don't plan to bring Factorio to other platforms". However that turns out to me not the case, and we also have an update about the progress on the expansion. Read the full blog post on our website.


[ 2022-09-23 11:10:24 CET ] [ Original post ]

Factorio Version 1.1.69 released as stable

Graphics


  • Updated transport belt icons.

Bugfixes


  • Fixed unregistering multiple events at once would not clear event filters. more
  • Fixed inactive mining drill playing its working sound for a moment when panning over it. more
  • Fixed a crash when pressing Alt+F4 or clicking the X button when in sound settings. more
  • Fixed a crash when changing the force of a logistic container marked for deconstruction. more
  • Fixed a crash in production score script when a rocket launch product has probabilistic amount. more
  • Fixed a crash in production score script when a resource entity is given no mineable products. more
  • Fixed collision mask util not ignoring other flags when checking "not-colliding-with-itself" masks. more
  • Fixed the player losing contents of the cursor when starting the round in tightspot scenario. more
  • Fixed wave defense losing all upgrades after some prototype changes. more
  • Fixed inactive entity working sound playing its fade-out when pausing and unpausing the game.
  • Fixed that mod ordering didn't work correctly when searching in the install mods GUI. more
  • Fixed that the 'starting points' in MapGenSettings wasn't loaded when importing a map exchange string. more
  • Fixed that event filters for on_pre_ghost_deconstructed and on_pre_ghost_upgraded weren't filtering correctly. more
  • Fixed that changing render threads to 1 while menu simulations were visible would crash the game. more
  • Fixed rocket silo would get stuck when rocket_parts was set during launch. more
  • Fixed smooth zoom behavior at high game speeds. more
  • Fixed a performance issue when many roboports re-activate at the same time. more
  • Fixed that the sync-mods-with-save GUI didn't work correctly when failing to download in some situations. more
  • Fixed solar panel equipment was unable to produce full expected power when solar multiplier was larger than 1. more
  • Fixed boiler's energy source buffer size was not updated when prototypes data changed. more

Modding


  • Added torso_bob_speed to the spider vehicle prototype.

Scripting


  • Added LuaEntityPrototype::torso_bob_speed read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2022-09-16 08:57:15 CET ] [ Original post ]

Factorio Version 1.1.68 released as stable

Changelog of versions 1.1.61 to 1.1.67

Minor Features


  • Added support for SRV records on Windows.
  • Added support for SRV records on Linux and MacOS.

Changes


  • The game no longer requires re-entering server passwords when restarting to sync mods or mod settings.
  • When joining modded games mods and settings are synced at the same time reducing the number of restarts needed.
  • Integrated SDL_Mixer for audio mixing, which is now the default mixer.
  • Added PulseAudio driver for the SDL audio backend.
  • Added Wayland driver for the SDL video backend.
  • Updated the --audio-driver command line option description for Windows, and added the option for Linux and Mac.
  • Storage tanks can now show fluid connection info.

Bugfixes


  • Fixed server getting stuck at "Saving the map for player" for 20 seconds sometimes if a client disconnects shortly after connecting.
  • Fixed server getting stuck at "Saving the map for player" forever in some rare situations.
  • Fixed highlight box on curved-rail would not render selection box correctly. more
  • Fixed heavy-mode when character dies in multiplayer. more
  • Fixed that the "run forest, run" achievement could be unlocked by shooting trees instead of running them over. more
  • Fixed a crash when trying to read LuaEntity::neighbours on a WallConnectable when one of the neighbours is a ghost. more
  • Fixed recipe highlights in the assembling machine GUI. more
  • Fixed an issue with the prototype explorer GUI and guns. more
  • Fixed false-positive desyncs when using mods and running /c game.force_crc() or /toggle-heavy-mode more
  • Fixed a crash when defining a fluid stream prototype with zero particles. more
  • Fixed a GUI layering issue related to some error messages. more
  • Fixed not being able to open blueprint books in books through the quickbar. more
  • Fixed LuaSurface::find_entities_filtered would fail to find entities by collision mask if they only collide with tiles. more
  • Fixed that pump that cannot interact with fluid wagons would crash on save after position change. more
  • Fixed a desync when canceling deconstruction of cliffs when a robot has already thrown the explosive. more
  • Fixed startup mod settings would show as being able to be reset while the game is running. more
  • Fixed an issue when installing mod dependencies related to base-game dependencies. more
  • Fixed an issue with biter AI that could freeze the game. more
  • Fixed a crash when viewing other player inventories when changing controllers. more
  • Fixed that the LuaPlayer::remove_alert 'prototype' parameter wouldn't accept an actual prototype instance. more
  • Fixed character inventory was not auto sorted when changing armor. more
  • Fixed that the reset-to-default tooltip for string mod settings wasn't fully localised. more
  • Fixed a crash when trying to draw a wire connected linked container in a blueprint. more
  • Fixed linked containers with filters would not preserve filters while there are no containers placed. more
  • Fixed a crash when using SDL audio backend with configurations other than stereo. more
  • Fixed a desync when using LuaGameScript::get_train_stops when there are multiple stops found.
  • Fixed a crash related to transport belts and item entities. more
  • Fixed linked container content was cleared when entity dies leaving a ghost. more
  • Fixed linked container content was cleared when fast-replacing through script. more
  • Fixed locomotives on curved rails would not snap to train stops. more
  • Fixed a crash related to audio. more
  • Fixed that it was possible to provide invalid path_resolution_modifier value to LuaSurface::request_path. more
  • Fixed double click interaction with number input. more
  • Fixed teleporting spidertrons across surfaces while also changing their position. more
  • Fixed manual filter insertion logic with modded container entities. more
  • Fixed a crash related to multiplayer latency and modded selection tools. more
  • Fixed an inserter activity progress being incorrect for certain orientations.
  • Fixed a sound instance leak. more
  • Fixed integer mod settings would allow decimal values. more
  • Fixed that renaming a spidertron wouldn't include the player during the Lua event. more
  • Fixed a lag spike when finishing selection of entities in chart view far from the center of the map. more
  • Fixed a crash related to copy tool when cursor stack was cleared during setup blueprint event. more
  • Fixed multiple instances of the same working sound syncing up, causing "phasing" artefacts.
  • Fixed fluid wagon fluid tooltips would round the amount shown incorrectly.
  • Fixed some sounds playing in fog-of-war when they shouldn't.
  • Fix modded entities not showing input-output fluid connection arrows more
  • Fixed LuaControl::enable/disable_flashlight when LuaPlayer points at a player with CharacterController. more
  • Fixed incorrect fluid arrows on chemical plants, pumpjacks and oil refineries more

Modding


  • The mod settings GUI will now show the 'tooltip' icon for any settings that have tooltips.
  • Added a reset button to each mod setting in the mod settings GUI.
  • Modded tips and tricks information is remembered when the associated mods are temporarily removed/disabled.
  • Added support for container entities with filters by using inventory_type = "with_bar" or "with_filters_and_bar".
  • Added EntityPrototype::build_grid_size. Supported values are 1 (for 1x1 grid) and 2 (for 2x2 grid).
  • Added EntityPrototype::use_exact_mode.
  • Added support for circuit connections to linked containers.
  • Added the entity prototype flag not-in-made-in to allow hiding things from the 'made in' recipe tooltip.
  • Added FluidBox::hide_connection_info. When true the blue fluid connection arrows will not be drawn.

Scripting


  • Added LuaControl::crafting_queue_progress write.
  • Added LuaTile::tile_ghost.
  • Added 'to_be_deconstructed', and 'has_tile_ghost' filters to the options for LuaSurface::find_tiles_filtered.
  • Added LuaEntityPrototype::indexed_guns. It works as LuaEntityPrototype::guns but returns an array.
  • Collision-mask prototype filters for Entity, Tile and Decorative now support a 'contains-any' and 'contains-all' modes.
  • Added support to set player.opened to script inventories.
  • LuaEntity::get_connected_rail also returns rail_direction and rail_connection_direction going back to origin rail.
  • Added on_pre_ghost_upgraded event.
  • Added LuaEntity::get_rail_segment_rails.
  • Added LuaEntity::is_rail_in_same_rail_segment_as.
  • Added LuaEntity::is_rail_in_same_rail_block_as.
  • Added LuaEntity::get_parent_signals.
  • Added LuaEntity::get_child_signals.
  • Added LuaEntity::get_inbound_signals.
  • Added LuaEntity::get_outbound_signals.
  • Added LuaEntity::rocket_silo_status read and defines.rocket_silo_status
  • Added LuaBootstrap::register_metatable.
  • Added LuaLogisticNetwork::can_satisfy_request.
  • Added LuaLogisticNetwork::get_supply_counts.
  • Added LuaLogisticNetwork::get_supply_points.
  • Added LuaEntityPrototype::use_exact_mode read.
  • Added LuaEntityPrototype::active_energy_usage, idle_energy_usage, lamp_energy_usage reads.
  • Added rocket_silo_input, rocket_silo_output, rocket_silo_modules inventory defines.
  • Added LuaEquipmentGrid::unique_id read.
  • Added LuaForce::color read.
  • Added LuaForce::custom_color read/write.
  • Added target to on_pre_ghost_upgraded.
  • Added target and direction to on_cancelled_upgrade.
  • Added LuaEquipmentGrid::find/count methods.
  • Added LuaEntityPrototype::tile_width/tile_height reads.
  • Added LuaEntity::tile_width/tile_height reads.
  • Added range_modifier, cooldown_modifier, consumption_modifier fields to AmmoType concept.
  • Added LuaEntity::stop_spider().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2022-08-29 09:19:01 CET ] [ Original post ]

Version 1.1.61 released as stable

Changelog for versions 1.1.60 and 1.1.61

Changes


  • The game no longer requires re-entering server passwords when restarting to sync mods or mod settings.
  • When joining modded games mods and settings are synced at the same time reducing the number of restarts needed.

Optimizations


  • Improved game startup time when using mods.

Bugfixes


  • Fixed that item requests didn't subtract items picked up from ground when reviving ghosts. more
  • Fixed burner inserter would not fuel itself when drop target was full. more
  • Fixed that inserters would report status other than "Waiting for space in destination" in certain cases. (https://forums.factorio.com/102225, https://forums.factorio.com/65351)
  • Fixed that Lua collision mask util didn't check for tile prototypes. more
  • Fixed that map pings would always round up the pinged location. more
  • Fixed that replays would always say mods didn't match. more
  • Fixed that canceling syncing mods with a save would exit the GUI.
  • Fixed that canceling syncing mods with a save through escape would leave the partially downloaded mods.
  • Fixed that the circular dependency error doesn't list all mods. more
  • Fixed a deadlock on loss of ConnectionAcceptOrDeny message. more
  • Fixed a desync when fast-replacing burner generators.
  • Fixed server getting stuck at "Saving the map for player" for 20 seconds sometimes if a client disconnects shortly after connecting.
  • Fixed server getting stuck at "Saving the map for player" forever in some rare situations.
  • Fixed highlight box on curved-rail would not render selection box correctly. more
  • Fixed heavy-mode when character dies in multiplayer. more
  • Fixed that the "run forest, run" achievement could be unlocked by shooting trees instead of running them over. more
  • Fixed a crash when trying to read LuaEntity::neighbours on a WallConnectable when one of the neighbours is a ghost. more
  • Fixed recipe highlights in the assembling machine GUI. more
  • Fixed an issue with the prototype explorer GUI and guns. more
  • Fixed false-positive desyncs when using mods and running /c game.force_crc() or /toggle-heavy-mode more
  • Fixed a crash when defining a fluid stream prototype with zero particles. more
  • Fixed a GUI layering issue related to some error messages. more
  • Fixed not being able to open blueprint books in books through the quickbar. more
  • Fixed LuaSurface::find_entities_filtered would fail to find entities by collision mask if they only collide with tiles. more
  • Fixed that pump that cannot interact with fluid wagons would crash on save after position change. more

Modding


  • The mod settings GUI will now show the 'tooltip' icon for any settings that have tooltips.
  • Added a reset button to each mod setting in the mod settings GUI.

Scripting


  • Added LuaEntityPrototype::height, torso_rotation_speed, automatic_weapon_cycling, chain_shooting_cooldown_modifier, chunk_exploration_radius reads.
  • Added LuaEntityPrototype::animation_speed_coefficient.
  • Added LuaEntityPrototype::manual_range_modifier.
  • Added LuaEntityPrototype::dying_speed read.
  • Added sample_index parameter to LuaFlowStatistics::get_flow_count().
  • Added LuaControl::crafting_queue_progress write.
  • Added LuaTile::tile_ghost.
  • Added 'to_be_deconstructed', and 'has_tile_ghost' filters to the options for LuaSurface::find_tiles_filtered.
  • Added LuaEntityPrototype::indexed_guns. It works as LuaEntityPrototype::guns but returns an array.
  • Collision-mask prototype filters for Entity, Tile and Decorative now support a 'contains-any' and 'contains-all' modes.


[ 2022-06-29 09:44:15 CET ] [ Original post ]

Version 1.1.59 released as stable

Changes


  • Significantly reduced the intensity of the red screen flash when the player character takes damage.
  • Changed fish so they won't swim into inactive chunks. more
  • Changed slowdown capsule and posion capsule icons to be matching in size. more
  • Added email authentication to login GUIs.

Bugfixes


  • Fixed that overwriting ItemRequestProxy item requests wasn't working properly in some cases when the same item was already requested. more
  • Fixed that loading a mod with a corrupted image file would crash the whole game on Linux. more
  • Fixed a crash with ghost overbuilding and script interactions. more
  • Fixed that infinite technologies didn't respect ignore_tech_cost_multiplier. more
  • Fixed that LuaEntity::belt_neighbours didn't work on ghosts. more
  • Fixed an issue with item-with-inventory extending inventories and quickbars. more
  • Fixed that a train stop helper would not draw when hovering inserters next to rails that were not straight connected to a train stop. more
  • Fixed a crash when fast replacing electric pole marked to be deconstructed when there is another ghost pole on top of it. more
  • Fixed a crash when creating a blueprint with connected electric pole while it has an upgrade target set to not electric pole. more
  • Removed a NaN check when loading map. more
  • Fixed a screenshot for save file preview would not account for a force of a player. more
  • Removed duplicated frame in grenade and cluster grenade animation. more
  • Fixed a map loading issue when changing mod dependencies and nothing else. more
  • Fixed a crash when trying to perform some actions while in multiplayer. more
  • Fixed rotating entities with non-symetric bounding boxes didn't work correctly. more
  • Fixed that already built pipes to ground could show removal indicators for pipes they are bridging when selected.
  • Fixed the runtime multiplayer settings GUI wouldn't fit on screen. more
  • Fixed that inserters could be flipped in some cases when they weren't supposed to allow it. more
  • Fixed that cliff deconstruction wasn't issued when the corrected cliff collision box overlapped with ghost entities. more
  • Quickbar shortcuts to items in blueprint books can be used again. more
  • Fixed grenade shadows.
  • Fixed it was possible to put blueprint book indirectly into itself more

Scripting


  • Added on_research_cancelled.
  • Added on_player_reverse_selected_area.


[ 2022-05-11 12:29:29 CET ] [ Original post ]

Version 1.1.57 released as stable

Changelog from version 1.1.54 to 1.1.57

Minor Features


  • The multiplayer games browser can now filter games that are hosted on dedicated servers.

Gui


  • Some GUI fixes and improvements for screen resolutions under 1920x1080
  • Set the default GUI scale on the Steam Deck to 100%

Optimizations


  • Improved overall performance by 5-10% when fully zoomed out.

Bugfixes


  • Fixed west variation of Boiler and Heat exchanger graphics. more
  • Fixed save/load instability occuring when the game was saved after a robot threw cliff explosives but before the cliff exploded.
  • Fixed a crash when script tries to connect rolling stock during rolling stock destruction. more
  • Fixed LuaTransportLine::output_lines on a splitter's output transport line would incorrectly consider it an input transport line of that splitter. more
  • Fixed LuaTransportLine::input_lines would not return both input lines of a splitter.
  • Fixed that when train was created, a wrong end could be selected as a front when rolling stock at expected trains front was facing backward.
  • Fixed that it was possible to specify artillery-projectile as a place_result of an item. more
  • Fixed unnecessary disk writes when showing background simulations. more
  • Fixed that sometimes the host would not have admin rights when hosting a multiplayer game from a save.
  • Fixed LuaSurface::find_tiles_filtered would not cover bottom right tile.
  • Fixed that too many open RCON connections would crash the game. There is now a limit of maximum of 128 simultaneous RCON connections. more
  • Fixed a crash related to modded trains that could change travel direction due to air friction computation. more
  • Fixed energy consumers would get too much energy when supplied through multiple electric networks. more
  • Fixed a crash due to LuaLogisticCell not being invalidated when owner entity is being deleted. more
  • Fixed that non-lamp entities could be given the 'lamp' electric usage priority which would crash the game. more
  • Fixed locomotive placement would snap to wrong train stop when there are multiple stops available. more
  • Fixed that the whitelist button was enabled in the /config GUI. more
  • Fixed searching for items in controller gui would not highlight item stacks in the trash slots. more
  • Fixed that building underground belt ghosts with smart belt building would crash if ghosts are immediately revived by script. more
  • Fixed very high deconstruction_time_to_live value would lead to deconstruction orders expiring too soon. more
  • Fixed that a multiplayer client could desync several times in a row, making the server save the map for desync report multiple times.
  • Fixed that crafting recipes with products exceeding their stack limit would produce only a single full stack when crafting by hand. more
  • Fixed tips and tricks GUI staying open when changing controllers, and not being able to close it afterwards. more
  • Fixed PvP config for health bonus didn't apply correctly.
  • Fixed that if the game couldn't connect to a server due to corrupted data, it wouldn't show any error to the user. more
  • Fixed that the Steam version wouldn't start on Linux and OSX.
  • Fixed poison cloud sound fade out.
  • Fixed tooltips for vehicles would still show entry instructions even when no passengers are allowed. more
  • Fixed train stop names with different amounts of leading spaces being treated as equal in some cases but not in others. more
  • Fixed idle machines without idle sound counting towards the max_sounds_per_type limit. more
  • Fixed that changing the force of artillery wagons didn't work. more
  • Fixed a crash when using non-rectangular equipment. more
  • Fixed a crash when building underground belt or pipe ghosts over belts/pipes of other forces. more
  • Fixed character corpse armor variations being inconsistent with character armor variations. more
  • Fixed a consistency issue if a Lua event handler cancelled deconstruction of an entity that was marked for deconstruction as a result of fast-replace. more
  • Fixed that some error messages wouldn't be translated. more
  • Fixed that biters might remain inactive when they should be activated. more
  • Fixed that units could teleport through cliffs if they bunched up close together. more
  • Fixed that setting LuaGuiElement::zoom to 0 would crash the game. more
  • Fixed a crash when changing mod options while the cursor hovers the "Back" button. more
  • Fixed a crash due to recursive chain signal update. more
  • Fixed that if a non-attack distraction command failed, it would raise the on_ai_command_completed event repeatedly. more
  • Fixed that opening web links in the Linux Steam build of the game could take unreasonably long. more
  • Fixed that logistic requests, item filters and similar could be set to the copy-paste tool when clicking the slot while holding that item. more

Scripting


  • Added 'is_military_target' filter to the options for LuaSurface::find_entities_filtered.
  • Added LuaFluidBox::get_fluid_system_id() method.
  • Added LuaItemPrototype::reverse_* read for selection tool.
  • Added LuaEntity::radar_scan_progress read.
  • Added LuaEntityPrototype::logistic_parameters read.
  • Added LuaEntityPrototype::heat_buffer_prototype read.
  • Added LuaHeatEnergySourcePrototype::heat_buffer_prototype read.

Modding


  • Added LocomotivePrototype::max_snap_to_train_stop_distance.
  • Added AutoplaceControl::can_be_disabled.


[ 2022-04-01 14:54:24 CET ] [ Original post ]

Friday Facts #369 - To the moon

No doubt you have heard about NFTs, the latest Blockchain innovation. With some big gaming companies exploring NFTs, where does Factorio stand? Read the full blog post on our website.


[ 2022-04-01 12:20:51 CET ] [ Original post ]

We support Ukraine

We are a games company based in the Czech Republic. Russia's invasion of Ukraine affects us directly. We have team members there, we have friends there, and we get information first hand. There is no excuse for the actions of the Russian army, they have little regard for civilians including children. We support Ukraine and have made contributions to relief efforts. We support Russians that stand against the actions of the Russian government. You can help too, even if it is just with your voice. World leaders are listening: every voice counts.
The Czech National museum, which has bullet scars from the Russian invasion of Czechoslovakia in 1968. Please, keep the discussions about the world events (if you can't help it) specifically in threads related to this post, as we want to keep the rest of the content on topic.


[ 2022-03-02 10:56:10 CET ] [ Original post ]

Friday Facts #368 - Steam deck, Ghost bugs, Docs improvements

Hello, Today is actually the 6 year anniversary of Factorio launching on Steam, and just recently too we passed 3 million total sales (and we're even past 3.1 million at this point), so it is quite a milestone. It is great for us that the game is still selling consistently year on year, even though we never take part in sales or bundles. Read the full blog post on our website.


[ 2022-02-25 16:06:37 CET ] [ Original post ]

Friday Facts #367 - Expansion news

Hello, long time no talk, we've got some catching up to do... Almost 1 year ago we said "we don't think that [the expansion] will take less than a year to develop". Well it has been less than a year and it is not finished, so we kept our word on that :). But while it might not be finished, there is a still a lot we have done so far. Read the full blog post on our website.


[ 2022-02-04 13:36:58 CET ] [ Original post ]

Version 1.1.53 released as stable

Changes


  • When using /swap-players undo queues are now also swapped.
  • Improve performance of querying if an entity is registered for deconstruction from O(N) to O(1).
  • Adjusted default music volume.

Bugfixes


  • Fixed that if biters took damage from a forest fire, they would path toward the player who started it, no matter the distance. more
  • Fixed that replacing a tile between a colliding hidden tile (with check_collision_with_entities set to true) and an entity would not yield an item.
  • Fixed that LuaGameScript::ban_player would incorrectly use reason as a player name when given player was never in game. more
  • Fixed that the saving progress bar and other popups were placed behind the transparent pause overlay. more
  • Fixed a scenario could be created with temporary-state trains which were not properly deleted. more
  • Fixed a crash when using --map-settings while loading a multiplayer map. more
  • Fixed that trying to manually mine a resource that needs a mining fluid would sometimes produce sound of mining. more
  • Fixed script rendered arcs could be considered invisible when they were visible. more
  • Fixed that LuaEntity::belt_neighbours would return LuaEntity based on EntityGhost's inner entity, not the EntityGhost itself. more
  • Fixed fish preventing tiles building with check_collision_with_entities enabled.
  • Fixed that trains would not account for the train stop snap distance when already at the train stop with the back of a train. more
  • Fixed the intro music volume being set incorrectly.
  • Fixed that --start-server-load-latest when given an empty saves folder wouldn't work correctly. more
  • Fixed missing efficiency tooltip and incorrect fuel consumption tooltip value in generator equipment with burner energy source.
  • Fixed ghost electric poles connecting to ghost electric poles of other forces. Neutral force is exempt from this change. more
  • Fixed that biters would sometimes prefer running away over choosing another target. more
  • Fixed trains pathfinder would crash when a train is in a loop next to segment end and was requested to go to rail target in the middle of a loop. more
  • Fixed multi-level technologies showing the same saved progress in technology GUI. more
  • Fixed an icon of recipe notification on item group would show even if there are no recipes visible in a given context. more
  • Fixed a crash when defining too many icon variations. more
  • Fixed changing station name with rich text tags could crash when moving cursor by words. more
  • Fixed LuaBurner::inventory did not work correctly for some burner-energy-source entities. more
  • Fixed a crash caused by undoing an entity deconstruction which another player already cancelled. more

Modding


  • Added EntityPrototype::protected_from_tile_building, true by default. If set to false - entity won't block tile mining/building (with `TilePrototype::check_collision_with_entities` enabled).
  • Added LandMinePrototype::trigger_collision_mask.
  • Added EntityWithOwnerPrototype.
  • Added EntityWithOwnerPrototype::is_military_target and allow_run_time_change_of_is_military_target.
  • SimpleEntityWithForce now inherits from SimpleEntityWithOwner.
  • SpiderEnginePrototype::military_target is no longer used. If anything is provided it will make related SpiderVehiclePrototype to become a military target instead.

Scripting


  • Added LuaEntityPrototype::trigger_collision_mask read.
  • Added LuaEntity::is_military_target read. This deprecates LuaEntity::is_entity_with_force.
  • Added LuaEntityPrototype::is_entity_with_owner, is_military_target and allow_run_time_change_of_is_military_target read.
  • Added LuaEntity::get_spider_legs().
  • Added LuaEntity::neighbours read for cliffs.


[ 2022-01-21 16:18:51 CET ] [ Original post ]

Version 1.1.50 released

Minor Features


  • The permissions list in the permissions GUI can now be localised.
  • Removed feature where reactor collision box would increase when connected to neighbouring reactor (character can now walk in-between connected reactors)

Bugfixes


  • Fixed that biters could get stuck trying to attack an entity they were standing on. more
  • Fixed issue regarding placing an electric pole over a ghost of an electric pole connected to an enabled power switch. more
  • Fixed a crash related to units and mod events. more
  • Fixed ghost entities of other forces being considered valid drop targets. more
  • Fixed ghost electric poles connecting to electric poles of other forces. Neutral force is exempt from this fix, it can connect to everything. more
  • Fixed that LuaEntity::disconnect_neighbour was unable to disconnect specified pair of electric poles when they were on different surfaces.
  • Fixed gate cloning related to opened state. more
  • Fixed that on_game_created_from_scenario event didn't fire after pressing "Save and Play" from map editor. more

Modding


  • Added LuaTilePrototype::check_collision_with_entities, false by default. If set to true - checks for collisions with entities before building or unearthing the tile.
  • Removed ReactorPrototype::neighbour_collision_increase.


[ 2021-12-23 15:47:21 CET ] [ Original post ]

Version 1.1.49 released as stable

Bugfixes


  • Fixed transport belts picking up items on ground when rotated. more
  • Fixed that game.map_settings.path_finder.fwd2bwd_ratio could be set to nonsensical values. more
  • Fixed main menu track playing only once. more
  • Fixed that units could get stuck close to their goal. more
  • Fixed that the small research bar in a technology slot wouldn't show for the technology currently in research. more
  • Fixed a crash which was caused by early garbage collection of LuaObject because LuaObject method closures didn't hold a back reference to the object. more
  • Fixed barelling recipe icons having incorrect tint with index-based fluid color definitions. more
  • Fixed barelling recipe icons having incorrect alpha with fluid color definitions in 0-255 range.

Scripting


  • LuaObjects are now saved using binary format instead of previous format with intermediate Lua table. This speeds up general handling of LuaObjects and makes saving and loading with a lot of them noticable faster.
  • LuaObject::isluaobject now returns true instead of a magic string.
  • Clarified LuaGameScript::finished. more
  • Added LuaGameScript::finished_but_continuing read.
  • Added LuaGameScript::reset_game_state() method.
  • Implemented new website for Lua API documentation.


[ 2021-12-10 08:46:39 CET ] [ Original post ]

Version 1.1.48 released as stable

Bugfixes


  • Added tip about power pole coverage when drag-building.
  • Fixed that the distance between first and second pole in the dragging electric poles tutorial was 6 tiles instead of 7.
  • Fixed LuaGameScript::save_atlas() function would crash the headless server. more
  • Fixed possibility for the victory screen to be hidden behind other GUIs under specific circumstances more
  • Fixed generator and fluid energy source tooltip showing 0 fluid consumption if burning fluids with 0 fuel value or consuming fluids with temperature close to the default. more
  • Fixed the inserter "hand stack size" tooltip missing if the research-based bonus value was 1. Now it is shown if the value is greater than 0. more
  • Fixed the inserter "hand stack size" tooltip ignoring stack_size_bonus prototype property.
  • Fixed cloning linked-container would clear its inventory.

Modding


  • Added FluidEnergySourcePrototype::destroy_non_fuel_fluid, true by default.
  • Added GeneratorPrototype::destroy_non_fuel_fluid, true by default.
  • Changed tip trigger name from "unlocked-recipe" to "unlock-recipe" to be consistent with the way other triggers are named.

Scripting


  • Added LuaEntityPrototype::inserter_stack_size_bonus read.
  • Added LuaFluidEnergySourcePrototype::destroy_non_fuel_fluid read.
  • Added LuaStyle::bar_width read/write.
  • Added LuaPlayer::show_on_map read/write.
  • Reworked table saving and loading to be non-recursive. This allows to have extreme table nesting inside of `global` variable.


[ 2021-11-25 12:54:12 CET ] [ Original post ]

Version 1.1.46 released as stable

Changes


  • Reduced multiplayer latency on very good connections by up to 66ms(4 ticks). more
  • Changed multiplayer latency calculation to be smoother. This should reduce multiplayer stutter on bad connections.
  • Changed default network send rate from 30 to 60 packets per second and added an option to configure the rate in server-settings.json.

Bugfixes


  • Add a 70% damage bonus to discharge defenses with Energy Weapons Damage 6 and 7. more
  • Fixed flamethrower turrets not reporting the correct damage bonuses
  • Fixed gun turret tooltips showing the ammo in the middle of the other stats
  • Fixed artillery wagon and artillery turret tooltips not showing the damage of the loaded ammo
  • Fixed drawing wall filler when hovering mouse over ghosts. more
  • Fixed crash when trying to connect wire after wire type in cursor stack was changed by script. more
  • Fixed roboport would not output signals for 1 tick when electric pole was mined while having circuit wire from same circuit network. more
  • Fixed that the pole drag building skip trigger didn't work, so the tip was always shown even when the player used drag building.
  • Fixed LuaItemStack::get_tile_filter would incorrectly return entity filters. more
  • Fixed mining drill GUI not being openable if the drill didn't have module slots or energy source with GUI. more
  • Fixed a crash when using 0-length debug names in Lua bytecode. more
  • Fixed that setting the scale parameter to zero in a spidertron leg definition would cause a "double value not in range for fixed point number" error. more
  • Fixed crash when destroying a vehicle on the same frame a tooltip is created for the vehicle's weapon and ammo bar. more
  • Fixed that building an entity over other forces' ghosts and undoing would transfer ownership of those ghosts to the undoer's force.
  • Fixed a crash when setting inserters to require no power when rotating/extending. more
  • Fixed "create-trivial-smoke" triggers being interpreted as "create-entity" triggers in the prototype explorer which could cause a crash. more
  • Added migration for saves with inserters that have NaN hand height or hand length.

Modding


  • Added TurretPrototype::energy_glow_animation_flicker_strength.
  • Removed obsolete pollution-visualization sprite, which was replaced by pollution_color utility constant.
  • Sub items are now removed from items used in hand-crafting.

Scripting


  • Added LuaEntity::connected_rail_direction read.
  • Added TrainScheduleRecord::rail_direction.
  • Added LuaGuiElement::swap_children().


[ 2021-11-06 08:18:38 CET ] [ Original post ]

Version 1.1.42 released as stable

Bugfixes


  • Fixed an API error when checking for updates for a large number of mods. more
  • Fixed that inserters wouldn't remove burnt result items from assembling machine recipes with no item outputs. more
  • Fixed vehicle weapon slots GUI not highlighting with the corresponding ammo slot when selected
  • Fixed tank cannon weapon showing a "1" in the vehicle weapon slots GUI
  • Fixed that entities not containing certain collision masks would never collide with tiles. more
  • Fixed a crash when opening the tutorials GUI through Lua command. more
  • Rocket silo no longer drains more energy at night. more
  • Fix tank cannon showing smaller range than the cannon shells. more
  • Fix ugly death GUI when the game is paused in MP. more
  • Fix 'Game finished' GUI had an incorrect tooltip for the green button. more
  • Fixed that copy paste entity tips were dependant on the copy-paste tool tip instead of copy paste entity category.

Modding


  • Added OffshorePumpPrototype::check_bounding_box_collides_with_tiles.
  • RocketSiloPrototype::lamp_energy_usage now can be zero.

Scripting


  • Added freeplay remote interface to read the value of `skip_intro`. more


[ 2021-10-13 12:32:29 CET ] [ Original post ]

Version 1.1.41 released as stable

Features


  • Added auth server bans feature for multiplayer games. When enabled this will inform the Factorio.com authentication server of ban and unban commands issued in multiplayer sessions. Designed to combat griefers in multiplayer games, it will also query the authentication server for a ban recommendation when a user tries to connect.

Bugfixes


  • Fixed that trigger prototype flag filters didn't work correctly when an entity had no flags set. more
  • Fixed a crash after inserting fuel into burner inserter while it was already trying to fuel itself. more
  • Fixed that unrelated entities were highlighted when using a cut tool. more
  • Fixed that in editor mode undoing deconstructions did not instantly revive affected entities. more
  • Fixed that setting the direction of a script created character entity didn't work correctly. more
  • Fixed that items with fuel value would be put into furnace fuel inventory when there was enough fuel but item could be smelted. more
  • Fixed inserters picking up items on ground marked for deconstruction. more
  • Fixed that the low power tip didn't show in some circumstances.
  • Tweaked some of the triggers to show/skip tutorials related to drag building.
  • Fixed that Furnace's working_visualisations would not apply recipe tint on fadeout. more
  • Fixed crash due to usage of standard library function that is missing on macOS 10.11. more


[ 2021-09-24 11:27:32 CET ] [ Original post ]

Version 1.1.39 released as stable

Bugfixes


  • Fixed that rotating belt direction when dragging allowed "stash" the rotate and continue in the original direction. more
  • Fixed that loading a game that was saved during drag building didn't clear the internal drag building state causing blueprint snapping not working properly. more
  • Fixed that LuaGameScript::check_prototype_translations() didn't check technologies. more
  • Fixed that items with data would not stack properly in crafting machine source inventory when recipe requires more than a stack of ingredient. more
  • Fixed that pasting a blueprint over existing train could cause a desync. more
  • Fixed that it was possible to interact with locomotive's fuel slots while out of reach. more
  • Fixed wrong status text when a mining drill drop target is marked for deconstruction. more
  • Fixed wrong mining drill status when a resource is depleted while the mining drill is missing the required fluid. more
  • Fixed the blueprint snap-to-grid reference point being drawn behind entities in some situations. more

Scripting


  • LuaEntityPrototype::resource_categories now supports characters.
  • Added on_equipment_inserted and on_equipment_removed events that fire any time any equipment is added/removed from a grid.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2021-09-07 07:45:05 CET ] [ Original post ]

Version 1.1.38 released as stable

Changes


  • New Titillium style font for Cyrillic languages.

Bugfixes


  • Fixed inconsistency when fast-replacing ghosts with circuit connections. more
  • Fixed an issue with drag-building electric poles with long wire reach. more
  • Fixed a crash related to tutorials and modding. more
  • Fixed an issue with LuaEntity::set_request_slot() and duplicates. more
  • Fixed that picking blueprints from the library through quickbar slots didn't fire the Lua cursor stack changed event. more
  • Fixed items with durability/ammo wouldn't merge properly in some cases. more
  • Fixed a roboport "recharging" icon appearing when not connected to the electric network. more
  • Fixed an issue with roboports left in recharging state when revived from ghosts. more
  • Fixed an issue where an error sound played when pasting onto a power switch from anything other than another power switch more
  • Fixed that the non-blocking saving option would be reset when resuming a multiplayer game using the continue button. more
  • Fixed 'Close preview' button having cut off text in some locales. more
  • Fixed a crash when deleting surfaces with script-connected electric poles. more

Scripting


  • Added LuaEntity and LuaUnitGroup::set_distraction_command.
  • Added LuaSurface::find_nearest_enemy_entity_with_owner().
  • Added LuaForce::is_friend() and is_enemy().


[ 2021-08-20 10:35:58 CET ] [ Original post ]

Version 1.1.36 released as stable

Bugfixes


  • Fixed belt drag building on the edge of building reach. more
  • Fixed that canceling upgrade of underground belt didn't make the corresponding operation with the (potentially) connected belt on the other side.
  • Fixed making blueprint from underground belt with direction upgrade order.
  • Fixed technology icons of flamethrower and rocketry. more
  • Fixed hang when deleting blueprint/deconstruction/upgrade planner or blueprint book held by an inserter. more
  • Fixed hang when trying to delete blueprint/deconstruction/upgrade planner or blueprint book that was moved to different inventory in the meantime. more
  • Fixed pressing delete key in save/load game menus multiple times would pop-up confirmation dialog multiple times. more
  • Fixed that the close map generator preview button icon was too large. more
  • Fixed that the show/close map generator preview button didn't loose hover after the preview was shown.
  • Fixed that Cut and copy paste tools select trains in the standard selection mode, even when trains are ignored in this mode. more
  • Fixed crash related to wrong identification of non-default values in the mod settings gui. more
  • Fixed that linked custom inputs didn't work for some game controls. more
  • Fixed that the train fuel tab didn't work right for clients in multiplayer. more
  • Fixed a crash when using the prototype explorer GUI after just changing mods. more
  • Fixed rare corner case related to removal of mods and entities in more than 1 electric network. more
  • Fixed item product overload logic when using variable output items. more
  • Fixed crash when starting game without base mod and with --disable-prototype-history. more
  • Fixed a crash when using set_stack in blueprint books. more
  • Fixed a crash when cloning script-disabled beacons. more
  • Fixed a crash when using repeat_count with frame_sequence in animation definition. more
  • Fixed a crash when trying to build a rolling stock between other rolling stocks from a single train. more
  • Fixed ghost entities had reflections on water.
  • Fixed a desync related to processing on_gui_opened event of opening blueprint records in multiplayer games.
  • Fixed a crash when trying to pick a fluid wagon with fluid in clone tool. more
  • Fixed that copying assembling machine recipes didn't update fluidbox temperature filters in some cases. more
  • Fixed that robots could sometimes leave roboports very slowly if they were called to work in the middle of descending into a roboport. more
  • Fixed trains GUI status button tooltip not updating. more
  • Fixed LuaPlayer::build_from_cursor would flip direction when every other building underground belts/pipes. more
  • Fixed Train GUI wait condition bars display with 0 slot cargo wagons. more
  • Fixed in-game EULA showing HTML character sequences. more

Scripting


  • Fixed clearing LuaCustomChartTag.icon by writing nil or empty SignalID.
  • Added LuaPlayer::start_selection and clear_selection.
  • Added freeplay remote interface methods for adjusting the crashsite.

Modding


  • Added overlay layer to the tree variation definitions. more
  • Fixed parameter substitution when used with standard parameter more
  • Removed unused equipment prototype property "ability_icon".
  • Added select_group_row_count, select_slot_row_count, inventory_width, module_inventory_width, tooltip_monitor_edge_border, normalised_achievement_icon_size, tutorial_notice_icon_size and flying_text_ttl to utility constants.


[ 2021-07-17 06:09:00 CET ] [ Original post ]

Friday Facts #366 - The only way to go fast, is to go well!

Hello, long time no see :) We obviously have a lot to talk about when it comes to the game changes we recently did, or plan to do, but we don't want to share any of it yet. Yet, there is currently a topic very relevant to us and we can share it without revealing any specific changes to the game. Today's post will be quite technical and related to programming, so if you just came for the game news, you can safely skip this one. You can read the full blog post on our website: https://factorio.com/blog/post/fff-366


[ 2021-06-18 14:11:36 CET ] [ Original post ]

Version 1.1.35 released as stable

Bugfixes


  • Fixed multiple issues related to placing blueprints with electric poles near other electric poles or ghost thereof. more
  • Fixed a lighting issue with QCK Prism mousepads. more
  • Fixed recipe notifications when a recipe is hidden from hand crafting. more
  • Fixed that units dying wouldn't contain the unit group they were part of. more
  • Fixed a crash when migrating entities across types in some cases. more
  • Fixed several crashes when writing to disk fails. more
  • Fixed that searching descriptions of some items didn't work correctly. more
  • Fixed that fast-replacing gates would remove wall control behaviors. more
  • Fixed desync related to manually fast replacing both ends of underground belt in a way, that they don't connect in the end.
  • Fixed a crash when trying to edit the whitelist on a server while autosave happens. more
  • Fixed counting tiles when part of search area hits non existing chunks. more
  • Fixed that gate technology had no description. more
  • Fixed loaders would leave a gap on belt when items started moving. more
  • Fixed nuke did not vaporize things in the epicenter of the blast and would leave corpses and remnants behind.
  • Fixed a crash when using items with inventories that contain construction robots. more
  • Fixed a crash when making a new game from a scenario with the map editor in a vehicle. more
  • Fixed not being able to leave large cars with certain shape. more
  • Fixed that using large values in the map editor "tick custom" field didn't work correctly. more
  • Fixed that radar coverage preview wasn't visible when the mouse was above invisible parts of the GUI. more
  • Fixed Terrain water checkbox in map generation settings didn't have the tooltip info icon. more
  • Fixed that the mining drill GUI couldn't be moved off screen. more
  • Fixed science pack requirement objective in supply challenge. more
  • Fixed that tooltips of slots in the statistics GUIs didn't account for force bonuses. more
  • Fixed that upgrading underground belts marked for upgrade didn't properly upgrade the (potentially) connected belts on the other side. more
  • Fixed LuaEntityPrototype::module_inventory_size would return nil when entity has 65535 slots for modules. more

Scripting


  • Added a machine-readable JSON format of the runtime documentation, which can be used by developer tools to provide code completion and related functionality.
  • Added vertical_alignment parameter for LuaRendering::draw_text.


[ 2021-06-18 12:00:35 CET ] [ Original post ]

Version 1.1.34 released as stable

Scripting


  • Added LuaEntityPrototype::air_resistance read.

Bugfixes


  • Fixed black border in spidertron technology icon. more
  • Fixed that having non standard UI scale would render screen white. more
  • Fixed that train could get stuck in destination_full state with available goals when a train stop was built next to ghost rail. more
  • Fixed that LuaPlayer::disable_alert() didn't work for custom alerts. more
  • Fixed that piercing damage didn't work correctly with turrets. more
  • Fixed that LuaSurface::clone_brush() didn't clone entities correctly. more
  • Fixed trees with not-flammable flag would still catch on fire. more
  • Fixed blueprints and copy-paste tools didn't capture planned direction changes of entities. more
  • Fixed that changing train stop limit would not set last player. more
  • Fixed desync when beacons lose power. more
  • Fixed spidertron item icon would look different after changing the spidertron color back to its default value. more
  • Fixed that Tips and tricks trigger related to setting up a logistic chest request was also triggered when setting up the personal request.
  • Fixed that achivements could block the finished game window.
  • Fixed crash when loading font wingding.ttf. more


[ 2021-05-27 12:02:21 CET ] [ Original post ]

Version 1.1.33 released as stable

Graphics


  • Reworked all technology icons, and provided higher resolutions used by high GUI scale.
  • Changed item icons for armors, to match the progression and tech icons better.

Changes


  • Armor stages on the player character show as 1st with Light armor, and as 2nd with Modular armor.

Bugfixes


  • Roboport normal resolution graphics have been updated to be a downscale from the high resolution graphics. more
  • Fixed cut-tool showing distinct selection color when holding shift. more
  • Fixed armor rich text tags not using the correct icon. more
  • Fixed pumpjack showing item drop indication arrows. more
  • Fixed being unable to confirm the migrated content window if there was a game GUI open behind it. more
  • Fixed a bad Lua event when invalidating the owning players controller during the gui closed event. more
  • Fixed scaling of icons on buttons with more than 200% UI scale.
  • Fixed issue where ghosts overlapping with non-ghost entity in cloned area is not cloned. (fixes https://forums.factorio.com/97861)
  • Fixed using upgrade planner without explicit filters on entities marked for upgrade would not upgrade the existing upgrade orders.
  • Fixed a crash with mods and chunk generation in some cases. more
  • Fixed the wrong technology level shown on the icon in the currently selected technology.
  • Fixed the missing notification (i) icon on the recipe group button, when there are more groups, so the tabs are shown as buttons instead.
  • Fixed a crash when trying to undo actions done on a surface that was deleted in the meantime. more
  • Fixed that train would sometimes NO_PATH during repath while in intersection where the path passes through a block that is already occupied by that train. more
  • Fixed a crash when the link_id of a linked container is changed while a non-admin has the GUI open. more

Modding


  • Added "add" and "remove" modes to the Infinity pipe and Heat interface.

Scripting


  • Removed the "tile-build" SoundPath type. It has been replaced with "tile-build-small", "tile-build-medium", "tile-build-large", allowing mods to specify which size they want to refer to.
  • Added LuaEntityPrototype::related_underground_belt read.
  • Added "add" and "remove" modes to `InfinityPipeFilter` and `HeatSetting.`


[ 2021-05-07 08:06:55 CET ] [ Original post ]

Version 1.1.32 released as stable

Bugfixes


  • Fixed various issues related to how chat tags are open. more
  • Fixed that replays would break after winning the game. more
  • Fixed that listbox would loose focus when clicking on other widgets that can't be focused anyway.
  • Fixed GUI crash when furnaces would select recipes that have more products than it's output inventory size. more
  • Fixed that fluids could be purged from the whole fluid system in certain cases. more
  • Fixed a crash when loading save files in some cases. more
  • Fixed locale related to deconstruction planner tile selection mode. more
  • Fixed advanced rail signal tutorial losing items held in the cursor. more
  • Fixed Alt+F4 would close the game on Windows even when other modifier keys were pressed. more
  • Fixed that NAT-punching didn't work correctly. more
  • Fixed that some infinite crafting recipes didn't work as intermediates. more
  • Fixed color blending with a fully transparent color would produce slightly darker original color. more
  • Fixed that clicking gps tags in chat would also trigger chart drag causing chart to be not centered on gps tag. more
  • Fixed market gui would show wrong numbers when an offer has the same item multiple times. more
  • Fixed crash when an entity marked for an upgrade is selected for another upgrade in multiplayer in some cases. more
  • Fixed turret range could sometimes render long line to the top left corner of game window.

Modding


  • Added defines.prototypes which contains all prototype type names (eg: defines.prototypes.entity = { container, furnace, assembling-machine, ... })


[ 2021-04-16 11:29:58 CET ] [ Original post ]

Version 1.1.30 released as stable

Minor Features


  • Blueprints and copy paste of entities with upgrade order are created based on the upgrade order instead of the current entity. more
  • Enabled upgrading entities marked for upgrade, in which case, the upgrade target is used as the source entity for the upgrade planner filters.
  • The announcement of player death now contains GPS tag with the location.

Balancing


  • Increased the tank braking power from 400kw to 800kw. Before this change, the tank acceleration (600kw) was actually even greater than the braking force.

Bugfixes


  • Fixed incorrect color lookup table interpolation for ambient light around noon.
  • Fixed that built electric pole from map view was also opened with the same click with alternative key binding. more
  • Fixed that laser and fluid turret bonus, wasn't shown properly in the toooltip. This bonus is not used in vanilla which uses ammo category bonus. more
  • Fixed that part of the flamethrower turret and flamethrower ammo turret description, which describes the properties of the flame bound to it stargets didn't show the bonus damage from upgrades. more
  • Fixed that mod install could cause removal of blueprint entities if it didn't remove the entity, but just made it not acceptable to be used in blueprint. more
  • Fixed that the confirm load game dialog with 2 green arrow buttons had tooltips with (E) to confirm, while the E to confirm doesn't work here as it would be ambiguous. more
  • Fixed crash related to using smart ghost belt building with a mod that specifies belt without related underground belt. more
  • Fixed that renaming Spidertron didn't trigger on_entity_renamed. more
  • Fixed that disabling side menu guis through script would sometimes leave an empty frame. more
  • Fixed that crafting machines wouldn't wake up when the speed effect was changed in some situations. more
  • Fixed that focus-search didn't in some GUIs work while in the map editor. more
  • Fixed that chat icon selector didn't remember the last opened tab when used outside the game.
  • Fixed that pressing Escape with the chat icon selector opened in a dialog outside the game closed the whole dialog instead of closing just the selector window.
  • Fixed that pressing Control + F to search in the chat icon selector that is opened on top of a non-game window that already had search activated the bottom window search.
  • Fixed that enabled train stops would cause schedule records for trains on different surfaces to be rendered as available. more
  • Fixed rare crash when using Map editor -> Convert save. more
  • Fixed electric pole connection consistency issue related to fast replace of modded entities. more
  • Fixed that building by moving ignored the position where the player built the last entity. more
  • Fixed a crash that could happen when viewing the tooltip for certain types of ammo. more
  • Fixed that ammo tooltips sometimes wouldn't show damage info. more

Modding


  • Added mod dependency modifier "~", which marks the mod as required, but doesn't affect mod loading order, so these kind of dependencies can be circular.
  • Prototype/EntityWithHealth::healing_per_tick is now also used by trees, so their automatic healing is no longer hardcoded. more
  • Loaders are now able to take or insert more than 1 item per transport line per tick. more

Gui


  • Tweaked search in the install mods GUI, so the search order prioritizes the results more naturally.
  • Unified the search button in the mod settings GUI.
  • Improved some descriptions in Map Generator GUI. more


[ 2021-03-26 15:37:21 CET ] [ Original post ]

Version 1.1.26 released as stable

Bugfixes


  • Fixed that all entity GUIs in the map editor entity-editor and spectator controller were invisible.
  • Fixed Train overview GUI not updating the list remark. more
  • Fixed typos in Construction robot tip. more
  • Fixed a crash when quitting while using the linked-container entity type with power armor in it.
  • Fixed that sounds could sometimes be heard when they shouldn't. more
  • Fixed regenerating tile variations during save migration would not break up old large tiles and would only reset their variations to 0.
  • Fixed "probability" property of size variants in the tile definition was ignored when "weights" property was left out.
  • Fixed searching mod settings tab would leave tabs disabled. more
  • Fixed a crash of transport line migration in some cases of mod removal. more
  • Fixed that train stop gui could indicate more trains than there are when trains are removed or merged while gui is opened. more
  • Fixed a conflict between setting the players cursor through script and holding blueprint library blueprints. more
  • Fixed that building entity with multiple items to place would take unrelated items from inventory. more

Modding


  • Added CustomInputPrototype::include_selected_prototype when true the event will include selected_prototype = {base_type=, derived_type=, name=} when applicable.

Scripting


  • Added LuaCustomInputPrototype::enabled_while_spectating, enabled_while_in_cutscene, include_selected_prototype, and item_to_spawn read.


[ 2021-03-03 10:47:05 CET ] [ Original post ]

Version 1.1.25 released as stable

Changes


  • Added shortcut info tooltips to all of the relevant confirm buttons and close buttons.
  • Lowered priority of surface changing shortcut in editor to not be in the way if Control + is used for something. more
  • Changed personal logistic requests for ammo so they don't get delivered to the spidertron you're driving. more

Optimizations


  • Improved performance when building blueprints in multiplayer. more

Bugfixes


  • Fixed Artillery wagon and turret showing wrong tooltip title in deconstruction planner. more
  • Fixed control setting buttons wouldn't have a tooltip when they started without a set value. more
  • Possible fix for multiplayer server crashing when a client tries to connect. more
  • Fixed a crash in multiplayer when upgrading or deconstructing. more
  • Removed and tweaked some hidden locale to hopefully make 100% possible. more
  • Added explicit values to the circuit network range specification in the tips and tricks. more
  • Fixed that the copy and paste tips and tricks simulation wasn't working properly. more
  • Fixed that LuaFlowStatistics::get_flow_count didn't work correctly. more
  • Fixed that instant blueprint building in the map editor didn't work with undo. more
  • Fixed missing status for wall controlling gate by circuit network. more
  • Fixed a crash when saving when using LuaItemStack::create_grid() on stacks with a count > 1. more
  • Fixed that enter to confirm a logistic request count didn't work. more
  • Fixed pole dragging corner case. more
  • Fixed padding in the sync mods with save window when scroll is activated.
  • Fixed invalid "Can't reach" message when using ghost cursor to build rails in the latency state.
  • Fixed wrong status of rail signal next to rail with wrong direction.
  • Fixed that manual rotation of entity with rotation upgrade order didn't clear that order. more
  • Fixed in calculation of required modules when combining real and requested modules during blueprint creation. more
  • Fixed that blueprint containing only entities placeable off grid was built off grid even with snap to grid specified. more
  • Fixed crash caused by scrolling blueprint book in a blueprint shelf that is not yet synchronised. more
  • Fixed that tips & tricks simulation sounds were continuing to play when switched to a tutorial. more
  • Fixed that player could get stuck by entities created in the tutorials. more
  • Fixed some unnecessary error sounds in a special cases when building power poles. more
  • Fixed that exiting high speed moving train could result in a player being stuck. more
  • Fixed mod dependency tooltips in some cases. more
  • Fixed that the upper 1/3 part of the color picker button in the train stop gui didn't work. more
  • Fixed walls would not be buildable on valid positions in some cases. more
  • Fixed crash related to modded underground pipe ghosts with multiple connections with different lengths. more
  • Fixed that it was sometimes possible for an entity to attack an entity on a different surface. more
  • Fixed inaccurate range indicator in spidertron. more
  • Fixed that some sounds that were audible when viewing a certain part of the map in map view wouldn't stop when closing the map view. more
  • Changed defines.flow_precision_index.one_second to five_seconds since that's what it actually is.
  • Fixed crash related to loading that trigger migration to remove invalid upgrades.
  • Fixed that confirming the low value in logistic request didn't update the value. more

Scripting


  • Added move_stuck_players bool parameter (false by default) to the create_entity method.


[ 2021-02-19 08:06:55 CET ] [ Original post ]

Version 1.1.21 released as stable

Changes


  • Added hotkey (default O) to toggle the train overview GUI.

Bugfixes


  • Fixed that gates would open for spidertron. more
  • Fixed tank weapon cooldown rendering. more
  • Fixed that changing the force of a player or spidertron would lose logistic requests. more
  • Fixed that deleting the last scenario didn't correctly clear name, description and preview in the new game gui. more
  • Fixed that it wasn't possible to manually merge trains in chests. more
  • Fixed a crash when rendering rich text tooltips in some cases. more
  • Fixed the Trains/Train stop GUI showing trains on other surfaces. more
  • Fixed player dying in a scenario inside simulation widget would end currently running scenario. more
  • Fixed that create_entities_from_blueprint_string didn't insert train fuel. more
  • Fixed that building blueprints in the game next to uncharted areas didn't work as expected. more
  • Fixed biters and groups in Wave defense overloading the pathfinder. more
  • Building gets interrupted when moving between map and game view. more
  • Fixed building error message spam when building transport belts over obstacle. more
  • Fixed that undoing deconstruction of building with modules created extra module request. more
  • Fixed inconsistency related to building out of reach and moving. more
  • Fixed that the selected map generator preset was not correctly saved when generating a map for multiplayer or map editor. more
  • Fixed that the map generator GUI would only save it's state when pressing Next/Play. more
  • Fixed that dropping single items into machines using modules didn't clear the module requests. more
  • Fixed that the stations list wasn't sorted using natural sort order. more
  • Fixed the blueprint import with odd odd grid offsets. more
  • Fixed that the game didn't show name of the item in the request slot tooltip when it is disabled for being already set. more
  • Fixed that the undo button tooltip didn't update when clicked. more
  • Fixed bad tooltip indentation when instruction can't fit one line. more
  • Fixed overbuilding underground pipe ghosts with real pipes underground pipes. more
  • Fixed inconsistency in direction selection when being a client in a multiplayer game. more
  • Fixed that overbuilding pole out of reach didn't consider the pole to be part of the drag buliding logic. more
  • Fixed that the "Continue" button wouldn't remember whether the last game was single-player or multi-player when non-blocking saving was enabled. more
  • Fixed rare electric network migration error related to loading save without all the related mods. more
  • Fixed crash related to using belt traversing in latency state. more
  • Fixed crash triggered by desync while entities are marked for upgrade in latency state.
  • Fixed non precise belt traversing behviour in latency state.
  • Fixed a desync related to upgrading entities in the latency state.
  • Fixed upgrading unpair underground belt by smart ghost building.

Scripting


  • Added on_research_reversed.


[ 2021-02-08 12:07:49 CET ] [ Original post ]

Friday Facts #365 - Future plans

Hello, the 1.1 release is the final release of the vanilla game. It will be maintained, so bugfixes, simple modding interface additions, or minor tweaks can happen, but that's about it. So what's next? We have a new blog post on our website detailing our future plans, You can read it on our website.


[ 2021-02-05 09:28:41 CET ] [ Original post ]

Factorio 1.1 - Now stable

Hello, we have a stable version! Check out the full details on our latest blog post: Friday Facts #364 - 1.1 stable
Your game will/should auto-update to 1.1.19 if you are not opted-in to any betas. The changelog with all the changes from 1.0.0 will show when you first load the new update. If you want to go back to the 1.0.0 you can do so in the betas menu. Its been 2 months since the 1.1.0 release, so most mods should have been updated. Please check the in-game mod updater.


[ 2021-01-29 10:00:38 CET ] [ Original post ]

Sit back, relax, and vote for your favourite games.

Hello, your votes have helped to nominate use for the 'Sit back and relax' Steam award, thank you all so much! Now the voting for the Winner of the category is open, so be sure to make your voice heard and vote!


[ 2020-12-26 13:00:10 CET ] [ Original post ]

Version 1.1 released as experimental

Hello, Last week we have started the experimental cycle of 1.1 update releases. We have fixed the most game breaking and save corrupting issues, but the update is not quite stable yet. This means you have to opt into it using Steam's beta feature. But beware: blueprint library and save files are not backwards compatible, so once blueprint library gets migrated to 1.1 or you save a map in 1.1 you won't be able to load them in stable 1.0. Furthermore not all mods have been updated to 1.1 yet and modders might not keep up with changes in future patches, so expect things to break from time to time if you play a heavily modded game. If you don't want to deal with a less stable game or your mods breaking, consider staying on the stable version 1.0 for the time being. And please, if you find any bugs, report them on the bug forum.

Major Features


  • Added logistic requests to spidertron.
  • Train stop allows to set limit of incoming trains.

Features


  • The continue button now respects the last type of game played (single player, MP host, MP client).
  • Added support to use blueprints, deconstruction planners, upgrade planners, and modded selection tools from the map view.
  • Hovering the alert notification will show arrows on the edge of the pointing to alert locations.
  • Rich text icon selector.
  • Newly unlocked recipes are highlighted until hovered.
  • Spidertron remotes now allow to add queue commands and a command to follow any entity.
  • Added vertical/horizontal blueprint flipping.
  • Transport belt drag building is locked into a line, can be turned off by an interface setting.
  • Ghosts can be fast replaced and rotated.
  • Ghost build can be used to fast replace non-ghost entities, which results in an upgrade order with (optionally) a direction change order.

Minor Features


  • When editing blueprint: Added a way to specify relative grid position for blueprint that is snapping to absolute grid. Blueprint preview rendering box is updated based on selected grid size and position.
  • Inventory transfer works on empty equipment grid slot the same as on empty inventory slot (moves all).
  • Equipment can be placed by moving.
  • Cursor replenishes when placing into the equipment grid the same way as when building in world.
  • Spidertron item shows its color.
  • Added a way to reset spidertron remote.
  • Spider tries to move legs away when they are blocking robots construction.
  • Power poles/underground belts built by dragging logic works also with ghost building.
  • Power pole ghosts show connections.
  • Power pole connections are saved in the blueprint. They still auto connect to other poles outside the blueprint.
  • Entities marked for deconstruction show the target upgrade.
  • Added tags, worker robots, rail signal states and recipes toggles into the settings to what show on the map.
  • Added support to use the add-stop and add-temporary-stop controls for the train you're driving in the map view.
  • Added hotkey (F10) to switch between viewed player in replay.
  • Added support to reset mod settings in the "failed to load mods" startup GUI.
  • Expanded undo to work with fast replace and upgrade planner.
  • Added SteelSeries GameSense support. more

Graphics


  • Added unique technology icon for Advanced material processing 2 (Electric furnace).
  • Changed postprocessing effect in zoomed-to-world view.
  • Added detailed night lighting of entities.

Optimisations


  • Multithreaded belt update logic.
  • Overall small entity update time reduction + statistics of how much update time is taken by individual entities.

Balancing


  • Productivity module 1 decreases speed of the machine by 5% instead of 15%.
  • Productivity module 2 decreases speed of the machine by 10% instead of 15%.

Changes


  • the Close GUI key-binding (default value is "E") was renamed to Confirm Gui. It works the same as before for many cases (just closing the GUI), but in a lot of other cases, it works as confirm, which generally means the same as clicking the "green button".
  • Renamed clean-cursor to clear-cursor on all the relevant places (locale, key-binding name)
  • Equipment placing now uses the build key-binding instead of the cursor transfer. The default same key-binding is the same.
  • Changed maximum temperature of all fluids apart water and steam to be the same as the default.
  • Poles built by dragging are now actually build on the maximum connection distance from the last built pole instead of the previous logic that was working weird in a lot of corner cases.
  • Underground belt build by dragging now accept the existing piece you start building on as part of the dragging logic.
  • Removed 'mineable wreckage' entity. more
  • Removed the (+/-) buttons for logistic requests, instead they expand dynamically when something is put in the last line.
  • Wave defense can now only be won by launching a rocket.
  • Invalid names of icons in preview icons of blueprint tools now load as unknowns instead of canceling the import string process for that item. more
  • Fluids in train circuit logic treat summed < 1 fluid values as 1 instead of 0.
  • Clicking non-empty quickbar slot with something in cursor sets the quickbar slot to the cursor value rather than selecting the quickbar value.
  • Invalid rail signals output no values into circuit network.
  • Added a confirmation message when loading saves with removed mods or changed mod settings.
  • The cut tool now properly includes trains. It showed trains in the selection preview, but ignored them.
  • Added alternate control locales for keyboard and mouse scroll control binds. more
  • Disabled loading of saves before 0.18.0 version (You can use 1.0 to load older saves and re-save them).
  • Adjusted the artillery turret collision box so it is possible to squeak through.
  • Removed the 'Rocket silos stats' GUI.
  • Arithmetic combinator 'Each' signal can now be used in either left or right parameter.

Gui


  • Added unique icons for technology effects.
  • Added list of affected entities to the technology effect tooltips.
  • Menu background now features various factory simulations instead of a static picture.
  • When entering vehicle, the vehicle window is shown next to the character gun window, instead of replacing it.
  • Moved the character/vehicle gun window to the left of the quickbar.
  • Removed the "Character" tab from the character window.
  • Changed the flat character screen option to be defaulted to true.
  • Added held stack item slot for inserter window.
  • Improved the tips and tricks window: it contains index, search and allows interactive text tags to be used.
  • Added search to loading/saving, settings, shortcuts selection, multiplayer host settings windows and rename stop.
  • Moved the ammo/used-up/health indicator of items down, so it is not obstructed by the number.
  • Added underline for hyperlinks.
  • Personal request button have custom text + red diode when it is out of network or when the personal requests are turned off.
  • Logistic/Trash request buttons show only one number when the trash and request count is the same.
  • Train elapsed time condition has confirmation button and only updates the time when confirmed.
  • Fixed styles for: browse games GUI, host game settings, opened character and select upgrade slot.
  • Tabbing into a textfield selects the text.
  • Removed tiles stay in the list of components in the blueprint setup GUI with 0, the same way as entities, so they can be easily enabled.
  • Added minimum/maximum temperature and heat capacity info to the fluid tooltip.
  • Added usage instruction to capsules/fish.
  • Fixed fish tooltip so it shows consumption/healing instead of shooting/damage.

Sounds


  • Added blueprint building sound.
  • Added undo sound.
  • Added sound for rail planner activation.
  • Added sound for copy/paste.
  • Added sound for opening items and armor.
  • Added sound for selection start and selection finish. Related to blueprint tools.
  • Added sound for pipe to ground as per the pipe.
  • Added sound effects and a specific music track to the main menu.
  • Assembling Machine 2 and 3 made less noisy
  • Robot repair reworked to sound more high tech
  • Removed dead space at the end of some sounds which may have stopped sounds playing
  • Ghost rail building now has the ghost building sound
  • Lowered volume on game won and lost sounds
  • Assembling Machine 2 and 3 made less noisy.
  • Robot repair reworked to sound more high tech.
  • Removed dead space at the end of some sounds which may have stopped sounds playing.
  • Ghost rail building now has the ghost building sound.
  • Lowered volume on game won and lost sounds.

Bugfixes


  • The list of bugfixes and modding changes is too long, if you are interested, you can see full changelog on our forum. more
You can get experimental releases by selecting the '1.1.x' beta branch under Factorio's properties in Steam.


[ 2020-12-03 16:32:59 CET ] [ Original post ]

Friday Facts #363 - 1.1 is getting close

Hello, We have just published a new Friday facts post on out website, You can read all about it here: https://factorio.com/blog/post/fff-363 Let us know what you think at the usual places!


[ 2020-11-13 11:01:29 CET ] [ Original post ]

Friday Facts #362 - Menu simulation, Spidertron, Ghost building, Confirm button

Hello, we have a new FFF blog post, discussing upcoming changes to Spiders, Ghosts, the main menu, and more. Unfortunately due to limitations in the Steam blog formatting, the blog would look terrible on Steam, we have lots of nice .mp4 gifs which we just can't show properly on Steam. Therefore we will just be linking to the blog posts instead of rewriting them here. Please read the full blog article on our website: https://factorio.com/blog/post/fff-362


[ 2020-10-30 08:51:42 CET ] [ Original post ]

Friday Facts #361 - Train stop limit, Tips and tricks

Hello, we finished with the regular Friday Facts series, and yet, there is still so much we want to talk about. I want to clarify, that we are not going to release FFF every week, but there are a few of them coming in the near future.

1.1 - The real 1.0


The point of 1.1 isn't to add some new content, the main motivation is to finalise all the existing features so that they work together in a proper way. This may sound a little bit abstract and boring, but it will be explained more clearly in the upcoming FFFs. Believe me, the sentence "I didn't know I needed this until now" will come to your mind more than once. The work on the 1.1 update started basically right after the 1.0 release, so there is already lots to show. Right now we aren't going to make any promises as to when it is coming, but we will keep you updated on our progress with these blog posts, and give some notice before it is deployed. Though I'm quite certain that we are more than half-way through. To keep you happy until it is here, lets go through some of the changes.

Train stop limit


This is a tiny story about Boskid's train related side project for a feature that was requested quite often (1, 2).

The problem


So imagine the situation: You're sitting in your factory and you need more iron... classic. So you build a nice railway to bring ore from dedicated mining outposts back to your iron smelter. You build 2 ore outposts, and you set up 2 trains, 1 for each. The two trains have a similar schedule; one goes from Iron smelting 1 to Iron ore 1, and the other goes to Iron ore 2. This works fine. However there are some problems when you want to expand your production. You want to just copy-paste Iron smelting 1, and have half the ore go to Iron smelting 2. Now you need to start manually reassigning trains, trying to balance the throughput of the mines, and what else. If an iron mine runs dry, then you need to rebalance the whole system, reassign all the trains from that station, and have some omniscient overview of all the different routes your trains are running. With more mines and more smelting and more trains, this management becomes an incalculable problem, and frankly it is not fun (opinion).

The imperfect solution


There is a nice solution, which works (almost). That is to name all the ore stations the same, and all the smelting stations the same. When choosing a destination, the train can go to any of the train stops with that name, which means:
  • When you build a new ore outpost, you just name it 'Iron mine', and a train will come and pick up from it.
  • When you build a new iron smelting, just name it 'Iron smelter', and a train will come deliver some ore.
  • When you build a new train, just copy-paste the simple schedule, and it will start working effectively.
However there is a small issue with the system, that completely breaks the idea. The trains are not clever. They will path to an arbitrarily chosen train stop with the correct name, based on destination distance and a few other factors. This means that it can easily happen that all the trains end up only servicing 1 iron ore pickup, while there are other outposts full of ore with no trains coming to pick it up. You can somewhat relieve the issue using the circuit network to enable and disable the train stops, but it is only a half-measure. For instance you can still end up with 10 trains rushing to a single small iron ore pickup, which can cause the trains to queue on the mainline and jam everything.

The limit


It is pretty simple, as good solutions typically are. You can set a 'Trains limit' in the train stop GUI, and the train stop keeps track of how many trains are in the station or on their way to it, which we call a reservation. When a train is choosing it's next destination, it will check the limit of all the stops with that name, and if a train stop has too many reservations already, it will skip over it. If all the potential train stops are full, the train will just wait.
This pretty much perfectly solves the problem with naming all the train stops the same, and also solves a few other potential annoyances. For instance, previously your Iron smelter stacker would need to be big enough to fit all the iron ore trains at once, because you couldn't be sure that they wouldn't all return at the same time. Now you can set the train limit of the Iron smelting train stop to the maximum capacity of the station, which means you can build a smaller stacker, and be certain that it will never become over-crowded. The train limit is also controllable with circuit network, so there are even more possibilities. One idea is keeping the train limit set to 0 until there is a full load of ore available at the station. You can also read the current number of reservations, which will have its own interesting uses. There is an edge case we had to solve while working on the feature, what happens if the limit is lowered while a train is already on the way? Our first idea was to force all the trains that are on the way, to repath and find a new destination. This works in many cases, but if there is no train stop it could path to, it would end up stopping and waiting in the middle of the tracks, causing untold economic damage. So we decided that even if the limit is changed, any trains with a reservation will still go there. This means it isn't strictly a 'hard' limit, but we think it is a good thing, as setting the limit to 0 provides an alternative way to control train behaviour compared to when the station is disabled. Basically the train will only consider the limit when first deciding which stop to path to, after that it doesn't care if the limit changes.
We also had to deal with the 'No Path' warnings. If all the train stops were full to their limit, the train would show 'No Path', which isn't very intuitive for the players. So when the train can't find a path due to the train limit it will show a special warning: 'Destination full'.

The impact


To an outside observer, this really may just seem like a tiny little thing, but for us it is one of the most exciting features of 1.1. I think it is also quite telling that something like this has been missing for a long time, given the popularity of the Logistic Train Network mod. While the train stop limit isn't quite as powerful as the mod (understatement), it is going to open up many possibilities and add a lot of interesting gameplay oppourtunities. I don't know if I am alone in saying, but I like it when the rules of a system are very simple, and the complexity emerges from the interaction of these very simple systems. I think the train limit is a perfect example of a simple rule, that will lead to really interesting and complex behavior. I can imagine just riding around on a Iron train with a simple "Pickup Iron -> Dropoff Iron" schedule, and it driving me around the whole factory as the chaotic interaction of train stop limits and other trains means each time it needs to travel somewhere else. I can imagine also a lot of fun design considerations will be needed when building such a rail network, where the traffic is less predictable than a 'Static route' system.

Tips and tricks


The tips and tricks have been a feature of the game for a very long time. They began as a way to explain things to the players that were not explained anywhere else. The iconic example is the 'Alt-mode' tip. Playing without Alt-mode is painful, and even more painful to watch, so we had to tell the player somehow.

The early days


When I say early days, I mean the early days, before even the indiegogo campaign. The first implementation of the tips was straightforward, but a bit rough.
The tips and tricks GUI in version 0.6.4. The initial design:
  • They would popup when you start the game.
  • You can click forward through them (no going backwards).
  • You can close the GUI, there was no way to re-open it other than loading a save game again.
  • The images were of inconsistent sizes, so the GUI would jump around and resize.
  • There was a built-in checkbox to turn them off.
It got the job done, but it needed some development as with the rest of the game.

The first refresh


Over time, the tips and tricks fell into a dark corner. It was always low-priority, and wasn't clearly a 'Graphics' or 'Programmer' task to improve them, it was something in-between. So that is where I came in, and took the task of making some improvements.
The tips and tricks GUI in version 0.16.51. First improvements:
  • You can click forward and backward through them.
  • You can close and open them with a hotkey.
  • The images were retaken at a consistent resolution and zoom.
  • You can open them in multiplayer.
At this point we shifted focus to the other 'tutorial channels' as we were hoping that the new mini-tutorials and NPE would mean we don't need as many tips. We think it is better if things like item usages are explained in the item tooltip, rather than in another GUI elsewhere. Apart from some GUI style updates, the tips and tricks were not changed significantly for the next few major versions.

1.0.0


On the approach to 1.0, I took a last quick look at the tips and tricks. The tips are one of the first GUIs the player sees when they start Freeplay, so I wanted to give them a last lick of paint before the full release.
The tips and tricks GUI in version 1.0.0 The improvements this time were the nice last finishing touches to bring the Tips and tricks to their final form.
  • Increased image size and updated all images to high-res.
  • Added frames and subpanels to match the visual design of the new GUI.
  • New button styles.
  • Generic close button in the top right.
So then that's that right? I finally rest, and watch the sun rise on a grateful universe...

The Inspiration for change


Even before 1.0 was released, I was inspired by the Mini-wiki found in Krastorio 2, and the Informatron mod.

The main spark, is the index of topics. It solves many problems:
  • You can see the title of all the tips right away.
  • You don't need to click through all the tips.
  • It naturally allows categorization of the tips.
  • The player has some idea of the tip content before clicking on it.
  • The small item icons are visually appealing.
However with the deadline of 1.0 approaching and not wanting to expand the scope any further, I just let the idea brew in my mind... until now.

The new tips and tricks


A picture is worth 1,000 words, and in this case, it is very true. So lets start at with that:
Lets go through and explain some of the initial changes:
  • There is now an index on the side.
  • Now that there is an index, we can remove the 'Forward' and 'Back' buttons.
  • There is a search button, we can search using the tip titles.
  • The tips are categorized and indented accordingly.
  • There is a 'Mark as read' button, we will get to that later...
Quite a few changes to the GUI layout, and it works really well. But we can go further. An issue remains, an issue that is small, but in the long run and with compound interest, it becomes a big source of pain. The problem is that the Tips are still using images, which means they become outdated as we update things. We have retaken all the screenshots many times now over the years. So what can we do about it?

The Simulation


In this case, a GIF is worth 1,000 images, so lets start with that: https://cdn.factorio.com/assets/img/blog/fff-361-tips-110-gif.mp4 What you're seeing is a GIF (technically an .mp4) on a webpage, but we are not putting GIFs in the game. What the GIF shows, is the Tips and Tricks GUI live rendering a real simulation of the entities inside the GUI. This marvel of technology is a divine gift from the very top (kovarex). The simulation widget solves quite a lot of the initial problems with using screenshots/images, but we can go even further. https://cdn.factorio.com/assets/img/blog/fff-361-tips-110-drag-building.mp4 We can use the simulation not just to show a factory environment. Using the Lua scripting, we can create entire scripted scenes and demonstrations. This is much more effective in many cases. For instance seeing the building preview, the mouse movement, and hearing the 'real sounds', makes the tip much more meaningful.

Unifying with mini-tutorials


We are left with another problem, we still have the mini-tutorial GUI. So it is a weird and awkward situation that some things are explained in the Tips GUI, and other things via the mini-tutorials. The mini-tutorial GUI is quite a challenge in itself, and it has a lot of similar problems to the old Tips and Tricks GUI. The mini-tutorial 'images' are just 'related' technology icons, with the 'related items' underneath. The text gives a short description of what you might expect from the tutorial.
It would be pretty nice if the mini-tutorials could have the same sort of features as the tips and tricks, an index, nice big images inticing the players to click the 'Play tutorial' button... etc. So what if, we just somehow put the mini-tutorials in the tips and tricks GUI? It makes a lot of sense, and unifies the communication channel. You know now that if you need help with a topic in the game, there is one place you should look for some guidance, the Tips GUI. The mini-tutorials had some nice features or their own, they would only show if the player had met some requirements, and would be suggested to the player if they performed certain actions. For instance the Train tutorials would only show after you have researched the railway technology. If we unify the two concepts, we can use the unlock and suggestion features for the Tips and tricks. So we combine the functionality of the two systems. Mini-tutorials are still the same, but they are presented inside of a Tip, and we hook in the suggestion and dependency system to the tips. We added a 'Mark as read' button, and Tips will show once the dependencies are read. https://cdn.factorio.com/assets/img/blog/fff-361-hiding-tips.mp4 We see this new unlocking and recommendation system as one of the more important improvements. It means the tips and tricks GUI starts with only the nescessary tips, and as you progress in the game, relevant tips are unlocked and shown to you. This is very similar to the way the game starts with only a few recipes, and the more complex aspects are unlocked over time.

The Tips are moddable!


Once last minor issue with the old tips and tricks, is that they were 'hardcoded' in a sense. They were loaded from a very specific JSON file in the core data directory. That means that it was not possible for mods to add or change any of the tips. It is only natural then with this update and modernization of the tips, that we open up the system to modders. Internally the Tips work like any other prototype, so it is super easy for a mod to add their own entries.

The scope of tips


When adding the new tips, it was tempting to make tips for all of the things. However after some consideration, we decided to not go too far this way. We don't want the tips and tricks to become a 'Factoripedia' or 'In-game wiki'. In general, the items and entities and general mechanics should explain themselves in more direct ways, such as the entity tooltips. What we want, is for the tips and tricks to explain mechanics and topics that are more complex, or hard to explain somewhere else. With that in mind, we decided on a few loose categories:
  • Things that are not related to some specific item, e.g alt info, ghost building.
  • When visual presentation helps a lot, e.g splitters, belt lanes, long handed inserters.
  • When it is something related to a combination of more items, e.g gates over rails, copy-paste stuff.
  • The "tricks" e.g the lab to lab movement, stack transfers, drag building.
Importantly, we should really only explain things that players actually don't get. I have never heard a complaint that someone doesn't understand how solar panels or accumulators work, so putting these into the tips and tricks would be just bloat, even if it technically fits the criteria.

Conclusion


We are quite happy with the result, the tips and tricks GUI was always one of those paradoxical systems that was both extremely useful and terribly ineffective at the same time. We really hope all the effort we have channeled into it will help. Speaking of help, we need your help: What kind of tips would you have found useful when playing the game? Searching TIL on Reddit can be a source of inspiration, but it is still hard to compare the importance of individual independent Reddit posts, and also a lot of them are outdated. So, if you want to give us feedback, the FFF discussion is the best place (yes we do read Reddit).


[ 2020-10-09 06:43:15 CET ] [ Original post ]

Version 1.0.0 released

Features


  • Added Spidertron and Spidertron remote.
  • Added Freeplay crash site.

Graphics


  • Added polluted water visual effect.
  • Added biter base decoratives.
  • New visual effects for the atomic bomb.

Sounds


  • Significantly reduced the volume of robots deconstructing and entity destroyed alert.
  • Reverted mining drill sound to the 0.17 version with high pitched part removed.
  • Reverted inserter, furnace and assembling machine sounds to the 0.17 version.
  • Changed the checkbox click sound (based on dropdown open sound).
  • Changed the "green button sound" to have a normal button sound.

Modding


  • Added EnemySpawnerPrototype and TurretPrototype properties: spawn_decoration and spawn_decoration_on_expansion.
  • EntityPrototype water_reflection can now be defined inside graphics_set.
  • Added ExplosionPrototype properties: Explosion prototype: scale_animation_speed, fade_in_duration, fade_out_duration, scale_in_duration, scale_out_duration, scale_end, scale_increment_per_tick, scale_initial, scale_initial_deviation, scale, and scale_deviation.
  • ParticleSourcePrototype particle is now optional, added smoke property.
  • Added ProjectilePrototype properties: speed_modifier and turning_speed_increases_exponentially_with_projectile_speed.
  • Added LightDefinitionItem::source_orientation_offset.
  • Added DecorativePrototype::decal_overdraw_priority.
  • Added AreaTriggerItem::show_in_tooltip.
  • Added 'set-tile' and 'camera-effect' trigger effects.
  • Added CreateDecorativesTriggerEffectItem properties: apply_projection and spread_evenly.
  • Added CreateExplosionTriggerEffectItem properties: max_movement_distance, inherit_movement_distance_from_projectile and cycle_while_moving.
  • Added DamageTriggerEffectItem properties: vaporize, lower_distance_threshold, upper_distance_threshold, lower_damage_modifier and upper_damage_modifier.
  • Added PlaySoundTriggerEffectItem properties: min_distance, max_distance, volume_modifier, audible_distance_modifier and play_on_target_position.
  • Added ProjectileAttackParameters::projectile_orientation_offset.
  • Added build_blueprint_small, build_blueprint_medium and build_blueprint_large to utility sounds.
  • Renamed build_big utility sound to build_large.

Scripting


  • Added LuaEntity::autopilot_destination, vehicle_automatic_targeting_parameters and time_to_next_effect read/write.
  • Added LuaItemStack::connected_entity read/write.
  • Added LuaEntity::is_entity_with_force, is_entity_with_owner and is_entity_with_health read.
  • Added LuaEntity::spawn_decorations().
  • Added on_cutscene_cancelled, on_player_configured_spider_remote and on_player_used_spider_remote events.
  • Added optional spawn_decorations parameter to LuaGameScript::create_entity.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-08-14 09:12:45 CET ] [ Original post ]

Friday Facts #360 - 1.0 is here!

Read this post on our website. Hello, the atmosphere in the last week was kind of special. We experienced the feeling of the final release being on the horizon many times. And we were shown that it isn't the case time and time again. So it feels very special when it is actually becoming reality. We were trying to be especially careful with any last minute changes to make sure that we don't introduce major bugs into our precious 1.0 release. The image of all the players having the game crash on some simple stupid bug is horrifying.

Thank you


People thanked us on many occasions for the hard work we do. It helped lift our mood in many of the desperate moments, when bugs and problems were piling up and we didn't see the end of the tunnel. We don't say it often enough, but the support from your side has been incredibly helpful throughout the years.
  • We thank all who helped us to save the game before it could even start by supporting the IndieGoGo campaign back in 2013.
  • We are grateful for all of the 18,855 bug reports. They were invaluable feedback that helped us reach our level of game stability.
  • We value almost all of the feedback to our FFF and game releases. A lot of game improvements came out of it.
  • We appreciate the work and creativity that went into creating the 5,603 mods. It certainly extends the potential for a lot of people, and of the ideas became great inspiration for us.
  • All the online videos, articles and streams were immensely helpful to spread the word.
  • We thank all who helped with the Crowdin translations, allowing the game to be played in a lot of different languages without us having to manage it directly.
  • We are grateful that people spontaneously helped to manage the Wiki and created some great tools, like calculators, cheat sheets or blueprint databases.
  • We value the effort put into organising events, like fMMO, Clustorio etc.
  • We appreciate that our community is very civilised, and people who contribute are generally nice to each other, and keeping the criticism on the constructive side.
  • And, lastly, we would like to thank all of you who bought the game, and allowed all of this to happen.

The 1.0.0


It took us 8.5 years. It has been an incredible ride and we have arrived at the destination! Factorio is leaving early access. This opens the game up to all the players who just don't play early access games, the same with reviewers who only cover finished games, which is very understandable. For this special occasion, we created a launch trailer. It tries to capture the story of the development in 45 seconds. [previewyoutube=BqaAjgpsoW8;full][/previewyoutube] Since the main Trailer is kind of timeless, we updated it to the 1.0 state of the game. [previewyoutube=J8SBp4SyvLc;full][/previewyoutube] When we released pretty much all the content in 0.18, there was nothing left for 1.0 other than the formality of "it is complete".The crash site, nuke, alien decoratives and polluted water are awesome, but not too impactful... As a result, we really wanted to add something to make the release special.
  • It is a vehicle that can be driven, or remotely controlled.
  • It can traverse obstacles and small bodies of water.
  • It has a built-in radar, and you can place blueprints in its vicinity.
  • It has an equipment grid, so it can build with construction robots and use combat equipment.
  • It has four rapid-firing rocket launchers that can shoot automatically.
  • It can be researched very late in the game (all science packs except Space).
  • Multiple of them can be deployed at the same time, but each requires its own linked controller.
This all means it can be used as a tank upgrade, a less automated version of artillery, or a builder/repairer. We look forward to seeing what other uses you can invent. We haven't added it earlier as we saw it just as a gimmick without much contribution to the gameplay mechanics. This changed rather recently, when we had the idea of the remote control combined with the equipment grid. So we decided to extend our already crazy todo list, and add it as a last minute bonus.

The plan for 1.1


We were doing the best we could, to fix all the relevant bugs and issues for the 1.0 release, but we just couldn't do everything. So we had to prioritise just the more critical stuff. We would still like to address all of the remaining issues as there are currently around 150 bugs on the forums and around 80 internal tasks to be solved. The plan is to eventually go through all of them, and decide on how to resolve each one. A good example is, that we have a "continue" button, but it just ignores multiplayer. You press continue automatically just to find out, that you are building alone for half an hour. It is my (kovarex) personal story actually. This means, that 1.1 is going to just focus on filling the most obvious gaps in our existing feature set, not on adding some new major content.

Full circle


When we started with the Friday facts, it was at a time when we worked a lot, but if there wasn't any release for a while, people were starting to ask whether the game is still being worked on. So this was our first motivation. Eventually we learned many additional advantages of the blog, other than it being just a dead mans switch.
  • It established the communication channel between us and the community.
  • It started to be an internal every-week milestone to get something into a presentable form.
  • In some cases it even motivated us to add a cool last minute feature to make the topic feel more complete. (This is how the undo and copy-paste feature was created for example)
  • It became a great archive of the evolution of the game throughout the years. Opening old posts is like reading our own diary.
It became an every Friday habit for us and some of our players too, but we believe now is the right time to stop. There will hardly be a better moment to do so. It should be very understandable that we need a break, and we also need the freedom to think about the long term without the obligation to cut it into small chunks for FFF. Since you can't expect weekly posts from now on, we wanted a way for you to be notified once we have something special to say. Feel free to give us your email address so we can let you know. For now please enjoy the game, and well be back!


[ 2020-08-14 09:02:54 CET ] [ Original post ]

Version 0.18.46 released

Graphics


  • Electric mining drill graphics now fill bounding box more accurately.

Bugfixes


  • Fixed hovering over unit that was going toward an entity would crash if the entity was destroyed. more
  • Fixed crashes/desyncs related to various different operations on a shelf of a player that just joined, and his blueprint shelf meta-data hasn't be synchronized yet.
  • Fixed crashes/desyncs related to swapping item with a blueprint/book in the blueprint library that is not yet fully transferred into the game. more
  • Fixed electric mining drill circuit connection graphics.
  • Fixed crash when picking up something using the quickbar while setting up a blueprint from the inventory.
  • Fixed that blueprint book GUI was scrolling to the top whenever something was done. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-08-10 19:11:00 CET ] [ Original post ]

Friday Facts #359 - Crash site: The beginning

Read this post on our website

0.18 mods will be loadable in 1.0 (Klonan)


With 1.0 approaching, we want to ensure that the day of the launch goes as smoothly as possible, and shows the game in the best light. Something that would really work against that would be if the update broke a bunch of mods and disgruntled all of our most dedicated players. So we are making efforts to ensure that mods that work in 0.18, will work without any update needed in 1.0. Theoretically this isn't so difficult, as the 0.18 release structure has meant that mods have maintained compatibility with all the latest changes, and in essence 1.0 will just be a small update of 0.18. However it does take a bit of special handling:
  • 1.0 will allow mods marked for 0.18 to load.
  • The mod portal will show 0.18 mods when browsing in 1.0.
Avoiding breaking mods also means we need to be very careful with changing anything, even something as simple as renaming a sprite can break dozens of mods. I think we never realised how easy it is to break mods before we started this new release structure. Big apologies and big thanks to all the modders who stuck with us through these breakages. We hope that what this effort means, is that on the day of 1.0, players new and old alike can login to the mod portal and have a very large catalog of mods they can enjoy right away, and that the modders can relax and enjoy the game instead of worrying about updating all their work. However, we cannot say 100% that all mods will work, it is possible one of the features in 1.0 (like the new nuke or alien decoratives) will break some mods.

Mining drill redesign revisit (Ernestas, V453000)


In FFF-350 we presented the new electric mining drill graphics, and released them in 0.18.31 shortly after. However, we hadn't realized soon enough that it had some issues... The most obvious one is the tile overlapping. All of our graphics try to find a balance between overlapping the tile a lot to be aesthetically nicer, and not overlapping the tile at all to be technically correct and readable.
With the electric mining drill we got bolder than with other entities, and overlapped the tile more. This problem got massively strengthened by the fact that the mining drill outputs directly to a belt, so it doesn't even have the typical gap where inserters usually are. The secondary but related issue would be that the entity is no longer as recognizable as before. We attribute that mostly to the new height that the drill has, as it gets a bit overcomplicated, and not as clear what the shape of the entity is.
Originally the main reason to add the higher structure was because we wanted to create a much more complicated miner movement (both horizontally and vertically), and to fit pipe connections easily. However the miner movement was too complicated so we didn't do it, and the pipe connections are kind of an edge case. We could have addressed just the issue of overlapping the tile above the mining drill, but that would already cost some amount of time and we felt like we could go one step further.
It was tight in time, which is why we're presenting it now, but we decided to move the whole structure down, so the mining mechanism would move on ground-based rails. After a lot of effort put into moving things, redesigning parts of the drill, and reworking the pipe connections, Ernestas has arrived to the new version.
The electric mining drill is one of few entities that the player sees from the very first stages of the game, all the way to the end. Long story short, it's a really important entity so we wanted to get it right. We were happy with the concept of the mining drill redesign for the "aggressive ground penetration" against the "gentle harvesting" of the original, but we traded away a few of the good parts about the old mining drill graphics, like clarity and identifiability. This revisit tries to fix that, and we believe now it's good. The new mining drill graphics have been released with 0.18.44 (today). As it could break some mods, we wanted to push the new graphics as soon as possible to give mod authors a chance to fix their mods for 1.0.

Technology icons update (Dominik, V453000)


As many graphics have changed over the years, more and more related technology icons became outdated. We didn't have enough time to do a complete rework of the technology icons as we did with the item icons, but we could at least update the clearly outdated ones.

Crash site: The beginning (Ernestas, V453000)


Even though a simple one, Factorio does have a story - An engineer crashes on a planet and through building a complex factory, becomes capable of launching rockets back into space (...or builds the sickest combinator contraption instead). This story is quite well represented - building a crazy factory in the process, ending with an epic rocket launch - except the beginning is not. The player character just appears in the middle of the map with nothing showing where they came from. When we were working on the crash site for the NPE, we created the special assembling machines, a lab, a power generator and chest capsules.
The NPE has been removed, but Albert didn't design just those special ship chunks. The central piece of the composition was always meant to be a large spacecraft - but per usual, we didn't have enough time to finish it, and since it wasn't really gameplay breaking, we released 0.17 without it. Although the NPE was removed and its custom crash site entities remained only for modding and custom scenario use, we would like to finish the main crashed ship. The plan always has been that if we're investing a lot of time into designing the crash site entities, then we better use them for Freeplay as well, as that's the main game mode. Recently Ernestas picked up Albert's 3D model and finished texturing it, bringing it to life, and to the game.
Klonan has also added a short skippable cutscene at the start of Freeplay, where the crash site is revealed. The crashed segments are randomly placed, and there's a little bit of resources to be found in each of the ship segments (the 8 combined iron plates that until now just appeared in your inventory). All of the crash site parts can be mined, but it gives no reward, takes a long time, and the crash site can't be re-built. The crash site is spawned at the start of the game, so it won't show on pre-1.0 maps. The crash site will be released in 1.0, on 14th August 2020 - at 11am Prague time.


[ 2020-08-07 09:30:49 CET ] [ Original post ]

Version 0.18.43 released

Graphics


  • Updated the technology icons.
  • Updated the "Make a copy of blueprint" icon.

Gui


  • Added simple credits gui.
  • Updated the style of progressbar dialogs.
  • Updated the style of map editor.

Changes


  • Changed the default debug settings to only show grid and nothing else.

Bugfixes


  • Fixed that Blueprint books in the library didn't propagate its modded icon backups properly into the game.
  • Fixed that Blueprint books in item form did loose its modded icon backed up state when saved between versions 0.18.37 and 0.18.42
  • Fixed that swapping ghost cursor with an item didn't clear the quickbar selection immediately.
  • Fixed PvP script error when starting a new round with duplicate starting areas. more
  • Fixed PvP scenario not restoring character bonuses after respawn. more
  • Fixed that most of the windows were not squashing as they should when they couldn't fit the screen.
  • Fixed squashing of save name label in the load/save map dialog and load/save map progress windows.
  • Fixed that biters could attack entities beyond their attack range. more
  • Fixed crash when opening train gui through non-locomotive while in map view in latency state. more
  • Fixed that the deconstruction planner was ignoring specified tile filters when removing tile ghosts.
  • Fixed that the deconstruction planner with normal tile setting was ignoring tiles when the selection contained only tile ghosts + tiles.
  • Fixed that the deconstruction planner with tile ghost filter selected didn't select (with whitelist) or ignore (with blacklist) the tile ghosts.
  • Fixed that the deconstruction planner with tiles and rocks only and blacklist always ignored tiles.
  • Fixed lights of entities just outside of right or bottom border of screen were drawn twice sometimes.
  • Fixed drag-placing ghost item in zoomed-to-world view would drag the view instead. more
  • Fixed that barreling recipes were generated for "fluid-unknown".

Scripting


  • Empty LuaPrototype collision masks will now return an empty table, rather than nil.
  • LuaEntity::circuit_connected_entities and LuaEntity::circuit_connection_definitions return data for entity ghosts. more
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-08-06 17:33:13 CET ] [ Original post ]

Version 0.18.42 released

Bugfixes


  • Fixed a crash when holding a blueprint book.
  • Fixed that blueprint book in an item form didn't have mod-persistent icons.
  • Don't drag map when in zoomed in map mode and building blueprints.
  • Don't place map tags when building blueprints.
  • Fixed crash in rendering due to game state being modified by buildability checks for drawing blueprint placement visualization on chunks in fog-of-war when zoomed-to-world.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-08-03 17:52:15 CET ] [ Original post ]

Version 0.18.41 released

Changes


  • The tiles and entities filtering logic in the deconstruction planner is now independent.
  • Selecting first entity filter switches tile mode to never when it has the default normal mode and no filters.

Bugfixes


  • Probably fixed problem with blueprint preview data not being empty when blueprint is empty.
  • Improved layering of rocket in rocket silo, so it occludes inserter hands. more
  • Fixed inventory consistency check failing when loading some saves. more
  • Fixed inventory error messages in god and editor controller. more
  • Fixed smoke might not be spawned from generator entity if its animation was too short. more
  • Fixed underground belts and loaders would not draw half-belt with layers correctly. more
  • Fixed localised strings in text objects created through script rendering API, would be untranslated after saving and loading. more
  • Fixed that right-clicking blueprint book with empty blueprint being selected destroyed the whole book.
  • Fixed that cut and copy created empty blueprint when nothing was selected with alternative selection type.
  • Fixed that the mouse "cross" selection cursor was not present when selection tools from the blueprint library were held in the cursor.
  • Fixed that the latency state of deconstructing using tool from library didn't take the tool settings into consideration.
  • Fixed the alert tooltips showing all surface names in the tooltip when multiple surfaces existed.

Modding


  • Added LuaEntityPrototype::rocket_entity_prototype read.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-08-03 05:59:11 CET ] [ Original post ]

Version 0.18.39 released

Bugfixes


  • Fixed clearing ghost from cursor would not clear quickbar selection. more
  • Fixed blueprint book not shrinking when the last item was destroyed.
  • Fixed crash when Lua received event of player selecting area to deconstruct.
  • Fixed upgrading book by item would not work while being in editor. more
  • Fixed biters not grouping before attacking an artillery outpost. more
  • Fixed crash related to saving blueprint which has all the entities/tiles as question marks.
  • Fixed desync when loading blueprint shelf with modded entities. more
  • Fixed that swapping blueprint cursor into a non transferred blueprint didn't trigger the transfer.
  • Fixed that cycling blueprint book in the shared blueprint library could also cycle the index for other players holding the same book.
  • Fixed that cycling book wouldn't mark blueprint storage to be resaved, so the indexes would be lost if no other changes were done.
  • Fixed a desync when returning to a multiplayer game while the book active index was changed in a different game. more
  • Fixed that the action to put item into a blueprint library was not based on the latency hiding state of held item, which could result into the action doing nothing when the item held was not in the server state yet.
  • Fixed that quickbar links into items contained in blueprint books in the player inventory didn't work.
  • Fixed that it was possible to setup empty blueprint of other player if the original player was still having the quickbar link to it.
  • Fixed that quickbar links did work only for the main inventory of player, so it didn't work for currently equipped armor for example.
  • Fixed that LuaInventory.insert() didn't work properly for blueprint books. more
  • Fixed crash when reassigning blueprint with non-even snap grid size to contain rails. more
  • Fixed crash when holding a blueprint from the blueprint library while being dead. more
  • Fixed that the info for selecting entities to be upgraded was mentioning entities that were marked for deconstruction, even when these are ignored by the upgrade planner.
  • Fixed that ordering deconstruction didn't cancel upgrade order. more
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-08-01 06:43:47 CET ] [ Original post ]

Friday Facts #358 - Alien decoratives Polluted water

Read this post on our website.

Launch party cancelled (Jitka)


The COVID pandemic around the globe is making it really hard to plan any event these days, and we were pretty optimistic just a few weeks back. However the situation here is now changing for the worse it seems. The number of positively tested cases of COVID here in Czech has been increasing in relatively high numbers every day for the past two weeks, and the restrictions are again taking place. In Prague, face masks are required to be worn again where more than 100 people gather indoors, no events over 500 people are permitted as of last week, etc. The current uncertainty together with the fact that at least half of the invited guests will not be able to attend the party (including some members of our own team), have led us into making a tough decision: we have decided to cancel the Factorio 1.0 release party we were intending to throw on 4th September 2020. For those of you who already purchased a ticket(s) - the full ticket price will be refunded. We hope there will be another opportunity to meet you all in the foreseeable future, but for now, please accept our apologies for any inconveniences caused. This wasn't an easy decision for us to make, but we believe it is the right one.

Youtuber/Twitch/Press suggestion (Klonan)


Over the last weeks and months, we have been preparing for the marketing of our 1.0 launch on the 14th of August (just 2 weeks to go now). Part of our plan is going to be sending out some free press keys to Youtubers and streamers and other content creators, in the hopes they will give the game a try, and help spread the word. To prepare, Jitka and I have been doing our research and compiling a list of suitable individuals to send a key to. It is not a shocking fact to find out that Youtube is massive, and I think even if we spent a year everyday going through it, we still wouldn't find 10% of channels that we would like to send a key to. So we decided to start this simple form, that you can use to suggest your favourite Youtubers to us, and help us make sure they don't miss out on the review keys when we are sending them. If you are interested and would like to help us out, you can fill in the form here.

Polluted water (V453000, posila)


As we're done with redesigning graphics for 1.0, we could focus on other graphical improvements. Because we are so close to release, it's a good idea to focus on things that are unlikely to break the game and don't cost too much time, while having as large an impact as possible. One of the biggest themes of the game is pollution. Considering that, it's one of the least visible elements in the game - you can only see it in the map view, and on dying trees. It would be lovely if we could make grass or decoratives die too, but that's something way too technically complicated for now. But one thing that could and does show pollution is water! For a very long time weve had green water tiles in the game and we've used them in campaign missions.

Two water tile types, one or the other. As it's 'just' tiles, it wasn't really feasible to use both of them - because transitions between them would be too abrupt. Not to mention water tiles would have to generate that way, and dynamically change as the map gets more polluted, leading into more technical problems.

Manually placed tiles in map editor. However, since water has been updated to use a shader rather recently (FFF-323), we could make it look polluted dynamically. After some typical posila dark magic of interpolating and converting the pollution values on chunks, we could blend between a primary and secondary tint of water tiles. This way it is also directly tied to the red cloud you can see on the map so it's consistent.
Polluted water slowly spreading. The green water tiles still exist if scenarios want to use them, they just always show as polluted. The pollution effect won't show if the 'Show animated water' setting is off, or if pollution is disabled in the map settings. Mods can also adjust or disable the effect it by changing the secondary water tints in the tile prototypes.

Biter decoratives (Ernestas, V453000, posila)


When the whole family of biters got their redesign, one of the plans for later was to give them their own biome in the world. We had some temporary decal and decoration sprites prepared for a long time now, but somebody needed to add them to map generator. In the end, we didn't want to spend an awful lot of time on tweaking generator properties to place them just right, and also we wanted them to be created under new bases as biters expand, therefore we decided to add special logic to generate them as spawners and turrets are created. If your mod already has its own solution for creep, you can disable base game one by clearing spawn_decoration prototype property on spawners and worms. Our initial naive implementation was placing the decals just randomly, and Ernestas turned the number of the decals created up to 11 to make them cover the ground the way he liked. That in turn made me (posila) unhappy, because in the middle of biter bases there were too many decals overlapping each other, that even your GTX 1080 would take notice of the increased workload, and a laptop with an integrated GPU would fall to its knees. That made me realize that artists probably wished our tile renderer had a texture splatting feature. But I wasn't really ready to change the specification for tile renderer yet again and rework it to add more new features into it this close to the release. We also really didn't want to add an option to disable the rendering of decals as that together with already existing option to disable decoratives would make terrain look completely plain. So instead we changed the decal placement logic use Poisson-disc sampling, which produces points that are randomly placed but somewhat evenly spaced out from each other, and this fixed the excessive overlapping. Once we knew it could actually be generated (including bases created by biter expansions), Ernestas could finalize the graphics. Mucus, mold, eggs, worms, all kinds of bodily fluids and slimes. You can see how this immediately looks much more like a 'nest'.
We decided not to bother with a migration as we need to focus also on other things (like fixing bugs), so existing biter bases on older maps loaded in 1.0 won't have these decoratives. We imagine a lot of people will want to start a fresh map anyway, and it's a nice identifier of a 1.0 map. Both the polluted water and the biter decoratives will be released on 14th August in 1.0.


[ 2020-07-31 11:06:33 CET ] [ Original post ]

Version 0.18.38

Graphics


  • Improved the blueprint grid visualisation, so it shows a rectangle instead of just the corners.
  • Added blueprint grid visualisation when building in the world.

Bugfixes


  • Fixed cleaning ghost cursor. more
  • Fixed crash when clicking a blueprint book upgrade slot with an upgrade planner in hand.
  • Fixed navigating in a blueprint book item when opened directly from a quickbar. more
  • Fixed that it was possible to put book into itself using hand->swap and clean cursor.
  • Fixed that the hand functionality didn't work properly for gun and ammo and gave misleading error messages in some cases.
  • Fixed "slice" property of animation definition was interpreted as dicing parameter, possibly causing large memory allocations. more
  • Fixed that grabbing gun/ammo, swapping it with some other item in the inventory and pressing Q, gave a message of inventory full, instead of the item in cursor not being returnable to the hand location
  • Fixed that Internal inventory stack transfer messages weren't specific enough, or not present at all.

Modding


  • Renamed sprite and animation properties for sprite dicing from "slice", "slice_x" and "slice_y" to "dice", "dice_x" and "dice_y", because "slice" collided with property of rotated animation definition used for defining spritesheet sliced into multiple files. Sprite dicing is a technique of chopping large sprite into smaller ones to improve packing in sprite atlas.

Scripting


  • Fixed a typo (per vs pre) in the on_pre_permission_group_deleted event name.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-07-30 07:16:26 CET ] [ Original post ]

Version 0.18.37 released

Major Features


  • New blueprint library GUI. Its user interface had been aligned with the way inventory works in as many ways as possible. more

Features


  • Added blueprint building from the map view.
  • Blueprints can have snapping dimensions specified. When they are built by dragging, they are only built in the grid relative to where the build started.
  • Blueprints can have absolute map snapping specified, so the blueprints are always aligned to the global grid.
  • Blueprint books can be inserted into blueprint books, cycling through the books works in a hierarchical way.
  • Upgrade planners and deconstruction planners can be inserted into blueprint books and the blueprint library.
  • Blueprint books, upgrade planners and deconstruction planners can now have custom icons specified.
  • All blueprints tools have an editable description.
  • Added Blueprint reassign tool. It allows to set new contents of a blueprint by world selection.
  • All blueprint tools have a copy function.
  • All the blueprint tools are usable directly from the blueprint library.
  • Quickbar links to blueprint tools are persistent when moving them between library shelves and inventories.
  • Most of the blueprint tools manipulation in the blueprint library is part of a multiplayer latency hiding.
  • Icons on the blueprint tools and filters in the upgrade planners/deconstruction planners are preserving the original values so whenever the mods would be re-added, the original values can be restored, unless the player clears the related icons manually.
  • Any blueprint contents that are not available due to mod removal are also kept in the blueprint persistently, so blueprints can be copied and transferred in multiplayer without losing its original data.
  • Added downgrading feature to upgrade planner. It works on blueprints, books and also when applying in the world.
  • Clicking an upgrade planner button in the blueprint or a book now provides a list of all available upgrade planners to be applied.
  • Upgrade planners now also update the relevant icons of blueprints and books.

Minor Features


  • Grabbing an item from a blueprint book has the same hand item functionality as when holding an item from inventory, so it goes back to the original position when clean cursor is triggered.

Gui


  • All the blueprint tools now show all possible actions it can perform in the tooltip.
  • Control settings search now also searches by the currently assigned key-binding.

Optimizations


  • Decreased the header size of blueprint-storage and of individual blueprints with backed up modded entities, as only the id mapping relevant to the blueprints (and whole storage) is now saved.

Bugfixes


  • Fixed that exporting blueprint didn't include the unconfirmed blueprint changes into the exported string.
  • Fixed blueprint preview icons rendering scale when blueprint was held in cursor.
  • Fixed that blueprint was not detecting modded data to be lost when loading unless one of the top level entities or tiles were to be lost. This means, that a blueprint with vanilla constant combinator (for example) with a modded signal will no longer silently lose the modded signals on resaving the blueprint storage when the mod is not currently active.
  • Fixed that biters when faced with a rock might get stuck in an infinite pathfinding loop. more
  • Fixed that clicking a technology in the research queue, holding the mouse down and moving it over the cancel button would make the cancel button flicker. more
  • Fixed slider tooltip would show old value. more
  • Fixed terrain particles would be spawned when walking over belts. more
  • Fixed player movement on belts in latency state was not exactly matched with the real game state logic. more
  • Fixed that the set-request GUI didn't respect the show-all-items setting. more
  • Fixed that burner assembling machines could cause inserters to get stuck holding extra fuel in some cases. more
  • Fixed noise.terrace function did not assert that constant parameters are constant.
  • Fixed that item durability tooltips used the wrong locale key in some places. more
  • Fixed that upgrading inserters in blueprints wouldn't preserve modded pickup/drop locations. more
  • Fixed that exporting empty blueprint books didn't work correctly. more
  • Fixed that the mods GUI didn't have any mod selection by default. more
  • Fixed that positions of entities in blueprint string were not properly fixed to be aligned to grid according to our rules and centered.
  • Fixed a crash when mods destroy the character entity during the on_gui_closed event. more
  • Fixed a crash when canceling loading some modded saves. more
  • Fixed that artillery turrets didn't fully use the shooting speed research. more
  • Reduced flicker of mining drill indicator lights when zoomed out. more
  • Fixed lua documentation for LuaGuiElement::index read. more
  • Fixed that biters would try to attack over large distances individually instead of in groups. more
  • Map tag edit GUI can now be confirmed with Enter key even when the textbox is not focused. more
  • Fixed a pathfinder crash related to entities and tiles using collision layers 11 to 15. more
  • Fixed the changelog GUI indentation.

Modding


  • Implemented compileIntoCurrentProcedure for the "if-else-chain" noise expression type. This allows non-constant values to be used as conditions.
  • Added "modulo", "ceil" and "floor" noise expression types.
  • Added "bitwise-and", "bitwise-or", "bitwise-xor" and "bitwise-not" noise expression types.
  • Added "sin", "atan2" and "cos" noise expression types.
  • Added "less-than", "less-or-equal" and "equals" noise expression types.
  • Changed turret base_picture animation to actually play the animation.
  • Added several properties to ExplosionPrototype to control light fading through applying a multiplier to the light's size and intensity. "light_intensity_factor_initial" (default 0), "light_intensity_factor_final" (default 0), "light_intensity_peak_start_progress" (default 0), "light_intensity_peak_end_progress" (default 0.9), "light_size_factor_initial" (default 0.05), "light_size_factor_final" (default 0.1), "light_size_peak_start_progress" (default 0.1), "light_size_peak_end_progress" (default 0.5)

Scripting


  • Added permission events: on_permission_group_edited, on_pre_permission_string_imported, on_permission_string_imported, on_per_permission_group_deleted, on_permission_group_deleted, and on_permission_group_added.
  • Simplified the rules of entity positions aligned to grid in the blueprint. Now they have the same rules as entities in the world.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-07-29 15:49:46 CET ] [ Original post ]

Friday Facts #357 - Nuke

Read this post on our website.

Blueprint library finishing touches (kovarex)


At the time of writing the Friday Facts last week, not all of the planned changes were finished, here is the finalisation, so here we go.

Persistent library contents


The problem is old. You play a modded game and have your blueprints in the library. Then, you decide to put the mods aside for a reason (to join a MP game, or just try a different modset). At that moment, if we didn't handle it in a special way, all your mod-related content in your blueprint library would be removed. We solved the main part of the problem already quite some time ago. But with the upcoming support of other tools in the blueprint library it had to be extended. Special system was created for these things:
  • The preview icons of the blueprint tools
  • The filters of the deconstruction planner
  • The upgrade specification of the upgrade planner
If the related ID isn't available any more while loading a game. Instead of just plainly removing it, it is marked as unknown and the original textual representation of the ID is stored in a special way. The tool can still be normally used. Clearing the "unknowns" removes the information about the slot for good, but if you don't clear them it stays there.


Once you load the appropriate mods again, the IDs are restored.

Upgrades


The UX of upgrading blueprints/books with the upgrade planner was meant to be provisional, but somehow, it remained in use for quite some time. Currently, the only way to use it is to click the button with an upgrade planner in your cursor, which is sometimes quite annoying, as you don't even have access to your inventory or Blueprint library when you want to click the button, so you have to close the window, find the upgrade planner you want to use, open the window with the upgrade planner already in cursor, and then use it. So this window was created. When you click the upgrade window, the game searches all the upgrade planners available to you (inventory and blueprint library) and lets you select which one to apply, and always offering the default upgrade planner.
As you probably noticed from the picture, I couldn't restrain myself from adding a little feature. Upgrade planners can be now used both ways: as upgrade with left click and downgrade with right click. It obviously works also when upgrading in the world. The problem is, that you can already do 3 different kind of things with the tool, and there are generally quite a lot of people that don't know about basic things you can do, like cancelling a deconstruction orders or force-building a blueprint. Because of that, we added instructions to every tool so the users won't miss it.

Snapping


This is a great example of a feature, that I expected to be done quickly and easily... but you know how it goes. The first problem is related to build and drag. Most of the blueprints don't work that well when you just build and drag them. https://cdn.factorio.com/assets/img/blog/fff-357-dragging-blueprint.mp4 The second problem is that blueprints are often designed to work in a grid, but there is no way to enforce it. Either you have to build slowly and cautiously, or you misclick often. And with the new feature of building in map, the problem was just elevated. This is what the second checkbox is for, it forces the blueprint to be built in a grid aligned to the map center. To ensure, that the user can configure individual blueprints in a way that they would match perfectly, the relative position of the blueprint to the grid can be configured by moving the red flag.
https://cdn.factorio.com/assets/img/blog/fff-357-blueprint-snapping.mp4 Thanks to Boskid, our beloved tester, a big pile of bugs had been already identified and fixed, so there is a chance of the BP library being released next week.

Story of the nuke (Dominik, Posila, Ernestas, V453000)


Since more than a year ago Dominik has been updating and improving all kinds of visual effects in the game - particles, splashes, explosions and so on. During most of the time weve also been getting valid questions - "But what about the nuke?".
It was the plan from the start that the explosion of the atomic bomb would come last. Not because its the lowest priority, quite the opposite - however its also by far the most challenging effect to create, both on the technical and graphical side, so we kept improving how particles/explosions work, and experimenting with graphics for effects - essentially practicing and preparing ground for the nuke. The most major challenge visually is the sheer size of the explosion. Normal explosions already benefited greatly from more flexible and various scorch marks and particles, and improving the explosion sprites themselves, but thats not enough here. The atomic bomb has such a giant explosion radius that we simply cannot (mostly because of VRAM requirements) create an explosion sprite that would cover all of it. https://cdn.factorio.com/assets/img/blog/fff-357-explosion-solo.mp4 Weve tried to make an explosion as large as we could fit in a reasonable spritesheet, and limit its frame count as much as we could as well. Just like we did in the old days when VRAM was much more of a concern. This mushroom cloud does not cover nearly enough though, so for sure some part of the effect needs to be procedural. The VRAM is not the only problem though, the biggest challenge for the visuals is yet again the perspective of square tiles, where visually the game looks like the player is viewing it at 45 angle, but everything is presented as if viewed top down. Both of these things are intentional and graphics get the shorter end of the stick when it comes to compensating for this dichotomy (FFF-133). After discussing many really different approaches we could take, we decided to create a combination of a central spritesheet, with a shockwave of smokes being moved outward from the center. https://cdn.factorio.com/assets/img/blog/fff-357-circular-damage.mp4 We tried to make graphics hide this perspective problem as always, and made the explosion move slower vertically, resulting in a visually correct ellipse. As you can see in the animation above, this exposes the problem of entities dying in the vertical direction before the waves get to them. So we made the damage apply slower in the vertical direction as well. This does mean you can minmax and run away vertically when shooting the atomic bomb under your feet and you will have a better chance of survival, but that shouldnt be too much of an issue Weve also added a secondary damage radius, so its more forgiving if youre just barely getting hit while running away. https://cdn.factorio.com/assets/img/blog/fff-357-random-improved.mp4 For further improvement, weve added a ton of random elements to how the particles move and when they disappear which again makes the edge of the explosion less obvious, but also helps diminish the crescent-like shapes at the end. The explosion is so large that even creating a scorch mark of an appropriate size for it is a problem, so Ernestas created a scorch mark as big as we could afford, and added a whole new tileset to the ground zero, with decoratives to smooth the edges out a bit.
The atomic explosion also destroys everything in a small radius at the center (killed entities dont spawn corpses, decoratives are destroyed and cliffs disappear), which makes the explosion feel a lot more powerful and impactful.The nuclear tiles remain there forever and are visible from the map view as they have their own map colour, though you can place concrete over them to hide the evidence of your actions. https://cdn.factorio.com/assets/img/blog/fff-357-final-nuke.mp4 To complete the effect, weve added a brief overbright of the whole screen based on how far the players screen is from the explosion, and added sound effects which also react to distance from the explosion. You will be able to enjoy becoming death, the destroyers of worlds, in the new fashion on 14th August, in 1.0.


[ 2020-07-24 10:06:10 CET ] [ Original post ]

Friday Facts #356 - Blueprint library for real

Read this post on our website.

kovarex - the story of motivation


This wall of text is about my personal struggle with Factorio and life, feel free to skip to the next subject if you wish to see the actual Factorio content. Since two years ago, I started to have these problems, it was harder and harder to force myself to work on the game and I didn't enjoy it that much. So I was looking for a way to have a break. I know exactly when I disappeared from the Factorio development, it was August 26, 2019, the release date of World of Warcraft classic. The planned 3 weeks of playing kind of extended to be more like 3 months. One of the big reasons was, that I already had 60 level priest when I realized that tanks are so hard to come by, so I re-rolled a tank learned how to play it and levelled it to 60. It was a great fun to finish all the dungeon content and acquire the pre-bis (pre raid best in slot). This all just to find out tanks are far from a hot commodity when it comes to raiding, where you need just a few in the 40 people raid. At this point, I thought, that I would come back to work with full power, but I just couldn't. When I tried to work, I had this strong, almost physical feeling of disgust, that was impossible to overcome. It was clear to me at this point, this is the the typical burnout situation. It is far from surprising after that many years of working that hard. The attempts to get to work were mainly motivated by guilt, and I knew well, that it is hardly a good motivation for anything. Trying to overcome it by sheer willpower would just make it worse, so I just stayed distant. The team was still working on its own and making good progress, so I was taking advantage of it and continued to have a break and spent more time with my family and on leisure activities. As the situation was not getting that much better, there were even proposals of selling the company and getting rid of the responsibility for good. For most people, this would sound like a rational choice, but I was far from open to doing that. I generally don't like to do something just because it is the norm. The norm is to try to always keep growing exponentially, getting investors, expanding, getting more people, never stopping, never resting until you are the biggest and most horrible company, or you die trying. This approach dictates, that once you can't expand the enterprise, you need to sell it so others can grow it. And I don't like it. I didn't forget at all why we started working on this game. We wanted to make the game(s) that we couldn't find, and we wanted to have fun doing so. We wanted the game to be primarily fun for us, not for a focus group that has the most financial potential. So, even if we faced the hypothetical decision : Either we sell it to a big publisher, or we shutdown the studio, I choose the latter, because you can't put a price tag on the fact, that we still own the game. In the latter case, we could come back to it any time when we feel like the time is right, instead of having to watch it being milked as micro transaction filled cashgrab by some company. So, this was my lowest point personally I was generally not feeling well, and was lost in searching for purpose. One of the biggest reasons that I didn't feel well was, that I was becoming more and more lazy. When you don't have to overcome daily obstacles and annoyances, you become more and more lazy, until even the most basic things start to be huge pain in the ass, and you don't generally feel well, this is where I was. In the meantime, I was occasionally playing some simple games with my 4.5 year old son (Earn to die and Into space 2). I was trying to find some nice cool games that we could play together, but I didn't find anything, feel free to give me suggestions in the comments. So I figured, that he could actually try to play Factorio. I started a peaceful game for him, showed him how to move around, mine and craft basic stuff, and let him play. He was just running around and having a blast that he can mine trees and explore. Some other day, I joined the game, and built some small factory so basic technologies are unlocked and he could play around with that. Eventually he set himself a project to create a wall around the entire factory. He was focused and he kept at it, and 3 days later he came at me, and showed it to me, and he was so proud. Some time later, he played alone for a while, and than he showed me some very basic mining/smelting setups. It was very weird, but it worked. This is when I realised how great Factorio is for children, you can scale the skillset from very very basic up to almost infinity. He can't read, he didn't know numbers greater than 4, and yet he managed to play, and in a few days, he kind of recognized numbers up to 10 without even realizing. When I showed him how construction robots and personal requests work, he was super enthusiastic and talked about construction robots to everyone he met :). Once he asked me "Father, what is this thing in the list of things I can order?" ... "This is atomic bomb" .. "Oh, I want to order it" .. "No, we don't even have it researched" .. "But, why is it in the list then, it doesn't make sense" ... "Hmm, you are right, it doesn't, I might actually fix that." So I opened Factorio source code after a long time, and made the change, that the filter and logistic request selections didn't contained things yet to be researched (unless you force-unlock it in the settings). I made a change to Factorio, and it felt good, and I started to want more, this is how I got from the lowest point. I wasn't yet prepared for big projects mentally, so I did few other small tweaks, and I started to visit the office occasionally, which gave me more and more energy, I was not working because of guilt, I was working because of joy again. This is when I decided to face the big elephant in the room: the blueprint library. I was scared to approach such a big project in my previous state, but now I felt brave enough. I started working on it and I was able to work in full-power mode again, the work went forward fast. I had to overcome a lot of annoying obstacles on the way, which had positive effect on my overall laziness very fast. As the new BP library started to shape up, I started to feel something almost forgotten, I was proud of what I was doing, yay :)

The story of the Blueprint


The story of blueprint and the blueprint library development is quite long and convoluted, we mentioned it in 12 FFF already and it wasn't always quite right. But I believe, that we are getting to the final stage with the current rework. Small tweaks and improvements can be always done, but the general feeling is like "Yea, this works, finally".

First mention


The first mention of a blueprint (apart the blueprinting mod) was in FFF-16, 6 and half years ago!

First blueprint implementation (0.9)


Blueprints were obviously a great upgrade when you compare it to the state of just not having them. But everything was very plain and primitive from today's perspective. You had to actually craft the blueprint (for one advanced circuit) and the setup window was not the greatest:
Note that the confirm button was the blueprint button. The exact example of us doing GUI in the logical way but not an intuitive way.There was no way to change the blueprint once it was set up, you could only clear it (for the price of one electronic circuit).

First improvement of the blueprint management (0.13)


Blueprints started to be important, so we added some very basic way to edit them and a way to include tiles and modules. (FFF-131)
Also, the blueprint book was introduced (FFF-108, it cost 15 advanced circuits and could hold only blueprints directly.

First plan of blueprint library (0.15)


The fact, that you didn't have a way to backup your blueprints and you would just plainly loose them when you died, or moved to a different game was quite harsh, so we started to work on the blueprint library. Our first mention of it was in the FFF-156.

First implementation (0.15)


The first implementation was pretty rough and first shown in the FFF-161
Note, that the play button was the way to export the blueprint into your game as an item, so you can put it into your inventory and use it.

First redesign


We, mainly Oxyd (FFF-170), quickly realized that this needs to be more intuitive, so the way it was exported was streamlined, you just drag and drop into your inventory. https://cdn.factorio.com/assets/img/blog/fff-170-drag.gif Another way of exporting was done secretly: When you held a blueprint record while closing the library window. It was seemingly useful as you could just grab it from the library and build, but once you were done and pressed Q to clean the cursor, the item was just spilled into your inventory. It was common at these times, that your inventory was slowly getting cluttered with random blueprints and you had to do a cleanup from time to time. The Blueprint editing window was also improved:

0.16 Blueprint preview was updated


It was "only" about connecting the belt/pipe/wall entities, but it added a lot to the understandability (FFF-211).

The endless discussion phase


We knew there were still a lot of problems with the blueprint library and we were desperately trying to figure out how to solve them in various different crazy ways (FFF-249). But a week later, we agreed on a relatively simple solution (FFF-250 and FFF-255): From the player perspective, blueprints are always just items,and blueprint library is just something like a persistent chest. Quickbar, movements, stack transfers, everything works exactly like with items, and the BP library technical magic is done under the hood. After some time (32 weeks actually), we presented a UI mockup for the planned blueprint library FFF-282.This was the big plan, but since 0.17 release was approaching and there were just too many other things to do, we postponed it.

0.17 release - More tools


In this version we added a lot of tools:
  • Upgrade planner
  • Copy/cut paste (with history)
  • Undo
And we also extended the amount of things blueprint can handle -mainly trains (FFF-263):
We just made a few small tweaks for 0,17, to make the usage of blueprints less of a pain, mainly the ability to make a quickbar reference directly to the blueprint library. Using it created a new item that is copy of the BP library record, so you can build from it and pressing Q to clean the cursor just deleted the blueprint instead of cluttering the inventory. But blueprint library still didn't get any real improvement.

Current blueprint library


In 0.18 release, I improved the blueprint setup window so it matches our new GUI style:
But the blueprint library still didn't get any real improvement.

New blueprint library


So, if this buildup led to nothing, it would be pretty lame so as you would expect the blueprint library is now finally getting a real improvement.

1) The looks


It looks nice now and mainly fits the style of the rest of the game:

2) The manipulation


As it was agreed 2 years ago (fuck), the blueprints in the blueprint library are manipulated as items in every way. Twinsen forced me to agree on this way, and I wasn't that convinced at that time, but when I started to implement it, it was instantly clear, that this is way better than any other proposal. You don't have to learn anything new and just manipulate the objects exactly the same way you are used to and it just feels right. There is quite something happening in the background when transferring Blueprints, as they are still very different types of objects in the inventory and in the blueprint library, but the user is now completely shielded from this.

3) The unification


All the related UI was unified to look the same, in current version for example, opening a blueprint book as an item looks very different compared to opening it in the blueprint library, and it even has different features.

4) The identification


Now we get to the new features, first of all, every blueprint tool has editable name, description and icons.For Blueprint book, upgrade planner and deconstruction planner, these icons are optional, but overwrite the dynamic icons shown for them. This might be mainly useful for books that you want to just have the same preview regardless of currently selected blueprint. When the names and descriptions become more important to the user, he can switch to the list view.
Small thing that helps is that the upgrade planner now updates also related icons of the blueprints and books https://cdn.factorio.com/assets/img/blog/fff-356-upgrade-book.mp4

5) The books in books


It is something we wanted for a long time, and it was highly requested, so now, it is possible. The maximum depth is set to 6, mainly to prevent the UI from getting out of hand.
It is just logical, that iterating through the book contents works hierarchically now: https://cdn.factorio.com/assets/img/blog/fff-356-hierarchal-scrolling.mp4

6) The tools in books and library


Since both the upgrade planner and the deconstruction planner are also kind of virtual and configurable, it just makes sense to allow them in books and the blueprint library. The preview of the book is changing when you switch between different types of objects. https://cdn.factorio.com/assets/img/blog/fff-356-tools-in-books.mp4

7) The copy


Since blueprint manipulation is now always moving the blueprint around, never making a copy (apart the export-import workaround), we really needed this feature to make an explicit copy. The nice touch is that the copy is made based on the current unconfirmed edit of the blueprint, so you can make slightly modified versions of it quite fast. https://cdn.factorio.com/assets/img/blog/fff-356-copy.mp4

8) The reassign


My personally most wanted feature. You can change the contents of the blueprints while the name, description, icons, quickbar links and positioning is preserved. https://cdn.factorio.com/assets/img/blog/fff-356-reassign.mp4

Building in map


Rseding had a great timing with his feature of building blueprints directly in the game map. https://cdn.factorio.com/assets/img/blog/fff-356-blueprint-in-map.mp4 These changes are being finalised and tested, so they should be available in the upcoming weeks just in time before 1.0.


[ 2020-07-17 22:10:54 CET ] [ Original post ]

Version 0.18.36 released

Gui


  • New high resolution tips and tricks images.
  • Visual improvements to the tips and tricks GUI and the rocket silo stats GUI.

Graphics


  • New remnants for assembling machines and land mine.
  • New visual effects for slowdown capsule.

Changes


  • Changed sorting order of items: Same items but without data are first. Descending order of Health/Ammo/Durability.
  • Units are now affected by the 'movement_slow_down_factor' defined in their attack parameters.
  • Slowdown capsules slowdown factor increased from 50% to 75%.

Sounds


  • Updated sounds for assembling machines 1, 2, and 3.
  • New sounds for mining and eating fish.
  • New sound for spitter spawner, repairing robots.
  • New sound for throwing capsules, grenades, combat robots.
  • Various levels adjusted including new default sound settings.

Bugfixes


  • Fixed that force.reset() wouldn't clear saved research progress. more
  • Fixed disabling, renaming or destroying unreachable train stop would not cause repath of trains in NO_PATH to go to next station.
  • Fixed bonuses GUI showing duplicate entries if it was open when a research finished. more
  • Fixed auto-launch would send rocket when there were still empty slots for payload. more
  • Fixed corruption related to sorting module inventories.
  • Fixed logistic robots would keep trying to feed chest which has item stacks over the stack size. more
  • Fixed entities with wire rendering disabled in entity prototype would still have wires rendered in screenshots. more
  • Fixed upgrading mining drill would disable input fluid box if resource was depleted. more
  • Fixed pause game control input was not working when in multiplayer. more
  • Fixed that the RCON interface would sometimes send an extra empty reply. more
  • Fixed that groups of enemies wouldn't be distracted by a player in a car or tank. more
  • Fixed tank icon having accidental border. more

Optimizations


  • Improved performance of sorting inventories.
  • Improved performance of inventory highlights.

Scripting


  • Added on_player_flushed_fluid event.
  • Added LuaPlayer::hand_location. more
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-07-15 13:32:08 CET ] [ Original post ]

Friday Facts #355 - High resolution updates

Read this post on our website. We've been updating, reworking and redesigning many graphics, and the majority of entities have had high resolution for a while now. With 1.0 we're trying to be as "complete" as feasible.

Slowdown effect


As one of the less used items in the game, the slowdown capsule got kind of forgotten. The slowdown capsule has multiple parts - the item icon, the effect, and the animated sticker that shows on slowed enemies. We've already updated the item icon which sets some expectation for the effect and sticker, like what color should it have. The poison capsule has already taken blue, and green or brown would be very similar to rocket or nuclear fuel in the icon, so we chose orange. https://cdn.factorio.com/assets/img/blog/fff-355-slowdown-sticker.mp4 It makes a lot of sense to also use the same graphics with different tints for the acid sticker from spitters/worms. https://cdn.factorio.com/assets/img/blog/fff-355-acid-sticker.mp4 In a way the slowdown capsule is doing the same to them, as they are doing to you, except the acid damage. Take that, nature.

Crude oil resource


Resources got high resolution sprites for 0.15, but we didn't have time for the crude oil spills. The new ones are very similar.

Assembling machine remnants


We've been waiting with remnants for assembling machines as they were planned to get a redesign. It doesn't seem likely we'll be able to finish the assembling machine redesign before 1.0, so we've finally given them their own specific remnants at least.

Land mine remnants


The last missing remnant was the land mine, which didn't have high resolution until the icon update, so here it is.

Conclusion


With version 0.15.0 we released the first batch of high resolution graphics for many entities. In FFF-187 which announced 0.15.0 experimental and presented all of the new graphics, we stated:
    "During 0.15 stabilization we will be adding more high resolution graphics, with the aim to do everything. Let's see how that goes, but seeing what we already have, we are confident we can get it done sooner or later."
You as readers of this periodical might have already heard the "stuff takes longer than expected" a few times, so "the sooner or later" is now, 3.5 years from then. There are still more graphical updates coming in the following few weeks, but this is it for the high resolution updates.


[ 2020-07-10 10:31:02 CET ] [ Original post ]

Version 0.18.35 released

Graphics


  • High resolution power switch graphics.

Bugfixes


  • Entities of other forces that are mined and brought back by undo are now set to have player force upon the undo application. more
  • Fixed a desync when unit group radius settings are changed.
  • Fixed that the final health value in the entity damaged event was wrong. more
  • Fixed a performance problem with the production stats GUI. more
  • Fixed the double slider with discrete values functionality. more
  • Fix 'Train stop names' checkbox showing tooltip with no locale entry. more
  • Fixed rendering of pipe pictures and covers when fluid box compound covers some fluid boxes without pipe pictures or covers. more

Gui


  • Visual improvements to the bonuses GUI.
  • Visual improvements to the tutorial list GUI.

Minor Features


  • Gps tags are now surface aware.

Scripting


  • Added on_player_clicked_gps_tag event.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-07-06 13:21:16 CET ] [ Original post ]

Friday Facts #354 - Launch party and HR power switch

Read this post on our website.

The launch party (Klonan)


To celebrate the launch of the game later this summer (only 6 more FFFs to go!), we have decided to throw a party! It is going to be at the same venue as our 1 million sale party (FFF-192). It will take place on Friday the 4th of September, 2020, at lut Lzn here in Prague. We are inviting a lot of people to the party, such as other Czech game developers, Youtubers, and of course we will be there. As we want you (the fans) to be able to come, we have some tickets for sale. The reason to sell them, rather than give them away, is so that we don't have 'messers' saying they will come when they don't intend to. You can buy a ticket here. While the COVID-19 pandemic might be 'over' here in Czechia (Czechs hold 'farewell party' for pandemic), the reality is, the situation could change with great speed. It is likely many won't be able to come due to travel restrictions, or we may even need to cancel the event. Please keep this in mind while you are considering whether to come. We hope everything lines up in our favour, and we look forwarding to meeting you.

High resolution power switch (V453000, Dom)


One of the leftover entities that didnt get the love of a high resolution update yet is the power switch. It has waited this long mostly because we werent sure about its design and because it is not a very frequently used entity. However, after all this time we dont have better ideas for the design, so we dont want to change it significantly. And of course we have other higher priority things on our plate now, so reworking an infrequently used entity doesnt sound too pragmatic. Other than that, the 3D source file is a mess, unsurprisingly as its the first thing (FFF-102) I worked on for Factorio. Back then I was trying to create a texture painting system where we could paint RGB masks instead of grayscale ones, to control multiple channels at the same time.
Not only was this not as useful as I had thought (it was more efficient for me to just get used to switching between textures), but unfortunately this also caused something in Blender to go wrong, and the scene crashes frequently. Luckily I was able to combine forces between Blender 2.8 where I could actually paint textures but couldnt render, and 2.79 where I could render but not paint. If youve been even remotely following the development of Blender, your first question is probably why are we not using 2.8 as its been out for quite a while now.
Our workflow is quite specific and the early versions of 2.8 simply didnt support all of the obscure features that we use. On top of it all, we have a lot of tools and scripts that would probably break in 2.8, and eventually it got so late in our development cycle that we couldnt just afford to be insecure about our software, when 2.8 introduces all kinds of new changes. Were very much looking forward to switching to 2.8 after 1.0.
Here we have a high resolution version of the power switch, including a destroyed version from our remnant specialist Dominik.By the way, the power switch was actually one of the first entities we had high resolution sprites for. I had prepared them shortly after finishing the power switch years ago. However the way we create high resolution entities was only really established a while after that, so it wouldnt fit today any more. We plan to release the updated power switch next week.


[ 2020-07-03 10:32:09 CET ] [ Original post ]

Friday Facts #353 - Trailer update

Read this post on our website

Locale plan update (Klonan)


Earlier this week I received the English proofreadings from Altagram, and overall I integrated over 500 suggestions into the game. Most were small, such as replacing "can't" with "cannot", things like that. It was the exact sort of external scrutiny we really needed, as it showed some areas where we were quite inconsistent. It feels like things are in a better place now, even if the majority of changes are relatively unnoticeable. However it was very noticeable to our great community translators on Crowdin. When we update the English strings, the translations have to be updated on Crowdin. For the last few days I've been working through the issues raised on Crowdin, and there was a lot of good input on that last 1% of the changes. So this concludes the 'English proofreading' phase. Starting on Monday, Altagram will start proofreading the target languages, and filling in any missing strings where needed. This should take about 3 weeks. Since Altagram has their own translation system for their team, it isn't really feasible to include Crowdin in this part of the work, they will just take the content from Crowdin at the start of the process, and after 3 weeks, push what they have back to Crowdin. So any translation work by volunteers on Crowdin for these 3 weeks would be wasted. So we ask that, if you want to volunteer your time, save it for a little while. Any work done on Crowdin this weekend will be included. We deliberately made this buffer between the English corrections and the Target proofreading so that the players on Crowdin have an opportunity to contribute before Altagram starts. After Altagram has pushed their corrections back to Crowdin, we will start the 'Community review' part of the process. This is when the work that Altagram's team has done is reviewed by players and feedback is given to Altagram via Crowdin issues. This helps us make sure the terms of the translations are consistent with the established community usage, and ensure there are no contextual issues or misunderstandings.

The plan for trailers (V453000)


Rather recently weve started working on trailers, and first of all we needed to decide what exactly we want to do with them.The goal is that we will have the main trailer updated to the latest graphics, as all of it is rendered by a Lua script. It of course wont be absolutely the same, since many things have changed or have been added, but we are going to try to match it as close as possible as we are very happy with this iconic trailer. We are very happy with the other one as well, but we wont update the Gameplay trailer, at least not for now. This has multiple reasons - mainly that its created entirely by manual screen recording which is a lot more work to try to replicate, and the gameplay message of it is still relevant today. Its not helping that if we were to revisit this trailer, wed like to make some changes/additions to the voiceover, which would mean creating a completely new voiceover, as added parts would just not feel perfectly integrated. Long story short, were aiming to prepare a new third trailer dedicated to releasing 1.0 instead. We believe a special 1.0 Launch trailer will have more impact than just refurbishing the existing gameplay trailer, as it is more interesting to provide something fresh, tailored specifically for its use case. Last but not least, the release of 1.0 is a big milestone and we find it appropriate to give it its own trailer.

1.0 Launch trailer preparations (V453000)


Of course Im not going to spoil all the details of what is actually going to be in the new trailer, but there is one specific section I have so many feelings about, its irresistible not to share them. Factorio is much more than just the result product. Its been a journey, and a very unique one. I think the process of how Factorio has been created is so important to the result, that its worth giving it a special place in the new trailer. More specifically, this will be done by a series of clips, ranging from Factorio 0.1, transitioning all the way to 1.0, showing how Factorio evolved over the years. There isnt enough time to go through all of the major versions as the trailer is going to be rather short, so I reduced the selection to versions:
  • 0.1 as "the original idea";
  • 0.6 as "the prototype" (0.7.0 was released with FFF#1);
  • 0.12 as "the early access game" (stable 0.12 was the first version on Steam Early Access);
  • 0.18/1.0 as "the version for launch".
It is technically possible to load a savegame from 0.1 in 0.18 if you go through the necessary middle-version steps. So I just started casually playing version 0.1, imagining Id just continue it in 0.6, build a bit there, then jump to 0.12, and so on... Note: none of the images below are final, as the trailer is being worked on.
A random factory being built in 0.1 When I had a small factory built I started to wonder how do I actually bring this to 0.6... As always, its not that simple. While technically working, loading obviously does not handle all of the changes to the game, like map generation, entity sizes, or recipes...
A random factory being built in 0.6 I didnt even bother trying to migrate after realizing that this would mean Id have to show 0.18 with 0.1 map generation, and just tried to build a new factory in 0.6 and then again a new one in 0.12. This seemed like a reasonable approach as each of the versions works quite significantly differently, so the resulting factories should also be different, right?
A random factory being built in 0.12 Not so much. Since the trailer is short and quick, its absolutely critical to minimize confusion as much as possible. This is why after a few days I restarted it all, and started by designing the final clip in 0.18, and going backwards, with the aim to have the factories look very similar. Of course newer save games cant be loaded in older versions of the game, so I just had to take a screenshot of a factory with a grid, and try to replicate it in the older version by hand. Having played each of the versions earlier at least gave me a good overview of the differences between versions and made it easier to realize what should be highlighted in each.
A concept of a factory for the trailer in 0.18 When I create factories for screenshots (like FFF), I almost always use the /editor as things can be done very quickly that way. It wasnt necessarily a surprise that 0.12 did not have the same editor as 0.18 does, but I was completely shocked actually experiencing the differences.
A concept of a factory for the trailer in 0.12 For example, console commands could not be run in the map editor, entities would get removed by X instead of normal clicking, blueprints would not place real entities, the game could not be unpaused in map editor (making placing items on belts almost impossible), and so on. And it wasnt just the map editor, having gotten used to Cut/Copy/Paste, pipette and Shift+R and so on, the game suddenly felt extremely clunky to use and everything took much longer than it normally takes. I placed in map editor what I could, and after that put a lot of items in chests to build more, and spent some time playing the factory, making science and generally making the factory run in order to have things move in the final video.
A concept of a factory for the trailer in 0.6 The process was getting progressively more difficult with 0.6 and 0.1, some things making me actually laugh instead of cry, or both. Im not going to paste our complete changelog from the last 8 years, but Ill just point out a few things that really stood out.
  • The old quickbar was so confusing, I could never find things in my inventory, because they were hiding in the quickbar.
  • Technologies did not guarantee that if you unlock something, you are able to craft it. No technology tree view without a search function made this even harder to find something.
  • Hand-crafting did not automatically craft intermediate ingredients in 0.1, making crafting feel a lot worse.
  • In 0.6, trains had to be connected by the "Connect rolling stock" hotkey after being built. I never knew this was the original purpose of that hotkey.
  • When taking an entity in your cursor, it automatically rotated to be facing towards you (just like in minecraft) in 0.1... in a 2D game it does not make nearly as much sense though, and I was totally confused what was going on until kovarex explained it to me.
  • I definitely forgot to build a vertical train station longer because trains didnt stretch in 0.12 like they do now.
  • Building rail signals and train stations is a lot of pain without the visualisation helpers we have now.

A concept of a factory for the trailer in 0.1 You can see the last few screenshots always share some features. This will be even better in their final version, making the video flow much better between these clips. It felt quite interesting to just play the old versions after all this time. In a way it felt like playing a different game or some spinoff. Apart from the immediately obvious differences in graphics, the core idea of mining-smelting-assembling was still there, but with so many differences... Especially in the interaction, its usually small differences, but they really add up. This really made me appreciate what we have come to so much more, and in a way remind me that the details weve spent time on were really worth it. Eventually I got through it all and I can now record clips for the trailer. Youll be able to see them on 14th August.


[ 2020-06-26 12:14:35 CET ] [ Original post ]

Version 0.18.34 released

Bugfixes


  • Fixed desync related to non-deterministic transport belt merging order when multiple merges happen in the same tick. more
  • Fixed alignment of number input entries.
  • Fixed that undo didn't remove deconstruction task to remove things in the way. more
  • Fixed stray tooltip bug in the map generator window. more
  • Fixed of saving control inputs related to mouse buttons 4+. more
  • Fixed minor clipping issue. more
  • Fixed that train fuel request were unreliable. more

Gui


  • Windows with item and count to be selected have count/confirm buttons disabled when item is not yet selected.
  • Logistic request related item and count windows now have notched sliders for 0 to 10 stacks selection. Different numbers that are not multiplies of stacks can be still written into the textboxes.
  • Added an interface option to show both crafting and logistic windows in the character screen.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-06-26 11:09:49 CET ] [ Original post ]

Version 0.18.33 released

Changes


  • Full English text proofreading and corrections.

Bugfixes


  • Fixed Trains gui listbox labels not being readable when hovered. more
  • Fixed a crash when using LuaChunkIterator. more
  • Fixed a desync related to placing blueprint with assembling machine with not yet researched recipe. more

Gui


  • Windows with item and count to be selected are now merged into single window and double click on the item auto-confirms the window with the default count. Windows affected are logistic request, signal selection and (debug tool)infinity count selections.

Modding


  • All mining results of resources are forced to be unlocked in the selection lists, even when recipe to create them exists as well. more
  • Added ItemPrototypeFlags::always_show, which forces the prototype to be always visible in the selection lists regardless of related recipes.
  • Added RecipePrototype::unlock_results bool (true by default). When set to false, the recipe doesn't unlock the item to be shown in selection lists.
  • Added RotatedSprite::counterclockwise bool (false by default). Set to true to indicate sprites in the spritesheet are in counterclockwise order.
  • Added CharacterPrototype::has_belt_immunity bool (false by default).
  • Entities no longer require the order string be set when there's no item-to-place them.
  • Added EntityPrototype::remove_decoratives. "true", "false", or "automatic". Defaults to "automatic".
  • Added TurretPrototype::attack_target_mask and ignore_target_mask. more
  • Changed roboport tooltip to not show robot recharge rate when the roboport has no charging slots. more

Scripting


  • Added LuaRecipePrototype::unlock_results read.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-06-24 12:45:40 CET ] [ Original post ]

Friday Facts #352 - New website

Read this post on our website.

New website (Sanqui)


Over the course of the past year, you have seen the team put a lot of effort into polishing the game to get it ready for a full release. There's no doubt this is the most important effort here: we're all here to play the game. At the same time, the website is often the first thing people encounterand in for many, return to every week! Unfortunately, until this point the looks of our websites have been neglected. The current set of websites are a complete mishmash of styles that are not coherent and do not fit with the look of the game.
Which website am I looking at again? We set out to rework the looks of our websites last year to make them harmonize with the final game. Albert and Ale worked together to design the new website and make mockups in a process not too dissimilar to the GUI work in the game. Of course, web technology is a different beast from anything the game uses. My task was to take the mockups for each page and implement them as closely as possible (my own creative liberties notwithstanding).
The process from original page to mockup to the new version My approach to creating websites is conservative, and in a way mirrors the philosophy we use when developing the game. The Factorio website doesn't use a fancy modern JavaScript framework. I'm not a JavaScript hater. There is no harm in using JavaScript to make parts of the website interactive, and of course many web applications wouldn't be possible with it. But for a website like ours, avoiding the use of bloated JavaScript frameworks helps keep everything load and render quickly, and of course the website can be browsed without JavaScript as well. To get the looks right, I set out to create a CSS framework to visually mimic the Factorio GUI style. Where possible, I avoided the use of images. This keeps the page fast and ensures it stays sharp on all resolutions and levels of zoom. For instance, the buttons match their game counterparts closely, but are made only using shadows.
The only exception is the arrow facing to the right, which simply isn't possible to reproduce using CSS (I tried!). However, even then the performance is kept slick because the graphics for it are embedded in the stylesheet. The layout for new pages with sleek grids is enabled thanks to modern CSS technologies like Flexbox and CSS grid (no floats, no tables).
At the same time, the mod portal also received the new design.
I also took the effort to unify login sessions between the main website and the mod portal, so you no longer have to log in twice. This Friday Facts is the last time you're seeing the current (old) style, so enjoy it while it lasts! The new website will go live sometime next week. Once the new design is out, don't forget to click on the rocket!

Website content update (Klonan)


My part in the website update was going through all the pages and updating the content, with a side goal of reducing overall the number of pages we have, either by merging pages or just deleting pages we no longer value. Since 1.0 is so close, I decided to just 'pretend' that 1.0 is already out, and update the content to match it. That means there is no mention of early access, ongoing development, roadmaps, alpha releases, etc. This allowed me to clean up quite a lot of the pages, and make them much neater and more clear. This might cause some confusion until 1.0 is actually released, but that's just 2 months away now, so its not a big concern for me.

Artwork page


While going through the Presskit, I found myself wanting to include some of the 'cool' images that we've made over the years that aren't really screenshots. Things like the 2020 Rocket poster, or the Player and the biter giving a toast the new year. Initially I thought I would just throw them in the Presskit page willy nilly, and that will get them out there. We have some really nice images that are good for things like Youtube thumbnails, Website articles and reviews, etc. so I really wanted them to be accessible at least somewhere. However having them only on the presskit might mean they aren't really discoverable to the average player or new website visitor. So I decided to add a brand new page, the Artwork page. Initially I just added the nice flashy posters, the 2020 rocket, GDS cover, etc. but I figured there are lots of interesting images we can include from the years of publishing the FFFs. So I went through all the 350+ blog posts, to try to find the best images to put up on the page. I wanted to avoid images that shows old graphics or potentially confusing/outdated information.
It feels like this Artwork page is a great showcase of all the work we've done over the years, and I am really happy with how it turned out. Gathering the best images and compiling them into the single page, it started to seem like we really are reaching the finish line, and we will have some closure on the alpha development. Its been a long journey, and while we have a lot to look forward to with Factorio development, part of me feels a bit sad knowing this chapter of the game is drawing to a close.


[ 2020-06-19 10:42:51 CET ] [ Original post ]

Version 0.18.32 released

Graphics


  • New beacon graphics.

Features


  • Changed fluid mixing to a simpler version that only checks when manually building most things.
  • Added a flush fluids button to the pipe, underground pipe, and storage tank entity GUIs.

Gui


  • Show only unlocked items in filter selection (inventory and quickbar) and logistic/trash requests. Other selections like signal selection/upgrade selection are not affected. New interface settings (off by default) bypasses this and allows the player to see all items as before.
  • When selecting an element from a slot that has already value, the selected value is now going to be highlighted with the related tab (if applicable) selected.

Bugfixes


  • Fixed a few weird pixels in heat exchanger East sprites. more
  • Fixed player mining animation had the backpack affected by the color mask. more
  • Fixed mining drill status after disconnecting it from logistic network. more
  • Fixed massive script time usage in Wave defense scenario after configuration changes. more
  • Fixed that infinity GUI filters didn't list all items.
  • Fixed issue with upgrading ghost of assembler with pipes. more
  • Fixed new electric mining drill was missing integration layer. more
  • Fixed crash when unit group is destroyed while its goto behavior is being updated. more

Modding


  • Changed beacon graphics definitions. Graphics are now defined in graphics_set prototype property. If graphics_set is not defined, old animation and base_picture properties will be loaded instead for limited backwards compatibility.

Scripting


  • Added LuaFluidBox::flush().
  • Added LuaPlayer::auto_sort_main_inventory read.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-06-16 09:45:44 CET ] [ Original post ]

Friday Facts #351 - Beacon re-redesign Simplified fluid mixing

Read this post on our website.

The Beacon Redesign (V453000)


The Beacon is one of the last entities that dont have high resolution graphics yet. In the rather recent FFF-339, Albert presented the updated and redesigned Beacon. After your responses we realized some issues we hadnt seen with the Beacon before, and we have taken some time to think about it...
The red tower design by itself is very impressive, which gave it so many plus points that we didn't focus enough on the fact that it is taking too much visual attention. In this case, this happens because of aggressive red colours, the big contrasty yellow eye-like circle, the entity being quite tall, and the electric beam animation. Random variations are usually helpful to make entities look nicer in clumps (like resources), but not in this case, especially as other built entities dont have any variations. The options to take from here would be to either update the original design, adjust the red tower, or start a new redesign.
The Beacon is a very special entity, either it doesnt appear in a factory at all or very little, or its everywhere. It doesnt really do anything by itself so it doesnt really need to show much activity either. The original design has its own problems and also saturates the screen very quickly, as they are bright, also tall, and they always move, attracting attention to the movement constantly. As for the red tower, most of the top part would have to be removed which is almost a complete redesign already, but parts of the hole could be recycled for a new version... We chose to start a new redesign, with the design goal of the Beacon trying to take much less attention.

The Beacon Re-redesign (V453000)


For everything we generally respect the idea of height, in the sense that the higher something is, the brighter it usually looks. The less important background is usually darker, while the foreground (entities) is usually brighter, especially at their top parts. The red tower was put in a hole mostly to be able to create a really tall tower in a 3x3 bounding box yet not overlap the tiles above the entity too much. What could be done instead is to put the whole Beacon in a hole entirely and therefore make it generally darker and less noticeable. This way we would change its idea from a tower to an underground electronic/powerful entity, and try to explain that the effect is being transmitted underground by cables.
Do notice that a lot of the meshes in the model are coming from Alberts redesign, which was really helpful to get the new redesign done in a reasonable time. The beacon is generally less saturated than any of the previous designs, which again makes it less intense, and makes it fit better in its typical habitat of concrete tiles, though it looks just fine on more natural terrain as well. While the submerged design works well in terms of making the Beacon take very little attention away from the producer entities, there are multiple issues. Most importantly it doesnt look like a Beacon on the first sight. As a side-effect, the Beacon starts looking very top-down without combating our perspective, though that would probably be possible to address by changing the design significantly.
And so a tower clawed its way back into the concept, to explain how the effect is transmitted. Just a slim and lightweight tower though, without taking too much attention. The two black squares are actually module slots, and the Beacon now dynamically visualizes the modules inside. This is conceptually questionable, as we definitely dont want to start a precedent of adding visible module slots to every single entity, but the Beacon has no other use than the modules, so we think it's an acceptable exception.
The modules do take a bit more attention back again, but also remove some. With modules always visible, we could remove Alt-mode from the Beacon. This means whenever you toggle Alt-mode on, youre only seeing the overlay change on the producer entities.
See how much more breathing room do the assembling machines have in the screenshot above. As the Alt-mode overlay isnt really useful most of the time on Beacons, we can afford to remove this visual clutter. It can of course be re-enabled by mods.
The module slots are procedurally tinted, so if a mod adds custom modules, it only needs to specify the tints at the definition of the module item without touching the Beacon at all. https://cdn.factorio.com/assets/img/blog/fff-351-beacon-loop.mp4 Its worth mentioning that one of the reasons why the Beacon got away without high resolution sprites for such a long time, is because its a late game entity for generally large factories, so the player mostly looks at them while zoomed out. As you can see in the animation above, the tower has a subtle glow animation that explains the effect transmission when zoomed in, while almost invisible when zoomed out, trying to balance between being interesting close in, and non-disruptive far out. The glow effect is also tinted by the colour defined by the module lights, in fact it averages the colour if two different modules are in the Beacon, which isnt very useful for the base game but for some mods it could be a nice detail.
As usual, we plan to release the new Beacon next week.

Fluid Mixing Prevention - take 9001 (Rseding91)


The original concept of fluid mixing prevention sounded great: mixing fluids is (virtually) never desired - so lets stop it from happening - that's simple. This is the part where the movie stops and the narrator says: "But it wasn't simple, it wasn't even close to simple..." To keep things short I'll just say: complexity compounded with more complexity and an entire game built without the concept of "fluids can't mix" meant over a year and a half later there are still parts that can't be handled "gracefully". When the concept was first talked about it seemed... off. Mixing fluids is not desired - and the solution is to full-stop prevent it? But lets take that same solution and try to apply it to something else: belts. Mixing belt contents is (mostly) not desired (people have gone full crazy and made setups around it... but that's another story). So what if the game tried to stop you from mixing belt contents? Sounds crazy to me. But it happens: belts get mixed and it's not as big of a problem as fluids getting mixed - why is that? Because there's a quick and easy way to fix the problem: just 'hoover up' the items from the belt and its fixed. There's no quick and easy way to fix mixed fluids - you have to pull up the entire length of pipe to get it all out. Even if you don't mix fluids - but just get the wrong one in a pipe - it's still a huge pain to fix. This idea isn't new - it was talked about back when fluid-mixing-prevention started - but it was recently brought up again and we decided to give it a try: simple fluid mixing prevention. Just try to handle the most common case - manually building things - and in the more complex cases where mixing might happen, provide a quick-and-easy way to fix it: a button to flush all of a given fluid from the pipes. https://cdn.factorio.com/assets/img/blog/fff-351-fluid-flush.mp4 This new simplified system will be ready for release next week, so you can give it a try and let us know what you think.


[ 2020-06-12 11:07:10 CET ] [ Original post ]

Version 0.18.31 released

Graphics


  • New electric mining drill graphics.
  • Tweaked electric mining drill icon to be a bit more colorful.

Minor Features


  • Hovering over the circuit network id in the entity circuit control window will now show a tooltip with the circuit network contents.
  • Added experimental Color Filters graphics option to attempt to improve accessibility for color-blind players.
  • The debug setting "show-time-usage" now 'line wraps' if it doesn't fit on screen vertically.

Bugfixes


  • Fixed crash when merging force that contained unit groups. more
  • Fixed character preview being empty when the character is in a vehicle.
  • Fixed script error when trying to load old PvP save games. more
  • Fixed setting vehicle driver/passenger to an offline player would crash the game. more
  • Fixed 4th parameter of noise.terrace function was parsed as literal number but was used as noise program register index. more
  • Fixed an issue with modded entities having an electric output flow limit of 0. more
  • Fixed that furnace recipe auto-selection didn't work correctly with temperature ranges. more
  • Fixed that LuaUnitGroup could be used while in an invalid destroyed state.
  • Fixed button for selecting signal or number would not switch from number to signal with left click. more

Modding


  • Changed mining drill graphics definitions. Graphics are now defined using working visualizations contained in graphics_set and wet_mining_graphics_set prototype properties. If graphics_set is not defined, old animations property will be loaded instead for limited backwards compatibility, but other old graphics properties will be ignored.
  • Mods can now be loaded from directories with the name of the mod but no version number.
  • Added color_filters to utility-constants.
  • Input fluid box with connection set to output or input-output will not have volume forced down by recipe fluid ingredient amount.

Scripting


  • Added LuaSurface::show_clouds read/write.
  • Added LuaPlayer::stashed_controller_type read.
  • Added LuaBootstrap::register_on_entity_destroyed().
  • Added on_entity_destroyed event fired after an entity registered with LuaBootstrap::register_on_entity_destroyed() is destroyed.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-06-10 11:16:09 CET ] [ Original post ]

Friday Facts #350 - Electric mining drill redesign

Read this post on our website.

Electric mining drill redesign (Ernestas & V453000)


The electric mining drill is one of the older designs still in the game, and we have had our eye on it for a long time as a candidate for redesign. We would have loved to rework the mining drill in 0.15 when we added high resolution graphics and the pipe patch for it, but we had many nuclear related graphics to do for 0.15, so we just did the necessary minimum and postponed the full redesign. Now was finally the time we could unleash Ernestas onto it.

The old design


The most problematic aspect we see is the weak radial animation thats more like gently harvesting a field, rather than aggressively mining and destroying the planet.
The original mining drill is also very flat like a top-down square. In general we try to avoid square entities like the plague, as they tend to look disintegrated with the world because they dont try to hide that their perspective isnt correct.
The pipe patch for uranium ore mining makes the mining drill look like a different entity as it is massive compared to the ultra lightweight drill. Now that we can account for the pipe patch from the start of the design process, we can make it better integrated.

The new design


The drill bit is the part that does the action and therefore is the main characteristic for the entity. We spent multiple iterations trying to find the right shape for it first. We tried a tricone, four metal drills, a cone shaped drill bit, and none of them worked. Mostly the problem was visibility or too many details, which became even worse while drilling. Having a small pixel area is what usually limits us on what we can create, and also things need to be recognizable from far away.
Through trying various options, we chose to use a similar solution to the burner mining drill, as that is already established in the Factorio language. It makes it clear that the miners are one family of entities.
The old animation had one big benefit - it could work non-stop and move around the collision box so it looks like its harvesting from various tiles. With the new construction of the drill, it has to lift to move around. However, the drill can be outputting resources even when the drill bit is lifted, so we have added a working LED and a tintable layer for resources being dropped to the output, making it clear when the drill is in a working state.
Since the movement of the drill is procedural and Ernestas was smart about optimizing the spritesheet space, we can save a lot of VRAM compared to the original mining drill (about 40MB). We were considering a lot more additional animations but it would multiply VRAM requirements too much, or it would become too procedural and too complicated to implement. The resource layer, the pipe contents and the smoke emitted by the drill bit are all tintable layers, specified by resources, which make it very dynamic and mod friendly.
The remnants ignore rotations, but have 4 variations. Typical mining fields usually use only 2 rotations anyway, so this way it always looks a bit nicer. [url=https://cdn.factorio.com/assets/img/blog/fff-350-07-remnants-fullsize.png]
Click to view full resolution The sound of the mining drill has also been updated. Unfortunately Factorio does not support multiple working sounds per entity, which also means we cant synchronize sounds with the animation. So Ian had to invent a sound that would work nonstop. Since there is almost always more than one mining drill working, it should be fine. https://cdn.factorio.com/assets/img/blog/fff-350-08-new-drill-animation.mp4 We were finishing the mining drill in the last few weeks so we couldn't release it with the new icons. We didn't feel like creating a new icon for the old design and found it to be a cute little hint that the redesign is coming. Hopefully the confusion why the new icon looks completely different to the entity will be cleared up next week when we release the redesign presented in this post.


[ 2020-06-05 11:57:25 CET ] [ Original post ]

Version 0.18.29 released

Graphics


  • Reworked Engine unit icon.
  • Tweaked the color of Sulfur icon.

Changes


  • Updates to mini-tutorials.
  • New descriptions for mini-tutorial list.

Features


  • Added support to manually set several paths through the config.ini [path] file. 'saves', 'scenarios', 'mods', 'archive', and 'script-output'

Bugfixes


  • Fixed choose-elem-button filters not being respected when clicking the button with an item in hand.

Scripting


  • Added LuaEntityPrototype::grid_prototype read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-06-01 14:38:08 CET ] [ Original post ]

Friday Facts #349 - The 1.0 plan

Read this post on our website. Hello, today we have some big news.

The 1.0 plan (Klonan)


In FFF-321 we announced a release date for version 1.0. Given recent events we have decided to make an amendment to the date of 1.0.The new date we are aiming for is Friday August 14th 2020, which is 5 weeks earlier than the original date. The main reason to change the release date is the release of Cyberpunk 2077.In January this year, CD Projekt Red announced a delay to the release of Cyberpunk 2077, to September 17th, 1 week before our Factorio 1.0 launch.We think any release close to such a monumental game is going to feel some negative effects, such as everybody playing and covering Cyberpunk and taking attention away from other games. So we thought it was best to try release either before Cyberpunk or quite a while after it.Given the two choices, we opted to bring the release date forward. There are several reasons why we are choosing to release earlier:

Descoped goal


When we announced the date (FFF-321), we had plans for many things to be in the final release. The main topics were the new campaign, fluid algorithm improvements, and the full GUI rewrite.Due to independent reasons, we have cancelled the new campaign (FFF-331), postponed the fluid improvements, and cut a lot of the aspects of the GUI rewrite (FFF-348).

Staying on schedule


Apart from descoping some features, the other work we've been doing has been progressing at a good pace. The 0.18 experimental release structure (FFF-314) is really helping to keep things on track.The original estimate was made with some concession for delays, that "things always take longer than expected".Well for the last 6 months, most things haven't been taking longer than expected, and we've been finishing topics quite effectively.

The sooner the better


The general feeling in the office is that the game is pretty much done, and that we want to get it released as soon as possible.The sooner we get some closure on version 1.0, the sooner we can start thinking about fun and exciting new things. So due to the co-incidence of cancelling several major features, we can afford to bring the release date forward. To be clear, we didn't cancel or postpone any features due to the Cyberpunk release date. This new release date gives us 10 weeks, and from this point until Friday August 14th, the main focus for the team is on finalising the game, updating the trailer, and preparing marketing materials.

Locale plan and Locale freeze (Klonan)


One part of finalising the game comes in finalising the community translations of the game. For a long time we have used Crowdin for sourcing all the translations. Crowding has worked really well, and is deeply integrated into our workflow (FFF-48). However some languages are not 100% covered, and there has not been any overall proofreading. For this reason we chose to look for a professional translation company to help fill in the gaps and proofread everything. We specifically needed a company that will work through Crowdin, as the community there has years of experience with the game, and the system won't need any management on our side. After consultation with many companies and many other game developers for their thoughts, we have decided to partner with Altagram, based in Berlin, Germany. With the final GUI update finished, we have frozen the locale, which means no more additions or changes (as much as is reasonable). There will be a proofreading of the English source texts, and after that a proofreading of all the target languages. For absolute clarity, Altagram has detailed the plan and the process from their perspective:
    Once we get the greenlight that the community has completed their contributions to the translations in Crowdin, well start proofreading the English source text to offer any grammar or stylistic improvements, as needed. Once the English is polished, well get started on proofreading for the secondary languages. The linguists, who are all gamers themselves, and experts in game localization, will work their magic to ensure that the target language is as true to the source text as possible, to ensure that all players of Factorio, regardless of the language they play in, will have the same experience. Some things that the linguists will check for when proofreading the target language are: Ensuring that the text itself, especially all in-game terms, is consistent throughout; that spelling and grammar is correct; and that the translations carry the same meaning and emotion as intended. After we offer our suggestions, the texts will be sent back to the community for their final approval before implementation into the game.
From now until 1.0 release, Locale freeze mainly means that we'll only be working on topics that don't require new strings, such as bugfixes, new graphics, sound design, etc.

Prototype Explorer GUI/Prototypes GUI (Rseding)


Inspiration


Factorio has a lot of debug features and tools built into it over the years. Some of them are used extensively (show FPS/UPS) and others we wonder how we ever did without (GUI style inspection tooltip). Every one of them was added for a purpose and then ended up providing far more utility than its original purpose. With that in mind, and because they also end up being a lot fun (to me); I was working on fixing an issue I found with the GUI style inspection tooltip logic and thought to myself: wouldn't it be nice to have something like this for all the prototypes in the game? Is that even something I could do realistically? How would it look, how would it handle all the nesting that happens... but it sounded fun. And so I decided to see what utility such a thing could have:
  • Figure out if a mod has tweaked or changed something - or if it was supposed to and didn't (common in modded bug reports and during mod development)
  • Provide a place to extract information that the game doesn't show anywhere else (not everything is exposed through the mod API, and it's unrealistic to expect anyone to remember the entire API)
  • Link from game concepts to the wiki explaining more about them.
The list of benefits seemed worth at least tinkering with the idea.

Technical design


The first part I needed to figure out was - how was I going to get everything shunted into a GUI. Factorio is written in C++ and C++ does not have reflection. There's no easy way to say "for all of the variables this thing has, do this". Really the only way to get everything covered is to send each thing to the GUI. It's not pretty, but we also don't make changes to prototypes frequently at this stage in development. Additionally, if something is "wrong" it doesn't cause crashing/errors; it's an easy fix that anyone can do. A lot of boring typing later that part was covered.

Nothing is ever easy or simple


For each thing to show: show the name, show the value, show the type. It sounded simple but it never is.
  • The type can be incredibly verbose and or just useless to a human: what does this even mean? "class std::basic_string,class std::allocator >" (it's a string...)
  • The value can be huge - so collapsing needed to be created
  • The value can be an array of something, so "empty" should be shown for empty arrays
  • Arrays of things with 1 value really should just show the 1 value
  • Optional things should show "empty" when not set
  • Some things will link to another thing so linking needed to be create
  • All of this has to work at any nesting level
But that's Factorio, and the polish is what makes it nice to use. I don't regret any of it.

Wiki linking


Near the early stages of development I decided that the easiest way to convey to anyone using this what some "type" is and how it's supposed to be used is to show the wiki page about it. The wiki has very detailed information about a lot of what this was going to be showing and it seemed only logical to utilize it. But I didn't want to hard-code links... that never ends well. My idea: a page on the wiki that provides a mapping of game type -> wiki URL. The game would download the mapping and as it filled in the GUI if it found a type that existed in the mapping it would link it to the wiki. Bilka got the wiki side of it quickly setup. The game side... "nothing is ever easy or simple".
  • I didn't want to download the wiki page every time the GUI opened - that would be a waste
  • I didn't want to download the wiki page every time the game launched - the page wouldn't change frequently and so would be a waste
  • But the page still needed to be re-downloaded when it changed
  • I didn't want the game to pause while the download ran
  • It needed to be fault tolerant (not everyone has an internet connection, or can even say the page will download correctly)
And so, a simple "link the type to the wiki" turned into:
  • It remembers the last time it downloaded the wiki page and what the revision ID was
  • It only tries to download the revision ID the first time one of the GUIs is opened
  • If the revision ID changed, or it didn't have the mapping locally, it tries to download the latest wiki mapping
  • If the download succeeds, it saves it for next time and populates the GUIs links
  • If any of this fails it logs what went and silently continues running (this is a the internet after all, random failure is expected)
  • It all happens in a background thread so the game doesn't pause while this logic works
And it all works perfectly.

Native Lua serialisation (Boskid)


Last week I was requested by Rseding to look how could we implement a stateful Lua table iterator since we often iterate over Lua tables from C++ side, and this operation is slow. This forced me to learn some internals of Lua and how it stores tables. Up to this point, when a map was saved and the Lua state had to be serialised, we used serpent.dump (from serpent library) to convert the variable called global into a string on the Lua side and then take it out and store it within the save. Since going through Lua tables from the C++ side happened to be quite easy, I have decided to implement, for an experiment - a native Lua serialiser. This allowed us to completely skip using serpent.dump and instead save them directly. My primary goal was to reduce the loading time since in the old format the saved data was a string that Lua had to parse and execute. As was noticed later (not by me), the save speed improved a lot due to fact that no Lua operations are executed during save, just pure traversal over data to save in a linear time. For measurements I was using one save file that has quite a lot of script data in it (script.dat is around 60MB), the result is the average over 3 test runs.
  • Saving:
    • Old = 285.429s
    • New = 2.847s
  • Loading:
    • Old = 47.034s
    • New = 22.755s
This values also includes some optimisations implemented by Rseding. Changing the serialiser however has its costs. serpent.dump was doing serialisation of Lua functions stored in globals. They were officially unsupported by us anyway but some mods were using them "since they seem to work". With the new serialiser I have decided to not implement it at all due to its complexity and inherent limitations (closures were broken anyway). This broke some mods (even some base game scenarios) but it is rather easy to fix. An additional consideration we had was if it should fail to save when there are Lua functions in global during save, or should it silently delete them (as happens with metatables). The first approach was considered to be the best to quickly catch all non conforming mods but later we have decided that deleting them on save (and providing some info into log file) was better because a migration was almost impossible due to a base game migration for 0.18.28 that requests to reload all script, that as a side effect: saves the Lua state which would abort saving immediately due to Lua functions still in globals.


[ 2020-05-29 13:04:12 CET ] [ Original post ]

Version 0.18.28 released

Gui


  • Minor visual changes and fixes to achievement and tutorial related guis.

Bugfixes


  • Fixed that changing script areas and positions through the map editor in multiplayer as the client didn't work correctly. more
  • Fixed a crash when clearing logistic requests. more
  • Fixed some styles being defined twice in style.lua. more
  • Fixed follower robot count alert not showing correctly. more
  • Fixed container gui not showing logistics filters properly in large containers. more
  • Fixed wrong open/close sound for chemical plant. more

Modding


  • Added support to play a sound when opening dropdowns through opened_sound.
  • Improved performance by up to 2.5x when the game needs to iterate Lua tables on the C++ side.
  • Improved save/load performance of mod script data.

Scripting


  • Lua functions are now explicitly disallowed in the script 'global' table.
  • Added LuaSurface::generate_with_lab_tiles read/write
  • Added LuaEntity::mine().
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-05-28 16:42:01 CET ] [ Original post ]

Version 0.18.27 released

This is update contains large amount of potentially mod breaking changes. If you play heavily modded game, you may want to select 0.18.26 beta branch explicitly for couple of days until your mods get updated. We apologize for your inconvenience.

Graphics


  • New high resolution icons for all items.
  • New sprites for some equipment grid items.

Gui


  • Logistic chests have a different layout.
  • Visual improvements to the equipment grid.
  • Minor visual improvements to most of the game GUIs.
  • Minor layout changes to GUI of Combinators, Programmable speaker, Circuit and logistic connection windows, Rocket silo.
  • Added a close button to most game windows.

Sounds


  • New sounds for GUI interactions.
  • New sounds for game interactions, such as pipette, rotate entity, build ghost, mine ghost, switching gun.
  • Updating working sounds for many entities, such as substation, roboport, combinator.
  • New working sound for rocket silo.
  • New sound for night vision equipment, discharge defense equipment.
  • New tile build sounds for landfill, concrete, stone bricks and refined concrete.

Changes


  • Increased logistic filter count for requester and buffer chests from 12 to 30.

Scripting


  • Changed script.raise_event() to only allow mod-created events and specific game events.
  • Changed script.raise_event() to validate all required fields are provided for the given event being raised.
  • Added event filters for script raised revive, destroy, and created events.
  • Changed event erroring so errors during raise_event are properly blamed on the mod erroring.
  • Changed raise_event ordering to match standard event ordering.
  • All game events that support filters now filter correctly regardless of how they're raised (raise_event or actual game event).
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-05-26 16:52:11 CET ] [ Original post ]

Friday Facts #348 - The final GUI update

Read this post on our website. It's been over 4 years since we planned the infamous GUI update. If all goes well, next week the game will get the last big GUI update for 1.0. While the state of the GUI is not close to our crazy plans we recently had for the GUI, it's above what we initially planned 4 years ago. The update you will see next week includes:

  • A visual update to over 100 game GUIs
  • New high resolution icons for all game items (visible both in GUI and in the world)
  • New GUI sounds for most interactions

High resolution icons (V453000)


The plans


A bit more than a year ago Albert had posted twice (FFF-290 and FFF-291) about our thoughts, experiments, and plans of creating high resolution icons. Factorio has a ridiculous amount of items and things that need icons, which by itself means its a lot of work to redo them. I did not work on the new icons non-stop for a year as there were other more pressing tasks to be done sometimes, but they still took a large amount of time to make. As Albert mentioned earlier, we also wanted to create multiple mipmaps per icon to control scaling better than letting the engine rescale icons by crazy amounts, but it could multiply the amount of required images to astronomic numbers...

The process


Since we were very well aware of the amount of work that the icons would require, we tried to set up an efficient workflow first, and it paid off big time.
A rather simple Blender startup scene to standardize output paths and basic starting settings was a good start, but the part that saved my sanity was a python script which automatically creates mipmaps from given input images, and downscales images from nearest available higher resolution if an input is missing. And automatically puts the mipmap into the game, assuming the file names are correct.
This is huge because it means I could create the highest resolution image first and immediately put it in the game, and see if conceptually the icon is working.Once I would consider the highest resolution good enough, I could just downscale each of the resolutions manually in Photoshop and paint the extra necessary edits they would require.
The best part is that the mipmaps were not really extra work, they were actually a lifesaver. Creating a high resolution icon that is trying to be readable, look good, represent what it should and do all of it in any scaling level, can make iteration really difficult, as by changing a pixel in the image can introduce problems in completely unknown zoom levels. It feels rewarding for "trying to do things right" when a solution that we initially thought is more proper looking but potentially more work, is actually more proper looking and less work in the end.

The result



Some icons have been around for years and the entities they represented have changed, but the icons have not. Because of this and many other reasons, some icons will take some getting used to as they look different now. As a benefit of working on the icons on and off for more than a year, I also got to play the game with them over the year and I have gotten used to them already. [url=https://cdn.factorio.com/assets/img/blog/fff-348-icons-1-fullsize.png]
Click to view full resolution Since we have updated our GUI to draw in high resolution with GUI scales like 200%, the item icons suddenly have too low resolution, so we needed to update the icons. Thats what I was thinking at first, but as I started seeing high resolution icons in the game (on belts, assembling machines, cargo wagons, in the map markers, and everywhere else...) I realized how much impact the new icons actually have. Please do try to get used to the more revolutionary icons first, but do let us know about problematic cases - reworking all icons is a gargantuan project, but redoing individual icons can be very quick and done silently without breaking any mods. Thats what weve been doing in almost every major release after all.

The GUI style update (Twinsen)


As mentioned in FFF-338, the plan was to finalize the transition of styles, fix obvious issues and low hanging fruits, and try to get everything at a consistent level of quality for 1.0. While it didn] In game you will notice that some layouts (such as logistic containers) were improved, broken layouts (such as the car/tank inventory) were fixed, plus about a hundred small things like better tilesets, better margins and paddings, proper centering of some elements, etc. Here are some examples of what you will see.
About the fact that we took 4 years, it's partly because (as is probably quite common in game dev) we underestimated the complexity of the GUI. Add on top of that some disorganisation and a constantly expanding and changing scope and you get a project that never finishes. So finally I decided to put my foot down, call it good enough and say no to the constant stream of changes. That means it's not all good news. It doesn't look like the Blueprint Library will be getting an update before 1.0, currently making it a very low hanging fruit as far as the GUI is concerned. Such a big update comes with some mod breaking changes, mostly related to changed Lua styles. In order to help modders in fixing the mods as soon as possible and also improving their styles to make them look closer to the base game, I made a long post in the [url=https://forums.factorio.com/viewtopic.php?p=492101#p?????>upcoming breaking mod changes topic. We initially intended to remove the old ] After it's released, let us know what you think in the release post, or report any bugs you find on the bug forum.

Equipment grid improvements (Twinsen)


In the meantime, Ondra worked on some improvements to the equipment grid. As part of the icon update, this also includes some new graphics for the equipment sprites themselves.

UI sound effects (Ian)


As I mentioned in a recent post (FFF-341), I have been mostly working on UI sounds. My approach has been to get across the tactile feel of the buttons, plus the appropriate feedback for a particular action. But sometimes you don't really know until the rest of the team have heard them. https://cdn.factorio.com/assets/img/blog/fff-348-gui-sounds.mp4 After prototyping ghost building for example, I thought I had a set of sounds that worked, however Vaclav gave me the valuable feedback that they were too much like 'in world' SFX and needed to be more electronic. This makes sense, as building with ghosts is really sending an instruction to the robots. We also have sounds for rotating entities, which is something you asked for. It provides a bit of useful and fun feedback which could be helpful if you hit the 'R' key by mistake when you meant to open your inventory. https://cdn.factorio.com/assets/img/blog/fff-348-ui-sounds.mp4 In the case of night vision equipment, I started by making a subtle whoosh type sound but Klonan suggested something more like the 'wind up' sound in Splinter Cell, so I made a kind of a homage to that using a mixture of a rising synth sound and an electrical contact effect. https://cdn.factorio.com/assets/img/blog/fff-348-nightvision.mp4 I asked Posila if we could play a different building sound for landfill. Once this was done I spent a whole day creating and play testing a variety of sounds, being careful to balance the levels between the impacts and the subtle water splash behind it. I felt they work so well that when Vaclav asked me to look into changing the concrete tile sounds, I used a similar approach and that mechanic also feels much more satisfying now. https://cdn.factorio.com/assets/img/blog/fff-348-landfill.mp4 Val has been working on more variety for the different sizes of enemies, plus some new sounds for walking on rails. From now on it will be mostly final mix adjustments, including final music mastering and making the whole soundtrack uniformly a bit louder.

G2A resolution (Klonan)


Back in FFF-303, we talked about our thoughts on the grey market websites and more specifically about G2As vow to pay back 10x the money lost to chargebacks. Well its been a long time, but we're happy to say we have reached the conclusion of the story. You can read the press release from G2A here and the interview with GamesIndustry.biz here. In short, G2A has confirmed that 198 of the ~300 Steam keys we had recorded from fraudulent purchases were sold on the G2A platform, and they have kept their promise and have sent us 10x the chargeback fees (which was roundabout $20 an order). That is pretty much it. G2A were quite open during the discussions, and we don't doubt the results they have provided. We still don't recommend purchasing Factorio from any unofficial sources, and there is no ongoing relationship or agreement with G2A after this. I'd like to thank the team members at G2A who put in the effort to try to close this topic, even though there are more pressing concerns at the moment for all of us.


[ 2020-05-22 16:06:51 CET ] [ Original post ]

Version 0.18.25 released

Features


  • Added new tutorial campaign levels 04 and 05. (more)

Changes


  • Added a search bar to the mod settings GUI.

Bugfixes


  • Fixed a crash when building entity ghosts that immediately get invalidated through script.
  • Fixed that the choose-elem-button elem_type "signal" didn't show special signals. more
  • Fixed that furnaces required module slots to be effected by beacons. more
  • Fixed that some select-a-thing GUIs didn't have search bars. more
  • Fixed that LuaEntity::revive({raise_revive=false}) would still raise the revive event.
  • Fixed a crash when trying to iterate game.forces with the maximum number of forces created. more
  • Fixed a desync related to fast-replacing modded beacons. more
  • Fixed performance issue with initializing huge Lua arrays, that could cause loading of some modded saves take forever. more

Modding


  • Added item prototype flag "draw-logistic-overlay".
  • Added support to play a sound when a robot deconstructs something through utility-constants "deconstruct_robot".

Scripting


  • Added on_force_reset event called when LuaForce::reset() is run.
  • Added remove_colliding_entities and remove_colliding_decoratives parameters to LuaSurface::set_tiles().
  • Added LuaSurface::get_script_area, edit_script_area, add_script_area, remove_script_area, get_script_position, edit_script_position, add_script_position, remove_script_position.
  • Added 'elem_filters' onto choose-elem-button LuaGuiElements to control what options appear in the picker GUI.
  • Added 'crafting-category' filter to EntityPrototypeFilters.
  • Added 'has-ingredient-fluid', 'has-ingredient-item', 'has-product-fluid', 'has-product-item' filters to RecipePrototypeFilters which can accept a nested set of FluidPrototypeFilters or ItemPrototypeFilters.
  • Added 'place-result', 'burnt-result', 'place-as-tile', 'placed-as-equipment-result' filters to EntityPrototypeFilters which can each accept a nested set filters.
  • Added 'name' filter to EntityPrototypeFilters, FluidPrototypeFilters, and ItemPrototypeFilters which accepts either a single name or a list of names to accept, similar to LuaSurface::find_entities_filtered.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-05-19 12:00:10 CET ] [ Original post ]

Friday Facts #347 - New hope demo levels

Read this post on our website.

New hope demo levels (Klonan)


A few weeks ago we discussed the changes to the demo and tutorial in the game (FFF-342). One piece of feedback we received after publishing the news was about the old 'New hope' campaign levels, and specifically the 'Abandoned rail base/Broken rail map'. It seems a lot of you in the community really really enjoyed the new hope campaign levels, and several of the team here share the same feelings. After we scrapped the plans for a new campaign and reverted to the old demo, we had initially dismissed the idea to revive the New hope campaign... However due to popular demand... we have decided to bring back the favourites, the first 2 levels of the new hope campaign. This time though, they will also be included in the demo version of the game. This represents a very significant increase in scope for the demo, increasing the demo content to include research, red science, green science, trains, and much more. These levels should be ready for release within a week (but no promises).

Level 04 - Science and Automation


This mission is a continuation of demo mission 03 where you build radars to scan the surrounding areas. You start with a small factory already operational. The radar detects a distress beacon and you must build a car to get there in time before the signal dissipates. This level introduces the labs and science packs, as well as providing the first taste of real automation.
At the end of the level, you pack your supplies in the car, and drive off to locate the distress beacon, before it fades out for good.

Level 05 - Abandoned rail base


This level starts with you pulling up to the base, however you arrived too late and the base is already destroyed. Your goal is to re-establish the science production and rebuild the rail network.
After rebuilding the railway and the mining outposts, you must produce a large number of materials to finish the level. At the end of the level, there is a notice that this is the end, and we would recommend playing Freeplay next.

Whats new?


The main work over the last weeks has been bringing the ancient maps up to date with modern Factorio. For instance now that we have more specific remnants, the ruined bases really look much nicer.
Also we have made a big effort to update the tile and map generation to make use of the new terrains, cliifs, and decoratives, most effectively...

Replacing terrain in a map (V453000)


The original Abandoned rail base level was nice, but it aged with all the changes to terrain generation that happened since.
The goal is to recreate the gameplay of the original level, but replace the terrain with modern one, including decoratives and cliffs. The most gameplay-defining elements are entities and water on the map. Cliffs would be as well, but those didnt exist when this level was introduced. Tiles and decoratives well just replace, and trees were going to try to get close enough. Of course, a lot of things like pollution absorption numbers have changed since the level was introduced so it wont be absolutely the same regardless.
The first step I took was finding the random map seed that I want to use for the level. I do this by generating a random map in Freeplay, and I run a take_screenshot command, with two requirements:
  • The name of the output image is the seed of the map so I can reproduce the image just by reading the image name.
  • The resolution to 1 pixel = 1 tile so I can easily align it in Photoshop and read the coordinates (even though Photoshop uses a different coordinate system, at least staying in the same units helps).

I take the same resolution screenshots from the original mission with and without tiles, and put the random seed images on top. Having the visual preview with being able to move the image allows me to find the desired seed and offset quite quickly and position it really precisely. Now of course we cant just paste the entities from the original level to this random surface as there are some conflicting areas, like the huge lake in the middle of the map.
So we have to remove unwanted lakes and resource patches.This is done by generating multiple maps with the same seed, but one without water (starting area only) and resources, and transferring areas between them. Next up we can add water from the original level.
This step is quite special, in the original mission I replaced water by concrete, and created a blueprint from it. Theres better ways I could have done this, but for some reason I didnt want to deal with offsets in this piece of script, and Ive already used this method in some other place earlier so this solution came to my mind first.
Another script replaces all the concrete with real water. The bigger issue is that the original level had water all the way to the edge of the map (you can for example see the sharp edge on the right) and the water generation changed as well so manual edits are in order.
When we have water, its finally time to clone in the original entities.
To avoid conflicts, I use the clone_area tool which also removes entities in the destination surface. Ive been able to go through this whole process in a single working day thanks to all the map editor features Rseding added and Lua commands weve created when working on the now cancelled campaign. Tools, experience and knowledge are hard to cancel. :)
And then we draw the rest of the owl. Fix places where the automated cloning hasnt been good enough, add more ruins to be explored, tweak the gameplay and we will have a finished scenario.

Bots throw cliff explosives (Klonan)


Recently we made some improvements to the cliff explosive effects. However one thing we missed was that the bots needed to be updated separately, due to them using different logic to create the explosion. While it was an easy fix (copy paste some Lua definitions), it feels like it is treating the symptom rather than treating the cause. It isn't good to have the same thing defined in two separate places. So never one to pass up a nice opportunity to have some fun, Rseding changed the way the 'Blow up cliff' job works, so it will always use the correct effect: https://cdn.factorio.com/assets/img/blog/fff-347-robot-throw.mp4 Now instead of the robot hovering over the cliff, it will throw the same cliff explosive projectile as the player would. Not only this fixed the issue for good, but it looks a lot cooler.


[ 2020-05-15 13:50:12 CET ] [ Original post ]

Version 0.18.24 released

Graphics


  • Added player footprints and footstep visual effects.
  • Added car and tank dust and particle trail visual effects.

Changes


  • Construction robots throw cliff explosives from afar the same as players do, instead of dropping them at the cliff.
  • Changed rail segment visualisation colors to be more different from rail signal colors (red/green).
  • Clicking a GUI now brings it to the front. Most noticeable when using the map editor or debug GUIs where they overlap.

Bugfixes


  • Fixed that Fast splitters were missing a piece visually in East rotation top_patch more
  • Fixed that inserters could insert modules for recipes into module slots in some rare cases. more
  • Fixed that robots blowing up cliffs was different than manually blowing up cliffs. more
  • Fixed limiting cargo wagon to 0 slots would break progress visualization for full cargo and empty cargo train conditions. more
  • Fixed teleporting player between surfaces while the player was in a map view would not invalidate tile renderer cache. more
  • Fixed that the "use different settings per save" setting didn't work for single player games. more
  • Fixed crash due to use-after-delete when single unit builds a base in position that does not collide with the unit. more

Modding


  • Added the Prototypes GUI (ctrl + shift + E).
  • Added the Prototype Explorer GUI (mouse over most anything + ctrl + shift + F).
  • Added support to play different sounds for entity ghosts depending on the size of the entity in the ghost through build_sound (for small), medium_build_sound and large_build_sound on the entity ghost prototype.
  • Added support to play a sound when switching weapons defined through utility-sounds 'switch_gun'.
  • Added support to play a sound when picking up items (F key) through utility-sounds 'picked_up_item'.
  • Added optional 'turn_speed' to projectile prototypes.

Scripting


  • Added "include_fuel" field to LuaItemStack::create_blueprint.
  • Changed LuaSurface::create_entity so it places resource entities to center of a tile as map generator would. This can be overridden by optional snap_to_tile_center parameter. more
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-05-12 13:52:40 CET ] [ Original post ]

Friday Facts #346 - He who does nothing, breaks nothing

Read this post on our website.

He who does nothing, breaks nothing (posila)


In the recent patch notes, there was a line "Fixed landfill spawning under player when building landfill elsewhere. More" and some people on Reddit were wondering how did this bug happen in the first place, and asked for the long version and even suggested we could even use it for Friday Facts, and I thought: "Yeah, if I am going to spend time writing this, we should consider using it in FFF so someone else doesn't have to spend time writing something else." ... but I am going to stretch it out. https://cdn.factorio.com/assets/img/blog/fff-346-landfill-bug.mp4 The landfill bug reported after the release of 0.18.21. Disclaimer: I have not been around during the ancient parts of this story (speaking of which, it's my 5 year anniversary at Wube, yay!), and changes I have been around for, or even done myself, I might not remember correctly. So this might not be accurate. In fact, let's say the story is purely fictional and any resemblance to real world events and people is just a coincidence.

Tile transitions... again.


For the first couple of years of Factorio development, water drew a transition over ground tiles. The graphics for the transition tiles was taking too much space from the ground tile, so it was not possible to draw a single tile of ground surrounded by water... nor 1 tile wide tile bridge going through water. In addition to that, the transition graphics was tileable only with grass terrain. To enforce these constraints, the map generator was enhanced by tile correction step, the purpose of which was to make sure, that the terrain is possible to draw without any graphical artifacts. (If you wonder why the game didn't use Wang tiles instead, I know they were considered, but why they were not used I don't know. Based on the original water transitions it looks to me like things started with the intention to use them, but they ended up not working well with noise-based map generation. That's just my speculation though). Of course, the tile correction was executed also when tiles were changed by means other than the map generator. From script for example. Mods that allowed players to place tiles emerged. One of them was Landfill, which was adopted into the base game eventually, and as far as I remember, the major trigger for that were reports from people who happened spawn on large island, and after 20 hours of playing the map, they found out they could not continue it. Adding landfill to the game solved those issues but created a new one. When placing landfill, the tile correction logic could decide to "correct" the tiles the player was standing on - trapping player in the water (bug report). https://cdn.factorio.com/assets/img/blog/fff-346-correction-bug.mp4 Bug report from 2016 - Placing landfill traps the player As the team working on the game grew, it was decided to do another pass on the terrain graphics, put much more time into it, and change things around. As you probably already know (since we keep talking about it in past weeks), the ground draws shore transitions over water tile now, and shores are not limited to grass terrain any more. This made tile correction mostly obsolete, but it is still used to enforce some soft tile placement rules during map generation. For example that deep water should not be adjacent to ground tiles. Since we were leaving the logic in anyway, the possibility to define new tiles such that they would not be allowed in just 1 tile wide remained also. Again, as you probably remember from 2 weeks ago, the new transition graphics and newly possible 1 tile wide creeks made it feel like player is getting stuck on invisible walls, or is unable to step over a really narrow gap in the ground. In addition, we already had the character slide a little bit around entity corners, and the new corner tile transitions that were visually diagonal, made me miss this behavior when colliding with tiles. So I started reworking how player character collided with tiles and how those collisions got resolved. What I found worked well, was to ignore the bounding box of the character and just test the terrain directly at player's position. If the tile type at that position is walkable, the player doesn't collide, if it is not walkable, we figure out shape of the transition on that tile and make the character to collide only on some parts of the tile. (note: this assumes walkable tiles draw transitions over non-walkable ones, in case you are thinking of creating a mod with new terrain type that player won't be able to walk on.) https://cdn.factorio.com/assets/img/blog/fff-346-character-movement-no-transitions.mp4 Character movement when not considering tile transitions My goal was to make player movement not be frustrating around water, and intended the rest of the collisions to work as they used to, despite for example enemies not being able to always chase after player. The map generator didn't create maps on which this would happen often, and I didn't mind players using landfill to create passages that could not be crossed by enemies. It just didn't seem to be worth further fuelling this chain reaction of solution to previous problem creating more new problem, because changing player collision was not without it's own issues either (have you noticed anything unusual about walls placed next to water? hint hint). Anyhow, what I wanted to do, was to make a special collision function for the player character, but I soon learned, we have several collision functions for different situations, and I didn't want to make special version of each of them, so I decided to add a flag to character's collision mask, that would modify the collision detection method. Naturally, I wanted to make it is possible for modders to change the collision mask of the character entity, so I exposed the flag to prototype definitions. Mods ended up using the flag on non-character entities, and after Oxyd reworked the pathfinder, the flag started to cause crashes... Oxyd fixed it, but he changed my special logic to consider the entire bounding box again, instead of just the entity position, which made the feeling of player movement worse. This time I decided to solve it by adding optional parameter to the collision functions (instead of yet-another flag), that would indicate that the collision is being calculated for a player controllable entity, to determine if the old behavior should be used or not. And that's how the bug was introduced. Remember that landfill bug with tile correction creating water under player? Well, the fix for that was to add a piece of code to the end of "build terrain" routine that would check the player who built the tiles is not colliding with water, and if they do, just place the ground underneath them to correct the result of tile correction. The special player collision logic allows characters to get so close to water tile that its bounding box collides with the water, and when I added the extra parameter to the collision functions, I didn't adjust this code, so it was using "consider the entire bounding box" collision behavior and falsely detected the character entity as colliding with the tiles and tried to save the character by placing ground under its feet. https://cdn.factorio.com/assets/img/blog/fff-346-bug-reveal.mp4 Landfill bug And here comes the revelation. The big confession. When the first post reporting this bug came in, I immediately knew what the problem was. It wasn't the first time I've seen it. The same issue happened to me when I was making the special player collision logic the first time around. Back than I caught it and fixed it even before the entire tile transition rework was merged to the main code base. But I didn't make a test. I did not... make a... test. So that's how bug like that happens. The short version would have been something like... the bug was the result of long forgotten pieces of code, that are supposed to solve an edge case problems that were usually created by solutions to other edge case problems, interacting in an unintended way after changes that were made to solve yet another edge case problem. In Czech we have a saying for which I have not found English equivalent. "He who does nothing, breaks nothing." It is a kind of reassurance when something unintentionally breaks during an activity, resulting in inconvenience. The only way to make it a certainty that nothing would have broke would have been to do nothing. At times the proverb sounds like an advice... if I can't figure out all the problems a new feature, change, or bug fix will cause, or just the number of potential issues that will need to be solve to do the change seems overwhelming, doing nothing starts to feel like an option with the best possible outcome. But, that's just analysis paralysis creeping in, and what I need to do is to remind myself the intended meaning of the proverb, and stop worrying about potential problems that may not even be real in the end, and if they are, they will be just inconveniences that will be eventually solved too.

Character and vehicle movement effects (Klonan)


This week we're happy to show the latest in visual effects that Dom has been working on. Carrying on the topic of improving the way the terrain and environment feels and reacts to the player, Dom and posila have spent quite some time working on movement effects for the character and vehicles. As you walk around, on certain terrains, the character will kick up some dust and dirt. https://cdn.factorio.com/assets/img/blog/fff-346-character-walk.mp4 The effect actually makes a really big difference to how it 'feels' to walk around, which the GIF might not show that well. Especially with some exoskeletons equipped, you really feel like your zooming around in a real place. Waking around will also leave some subtle footprints in the ground, which helps connect the character to the terrain. https://cdn.factorio.com/assets/img/blog/fff-346-vehicle-trails.mp4 The vehicles also kick up the dust and dirt as you drive around. This feature actually is not simple as it would first seem from the result, but there are quite a few new features under the hood to make it possible.


[ 2020-05-08 13:50:43 CET ] [ Original post ]

Friday Facts #345 - Unit group collision mask Artillery shell particle

Read this post on our website.

Unit group collision mask


Last weekend, a bug report came in on our forum. The issue was that the groups of biters were trying to path over the water, but the bugs can't swim.
It seemed like something quite typical of a mod being funky. I looked into it, and it seems the Hovercraft mod was playing monkey business with water collision masks to make his vehicles ride over water. One thing involved setting water tiles to be walkable, and then adding an additional collision layer to all players and biters. What this modder didn't realise though, is that unit groups have a fixed collision mask. It used to be hardcoded, but a while ago it was added to the utility constants. So we just say "hey its a mod problem, here's a quarter, call someone who cares"... right? Well it didn't sit right with me, because deep inside I knew that the unit groups shouldn't have a fixed collision mask, it doesn't make sense really. Lets say you add flying units to the game. If you give individual commands to the flyers to go attack the base, they will happily fly over the water and attack without issue. However if you put them in a group together, a group of flying units, the group will path around the water, because the unit group still has a fixed ground collision mask. So this week I decided to fix it once and for all. It turns out it wasn't so hard in the end. As we mentioned somewhat in FFF-340, unit groups already have logic in place to recalculate their properties based on their members. I hooked into that logic to also make them recalculate their collision mask. The way that made sense to me, is that they should add the masks together, so that they only path where all of the units can path. https://cdn.factorio.com/assets/img/blog/fff-345-small-biters.mp4 A group of only small biters, they can't walk on water, so they walk around it. https://cdn.factorio.com/assets/img/blog/fff-345-water-biters.mp4 A group of 'water biters'. They can walk right over water, so they go straight through. https://cdn.factorio.com/assets/img/blog/fff-345-mixed-biters.mp4 A mixed group of small biters and water biters. They add their masks together, so only go where all the units can go. You can imagine it quite intuitively I think, the group will try to stick together, and that will mean the group can only path to places that all the members can reach. It feels quite nice to make fixes like this, as they are relatively small in scope and risk, but cleanup a lot of potential problems, and open a lot of interesting possibilities.

Artillery shell particle effect


Another nice small finishing touch for you all this week. Adding a shell being ejected from the Artillery cannons was suggested back when we showed the new sounds integrated into the game (FFF-341). While we can't get too fancy with it, we think the relatively straightforward effect that we've added fills in the detail nicely. https://cdn.factorio.com/assets/img/blog/fff-345-artillery-shell.mp4 It is just a particle with a nice spritesheet that Dom rendered from the original shell models. With a bit of engine tweaking here and there, we had it ready in quite short order. Just another small bit of polishing that characterises this stage of development.


[ 2020-05-01 10:48:51 CET ] [ Original post ]

Version 0.18.22 released

Graphics


  • Added shell particle effect for the artillery shooting.
  • Added tinted scorch marks for explosion effects. Explosions on different tile types will result in scorch marks of different colors.

Changes


  • Pressing escape/close GUI when a search field is focused only closes the search field instead of the entire GUI.
  • Updated GUI styles for PvP configuration GUI.
  • Unit groups will determine their collision mask based on the collision masks of their members. more

Bugfixes


  • Fixed landfill spawning under player when building landfill elsewhere. more
  • Fixed a crash when a train recalculating path during movement is unable to reserve rail signal within movement distance. more
  • Fixed production statistics corruption when recipe returns some but not all catalyst. more
  • Fixed a pathfinding crash related to changing tiles in a way that affected neighbouring tiles' transitions. more
  • Fixed that malformed data in data.raw wouldn't show the minimal-mode failure GUI. more

Modding


  • Fixed that writing to mod settings would silently ignore bad values.
  • Added "allowed_effects" support to the lab.
  • Added "creation_distance_orientation", "use_source_position", "height" and "vertical_speed" to particle creation parameters (related to shooting effect shell particles).
  • Added "scorch_mark_color" to TilePrototype.
  • Added util.remove_tile_references for easier compatibility maintenance with future game updates when removing base game tiles.
  • Removed migration for CustomInputPrototype consuming types that were removed in 0.15.24.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-04-30 12:14:34 CET ] [ Original post ]

Friday Facts #344 - Tile transition collisions Team Steelaxe speedrun record.

Read this post on our website.

Tile transition collisions (Klonan)


We first mentioned a change to our tile transition logic back in FFF-199, and not long after in FFF-214. These two posts focused more on the visual side, and how it makes the game terrain look so much better. In short, the tile transition logic overlays an additional sprite over adjacent tiles, so that where the two tiles meet has a much more natural look.
Tile transitions on.
Tile transitions off. So while the looks were taken care of, we also had to deal with the 'feel' of the tiles. The easiest example of this is the 1x1 landfill 'stepping stones'. It really looks like you should be able to walk/drive across the 1 tile of water. So we added in an additional layer of collision checks, which will consider the transitions when performing the logic of what can go where. https://cdn.factorio.com/assets/img/blog/fff-344-stepping-stones.mp4 Now some of the cheesier among you will know that biters don't know how to get across these 1 tile gaps. That is because simply we never enabled the biters to use this collision check logic. One reason is that more checks means more UPS usage for the biter pathfinding, another is that we didn't think it was necessary. However it was available in the engine, and any mod could enable it if they want. That is exactly what I did with my Mining drones mod. Initially this seemed to work, and I thought it might make them walk around lakes a bit more naturally (like the player character does). However quickly I noticed that people were reporting on the forum that the game was crashing with the mod installed. I quickly reverted the change to my mod and we started looking into it. It turns out that the new abstract pathfinder we added for better unit pathfinding (FFF-317) was not set up to consider units using this tile transition collision logic. This same crash was happening sometimes without any mods installed, but the case was more difficult to reproduce, so this is a nice situation where mods help us work on issues in the base game. Recently I have been working on another unit heavy mod, Transport drones, and the principle design behind the mod heavily relies on the tile collision logic (the units don't even collide with entities). It turned out to be a really nice test of our new pathfinder, but also highlighted some of the issues that not considering the tile transitions can bring. https://cdn.factorio.com/assets/img/blog/fff-344-drone-zig-before.mp4 By not considering the tile transitions, the drone takes an awkward path along the diagonal road. This week Oxyd finished his work on an upgrade to the pathfinder, so we can enable the tile transition collision logic with units. The change is immediately noticeable with the above example. https://cdn.factorio.com/assets/img/blog/fff-344-drone-zig-after.mp4 By considering the tile transitions, the drones path much more naturally. With the logic now in place, we are debating whether to enable it for biters or not. We probably won't, it is only a minor change and would have a non-zero performance impact (a rough test puts the worst case at about 5%), but then again it is a fun way to surprise those who thought the 1 tile of water would stop the biters attacking, and it kinda makes sense they can walk over it just as the player can. Well we will see if there are any issues with it in the modded cases before any further consideration. As a bonus fact (this is Factorio facts after all), I spent a bit of time benchmarking some late game Transport drone based factories (screenshot), and found a few nice performance gains.

This game is too short, I want my money back! (Bilka)


This Wednesday, Team Steelaxe set a new Any% multiplayer speedrun world record at 1 hour, 15 minutes and 21 seconds. This is the fastest anyone has ever launched a rocket in an unmodded Factorio game. [previewyoutube=X7LH9EvjQV0;full][/previewyoutube] I am part of Team Steelaxe, so I want to take the opportunity to explain how we managed to beat the game this quickly. In general, it is all about planning and preparation, we estimate that we have put a combined 200 hours into planning just for this speedrun. The Any% speedrunning category allows to change all map generation settings, including disabling enemies. Multiplayer subcategories allow for up to eight players. Planning begins with picking a map seed. Since there are many possible maps to choose from, we let a script generate maps and automatically filter out the ones without enough ore in the starting area, and then handpick from there. With the map picked, it is possible to start planning the base. This begins with setting a target time to finish the game and calculating the amount of science and number of assemblers required from there. We then come together and arrange a base on the chosen map, which will serve as a reference for the factory built in the actual run. It should be noted that the category rules do not allow blueprint imports, so instead we usually have the planning save file open in another window or use screenshots during the run.
Part of the spreadsheet that contains every players responsibilities. Another big part of the planning is also to create a spreadsheet of everyones tasks and when they should be done. We distribute the tasks so that two players build smelting, two build mining, one player builds the power plant and only three people build the factory itself. This strict divide means people only ever take and craft the material that they need, so ideally we dont have to fight over resources. Furthermore, the task list allows us to optimize by shuffling tasks around, so that no time is wasted by anyone. One example of this is that only two people ever chop wood for power poles, the rest get the wood from them and do not have to waste time on finding trees. The task distribution also means that every player has a very different perspective of the speedrun, so here are some more: With the complete plan prepared, we do runs and iterate on the planning, taking into account what worked well and what did not. The speedrun above is the result of a few of those planning iterations combined with some improvisation to compensate for mistakes in execution. It may not always sound like it during the run, but we are all friends and when someone makes a mistake, others jump in to help out, so the linked run is the result of good teamwork. Without everyone working together like that, we would not have been able to reach our target time of 1 hour and 15 minutes. In the future, we hope to be able to launch a rocket in less than an hour, you can watch our next attempts on Sunday at 20:30 CEST on Twitch. You can find over 20 active speedrunners, resources such as save games and replays, or even try running yourself, at Speedrun.com/Factorio.


[ 2020-04-24 17:37:20 CET ] [ Original post ]

Version 0.18.20 released

Features


  • Added new environmental trigger effects for grenade, artillery and nuke explosions. more
  • Added 3 level 'First steps' tutorial Campaign. more
  • Mini-tutorial improvements.

Changes


  • Moved Compilatron and Compilatron speech-bubble entities from demo to base game files.
  • Removed Introduction Campaign.
  • Removed Compilatron chest, Compilatron roboport, Compilatron logistic chest.
  • Removed Tutorial/Campaign Lualib (base/lualib).
  • Removed other campaign-only prototypes, such as styles, sprites, sounds.

Bugfixes


  • Fixed that thumbnails wouldn't show in the update-mods tab of the mods GUI. more
  • Fixed that LuaSurface::spill_item_stacks return value didn't work correctly. more
  • Fixed that the research progress of the current tier showed for next queued tier in the technology GUI. more
  • Fixed that the game didn't validate modded rail-planner item type values and would crash in some cases. more
  • Fixed that modded units with consider-tile-transitions in their collision mask would cause the pathfinder to crash. more

Modding


  • Empty layers in sprite or animation definition will yield an error now. more
  • Added support for playing a sound when using smart-pipette.
  • Added support for playing activate/deactivate sounds for night vision.
  • Added support for playing a sound while an resource-style is being mined through mining_sound.
  • Added mod-setting value "hidden" to hide mod settings from the GUI.
  • Added 'invoke-tile-trigger' and 'destroy-decoratives' trigger effects.
  • Added 'rotate-offsets' to the create-particle trigger effect.
  • Added 'trigger_effect' to tiles. It is called with the 'invoke-tile-trigger' trigger effect.
  • Added 'trigger_effect' to decoratives. It is called when the decorative is destroyed with the 'destroy-decorative' trigger effect.

Scripting


  • Added on_pre_script_inventory_resized and on_script_inventory_resized events.
  • Added 'allow_paths_through_own_entities' and 'no_break' path finding flags.
  • Added LuaModSettingPrototype::hidden read.
  • Added 'to_be_deconstructed' to the options for LuaSurface::find_entities_filtered. more
  • Added LuaGuiElement::badge_text read/write.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-04-24 06:53:57 CET ] [ Original post ]

Version 0.18.19 released

Bugfixes


  • Fixed a crash when loading saves from 0.18.12 and older while re-spawning and having personal logistics researched. more
  • Fixed offshore pump selection box to match the new graphics. more
  • Fixed possible performance issue related to animated trees in OpenGL rendering backend. more
  • Fixed opening the character GUI through hotkey when the logistic tab isn't visible. more
  • Fixed that curved rail ghosts selection didn't work quite right. more
  • Fixed that the offshore pump would play sounds even when it wasn't doing anything. more
  • Fixed wrong Lua docs for LuaCommandProcessor::add_command. more
  • Fixed a desync when personal logistics is researched while a player is disconnected from the server with personal logistics disabled. more
  • Fixed a crash when moving armors around in other players inventories in multiplayer. more
  • Fixed a regression issue with the select-a-signal GUI related to group ordering. more
  • Fixed that trying to load a save created from a scenario in a now disabled/removed mod would crash the game. more
  • Fixed a crash when trying to join games through Steam when the Steam API fails to initialize.
  • Fixed that the character corpse wasn't included in the post-player-died event 'corpses' parameter. more
  • Fixed that trains pathfinder could create non contiguous path in case of single segment cycle with a single train stop. more

Modding


  • Added warning for empty layers in sprite or animation definition. In next release, this will become an error. more
  • Added a check to make sure placeable_by.count isn't larger than the placeable_by.item.stack_size. more
  • Added support to play sounds when left clicking radio buttons and checkboxes.
  • Added ParticlePrototype::fade_away_duration and vertical_acceleration.
  • Rolling stock entities can no longer have next_upgrade set.
  • Added support for rotated_sound on entity prototypes.

Scripting


  • Fixed that LuaEntityPrototype::fluidbox_prototypes didn't include fluid energy source fluidbox prototypes.
  • Added LuaEntity::productivity_bonus, pollution_bonus, speed_bonus, and consumption_bonus read.
  • Added LuaGameScript::create_inventory() and get_script_inventories().
  • Added LuaInventory::destroy() and resize().
  • Added LuaInventory::mod_owner read.
  • Added LuaEntityPrototype::adjacent_tile_collision_box, adjacent_tile_collision_mask, adjacent_tile_collision_test, center_collision_mask read to access new offshore pump prototype properties.
  • Added "final-health" to the entity-damaged event.
  • Added "final-health" to the entity-damaged event filter.
  • Added LuaGameScript::max_force_distraction_distance, max_force_distraction_chunk_distance, max_electric_pole_supply_area_distance, max_electric_pole_connection_distance, max_beacon_supply_area_distance, max_gate_activation_distance, max_inserter_reach_distance, max_pipe_to_ground_distance, max_underground_belt_distance read.
  • Added LuaEntity::deplete().
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-04-20 12:00:10 CET ] [ Original post ]

Friday Facts #343 - Environmental particle effects

Read this post on our website.

Environmental particle effects (Dom)


Since the particle optimization we did for 0.18 (FFF-322) and the introduction of new explosions (FFF-325), we were able to push our vision even more. It always bothered me that the grenade and other explosions would emit the same type of particles regardless of the context. In most cases it isn't that bad, and somewhat okay, but when you throw a grenade into water, it will still emit stone particles, which breaks the illusion. Another problem is that we have the nice decoratives on the ground, but they don't really 'interact' with anything that goes on, and can feel like fake flat stickers instead of something 'real'. You would expect that when there is a massive explosion 2ft away, the bushes might have some reaction to that. https://cdn.factorio.com/assets/img/blog/fff-343-grenade-old.mp4 The explosion effect currently in 0.18

Specific tile effects


One thing we wanted was some way for tiles to respond to the explosions in different ways. The way Posila decided to add this capability, is through the 'Invoke tile effect trigger'. Tiles can define an effect that happens, and the explosion will tell the tile to create that action. After the implementation of this feature, it was smooth sailing from there. I was able to design the explosions like I wanted them, to be emitting specific particles based on their tiles. For example besides the visual improvement of the stone emissions in water, I was able to make the hazard concrete emit dark grey and yellow particles. https://cdn.factorio.com/assets/img/blog/fff-343-mosaic.mp4 We kept in mind that people might want to tint all the new particles for mods, so we kept everything as tint-able as possible. So a modder can just use our particle definitions and tweak the tints, for instance, if they want to add purple terrain. It's worth mentioning that the same goes for almost all the new particles (metal/stone/vegetation/blood/glass etc). Using the same sprites with different tints also helps us save some VRAM, as the game applies the tint during the render phase.

Decoratives


Posila also added the engine changes required to remove decoratives on impact, and for the decoratives themselves to create some particles on their destruction. This makes it feel much better when you see the explosion, because you see the decoratives reacting as if they were real, and it does not break the immersion in the game. It also helps to make the explosions feel a bit more powerful, at least powerful enough to blow over a bush. https://cdn.factorio.com/assets/img/blog/fff-343-grenade-new.mp4 The new grenade explosion, showing the new tile effect and decorative effects. The reactions are also based on the individual decoratives. So each individual decorative will emit a different set of particles, bushes will emit grassy vegetation particles, stones will emit stone particles, etc. We also use the same tinting system here, so a brown bush and green bush will have the same particle sprites, just tinted accordingly. There is of course the nice benefit of this to a lot of players, now that grenades can clear the decoratives, you can do some explosive cleaning of your precious prestine factory floors. https://cdn.factorio.com/assets/img/blog/fff-343-clearing-decoratives.mp4 A player clearing decoratives off their precious pathway

Minimal 'No base mod' (Klonan)


Bilka has spent quite some time in the last month working on a new 'mod' for the game. Well its more of a mod that allows the removal of the 'Base' mod. It has always been technically possible to run Factorio without the Base mod enabled, but anytime you would try you'd be hit by a bunch of missing prototype messages. Basically the game needs to have some minimum amount of prototypes defined to be able to launch properly. So Bilka's work will act as a foundation for other mods to build on, to help modders make true 'total conversion' mods, or just have fun with the raw Factorio engine. Of course enabling this mod and starting the game isn't very fun on its own.
Factorio, but there is no content For more details, please check out the detailed forum post by Bilka, and you can find the project repository here.


[ 2020-04-17 15:11:43 CET ] [ Original post ]

Friday Facts #342 - The new old tutorial

Read this post on our website. As stated in previous FFF's we will be making some changes to the demo and tutorial content in the game. I wanted to clarify exactly what is being removed and what it is being replaced with, as this content is almost ready for release. If you would like to catch up on the topic, you can read Kovarex's piece in FFF-327, but I will also summarize it here. Right now the NPE/Introduction is the scenario that is used as the demo (0.17) and as the tutorial in the full game (0.17 stable, 0.18 experimental). If anyone has played the tutorial in the last 12 months, this is probably what you have played. The First steps campaign was a series of three levels which used to make up the demo and tutorial in 0.16 and earlier. They were introduced in 2014. We have been working on revamping these levels to bring them up to 0.18 standards. Very soon the NPE/Introduction will be removed and the First Steps campaign will be reinstated, both as the full game tutorial and the demo.

What has been changed in the levels?


The plan was to change these levels as little as possible while updating them to modern Factorio standards. That is harder than it sounds given these levels were created in 2014. As stated in FFF-241, there were many things we felt were inconsistent in the First Steps campaign. One of the largest ones was that there were many different and confused channels of information. The newer version has given each channel a purpose and a format. The most distracting, and the most popular was the character monologues. Some of the messages in each channel were written in the first person, as if the character is talking to themselves. All the instances of this occurring in the Yellow speech bubbles and objective panel are gone or moved to the console. The rule here is that nothing that is actually necessary should come via this channel. To communicate to the player that this is story text, I added a speaker prefix.
The most necessary and most annoying channel was the Yellow speech bubbles. There are situations where it is absolutely necessary to pause the game and tell the player something. Since we have no other technology designed for this purpose, I just resorted to removing as many of them as possible. They only appear where necessary, although I would still like to get rid of more of them. The final channel is the Objective window. The rule here is, if the player tabbed through all the speech bubbles without looking, and did not read the story text, they should still be able to finish the level. The text should not be in the first person, and we can speak directly to the player. Due to much more rigorous and dedicated internal testing (Boskid), we caught a lot of corner cases where players can become stuck. The tutorials also now take into account new and updated game features. For example, previously the pickaxe was used to demonstrate crafting, so some extra attention had to be paid to when the player crafts the stone furnace for the first time. The maps have been updated to look much more like what the random generator creates in freeplay. The new remnants make a great impression here.
Now that the quickbar does not automatically populate, we had to be more careful about when the player has their inventory open. The new standard for new players is: open inventory, take item, close inventory, place item, open inventory, place remaining items, close inventory. Giving new players the option to add quickbar links as early as possible is a challenge because every time you add a new concept, the player must expend some of their attention keeping it in mind. Not only that, but using the quickbar actually removes a perfect opportunity for the new player to practice interacting with the inventory.

Why are we changing it?


Kovarex discussed his reasoning in FFF-327, but a lot of people asked me for more information to help them understand. Post mortems are uncomfortable but necessary so I will try to summarize his point and add one of my own. The NPE/Introduction was created to widen the audience of Factorio. It takes new players a long time to get into the game and many stop playing before 'getting it'. The strategy was to show new players (both in the demo and tutorial) more of the mid game. After finishing the scenario Kovarex realised that the experience was not in line with his vision for the game. When he told me how he felt, I think he was surprised that I agreed with his decision to remove it. Vision alignment is very important, especially in a demonstrator product. It isn't something you can just 'fix' when the project is almost finished. This is not to say that the NPE/Introduction failed in its goals. It did appeal to a wider audience and player feedback at the end of development was overwhelmingly positive. I received a lot of feedback from genuine first time demo players pledging to buy the game immediately and also from story focused, non-sandbox players who were craving more. But as Kovarex said in his FFF, the cost of this was too high. In light of the full length campaign being cancelled (see V453000s part in FFF-331), this is the biggest reason why I think the NPE/Introduction would have failed as a demo. We would have been offering an experience in the demo which was targeted to a wide audience, but the quest loving players were not going to get any extra content if they buy the game. A literal "It isn't what it says on the tin" situation. A full post mortem would be much longer than this, and I would have liked to discuss much more about the things that went right. On the up side, a lot was learned from this project and that can only make the game better in the future.

When is it coming?


The new old First steps tutorial is almost ready for release, we are still doing some general polishing and internal testing, and if all goes to plan, it will be released within the next few weeks. However that doesn't mean the work is necessarily finished, as no doubt we will need to tweak, polish and fix a lot more things as player feedback starts rolling in. Alongside this addition, we will also be removing the NPE, and doing a general cleanup of the now unneeded data changes. This may affect some mods which have dependencies on some new campaign assets. We might leave some assets in if they are significant enough (for instance the Compilatron), so if you are a modder and something in the NPE is of special interest to you, please let us know.


[ 2020-04-10 13:55:32 CET ] [ Original post ]

Version 0.18.18 released

Changes


  • Adjusted steam engine and turbine collision boxes so player can walk between two steam engines.
  • Roboports allow exporting both logistics and robot stats at the same time. more

Graphics


  • Added offshore pump remnants.
  • Added new dying effects for biters, spitters, worms, and spawners.

Gui


  • Added confirmation box for deleting blueprint book.

Sounds


  • New or updated sound effects include:
  • Transport belts - new concept for these sounds.
  • Turrets rotation sounds and fold/unfold.
  • Weapons improved and made more powerful, e.g. submachine gun, shotgun, gun turret, vehicle machine gun, Laser and electric beam.
  • Particles: Water splashes, Tree debris.
  • Various mix level tweaks including the train, enemies.
  • Attenuations (audible distance) adjusted for entities such as Pipe, Substation and Offshore Pump.
  • New sound when walking over ore patches.
  • Default Sound Settings Updated:
  • Music, Game Effects and Walking sound lowered, Environment sounds and Master Level raised.
  • Zoom audible distance and volume levels adjusted.
  • Maximum Environment Sounds increased (edited).

Bugfixes


  • Fixed mining entity with randomized mining result amount would never return the largest defined amount. more
  • Fixed crash when loading replay. more
  • Fixed reading LuaPlayer::entity_copy_source when the player is dead. more
  • Fixed that upgrading and delivering modules at the same time didn't work right. more
  • Fixed a crash when closing the game while some GUIs are shown. more
  • Fixed crash when setting max_group_gathering_time and min_group_gathering_time to the same value. more
  • Fixed discharge defense equipment had the wrong sprite in the equipment grid. more
  • Fixed that artillery wagons wouldn't show out of ammo icons. more
  • Fixed that modded cargo wagon colors wouldn't copy correctly through blueprints. more
  • Fixed furnaces with recipes using fluid ingredients could cause crash. more
  • Fixed a crash when removing a player that has modded associated character entities. more

Modding


  • Furnaces now ignore off_when_no_fluid_recipe property of their fluid box definition. Fluid boxes will not be disabled based on enabled recipes. more
  • Changed colored concrete tiles to be non-mineable.

Scripting


  • Added LuaEquipmentPrototype::automatic.
  • Added "include_entities", "include_trains", "include_station_names", and "include_modules" fields to LuaItemStack::create_blueprint.
  • Added LuaRoboportControlBehaviour::read_logistics and read_robot_stats
  • Removed LuaRoboportControlBehaviour::mode_of_operations
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-04-08 15:26:02 CET ] [ Original post ]

Friday Facts #341 - Audio, Artillery, Attenuation

Read this post on our website.

Sound design update (Ian)


One advantage of switching to home working during the COVID-19 crisis is the ability to listen to the game using speakers rather than headphones, and this has proved useful in balancing the relative levels of the game. Val has also been getting to grips with Lua, and this has led him to working on attenuations, which have been proving problematic. For instance, we noticed that sounds such as the radar were getting cut off when you walked away from them, rather than fading out cleanly. I investigated and discovered we had a maximum environment sound limit of 15, by raising this to 50 we have eliminated many of these problems. But then the downside is that there are now more sounds playing and therefore more clutter to mix and balance. Pink squares indicate which sounds are active.=
Limit of 15 nearby sounds.
Limit of 50 nearby sounds.
Rseding has been working through the list of sound design programming tasks, for instance we finally have the sound for the artillery turret rotation integrated into the game (which was featured in FFF-252 quite a while ago). https://cdn.factorio.com/assets/img/blog/fff-341-artillery.mp4 Real in-game footage of the new artillery sounds In other news, we have an updated concept for the transport belts. We listened to feedback from the community that they were still a bit too present and annoying. The idea of the new sounds is that they will drift into the distance a bit more and become unnoticed (until you try to fall asleep). More fun sounds include water splashes, electric and laser beams, more powerful weapons such as the gun turret and vehicle machine gun. And our old robot sounds have come back as additions. If all goes to plan, we will merge the sound changes into master very soon, and once we've done all our pre-release checks, release it to the 0.18 experimental. After that, I plan to spend time on UI sounds, and also balancing the overall levels to get them more in line with other games, which is trickier than normal given the lack of audio middleware. However we have also made some changes to the default sound settings that move us in the right direction.

Attenuation (Val)


Lately Ian and I were occupied with mixing and sound attenuation of the game. Attenuation of the sounds is a great tool for mixing a game. Using it you can make all sounds more located, take a certain place, you can clearly hear what object you are passing by, and sounds dont overlap each other as much. Another bonus is that reaching an object wont shock you with the full volume of its sound, as it is audible at a distance and ramps up in volume. All that brings you a clearer mix of everything you hear in the game. While checking the offshore pump and I noticed that pipes produced a small part of their loop when I walked near them, even if there was no water flow inside. https://cdn.factorio.com/assets/img/blog/fff-341-fluid-sound.mp4 The pipe is making a sound, even though no fluid is flowing Rseding told me that it must be a conflict of the entity working_sound in combination with the max_sounds_per_type we use to limit the number of certain types of sounds playing at the same time. After thinking a while, I decided to remove the max_sounds_per_type and added a audible_distance_modifier with a very small value for pipes. I tested that, and for my happiness it worked well in this case. There are probably another 100 little issues like this in the sound design, it is not as simple as replacing all the audio samples, and we are getting there. This is also why your feedback and bug reports on the sound changes are extremely useful to us, as we need to take care of as many areas as we can before 1.0 arrives.


[ 2020-04-03 18:35:30 CET ] [ Original post ]

Friday Facts #340 - Deep desyncs

Read this post on our website.

Not mentioning it would be weird


I really think everybody has heard all about this and nothing else over the last few weeks, but yes, the Coronavirus. For now, with Factorio, everything seems okay. We are all working from home, the team is still going, and so far we are following our plan quite well. We released the Character GUI and Statistics GUI last week, and some improvements such as new water splashes and leaf animations this week. Things are still moving along. However it is still early days, we haven't really had any experience having the whole team work remotely, so there may be some challenges we need to tackle as time goes on. At the moment we don't know whether this will affect our 1.0 release date, I guess it will one way or the other, but for now we aren't announcing any changes.

Business as usual


Apart from the development side still running, our e-shop is also remaining operational, and we have just restocked on all variants of our t-shirts. While we can't guarantee anything, if you order from us at this time, we should still be able to get your t-shirts to you.

Deep desyncs


Last week there we had quite a few more players than usual, and Krastorio 2 was released, which meant a lot more hours into a lot more areas of the game. During the week, Boskid and I received quite a few desync reports with mods. Generally we believe, that it is probably the mods causing the problem, as it is quite easy to cause a desync with the control scripting if you don't know some very important gotchas. But still, we decided to investigate to help the players find out which mod is causing the problems.

Serpent cyclic references


One quite tricky desync we found, is related to cyclic references, and the way serpent serialises the global Lua data. Take the example here of the Construction Drones mod. You have a player which dispatches the drones to go do work; the player needs to keep track of what drones he owns, and the drones need to remember which player they belong to.
Now this works fine during runtime, you can access the drone from the player object, and access the player from the drone object. When the game is saved, Serpent goes through all the data in 'global' and serialises it for later. To handle the cyclic references, if serpent detects that it has 'seen' an object already, it writes a placeholder value, and comes back to fix it later. The problem, is that serpent chose nil as the placeholder value. In Lua, writing a table value as nil is the same as deleting the key, and the key won't be seen when looping the table in the future. When serpent then goes back to 'fix-up' the placeholder values, it ends up with each peer saving a different table ordering (because of some even deeper technicalities with our custom version of Lua). So the problem is deep and was quite hard to find, but the fix is quite simple. Boskid simply changed the placeholder value from nil to 0, and now the iteration order is saved and loaded correctly every time.

Unit group max speed


Another report came in from a player using Krastorio 2 and Rampant mods. This one on the surface really seemed like the mods fault, since all the diffs in the desync reports were related to unit positions, and the Rampant mod is all about units. The desync was extremely fragile, and was very hard to reproduce, but eventually Boskid managed to narrow it down. This is a screenshot taken on the exact tick that the desync occurred.
What jumped out to me as immediately suspicious, is that the biter is only just moving onto the creep. This is because the creep (from Krastorio 2) gives the units a speed bonus when walking on it. I did a quick experiment by commenting out the tile bonus code in the engine, and the desync did not occur again. But of course removing the code here would only treat the symptom, and the cause will be something deeper (FFF-296). So with lots of patience, Boskid narrowed it down further and further, deep into the movement and unit behaviour logic. What we found, is that the unit is part of a unit group, and this group was caching the value of its 'max speed' based on the fastest unit in the group. However this value was not saved with the save game, but was recalculated each time the game was loaded. Since the unit was walking on creep, it has a higher max speed, so the group calculated a higher max speed when the game was loaded. Now this logic has been in the game since unit groups began, but it only became a problem more recently. In versions of Factorio 0.16 and before, a units max speed was always going to be based on its prototype, which does not change after the game is loaded. With version 0.17 we added 2 (really nice) mod capabilities:
  • Allowing units to be affected by tiles;
  • Allowing scripts to change unit speeds directly.
It didn't come up as a problem initially, as the freeplay base game doesn't really use these capabilities. Well every change has the potential to break things. Since we know the only 2 cases where the units speed can change, Oxyd made it so that the unit will notify the group to recalculate its max speed when it is necessary.


[ 2020-03-27 13:14:13 CET ] [ Original post ]

Version 0.18.16 released

Graphics


  • New water splash effects using water particles instead of an animation.
  • New animations for leaf particles.

Bugfixes


  • Fixed the tank not being properly centered to its bounding box (graphical issue).
  • Fixed GUI windows not drawing properly when they can't fit the screen width. more
  • Fixed glowing Heat pipe ending sprites. more
  • Fixed some character bonuses in bonus GUI not being printed correctly. more
  • Fixed character GUI player color sliders not changing chat colors more
  • Fixed that hotkeys wouldn't work while using the character logistics GUI in some cases. more
  • Fixed a desync related to unit speed changing while part of a unit group. more
  • Fixed some Trigger Effects not showing correct repeat count in tooltips. more

Scripting


  • Added LuaEntity::effective_speed
  • Added LuaControl::is_flashlight_enabled
  • The 'on_ai_command_completed' event will now fire for distraction commands.
  • Added 'was_distracted' to the 'on_ai_command_completed' event. If true, it means the completed command was a distraction command.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-03-25 17:19:10 CET ] [ Original post ]

Friday Facts #339 - Beacon HR + Redesign process

Read this post on our website. The beacon is one of the last entities left to convert to HR. As always, before 'just re-rendering' we take the chance to re-think the concept and modernize it. This post will try to go a bit deeper in the process of redesigning such an entity.

The old beacon



At the beginning of the project, the style of the game was less or more clear: nothing looks brand new. Everything looks dirty and DIY. The machines need to be full of details, if possible trying to explain its mechanics. The colors are provided by the raw materials. The bounding box is everything. And some other rules that I don't even remember now. The main handicap at that time was that we didn't have the experience of how the average player is composing the factories. So we produce a nice looking model but once it is placed in the factory, it doesn't look that nice due to the lack of context.

The process for the new beacon


The beacon is a very advanced late game entity. Usually placed very close to each other in long rows, horizontal or vertical. Its function is to provide extra power to other entities in its surroundings through the air. One of the main objectives for the redesign is not only a better coverage of the most common needs of the entity (shape recognition, working good in its context, and total integration in the world of the game) but also its expressivity. It would be really good to understand the use of the machine just by looking at it.
In this early sketch the main concepts are already defined. It needs to be a tower in order to transmit the effect. But the tower has to be transparent, otherwise it will occlude the other entities behind, creating a problem of readability. It has to look modern. That's why the conical shape with rounded windows. It reminds of a soviet space capsule. The blinking lights inside will help not only to look more technological, but also will help for visibility. Due to its normal usage in long rows, the plan was to create an extra tileset of cables connecting the beacons to each other. So the composition would look much more interesting and organic with the player moving under this network of beacons. The idea is cool and it works on paper, but once we get to work, we realise that it's needed to fill a square of 3x3 tiles. Once in the 3D viewport, this concept changes too much to not think of different solutions. Connecting the entities with cables. It looks like the beacons are interacting with each other creating a more powerful net of beacons, and this is sending the wrong message.

Save the good stuff and solve the problems in a new version


The main problem was the need of stuffing the tower in a squared area. This rule of the collision box forces every entity to be some sort of a blocky box on top of the ground, always, and for this entity we really needed the tower.
To solve this issue a new concept appears: Let's create a hole in the ground that covers the collision box area, and build the tower inside. It looks higher than what it really is, and the occlusion with the tiles behind is in the acceptable limits. [table] [tr] [th]
[/th] [th]
[/th] [/tr][/table] The beacon looks modern, colorful, tall, high tech, and integrated in the world of Factorio. It even solves the collision box issue and is easy to recognize from afar. But it has something wrong: it doesn't work fine in an array, and the center of the entity is too complicated. It creates a chaos of pixels that is hard to see, especially when overlapping with another beacon vertically.

A better beacon


To solve the ultimate complication for the array situation, a few changes are relevant to do. Cleaning up the center of the entity in a way that works as a background with himself when overlapping in vertical (or any other tall entity, like a pole).
In the so common array situation, it's going to be really nice seeing the beacon with some variations. This will make it look more natural, and pleasant to the eye. We would like to use this sort of variations for every entity, but the amount of work and VRAM needed would be just insane.
This is still a work in progress. Right now Im working on the animation of the beams. Im trying to make it much more subtle, because the way it is here it calls too much attention and saturates the screen very easily. [table] [tr] [th]
[/th] [th]
[/th] [/tr] [/table] The layer of the beams and the light will be separated and tintable in a single spritesheet. Probably the yellow rounded light also. It will be available for any modder to make a modified beacon just by changing the RGB values. There are many things I didn't say about this process of redesign, but I had to keep them out because this post is already very long. I hope it was interesting to you.In future releases, very soon, youll be able to play with it.


[ 2020-03-20 13:06:57 CET ] [ Original post ]

Version 0.18.14 released

Gui


  • The production statistics and electric network GUIs now have a new look.
  • The kills GUI (K keyboard shortcut) has been removed. Kills statistics are now accessible as a tab in the production statistics GUI.

Bugfixes


  • Fixed an issue with nested items in items. more
  • Fixed Character GUI missing logistics tab due to missing technology migration. more
  • Fixed Character GUI recipes constantly scrolling up when crafting or when inventory changes. more
  • Fixed that simple mouse click on double slider button would not set a slider as active. more
  • Fixed that tabbing out of empty high value textfield of double slider would reset it to 0. more

Scripting


  • Removed the defines.gui_type.kills value from defines.gui_type.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-03-18 17:37:26 CET ] [ Original post ]

Version 0.18.13 released

Gui


  • The character GUI now has a new look.
  • Personal logistics has been moved to a separate tab. Logistic requests and auto trash have been merged into one panel.
  • Using quick inventory transfers in the player inventory of the character gui will transfer the items either to weapons and armor slots or to trash slots depending on the selected tab, regardless of item type.
  • Updated the look of filter, item and circuit signal selection GUIs.

Changes


  • Personal logistics are now unlocked by a single research. This unlocks personal logistic requests and auto trash(unlimited count), plus 30 character trash slots.
  • Removed the restriction of not allowing to have two identical blueprints in the blueprint library or blueprint book.
  • Allowed to delete blueprint/books/upgrade planners/deconstruction planners also when opened in other inventory.
  • Removed the utility slots (to create blueprint, book etc) from blueprint library as it is now available directly through quick tools menu.
  • Allowed to edit blueprints in the blueprint library the same way as when it is an item.
  • Allowed to export blueprint books in blueprint library (it was only possible in inventory before).
  • Allowed to choose whether train fuel should be included in a blueprint.

Bugfixes


  • Fixed that 3rd last row of 4th sheet of gun turret shooting had duplicate frame. more
  • Fixed desync when changing recipe that was outputting large amount of fluid per crafting cycle to recipe that outputs low amount of fluid. more
  • Fixed sprite button would not respect draw_shadow_under_picture style property. more

Modding


  • Added main_menu_background_image_location to utility constants.

Scripting


  • Removed LuaStyle::extra_padding_when_activated read/write.
  • Added LuaStyle::extra_top_padding_when_activated, extra_bottom_padding_when_activated, extra_left_padding_when_activated and extra_right_padding_when_activated read/write.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-03-17 16:24:46 CET ] [ Original post ]

Friday Facts #338 - The (real) Character GUI

Read this post on our website.

The Character GUI (Twinsen)


It was 11 months ago when we first mentioned the new Character GUI, in FFF-289. After all that time, it's finally getting ready. Since you can expect to see it released sometime in the next 1 or 2 weeks, we would like to present a quick recap of the features and changes, and some real in-game screenshots. The Character window is now split into 3 tabs. Logisitcs and auto-trash were moved from the central frame into a tab and a new tab called Character was added. Using inventory/stack transfers in the player inventory will transfer the items either to weapons and armor slots or to trash slots depending on the selected tab, regardless of item type. https://cdn.factorio.com/assets/img/blog/fff-338-tabs.mp4 Logistics and auto trash are now merged into 1 panel. Using a double slider you can set an interval. If you have less than the first value, robots will bring more, if you have more than the second value, extra items will be auto-trashed and taken away by the robots. The double pop-up and extra confirm might seem strange, but it's made this way to solve the problem of robots bringing you items before you finished setting up your request. https://cdn.factorio.com/assets/img/blog/fff-338-setting-filters.mp4 With the merging of requests and auto-trash, we also made it so you can now set an unlimited number of requests, regardless of research. Furthermore, everything is unlocked in one research: unlimited logistic requests, auto trash, and 30 trash slots are all unlocked by the "Logistic robotics" research that is at blue science. Searching now not only searches the recipe GUI, but also the inventory and logistic requests. https://cdn.factorio.com/assets/img/blog/fff-338-search.mp4 By popular demand, we also added a switch to quickly turn personal logics on or off. Turning off personal logistics will stop logistic robots from bringing requested items. It will also stop items from automatically being moved to the trash slots. Logistic robots will continue to empty the trash slots. https://cdn.factorio.com/assets/img/blog/fff-338-toggle.mp4 Since the recipe GUI has a new style, we also updated the look of the filter, item, circuit signal, and upgrade selection GUI styles. Some of the other GUIs in the game will have some visual issues due to the mix of old and new styles. My next step will be to fix these issues as soon as the Character GUI is released. Looking back, this GUI took 13 months and 3 programmers (working alternatively) to implement. This is excluding mockups and UX design. It's a long story, but one thing that's obvious is that the GUI scope has grown far beyond what our codebase is capable of. For this reason, we won't be focusing obsessing that much on the GUI in the future. We will finalize the transition of styles, fix obvious issues and low hanging fruits, and try to get everything at a consistent level of quality for 1.0. This new Character GUI and changes will likely affect some mods, especially those relying on logistic technologies, logistic slot related APIs, old style definitions, etc. Thankfully a lot of mods will be unaffected, so we hope it won't be too much disruption. Still, we wanted to give some forewarning.

Community spotlight - Krastorio 2 (Bilka)


Over the past two weeks, an overhaul mod called Krastorio 2 has been going through closed alpha and beta testing. Krastorio 2 is an overhaul mod that aims to provide a vanilla-style experience with an expanded post-rocket game and updated recipes. The mod will be released later today, so I wanted to take the opportunity to spotlight it.
My factory, grown over the two weeks of testing, showing off the custom mod graphics. Click to view full resolution The mod changes almost all recipes without introducing many intermediates, making it close to vanilla while still being a new experience. One of the bigger changes is that late-game technologies do not require the starting tech cards (science packs). Combined with the tech cards mostly needing intermediate products, you can reroute the ingredients of the tech cards into other production as the tech cards become obsolete.
Post-rocket tech cards are consumed in the lab area on the left in the image, the pre-rocket tech labs stand disused in the bottom right. The biggest feature of Krastorio 2 is that it adds a significant amount of content beyond the rocket launch, including a new win condition. After automating rocket launches there are three more tech cards waiting to be researched, two new resources waiting to be harvested, and many more useful items to be crafted. All that production and the win condition take a significant amount of power but thankfully the mod adds an effective power generation option to fulfill the factory's needs.
Fusion power All in all, the mod can be described as a great mix of updated recipes and fresh mechanics that are kept in line with vanilla. This means that the mod is not as overwhelming as overhauls that really focus on certain mechanics such as many additional resources, fluids or intermediates. Instead Krastorio 2 strikes a great balance between old and new. The mod has many more features that I did not mention here; so if I made you curious, check out the mod for yourself and have fun playing!


[ 2020-03-13 13:40:50 CET ] [ Original post ]

Version 0.18.11 released

Graphics


  • Fixed player character shadow didn't animate in idle state when not facing north.

Bugfixes


  • Fixed that LuaEntity::splitter_filter would reject a LuaItemPrototype. more
  • Fixed smart entity collision mode in tile editor did not work with offshore pump. more
  • Fixed that modded shortcuts that spawned items not visible in the blueprint library didn't work. more
  • Fixed that technology tooltips didn't show debug tooltip data the same as other tooltips. more
  • Fixed that crafting machines would report as supporting backer names through the Lua API. more
  • Fixed that un-researched recipes couldn't be used while in the map editor. more
  • Fixed that the removed-content GUI didn't include some translations. more
  • Fixed a desync related to invalid rail signal requested to be closed by circuit network. more

Modding


  • Added InserterPrototype::chases_belt_items. more

Scripting


  • Added LuaEntityPrototype::inserter_chases_belt_items read.
  • Added surface to the selected-area events.
  • Changed LuaSurface::spill_item_stack() to return the created entities if any.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-03-10 18:22:45 CET ] [ Original post ]

Friday Facts #337 - Statistics GUI and Mod Debugger

Read this post on our website.

Statistics GUI (Klonan, Oxyd)


The statistics GUI (electric network stats, production stats, etc.) is one of the GUIs that has been in the game for a very long time, and has had its functionality fleshed out reasonably over the years. It was not long ago when Twinsen added hovering and highlighting to the graphs. Given that, and the relatively short timeframe for 1.0 release, the update of the statistics GUI has really just been a style update, no new features or heavy logic rewriting. Oxyd has most of the work done, so we are happy to show some real in-game screenshots of how it looks:
A notable change with the electric stats is that the Satisfaction/Production/Accumulator charge are next to each other in a single row, as opposed to each in a separate row. The label for the exact amount has also been moved to inside of the progress bar, which itself is much thicker.

The production stats are pretty much the same functionality wise. One new button you might spot is the search button.
However there are some problems with the search feature. As you can see, production and consumption frames have a different search box independent from each other. The main problem is when pressing CTRL+F to perform a regular search: How do we know which frame to open? Of course this could lead to different solutions like the use of a cycle for the focus of the search, in which the second time you press CTRL+F the other frame gets the focus. Or both of the search boxes open at the same time but only one gets the focus. Or only one frame gets the focus and the other one works only by pressing the button. But let's face it, these "solutions" are not solid at all and create inconsistency in the main design. To solve this issue we decided that the simplest way to go is the use of just one search box on the header of the panel. This new location works as a general feature for the entire panel. One single search gives you 2 results, one on each frame. This solution is used in the new character window -to come soon- making it consistent with the whole design of the GUI.
You can also see we took this opportunity to integrate the Kill statistics in with the rest, instead of being its own window with its own hotkey. The Statistics GUIs will need a few tweaks and polishings here and there before it is ready for release, but unless something unexpected happens you can expect it coming out in a release soon.

Community spotlight - Mod Debugging and Instrument Mode (justarandomgeek)


This topic is a guest post by our community member and mod maker justarandomgeek. Historically, while developing Factorio mods, you just had to write some code and try it, until you get one of these:
Then you go back and find that spot in your code and try to figure out what went wrong. If the error is particularly confusing, you start sprinkling log() or game.print() around to try and figure out what the heck is going on. And, of course, when you find the problem, you inevitably forget to clean all of these up, and now you're spamming the log or chat forever.
Well there's your problem! Perhaps a bit constructed... For the last few months I've been working on a debugger to improve this experience. The first step was to spend some time with the Lua debug library and VSCode's Debug Adapter Protocol making introductions to get them talking to each other. Factorio doesn't give me many options, but Lua's debug.debug() and print() functions are enough to interact with the (normally invisible) console. VSCode can launch Factorio and attach itself to this console to inject commands as needed to read and manipulate the state of the running code. This gets us VSCode's debugger interface, with all the pre-built tools for displaying variables, setting breakpoints and stepping through code. Wrapping some of the game's APIs like remote.call() and most of script to add a little extra special handling, we get nice labels on event handlers in the call stack and a first version of break-on-exception for when things go wrong. I even built some nice detailed variable views for the most common LuaObjects:
But there's a catch, and it's a big one: because of the way Factorio sandboxes mods, the debugger (which is itself a mod, in part) can't actually get to your mod to install all these hooks! The first solution to this is to simply add a line to load the debugger, but this puts us right back where we started with log() - you put something in for debugging and forget to remove it. To solve this problem we need a little help from the API, a way for a mod to hook every other mod. Unfortunately, this level of hooks is too powerful of a capability to be generally available to mods, so it can't really be added to the normal mod API (it allows you to fairly trivially break nearly all assumptions about data lifecycle and mod sandboxing). After some discussion with Rseding, we eventually arrived at Instrument Mode (released with 0.18.10), a special mode which allows a selected mod to hook all the Lua instances Factorio creates, at the cost of disabling multiplayer and only allowing one Instrument at once. This also provides a hook for a better version of break-on-exception. This gets us all the way to the rich debugger experience: When you run under the debugger, all loaded mods automatically get debug hooks installed for the session (but not permanently), and you can step through the code and examine all your variables! While I was building tools, I also added some highlighters for locale and changelog files, and validation for changelogs:

And of course, it's a game about automation, so we need some modding workflow automation too:
Modders, please give it a try and let me know what you think!


[ 2020-03-06 16:22:02 CET ] [ Original post ]

Version 0.18.10 released

Graphics


  • New offshore pump graphics.

Changes


  • Removed the sound effect from the console-only electric-energy-interface.
  • Item localised name takes priority over place-result localised name when showing item's tooltip. more
  • Offshore pump is now buildable on ground tile adjacent to water instead of water tile adjacent to ground.

Bugfixes


  • Fixed that the map generator GUI didn't reset to the correct defaults when changing presets. more
  • Fixed blueprint window sizing for wide blueprints.
  • Fixed some cases of not considering dark background icon when drawing alt mode overlay. more
  • Fixed that burner generator idle_animation and animation could have different frame counts.
  • Fixed icons with overlays were drawn incorrectly when used in sprite widget. more
  • Fixed crash when loading map after removing fluid recipes with indexes. more
  • Fixed spitters would not break from attacking an obstacle when the obstacle moved away. more

Modding


  • Added Instrument Mode to support mod development tools.
  • Added optional burner generator prototype properties always_draw_idle_animation, performance_to_sound_speedup and min_perceived_performance.
  • Added optional offshore pump prototype properties min_perceived_performance, adjacent_tile_collision_box, adjacent_tile_collision_mask and center_collision_mask.
  • Changed offshore pump graphics definition. Old definition will still be accepted, but is deprecated.

Scripting


  • Added optional parameters daytime and water_tick to LuaGameScript::take_screenshot() function.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-03-03 14:50:19 CET ] [ Original post ]

Friday Facts #336 - Offshore pump redesign

Read this post on our website.

Offshore pump redesign (V453000, Albert)


As one of the last entities which do not have high resolution graphics, the time has come for the offshore pump. The offshore pump is practically a 1-tile entity, but they must have a 1 tile gap between each other. It is also the only entity placed on a water tile at the moment. When we changed the way how terrain to water transitions work, we moved the offshore pump to be placed on the water tile. This can result in the pump drawing over terrain in ugly ways.
With the redesign, we took the oppourtunity to move the offshore back onto land, and additionally the pump checks a 2x3 tile water area in order to be buildable.
The new placement rules only applies to newly built pumps. Offshore pumps on existing maps will keep functioning, theyll just be shifted out from the shore. There is no blue colour for water integration at the tip of the offshore pump, so the offshore pump will look correct even with unexpected water types (not a big problem in vanilla). The water integration is split to an underwater layer which does not show when the pump gets landfilled over.
In the basic concept, the offshore pump is another type of a pump, so it should be similar to the other pump entity Albert made a few years ago, including the animation and visible fluid in it. The obvious difference is the connection to water. However we felt that is not different enough and needs more visual balance, so we added a pair of supportive legs. https://cdn.factorio.com/assets/img/blog/fff-336-offshore-pump.mp4 We are planning to release the new offshore pump graphics with the next release, likely next week.

Mod spotlight - Built in beacons (V453000)


Beacons strongly motivate building in rectangular repeatable patterns. The results generally look clean, but also very predictable and boring. Furthermore, the differences between different recipe builds are only minimal, so the visual difference between builds is minimal.
The issue is, I like to build the opposite of clean and predictable. The factory looking increasingly complicated and harder to expand over time is what keeps me engaged to continue playing a map. When it starts looking easy, I lose interest. Ive been trying to solve this for myself by either restricting myself from using Beacons (which is a massive sacrifice of productivity and speed), or by putting the sub-factories with high Beacon counts outside of the starting area, as keeping the organic starting area is key for me.
Eventually I thought about creating a mod that makes machines behave as if they had the maximum possible amount of beacons around them - allowing me to upgrade the starting base, but that also causes higher demand on the throughput of logistics, which the most interesting part - snaking more belts, fitting in more rails.
The mod defines 3 tiers for every producer to simulate beacons with tier 1, 2 or 3 of Speed modules in them. These machines cannot be further affected by normal Beacons and only accept special productivity modules defined by the mod.
Creating the mod was a ton of fun. I rewrote it about 3 times as I was learning how to do it better. I hacked together some basic graphics for it from some special passes (height and Ambient Occlusion) that we use for postproduction in our gfx workflow. I played with the mod and got some interesting results (imgur album) as I was able to continue building in the starting area instead of refactoring it for Beacons. [url=https://cdn.factorio.com/assets/img/blog/fff-336-base-preview-alt-smaller.png]
Click to view full resolution Lastly, I wrote a timelapse-screenshot tool. It can either be used by taking a screenshot each N ticks automatically, or in my case I give it a folder with savegames and it takes X number of screenshots, then moves to the next savegame. It's quite crude so I won't release it on the mod portal for now. [previewyoutube=AoxfGev36ms;full][/previewyoutube] Making Beacons disappear into producer machines to allow for more organic bases fits my perverted playstyle, but Beacons actually do bring a lot of interesting motivations to the base game, and it can be a lot of fun to mess with the building rules that Beacons force. You can find the mod on the mod portal if you are interested.


[ 2020-02-28 10:00:39 CET ] [ Original post ]

Version 0.18.9 released

Features


  • Added Rocket rush scenario. more

Changes


  • Changed Team production team joining system and cleaned up the map sets.
  • Changed Wave defense bounty system and refactored unit spawning logic.
  • Changed fire sticker to deal damage only once per 10 ticks.

Graphics


  • Added big scorch mark which is now used by atomic rocket and nuclear reactor meltdown.

Bugfixes


  • Fixed that fluid energy source effectivity was not shown in the tooltip. more
  • Fixed that the default column ordering in the update-mods GUI didn't match the visual ordering. more
  • Fixed that train could accelerate for one tick into wrong direction when train stop is disabled. more
  • Fixed that minimap would not allow setting temporary train stop when train would have to change movement direction. more
  • Fixed damage value in sticker tooltip was 60 times too small.
  • Fixed icons with overlays were drawn incorrectly when used in rich text. more
  • Fixed PvP error when DEFCON was active alongside normal labs. more
  • Fixed that modded recipes with no products or no ingredients still showed those sections in the recipe tooltip. more
  • Fixed that modded burner generator equipment didn't show pollution in the tooltip. more
  • Fixed teleporting or changing the force of an entity with a control behavior that was connected to the logistic network. more
  • Reverted optimisation that caused inserters picking up items from belts to be slower.

Modding


  • Added support to filter on-damaged trigger effects through the trigger prototype definition.
  • Added secondary_draw_order property to simple-entity prototypes.
  • Added StickerPrototype::damage_interval, defaults to 1.

Gui


  • Updated the window of creating/editing blueprint.

Scripting


  • Added LuaTile::surface read.
  • Added event filtering support to on_sector_scanned and on_entity_cloned.
  • Added "original-damage-amount", "final-damage-amount" and "damage-type" filters to the on_entity_damaged event filters.
  • Added LuaGameScript::is_valid_sprite_path().
  • Removed the required argument from LuaEnity::to_be_deconstructed() because it did nothing.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-02-25 12:39:58 CET ] [ Original post ]

Friday Facts #335 - Scenario changes, Damage effect filtering

Read this post on our website.

Team production changes


Improving the Team production challenge was prompted by this Reddit post. Team production was made back in 2016 to test the multiplayer networking of the 0.14 update with a larger number of players without the overhead of having a large factory. Since then it has not really had much love. So after 4 years of accruing wisdom, I started making some general improvements.

Choose your teams


I think this is one of the main suggestions people had for team production. The scenario just shuffled the players and assigned people randomly, and you could end up all alone playing against your two best friends. Now I believe anybodies first choice would be to add a GUI to handle this. I will go on about GUIs later, but short story is, I didn't want to add a GUI. They add a lot of complexity, and my development mood these days is to keep things simple and small in scope. So I added little colored launchpads!
I think it is quite intuitive, you will instantly be able to see which team has which players, you will see what map position you will be in when the round starts, etc. Another benefit is that if you want to spectate, you can simply just not walk onto a launchpad, and use the map view to see what's going on (before, there was a button you would press to join the spectators team). The idea to use tinted concrete came from Albert, as originally it was just a tinted square rendering over the tiles (which didn't need any new prototypes defined) and it looked very janky. A consequence of this is that we now have colored concrete tiles in the game. There is no item available to place color concrete, but players will be able to access them in the editor mode.

General cleanup


This is the not so glamorous but still important polishing we need to make. Things such as fixing GUI styles, switching the loaders to stack inserters, making sure the map sets are making sense, etc. I also spent some time making the challenges more predictable, the logic before could give a lot of variance to the difficulty of the production objectives, and make things hard to balance. One problem I see in the future, is that the production challenges are 'hardcoded' for the base game. If I find some more time later I might work on a system to more procedurally create the objectives.

Wave defense changes


I was inspired by some comments a few weeks ago, saying that the Wave defense scenario was a bit of a pushover, especially with a couple of players working together. So I thought an easy adjustment would be to scale the 'wave power' somehow to the number of players. It was a simple change and we released it with 0.18.4 a few weeks ago. Jobs a good'un right? Well after play-testing it more extensively over the weekend, I realised it wasn't quite so simple...

More biters; more money


A major problem is that the players earn bounty for every biter that it killed. So if I make the waves bigger, then the players earn so much more money, and can buy so many more upgrades, that the scenario is even less challenging than before. The solution to this is quite abrupt, I just remove the bounty from the units, and this makes the design work better in my eyes:
  • Bounty is only earned from spawners and worms.
  • You can't sit inside your walls and earn money for upgrades; You need to actively go out of your base to earn upgrades.
  • Players could set up infinite money farms by spawn camping the biters; This is no longer possible.
A consequence of this is that the upgrade prices and bounties needed to be rebalanced, which was actually a little bit easier since the number of spawners and worms is way more predictable.

Predictable attack locations


I also noticed that biters spawning would always hit the base defences at the same places very reliably. This is great if you are the player and only want to invest 1 flamethrower turret to repel all the attacks. https://cdn.factorio.com/assets/img/blog/fff-335-waves-before.mp4 So I added an extra command to the biters orders, that tells them to first go to a random point within the base, and from there go and attack the silo. This means that the positions where biters intersect your defences will be less predictable. https://cdn.factorio.com/assets/img/blog/fff-335-waves-after.mp4

More wave power; same wave size


Another observation I made is that even though I increased the 'wave power', the number of biters was still being limited by the number of nearby spawners. This was due in part to a mix of me being clever with optimization and wanting to not make the groups too big. In short the spawning would work something like this:
  • Determine the wave power, bases on factors such as wave number, player count, difficulty.
  • Determine how many spawners we spawn from, something between 4 and 15 typically.
  • For each spawner, pick a random number of biters to spawn, between 20 and 30.
  • Spawn the biters, and remove their 'cost' from the wave power. If we have no more wave power we stop.
  • Once we have gone through all spawners, we are done (even if there is a lot of wave power left).
The problem here, is that we are constrained by the spawner count and unit count. Even if wave power was 10x higher, the logic could still just decide to spawn 50 small biters from 4 bases and call it done. Well okay I was a clever boy, and now lets remove all this complicated logic and keep it simple:
  • Determine the wave power, bases on factors such as wave number, player count, difficulty.
  • Determine how many spawners we spawn from, something between 5 and 20 typically.
  • Divide the wave power by how many spawners we have.
  • Keep spawning units at the spawners until all the wave power is used up.
This way, if we have 10x more wave power, no matter how many bases we spawn from, the wave will be 10x more powerful.

Infinite map option


I had a few requests for this, and it wasn't so hard to add. If enabled, the Wave defense map will be infinite instead of an island, and the only way to win will be to launch a rocket.

New scenario - Rocket rush


Adding a new scenario at this point of development is a surprise to be sure, but hopefully a welcome one. The concept for this is that you are on the 'space platform', and you are preparing to land on the surface, and once on the planet you need to launch a rocket as fast as possible. You start with all technologies unlocked, and some money to buy starting equipment.
Once you and your friends are prepped, you head down to the launchpad to start.
And then that is pretty much it, you get teleported to the surface, and play the game as usual. We can afford to add this scenario because it is so small in scope and so simple, and it took less time to make this new scenario from scratch than updating what we already have. Maybe it is not the best thing since sliced bread, but I am hoping that my small investment of a few weekends will at least give some players a few more hours of enjoyment. I would be interested in adding more 'small scope simple scenarios' in the coming months, if we have enough time. If you have ideas that might fit this definition, please let me know (but no promises).

Damage effect filtering


It is the classic problem, we optimise a system so its 5x faster, and then we use it 5x more. This time it is the case of flamethrowers and particles again. With 0.18 we added the damage effects for entities, and we generally like the way it works. However when this is combined with flamethrowers, we encounter some problems. https://cdn.factorio.com/assets/img/blog/fff-335-biter-damage.mp4 First you might say, "It doesn't make sense that a burning biter will spurt blood", and I would agree. Second you might say "That is a lot of blood", and I would agree with that too. In fact it is 1,416 damage events worth of blood particles. The way flamethrowers currently work means they do a small amount of damage very frequently, in contrast to say a grenade which does a high amount of damage in a single action. Even with all the particle optimizations, the performance would once again suffer due to the sheer quantity of particles being created. So Rseding has gone ahead and killed 2/3 birds with 1 stone, and added damage type filtering to the entity damaged and entity died trigger effects. This means for our immediate problem of bloody burning biters, we can just filter the damage effect to not occur if the damage type is fire, which solves it perfectly. In the longer term the benefits are even greater, as we now have the capability to for instance, make custom dying effects for being run over, or damaged by laser, or dying by poison etc. Well that solves half the problem, but still, 1,400 damage events is still going to cause problems in other cases. A big part of this comes from the 'fire sticker', which applies damage every single tick. Since it lives for 30 seconds, that is 1,800 damage events. So a nice easy change posila has done, is to add a 'damage interval' to the sticker, so that damage is only applied every n ticks. For now we have set the fire sticker to do 10x the damage, but only every 10 ticks, reducing the number of total events for the sticker from 1,800 to 180, a lot more reasonable. (Note, changing this frequency can affect the damage balancing, as the resistances system in Factorio has an absolute reduction and a percentage reduction. In our case, the entities affected by the fire sticker had no absolute fire resistance, so the result is the same.) All the changes you see here should be released soon, we are in a rhythm now of doing 1 release every week (typically on a Tuesday), and everything you see here is pretty much done (but anything can change!).


[ 2020-02-21 14:54:27 CET ] [ Original post ]

Version 0.18.7 released

Graphics


  • New visuals for poison capsule effect.
  • New dying effect and remnants for flying robots.

Sounds


  • Entity destroyed alert - Sound softened and lowered in volume.
  • Weapon sounds (WIP) - new Pistol, Submachine gun, Gun turret, Laser turret.
  • Logistic chests open sound (WIP).
  • Poison capsule cloud (WIP).

Bugfixes


  • Fixed that reordering heat buffers during the same tick a different heat buffer was built would leave the heat buffer state corrupted. more
  • Fixed that entity sounds with probabilities would loop forever once they started playing. more
  • Fixed rocket silo tooltip did not include contents of the rocket result inventory. more
  • Fixed that styles were applied to wrong slot in a filtered train view. more
  • Fixed that server authentication would fail if both the token and username and password were provided. more
  • Fixed that changing inserter pickup/dropoff through mods didn't work correctly. more
  • Fixed that combat robots had their fire resistance overwritten. more
  • Fixed that rolling stocks were not pulled correctly when train was moving through curved rails. more
  • Fixed that LuaEntityPrototype::burner_prototype didn't work for the burner-generator entity type. more
  • Fixed janky construction robot flying animation during repair work. more

Scripting


  • Added optional LuaItemStack::build_blueprint raise_built.
  • Added LuaInventory::find_empty_stack(), count_empty_stacks(), and get_insertable_count().
  • Added LuaEntityPrototype::heat_energy_source_prototype, fluid_energy_source_prototype, and void_energy_source_prototype read.
  • Added LuaGameScript::encode_string() and decode_string().
  • Added on_player_set_quick_bar_slot.
  • Added on_pre_player_toggled_map_editor.
  • Removed LuaPlayer::name write. more
  • Removed core lualib util.encode() and util.decode().
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-02-18 16:16:31 CET ] [ Original post ]

Friday Facts #334 - New poison cloud animation, flying robot dying effect

Read this post on our website.

Poison cloud (Ernestas, posila)


The poison cloud animation is a placeholder spritesheet (that kovarex found somewhere on the internet), we have wanted to improve it for a long time, but since it was always such a small detail other things took priority. Well now is the time to finish everything, big and small. https://cdn.factorio.com/assets/img/blog/fff-334-old-cloud.mp4 Some of the problems we see with the old placeholder animation:
  • The edge (where damage will apply) is not clearly defined
  • The center strongly obstructs vision underneath the animation
  • It breaks the perspective/height illusion with its very circular shape
The new animation was done quickly and without the need of any large changes to the Factorio engine. This is the mindset we are in these days, use the engine features we already have to finish things quickly and without trouble, and we try to stop ourselves going crazy with more detail. https://cdn.factorio.com/assets/img/blog/fff-334-new-cloud.mp4 The smoke capsule itself spawns a bunch of smaller dummy entities which do the smoke drawing, while the damage is kept consistent by only using the central smoke cloud to apply damage.

Flying robot die effect (Dom, Klonan)


Unlike the poison cloud, the flying robots dying was never something that we felt strongly about changing, they just exploded and poofed out of existence. With the new particle system we had an idea of using a particle to show the robot falling to the ground. The experimentation was quick and effective, and we liked the effect. Using the 16 directions of the flying robot sprites, we can create a 16 frame animation of the robot spinning for free, which is a good trick. https://cdn.factorio.com/assets/img/blog/fff-334-robot-dying.mp4 To complete the effect we needed to pay a bit of a price by creating some remnants on the ground. Dom didn't take long to model and render 3 remnant variations for each robot. Even if you don't see the robots falling and dying actively, the corpses on the ground can really add to the battlefield.
These new effects have been merged in our master branch now, so you can expect to play with them with the next 0.18 experimental release, likely early next week.


[ 2020-02-14 17:07:37 CET ] [ Original post ]

Version 0.18.6 released

Bugfixes


  • Fixed a crash related to multiple blocks reserved for different trains but later merged by placing a rail. more
  • Fixed that construction robots were missing their working animation. more
  • Fixed circuit network debug visualization text overlap. more
  • Fixed the circuit network tooltip backgrounds didn't highlight correctly. more
  • Fixed that script.active_mods wouldn't be accurate when loading save files in some cases. more
  • Fixed that the sync-mods-with-save feature would try to download mods it didn't need to in some cases. more
  • Fixed that trains pathfinder could create non contiguous path in case of single segment cycle with a junction. more
  • Fixed possible crash when units were attacking rails with train on them. more
  • Fixed pump would consume energy and play animation when it tried to transfer very small amount of fluid but failed to do so. more
  • Fixed creating fire entity by trigger effect invoked by a particle would crash the game.
  • Fixed overriding LuaSurface::brightness_visual_weight would cause light map to appear in map view. more

Scripting


  • Building entities with from items with 0 health will set the entity to 1 health instead of 0. more
  • Added LuaGameScript::reset_time_played() which will reset the 'Time played' to 0.
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-02-12 15:53:36 CET ] [ Original post ]

Friday Facts #333 - Terrain scrolling

Read this post on our website. Hello, We released 0.18.4 this week, same old same old, more bugfixes, more bugs, more changes. At this stage of development, not many interesting things are happening, we are just polishing what we have.

Minor terrain render optimization (posila)


Just a couple days before the release of 0.18.0 I had an epiphany about a terrain rendering problem that was bugging me for a really long time. When rendering terrain, we reuse the texture from the previous frame. How this was always done, is that we would render the texture shifted to the new position, fill up the gap, and then copy the final result back into the texture for reuse in next frame. So what was bugging me about this? This simple operation would result in rasterizing 2 screens worth of pixels. While that is not a problem for at least half decent GPUs from the past decade, it's a significant work load for integrated GPUs, which in general have an order of magnitude lower memory bandwidth than dedicated GPUs. It could also be equally bad for old low-end dedicated GPUs. One of the extreme examples is the Intel HD Graphics 3000 - an integrated GPU on the Sandy Bridge CPU architecture. When you sit still and the terrain can be reused without shifting, it would take 'just' 2 milliseconds to copy it to the game view. But when you started to move, the GPU time to render the terrain could go up to 5 milliseconds. And that is only at 1600x900 resolution. Not even 1080p. So, it was bothering me we were spending nearly 1/3rd of a frame time (16.66 ms) to render the terrain, when the engine has much more work to do to render the rest of the game (for comparison GeForce GTX 750Ti or Radeon R7 360 would do the same under 0.5 ms at 1080p). The realization I had, was that I can 'scroll' the buffer texture. If I remember the offset of the top left corner, I can un-scroll it to the game view, and then instead of copying all the terrain back to the buffer, we can just adjust the offset and update the parts that changed. So, the number of pixels copied is proportional to how much the terrain scrolled. It is so simple I am embarrassed not to have figured this out years ago. https://cdn.factorio.com/assets/img/blog/fff-333-tile-buffer.mp4 Most people could not have noticed this optimization, as most GPUs people have nowadays did the un-optimal thing in a fraction of a millisecond already. But it still made me very happy to be finally able to remove this inefficiency. Contemporary integrated GPUs are also significantly faster, and while it might not be as much of a challenge to render the game for them, they do share some resources with the CPU - be it the last level of cache, or CPU cooler, so the integrated GPU working hard may cause the CPU to slow down. However, the point I wanted to illustrate by this post is how broad a range of GPUs there is. People see a 2D game and expect to be able to play it on essentially anything. If we want to live up to that expectations, we have to impose a lot of limitations on ourselves, because 'anything' also includes a couple orders of magnitude slower GPU than is found in an average gaming computer of today. CPUs got a lot faster in the last decade too, but mostly due to increasing the number of cores and adding wider vector computation units. They didn't get that much faster when executing serial code, which is unfortunately most of Factorio's game code. So if you play the game on a laptop with a Core 2 Duo and GeForce 320M, you'll run into framerate issues due to the weak GPU much sooner than a UPS slowdown due to the old CPU. Side note: You might ask, why do we bother with caching the terrain in the first place and not just re-render it from scratch every frame. Short answer is - because Factorio's terrain rendering is insane due to its complicated tile transition rules, and re-rendering it every frame is just not fast enough.


[ 2020-02-07 17:17:17 CET ] [ Original post ]

Version 0.18.4 released

Balancing


  • Wave defense difficulty will scale with online player count.
  • Wave defense hard difficulty will give 50% less bounty on each kill.

Sounds


  • New sound for small explosion.
  • Combat robots now have their own explosion sound.
  • Shotgun has more variety so it sounds less repetitive.
  • Vehicle impacting wooden objects (e.g chests) now sounds subtly different to crashing into trees.
  • A few minor volume level changes including lowering the offshore pump and electric furnace.

Bugfixes


  • Fixed a crash when saving fails due to mod issues. more
  • Fixed a crash that would happen when the player entered a vehicle when some biters were aggroed at them. more
  • Fixed that cargo wagons built while a train is moving didn't animate the doors correctly. more
  • Fixed an error when using modded night vision defined in zip files. more
  • Fixed a performance issue with assembling machine result slot tooltips. more
  • Fixed that items marked with the mod-openable flag couldn't be opened from the quickbar in some cases. more
  • Fixed that train could fail with chain signal sequence escape maneuver when path goes multiple times through a rail segment.
  • Possibly fixed seam on terrain at certain position and zoom level. more
  • Fixed that sometimes wave defense would trigger victory before killing all spawners. more

Scripting


  • Fixed that writing to LuaForce::stack_inserter_capacity_bonus was limited to 200 instead of 254.

Modding


  • Changed definitions of map colors of beacons, pipes, heat pipes, roboports and steam engines, so they can be overridden by friendly_map_color. more
  • Added ParticlePrototype::ended_on_ground_trigger_effect.
  • Added fuel burnt results to the item tooltip.
  • Loader remnants will pick rotation the same way as underground belts do. more
You can get experimental releases by selecting the '0.18.4' beta branch under Factorio's properties in Steam.


[ 2020-02-06 15:22:32 CET ] [ Original post ]

Friday Facts #332 - More sounds Map color tweaks

Read this post on our website. Hello, We released 0.18.2 and 0.18.3 this week. In terms of major releases, this one has very few bugs, so we haven't had a lot of pressure to crank out the releases at lightning speed.

New Sounds (Ian)


In the sound design department we have been hard at work to bring you a better gaming experience with the help of some new and improved sound effects. It struck me that the whole sound track used to have a lo-fi, almost 'dirty' feel, by which I mean the sounds were unclear, had a low resolution and possibly used recordings made with the wrong microphone positioning. So with Val's help we have set about improving some of these sounds. For example, there are new sounds for all the transport belts, they don't sound very different but they are smoother sounding and less annoying. https://cdn.factorio.com/assets/img/blog/fff-332-belts.mp4 Similar to the transport belts, we also have sounds for the combat robots that are designed to harmonise with one another. Val made a bunch of synth tones for these and I chose the three sounds that make a pleasing harmony when you add them together. https://cdn.factorio.com/assets/img/blog/fff-332-combat-robots.mp4 However in my haste to get these sounds in the Tuesday release, I missed that the fast and the express belts had an annoying high pitched whine in there. So I have EQ'd off the high frequencies and now they work better. The main reasons for having sound design in a game is not just to increase realism and immersion but also for player feedback and to increase the fun factor. Sometimes these things are hard to get right, especially in a game like this where there are so many sound producing entities so close to one another, often with very busy animations. You expect to hear a busy sound, but when you play them all together... it can be a mess. Add to this the innumerable ways sounds can be combined, well you get the idea. I have described this game as a sound designer's dream... and also nightmare. So try and bear with us while we get the balance right. We are also trying to do all this without a modern sound engine, which brings me to my next point. Tech wise, Rseding has been busy updating the sound code. For example we now have the listener position on the centre of the screen by default, which makes more sense to me and helps when you are in the map mode. Zoom level and attenuations have also been increased. Innumerable other small fixes to sound levels have been made and hopefully the game is starting to sound the way we want.

Updated map colors (Klonan)


In the 0.18.2 release this week we changed the map colors for a few entities from the default blue:
  • Heat Pipes
  • Pipes and Underground pipes
  • Pumps
  • Storage tanks
  • Beacons
  • Steam engines and Turbines
  • Roboports
To us it is nice to have a bit more differentiation between entity types/families on the map view (without going crazy), and we think we are carefully getting there.
These changes should especially help tell give some character to power setups, and big assembling blocks with beacons. We're happy with the way it is looking, and with more time we might decide on some more tweaks.

Community spotlight (Klonan, V453000)


Quite a lot of great things to share this week :).

KoS 500 player MP server


Last Saturday, KatherineOfSky and Caledorn hosted a MP server with the goal to set a new record of over 500 players. The server was funded by the community through a GoFundMe.
They were successful, and managed to have at one point 521 players online. This is actually quite a surprise to us, especially since it was with the fresh 0.18.1 version of the game. You can watch the full stream of the MMO event here.

New 0.18 Any% speedrun record


Nefrums set a new speedrun record this week playing 0.18. He is getting close to a sub 2-hour run, just 5 minutes to optimize! [previewyoutube=JA9ccg5tIlY;full][/previewyoutube]

The Biggest and most Useless Rail Network Ever...


Reddit user minibetrayal created a Turing machine using Train network logic gates, comprising of 4,800 Locomotives, 6,172 Train stops, 56,030 Rail signals, and over 1,300km (800 miles) of Rail. https://cdn.factorio.com/assets/img/blog/fff-332-rail.mp4 If you would like to know more, there are details in the Reddit thread. As always, let us know what you think on our forum.


[ 2020-01-31 14:12:29 CET ] [ Original post ]

Version 0.18.2 released

Graphics


  • Improved map colors by adding specific colors to beacons, pipes, heat pipes, roboports and steam engines.

Sounds


  • New or updated sound effects include:
  • Pump, pumpjack, boiler, heat pipe, offshore pump, substation.
  • Logistic and construction robots, roboport.
  • Train.
  • Rocket takeoff sequence.
  • Car and tank (pitch scaling adjusted to sound more natural).
  • All transport belts, splitters, inserters, assembling machines, power switch.
  • Added some UI sounds that were missing.
  • Shotgun, small explosions.
  • Entity destroyed alert.
  • New sound tech includes:
  • Listener position set to centre of screen by default. This will allow you to hear what you see even when in map mode.
  • The ability to turn off the Doppler effect in Lua, used for the Substation so far.
  • environment-audible-distance setting increased to 30 so you can hear entities a bit further away.
  • zoom-volume-coefficient changed so you can hear more of the world when you zoom out. This will help with combat and give a greater sense of the overall factory.

Bugfixes


  • Fixed that pressing escape in some log-in screens lead to blank screen or incorrect states. more
  • Fixed enemy walls should not render as connected to ghosts, since enemy ghosts are not visible. more
  • Fixed undo on self-looped combinator ghosts not restoring wires. more
  • Fixed achievement cards not showing description when descriptions are turned off in interface settings.
  • Fixed that inserters from 0.17 save files could end up teleporting items into/from trains. more
  • Fixed that the sync mods with save GUI wouldn't size correctly. more
  • Fixed that thrown capsules could end up broken forever if thrown at exactly the right tick. more
  • Fixed crash when using "create-entity" trigger effect item to create an artillery flare. more
  • Fixed map view night LUT. more
  • Fixed a crash that would sometimes happen when a biter, who was in previous versions of the game aggroed by a player in a car or tank, was aggroed again. more
  • Fixed crash when joining a game through Steam without having previously logged in.

Modding


  • Migrating loaders between loader and loader-1x1 will maintain the loader type (input/output). more

Scripting


  • Added LuaSurface::create_particle().
  • Added LuaEntityPrototype::inserter_pickup_position and inserter_drop_position read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2020-01-28 15:28:35 CET ] [ Original post ]

Friday Facts #331 - 0.18.0 release Train pathfinder changes

Read this post on our website

0.18.0 release (Klonan)


Early this week we pushed the deploy button on 0.18.0. This was quite a surprise to many of our players, as more typically the time between major releases and the scope of the release is greater. However this isn't like the old days, we are trying to keep the size of releases as small as possible (FFF-314). What this means, is that what is currently in 0.18 is only really a small part of the work needed to be done on 0.18, and releases in the coming months will continue finishing off our 0.18 task list. Once everything on the 0.18 list is completed and the time is right, we will turn 0.18 into 1.0. What we have accomplished with 0.18.0:
  • GUI
    • Main menu redesign
  • GFX
    • Water animation
    • Tree animation
    • Color correction (LUTs)
    • New explosions and damage effects
  • Other
    • Optimizations
    • New Particle system
    • First work on new sound design
    • Steam login
What we have left to do in 0.18:
  • GUI
    • Character GUI
    • Blueprint library
    • Statistics GUIs (production, electric network stats, etc.)
    • Entity GUIs (Inserter, Assembling machine, chests, etc.)
    • Main screen GUIs (Chat, minimap, etc.)
    • Many more...
  • GFX
    • Offshore pump redesign
    • Assembling machine redesign
    • Beacon redesign
    • High-res icons
    • Final tweaks and polish
  • Other
    • Further sound design improvements
    • Mini-tutorials
    • Replace NPE with old tutorial
    • Final game balancing and tweaks
    • Finalised locale and proofreading
With this in mind, it wouldn't make sense to mark 0.18 stable before most of the above is finished. We made 0.18 a major version because it will break mods with all the changes we are making, and while initially it hasn't broken that much, many things to come will have a bigger impact, such as the Character GUI.

Character GUI?


Initially we planned for the Character GUI to be in the first 0.18 release. However the task was proving quite difficult the way it was written, and when the release date came it was not ready, so we delayed the entire 0.18.0 release (twice). After a tough and thorough review, we decided to discard most of the work, and start fresh with a different team member. With programming, you've got to know when to hold 'em, know when to fold 'em. With this change, we decided to release 0.18 without the Character GUI, the alternative was an additional 4-6 week delay, which with only 8 months left, is a big chunk of time. We also don't want to get back into the old habit of always delaying the release for another and another reason, and the things we present in Friday Facts not being seen in-game for months and months. After this decision, Dominik, who was working on the Character GUI, decided to leave the Factorio team.

Campaign cancelled (V453000)


In the recent FFF-329 we have mentioned two different approaches to the campaign. In this FFF, we are announcing that the campaign has been cancelled, and Ill try to explain why. After the Tutorial/NPE was cancelled, I realized several things and it made me re-evaluate what the campaign is trying to be, asking questions like:
  • Is the campaign meant to be 'The Way' how to play the game or just 'extra content'?
  • Should the campaign try to mimic Freeplay?
  • Is losing progress and starting from scratch that much of a problem?
  • ...
In my mind, if we would be trying to create 'The Way' how Factorio is intended to be played, it would make sense to try to stay very close to how Freeplay works, since that has been 'The Way' for many years now. However trying to mimic Freeplay inherently means it's never going to be identical to Freeplay, while certainly adding some new problems (and hopefully benefits). Trying to be similar to Freeplay and create a representation of how Factorio 'should be played' was the mindset behind the work-in-progress expanding campaign. The main benefit compared to Freeplay would be that the content is segmented into smaller chunks (which is already kind of the case due to the science pack production/technology progression - the player can't build everything from the start). However, having a short-term quest, being in a limited area of the map, interacting with existing factory ruins that prevent the player from going to the next area, etc. brings a lot of unexpected problems. It was just not fun to play in comparison. With that, the Freeplay with all its freedom will probably always be the best way how Factorio is experienced. It would make a lot of sense (to me) to rather strive to create a set of smaller scenarios as side content to give a fresh experience after 2,000 hours of Freeplay. To extend Factorio with separate scenarios, instead of trying to re-invent Factorio with the expanding campaign. Being side content, I believe it'd be much more acceptable if progress is lost between levels if it creates fresh gameplay or an interesting challenge. The reason we chose the expanding map concept was to never force the player to lose progress and rebuild their base. If this restriction is lifted, we could split the scenarios over many levels. Over the Christmas break, I tried to recycle the work-in-progress expanding map into a set of separate levels, and we even implemented a playable but very crude version of them in the first week of January. We sat down last week to reconsider what to do with the campaign out of the two options from FFF-329. The expanding campaign felt too risky due to all its problems, and we were not sure enough about it. The separate levels would be a safer option, but if they are not the main way to play the game, then they are not as important as the core of the game for the 1.0 release. It is still possible we will add a campaign after the 1.0 launch, but for now we believe that abandoning the idea of a campaign gives us the focus we will need on the core of the game for the upcoming months.

Trains Pathfinder changes (boskid)


Today I would like to talk about changes in the Train Pathfinder I made for 0.18. They are subtle changes to fix weird corner cases, but first a short glossary:
  • Rail - a single entity over which trains can ride. The basic unit of building.
  • Segment - a series of rails that are not split in between by junctions, signals or stations. The basic unit for pathfinder.
  • Block - a group of segments that are colliding or connected without signals in between. The basic unit for train reservations.
in 0.17 and prior, the pathfinder used classic Dijkstra to find the path with the smallest penalty. The nodes are related to segments with extra information about travel direction. Edges are related to segment connections (transitions).

Issue 1: the last segment distance is not counted into penalty


This was the issue that made me look into the pathfinder code. Train stops are always at the end of a segment. Segments can have at most 2 train stops, one for each direction of travel. Any more is not possible, since the train stop inside would split the segment into 2. This means that a train entering the last segment on its path, must travel the whole distance of it to reach its destination. As it was implemented, the total cost on nodes was computed as cost of all previous segments and transitions. That means the node with the requested train stop would be picked from a priority queue before the cost of the last segment distance was added. Since the node has the requested train stop on its end, the path would be returned even if there are other nodes with a higher current cost but would be better since the cost of the last segment would be lower. The cost of the current segment would be added to the new nodes during expansion but it was already too late - the path was returned.
0.17 - Pathfinder chooses the bottom path which is longer The fix was quite simple: include the node's segment length into the node's total cost from the start. This changed the node expansion code as it was not adding the cost of the current node's segment, but the next node's segment. This would lead to cases where the first segment distance would not be counted, so I added code that when creating starting nodes, creates them with the penalty of the whole starting segment.
0.18 - Fixed Pathfinder chooses upper path that is shorter

Issue 2: the opposite station in the last segment is not counted into the penalty


The second issue is also related to the last segment and has a similar explanation as the issue above. The cost of the train stop in the current segment was added only when expanding node to the next segments.
0.17 - The pathfinder chooses the bottom path because it does not contain the penalty of the opposite station The simple fix of shifting the train stop penalty by 1 segment (when expanding, add the cost of the train stops to the next segment, not the current segment) and including both train stops inside the start segment fixed the issue (this is not the final solution as it will be explained in issue 5).
0.18 - The fixed pathfinder chooses the upper path that is shorter. Both paths have a penalty of 1 station.

Issue 3: the first segment distance would not consider train position


Now after the fix for issue 1 I noticed that adding the penalty of the whole starting segment has a flaw - if a train can go in both directions and both train ends are in the same segment, the cost of the first segment would be same in both directions and would cancel out.
0.17 - The pathfinder chooses to go left. Path to the right has a cost higher by 2. The fix here was simple: since the pathfinder is only given the start rail in the first segment, it has to go by all the rails in a given direction to find the end rail in a given segment. I have added the distance measurement during that search and used it as the initial cost. That way the position of train will affect the initial cost when looking at paths for both directions.
0.18 - the fixed pathfinder chooses to go to the right. The train position is considered.

Issue 4: a single segment path had priority over multi-segment paths


Now that issue 3 was fixed, there happened to be extra code to handle single segment paths. It covers weird cases such as cyclic segment, or station in the same segment. This code is computing the path cost based on rails (not segments) and if it finds any path, it will choose the path of lowest cost and skip the main pathfinder logic for multi-segment paths.
0.17 - The pathfinder chooses the single segment path. The solution for this - if there exists a single segment path, create marker node with cost of shortest single segment path and throw it into pathfinder priority queue. If this single segment path is truly the shortest, then this marker node will be picked up during expansion meaning all the multi-segment paths have a higher cost. If there would be a shorter multi-segment path, this marker node will not be picked up in time and so will be ignored.
0.18 - The fixed pathfinder chooses the multi-segment path because it has a lower cost.

Issue 5: the opposite station in the first segment was added into the penalty


After the fix for issue 2, every segment on the path with train stops would add the penalty of the train stops, not counting if it was on an entrance or exit of the segment. This means that a double-sided train for which one end is inside the segment with a train stop that is under the train, would still consider that train stop in the penalty.
0.17 - The pathfinder chooses the left path since the right path has the penalty of the train stop Based on this, I decided to discard the penalty of opposite train stops in the first segment. Doing performance measurements here showed another issue: the fix for issue 2 was flawed. The penalty of the goal train stop in the last segment should not be added, because this forced the pathfinder to over-expand nodes up to the train stop cost looking for other paths that maybe would not have that last station penalty (when in fact, it was unavoidable). So now I saw: the opposite train stop in the first segment and the goal train stop in the last segment must not add a penalty. This gave the final solution for the train stop penalty: when expanding a node, the exit train stop in the current segment adds a penalty and opposite train stop in the next segment entrance adds a penalty.
0.18 - The fixed pathfinder chooses the right path. Train stop under the train is not counted.

Issue 6: the block distance from the start was not updated properly


This is quite subtle issue. It is related to this penalty rule: "When the rail block is occupied by a train -> Add a penalty of 2 * length of the block divided by block distance from the start, so the far away occupied paths don't matter much." This means that looking for path, not only the cost from the start is counted, but also the number of blocks from the start - every time a node expands to another segment that is from a different block than the previous node's segment, increase the total block count from start by 1. That was working fine as long node expansion would create a new node. In the case of updating a node, the total block count was not updated the leaving old value in the node. That means the updated node would have the cost of new, lower cost path, but would have the block distance from the start of the previous path.
0.17 - The pathfinder chooses the bottom path because blockDistanceFromStart is not properly updated in the upper contraption. In this contraption, the issue happens in the upper part. The segment under the upper middle locomotive is expanded first when going from the straight segment on its left - it was of lower cost. Now this segment has the cost of the straight path and the block distance from start of 1, since there was only 1 transition to a different block. There was also the penalty of the block being occupied by another train. When expansion goes through the upper siderail, it hits 4 rail signals and so the block distance from start is increased up to 4. This path has a higher cost up until the left rail signal near the upper middle locomotive. Here, however, the cost of the block occupied by another train is lower since we are entering the 5th block from start when going through the upper path. The side-rail path is chosen to update the node cost related to the segment with the upper middle locomotive, but the block distance from start was not updated. Because of this, the penalty on the next rail signal that goes to another occupied block, was equal to the last segment distance divided by 2 instead of 6. This difference would make the path through the bottom contraption of lower cost since the straight path here is cut and the node for the segment under the middle locomotive is created with the proper block distance from the start. The fix was simple: when changing the cost from the start on an existing node, also change the block distance from start.
0.18 - Fixed pathfinder chooses upper path

Issue 7: repathing would clear a train's counter of ticks waiting on signal.


This is not exactly a pathfinder issue but it lead to trains being stuck. If a train is waiting on a signal, it will repath periodicaly to find another possible path that may now be unblocked. The repath however clears the counter of how long the train is waiting on the signal. Periodic repath logic was aware of this so it would restore the previous waiting on signal tick counter when the train entered arriving-to-signal state. However some fix ago changed train behavior, and the train no longer goes through the arriving-to-signal state and so the tick counter was cleared. This broke the following rule: "When the path includes a train currently waiting at a rail signal -> Add a penalty of 100 + 0.1 for every tick the train has already waited."
0.17 - The right train is stuck because the time-dependent penalty of the left train is reset every time the left train repaths. Universal fix here: clear this counter only if the train changes state to anything other than waiting-on-signal.
0.18 - The fixed ticks waiting on signal logic, after 3 repaths the penalty of left train increases to a point where right train chooses the long path.

Train Pathfinder optimisation - priority queue


In the heart of the pathfinder there is a priority queue that collects open nodes. As it was implemented up until now, the priority queue was based on a double-linked list. Finding the node with the lowest cost (highest priority) was fast (constant), but inserting new nodes or updating existing nodes would be, in worst case, linear (O(n)). After a quick prototyping phase, I decided to implement a binary heap with min-property over array. This change alone gave around a 20% speedup to the pathfinder.

Train Pathfinder optimisation - heuristic (conversion from Dijkstra to A*)


The second optimisation applied was the addition of a heuristic function that gives the minimum cost to any end. This means that node expansion is now guided into the goal by the heuristic function, and so less nodes should be required to visit before finding the goal. This gave another performance increase. The rough guess as to impact of the train pathfinder changes, is that its about 2x faster, and should have fewer weird edge-cases. As always, lets us know what you think on our forum.


[ 2020-01-24 14:24:16 CET ] [ Original post ]

Version 0.18.1 released

Changes


  • Train stop at train's starting segment exit is no longer counted into penalty. more
  • Inventory transfers mini-tutorial has been updated to feature the quickbar.
  • Split the map editor sub-menu into more options so it's more clear when scenarios are copied and when they are edited directly.

Bugfixes


  • Fixed replay gui covering tooltips. more
  • Fixed tooltips in statistics window not showing force modifiers. more
  • Fixed electric mining drill was missing dying explosion. more
  • Fixed when using OpenGL backed turret range overlay was rendered incorrectly when zoomed in. more
  • Fixed a crash when using script.get_event_order during control.lua init. more
  • Fixed that LuaForce::reset_technology_effects() could change the enabled/visible when disabled state. more
  • Fixed wrong lua docs about what event(s) could be filtered. more
  • Fixed a wrong error message related to multiplayer and migration scripts. more
  • Fixed crash when rail with temporary train stop is removed. more
  • Fixed crash if you attempted to ping a train wagon immediately after placing it on a multiplayer server with high latency. more
  • Fixed that clicking the drop-down widget in the map editor script section would stop the mouse from working. more
  • Fixed nightvision effect was applied to zoomed-to-world view sometimes. more
  • Fixed that enemies would attack rails. more

Modding


  • Changed default value of LoaderPrototype::structure_render_layer from "transport-belt-circuit-connector" to "object", in order to be consistent with other on-belt structure sprites. more

Scripting


  • Added LuaEntity::get_damage_to_be_taken().
  • Added LuaSurface::brightness_visual_weights to add back ability to control darkness of the night runtime per-surface. more
You can get experimental releases by selecting the '0.18.x' beta branch under Factorio's properties in Steam.


[ 2020-01-23 14:01:30 CET ] [ Original post ]

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.


[ 2020-01-21 15:06:24 CET ] [ Original post ]

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




[ 2020-01-19 17:59:15 CET ] [ Original post ]

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 its 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"

Shenanigan #1


After only three months, unfortunately the little guy died. Doesnt power on, just dead. Of course, we start the return process, but its 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 couldnt 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 youd 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!

Shenanagain!


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.

ZFS to the rescue


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 its 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.


[ 2020-01-17 16:24:46 CET ] [ Original post ]

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)


Learnings from the Introduction/NPE


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.

The Campaign Conundrum


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:

1. The Expanding Campaign



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.

2. The Separate level Campaign



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.

Conclusion


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=2hgvIhMkgKU;full][/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.


[ 2020-01-10 16:41:57 CET ] [ Original post ]

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.


[ 2020-01-03 20:08:17 CET ] [ Original post ]

Friday Facts #327 - 2020 Vision

Read this post on our website.

2020 Vision (Albert, Klonan)


2020 is going to be quite an exciting year for us. We have our 1.0 date set to the 25th of September, and there is a lot of preparation to do. It is no doubt to any of us that we would not be able to have any success without the great community that has developed for the game over the last years, and the support of all our players and fans. As is almost tradition, Albert has prepared a commemorative postcard/wallpaper to celebrate the last FFF of the year.
Here's to a great year to come!

The local maximum - The tutorials swap (kovarex)


I had few months of "vacation" from work by playing world of warcraft classic and generally getting some distance to be able to help with the finishing of Factorio with some perspective and a clear head. Now I have returned from the lands of Azeroth, back to work with fresh mind to finish what is needed - hopefully. In this time, I was thinking about games in a bigger perspective. I have seen and admired videos related to game creation subject like A Love Letter to GOTHIC's Open World Design, Bethesda's game design is insulting, The decline of Gaming and the unbelievable story of the Fallout 76 fails that goes way further than I thought it can. And then I played our new tutorial again and realized what we did. We found something very close to a local maximum. To start from the beginning: The whole goal of the new tutorial introduced in 0.17 was to explain Factorio to the wider audience. To make sure, that even someone who wouldn't normally play the game would understand the concept and would automate. The motivation was partially due to the fear of someone playing the tutorial who just doesn't automate on their own. That someone would miss the idea of the game and would had completely wrong perception about the game. For example, that someone would play it only for 30 minutes and would think it is just about endless grinding and manual crafting, and they would never experience the automation midgame which is where the game starts to shine. This was a noble goal, but we didn't realize all the costs we had to pay for it. To make sure that the players know how to research and use assembling machines, and they get to experience that part of the game fast enough, we had to force them to do it early on. Firstly, this breaks the progression, which is one of the cornerstones of Factorio game design. The progression in the beginning is roughly this: Manual Mining -> Automated mining -> Automated logistics -> Automated production & science. The order of the progression is very important, as in every step you start doing something new that you had to do manually before, so you appreciate the upgrade. Also, when you are starting, you are exploring the game mechanics in the logical order and understand the motivation for those. This is in clear contradiction with forcing players to use assembling machines in the first 5 minutes of the game. Long story short, there was no way of just tweaking the new tutorials, the fundament on which it was built was wrong. Luckily, I wasn't the only one feeling that way. So I had to do the very hard thing, and telling the people that worked on it, that we are scrapping it, and in 0.18 we will switch to using the old tutorials again. They are way less polished with lower production value, but these things are much less important than the core gameplay mechanics as far as I can tell. We plan to tweak several things in the old tutorials, but the structure is planned to be kept the same. This is definitely a lesson for the future.

Two million sales (Klonan)


It has long been on the horizon, and the Christmas gift giving has given us that last push, for us to reach 2,000,000 sales. I would say its quite an achievement for a Indie game that has never been on sale. We first hit one million sales in May of 2017 (FFF-192), so its been about two and a half years to sell another 1,000,000 copies. I wonder how long till three million... Any bets? I find it quite interesting (and not surprising) to look at the proportion of the sales that come from each of our distribution channels. As you can expect, Steam accounts for the majority of all copies of the game sold.
What is also interesting, is that we had a lot more sales on our site before we launched on Steam. Either this is Steam cannibalising our website sales, or just everybody who wanted to buy it on our site did so before launching on Steam. Another data point for speculating on, is that 81.3% of people who purchased the game on our website, redeemed and activated their Steam key. Factoring that into the above numbers, about 96.7% of all players own the game on Steam. When we reached one million sales, we threw a party to celebrate. We're not going to do the same this with this milestone, but we are thinking of having a party to celebrate the 1.0 launch next year. Any news of that will of course be communicated in the usual way. As always, let us know what you think on our forum.


[ 2019-12-28 00:26:25 CET ] [ Original post ]

Friday Facts #326 - Particle emitter Data cache

Read this post on our website.

More particle optimisations (Allaizn)


Rseding's recent optimisations of the particle system (FFF-322) made particles much more lightweight thanthey were before, but it still left particles as rather complex beasts. A quick summary of the possible actions a particle can make during it's update:
  • Move their own position.
  • Advance their animation to another frame.
  • Land in water and apply a trigger.
  • Apply another trigger with a certain frequency.
  • Remove themselves from the game world once their life time ends.
What makes this complex is that triggers are general purpose systems that can do all kinds of things,including creating and destroying entities, fire, smoke and other particles as well as playing sounds or recursively applying even more triggers. In other words:applying a trigger is an "anything can happen" situation and thus totally unpredictable, which in turn makes optimisations extremely hard.

The particle emitter


The base game and most mods don't use particularly crazy triggers when creating particles - the goal is usually to just spawn in a bunch of small animated texturesand make them fly around on screen (which is somewhat ironically what is usually called "particle"). An idea for further optimisations of particles was hence to createa kind of "simple" particle, which couldn't apply all kinds of triggers to allow handling them in bulk, which is usually faster than handling them individually.This bulk handling would be done by a thing called a "particle emitter", whose whole job is to create, update, draw and finally destroy the simple particles it manages,with the idea being that a biter dying wouldn't have to spawn hundreds of particles, but only a single/few emitters. But this is not all: simple particles are not able to change any other game state, and would thus only get updated to maintain their own internal values - mainly theirposition and velocity. A small physics exercise later the idea was born to not update the particles at all - you can compute their current position from their startingone after all! Even better: if the particles aren't ever rendered, then there's no point in creating them in the first place, so there's no reason to do that until theemitter comes into draw distance - millions of biters dying in gigantic blood fountains offscreen would thus basically not matter at all for your frame and update time! https://cdn.factorio.com/assets/img/blog/fff-326-emitter.mp4 A visualisation of the emitter in action: the red box represents the actual screen. Particles managed by emitters outside the screen region simply don't exist at all. The particles themselves not being allowed to affect gamestate has another benefit: in a multiplayer game, each player only has to generate the particles theysee themselves, instead of those that are visible by anyone. This also suggests not using the emitter's update function, but it's draw one instead, which yields even morebenefits due to the draw function being called during the render prepare phase, which runs on as many threads as you allow it to have. However, all of this doesn't just magically work correctly, and there are edge cases that need handling. For example: what happens if an emitter is created offscreen andthen comes into view distance? What happens if you save and reload? What happens if you save and reload with a mod set that doesn't have the particles defined any more? It would be very odd to see your rocket silo explode in uncountable bits, see how they fly and crash into the ground - then save and reload and see everything again because the particle effect restarted. Handling these kinds of issues took some time and thankfully only increased the systems internal complexity marginally, allowing me to focus on expanding it's features.Currently, the following things are supported to be present on an emitter:
  • Handling simple particles with individual random starting positions and velocities.
  • Handling simple particle streams via normal and instant tails as shown in FFF-325.
  • Handling simple particles with a smoke trail behind them (FFF-325 has some examples of this, but the effect already existed beforehand).
  • Handling simple particles impacting the ground by potentially being replaced with a water splash when hitting water.
Particle emitters have two main restrictions:
  • They only handle a single particle type (and technically associated smoke and water splashes). Making an assembling machine burst into metallic blobs and oil splashes would thus require two emitters.
  • The particles managed by an emitter cannot fly too far away from the emitter (which itself will never move), because we need to know how far outside the draw distance to search for emitters that may want to render their particles.
https://cdn.factorio.com/assets/img/blog/fff-326-all-effects.mp4 A demo particle animation showing off all effects at once - all of these are managed by a single emitter.

Startup time - Data Cache (Rseding)


Game startup time (time to reach the main menu) is just as important to us as compile time (see FFF-206). With how frequently we compile and launch the game to test things, every extra bit of time spent waiting for the game to load is wasted time. There are 2 main parts of the Factorio startup process:
  • Go over each enabled mod and collect the prototype data it defines/generates (the 'data stage').
  • Load and process the sprites that the game needs to run.
https://cdn.factorio.com/assets/img/blog/fff-326-mod-loading.mp4 This is a familiar sight to those who play with a lot of mods. In the past we made an experimental setting which would cache the loading and processing of the sprites, so we never need to wait for it when nothing around them has changed. However, the game still had the process all of the 'data stage' every time the game would start. During normal development that wasn't really an issue - it would happen in a fraction of a second in most cases. However, as the game has grown, so has the amount of stuff that gets processed during the data stage. Additionally, for every mod enabled that has anything in this stage, the time would roughly double. Recently I started to wonder what it would take to make the same kind of caching system we have for the sprite loading for the data stage. Since mostly the results are the same between restarts, it would mean it didn't need to do most of the work - and should be faster. After working on it for about day I had a working prototype; but it wasn't actually any faster with just the base game. Not wanting to quit just yet I spent some time with the profiler and managed to find a few areas that I could optimize and reduced the time the caching logic was spending by about half. So, it finally had some benefit for the base game (although quite small). What I didn't expect was just how much of an improvement it was going to have for the modded case. What used to take 25 seconds in my testing took only 4 with the new cache setting enabled. The time savings gets even better as the number of enabled mods increases. The setting is still disabled by default because it's highly experimental, but if it ends up stable enough, we might turn it on by default.

Christmas mods (Klonan)


This is the last FFF before Christmas, so I thought we would celebrate some of the mods which aim to create some holiday spirit in the game.

Alien biomes


Alien biomes snowy terrain is just beautiful. In the map gen settings you can crank up the 'Cold Climates' option, so your whole world is just a cozy winter wonderland.

Holiday artillery


We must also remember to share the love to our biter friends, this mod will lets you deliver gifts far and wide, and embellishes the Artillery Gift delivery turret/wagon with a lovely red and green paint job.

Christmas tree


And of course, no winter factory is complete without a lovely Christmas tree. [previewyoutube=dljJijRJ6vQ;full][/previewyoutube] We wish you a merry Christmas, and as always, let us know what you think on our forum.


[ 2019-12-20 14:27:50 CET ] [ Original post ]

Friday Facts #325 - New Explosions and Particles

Read this post on our website. Hello, The year is wrapping up, and we have been hard at work finishing off some topics before we take our Christmas break. As you can imagine, releasing any new version of the game without a few weeks to do bugfixing wouldn't be wise, so you can rest easy this holiday period without the worry of a surprise 0.18 release.

New explosions and particles (Albert, Dom, Klonan)


One of the motivations behind the new optimized particle system (FFF-322) was to give our GFX team more flexibility to create special effects in the game, and specifically new explosions, without a major concern for any performance impact. With the new system as the foundation, we have been working on adding new features into the trigger items and particle trigger effects. One such feature was to have particles spawn a 'tail' behind them. This tail looked good for some particles, but not really for others, so then we added an option to spread that tail out in a natural way. This 'Instant tail' gives the particle effect a more explosive feel, with the particles really bursting out dramatically from the source, rather than in a somewhat comical single-file stream. https://cdn.factorio.com/assets/img/blog/fff-325-no-tail.mp4 https://cdn.factorio.com/assets/img/blog/fff-325-instant-tail.mp4 Instant tail off vs. Instant tail on. Albert spent some time adding new specific explosions for the enemies dying. This is still a work-in-progress, but so far we are happy with the initial results. https://cdn.factorio.com/assets/img/blog/fff-325-enemies.mp4 A nice feature we added back in 0.17 is the 'damaged_trigger_effect' on all entities. This lets each entity have a customised effect it creates whenever it is damaged. For instance with the biter, we made it create a blood particle hit effect, which gives the player some visual feedback about hurting the poor critter. https://cdn.factorio.com/assets/img/blog/fff-325-biter.mp4 Another bit of refinement we can make is setting the effect to 'hit' at a random position inside a specified box. In the case of the Roboport, which is quite a big entity, the effect is very noticeable. We can make the random offset box any size and position we like, it isn't tied to any other property of the entity, so we can precisely tweak the effect. https://cdn.factorio.com/assets/img/blog/fff-325-roboport.mp4 With these two in place, we can start to get a bit more specific. Dom has been hard at work the last few months creating specialized damaged effects with custom particles for every entity in the game. One example is the stone wall creating stone particles when damaged and when dying. https://cdn.factorio.com/assets/img/blog/fff-325-walls.mp4 We can also mix and match the different particles, to better reflect the composition of the entity in the resulting rubble. For instance the rail has a mix of stone, metal rail, and wood particles. https://cdn.factorio.com/assets/img/blog/fff-325-rails.mp4 These new effects and explosions are very much work-in-progress, and are already providing a much better feeling to the destruction in the game. Please let us know what you think, and if you have any suggestions to share. We are mindful of potential performance impacts a lot of particles could create (even with the new optimized system), so we are still looking into some even more performant ideas for the most brutal effects.

Steam review milestone (Klonan)


A Reddit post surprised us yesterday afternoon with the news that Factorio has reached 50,000 reviews on Steam (not including those who purchased the game from our website).
This is an absolutely huge number, and we never had any idea we would reach such a milestone when the game started as a small project just 7 years ago. Many thanks to all those who have reviewed the game. In regards to other milestones... we might have something else to announce in the weeks to come :) . As always, let us know what you think on our forum.


[ 2019-12-13 16:58:12 CET ] [ Original post ]

Friday Facts #324 - Sound design, Animated trees, Optimizations

Read this post on our website,

Factorio logo patches (Jitka)


We would like to introduce our new fabric Factorio logo patches, which are now available at our e-shop. These sew-on embroidered patches are ideal for clothing, hats, backpacks, etc. The dimensions are 2.5 x 12 cm.
As we are uncertain how large the demand for these patches is going to be, we have only limited stock available at the moment. Please note that our online store ships only once a week every Wednesday, and it is highly possible that the orders placed now will not be delivered before the 25th or December, this applies especially for orders shipped outside of Europe.

Sound design (Ian)


I have been brought on to Factorio to finish the sound for the game for version 1.0. It was felt that a sound designer was needed to work at the Prague office to help implement the sounds and improve the audio vision. With a desire to make some quick wins, one of my first tasks was to add the sounds of the enemies footsteps, which we felt would really make them come alive. Unfortunately it transpired that the tech we wanted to use for this (each step being connected to the correct terrain, as per the player's footsteps), was going to be too expensive for the game in terms of CPU. After all, some of these creatures have 12 legs. Remembering a similar nightmare with giant spider's footsteps on a Harry Potter game years ago, I decided to make a simpler solution. So what we now do is to play a one shot sound for each cycle of the walk animation. First of all I started sourcing sounds from a library so I could rapidly prototype something. By taking some eggshells crackling sounds and adding them to a video of the walk animations, I managed to create something pretty good for the biters steps or movements. I plan to record some extra sounds for these later on, but for now these work fine. The sounds are different for each enemy however, the biters have more crackle and the spitters have more of a set of thuds. The bigger the enemy, the bigger the footsteps. These sounds should give you a greater feeling of immersion into their world, as you hear them scurrying towards you just before you see them. [previewyoutube=4EgG8Shq7Tk;full][/previewyoutube] Regarding the other enemy sounds, it seemed to me that the spitters and biters sounded too similar and this is something I wanted to change. If we can distinguish between the sounds made by the enemies, this adds to the variety and also the fun factor. The other sound designer Val has made new sounds for spitters idles, in order to bring out their squishiness and make them more disgusting. In the meantime I've been adding these sounds to the game, playtesting and tweaking them. For example, I chose better sounds for the enemies dying, in order to give clearer feedback to the player when making a kill. In other news, I've been busy working on mixing the whole game and improving sounds as I see fit, but I'll leave that for another time!

Animated trees. Of course (Albert)


In last week's FFF we presented animated water as a mini-series of "small" additions on the feeling of the environment. A lot of the feedback came saying that now the trees look pretty dead in comparison with water. We knew that in advance, and it seems like you were reading our minds because during the preparation of water we were working also on the trees. Today finally we can present this work finished. The always running sound of wind in the game feels much better with these new animations, plus the sounds to come. The shadows cast by the trees are also animated, and it makes the effect on top of the water somehow much better. https://cdn.factorio.com/assets/img/blog/fff-324-animated-trees.mp4 The idea of animating tree leaves is old as Factorio, but we never had the time due to obvious other priorities. One day Tom (wheybags) came with a very nice prototype, and I got very engaged -again- with the idea. Some time after, Ernestas made a new prototype based on different techniques. That was also really interesting. The subject was moving pretty solidly but it wasn't good enough. Next, Viktor (Allaizn), had the idea of using the normal maps of the trees instead of a generic noise to move the leafs, and the result of this experiment was fantastic. The rest will be explained by Allaizn himself.

Tree shader integration - you probably forgot something if it works on the first try (Allaizn)


My first "big" task was to integrate the shader Ernestas made into the game engine, which was exciting due to its looks, but also somewhat stressful considering I only rarely looked at that part of the game's code until then. The first step in doing this is usually to understand how the shader itself works, so allow me to give you a small explanation of what is happening. The GPU renders a texture pixel by pixel, and each pixel (roughly speaking) initially only knows where on the screen it is. A shader is then necessary to give it the extra information needed to arrive at the color it's ultimately supposed to have, where it acts a little bit like a "color by numbers" game - we ready a texture as the colors to use, and also pass in some numbers that tell it which part of the texture to use (their technical name is UV coordinates). When rendering sprites we almost always want to pass in these numbers in a way that results in the texture being copied onto the screen (see the image below) - but there is nothing preventing us from messing with those numbers beforehand ;) .
Left: you see the numbers that are chosen to result in an onscreen copy of the supplied texture. Right: the scrambled result if you just supply random numbers. Passing in random UV coordinates will usually result in an completely unrecognizable image, but we can be more crafty than that: we can pass the number passing to the pixel below the usual one, or to the one above - and if we do that strategically, the image looks like it shifted a bit. Vary this shifting in time, and the result is the appearance of slight movement across your image! This offsetting by a pixel or two is called distortion, and it's usually supplied to the shader by a second texture (whose color values we just reinterpret as the shifting values we need) called the "distortion map". Back to to the implementation side of things, it was surprisingly easy to arrive at a working version since I could copy the hardest part (the shader itself) straight from Ernestas prototype - only to then realize that the title of this paragraph is almost always true! Trees can be drawn in surprisingly many ways:
  • High vs normal resolution textures.
  • No, high, or low quality compression.
  • Full or half color depth.
  • Leaves decrease in amount due to pollution damage and have a total of 4 stages.
  • Leaves desaturate with rising amounts of pollution.
  • Trees can be rendered as part of the game world, or as part of the GUI.
If you disregard counting the desaturation, there are thus 48 different ways to render the same tree sprite, and we of course want all of them to work, leading to me being stuck hunting for the missing cases for a few days. During that time not everything went smoothly: sometimes everything seemed right with the code, but the trees seemed to refuse to move. There was thus always the question whether the effect was active at all, or if it was, then how much it actually did. This lead me to write a debug visualization into the shader: https://cdn.factorio.com/assets/img/blog/fff-324-tree-debug.mp4 The three color channels encode the three main properties the shader has to work with:
  • The red channel reports the displacement in the horizontal direction - no red means displaced in one direction, full red in the other.
  • The green channel reports the same for the vertical displacement.
  • The blue channel reports how much the distortion has to be scaled by in order to account for different texture resolutions - full blue results in no scaling, half blue in a scaling of 0.5, no blue results in no distortion at all since it's scaled by 0.
The title theme also struck me in another way: the effect depends heavily on the provided distortion map, and our first version resulted in a look that was best described as "it looks fine if you turn it down until it's nearly invisible" - even the best implementation in the world just doesn't matter if the final effect doesn't look great, too. Given that the initial distortion map was mostly noise, I instead tried the very opposite approach: find a texture that is highly correlated with the tree leaf texture and use that instead - ultimately settling on the normal map of the tree leafs. The shader itself uses only the red and green channels of the normal maps, which made them a fine target for BC5 compression that we haven't had use so far in the game (see FFF-281 for more info on compression). After an astonishingly short time, the compression was up and running - or so I thought, since I was once more struck by "did you think of this?". The culprit this time was mipmapping, which wasn't aware of the compression and thus downscaled the compressed image instead of decompressing, downscaling, and recompressing again.
Normal maps as seen in the sprite atlas When the project was nearly done, I was hit one last time by the realization that I forgot something: moving tree leaves should result in their shadows moving too, right? I thus spent a little bit more time to implement a special shader for them that does just that by using generated noise instead of a distortion map.

Optimizations (Rseding)


There are a few key parts of the codebase that end up being "slow" relative to everything else and the reason why almost always simplifies down to edge cases. "Why is ... so slow?" -> "Because it has to check for A, B, C and D each time it does any logic". "Why? Those almost never happen" -> "Because without the checks, the logic is simply wrong". About 3 years ago I had my version of this with inserters. Inserters end up being one of the more common entities for the simple fact of: you have to have them if you want anything to run. However, inserters are also one of these "slower" entities where the basic idea of what they do seems so simple; "how can moving items from A to B in an arc end up so slow?" (relative to everything else of course). And so I looked at the profiling results and the code it pointed at:
  • Each tick; check if the inserter has a burner energy source. If it does:
    • Check if the energy source is completely empty and go to sleep if so (no fuel, can't move fuel into itself since it can never move).
    • Check if the item in the inserter hand can be used as fuel for this inserter. If it can:
    • Move the hand towards the inserter itself.
  • Each tick; check if the destination has moved away (teleported/vehicle drove away).
  • Each tick; check if the source has moved away (teleported/vehicle drove away).
  • Each tick; check if the target or source is marked for deconstruction.
  • Each tick; check if the source has changed force.
  • Each tick; check if the enabled condition exists and if the inserter is disabled by it.
If all of that passes, then move the hand towards the source/destination position. It's not surprising that ends up being "slow". But you can't just not do any of that and say "it's okay". The obvious answer to all of that stuff is "that doesn't happen frequently/those are edge cases; they should all be done through events". But then - how? To put it simply; there was no event that the inserter could use to know when these things happen so it had to check each tick if any of them happened. I ended up leaving it alone and went back to working on other things. But it always stayed in the back of my mind; cooking - trying to find a solution. 3 years later I found it: Targeters. Targeter driven events Targeters are a thing we created and have refined over the years for 2 main reasons:
  • They're disappear-aware pointers; when the thing you "target" is deleted, your pointer is cleared (set to nullptr).
  • They're saveable/loadable pointers; you can persist a pointer through save -> quit -> load.
Most things in the game that need to "point" at something else will use these (with a few exceptions of course). Inserters use these. My idea was fairly simple: anything which can be "targeted" can go over anything "targeting" it and let it know when some rare event happens (everything the inserter had to check for and some others). The events aren't free - but because these cases don't happen commonly the inserter not having to do these checks makes the cost of the events when they do happen meaningless in the overall performance charts. Snowballing With the Inserter update logic drastically simplified and with the new Targeter driven events at my disposal I started to notice things:
  • Mining Drills share most of the same checks that Inserters do - so they got the same treatment.
  • Locomotives, Cargo Wagons, and Fluid Wagons had the same kind of checks; so now they don't need to be active in 99%+ cases.
  • The blue triangle module-requesters had the same kind of checks; so now they don't need to be active in 99%+ cases.
  • Logistic and Construction robots had the same kind of checks for (did the target move?) so now they don't need to check that.
After finishing with those I re-profiled and with those entities taking far less time different interesting things started showing up:
  • Burner energy source logic was doing several slow checks for the edge-case behavior.
  • Transport belts were doing a O(N) check every time they would move items when it could be done in O(1) time.
  • Anything which made smoke from consuming energy was doing several slow checks to try to make smoke when they didn't need to in most cases.
And finally one last thing showed up: heat pipes. Every time I make something run faster something else takes its place in the "what is time spent on each tick" (this is expected), but it also means it reveals new things I might not have noticed before. Heat Pipes The first thing I noticed with heat pipes is: all of the actual logic for heat pipe flow isn't even in the heat pipe entity itself. The entity just defer the logic to the "Heat Buffer" class. It got me wondering: why even have the "update" logic go through the entity at all if it doesn't do anything? Several days later and a lot more code than I set out to write; I moved all of the update logic for heat flow into its own dedicated manager class (almost identical to how fluids and electric flow have a manager class). It looked too good to be true; what was 0.55 ms/tick was showing 0.17 ms/tick (a little over 3x faster) by just not going through the entity each tick to do heat flow. A lot of testing later and the results were correct; it was just that much faster. The underlying algorithm didn't change but it just ran > 3x faster now by touching less memory. This is another nice example of "Factorio is not CPU bound, it's memory latency bound". More cores wasn't going to make this faster - because it was never limited by how fast the CPU ran. Conclusion Electric networks... Fluid networks... Heat pipe networks... none of these interact with each other or anything outside of themselves. What happens if I just update all 3 in parallel? Not surprisingly; each of them got slightly slower (because they are competing for memory access) but overall it was still measurably faster. The interesting part about this though: 1 of the 3 always takes significantly longer to finish than the others. That means that the others end up being essentially "free"; the game has to wait for the slowest to be finished anyway so the faster 2 of the 3 get a "free ride" to finish long before game finishes waiting for the slowest to be done. Every save file I've tested ended up running measurably faster in the end. The most extreme one (lots of steel furnace based smelting) showed a 2.3x speed-up. As always, let us know what you think on our forum.


[ 2019-12-06 12:13:31 CET ] [ Original post ]

Friday Facts #323 - Animated water

Read this post on our website

Water animation - Concept (Albert)


Since the very beginning of the project, we have focused a lot in the side of the factory, providing better designs for the machines, and expressive animations that give a sense of life and credibility in this area. We put a lot of effort also in the environmental side, adding different tile sizes, improving textures, adding doodads, cliffs, trees, decals, and constantly improving the map generation for a better feeling. But apart from biters and the factory, nothing else moves in this Factorio planet. So the environment is nice looking but it feels somehow unreal due this lack of motion. Today we proudly present the first experiment in this area: Animated water. This animation doesn't try to grab your attention, it's just there. Slowly moving. I personally bet that this animation, with the proper sound design, will provide the natural feeling that the planet needs. https://cdn.factorio.com/assets/img/blog/fff-323-animated-water.mp4

Water animation - Technical Art (Ernestas)


Animation was always one of the most powerful creative tools we have. Animation is how we communicate with our audience about functionality, it creates interest and emotions people like. So let us talk about water and how the current representation might be missing something. Some of you with an eye for detail might have noticed that water in Factorio is static. It has foam, which is static. There are also some static reflections. Due to the fact that making animated water was considered polishing, we never took the time to make an actual solution. But now we are polishing Factorio, trying to make it as beautiful as we possibly can given our constraints. I am glad to talk to you a bit about us solving animated water! Christmas of 2018, I decided to gift myself with solving water animation in secret. Based on past conversations with Albert the goal for it was clear:
  • It had to look similar to the current water.
  • Photorealism was a no no.
  • It had to be super cheap for the GPU.
In the past I was experimenting with this cheap clouds shader. It used fractal Brownian Motion and only sampled a noise texture, instead of the usual approach of calculating Perlin noise. With a low iteration count, it was almost as cheap as drawing a sprite. So I started MonoGame (lovely framework) and implemented a tile-based world using the same technique for the shader, the only difference being I clamped noise values to simulate brighter and darker areas. For the noise I used our water sprite.
Original - Noise - Clamped To save GPU power, water was drawn the same as tiles, one after another. The position was easy to solve also, I simply used UV coordinates to represent the game world position. With some trial and error, water was recreated with a moving effect. https://cdn.factorio.com/assets/img/blog/fff-323-pitch.mp4 At the beginning of 2019, I pitched the prototype to the team. Sadly it was not really accepted mostly because of the movement. However, I sat down with Albert and talked and tweaked values to more appealing ones. After that, we basically forgot about it. Half a year passed and that solution was back on the table, I only had to solve reflections, foam, transparency, out of map transitions, and some other stuff. Solving reflections, transparency and foam resulted in using a render target to save information for water shader. A render target is just a texture on which you can draw. Using three channels RGB, I am able to save three kinds of information. Red for reflections, green for transparency, and blue for foam. All drawing is additive to account for multiple tiles drawing on top of each other. This way we are able to add information not only for shore, but also for entities. https://cdn.factorio.com/assets/img/blog/fff-323-layers.mp4 For out of map we updated our jelly feeling with waves on top. Basically we left the old graphics on the bottom and added animated water on top. For cutting/masking out water where we want, I used another shader that generated green waves in the water render target. Now some of you might ask why we did not use a waterfall. I mean it would look nice having a waterfall to this pitch-black hole of nothing. The reason is waterfall was the first thing we tried, and concluded that the jelly looks better and cleaner. https://cdn.factorio.com/assets/img/blog/fff-323-out-of-map.mp4

Water animation - Game integration (posila)


For a long time, in order to make terrain rendering fast, we would keep an offscreen buffer with terrain that was rendered in the previous frame, and reuse it to render terrain in the current frame. If the players view didnt change at all, we would use the offscreen buffer as is, if the player moved, we would shift the buffer accordingly, and render just the bits that were not visible before. Zooming or changing tiles in the view would invalidate the content of the offscreen buffer, and the terrain would have to be re-rendered for the entire view. But that happens only in a fraction of frames, so its not a big problem. You may have noticed this optimization is incompatible with rendering animated tiles, so for the initial integration of Ernestas water effect, I had to force a full redraw every frame. This created a performance issue, as the tile render prepare step would take up 3ms (almost 1/5 of total frame time) when zoomed out. Why does that matter? The games main loop runs in 3 major stages:
  • Update - progresses the game state one tick forward.
  • Prepare render - collects the data that is needed to render the current view.
  • Render - uses this collected data to issue commands to the GPU.
While game update and render are executed in parallel, neither of them can run while prepare render does (more on this in FFF-70). So 3ms of additional prepare time means 3ms less can be spent in update before the update rate drops below 60 (and I dont even want to mention how much time it would take in debug build, Ill just say that Id expect a lot of nasty looks from coworkers). Luckily, I already had an idea how to solve this. The water animation depends only on global time, and the vertex data of water tiles doesn't change in between the frames, so instead of caching the finished terrain render in a texture, we can cache the data resulting from prepare render, which we call draw orders. To make it work, we cache draw orders per-chunk, and we only run prepare render on chunks that have just entered the player view (and werent in the cache already). That pretty much solves the problem of the render prepare and has some nice side benefits. First of all, changing render scale doesnt need to invalidate the new cache, so zooming doesnt cause prepare render to run for all tiles in the entire view. Secondly, it creates opportunities for other future optimizations - for example, we can start caching tile draw orders that are likely to enter into the view in advance and spread this work over multiple ticks, or we can generate tile draw orders for each chunk in parallel as they are independent of each other now. Even though the water effect is relatively cheap, some of our players play the game on really weak hardware, which already struggles with the current state of the game, so we needed to add an option to turn the effect off and essentially revert back to the old behavior. Initially I thought we would even use the old water sprites, but because we had to change the tile transition definitions, the old water would look really bad. I have decided to always render water using the new effect, but if you disable the animation, it will render frozen in time and will be cached to the offscreen buffer. Since we were keeping the offscreen buffer logic around, we could utilize it for everyone if possible. I added a flag to cached per-chunk tile draw orders, that determines if the chunk contains a dynamic effect (and therefore needs to be rerendered each frame - if the animation is enabled) or if it can reuse pixels from the previous frame. This means when rendering chunks without any water (E.G, the middle of your factory), the new water effect will have no impact on performance. Modding When seeing this you might get excited about the possibilities for modding. Well, dont just yet. The system has been setup for making it possible to define different tile effects, but at the moment it is limited to allow just 1, which is used to define the water effect. I plan to lift this restriction in the near future, but in the end youll be limited to only changing the properties of the effect we made. But that still might be interesting enough, due to ability to change the noise texture. There is still no plan to support custom shader definitions before 1.0. As always, let us know what you think on our forum.


[ 2019-11-29 14:53:19 CET ] [ Original post ]

Friday Facts #322 - New Particle system

Read this post on our website

Release plans (Klonan)


This week we released version 0.17.79, and marked it stable. Internally we have been calling this 'Stable 3', and the main feature was the new tooltips we showed in FFF-318. There is one constraint we put on ourselves when we started this more swift feature release schedule: We want to avoid breaking mods. This is easy enough in principle, don't start renaming things, don't remove API features, etc. However as we develop further, there are certain features and improvements that we can't realistically do in a way that won't break mods, such as the new Character GUI (FFF-289) and color correction (FFF-320). It is for this reason that we are going to accumulate some of these mod breaking changes, and release them all at once. Since it will definitely be breaking mods, we will bump the major version number, so it will be 0.18.0. We have already internally started merging in these 0.18 features into our master branch, so we will not be doing any more 0.17 releases (unless something absolutely catastrophic is discovered).

The problem with particles (Klonan)


Particles have been in the game for as long as anyone can remember, and they are pretty simple all things considered. They are a small mostly decorative entity, that we use to add a bit of visual gratuity to the death and dying of bugs and machines. For instance, Biters are full of blood, so when they die, they make quite a splash. Lets try to count how many particles we spawn in a typical dying explosion. https://cdn.factorio.com/assets/img/blog/fff-322-biter-die.mp4 In this clip, the blood particle sprite has been replaced with a debug visualisation, to make counting easier So it's quite a few. The Biter spawned 427 particles, and the Spawner 749. Well they don't persist very long, and they're only decorative, so it's all fine right? One key word I would like to highlight in the previous description, is that they are an entity. When kovarex and slpwnd started making Factorio, they made a robust system for managing game objects and their interactions - the entity system - and everything that has a physical representation in the game world was built on top of this system. As the game grew bigger, it became obvious, the entity system is too heavy weight for some things, and we can get better performance by creating more specialized systems. This led to removing items on belts from the entity system in 0.12, and doing the same for smoke and terrain decoratives in later versions. Despite most other games or game engines having very efficient particle systems from the early stages of development, particles in Factorio are still piggybacking off the entity system in 0.17. This means that particles are registered on the game surface in the same generic way as everything else. This also means, that they are iterated through when doing entity searches. So what sort of engine actions do entity searches?
  • Area trigger effects - such as grenade, flamethrower stream damage, atomic bomb, poison capsule.
  • Pathfinding - To check if a path can traverse a given tile.
  • Movement collision checks - such as Characters, Units, Projectiles.
  • And many others...
As you can imagine, having thousands of extra entities to iterate through every tick, can start slowing down the simulation. The worst case these days is defending your walls with flamethrowers. In the image below, all entities are highlighted with a debug visualization.

If you lost count, this scene contains 15,689 entities Flamethrowers vs Biters are pretty much the perfect example of the problem:
  • The biters need to check every tick when they move if they collide with anything.
  • When the flamethrower streams land, they do splash damage, which is an area trigger effect.
  • The flamethrower stream also creates the fire on the ground, which does a collision check.
  • Every 10 ticks, the Fire on the ground do damage with an area trigger effect.
  • The flamethrowers kill biters very efficiently, so a lot of particles spawn in a very short amount of time.
This combination leads to some significant slowdowns later in the game when big groups come knocking. Also, since we improved the pathfinding, the problem is even worse in the latest versions of 0.17. So how do we solve it?

Particle Optimization - Technical (Rseding)


When Posila first talked to me about doing a re-work of how Particles function in the game I had a lot of ideas. Not all of them worked out in the end but they sounded nice:
  • They wouldn't be entities.
  • They would work like smoke does (stored in contiguous blocks of memory).
  • They wouldn't need to be updated each tick if they didn't effect the game state.
In the end I found that it wasn't worth the added complexity to make #3 work. The process Particles needed to not be entities. Something being an entity has a lot of memory and performance overhead that particles just didn't need. Unfortunately when I implemented artillery I made the manual-targeting marker a particle. The reasons why don't matter any more, but it meant I had to add migrations to handle that and then migrations to handle removing all of the entity particles. I stripped out all of the extra data/logic from particles that they no longer needed - reducing the size of each particle in memory from 224 bytes to 64 bytes. As a side effect of making them not entities it also reduces the amount of information that has to be saved in the save file. However, in most cases particles don't exist long enough to end up in the save file so that didn't really matter. I needed some place to store/work with the particles runtime as they are created, exist for some short amount of time, and go away. Most stuff in the game ends up being stored on a given chunk (a 32x32 area of the world). In the case of particles I didn't care at all about any of the other stuff on a given chunk so I didn't want to stick them there. Instead, I made a separate thing that functions very closely to chunks and called it "particle chunk". The key differences being: they only exist when there are particles to update on them and the only data they hold are particles. That meant when the game needs to go over each particle to update them, all it has to do is go over all of the "particle chunks" that exist and run update. Additionally since I had full control of these new particle chunks I can recycle them in memory as needed to avoid spending extra time allocating and de-allocating memory as particles come and go. The end result is a nice performance boost, reduced memory usage, and simplification of the logic around how particles work. A simple unscientific test we performed was nuking the same biter base in the old system and the new system, and recording what the max update tick time was.

The circular ring of entities around the edge are the 'Atomic bomb wave' projectiles. Old system:
  • Max Entity update = 7ms.
  • Entity count (Excluding projectiles) = 7769
New system:
  • Max Entity update = 2.4ms.
  • Max Particle update = 1.7ms
  • Entity count (Excluding projectiles) = 786
This is not very scientific or highly controlled, but just to give an idea of the scale of the improvement. A 10x reduction in the number of created entities, and about a 40% reduction in max update time. Having the new optimized particle system also means the GFX team can go a bit more crazy with particle effects in the future... As always, let us know what you think on our forum.


[ 2019-11-22 12:44:52 CET ] [ Original post ]

Version 0.17.79 released

Bugfixes


  • Fixed that the infinity pipe mode could sometimes reset when changing other infinity pipe settings. more
  • Fixed that electric energy interfaces didn't consume power correctly. more
  • Fixed market GUI not showing price in the tooltips of modifiers. more
  • Fixed market GUI showing empty price property in the tooltips when no price is set.
  • Fixed lights render quality slider in graphics settings missing tooltip. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-11-19 16:25:30 CET ] [ Original post ]

Factorio version 0.17.78

Changes


  • When a team loses in PvP, all their characters will die.
  • Technology GUI shows saved progress of partially-researched technologies.

Bugfixes


  • Fixed a crash when when loading modded saves that had construction robots working on modded entities.
  • Fixed that 'corpses' and 'dying_explosion' wouldn't be created on the correct force. more
  • Fixed that LuaEntity::get_fuel_inventory() didn't work on burner pumps. more
  • Fixed ammo turret tooltip not showing the damage bonus correctly. more
  • Fixed fluid name and amount not being shown when the tooltip is on the side. more
  • Show how module energy consumption is applied more clearly in the tooltips. more
  • Fixed several issues related to modded reactors set to use electric energy. more
  • Fixed spitters were not able to destroy trees and rocks. more
  • Fixed that shift+click recipes in cheat mode wasn't able to handle recipes that included fluids but still only produced 1 item result. more
  • Fixed a difference in map editor paused vs unpaused game ticking related to enabled/disabled train stops. more
  • Fixed that produce item per hour achievements could not be progressed. more
  • Fixed an issue with reading localised strings in Lua. more
  • Fixed that right clicking to add 1 item to assembling machines had no limit. more
  • Fixed that teleporting players/cars between surfaces would invalidate lua references to them.
  • Fixed a crash with trains that had wheels.direction_count = 0. more
  • Fixed statistics not counting items correctly on large intervals when a large number of items are produced/consumed. more
  • Fixed Beacon ghost tooltip missing some information. more
  • Fixed ghost tooltips not showing correct max energy consumption.
  • Fixed tooltips for tile creating items showing wrong title. more
  • Fixed blueprint strings not saving empty values for some circuit network settings. more
  • Fixed PvP config import would always append the default item and equipment lists. more
  • Fixed that creating infinity chests with logistic_mode set would ignore request filters. more

Scripting


  • Added LuaEntity::command, LuaEntity::distraction_command, LuaUnitGroup::command, and LuaUnitGroup::distraction_command reads.
  • Added LuaUnitGroup::is_script_driven read.

Modding


  • Changed RollingStockPrototype::wheels to be optional.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-11-15 18:16:35 CET ] [ Original post ]

Friday Facts #321 - Countdown

Read this post on our website.

1.0 date (kovarex)


Hello, we feel that the Factorio development is taking way too long. The approach "It is done when it is done" was serving us well to deliver a high quality product, but if we continued this way, we would be doing it basically forever. A lot of us don't have any problem working on Factorio for some more time, but the main problem is, that we would like to introduce new features and content instead of just polishing parts that are already present in the game. We also considered, that the game is quite polished now, and if we just pushed the button to release 1.0, it wouldn't be a catastrophe. From our perspective, a lot of things wouldn't be finished, but from the perspective of a new player, the things we are working on now are mainly nitpicks. With this in mind, we decided to just specify a 1.0 release date publicly, so we have to stick with it. We will just focus on the most important aspects as we approach the date, and we just do whatever we have time to do. Once the 1.0 happens, we can have some rest and after that, we can finally focus on the content and features again. The date is 25th September 2020. Version 1.0 does not mean that development on the game will end, or that Factorio is 100% finished. When we have a better idea of what we will be working on after the 1.0 release, we will let you know.

GDS 2019 (Klonan)


Game Developers Session 2019 is happening in a few weeks, Friday 29th and Saturday 30th of November. This year, like last, we are silver sponsors of the event, so you will see our banners around the venue if you attend. This year we are happy to have two of our team doing talks at the conference:
  • Albert - "Developing the Visual Style of Factorio".
  • Vaclav - "Technical Side of Creating Factorio Graphics".
You can read a bit more about our talks and others on the speakers page. Other than our two speakers, a lot of the team will be attending the conference, so if you see anybody sporting a Factorio t-shirt, it could be one of us (don't be afraid to come talk to us). We also took the opportunity to do some updates to our cover art.

The Factorio team must grow (Klonan)


We have been on a bit of a hiring spree lately, trying to fill gaps in the team where we can identify them. We are happy to say, we have continued our team growth, with two new additions to the team. Ian is a sound designer from the UK, who has moved to Prague quite recently. He will be working with us full-time here in the office, and with the help of Rseding for engine features, will be developing the soundscape of the game as we narrow in on the 1.0 release. Next up is Allaizn. You might remember a few of our team mentioned him in past Friday Facts, and he is infamous for his experiments with cars on belts. He has had source access to the game for a long time, and in the past has made some good contributions through the program, so he has been able to get up to speed with us very quickly. For now he is reinforcing Posila in the Graphics backend department. For some more details on our new colleagues and the rest of the team, we have short bios for everyone on our Team page. As always, let us know what you think on our forum.


[ 2019-11-15 15:54:55 CET ] [ Original post ]

Version 0.17.77 released

Changes


  • When a team loses in PvP, all their characters will die.
  • Technology GUI shows saved progress of partially-researched technologies.

Bugfixes


  • Fixed a crash when when loading modded saves that had construction robots working on modded entities.
  • Fixed that 'corpses' and 'dying_explosion' wouldn't be created on the correct force. more
  • Fixed that LuaEntity::get_fuel_inventory() didn't work on burner pumps. more
  • Fixed ammo turret tooltip not showing the damage bonus correctly. more
  • Fixed fluid name and amount not being shown when the tooltip is on the side. more
  • Show how module energy consumption is applied more clearly in the tooltips. more
  • Fixed several issues related to modded reactors set to use electric energy. more
  • Fixed spitters were not able to destroy trees and rocks. more
  • Fixed that shift+click recipes in cheat mode wasn't able to handle recipes that included fluids but still only produced 1 item result. more
  • Fixed a difference in map editor paused vs unpaused game ticking related to enabled/disabled train stops. more
  • Fixed that produce item per hour achievements could not be progressed. more
  • Fixed an issue with reading localised strings in Lua. more
  • Fixed that right clicking to add 1 item to assembling machines had no limit. more
  • Fixed that teleporting players/cars between surfaces would invalidate lua references to them.
  • Fixed a crash with trains that had wheels.direction_count = 0. more
  • Fixed statistics not counting items correctly on large intervals when a large number of items are produced/consumed. more
  • Fixed Beacon ghost tooltip missing some information. more
  • Fixed ghost tooltips not showing correct max energy consumption.
  • Fixed tooltips for tile creating items showing wrong title. more
  • Fixed blueprint strings not saving empty values for some circuit network settings. more
  • Fixed PvP config import would always append the default item and equipment lists. more
  • Fixed that creating infinity chests with logistic_mode set would ignore request filters. more

Scripting


  • Added LuaEntity::command, LuaEntity::distraction_command, LuaUnitGroup::command, and LuaUnitGroup::distraction_command reads.
  • Added LuaUnitGroup::is_script_driven read.

Modding


  • Changed RollingStockPrototype::wheels to be optional.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-11-14 19:34:40 CET ] [ Original post ]

Friday Facts #320 - Color correction

Read this post on our website.

Color correction (Albert, V453000)


Factorio is in a state that even though is not yet finished, it is very close to it's 1.0 version. That means that most of the work is done and we are polishing the game in order to make it bright. That's what we've been doing for the past 2 weeks. Literally making it bright. Since years I wanted to do this post-production work. But I didn't dare to do it until most of the graphics were finished. I was afraid of breaking the consistency of the look and our production pipeline. Now it's different. There's only a couple of entities to re-design and some other stuff to do, but in general this missing details are not affecting the possibility of working in the post-production. Factorio is a dark game. I mean conceptually. All these things about industrializing a planet, polluting an entire world just for the sake of the factory, and killing all its inhabitants are not precisely happy concepts full of light. This old article could explain better my thoughts regarding this concept. But the look of the game was dark, too dark. So we cleaned it up without betraying its spirit. Like restoring an old painting.
The difference can be subtle, but very effective. We added more light, and a little bit of color saturation. Adding these general changes to the entire sprites collection is not an easy task. Many sprites were badly affected by this general correction. V453000 was fixing individually the broken sprites and icons in order to keep the consistency with the new context. We took the chance to work on the terrain a bit further. Not only this color correction was applied, but the contrast and integration with other terrains was also improved. Also experimenting with the color of the trees, trying to achieve a more colorful feeling with the excuse of an alien planet. I have to say the Alien Biomes mod was opening my mind - a little - to experiment with the color a bit further.
In order to break this general brown feeling, we added a more orange tonality to the sand biome. Here is were you can the difference more. Going further to too saturated colors is dangerous, after all, the terrain is a background that should provide a good and comfortable contrast with the entities and the icons.
Touching terrain colours means touching map colors also. We were very keen to keep the visibility of the map information and the similarity with the terrain. The result is a more vibrant look in the entire game.
We tweaked the night also. Thanks to posila and Wheybags, we can use LUTs (Look up tables) to dynamically modify the colors. Instead of playing with the alpha channel of a solid black layer on top of the game. Now we can gradually move to a different color palette for night with more control. So the colors are losing their saturation and becoming more blue and cold. This is important, because part of the annoying darkness of the game comes from this black layer.
We are still experimenting with this LUT, and the transitions of day/night cycles. I'm pretty sure also that I will have to touch the map colors for some missing details and fine tuning. Possibly there is some entity that is not in its best shape with these new color palettes, and maybe we keep tweaking the terrain. But I feel very confident with these additions and I'm very sure that these changes will improve the experience of playing Factorio. After playing with these colors, the feeling is good. I hope you see it the same way.

Updating mods (V453000)


By changing the colors of all game graphics, most mods are going to look out of place. Weve used scripts to apply LUTs to most of the images, and one such script is ready for mod authors to clone or download here, together with the information of which LUT was used for which spritesheet in the game data, with the exception of terrain tiles, electric wires and combinators which were adjusted manually. For technical support dont hesitate to contact me directly, youll get quickest reply by messaging me (V453000#1894) on the Factorio Discord. We still have some work to do on the LUTs, so they aren't going to be ready for release for another short while. As always, let us know what you think on our forum.


[ 2019-11-08 15:36:54 CET ] [ Original post ]

Version 0.17.76 released

Changes


  • Energy consumption is no longer shown in the tooltip for void energy sources.

Bugfixes


  • Fixed a bug in NPE where Compilatron would sometimes loop around smashing things. more
  • Fixed possibility of dying just before a cutscene in NPE, which would lead to a crash. more
  • Fixed game crashing in NPE if it can't find anywhere to spawn a biter. more
  • Fixed using dark coal icon on dark speech bubble background. more
  • Fixed a crash when loading modded saves without the mod when you had entities marked to be upgraded to the now removed modded items but the entity is still valid.
  • Fixed incorrect string for "Fuel Pollution" in tooltip. more
  • Fixed tooltip not showing max consumption correctly when using modules. more
  • Fixed battery equipment and accumulator tooltips showing wrong input flow limit when it's unlimited. more
  • Fixed item tooltips not showing custom_description. more
  • Fixed some item tooltips having incorrect title or description.
  • Fixed that hovering over a logistic request didn't highlight inventory items. more
  • Fixed pump tooltip not showing pumped amount when pumping from a fluid wagon. more
  • Show the products of a recipe more clearly when the product has a probability and/or an interval defined. more
  • Fixed a crash when restarting the game after it failed to load modded fluidboxes. more
  • Fixed tech tree quantity icon being shown incorrectly. more
  • Fixed an exploit related to upgrading ghosts while a robot is trying to work on them. more
  • Fixed target leading logic would cause turret to shoot outside of its range sometimes. more

Modding


  • Added AmmoTurretPrototype::entity_info_icon_shift.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-11-07 15:56:37 CET ] [ Original post ]

Version 0.17.75 released

Features


  • Construction robots will attempt to batch build tiles.

Changes


  • Tooltips reworked. They now have a new structure and look.
  • Properties in tooltips have been reorganized and reworked. Common properties have been added to categories.
  • Added more information to tooltips, for example to be able to calculate steam power and nuclear ratios.
  • Recipe and item tooltips are now separate. Item tooltips will be shown for each product in the recipe, if relevant.
  • Descriptions and Total Raw can be hidden using the interface setting.
  • Reorganized the interface settings menu.

Bugfixes


  • Fixed a crash when switching between the map editor and the ghost controller type. more
  • Fixed car movement animation played forwards when reversing. more
  • Fixed a crash related to using LuaCustomTables incorrectly. more
  • Fixed that accumulators wouldn't copy circuit signals correctly in some cases. more
  • Fixed a crash related to removing all collision masks from rails. more

Modding


  • Added ProductPrototype::show_details_in_recipe_tooltip. It determines if a product tooltip should be shown when hovering a recipe.

Scripting


  • Added filtering support for several common Lua events.
  • Added LuaEntity::logistic_network write for construction and logistic robots.
  • Added "lifetime" optional entity creation parameter for speech-bubble entities.
  • Added LuaEntityPrototype::max_distance_of_sector_revealed and max_distance_of_nearby_sector_revealed read.
  • Changed RecipePrototype so it calculates catalyst from ingredients and products automatically if not manually defined.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-11-04 16:14:23 CET ] [ Original post ]

Friday Facts #319 - New T-shirts Lua event filtering

Read this post on our website. Hello, There is a bit of a cold/flu going around the office, but it isn't severe enough to dampen our spirits (I don't like the daylight savings though).

New T-shirts (Jitka, Albert, Ale, Klonan)


Ever since we launched the classic Grey T-shirt back in November 2017, we've been asked when we're going to have more designs. Over the last few months Jitka, Albert, and Ale, have been working on our new collection, which is now available.
Check out our store page for full product details. We chose the Inserter and the Electronic circuit, as we feel that they are some of the items that best represent the game.

Once again, its the small details of which we are really proud. This time we are incorporating the new Wube logo into the print, as well as continuing our Factorio Dude printed label. We have also updated our classic Factorio logo on grey with the new T-shirt design, which means that all the T-shirts are available in 3XL (Triple-XL), including the older design which previously only went up to 2XL. We have also printed a small batch of the Factorio logo T-shirts in a Ladies cut. Several weeks ago, we mentioned that we bought a new rack for the server room (FFF-315). The secret we have been keeping is that we didn't just buy new racks for the server room, but also for the merchandise room. Now that we have the new T-shirt collection, the shelves are filled quite nicely.
The new T-shirt collection is available on our website from today. Please bear in mind that we are packaging and shipping all the T-shirts ourselves in the office, we aren't handling things through any 3rd party distributor. What this means is that shipping isn't super fast and we can't really guarantee any shipment dates. Generally the T-shirts reach European addresses within 1 week, and reach North America within 2. With Christmas approaching, shipping times may be longer, so if you are looking to gift a Factorio T-shirt this upcoming holiday season, we would recommend ordering as soon as possible. Please note we still impose a 3 T-shirt limit on all orders.

Lua event filters (Rseding)


Every so often someone makes a mod interface request that grabs my attention - not because of the actual benefits the request will give (although that helps) but from a pure challenge perspective: I start thinking "that sounds difficult (and fun) - but I think I can do it - so how I can do that in an efficient/expandable way?...". Several weeks ago someone requested a way to filter the different prototypes from the game on the C++ side instead of having to do it all Lua side:
  • Grab all of them.
  • Iterate through them one by one.
  • Store only the ones I care about.
Their reasons made sense to me and it was one of those challenging things that grabbed my attention. I finished it - and it has been out for several weeks. Shortly after that someone asked for the same system for Lua events; mentioning that most mods don't actually want most events when they subscribe to one - but only a small subset of what would trigger a given event. It also made sense to me and it was even more of a challenge to take the already working filtering system I had and make it work for something I didn't intend. The end result though works quite nicely and can be expanded as we find different events needing different filters.
What this means overall, is that modders will be able to write cleaner and more efficient Lua scripts, and everybody will benefit from less UPS spent filtering the events on the script side.

/r/Factorio Extra Life charity stream (Klonan)


This weekend the moderators over at the Factorio subreddit are taking part in the Extra Life charity event. They will be streaming Factorio to help raise money for Children's hospitals in the US and Canada. There are some more details on the Reddit post. As always, let us know what you think on our forum.


[ 2019-11-01 14:12:35 CET ] [ Original post ]

Friday Facts #318 - New Tooltips

Read this post on our website. Hello, we just released 0.17.73, with 0.17.74 coming very soon. This is just some bug fixes and further pathfinding improvements, and we hope to be able to mark the release as Stable next week.

The new tooltips (Twinsen)


As part of our big GUI update, I've been working on one particular part: the tooltips. We worked not only on updating the style, but also how the information is structured and sorted, added missing information, removed irrelevant information. This concerns entity, item and recipe tooltips, but almost all tooltips were touched one way or another. Many things were changed. I will go through some of the more important changes. The new look
First thing to see is the new style Albert has worked on. They now have the same general style as the technology tooltips. We tried to keep them as compact as possible, as sometimes there is quite a lot of information to show. For the screenshots in this blog post, I set the background to be non-transparent. Unfortunately they don't blend very well with our blog background, but in game you will notice that they are slightly transparent and the also have a blurring effect. Together with the shadows, they integrate nicely in the game. Categorization
As you may have noticed already, some common properties like electricity consumption are grouped into categories. Most of the work was defining these categories and trying to figure out what makes sense. These categories help grouping the information but also gives more context to some entity properties. Properties that are directly related to the selected entity type are placed in the "root" category that has no name. This is to avoid having pointless categories like "Inserter" and "Transport belt". New information The place where the categorization really shines is in the tooltips of power generating entities. Now it's much clearer what each entity does and what the ratios are. Entities related to nuclear power were especially confusing. Creating an optimal nuclear setup was almost impossible without the help of the wiki. Now all the important information is there.

Entity tooltips and item tooltips generally show the same properties, but I tried to make the entity tooltips show state information when possible. For example, here's how the item tooltips above look when the entities are placed in the game. Categories are even more useful now, since properties like the fuel inside the machine or the state of the fluid output pipe can now be grouped inside the relevant categories.
Other entities have more properties added to them, such as inserter rotation speed, rolling stock weight, laser turret energy use per shot, flamethrower turret burning and slowdown effect, and many more. Tooltip separation
The recipe tooltip was kind of a Frankenstein's monster of recipe information and item information mashed together. We also had the problem with what properties to show when a recipe has multiple output products. The solution was to split the tooltips and show a "multi-tooltip" when hovering a recipe, Now, when hovering over a recipe in the crafting menu the recipe tooltip will be shown. An additional item tooltip will be shown for every product, as a separate tooltip, if the item tooltip has a description and/or properties to show. While this improves things quite a bit in vanilla, complex mods will benefit from it even more. Recipes can now have their own textual description and each separate product can be explained independently if necessary.
The same mechanism is used for the tooltip shown when hovering a logistic request in the character window. This means that an item tooltip will look the same regardless if it's shown while hovering a recipe, an item in the player inventory or a logistic request. No more mixing of information. Most of the implementation is done, just a few tweaks and bugfixes left to do, plus any changes based on your feedback. If all goes well, the new tooltips will be part of one of the next experimental feature releases, which we hope to release in the next couple of weeks. After that, more GUIs to come.

Construction robot tile batching (Rseding)


One of the things I've wanted to tinker with for some time is having a construction robot build multiple things at the same time. Construction robots spend the vast majority of their time just flying around doing very little work and can technically use the cargo capacity research but only ever use it for logistic related things. https://cdn.factorio.com/assets/img/blog/fff-318-not-batched.mp4 One of the main things which stopped me from looking into this in the past was performance concerns: figuring out which thing(s) a robot can work on in a batch gets expensive very quickly and with robots existing in the 10s of thousands range I can't just make each one 5 times as expensive. A few weeks ago I thought I finally figured out a way to at least make robots able to batch build tiles without loosing too much performance. The thing is: when tiles are built they are built in large square patterns so I can safely assume there will be other tiles to be built directly next to a given tile that hasn't already been assigned a robot to work on. After some experiments and then several re-works to optimize what was already quite fast I was satisfied with the result. https://cdn.factorio.com/assets/img/blog/fff-318-batched.mp4 Of course, the next question people ask is: what about doing it for entities? I could, but it doesn't make as much sense for them because they aren't always 1x1 (performance drops off quickly as the size grows - tiles are always 1x1), aren't typically built in tightly packed squares like tiles are, and in the common case it would just make robots more expensive to run while rarely making them build faster. So, for now they just batch build tiles. https://cdn.factorio.com/assets/img/blog/fff-318-batched-comparison.mp4 As a more direct comparison, Boskid made this nice setup using two forces with different cargo bonuses. As with the tooltips, the tile job batching will be released as part of our next experimental feature release, which we're calling internally 'Stable 3' (0.17.69 is Stable 1, 0.17.74 will be Stable 2). As always, let us know what you think on our forum.


[ 2019-10-25 13:34:04 CET ] [ Original post ]

Version 0.17.73 released

Graphics


  • Extended transport belt sprites a little bit to avoid rendering glitches at some zoom levels.

Bugfixes


  • Added missing max_work_done_per_tick in map-settings.example.json. more
  • Fixed that accumulator settings could not be copy-pasted. more
  • Fixed that generators could rotate and render incorrectly. more
  • Fixed bad quest GUI in NPE. more
  • Fixed a crash related to the map editor "recipe locked" setting for assembling machines. more
  • Fixed that Military science pack was sorted after Chemical science pack in the Lab GUI.
  • Fixed low quality texture compression would create major artifacts on some sprites. more
  • Fixed a crash when reading storage_filter on infinity chests. more
  • Fixed a crash when reading LuaEntity::tree_stage_index_max in some cases. more
  • Changed blueprinting selection previews to include both tile ghosts and tiles when only tile ghost entities are being selected. more
  • Fixed a crash that could happen when path_resolution_modifier was set to very low values. more

Modding


  • Changed input_flow_limit and output_flow_limit so 0 means 0 instead of unlimited (no value still means unlimited).

Scripting


  • Added LuaEntity::driver_is_gunner read/write.

Balancing


  • Changed: Amount of copper-cable in Introduction scenario crash site.
  • Changed: Increased minimum size of a resource deposit to 100 in the Introduction scenario.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-10-24 18:45:52 CET ] [ Original post ]

Version 0.17.72 released

Bugfixes


  • Fixed another biter-related crash. more
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-10-18 13:30:08 CET ] [ Original post ]

Friday Facts #317 - New pathfinding algorithm

Read this post on our website.

New pathfinding algorithm - Oxyd


Last week we mentioned the change to make biters not collide with each other, but that wasnt the only biter-related update we released this past week. Somewhat coincidentally, this weeks updates have included something Id been working on for a few weeks before an upgrade to the enemy pathfinding system. Pathfinding When a unit wants to go somewhere, it first needs to figure out how to get there. That could be as simple as going straight to its goal, but there can be obstacles such as cliffs, trees, spawners, player entities in the way. To do that, it will tell the pathfinder its current position and the goal position, and the pathfinder will possibly after many ticks reply with a path, which is simply a series of waypoints for the unit to follow in order to get to its destination. To do its job, the pathfinder uses an algorithm called A* (pronounced 'A star'). A simple example of A* pathfinding is shown in the video below: A biter wants to go around some cliffs. The pathfinder starts exploring the map around the biter (shown as white dots). First it tries to go straight toward the goal, but as soon as it reaches the cliffs, it 'spills' both ways, trying to find a position from which it can again go toward the goal. https://cdn.factorio.com/assets/img/blog/fff-317-basic-pf.mp4 In this video, the algorithm is slowed down to better show how it works. Each dot in the animation represents a node. Each node remembers its distance from the start of the search, and an estimate of the distance from that node toward the goal this estimate is provided by what's called a heuristic function. Heuristic functions are what make A* work it's what steers the algorithm in the correct direction. A simple choice for this function is simply the straight-line distance from the node to the goal position this is what we have been using in Factorio since forever, and its what makes the algorithm initially go straight. Its not the only choice, however if the heuristic function knew about some of the obstacles, it could steer the algorithm around them, which would result in a faster search, since it wouldnt have to explore extra nodes. Obviously, the smarter the heuristic, the more difficult it is to implement. The simple straight-line heuristic function is fine for pathfinding over relatively short distances. This was okay in past versions of Factorio about the only long distance pathfinding was done by biters made angry by pollution, and that doesnt happen very often, relatively speaking. These days, however, we have artillery. Artillery can easily shoot and aggro massive numbers of biters on the far end of a large lake, who will then all try to pathfind around the lake. The video below shows what it looks like when the simple A* algorithm we've been using until now tries to go around a lake. https://cdn.factorio.com/assets/img/blog/fff-317-long-pf-before.mp4 This video shows how fast the algorithm works in reality; it hasnt been slowed down. Contracting Chunks Pathfinding is an old problem, and so there are many techniques for improving pathfinding. Some of these techniques fall into the category of hierarchical pathfinding where the map is first simplified, a path is found in the simplified map, and this is then used to help find the real path. Again, there are several techniques for how exactly to do this, but all of them require a simplification of the search space. So how can we simplify a Factorio world? Our maps are randomly generated, and also constantly changing placing and removing entities (such as assemblers, walls or turrets) is probably the most core mechanic of the entire game. We dont want to recalculate the simplification each time an entity is added or removed. At the same time, resimplifying the map from scratch every time we want to find a path could quite easily negate any performance gains made. It was one of our source access people, Allaizn, who came up with the idea that I ended up implementing. In retrospect, the idea is obvious. The game is based around 32x32 chunks of tiles. The simplification process will replace each chunk with one or more abstract nodes. Since our goal is to improve pathfinding around lakes, we can ignore all entities and consider the tiles only water is impassable, land is passable. We split each chunk into separate components a component is an area of tiles where a unit can go from any tile within the component to any other within the same component. The image below shows a chunk split into two distinct components, red and green. Each of these components will become a single abstract node basically, the entire chunk is reduced into two 'points'.
Allaizns key insight was that we dont need to store the component for every tile on the map it is enough to remember the components for the tiles on the perimeter of each chunk. This is because what we really care about is what other components (in neighbouring chunks) each component is connected to that can only depend on the tiles that are on the very edge of the chunk. Hierarchical Pathfinding We have figured out how to simplify the map, so how do we use that for finding paths? As I said earlier, there are multiple techniques for hierarchical pathfinding. The most straightforward idea would be to simply find a path using abstract nodes from start to goal that is, the path would be a list of chunk components that we have to visit and then use a series plain old A* searches to figure out how exactly to go from one chunk's component to another. The problem here is that we simplified the map a bit too much: What if it isnt possible to go from one chunk to another because of some entities (such as cliffs) blocking the path? When contracting chunks we ignore all entities, so we merely know that the tiles between the chunks are somehow connected, but know nothing about whether it actually is possible to go from one to the other or not. The solution is to use the simplification merely as a 'suggestion' for the real search. Specifically, we will use it to provide a smart version of the heuristic function for the search. So what we end up with is this: We have two pathfinders, called the base pathfinder, which finds the actual path, and the abstract pathfinder, which provides the heuristic function for the base pathfinder. Whenever the base pathfinder creates a new base node, it calls the abstract pathfinder to get the estimate on the distance to the goal. The abstract pathfinder works backwards it starts at the goal of the search, and works its way toward the start, jumping from one chunks component to another. Once the abstract search finds the chunk and the component in which the new base node is created, it uses the distance from the start of the abstract search (which, again, is the goal position of the overall search) to calculate the estimated distance from the new base node to the overall goal. Running an entire pathfinder for every single base node would, however, be anything but fast, even if the abstract pathfinder leaps from one chunk to the next. Instead we use whats called Reverse Resumable A*. Reverse means simply it goes from goal to start, as I already said. Resumable means that after it finds the chunk the base pathfinder is interested in, we keep all its nodes in memory. The next time the base pathfinder creates a new node and needs to know its distance estimate, we simply look at the abstract nodes we kept from the previous search, with a good chance the required abstract node will still be there (after all, one abstract node covers a large part of a chunk, often the entire chunk). Even if the base pathfinder creates a node that is in a chunk not covered by any abstract node, we dont need to do an entire abstract search all over again. A nice property of the A* algorithm is that even after it 'finishes' and finds a path, it can keep going, exploring nodes around the nodes it already explored. And that's exactly what we do if we need a distance estimate for a base node located in a chunk not yet covered by the abstract search: We resume the abstract search from the nodes we kept in memory, until it expands to the node that we need. The video below shows the new pathfinding system in action. Blue circles are the abstract nodes; white dots are the base search. The pathfinder was slowed down significantly to make this video, to show how it works. At normal speed, the entire search takes only a few ticks. Notice how the base search, which is still using the same old algorithm we've always used, just 'knows' where to go around the lake, as if by magic. https://cdn.factorio.com/assets/img/blog/fff-317-long-pf-after.mp4 Since the abstract pathfinder is only used to provide the heuristic distance estimates, the base search can quite easily digress from the path suggested by the abstract search. This means that even though our chunk contraction scheme ignores all entities, the base pathfinder can still go around them with little trouble. Ignoring entities in the map simplification process means we don't have to redo it every time an entity is placed or removed, and only need to cover tiles being changed (such as with landfill) which happens way less often than entity placements. It also means that we are still essentially using the same old pathfinder we've been using for years now, only with an upgraded heuristic function. That means this change shouldnt affect too many things, other than the speed of the search.

Bye bye TOGoS - TOGoS


Hi everybody! I'm going to be resigning from official Factorio staff after today to start a new job closer to home. The main reason for this switch is that working entirely remotely turned out to be something that I wasn't able to handle all that well. But also, my primary contribution to the project, the programmable map generator, is complete, stable, and pretty well understood by at least one other person, so timing-wise this seemed a good point for me to move on. To working in a cube farm writing Android applications for treadmills, apparently. We'll see how that goes! It's been an honor to be part of this awesome project and to leave my imprint on it. And working on a large and pretty well-managed C++ codebase, full of things done just a bit different than I had ever thought to, has been mind-opening. I also want to thank the community for your continual patience, honest feedback, and the occasional bit of pressure that you put on us to make the game as good as it can be. I'll continue to read the Friday Facts every week, lurk on the forums, and probably update documentation here and there. Hopefully I'll find time to crank out some terrain-altering mods of my own. And I'm looking forward to seeing what else y'all do with it, too. (Which includes working through a backlog of mods -- I have yet to get to the space exploration part of Space Exploration!) Peace out for now.

Community spotlight - 13x9 Micro Factory - Klonan


Over 100 Friday Facts ago we covered DaveMcW's 9x14 Micro Factory (FFF-197). While it may have taken over 2 years, he has improved his design even further, and the result is just as impressive as before. https://youtu.be/9dzQge6pe2o He offers some more explanation of his Micro Factory in this forum post. As always, let us know what you think on our forum.


[ 2019-10-18 11:05:32 CET ] [ Original post ]

Version 0.17.71 released

Bugfixes


  • Fixed a crash that would happen on loading certain saves made in previous versions. more
  • Fixed entity selection could desync from mouse cursor when switching to cutscene controller in multiplayer. more


[ 2019-10-16 15:14:09 CET ] [ Original post ]

Version 0.17.70 released

Features


  • Added interface option to adjust the number of shortcut bar rows that are visible on the screen.
  • Added ability to shift click a research in the technology screen to start that research.
  • Allowed setting filters with the ghost cursor.

Changes


  • Biters and Spitters will no longer collide with other biters/spitters. more

Graphics


  • Added new remnants for several entities. They are still work-in-progress and subject to further change.

Bugfixes


  • Excluding runtime fluid mixing check from assembler migration that caused some crashes when loading a save with mixing in it.
  • Fixed landfill map color on old saves. more
  • Added migration to recalculate tile transitions when tile layer definition changes in tile prototype. more
  • Fixed that artillery remote failure sounds could be duplicated in some cases. more
  • Fixed that the game would still process mod dependencies for disabled mods. more
  • Fixed that underground pipes with different length could sometimes connect one tile further.
  • Fixed that the cursor would appear in the wrong position after textbox alignment was changed by scripting. more
  • Fixed placement of scrollbars around textboxes. more
  • Fixed a crash related to teleporting biters during the ai-completed events. more
  • Fixed that non-square crafting machines without fluid boxes didn't rotate correctly. more
  • Fixed that the game would freeze when trying to find automatic artillery targets with very high levels of artillery range. more
  • Fixed tile ghosts sometimes overlapped on edges which created visible lines. more
  • Fixed that the on_gui_switch_state_changed event would fire twice in some cases. more
  • Fixed wrong damage bonus values in tooltips of combat robots and units in a different force. more
  • Fixed that the research screen would show a technology as "available" when it was queued. more
  • Fixed that LuaEntity::last_user didn't support writing `nil`. more
  • Fixed that mod GUIs could show on top of the technology screen after loading a save. more
  • Fixed a crash when using the /screenshot command. more
  • Fixed that the --disable-migration-window command line option didn't always work. more
  • Fixed that pumps had a drain when using a non-electric energy source. more
  • Fixed a bug in fluid system splitting.
  • Changed order of pipe connections to avoid previous cases of fluid mixing. A.k.a Boskid's deferred pipes.
  • Offshore pumps now set fluid filter automatically based on produced fluid. more
  • Fixed crash when closing shortcut selection list while dragging. more
  • Fixed that biters could get overloaded by artillery and stop moving. more
  • Fixed that biters could get stuck during attacks. more
  • Fixed that biter pathfinding could cause unreasonably large save files. more
  • Fixed that biters would attack in a single file due to their colliding with each other. more
  • Fixed that personal roboports would function with literally no power.
  • Fixed migrating pre-0.17 maps with detached characters that had a grid armor in quick bar would corrupt game state. more

Modding


  • Added optional flying robot prototype property "max_speed".
  • Added light_renderer_search_distance_limit to utility constants.

Scripting


  • Changed LuaEntity::color to also work for cars.
  • Changed LuaStyle::padding, margin to also accept arrays of padding values.
  • Added optional "unit_number" to on_post_entity_died event.
  • Added support to teleport car entity types between surfaces.
  • Added LuaEntityPrototype::call_for_help_radius, max_count_of_owned_units, max_friends_around_to_spawn, spawning_radius and spawning_spacing read.
  • Added LuaForce::research_enabled read.


[ 2019-10-15 20:36:26 CET ] [ Original post ]

Friday Facts #316 - Map editor Lua snippets Non-colliding Biters

Read this post on our website.

Map editor Lua snippets


In the last few weeks, we've really accelerated our work on the campaign. We've been pushing ahead a lot with both the scripting and blocking out the physical level design.One of the problems we've come up against a lot, is that we often need to perform custom edits to the map, which are quite tedious, but not common enough to add a new tool to the map editor for them. For example, something like "disable all the spawners in this region". This kind of problem is easily solved with a little bit of custom Lua code, but getting the specification of the area we want to edit into Lua is a painful process of noting down and typing out location coordinates. It is also easy to lose track of these Lua snippets, as there is no good place to save them. To solve this problem, we decided to add a Lua snippet tool to the map editor. This tool will let you drag your cursor over an area, and it will then run your custom Lua code on that area. The snippets are named, and saved in your player-data.json, so you can keep them around for later. https://cdn.factorio.com/assets/img/blog/fff-316-snippet.mp4 For example, this simple snippet replaces trees with biters. Currently, there doesn't seem to be a very big scene for community made custom maps/scenarios with custom maps, and we're hoping that the example from the campaign once released, as well as the much improved editor we have in 0.17 will encourage more people to give this a go.

Apple signing woes


As some of you may have heard, Apple is introducing a new system called notarizing to their MacOS apps. This is a system where you sign you packages and upload them to apple so they can run something akin to a virus scan, and mark it as approved. As of the new MacOS Catalina version, this will be mandatory. Our friends at Valve were nice enough to send us a warning with some info about the process. Up until now, our MacOS binaries haven't even been signed at all, so this seemed like a good time to get on that. To be clear, you could, and can play unsigned factorio binaries on MacOS, but you need to change your security settings to do so (or so I thought). To test, I grabbed the .app of 0.17.69, signed it, uploaded it to apples notarization server, and got the notarization process to succeed (eventually). I then copied it onto a completely fresh, default settings install of macOS Catalina, double clicked it, and it ran, with no security prompt. Problem solved, right? Well, after that I decided to do a sanity check, and copied over the completely unsigned binary of 0.17.68, and it ran just fine as well, also with no security prompt. So, at this point, it seems like we don't really have a way to test this process, so all we can do is set things up correctly to the best of our abilities, and see if it works for people. The next Factorio release should include signed and notarised macOS binaries, so if anyone has problems with 0.17.70 security warning on macOS, please let us know.This whole process has been rather slow and painful (just getting the notarizing tool working was a bit of a saga in itself), and doesn't inspire much confidence in Apple's developer ecosystem, so if anyone at Apple is reading this, please, please, make this process better. Also to make it known again, we are still looking for a macOS developer to join our team, so if you are interested or know someone who is, please checkout the job listing.

Non-colliding Biters


For a long time we have been improving the biter pathing, with many iterative changes and tweaks. However we have long had a problem in the moment where a group of biters encounters the players base. I am sure the scene below is familiar to all Factorio players: https://cdn.factorio.com/assets/img/blog/fff-316-biters-collide.mp4 This mating dance or whatever it is, has long been a thorn in our side. The reason behind it is quite logical. When moving, the biters are in a group, and everything goes smoothly. However when they see an enemy, they are 'distracted' by it, and individually try to attack it. Since the biters are now moving and pathing as individuals, things start to get messy. The biters find a path, but then there is another biter in the way, so he tries to move and turn around, but there are biters in the way there too, and each of those biters are trying the same thing, so it all goes gets clogged up for a while. The solution we have decided, which some might consider a 'hack' is that we simply don't make biters collide with other biters. In the engine this was a rather simple change, and was already possible just using normal mods. The result speaks for itself: https://cdn.factorio.com/assets/img/blog/fff-316-biters-no-collide.mp4 There is already some 'separation' logic in the engine to keep biters from getting too close to each other, so in the end we get away with a lot of the benefit of no collisions, without the immediate/obvious problem of biters infinitely stacking. There might be some smaller issues to pop-up with this change, and maybe some balancing tweaks to be made, but we are happy with the outcome so far.

Twinsen is going to Poznan Game Arena, Poland


Next week I'll be in Poland for 3 events: If you are in the area and see a guy with a Factorio hoodie, it will most probably be me. I am looking forward to meet any fellow developers or fans attending.

Ludum Dare entry


Over the weekend, two of us (wheybags + Abregado) entered the Ludum Dare game jam. A game jam is an event where people make a game as completely as can be in a fixed time-frame (in this case 48 hours). We ended up making a rather Factorio-appropriate gear puzzle game. Check it out if you're interested.
As always, let us know what you think on our forum.


[ 2019-10-11 15:36:39 CET ] [ Original post ]

Friday Facts #315 - New test servers

Read this post on our website.

New test servers


We recently bought and assembled some high-end PCs, with the hope to gauge the performance, speed up running tests, and potentially consolidate the number of servers we are maintaining internally. The two lucky CPUs were a i9-9980XE 18-core and a Ryzen 3900X 12-core.
We are using the time to complete our test suite in 'heavy mode' as a benchmark. Heavy mode basically saves and reloads the game each tick, and compares a CRC of the map from before and after. It is super slow to run, but the heavy test is critical to help find any possible determinism issues. There is some more info on 'heavy mode' in FFF-63. As a baseline, the 'standard' CPU in the office for developers is the i9-7900x 10-core, which runs heavy tests in about 530 seconds. In real time this is 8 minutes and 50 seconds, a long time for a team member to sit around for results before they can push. We can do better! As you would expect, the new 18-core was blazing fast, with a test time of about 400 seconds, shaving off over 2 minutes. However the Ryzen was a different story, with a test time of about 600 seconds. This goes against what we predicted, where more cores and higher frequency mean lower test times. The initial results from the 12-core Ryzen were worse than from the 10-core Intel; not a good start. So I did some digging and some research, and the answer I arrived at was RAM. When we ordered the parts, not much thought was given to the selection of RAM, just some standard 16GB 2666MHz sticks to fill all the slots. Luckily, I looked on a local Czech website, and they had some stock of the brand new G.SKILL 3600MHz Trident RGB Neo, a high performance RAM stick made exactly to suit our new Ryzen CPU. After installing the new RAM, we had a test result that better matched our expectations: 450 seconds. We knew beforehand that Ryzen liked fast RAM, but we didn't realize how significant of a difference it could make. So now we have set up both these new machines to run tests automatically after each commit, and we are very happy with the result. The new i9-9980XE can compile and run heavy tests faster than our old i7-4790K can compile and run just normal tests. Having it run automatically also frees up individual developers from the responsibility of running heavy tests locally, so they can just push as normal and continue working.

Server room organization


Alongside building the new servers, we also had some new storage shelves installed in the server room. So this week I spent some time moving the servers from their old home (of the floor) onto the new racks, and moving a lot of the 'PC junk' (cables, mice, fans, spidertron, keyboards, SSDs, headphones etc.) that had accumulated around the office into the server room.
We now have 10 servers, some run tests, some do the deployments, etc. We are hoping to reduce this number in the future, as we can have 1 beefy PC do the work that is currently handled by multiple older/slower ones.

Community Spotlight - Nauvis Invasion


This week I spotted a Reddit post by /u/Bladjomir. It is a video of this modded base after he had respawned all the biter bases. I was really in awe at just how different the game can 'feel' once you started adding and combining mods (especially when it is coupled with the classic Red Alert 2 soundtrack). So I messaged Bladjomir asking if I could include his video in this Friday facts, and he took the time to create a brand new video for us to showcase: https://youtu.be/Qekvxw9t7zo As someone who grew up playing the old school RTS games, these videos really hit on some nostalgia for me. What I am really proud of, on behalf of the team here, is just how well the game supports mods. It really is just so amazing to me that we have a engine now that can be extended and overhauled by mods and just works. There will be a time when Factorio base game is finished, when we have made the game we set out to make. Yet even though our vision is complete, anybody can come along and implement their own ideas, rework what we have done, and even (theoretically) turn off the base mod and make essentially their own new game in the engine. So in the (super) long run, I believe that mod support will be critical to keep the game and community alive, and continuing to improve the modding capabilities of the game is a strong possibility for post 1.0 support/updates. As always, let us know what you think on our forum.


[ 2019-10-04 12:53:34 CET ] [ Original post ]

Friday Facts #314 - 0.17 Stable

Read this post on our website. Hello, technically this post is the Pi Friday Facts, but unfortunately we can't think of anything special to do... maybe someone can make a combinator cake... that can calculate Pi?

0.17 stable


We released 0.17.69 as stable this Tuesday. It seems it all went very smoothly, no avalanche of crashes, and only a handful of technical support emails about updating video drivers.
Apart from stable, essentially no development work has happened this week; nearly everyone is on vacation (I am even writing this as I sit in the airport waiting to fly to London for a wedding). We're hoping that at the start of next week, with all the relaxation over, and the pressure of stable off our shoulders, we will get cracking on the next updates with renewed energy. In fact I might be a little optimistic in saying this, but I think we are in for some exciting times here in the team. Before now, we have always done a cycle of having the whole team on development for a few months, then the whole team bug fixing for a few months. This binary approach is what gives us the traditional 'stable' and 'experimental' labels. This is not to say that all bug-fixing would stop once stable it out, quite the contrary, but this has been the general strategy. What we are planning, if the logistics of it turn out okay, is to have significantly smaller feature releases, containing only a handful of new features. This is to have a sort of mixed cycle, and a mixed cycle in two similar ways:
  • Some developers will be on bug-fixing while others are on development.
  • The individual weekly/monthly work of a developer will have a more balanced mix of development and bug-fixing.
For example, while one developer works on a feature for the next feature release, another will be bug-fixing the features in the current release. This is only practically possible if the feature release frequency is relatively high. This new structure has been a long time brewing in our minds, and we think now is the right time to try it out. With the GUIs we really need to do quick iterations and receive fast feedback to the changes. The traditional release flow meant that we could add a new feature to the game, and players wouldn't get their hands on it for months. Then once it is released and we start getting feedback on it, extra time is spent just re-orienting ourselves to the code and how it was written. If the feedback is given expediently, the rework and improvement is much more efficient. Furthermore, I think it is more psychologically effective to work on a mix of bug-fixing and development. This is just theory now, but grounded in some observations I have made over time. Development work, a new feature, new GUI, etc. is generally a long-form creative process. New systems have to be created out of pure thought-matter, ideas for implementation have to be evaluated and determined, and it also involves a lot of 'background processing'. Feature development always has more room for extension, and it is very hard to say 'It is finished'. It is also quite a subjective result, so sometimes it is hard to know if you 'did a good job'. Bug-fixing on the other hand is very short form and challenge oriented. It is like investigating a murder mystery, and really feels like a complete story. Tracking down a problem inside the game engine engages a logical part of your brain, trying to piece together and backtrace where the fault is occurring. Generally the bug has a very clear 'win-condition', and you can close the game and let your mind rest peacefully. The result of a bug-fix is grounded strictly in objective measurements, so you can be reasonably sure if you 'did a good job'. So these two parts of the job are in a way, quite distinct and separate: Development is a long-form creative process; Bug-fixing is a short-term logical process. From all this, my reasoning is that focusing on only one for a long period of time leads to quicker mental fatigue, and that a balanced workload will keep us happier and more productive. In essence, doing development lets our bug-fix circuits rest, and doing bugs lets our development battery recharge. There are also some pragmatic reasons I think the smaller/quicker releases will make things move along more smoothly:
  • Bug-fixes after stable will be released within a short time-frame.
  • The flow of bugs coming in will be less extreme, no more massive waves with each major release.
  • There will be less 'blocking', where unfinished features delay a release. They will just be scheduled for a different release.
  • Feedback will be more focused, so it is easier for us to evaluate.
At the start of the year, I read a book called "Rolling Rocks Downhill" by Clarke Ching. It is a book about software project management, it was quite an enjoyable read, and gave me a lot of inspiration to try and optimize our development effort. At that time we were just wrapping up 0.17, so there wasn't a whole lot of room to make changes to the way we do things. Now that we have stabilized 0.17, and with it, completed the 'traditional' cycle, there is opportunity for a fresh approach. I guess I will give the book another read next week... Anyway, thanks to all of you for such a great year so far, thanks to all our friends on the forum and throughout the community who have helped us in the great bug war of 0.17, and as always, let us know what you think on our forum.


[ 2019-09-27 10:30:11 CET ] [ Original post ]

Factorio version 0.17 - Now stable

Read this post on our website.
It has been 6 months and nearly 70 releases since we first launched 0.17 to the world. Now is the time to let is be enjoyed by all the players of the game. We are going to be continuing our work on 0.17 over the next few months, with small experimental releases of new features, and finishing all the GUI reworks.

New map editor


The new map editor can be accessed directly in-game with the /editor command. Packed with new features and improvements, such as cloning tools, multiple surface support, and time control. The new editor also allows collaborative map editing in multiplayer. More details: FFF-252.

Redesigned enemies


The enemies in the game, the native inhabitants of the planet, have received a major facelift in this update. As well as a graphical overhaul, the attacks and balancing of the spitters and worms has been revised, incorporating skill-based elements and some tactical decision making. More details: FFF-268, FFF-279.

Automatic mod downloads


Now when trying to join your favorite server, you can directly sync your mods with the server from in-game, and automatically join once they are all installed. This massively reduces the friction for joining modded servers. The in-game mod browser has also been redone to help find new mods and manage your installations.

Optimized fluid system


We have massively optimised (and parallelized) the fluid update in 0.17. In effect each section of pipe can be updated independently of other pipe sections. This comes as welcome news for any megabase planners out there. Furthermore we have limited each pipe section to only a single fluid, and will actively block any placement that could mix fluids, to prevent the catastrophe of mixing water into your oil system and bricking the whole system. More details: FFF-271.

Rewritten rendering backend


This release has a completely new rendering backend, written almost from scratch to our exact requirements. The new engine takes advantage of more modern GPU features and is highly optimized. What this means is that the game can now work with much less VRAM and allow players with older videos cards to still enjoy the game in high resolution at 60 FPS. More details: FFF-251, FFF-264, FFF-281. Due to the more modern architecture, some issues may be present with certain hardware configurations, please see this forum thread if you experience any graphical problems.

New introduction scenario


We have added a completely new introduction scenario on a hand crafted map. It gives new players some simple goals and provides a place for them to experiment with a smaller toolset than Freeplay allows. The scenario is open ended, so that players may experiment with larger bases. A separate techtree is provided for this purpose which includes some infinite research. Our companion robot, Compilatron, is also present to help guide the player. More details: FFF-262, FFF-306.

Construction shortcuts


We have added some powerful shortcut keys, which use the intuitive layout we are all used to. Now you can undo your last action by pressing CTRL + Z, quick equip a cut tool with CTRL + X, do quick copy/paste actions with CTRL + C/CTRL + V, and assign robots to upgrade your factory with the new Upgrade planner. More details: FFF-255.

New GUI


We added a new GUI skin, along with the first batch of GUI reworks. The new GUI aims to unify the look and feel of the game, and provide a consistent visual basis for the players interactions with the world. More details: FFF-243.

Much more


As always there are a ton of smaller features and changes to discover in this latest major update. You can read the changelog in game for a full rundown, or checkout the release notes here. We have our plan moving forward for the next version of the game, which you can check out here.


[ 2019-09-24 12:33:48 CET ] [ Original post ]

Friday Facts #313 - Light at the end of the bug tunnel

Read this post on our website. Hello, We have had quite a peaceful week here in the office. Last night we went out for a burger and a beer as a last meal with Ernestas before he flys back home for another few months. It was also quite nostalgic, as we went to a place that we used to go to frequently near our old office, and the staff still remembered us.

Light at the end of the bug tunnel


It seems our 'news' of some programmers taking a break made headlines this last week: Work slows on Factorio while a dev levels his priest in WoW Classic. Even though he is still not level 60, Kovarex found some time to fix a few more bugs, which seemed to go very smoothly, as he is feeling super recharged. We also had Boskid come to visit the office, and he helped us do some intensive testing and test writing. Working together with Dominik, the two managed to find and fix a lot of bugs related to the fluid mixing system. It was certainly more efficient having someone doing QA inside of the office, so it seems our team might be getting a bit bigger. With the last 'blocking bugs' resolved, the bug war is almost at a close. The count on the forum is down to only 16, and the automatic crash reports are looking okay:
We have released version 0.17.69, we are optimistic that this version may be able to be called stable. While this is almost over 1 month after our first 'stable candidate', we are confident now that this version is more stable than 0.16.

Landfill update


In last week's FFF we presented the new landfill terrain. We felt relieved by having another task done in GFX. One of the first reactions in our forums was the idea by eradicator of rotating the grid to 45. It followed a fast mockup made by ThreePounds. The idea was good, and apart from us, some people on the forums agreed. The modification of our sources to get this rotation done was very affordable to us, so we decided to make it official and here we are now presenting it:
This solution is nicer than the 90's one because basically it doesn't interfere with the tile grid of the game, and provides a nice loose space feeling in the general composition. I just felt a bit guilty for not coming with the best approach from the beginning, but luckily our community is very keen to give us feedback on any aspect of the game. Thanks guys for the feedback. As always, let us know what you think on our forum.


[ 2019-09-20 12:27:06 CET ] [ Original post ]

Friday Facts #312 - Fluid mixing saga Landfill terrain

Read this post on our website.

Fluid mixing saga


Hello Factorians, Today I would like to talk to you about my favourite subject - fluid mixing and its prevention. It is a new mechanic introduced in 0.17 that seemed quite simple at first, but has been giving me nightmares ever since. A while ago I took on the task of updating the fluid system (FFF-260). The way it works in 0.16 is that the fluid boxes (the thing that holds the fluid and is contained in entities like pipes or refineries) had no organisation whatsoever except their connections. They would sit there and do nothing and then once per update send fluid somewhere. It had it's issues especially with symmetry, and when you happened to put some fluid where it did not belong, you could end up requiring major demolition works. My task was to develop a better algorithm to move the fluids, and a very very optional side task I had in mind was to do something about the fluids getting to wrong places and mixing. We started by organizing the fluid boxes into systems (connected FBs make a system) managed by a special fluid manager, and optimizing the heck out of it (FFF-271). Soon after, I started working on the new algorithm and anti fluid-mixing. Until then nobody really considered preventing the fluid mixing seriously as it did not seem possible. But when I thought about it, it did not seem that hard. The idea is to simply not allow any action that would lead to fluids getting where they are not supposed to go. When you build a steam pipeline, you should not need nor want it to touch another fluid. In principle, it would only require a few quite realistic mechanisms:
  • A connected block of fluid boxes would either be fluid-free, or it would be locked to one fluid.
  • Two such blocks can connect only if they are compatible - either one has no fluid lock, or they have the same fluid.
  • An assembler can only set a recipe if it is compatible with the fluid locks on its fluid boxes.
  • Have a migration from old saves that can contain mixing.
By creating the fluid systems right before, number 1 was almost finished and we only needed to assign the lock. It would be set either by a fluid, or by a 'filter', which is a fluidbox that is set to use a fluid - such as a water pump using water, or assembler having some inputs/outputs given by a recipe. After a while I had both the fluid algorithm and the mixing done (FFF-274). The mixing was not that easy (like 5x more complicated) but it worked pretty well. As for the fluid algorithm, V453000 and Twinsen found some issues with waves on a macro scale, and because it was right before releasing the 0.17 experimental, we decided to hold it off on it for the time being (we have a new version now that seems okay, but has to wait for 0.17 becoming stable first). The mixing made it through though and seemed quite finished. It turned out that the work on it was at most one tenth complete.
Some difficulties appeared already before the initial release, but that was only a hint of what would come later. One by one, then ten by ten, bugs started coming. The problem is that as often as not, they were not just little issues with simple fixes. Instead, over and over, they turned the current solution on its head and the code had to be completely rewritten in order to account for the new case. As of now, almost exactly half a year and many rewrites later, it is still not fully bug free. The number one issue was with Assembling machines. It turned out that their code was pretty messy and does not simply allow the checks I needed, so it had to be refactored. The next problem was that the check was not only required when setting a recipe on an existing assembler - as I naively thought - but in about one million different situations I would not dream existed. Building a fixed recipe assembler. Reviving an assembler. Rotating. Blueprint of an assembler. Blueprint with a recipe and a rotation placed over a ghost with a non-default rotation during a full moon. Teleport. Script building. Copy-paste settings. Any combination of these. Pretty much every case would go through different paths in the code and behave entirely differently. Fixing one would break another and so tons of tests had to be written. When these cases finally worked, it turned out that doing these operations when they fail (e.g. cant rotate because it would cause mixing) brings another wave of issues. And then mods come and the complexity multiplies. All this, although in a more simple form, had to be done for all other entities that can use fluid too, such as inserters (mods...). Another number one issue are underground connections. When playing, you would not think twice about them but on a closer look they are all but simple. They have this (cough) uncomfortable feature (want to shoot myself) that you can build another underground pipe between them (or take it out) and a complex reconnection logic jumps in. It means that based on building order, connections are established and reestablished differently. This is a big thing when building a blueprint with many pipes, or loading a save game. But the largest issue is one tiny corner case with huge implications. Have two underground pipes that have different fluids, but are split by a third, and it gets removed. Until now mixing was theoretically completely avoidable, but here it was and there was nothing to stop it.
As a result, a new concept is introduced - a blocked connection. An underground connection that would normally connect but cant. Establishing it is the easier part. But when does it get fixed? An entity miles away gets rotated, that splits a fluid system, disconnecting the blocked connection from a fluid filter on the other side, and the connection should unblock. But even something as simple as a rotation contains fluid fixes and re-establishing of fluid boxes and if it fails, it still fixes the blocked connection in the process and it cant be undone... You get the picture. And we are still talking about underground pipes, while anything can have underground connections, including said assemblers, which the previous code did not consider at all. The complexity just goes deeper and deeper, and Rseding is probably right that we should have never gone this way at all. So the bug fixing has been basically running in circles - clearing one batch of bugs, thinking that those were the last ones and the ordeal is finally over, only to find another batch (ideally from some bizzare modder idea) a few days later. Many times I wished that mods never existed. Nor multiplayer, or any players at all for that matter. About two months ago all seemed really fine, with basically no reports and just a few crashes in the automated crash reports. At that moment another nightmare materialized in the form of a talented volunteer bug tester named boskid, who took on a personal crusade to break the fluids to dust (I actually imagine him sitting in his dark room with evil laughter, dreaming about making my next day worse than the previous). In all seriousness, he has done a great deal of work with his bug testing, creating bizzare modded cases and testing scripts, and deserves a big thanks. He is actually coming to our offices next week, so follow the news for reports of developers falling out of windows.
An example of a nice configuration he found (and I cant fix). The whole time we were taking the offensive approach to mixing - crash the game when it happens - so that we know about bugs to fix them. Recently we have decided to put a stop to it and have the mixing automatically fix itself once it is detected, eyeing the end of this episode. Right now I have 3 mixing bugs on the list and I am sure those are the last, and mixing will be done (lying to myself is a way to cope with it) and the new fluid algorithm can come soon after :).
(And of course, boskid found a way to use the automatic mixing fixing as an evil PVP tactic.)

Landfill terrain


This week Ernestas came physically to the Wube office to spend some time with us (he is normally working remotely), so we are taking the chance to finish things that we had in the drawer that needed closer communication. One of those things is a specific terrain for landfill. As you know we were using grass for it. Not anymore.
In Factorio we have a clash of two worlds:
  • The natural and organic planet. Off-grid with multiple terrain types, trees and doodads.
  • The world of the factory, which is mathematical, regular, modular, and totally attached to the grid.
This new terrain represents a boundary in between those two worlds. The grid on its surface tries to express the artificiality of it, like mechanically pressed with some sort of industrial stamp. The imperfections of the grid and its irregularities are holding this man made terrain into the realm of the natural environment. For now the sound of the landfill action is not solved, 'soon' well take care of it. As always, let us know what you think on our forum.


[ 2019-09-13 11:37:14 CET ] [ Original post ]

Friday Facts #311 - New remnants 3

Read this post on our website. Hello, Another week has elapsed, which brings us another week deeper into the declining weather of autumn.

Even more Remnants


In FFF-288 we proposed that we are considering multiple approaches to remnants, and in FFF-293, we described that we are choosing the balanced solution which does not obstruct the movement of a player if an entity is destroyed. We have recently finished quite a few which we would like to show you.
Compared to some of the early versions of remnants, you can now really recognize which entity got destroyed.

General


If you have been following the progress of remnants in 0.17 experimental versions, you have probably noticed that a lot of them have been changed quite drastically. In general we are trying to hit the balance between having the remnant look destroyed enough, yet still very well recognizable which entity it was. This is especially difficult for tall entities as the player has to be able to walk over their remnant, the extreme case being train stop for which we are also implementing a special solution...

Train stop


Train stops are recognizable because of the top coloured part, and the tall scaffold that holds it. Giving the station a colour mask was trivial graphically, but our dear posila needed to add a bit of code to support remnants to have colour masks. Keeping the tall tower is a bigger problem as if the tower is a part of the remnant sprite, the player would be able to just walk over it, and trains would always show on top of it as well. We chose to split the train stop remnant into two layers so the illusion of height is kept.

Remnants with colour masks


We also used the colour masks for basically everything the player has the ability to change the primary colours of. It includes the Locomotive, Turrets, Car and the Tank. Once the entity dies, the colour of the given entity stays with the remnant.

Walls


We have updated the wall sprites as well, as we wanted to make the walls more like broken walls instead of random rubble, to break their line less. The walls are by far the most destroyed entities besides turrets so they can look repetitive quickly. To improve this, wall remnants have several sprite variations. Compared to 0.16, whenever any entity gets destroyed, the player can tell which entity it was. We believe this makes rebuilding your factory much more fun, and seeing your things get eaten less frustrating. On top of that, we plan to utilize the remnants to a large degree in the campaign for 1.0 for half-destroyed factories to be found and explored. We will be adding more remnants and improving some further to make this effect even greater than it is currently in 0.17.

Community spotlight - Industrial revolution


In the past month I had the opportunity to balance test an overhaul mod called Industrial Revolution. Now, after around 1,000 hours of development, Deadlock has finally released the mod to the public today. In the around 65 hours I have spent playing the mod, I fell in love with it and I want to present it to you here.
Click to see full resolution My current base, machines from all ages forming one big factory. The mod gives more depth and length to the vanilla experience by changing the progression throughout the entire game. You work through ages of technology, always chasing the milestone of the next material. Just like in vanilla, you start out with the stone age and classic burner machinery. Automation is key, even in the stone age; the mod adds new intermediate products to all crafting steps. To allow automation at this stage, the mod provides burner assembling machines and labs.
However, instead of getting to power as soon as possible, the next goal is bronze, an alloy made from the two starting resources, tin and copper. After improving the factory with bronze machines and automating logistics science packs, the iron age is not far away. With it come steam power, oil processing and trains, allowing rapid expansion of the factory. The steel age unlocks better ore refining techniques and powerful machinery, paving the way to the rocket. Beyond the ages, the mod introduces new types of turrets, each with their advantages and disadvantages. On top of all these gameplay differences, the mod boasts incredible graphics and good sounds.
When I started testing the mod, I was expecting a long-ish casual playthrough with some different recipes. What I got instead was an addiction and a huge appreciation for the concepts the mod adds and changes: Different challenges, more logistic puzzles and completely new recipes refreshing the whole experience. The extended burner phase in the mod introduced an unconventional problem to me: Fueling burner inserters and assemblers. Combined with my spaghetti approach and limited space due to the enemies lurking in the desert around me, fueling inserters became a challenge that I spent hours on. My proudest creation is an electric motor assembler, it needs four inputs, all supplied by burner inserters that need to be fueled by other inserters. The assembler stands to this day:
Another great change by the mod is how it deals with ore processing. Ore processing allows the player to improve how many ingots can be produced from ore, up to producing twice as many ingots. This happens in steps, every age introduces a new technology to refine ore. So, getting more iron means building an extra ore processing step and simply connecting it between the last processing step and smelting. Each refining setup has its own challenges such as multiple outputs or needing a catalyst, so it becomes an interesting puzzle to get more ingots. The new ore processing flows well with the rest of the game; often times I found that I needed an ore refining byproduct and more ore refining at the same time. This is a big improvement compared to the vanilla way of getting more plates: Mine yet another ore patch and smelt it in the same old boring way.
Click to see full resolution Gold being mined, crushed and purified to increase its yield before smelting it, all in the same area. Of course, adding more intermediates also means that you run the risk of only ever needing a product for one other recipe. The mod manages to avoid this pitfall, I find myself routing belts and pipes through half the factory because an item is needed in multiple different places. Another possible problem is the long burner phase, it could delay automatic construction. This is prevented by the addition of very early personal construction robots. The clockwork punkbots can be used with an automatically refuelling burner generator that fits into heavy armor, all available in the bronze age. Vanillas boring defenses become more varied with the new turret types. The first turret you unlock is a bronze scattergun turret, it works similarly to a shotgun. These turrets are great at taking out groups and still make up a large part of my defenses. However, their range is lower than that of medium spitters, therefore minigun turrets and laser turrets guard my more commonly attacked areas.
All in all, the mod overhauls vanilla to provide fresh challenges, is well balanced and on top of that nice to look at. I hope you will have as much fun playing the mod as I did, so try it out now that it is released (Mod portal page). As always, let us know what you think on our [url=https://forums.factorio.com/viewtopic.php?f=38]forum.


[ 2019-09-06 19:29:49 CET ] [ Original post ]

Version 0.17.68 released

Changes


  • Pressing ESC while catching up to a multiplayer game will open the menu with most options disabled. more

Bugfixes


  • Fixed migration bug that doubles up to one sample worth of statistics when a save is loaded from before 0.17.44.
  • Fixed production statistics not calculating the totals correctly. more
  • Fixed that on_built_entity wouldn't be fired for built blueprint entities. more
  • Fixed a crash when right clicking with the map editor tile area tool. more
  • Fluid mixing does not crash the game anymore and is fixed the same way as on migration.
  • Fixed some Lua tables would be incorrectly interpreted as Lua arrays. more

Modding


  • Changed pipe_covers to be drawn with secondary sprite draw order 64 resp. -64 to prevent "z-fighting" issues. more
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-09-04 18:10:20 CET ] [ Original post ]

Version 0.17.67 released

Graphics


  • New chemical plant graphics.
  • Heat pipes (also in reactors and heat exchangers) glow with high temperatures.

Changes


  • Pressing ESC while catching up to a multiplayer game will disconnect instead of opening the menu. more
  • An entity can't be teleported into a position where pipe connections would overlap. more
  • The camera will zoom to center instead of zooming to cursor in God controller, Ghost controller and Spectator controller.

Features


  • Added an area tool to the map editor tile editor.
  • Added highlighting of the source entities when selecting areas to clone in the map editor.
  • Added a setting in the map editor to hide entity health bars.
  • Added a setting in the map editor surface editor to generate new chunks using lab tiles.
  • Added support to manipulate items on the stored character while in the map editor.
  • Added infinity settings for automatically controlling items in the map editor.
  • Changed the infinity chest so it can also spawn hidden items.

Gui


  • Rearranged key-bindings in Control Settings to different categories. Improved and added more descriptions of key-bindings.

Bugfixes


  • Fixed cloning ghost entities with rotation didn't work correctly. more
  • Fixed that the lab GUI wouldn't update when the technology being researched changed. more
  • Fixed loader front patch and back patch were not sorted correctly when drawing. more
  • Fixed wire connection distance sometimes being inconsistent. more
  • Fixed a rotation of modded pump with regard to blocked pipe connections. more
  • Prevented a crash resulting from teleporting a pipe to a fluid system with blocked connection. more
  • Fixed that the filter GUI tooltip would flicker when changing tabs. more
  • Fixed fluid mixing from creating an underground pipe by script into a blocked fluid system. more
  • Fixed fluid mixing from copy/pasting an infinite pipe next to a different fluid. more
  • Prevented playing Jesus and changing water into other fluids. more
  • Fixed assembler ghost fluid filters disappearing through loading. more
  • Cliffs sections which are fully marked as indestructible can't be exploded. more
  • Fixed interaction of underground pipes with modded length. more
  • Fixed fluid mixing caused by fluid producing furnace. more
  • Fixed that opening the technology GUI in the same tick as the entity tooltip being shown didn't work correctly. more
  • Prevented rotation of a modded assembler with a blocked pipe connection that results in fluid mixing. more
  • Fixed train condition button indentation not being properly updated under special circumstances. more
  • Fixed that train schedule waypoint was considered to be passed when train departed the related rail rather when it entered it. more
  • Fixed that storage tank entities ignored pipe_picture property in their fluid box definition. more
  • Fixed improper action selection for UI actions for key bindings differentiated by modifiers only. more
  • Fixed a crash related to a modded assembler and fluid mixing. more
  • Applied the cannon shadow to the artillery wagon, fixing some unintended highlights. more
  • Fixed crash when removing electric pole. more
  • Fixed event handler could try to register events twice in some cases. more
  • Fixed blueprinted locomotives would preview as snapped to train stop. more
  • Fixed items spilling on the ground when using fast entity transfer while robots are trying to insert into the player. more
  • Fixed hand reserving a non-empty slot in some situations when player inventory auto-sorting is disabled.
  • Fixed custom lua slider sometimes initializing with the marker in the wrong position. more
  • Fixed "list-box" and "drop-down" custom GUI elements would not update selected index when changing its items programmatically. more
  • Fixed that the map editor 'instant blueprint building' would fail to place trains correctly.
  • Rail signal that is to be reserved by circuit network doesn't allow train to go through even when the block is already occupied by the given train. more
  • Rail signal will change from reserved by circuit network state to closed state when train is manually placed into the block it guards. more
  • Fixed train stop name in map not being positioned properly. more

Modding


  • Changed default value of LoaderPrototype::structure_render_layer from "lower-object" to "transport-belt-circuit-connector", in order to be consistent with other on-belt structure sprites.
  • Different wall types will connect visually by default. If this behavior is not desired for a wall prototype, set it unique "visual_merge_group". more
  • Added optional random_variation_on_create to all simple entity prototypes.
  • Pump was changed to not expand its bounding box when connected to pipe. Collision box for vanilla pump was adjusted to reflect this change.

Scripting


  • Added additional filtering to LuaGameScript::get_filtered_..._prototypes() functions.
  • Added optional "tags" to entities in blueprints and entity ghosts.
  • Added optional "tags" to script_raised_revive, on_built_entity and on_robot_built_entity events when reviving ghosts.
  • Added LuaEntity::tags read/write for entity ghosts.
  • Added LuaItemStack::get_blueprint_entity_count(), get_blueprint_entity_tags(), set_blueprint_entity_tags(), get_blueprint_entity_tag(), and set_blueprint_entity_tag().
  • Added on_force_friends_changed and on_force_cease_fire_changed events.
  • Added "area" to on_chunk_charted and on_sector_scanned events.
  • Added "position" to on_chunk_generated event.
  • Added area to the LuaChunkIterator operator() return value.
  • Added LuaPlayer::toggle_map_editor().
  • The script_destroyed_entity event is raised for map editor instant deconstruction.
  • Added LuaEntity::tick_of_last_attack and LuaEntity::tick_of_last_damage write.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-09-03 12:55:23 CET ] [ Original post ]

Friday Facts #310 - Glowing Heat pipes

Read this post on our website.

A few bugs left...


WoW classic has been released, which means several of our top men have taken time off to spend hours raiding and having fun in Azeroth. This isn't great timing, as a few new bugs related to train signals appeared. We want to get these bugs solved before we do another release (another stable candidate). As it turns out, the only person with the skillset to fix these specific train signal bugs is also deep into levelling his Priest... We are still making the rest of the preparations for the stable release. We have started writing up the stable annoucement blog post, and have produced a 0.17 postcard image. Other than the few more critical rail bugs, there doesn't look like there is much else to block the stable release, on the forum we are down to 27 bugs. Since there are so few bugs left to deal with, some of the team has starting working on 'post-stable' features. Wheybags is working on the new campaign, Oxyd is diving into some detailed pathfinder improvements, and Rseding has started work on some particle optimizations. We will delve deeper into these topics and more in future FFFs, as we always love to do.

Glowing Heat pipes


Heat pipes were released with 0.15, since then, we (the GFX department) contracted a debt with this feature. The original plan was to be able to visualize the amount of heat by using a glow on the pipes. Due to the tight schedule of the 0.15 release we decided to postpone the feature. Finally Ernestas took care of it, and we can proudly present it integrated in the game.
As you can see, the pipes emit light due to the red hot metal. The fact that they are connected to the reactor and the heat exchanger, made us make some extra patches. It would look wrong if the heat pipes were glowing, but the pipes on the reactor were not. The final result apart from beautiful is also very readable for the player, which is the main point of the entire design.
The glow intensity is proportional to the heat. Now the visualisation should be crystal clear. The new graphics are already merged into master, so will be included with the next experimental release. As always, let us know what you think on our forum.


[ 2019-08-30 10:53:28 CET ] [ Original post ]

Friday Facts #309 - Controversial opinions

Read this post on our website. The boring phase of bug-fixing is still going, slowly but surely. Stable should be released next week, but with some people on vacation (Ben, Jitka, kovarex, Klonan, Sanqui) and with the release of WoW Classic, it might get slowed down a bit. (By the way, some of us will be playing on Pyrewood Village, Alliance, so if you want to have the chance of meeting Twinsen, kovarex or dominik while leveling, you can join that server). So since there's not much happening, this week we decided to explore some unpopular or controversial opinions about the game from within the team. In Wube we don't have a very strict management structure, everyone is free to have ideas and opinions about almost all aspects of the game. This means that with almost every change we argue and discuss a lot before making a final decision. Sometimes we argue about everything, from the smallest GUI change, to how a major feature should work. This is probably not a bad thing since this means changes are usually well thought out and unpopular ideas or changes don't make it to the game very often. Some people feel quite strongly about their opinions or sometimes the team is very divided on what should we do. Today we'll share some of those opinions and controversies. Keep in mind that these are simply opinions and none of them will actually make it into the game, we are simply sharing them to have an interesting discussion.

Inserters should not chase items


What I always liked about Factorio is that it's a very precise game. Ratios, throughputs, crafting times are all well explained and even if it gets complicated, everything can be calculated to the last item. Miners mine resources at a precise rate, smelters and assemblers craft items at a precise speed, belts move the items at a precise throughput. But inserters... due to their behavior where they track items on the belt before grabbing them, they don't have a precise throughput. This really grinds my Iron gear wheels, as it's hard to even know if an inserter will be fast enough to load a simple assembler. There are Wiki Tables and References, but they are ridiculously complex since it depends on the inserter type, source, destination, belt type, belt orientation and inserter capacity bonus. Even after accounting for all that, the numbers are still not precise since it depends on timings and how items are placed on the belt. My proposition is to remove this complex movement of item chasing and have inserters move to their predefined pickup location and immediately pick up the closest item (in the case of a belt).This will:
  • Make inserters have a constant throughput. It will still depend on some factors like stack size (e.g. stack inserter will pick up faster from chest than from belt), but it should simplify things significantly and allow us to have a calculated throughput for chests and belts that we can show in inserter tooltips.
  • Prevent all the issues with inserters getting stuck (e.g. burner inserters running out of fuel because they chase items they can not grab). We often argue if this is a bug or not and if it should be fixed.
  • Improve performance (maybe significantly). Inserters currently chase items throughout it's entire swing, tracking the items on the belt each tick and searching for a new item each time one goes outside the belt (which happens quite often for blue belts). Removing this requirement would mean less memory access to other entities and much simpler mathematical calculations. Since inserters are the second most common built entity, these improvements could lead to a big UPS boost.
But on the other hand, this will mean:
  • It will graphically look much worse. While I believe we can do many things to make this look good enough (by separating drawing animation logic from game logic), it will probably not look as nice as it does now.
  • It will remove some of the nice organic feel of the game. And it will remove some (arguably) fun emergent situations.
Combine this with the fact that changing something so core to Factorio in such a significant way would have big implications. So we decided this wont be done.

Blueprint import/export should be a modded feature


The blueprint library has always been a controversial topic. We argued about how it should work technically, in multiplayer or if it should exist at all. But one thing that I particularly don't like is blueprint import/export. It's obvious that it's more fun to make your own setups and it's probably universally agreed within the team that importing large sections of factories is not what players should do. This promotes "instant gratification", it eliminates the satisfaction you feel after finishing your creation you spent hours tinkering and planning. And could easily make a 100-hour game into an 10-hour game. It's sad when we release an update and the first comment is "does anyone have the blueprint string for the nuclear reactors" or someone immediately asks for an artillery shell production blueprint. It's our job as developers to incentivise the player to play the game properly. If importing blueprints is obviously so bad, why are we providing this tool as a vanilla tool? Not only that but we also place it in the "tools" section, as a shortcut in the main screen, as if you are expected to use it often. So my proposition is that this tool should only be modded in. By making it a mod it's clearly not a an intended way to play.The very common counter argument is "since it's obviously not fun, players won't use it. Put it in and let the players decide". That's like putting a "level up" button in an RPG and saying "well it's obviously not fun, it skips content, players won't use it, but let them decide". Yes they will, as soon as they encounter a problem a player will evaluate his options. A tempting "skip-ahead" button is irresistible in such situations. It's hard to remove such a powerful tool now, since it's oh-so-tempting to import that nice blueprint book with belt balancers, so you don't have to deal with designing those complex things yourself. Until a different consensus is reached, the tool will stay in game. But I urge players to restrain themselves from adding too many blueprints to their library that are not their own (or their friend's).

Combat/Biters


Weapons shouldn't lock on


Weapon lock on and the distinction between shooting with spacebar and C is a constant source of confusion for new players. Also, it is just weird and not even fun. Weapons should all work like the shotgun, you point and shoot, and the bullets hit whatever is in that direction. There's only one button to shoot, and that can be spacebar. We could take inspiration from the huge number of top down shooters out there to figure out satisfying weapon mechanics that would work with this new style. Even if you don't like this style, we already have it for some weapons (shotgun), and using it for some weapons but not all is inconsistent and confusing. (Klonan made a mod a while ago which does something like this).

Biters should be more aggressive, and probe your defenses


Currently, you can get by with only walling off part of your base, responding to attacks as they come, and leaving the rest fairly open. This runs opposite to what "most new players" [citation needed] would expect. For example, I always started off by walling and turreting my entire base, presuming that if the biters noticed a part of my perimeter that was uncovered, they would just go through there. The counter-argument is that it makes the game less fun, because you spend way too long building massive defensive walls instead of making your factory. My counter to that is that for a lot of people, making defenses is very fun, everyone loves turtling in RTS games. Maybe it's just my play style, but this is what I was doing anyway even when it's not necessary, and leaving big holes in my walls just feel wrong. IMO if you don't enjoy that, you should just turn off biters. Also related is the way that biters will sometimes ignore your structures, if they are not polluting or military. For the same reasons, I think you should have to defend your railway lines, power poles, etc.

Clearing bases should not leave you safe


Related to the point above, I think that clearing the bases inside your pollution cloud should provide only a very temporary respite from attacks. Biters should very regularly expand back into your pollution cloud, meaning you always have to defend. Alternatively, the whole pollution cloud mechanic could be removed, and replaced with a worldwide pollution count.

Miners shouldn't output directly to belts


Every other interaction between a belt and a building uses an inserter to move the items to/from the belt. Why are miners any different? From a pure consistency point of view, I think this should be removed. As far as I know, the reason it has been left this way so far is just convenience. (Bonus fact: I used to put inserters in front of my miners for an unspecified-but-way-too-long time when I was new to the game).

Boilers shouldn't have a water output


During our in-house testing, one of the things we did was invite people who had never played the game before into the office to try the new introduction campaign, while we observed them. One stumbling block that almost every person hit, was connecting their steam engine to the water output of their boiler, instead of the steam output. I understand that the current setup allows for some interesting layouts, but IMO it is not worth the usability cost.

Pipes should work like electricity


Pipes and fluid have been a constant annoyance for a long time. Thanks to the labours of another of our developers (Dominik), this has improved greatly, and is due to improve even more. However, if I had the choice, I would just remove the headaches outright, by making pipes function like magic liquid teleporters. Each "pipe network" (a block of connected pipes) would have a set of inputs and outputs. The load would be drawn equally from all inputs, and distributed equally to all outputs. Of course, this would mean that there would be no flow limits for pipes. So you could, for example, have a massive array of offshore pumps connected via a single pipe to a large nuclear plant, and it would work just fine. There would also be no way to visualise the flow, so the windows would have to be removed. IMO, the cost is worth the gain.

Adventure mode


I can't get my wife to play Factorio with me because she's not really that into Factory building.But she and I have been playing Satisfactory because it gives herreasons to explore the map and discover new places and collect items. The obvious change that could be made to Factorioto accomodate that play style would be to scatter useful itemsaround the map.I imagine things like an abandoned railyardthat would give one early access to a few prebuilt enginesand rails, totally changing the way an early factory is designed. But there is a second aspect leads to Factorio not being very exploration-driven,and that is that you can see ridiculously far and nothing obstructs your line of sight.Who needs to explore when you can just plop down a few radar towers?Forests would be much more meaningful if you couldn't see through them,and had to actually poke around and through them to know what was there.(I personally take inspiration from Ultima 3for line-of-sight calculations in 2D games). And speaking of line-of-sight-blocking terrain features, we also need mountains.Not just rows of cliffs, but large and impassiblemountain ranges that compliment the impassible (but non-sight-blocking and land-fillable)bodies of water. Games with a first-person perspective automatically give you the line-of-sight effect.Another thing that true 3D game engines give you out of the box that 2D onesusually don't is the possibility of non-planar worlds.Bridges and tunnels can provide alternate (or secret) routes and interesting loops.But it is possible to get some of the same effects out of a 2D engine.Since Factorio already supports multiple surfaces, it wouldn't be too much of a stretchto add a cave system (preferrably with an odd topology) underneath the surface surface,with entrances in mountain sides. I'm not sure that making vanilla Factorio more fun for peoplewho want to focus more on exploration is itself controversial,but all these features take time and energy to build and maintain,and "Factorio isn't supposed to be about exploration",so it hasn't been a priority.

Robots should take up space and time


In my estimation, the main cause of bots becomingoverpowered in late-stage factoriesis that they take up zero space(large amounts of logistic or construction bots can occupy a single point on the map)and take zero time to pick up or drop items or to deconstruct things.This leads to the following:
  • Laser-turret-creeping enemy bases is trivial because construction bots can instantaneously place enough turrets to completely overwhelm all the biters.
  • There is no reason to mess with belts at all when bots can 'teleport' unlimited resources between storage chests.
Buildings taking time to construct (such as they do in games like Total Annihilation)would to some degree solve the first problem,since an already dug-in force would have a chanceto defend itself while turrets are being built. Bots taking up space (so that they have to queue up to pick up and drop off items)would solve the problem of bots completely obsoleting belts;to transport large numbers of items quickly you wouldneed to spread out the pickup and load boxesto give the many robots space to work. The main reason we're not doing this is that bot movement logicis currently written such that calculations are needed only when something changes(a robot completes its task, its target is moved, etc).Having to keep bots separated would add a lot more calculationsthat need to be done while a bot is en route,which would probably result in a lot of complaintsfrom people with huge bot-based factoriesthat the game got all slow.

Items should have volume and mass


Similar to the overpowerdness-of-bots problem,being able to carry multiple locomotives (or rocket silos)around in a backpack or in a train car feels silly.Big things should require time and space to move around. Solving that would require completely changing how construction workslarge things would have to be built on-site a la Total Annihilation or Satisfactoryinstead of being preassembled.But that could lead to its own interesting situations.Some objects would require more resources than can fit in a standard stack,so special assembly buildings would be needed. There are mods(such as Rocket Silo Construction)that try to do this with certain buildings already.

Power-user hotkeys


I believe it is alright for a game to have power-user controls that are not bound to any keys by default. For example "Toggle exoskeleton" introduced with a 0.17's toolbar is a feature that most people probably will never need, and lot of people won't even realize it exists. It is probably useful for some people, and it also useful that it can be toggled by a hotkey, but it doesn't need to be bound to any keys by default. People just get confused why they run slow when they press the hotkey by accident, even if they knew about the feature, but don't actively consider its existence. I think if we changed our attitude towards default keybindings we could go nuts with adding new shortcuts and there would be little bit for everyone. I mean, how many people use hotkeys for connecting or disconnecting trains, and how many people would use a shortcut for toggling manual driving in trains.

Mining furnaces and assembling machines should return the ingredients for the in-progress recipe


In Factorio the game makes a large effort to not punish the player for experimenting: you can mine up anything you build and move it somewhere else or just try different setups. The game doesn't punish the player for this (or so most people think). You can hand craft things and if you change your mind just stop crafting to get the ingredients back. When it comes to furnaces and assembling machines this is different. Anything which is in-progress when you mine a furnace or assembling machine is lost. If you had a Kovarex enrichment process running with 40 Uranium 235 and you mine the centrifuge the game deletes all 40 of the Uranium 235 and you're left with nothing. In a previous version of the game it would just give back everything it had consumed when the recipe started. However, because of a possible incredibly tiny exploit related to productivity modules and being able to get an extra % of items back if you time it correctly this was removed (bug report). We continue to get bug reports about deleted items and all of them get filed under "not a bug". There have even been mods created to address this specific shortcoming in the game. Remember that since we are focusing on 1.0, these ideas are currently nothing more than a cause for heated discussions in our office. But let us know what you think (on our forum) and maybe we will change our mind based on the feedback. (maybe after 1.0...)


[ 2019-08-23 13:28:59 CET ] [ Original post ]

Friday Facts #308 - Not stable quite yet

Read this post on our website. Hello, we had a party last night in the office to celebrate the work we have done over the last 6 months on 0.17 stablisation. It was nice to have most of the team together to share some beers and pizza.

Not stable quite yet


Unfortunately a couple of nasty bugs appeared this week, in no small part due to forum member boskid and his crusade to find bugs. In the last month alone boskid has reported over 20 bugs, so very special thanks are due. Saying that, we have been efficient in our fixing, and are now down to 32 open bug reports on the forum. While there are issues being reported, the number of crashes is at an all time low. Below is a comparison between 0.16 and 0.17.
We compared the current number of 0.17 crashes to the number of crashes in 0.16 before we released 0.17. From what we can tell, comparing the number of crashes against average player counts, about two thirds of players are playing on 0.17. Factoring the player counts into the data, we can determine that 0.17 is close to being as stable as 0.16. A lot of the crashes are from older 0.17 experimental releases, which might be skewing the data. Additionally about 1 in 20 of the bug reports are due to Cheat Engine, and not something we can fix. What this means for the stable release, the plan is the same as last week. We have just release 0.17.66 with a bunch of fixes, and if it weathers the weekend player base and nothing critical arises, we will mark it as stable next week.

Community spotlight - Nauvis Post Collapse


Forum member lilstrip has spent over 8 months working on a map, based on the idea of an Abandoned Colony/City, first talking about his baby in this thread. After long last he has a version ready for publishing, and a little bit of a backstory to go with it.
Click to view full size
    In the years before the gates shut Nauvis used to be a promising colony. Equipped with a massive orbital ring the planet was an absolute power house when it came to building ships for the Tyrador Safeguard Coalition.
    Sadly the colony was lost in the first AI war long after the collapse. In reality things weren't going too well in the first place after the gates closed, famine and unrest were a common occurrence for the colony of Nauvis. To this day [REDACTED] of the AI war still roam the system in massive numbers and eventually a few decades later the location of the colony was lost..
Xterminator has made a video showcasing the map too, if you want a more hands-on preview. https://youtu.be/kBlFp9FF81k You can find the download link and the information on the scenario in the forum post. The scenario itself requires a pretty beefy PC to run, a map this large is stretching the limits of the engine a little. As always, let us know what you think on our forum.


[ 2019-08-16 15:51:13 CET ] [ Original post ]

Version 0.17.66 released

Changes


  • Blocked underground pipe connections (see e.g. https://forums.factorio.com/73840) are always highlighted.

Bugfixes


  • Fixed crash when using the close button while the client is saving the map for desync report. more
  • Fixed a crash related to settings copy/paste of some modded assemblers. more
  • Correctly highlighting blocked connections of modded underground pipes. more
  • Fixed a case of disappearing fluid in a special fluid furnace configuration. more
  • Fixed programmable speaker caused crash when using --disable-audio command line option. more
  • Fixed that an underground pipe ghost did not split fluid systems. more
  • Fixed that an underground pipe ghost did not split blocked connection. more
  • Fixed that fluids in assembling machines and furnaces would get voided any time mods changed. more
  • Prevented construction of underground pipe that could crash the game due to blocked pipe connection. more

Scripting


  • Added LuaEntityPrototype::terrain_friction_modifier read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-08-16 14:27:41 CET ] [ Original post ]

Version 0.17.65 released

Changes


  • Modded achievements and their progress are now stored even when the mods adding extra achievements are temporarily removed. Up to 5000 modded achievements are stored indefinitely. more
  • Programmable Speaker sounds now change volume accordingly as player moves. more
  • Rocket Silo sounds now change volume accordingly as player moves.

Bugfixes


  • Fixed tightspot level 5 expecting old chemical science recipe. more
  • Fixed Transport belt madness inserter exploit. more
  • Fixed that filling energy of entities in map editor didn't work for accumulators in electric network.
  • Fixed a crash or desync that could happen after assigning a build_base command to a single unit. more
  • Fixed that mining drill covering more than 1 infinite resource showed the mining speed as sum instead of average. more
  • Fixed that infinite item based resources with yield of more then 100% didn't actually mine more. So yield of 260% for example means that it mines 2 resources and 60% probability of 1 extra.
  • Fixed cloning of accumulators in the map editor not setting available energy correctly.
  • Fixed a desync related to cloning accumulators. more
  • Fixed 2 crashes related to custom-switch. more
  • Fixed that train could consider itself being parked in station when in fact being misaligned. more
  • Fixed that activating deconstruction planner/blueprint/blueprint tool from the shortcut by pressing the buttons didn't clear the cursor if it wasn't empty. more
  • Fixed condition operator button visibility when dragging conditions in the train schedule GUI. more
  • Fixed few layouting issues with scroll panes.
  • Fixed that biters could get stuck in narrow passages between water tiles. more
  • Fixed that members of unit groups could sometimes get far ahead of the group. more

Modding


  • Added CraftingMachinePrototype::match_animation_speed_to_activity.
  • Added LoaderPrototype::structure.back_patch and front_patch.

Scripting


  • Added ability to clear a sprite or sprite-button by writing nil or empty string to LuaGuiElement::sprite. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-08-14 12:14:06 CET ] [ Original post ]

Version 0.17.64 released

Changes


  • Range modifier and shooting speed modifier are now shown in ammo tooltip and ammo turret tooltip.
  • Allow pressing ESC to cancel saving or downloading the map while desynced. more
  • Added copy paste from assemblers to infinity chests, similar to requester chests.

Bugfixes


  • Fixed crash when loading a save containing modded crafting machines with fluid boxes, with mods disabled. more
  • Fixed turret range drawing not accounting for ammo range modifier in world and in map view. Fixed turret unfolding and animation not accounting for ammo range modifier. more
  • Fixed case of swapping left and right lane of underground belts. more
  • Fixed desync related to marking and then un-marking combinators for deconstruction. more
  • Fixed Infinity Chest GUI showing wrong label when modded as a storage chest. more
  • Fixed when target of combat robot changed force to an allied force, the combat robot wouldn't stop attacking it. more
  • Fixed silo script error using generic on_event function. more
  • Fixed a desync related to using multiple custom fluid indexes in a recipe. more
  • Fixed some labels getting cut of in the statistics GUI, on some translations. more
  • Fixed a crash that could sometimes happen when fighting large groups of biters. more
  • Fixed a special corner case of signal internal state consistency. more
  • Fixed that the circuit and logistic network buttons in the train stop GUI were swapped. more

Scripting


  • Combinators can now be activated or deactivated through LuaEntity::active.
  • Added LuaEntity::upgrade_target read.
  • Removed the ability to convert a table address into a string.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-08-09 19:35:13 CET ] [ Original post ]

Friday Facts #307 - 0.17 stable candidate

Read this post on our website. Hello, We had a lovely surprise waiting us this Monday, one of our fans had sent us a delicious cake:
It didn't last very long...
Thank you very much Conn! It certainly helped with the bug fixing push this week.

0.17 Stable candidate


This last week we have made a big push to fix as many remaining bugs as we can, and we are down to only 36 reports on the forum. Since these remaining bugs aren't really hard crashes, save corruptions, or desyncs, we are looking to consider 0.17.64 (releasing today) as our 'Stable candidate'. What this means is that, if all goes well over the weekend and nothing too serious comes up, we will mark it as the 0.17 stable next week. We will continue to fix bugs and issues after the stable, and we will also start our work on the features of the 'next stable', so the GUI improvements and all the rest we have mentioned in the past. In the next few weeks a lot of the team is going to be on vacation, so things won't get up and running with the new feature work for a while. This experimental period has been quite a long one, we had a lot of new things to fix and debug, and a lot of technical debt from the year of development. There won't be another release quite so large, we only have a few major things left to cross off the list before we can call Factorio finished:
  • All new GUI's implemented.
  • New Campaign and mini-tutorials.
  • Completed high-res graphics.
  • Maybe some small surprises along the way.
By no means are any of these easy, but each day brings us closer to concluding this chapter of Factorio history.

Prototype documentation overhaul


Just in time for the stable version, the prototype documentation for mods has received a major overhaul. The backend has been converted to use semantic mediawiki to store the prototype documentation data in a machine readable format. Using the new ability to query the stored data, prototype pages now display all their base classes at the top for easy navigation. Furthermore, each prototype page now provides a compact overview of not only its own properties and their types, but also the properties it inherits from other prototypes. The documentation also boasts a new overview page that lists all 199 prototypes and their 1943 fields. As always, let us know what you think on our forum.


[ 2019-08-09 14:15:32 CET ] [ Original post ]

Version 0.17.63 released

Changes


  • Inventory filters tooltip now shows they are inventory filters to avoid confusion. more
  • The quickbar tooltip now shows what shortcut to use in order to clear it.
  • Quickbar filters can now be set from the ghost cursor.
  • In Introduction, changed some places Compilatron stands at to be less in the way. (https://forums.factorio.com/74138, https://forums.factorio.com/74018)

Bugfixes


  • Fixed some combination of graphics options could cause infinite loop at 95% of sprite loading in the demo. more
  • Fixed assigning empty table to sprite definition would not cause loading error but crash in-game instead. more
  • Fixed a desync related to accumulators in multiple networks. more
  • Fixed transitions on tiles where landfill, grass and water meet. more
  • Fixed logistic network technology description did not mention buffer chests. more
  • Fixed "use-version-filter-in-browse-games-gui" config option didn't work. more
  • Fixed possible crash in introduction scenario if player builds turrets too far to either side. (https://forums.factorio.com/74133, https://forums.factorio.com/74060)
  • Fixed electric coverage visualization was not shown when hovering mouse over invisible widgets. more
  • Fixed a crash when using a path_resolution_modifier of 8. more
  • Fixed introduction leftover invisible entity after cutscene. more
  • Fixed introduction bug where sometimes Compilatron wouldn't build things properly. more
  • Fixed "toggle filter" control setting would not work if bound to modifier key and left or right click. more
  • Fixed introduction bug where poles could still connect to the generator after it was destroyed. more
  • Fixed introduction possible crash when removing power consumers. more
  • Fixed missing laser-beam entity from demo. more
  • Fixed issue with walls in hidden smelter section in introduction. more
  • Fixed that biters could form too many attack groups when aggroed by artillery. more
  • Fixed that clicking and dragging electric poles in multiplayer latency didn't work correctly.
  • Fixed that fast-replacing assembling machines with fixed recipes didn't work correctly. more
  • Fixed a crash when deleting surfaces during the same tick as auto-save running. more
  • Moved integration patches of crash site entities to decals render layer. more
  • Fixed that inserters would pick up from the left lane of a loader even when positioned closer to the right side.

Scripting


  • Added LuaEntity::request_from_buffers read/write.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-08-06 12:26:39 CET ] [ Original post ]

Friday Facts #306 - Experimental Demo

Read this post on our website. Warning this Friday facts is about the Introduction scenario, not about anything that will be in Freeplay Factorio. You may want to read previous FFFs (FFF-257, FFF-284) about the Introduction. TLDR: the Stable candidate of the Introduction scenario is now in Experimental please play it and send me your screenshots. Feedback especially on the freeform endgame would be greatly appreciated. We have also released a Experimental version of the Demo, be sure to send this link to your friends ASAP SPOILER WARNING: If you have not yet played the Introduction Scenario, go play it before you read this.

Introduction scenario as Tutorial


The tutorial components of the Introduction are working very well now. There is still more polish to do, but I feel confident it is ready for new players of all kinds.

Introduction scenario as Demo


The rest of this article will discuss the Introduction, but from the point of view of a player who has not payed for the game yet. Once 0.17 Stable comes out, the Free Demo will be replaced with just the Introduction Scenario.

What we wanted from a new version of the Demo


The old demo has a very limited amount of content, and only about 2 hours of playtime. The content it does present is very dated, and hardly could be called representative of contemporary Freeplay Factorio, it did not even include Research! We had some design constraints for the new demo, some of which were:
  • The player can fail during the demo
  • Difficulty is respectful, Fake danger is disrespectful
Whatever happened, we hoped that the new demo would demonstrate a wider range of Factorios concepts, including a small taste of deathworld difficulty. I would say we were too successful. We decided to do this with a final quest where the player has to quickly complete a long research while the biter attacks increase in strength. The player needs to be completely attentive, otherwise their defense will fall over.
An invisible, dynamic difficulty curve meant that everyone was challenged to the breaking point, veterans and new players alike. See FFF-284. For the goal of being a challenge, I would say it was working well.

What other people were thinking


People loved it or hated it. I received many elated emails saying how intense the final battle was and how sweet the victory felt. I also received pseudo-hatemail about 1,000 hour players rage quitting. The reason a lot of vets were failing was because they were pretending to be new players. This generally meant playing as a vet (using shortcut keys, and high APM, heavy pollution) but placing few turrets, generally in sub-optimal locations, and being lazy with ammunition delivery. Newer players felt pressured and were generally able to pull off a close victory. Many said they were overrun at the end, but still were victorious, giving an interesting moment to leave the game and start freeplay with a high heartrate. Feedback was far more positive than negative, but from the negative feedback there were two recurring themes.
  • The most common negative feedback was that such intense combat is not representative of Factorio.
  • The second most common feedback was that the player did not expect such a difficulty in a 'tutorial' level.

Failed Solution 1: Sending less biters


This removes the chance that the player can lose, but introduces new problems with the design. It removes ammunition as a production pressure, and makes Turret placement irrelevant.

Failed Solution 2: Ramp up the attacks slower


This sounds like it could work and for the second problem listed above, it does. The player has more time to react. However this means that only new players experience the challenge, as they most likely have built the fewest Labs, and take the longest to finish the quest. Vets will finish before the attacks built up to any meaningful level. Just making it easier for the players who are able to overcome the challenge the most seems odd.

Failed Solution 3: Add more time between waves


In order to have a decent number of biters so the production challenge is not lost, the waves need to be very large. For the player to have enough notice between waves, there is a chance they will be able to finish the research before the first one comes. Also the most common failure state was when a Turret with 200 rounds is destroyed, meaning the player cannot craft enough new ammo to keep up with the waves. This happens more often with bigger, less frequent waves. All three of these solutions have one thing in common: we would need to implement them in a way that removed the challenge almost completely. So I suggested an alternative solution.

New Solution: Remove the Challenge quest completely


Now there is no timed research and defence quest at the end of the Introduction. Instead the player is told to destroy Biter spawners to reduce the attack frequency, and then they are left to deal with Freeplay style attacks. The structure of the final quest is similar to Freeplay itself "Research a technology at the bottom of the tech tree". The player now needs to automate Logistic Science packs to win the Introduction.
If the player cannot survive here, they will not survive a Freeplay game, but realistically the biter challenge in Default settings Freeplay is not particularly worrisome.

Other new Demo goodies


Having a great Demo is important to us. We dont want someone to pay for the game, just to see if they like it. It is also fits well with our no sales policy. We already offer an extended refund period to players who buy on our website, if they gave the game a red-hot go but discovered it was not for them. Demos are in general a super cool thing from the 90s that most people here wish still existed. So we will increase the amount of content in the demo. You can continue playing at the end of the Introduction, and I suspect there is about 10 hours of stuff to do. We are also adding more recipes and technologies to the Demo. The new list of what is available:
A complete and unique demo techtree that uses Automation and Logistics science packs, Mining Productivity infinite tech, Shooting speed infinite tech, Grenades, Steel, Piercing rounds, Car, Medium power poles, Heavy armor, Submachine gun, Assembling machine 2, Turrets, Lamps, Long handed inserters, Gates, Walls, and more to discover.
The size of the final play area is also much larger.
Click to view full size We have released the changes today, and also released an experimental version of the demo. Please let us know if you have any feedback or suggestions in the usual places.


[ 2019-08-02 17:16:04 CET ] [ Original post ]

Version 0.17.61 released

Changes


  • Combat robotics 2 technology now require Laser. more

Bugfixes


  • Fixed fluid mixing checks for some setups when setting an assembler recipe. more
  • Fixed flying notifications showing player's inventory updates were visible to all forces. more
  • Fixed error during PNG decompression would cause crash on Linux. more
  • Fixed that save files could become very large. more
  • Fixed that cloning furnaces wouldn't preserve the crafting progress. more
  • Fixed inserters being slower and rotationally asymmetrical after the previous version.
  • Fixed that wandering units could be activated for longer than necessary. more
  • Fixed a crash when trying to check if 'game' is equal to anything using the Lua API. more
  • Added a check for overlapping crafter fluidboxes to detect wrong mod configuration. more
  • Fixed desync related to inserter ghosts and belts. more
  • Fixed setting health of item stack of item-with-entity-data to 1 would do nothing. more
  • Fixed a desync with the map editor resource editor. more
  • Fixed a desync with the map editor decorative editor. more
  • Prevented some rare cases of fluid mixing tied to underground connections. more
  • Fixed placing entities that consume type of energy other than electric would still show electric coverage visualization. more

Modding


  • Added InserterPrototype::draw_inserter_arrow.

Scripting


  • Added LuaGuiElement::choose-elem-button elem_types "decorative", "item-group", "achievement", "equipment", and "technology".
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-08-02 17:11:02 CET ] [ Original post ]

Version 0.17.60 released

Balancing


  • Basic oil processing produces only Petroleum gas, for more streamlined oil setup in the beginning.
  • Basic oil processing keeps some of the refinery input/output slots unused, so it is more clear which ones will be used by Advanced oil processing.
  • Chemical science pack requires Sulfur instead of Solid fuel.
  • Flamethrower ammo requires crude oil instead of heavy and Light oil.
  • Rocket fuel requires light oil.
  • Laser Turrets, Lubricant, and Worker robots technologies need Chemical science pack.
  • Deathworld marathon preset was made a little bit easier.

Bugfixes


  • Fixed a crash when trying to show invalid thumbnails for mods. more
  • Fixed that up/down keyboard navigation of the load/save game GUIs and manage mods GUI didn't work in some cases. more
  • Fixed that cloning belts with items didn't preserve the item positions correctly. more
  • Fixed a script error in train stations mini-tutorial. more
  • Fixed a script error in the NPE. more
  • Fixed car turret shadow would rotate in opposite direction to the turret. more
  • Fixed that changing sound settings didn't persist through game restart. more
  • Fixed that the migrated-content GUI wouldn't show in some cases. more
  • Fixed that right-click-and-drag didn't work in the blueprint GUI to remove things. more
  • Fixed that unit groups would use paths going through cliffs. more
  • Fixed some cases of entity rotation with blocked underground pipes. more
  • Fixed inserters sometimes getting stuck when picking up from a non-backed-up underground belt. more

Modding


  • Added CraftingMachinePrototype::default_recipe_tint.

Scripting


  • Added LuaEntityPrototype::supports_direction read.
  • Fixed that LuaGuiElement::force_auto_center() didn't work. more
  • Added LuaGameScript::get_filtered_entity_prototypes(), get_filtered_item_prototypes(), get_filtered_equipment_prototypes(), get_filtered_mod_setting_prototypes(), and get_filtered_achievement_prototypes().
  • Added workaround for a driver crash when calling D3D11CreateDeviceAndSwapChain. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-07-30 14:54:07 CET ] [ Original post ]

Friday Facts #305 - The Oil Changes

Read this post on our website.

Lua Mod GUI additions


Mod GUIs have been an interesting part of Factorio modding since I started working at Wube. They allow scenarios and mods to add GUIs that look and feel like the base game.
When someone new to Factorio modding is introduced to how they function, they almost always have the same questions:
  • Why is mod GUI part of the game state?
  • Why do mod GUIs need to be deterministic?
  • How can I edit the base game GUIs?
And then comes the explanation:
    The actual widgets are not part of the game state and are not deterministic. The part that mods have access to however is. In an environment where mods have to operate deterministically, if a mod is allowed to read some data that data must be deterministic. In that simple bit of logic; if a mod can read the checked state of a checkbox then that checked state needs to be deterministic. If the mod didn't have access to read that state it would need to store the last-known state and update it every time it got the changed event.
Try to imagine that: every single mod implementing their own system for remembering last-known-state about GUIs they're using. Instead of leaving that entire mess to mod developers we decided long ago that we would manage that "last-known-state" for them. The basic data about what a given mod wanted to show on screen is recorded so mods can read and change it as they want and not need to be concerned with constantly updating it every time some changed event happens. Additionally it means that the game can use that "last known state" to restore what the player sees if they save, quit, and load the game. That still leaves the last question: "How can I edit the base game GUIs?". Using the above example it's much easier to explain that: as a mod - you can't. The base game GUIs are not implemented using this same system - they're just pure collections of widgets. None of the "last known state" is saved anywhere and it's all lost when saving, quitting, and loading. However, that leaves a divide: we need to implement each widget type through the "CustomGui" system in order for mods to be able to use them. With this latest release I finally figured out a way to do tabbed panes since they're special in how they work compared to everything else. Additionally I figured out a semi-friendly way for mods to put things directly on the screen in a way that the player can drag them around - instead of being limited to some fixed area (left, top, center, etc). Another system which I've been thinking about for quite some time is some way for mods to position GUI elements relative to base game GUIs. For example: a mod wants to add a pane which shows on the left of the character inventory GUI. Currently it's not possible - the base game GUI isn't readable by mods so they can't do anything with it. My idea is some system where a mod can say "I want to add this GUI, and I want it to be shown relative to the character GUI on the left side" and then any time the character GUI is shown it would also show the mod GUI. There are some critical parts to this new system. It needs to:
  • Be easy to expand (either automatically works with all new base game GUIs or works with minimal effort).
  • Not break with simple refactoring.
  • Not cause other programmers trouble by existing.
  • Not prevent base game GUIs from working how they need to work.
So far none of it seems impossible. I don't know when I'll have it working, but I'm looking forward to what mods will do with it.

The Oil Changes


In the last FFF, we presented changes to how Basic oil processing works along with some other changes (mainly moving Worker robots behind Chemical science pack), which resulted in a lot of discussion as it is a very sensitive topic. We have discussed with as many of you as we could, and in this FFF we would like to present to you what conclusions we came to, and try to explain our ideas in more detail.

Basic oil processing changes


A significant portion of you has voiced concerns about removing Light and Heavy oil from the outputs of Basic oil processing, be it about the change itself, or that it does not fit because of some other factors... Automating Chemical science packs is generally considered to be a huge step by many, mostly because even for veteran players, setting up oil processing consists of many steps, and for newer players theres many new things to learn very quickly. This change is trying to address both of these issues.
As for the complexity, the most confusing factor is the specific mechanic of the Oil refinery, that all products need to be used or stored in order to keep it working. This is made worse by the common situation that the player can be very far ahead with what they have unlocked with technologies, while being very far behind with what they have already automated.
This can lead to a new player having every Logistic science technology researched before setting up the refinery, and just the sheer number of new unknown items and recipes can get very confusing, especially when some are not really useful at the moment.
One of the ways we can look at the Chemical science pack is "the proof that the player has managed to set up a functional refinery". With this in mind, it fits very well to have them set up a rather basic refinery, and get to know most of the new entities/items/recipes that are necessary to progress, first.
After 'proving' that Basic oil processing is working, the player can proceed to a more advanced version with more outputs and more recipes - but as the player is already familiar with the basics and has their infrastructure already in place (Pumpjacks, oil transport, how pipes work, Chemical plants, ...), its not nearly as confusing and daunting to unlock and orient themselves in the Advanced oil processing, yet it still has new concepts to grasp (multiple outputs, cracking, more recipes).
A lot of people have voiced their concern about simplifying the game, but setting up Advanced oil processing (or Coal liquefaction which also has the same challenge of multiple outputs and using cracking) is still mandatory in order to launch the rocket. The learning curve is just smoother.
All in all, we would like to keep this change as we believe it has a positive impact on the game both for newer and veteran players, however when discussing the changes, we realized there are things that would make this change fit in the game much better...

The use of Light oil


Many of you pointed out that Light oil has very few uses in the game - mainly producing Solid fuel efficiently, but its possible to ignore Light oil altogether and just produce Solid fuel from Petroleum gas, sacrificing some Crude oil efficiency for simplicity.
One of the topics repeated many times was that with the proposed changes, suddenly the player is incapable of producing Solid fuel "the right way" (from Light oil) from the start. While this alone is not a big problem and can be justified by "at least the player will appreciate Advanced oil processing more", the efficiency of Solid fuel from Light oil is fairly unobvious, and the player has so many more critical problems to focus on that its easy to miss.

Rocket fuel behind chemical science pack, requires light oil


We are adding Light oil to the Rocket fuel recipe, and therefore moving Rocket fuel behind Advanced oil processing, with Rocketry taking the pre-requisite of Flammables instead. This should help as a slight hint to produce Solid fuel out of Light oil and to make the recipe a little more interesting - we dont have many assembling machine recipes with fluid input and a refinery-related fuel recipe is a good fit. One of the obscure details was that the only motivation that made Advanced oil processing mandatory was just Lubricant - which does not feel like a high-tech product - now there is Rocket fuel as well.
The more important question many of you have asked would be "why even make Solid fuel with the changes". This applies even more now that Rocket fuel is behind Advanced oil processing.
One of the great things about the idea of adding Solid fuel to a science pack was that it could be created from the excess Light oil that the player has no use for until unlocking Advanced oil processing. Then it could easily be burned to get rid of it to keep the refinery working, but since Basic oil processing has no excess byproducts anymore, every bit of Petroleum gas is valuable - therefore producing Solid fuel feels like a waste, unless the player has a desperate lack of coal to burn.

Chemical science pack change - Sulfur


There is however an item that is much more useful than Solid fuel, and is also created from Petroleum gas - Sulfur.
It opens the path towards Sulfuric acid (for Batteries both for Modular armor and for Accumulators), and more interestingly Explosives. Unlocking the Rocket launcher often feels like a big side step mainly because it requires setting up Explosives production. With Sulfur set up for the science pack, this is one step more convenient. A similar case occurs with Tank and Cannon shells later.
Therefore we find it fitting to replace Solid fuel with Sulfur in the Chemical science pack recipe, as there are multiple uses for it even with Logistic and Military science packs, and Solid fuel has lost a lot of its charm with the new changes.

Robots behind chemical science pack


One of the obviously controversial changes from the last FFF, was that Worker robots would become gated behind Chemical science pack. Our thought process behind this change was that you need to set up pretty much all of the oil refining recipes anyway, so it is not as much of a big jump as it seems. In fact, we believe it has been a confusing trap - it has appeared as a Logistic science pack tier technology, but in reality requires all the items that the next technological tier would expect you to have. On top of that, worker robots are a good motivation and reward for unlocking Chemical science pack which does not have that many big shiny technologies behind it.
With the change of putting Sulfur into the Chemical science pack recipe, worker robots are even closer to it as all the items in the science pack directly contribute to getting robots.

Flamethrower ammo change - Crude oil


With Heavy and Light oil behind Chemical science pack, Flamethrower ammo needed to be moved as well or have its recipe changed. Rather hastily we chose to change the recipe for Petroleum gas instead of the oils which does not make much sense, especially as the Flamethrower turret cant take Petroleum gas. After some of you pointed this out, it shall be Crude oil instead. Technically you can already use the turret with Crude oil barrels on the offensive, so making Flamethrower ammo simpler is not a problem.

Adjusting the numbers


We made slight changes to the numbers in the recipes - specifically, Basic oil processing results in a bit more Petroleum gas (45 instead of 40), and Advanced oil processing results in more Heavy oil (25 instead of 10) than before. This is because it was common to use Basic oil processing over Advanced oil processing when you needed a lot of lubricant for Express transport belts.
We are confident about these changes but nothing is set in stone, so let us know what you think about them. We actually found a bug with the new 'block water input fluidbox' feature we added, so we won't release the changes until we have that sorted. You can test these changes (except the reserved fluid inputs) with this mod.


[ 2019-07-26 14:00:52 CET ] [ Original post ]

Version 0.17.59 released

Balancing


  • Changed expensive variant of electronic circuit to require 8 copper cables instead of 10.

Changes


  • User verification must be enabled for public multiplayer games. LAN games, direct-connect, and Steam still don't require user verification.
  • Network message segment size can be configured in server-settings.json, for server providers with large enough upload bandwidth.
  • Added "Build with obstacle avoidance" into controls settings with CONTROL + Left mouse click as default. It re-introduces the possibility to build rails in ghost mode that avoid trees rocks and cliffs.
  • Decreased base damage of Personal laser defense from 40 to 30.
  • Decreased base shooting speed of Laser turret and Personal laser defense equipment from 3 shots per second to 1.5 shots per second.
  • Reverted combat latency behavior to do latency hiding while in combat. more

Bugfixes


  • Fixed that extra fast (modded) splitters didn't work properly. more
  • Fixed an inconsistency between area selection and logistic network highlight. more
  • Fixed that probabilistic recipe result that is also a catalyst didn't put itself into consumed statistics when the probability check failed and the item wasn't produced. more
  • Fixed visual errors when dragging train schedule conditions. more
  • Fixed that locale settings didn't save when changed. more
  • Solved that pressing ALT while walking right (D being pressed) stopped the character as it interfered with ALT + D. more
  • Fixed connection preview of underground belt in blueprint in a specific case. more
  • Changed accumulator/wall/underground belt map color to be more contrast against certain tiles. more
  • Fixed laser turrets were shooting beams that would last until target was destroyed even if it got out of range and turret stopped shooting. more
  • Fixed Laser turret shooting speed research didn't increase damage of laser turret. more
  • Fixed Laser turret shooting speed research didn't increase damage of Personal laser defense equipment. more
  • Fixed that biters sometimes couldn't get past other biters. more
  • Fixed that migration scripts couldn't use "require". more
  • Fixed a crash related to fast-replacing modded generator entities without fluidboxes.
  • Fixed loaders would not wake up sometimes after picking up items from them manually. more
  • Fixed that space science pack technology did not have accumulators and solar panels in prerequisites. more
  • Fixed that switching to another window while dragging a widget (slider) with a tooltip didn't clear the tooltip. more
  • Fixed that rails would report bounding box sizes of zero when read through the LuaEntityPrototype API. more
  • Fixed that unit groups could get stuck at the end of their assigned path. more
  • Fixed a desync related to changing forces in the map editor. more
  • Fixed a crash related to fluid connection changes in mods. more
  • Fixed that creating character corpses using player_index was off by 1. more
  • Added extra check to prevent infinite cycle in fast belt building. more
  • Fixed a crash when building train stations when the backers.json file is empty. more
  • Fixed that entities could have their light rendered twice. more
  • Fixed that biters had difficulty pathfinding around crescent-shaped lakes. more
  • Fixed that the "not enough rails" error didn't work correctly in the map editor. more
  • Fixed train would not stop exactly in the station preventing pumps to connect to fluid wagons when a mod was changing speed of breaking train. more
  • Fixed that trains would try to path to train stops on different surfaces. more
  • Fixed pump would not disconnect from fluid wagon when rail besides pump was mined or destroyed. more
  • Fixed a crash related to the rail planner. more
  • Fixed that the mod info label in the technology tooltip didn't line wrap. more
  • Fixed a crash near the start of the NPE. more

Modding


  • Changed how beams are drawn to improve seamless tiling of beam segments. Head and tail segments are now stretched to fill space from source/target position to next segment.
  • Changed how beams apply damage. By default, they no longer trigger their action every damage_interval, instead the action is triggered when its owner triggers shooting. The old behavior can be turned on by setting BeamPrototype::action_triggered_automatically to true.
  • It is possible to specify fluid product or ingredient with a fluidbox_index so they use exactly one slot corresponding to the specified fluidbox of the machine.
  • Changed the "market" entity from entity-with-health to entity-with-owner so it now has a force and unit_number.
  • Changed fluid energy source prototypes to error when no consumption limits are set instead of logging a warning.
  • Added util.parse_energy().

Scripting


  • Added LuaGui::screen.
  • Added on_gui_location_changed, on_gui_selected_tab_changed, and on_gui_switch_state_changed events.
  • Added LuaGuiElement type "empty-widget", "tabbed-pane", "tab", and "switch".
  • Added LuaGuiElement::add_tab(), remove_tab(), and force_auto_center().
  • Added LuaGuiElement::location, auto_center, drag_target, selected_tab_index, tabs read/write.
  • Added LuaGuiElement::switch_state, allow_none_state, left_label_caption, left_label_tooltip, right_label_caption, right_label_tooltip read/write.
  • Added LuaStyle::badge_font, badge_horizontal_spacing, default_badge_font_color, selected_badge_font_color, disabled_badge_font_color, selected_font_color, selected_hovered_font_color, selected_clicked_font_color, strikethrough_color read/write.
  • Added clear_and_focus_on_right_click to LuaGuiElement text-box.
  • Added LuaGuiElement::get_slider_value_step(), get_slider_discrete_slider(), get_slider_discrete_values(), set_slider_value_step(), set_slider_discrete_slider(), set_slider_discrete_values().
  • Added LuaGuiElement::get_mod().
  • Added LuaEntity::loader_container read.
  • Added LuaEntity::belt_neighbours read.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-07-25 14:47:17 CET ] [ Original post ]

Friday Facts #304 - Small bugs; Big changes

Read this post on our website. Hello, We are down to 28 bugs on the forum. The last bugs are often the ones we have been putting off for a reason, they generally require some more meaningful changes and decisions. That is why this week we have a lot to discuss.

G2A update


G2A got back to us this Monday, nothing much has happened so I will keep it short. They asked if we would agree to an audit to verify the money lost to chargebacks, we said yes, and they said they will start contacting some audit companies, and that it will 'take some time'.

Rail-planner obstacle avoidance


Kovarex was convinced by members of the forum to add someway to use the obstacle avoidance mode of the rail planner. Now when planning a rail path, holding CTRL will make it use the obstacle avoidance ghost planning.

MP server description


Dear server owners: the server description field is being enlarged from 120 to 5000 characters, and it now loads immediately. As soon as the next release is out, you may stop abusing the "tags" field for your colorful descriptions.

Oil processing changes


We decided to change the Basic oil processing recipe so that now it only outputs petroleum gas. Normally this recipe change would mean all 3 outputs would be petroleum gas, but we added a new feature so that a recipe can specify a specific fluidbox to use. We also used the same system so the future water input (for advanced oil processing) is closed.
We believe this contributes to make oil a bit less of a difficulty spike, and also means we no longer need to remember which side the water goes in. This means that light and heavy oil is only available after Advanced oil processing is researched. The biggest issue this introduces is that worker robots require lubricant made from heavy oil.
Click to see more technologies. The solution we chose to apply is to move worker robots behind chemical science pack. This change does delay how quickly you are able to get worker robots, but the difference should not be too drastic as in order to get robots operational you already need to set up a complete refinery, advanced circuits and 2 upgrades of engines - which is already most of the science pack done. Basic oil processing now produces 25% more petroleum gas to offset the loss of light and heavy oil for solid fuel. Technologies which newly received chemical science pack now require less science packs to research them so the total resource price is not too far off either. We prefer to keep flamethrower as it is, but flamethrower ammo now requires petroleum gas instead of light and heavy oil.

Laser turret moved to chemical science


For a long time we have felt that there arent really enough useful technologies unlocked by chemical science, and laser turrets are a big game changer so were moving those to chemical science pack along with the worker robots.

Laser turret shooting speed fixed


There was a bug with laser turrets, the shooting speed upgrade didn't actually increase their firing rate since we switched them to use beams. Posila fixed it, so that more turret shooting speed actually results in more damage per second, not just for laser turrets but for personal laser defense too.
Now that the shooting speed bonus works properly, we decreased the base shooting speed of the laser turret and personal laser defense by 50%, and with all the upgrades the shooting speed will be 160% of what it used to be. Another result of this bugfix, we decided to change the initial damage of the personal laser defense from 40 to 30. However with full shooting speed technologies the DPS is much higher (at the cost of more energy).

Laser beam glow


After fixing that laser beams didn't glow in dark, OwnlyMe releases a "Glowing Laser beams" mod that makes laser beams illuminate ground under them. Vaclav requested this to be base game feature, but there was a catch: Beam graphics didn't tile properly.
We were aware of issues with tiling of beam graphics ever since we added laser beams, but Vaclav was able to workaround the problem by decreasing intensity of a glow on sprite edged and make the overlapping almost invisible. Almost. Vaclav tried to workaround the tiling problem by adjusting edges of sprites again, but it quickly turned out it was not possible to do. After going through code that draws beams I realized that we calculate the exact position of each beam tile, but then pass it to drawing functions which convert the position to MapPosition, which uses fixed-point coordinates with only 8 bits for fractional part. Because of this, the tiles didn't align properly and they sometimes created a gap or overlapped. To cover gaps, the sprites were drawn scaled up by 1%, which resulted in them overlapping even more. Originally, when electric beam was made back in 2015, this did not create any visible issues. So fixing the accidental rounding of rendering position was easy, and the body of the beam started to tile properly, but there were still visible seams at the head and tail of the beam. I was reading up on how triangle rasterization works on GPUs, so I figured that it must be due to head and tail sprites having different sizes than body sprites, so they don't share an edge exactly, which causes some pixels on the edge to be rasterized by both quads and some by neither quads. After spending some time on fixing this problem I found out that the problem was not in rasterization of edges, it was caused by texture filtering. The head and tile sprites that I was using to test the issues were larger than they should have been, and were overlapping the body sprites. Lights are almost always gradients spanning over large area and are rendered using bilinear filtering. So the edge of body tile was aliased because that's where quad ended, but edge of head sprite was bilinearly filtered, because that's where the edge was drawn in the sprite, not the actual edge of the sprite quad. So I changed how the head and tail sprites are drawn, in order for them to always share an edge with body sprites, and that fixed the issue. As a bonus, we were able to turn on trilinear filtering on beam sprites, we didn't use it on them before because it used to make tiling issues even worse.
Now the beams and the glow are as close to pixel perfect as we can get them. The glow really does make the scenes look that much nicer.

Inserters getting stuck


I did some improvements to Inserters during some releases of 0.17. I made them faster by removing what I thought were pointless pauses where the Inserter would do nothing for 1 tick in some situations. But after 0.17.50, this started happening:
In some specific situation, the Inserter would aim for an item coming towards it, but because the item was too fast, it would overshoot the inserter head. If this is timed in a certain way, it would happen indefinitely. Before 0.17.50 this didn't happen because the Inserter would pause for 1 tick after failing to pick up an item, breaking any timing loops, but it also meant that an Inserter would potentially wait up to 10 ticks during one swing (since the Inserter tracks items on moving belts throughout it's entire movement). So I didn't want to revert back to the previous logic. Many more complex solutions were not very feasible either since Belt<->Inserter interaction is a performance critical part of Factorio. So the final solution was to pause for 1 tick after failing to pick up an item, but only if the Inserter head is on top of a belt. This is should be the best compromise all things considered. We plan to do a release on Monday, so you will have a chance this weekend to share your thoughts regarding any of these changes over on our forum.


[ 2019-07-19 16:45:49 CET ] [ Original post ]

Version 0.17.57

Changes


  • Restored ore placement to match that of 0.17.50 more

Optimisations


  • Optimized synchronization time of blueprint library to a new game map. more

Bugfixes


  • Fixed glitch in pollution cloud overlay rendering. more
  • Fixed joining multiplayer through Steam Friends would not work sometimes. more
  • Fixed rail signal consistency for a very special corner case. more
  • Fixed that the Linux server's standard input could get closed under some circumstances. more
  • Fixed crash when enabling blueprint library cloud sync when local blueprint library did not exist. more
  • Fixed that trains couldn't be rotated while in the map editor. more
  • Fixed that LuaGameScript::ban_player() only worked with real players. more
  • Fixed that the changelog GUI could have unnecessary scroll bars. more
  • Fixed that hiding the search bar didn't unfocus it, so it was still possible to write to the invisible search bar. more
  • Fixed wrong signal placeability in some specific cases. more
  • Fixed that the entity tooltip would flicker in some cases related to the tooltip delay. more
  • Fixed a crash when opening assembling machines with fixed_recipe set in the latency state. more

Modding


  • Added a prototype property for hiding recipes from the player crafting GUI.
  • Renamed spot noise argument 'minimum_candidate_point_spacing' to 'suggested_minimum_candidate_point_spacing'
  • Added base_productivity to assembling machines, mining drill, and lab prototypes.
  • Added LuaEntityPrototype::base_productivity read.

Scripting


  • Added optional "ignore_characters" to LuaSurface::clear().
  • Added on_gui_confirmed event.
  • Added LuaGuiElement::numeric, allow_decimal, allow_negative, is_password, lose_focus_on_confirm, clear_and_focus_on_right_click read/write.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-07-15 17:54:19 CET ] [ Original post ]

Friday Facts #303 - Under 100 bugs (but still not stable)

Read this post on our website.

Under 100 bugs


We have a record low in our bug report forum, of only 55 active bug reports. I don't think in the history of Factorio the bug forum has been so clean. No doubt once we mark 0.17 as stable the count will shoot up again. For this weeks graph I added the count of players on Steam as the left axis. We thought it would be somewhat interesting to see if there is any correlation between the two.
Note: The axis have different scales. I also prepared the same graph but for the duration of the 0.17 release. You can see our player numbers are dropping quite a lot, from the all time peak of 22,457 on the 3rd of March 2019.
While bug reports might be at an all time low, we are not going to call the game stable yet. We still have an important milestone to reach, that is, implementing the new Introduction campaign graphics (FFF-301). A lot of the team has been on vacation these last few weeks, including the whole campaign team and most of the art department. What this means is that we expect it will be a few more weeks before we can call the current version stable. We have been asked a few times when stable will be released, but my question is, why does it matter exactly which version we call stable? Are you waiting for stable to play a new playthrough? The thing is, this stable is only going to be the 'first' stable. Our plan is to have a number of short experimental phases after the first stable, where we will add new GUI's and such, which will add bugs and technical debt. After fixing the bugs in a 'small' experimental content release, we will then mark that as the 'new' 0.17 stable. Besides, there are still a few edge cases with signals that kovarex is busy fixing:
For instance the setup above took him 3 hours to fix. The cause of the issue was that the segment has both an incoming and outgoing signal at the same position.

G2A - Worse than Piracy


There was recently some news about G2A, prompted by a tweet by Mike Rose of No More Robots. In a follow up tweet he said: Please, if youre going to buy a game from G2A, just pirate it instead! Genuinely!. We have talked about the grey market resellers in some previous Friday Facts (FFF-145 and FFF-171), and our stance is pretty much the same as Mike, we would rather you pirate Factorio. Upon hearing the news of G2A advertising Descenders, we took a look ourselves, and we discovered they were doing the same with Factorio:
Obviously we aren't super happy about it, but after looking into some trademark/copyright law, it seems there is not much we can do. After the news broke, G2A posted an article on their website: G2A vows to pay devs 10x the money proven to be lost on chargebacks. After reading it through, I thought I would take them up on their offer. We had a ton of chargeback and fraud issues in 2016 just after our Steam launch, with over 300 Steam keys of the game being purchased with stolen credit cards. With an average chargeback fee of about $20, we estimate the total amount of fees we paid because of chargebacks is about $6,600. We will be doing a deeper evaluation of our historic accounting records to get a more exact figure, but it doesn't matter so much now. So I emailed G2A about the article and their 'vow' last week, and they are not exactly prompt in terms of dealing with the request. I have a list of all the Steam keys I had to revoke because they were purchased fraudulently, and G2A offered to check the keys. Currently this is where the story ends, they haven't replied to my last email (2 days ago) sending them the keys and asking how many of them were sold on the website. Funnily, we already know that at least some of the keys were sold on G2A, because after I revoked them, I had people emailing to ask what was wrong with their key:
  • Hello, on 2016-12-26 I bought my brother a Factorio steam cd key from G2A website. On 2017-01-20 he got a message on steam that the game was revoked. What happened and how can we solve this issue?
  • Hey, I got this game from my friend on my birthday a while back, March 11thish. He sent me it by key, I didnt really question it. Yesterday, though, I was greeted by a popup telling me the game had been removed. After investigating, I learned my friend bought it from a site called G2A, little shady site from what I hear. Steam support says it was revoked at the request of the publisher.
  • I bought Factorio on G2A last week for Steam. However, I can't find it in my Steam library anymore.
  • On 3 March I bought the game Factorio on G2a It was 5 euro cheaper than on your website so I thought let's buy it here. But today I got a pop-up from steam saying that my Factorio steamkey has been revoked because of a problem with processing payment for this item.
  • Today i logged in, after playing this game rougly 300 hours and about 2 month and got a message that Factorio was removed from my account. I got my key from G2A.
  • I bought Factorio on steam a while back and when i went to play it, it said i had to purchase it. I contacted steam and they said that it had been revoked and i should contact the publisher. How and will i get the game back? I bought the game off of G2A.
  • I bought the game on g2a and got the steam product code and my account is saying that I don't have the game bought.
Well anyway, after we switched payment providers to Humble Widget, the fraudulent purchases stopped. We don't really care about G2A anymore (but we are in a unique position due to our no sales policy). There are still Steam gifts of Factorio being sold on G2A, these are most likely 'legit', in that they were not purchased using stolen credit cards. The question is, where do these gifts come from? Obviously people would not be selling Factorio Steam gifts if it did not generate a profit. We have some ideas:
  • Regional fraud - Buying the game in 1 country and gifting it to someone in another. This is likely, as we can see that the Europe gift is cheaper than the US/Worldwide.
  • Speculative buyers from before the price increase - The price of the game was $20 a year ago. So buying 1,000 copies and waiting 1 year, nets you a profit of $5,000 if you sell for $25. Not a bad gain in a year. For Factorio the opportunity only came once, but other games go on sale multiple times each year, which is where the speculative buyers and the grey market cash-in.
To conclude this whole topic, we strongly recommend people buy from us or one of our official partners. Not only for the reasons you might think. If you buy from a grey-market site and have a problem with the game, or something goes wrong, you will have to deal with their support system. I don't have the exact details of how to request a refund or customer support from G2A, or how long they will take to respond to your issue. If you buy from us directly, we offer a 28-day refund policy. If you have a problem with the game, you decide it's not your cup of tea, you thought the biters were too cute, just send us an email and you will have a refund in short order. We also deal only with Factorio related support problems, we don't process orders of thousands of different games, so you can be sure your case will be handled expediently by team members who know the game in and out. As always, let us know what you think on our forum.


[ 2019-07-12 15:15:00 CET ] [ Original post ]

Version 0.17.56 released

Minor Features


  • Added option to enable Steam Cloud Sync for blueprint library to Other Settings GUI. Please backup your blueprint-storage.dat if you chose to enable it. The option is available in Steam version of the game and Cloud Sync needs to be enabled in Steam for the library to be actually synchronized.

Bugfixes


  • Fixed that the blueprint library GUI sometimes wouldn't update until the mouse was moved. more
  • Fixed that deconstructing tiles in the map editors instant-deconstruction mode didn't work. more
  • Fixed setting FireFlamePrototype::spread_delay_deviation to 0 or 1 would crash the game. more
  • Fixed logistics system tutorial after game script migration. more
  • Fixed that the game would freeze when using LuaLogisticNetwork::remove_item() if the item was only in the players cursor. more
  • Fixed yet another case of rails not merging blocks as expected. more
  • Fixed occasional crash when dragging train wait conditions with brackets. more
  • Removed the focusability of buttons, as we don't support it graphically and the functionality was just half-functional. more
  • Fixed that copy-paste for assembling machines would ignore fixed_recipe. more
  • Fixed that failing to join multiplayer games through --join-game-by-id would fail to show the error and show an empty background. more
  • Fixed inserting items into underground belts with inserters could put items onto the belt leading into the underground belt. more
  • Fixed rail signal internal consistency for some cases of rail cycle with one signal. more
  • Fixed that electric energy interface stopped accumulators from working. more
  • Fixed high CRC time related to large amounts of electric networks in multiplayer games. more
  • Fixed that multiple map settings prototypes could be defined.

Modding


  • Removed label style want_ellipsis as it will be used automatically everywhere as with button.
  • All rail bounding boxes are now hardcoded/not moddable. This is to avoid unexpected collision/rail block merging behaviour.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-07-11 19:22:00 CET ] [ Original post ]

Version 0.17.55 released

Bugfixes


  • Fixed that some of the textboxes didn't allow to write characters bound for different actions when focused. more
  • Fixed a desync related to removing rail signal that merges two rail blocks reserved by different trains into one.
  • Fixed that the belt-gap-fill logic could replace splitters/underground belts in some cases. more

Modding


  • Added LuaPlayer::connect_to_server().
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-07-09 13:38:25 CET ] [ Original post ]

Friday Facts #302 - The multiplayer megapacket

Read this post on our website.

The multiplayer megapacket


Last month I joined KatherineOfSky's MMO event as a player. I noticed that after we reached a certain number of players, every few minutes a bunch of them got dropped. Luckily for you (but unluckily for me), I was one of the players who got disconnected every, single. time, even though I had a decent connection. So I took the matter personally and started looking into the problem. After 3 weeks of debugging, testing and fixing, the issue is finally fixed, but the journey there was not that easy. Multiplayer issues are very hard to track down. Usually they only happen under very specific network conditions, in very specific game conditions (in this case having more than 200 players). Even when you can reproduce the issue it's impossible to properly debug, since placing a breakpoint stops the game, messes up the timers and usually times out the connection. But through some perseverance and thanks to an awesome tool called clumsy, I managed to figure out what was happening. The short version is: Because of a bug and an incomplete implementation of the latency state simulation, a client would sometimes end up in a situation where it would send a network package of about 400 entity selection input actions in one tick (what we called 'the megapacket'). The server then not only has to correctly receive those input actions but also send them to everyone else. That quickly becomes a problem when you have 200 clients. It quickly saturates the server upload, causes packet loss and causes a cascade of re-requested packets. Delayed input actions then cause more clients to send megapackets, cascading even further. The lucky clients manage to recover, the others end up being dropped. The issue was quite fundamental and took 2 weeks to fix. It's quite technical so I'll explain in juicy technical details below. But what you need to know is that since Version 0.17.54 released yesterday, multiplayer will be more stable and latency hiding will be much less glitchy (less rubber banding and teleporting) when experiencing temporary connection problems. I also changed how latency hiding is handled in combat, hopefully making it look a bit smoother.

The multiplayer megapacket - The technical part


The basic way that our multiplayer works is that all clients simulate the game state and they only receive and send the player input (called Input Actions). The server's main responsibility is proxying Input Actions and making sure all clients execute the same actions in the same tick. More details in FFF-149 Since the server needs to arbitrate when actions are executed, a player action moves something like this: Player action -> Game Client -> Network -> Server -> Network-> Game client. This means every player action is only executed once it makes a round trip though the network. This would make the game feel really laggy, that's why latency hiding was a mechanism added in the game almost since the introduction of multiplayer. Latency hiding works by simulating the player input, without considering the actions of other players and without considering the server's arbitrage. In Factorio we have the Game State, this is the full state of the map, player, entitites, everything. It's simulated deterministically on all clients based on the actions received from the server. This is sacred and if it's ever different from the server or any other client, a desync occurs.
On top of the Game State we have the Latency State. This contains a small subset of the main state. Latency State is not sacred and it just represents how we think the game state will look like in the future based on the Input Actions the player performed. To do that, we keep a copy of the Input Actions we make, in a latency queue.
So in the end the process, on the client side, looks something like this:
  • Apply all the Input Actions of all players to the Game State, as received from the server.
  • Delete all the Input Actions from the latency queue that were applied to the Game State, according to the server.
  • Delete the Latency State and reset it to look the same as Game State.
  • Apply all the actions in the latency queue to the Latency State.
  • Render the game to the player, based on the information from the Game State and Latency State.
This is repeated every tick. Getting complicated? Hold on to your pants. To account for the unreliable nature of internet connections, we have two mechanisms:
  • Skipped ticks: When the server decides what Input Actions will be executed in what game tick, if it does not have the Input Actions of a certain player (e.g. because of a lag spike), it will not wait, but instead tell that client "I did not include your Input Actions, I will try to include them in the next tick". This is so when a client has connection problems (or computer problems), they will not slow down the map update for everyone. Note that Input Actions are never ignored, they are only delayed.
  • Roundtrip Latency: The server tries to guess what's the roundtrip delay between the client and the server, for each client. Every 5 seconds it will negotiate a new latency with the client, if necessary, based on how the connection behaved in the past and the roundtrip latency will be increased and decreased accordingly.
By themselves they are pretty straightforward, but when they happen together (which is common when experiencing connection issues), the code logic starts becoming unwieldy, with a large amount of edge cases. Furthermore, the server and the latency queue need to properly inject a special Input Action called StopMovementInTheNextTick when the above mechanisms come into play. This prevents your character from running by himself (e.g. in front of a train) while experiencing connection problems. Now it's time to explain how our entity selection works. One of the Input Action types we send is entity selection change, which tells everyone what entity each player has their mouse over. As you can imagine this is by far the most common input action sent by the clients, so it was optimized to use as little space as possible, to save bandwidth. The way this was done is that each entity selection, instead of saving absolute, high precision map coordinates, it saves a low precision relative offset to the previous selection. This works well, since a selection is usually very close to the previous selection. This creates 2 important requirements: Input Actions can never be skipped and the need to be executed in the correct order. These requirements are met for the Game State. But, since the purpose of the Latency state is to "look good enough" for the player, these requirements were not met. The Latency State didn't account for many edge cases related to tick skipping and roundtrip latency changing. So you can probably see where this is going. Finally the issue of the megapacket started to show. The final problem was that the entity selection logic relied on the Latency State to decide if it should send a selection changed action, but the Latency State was sometimes not holding correct information. So, the megapacket got generated something like this:
  • Player has connection issues.
  • Skipped ticks and Roundtrip Latency adjustment mechanisms start to kick in.
  • Latency state queue doesn't account for these mechanisms. This leads to some action being deleted prematurely or executed in the wrong order, leading to an incorrect Latency State.
  • Player recovers from his connection issue and simulates up to 400 ticks in order to catch up to the server again.
  • For every tick, a new entity selection change action is generated and prepared to be sent to the server.
  • Client sends the server a megapacket with 400+ entity selection changes (and other actions also. Shooting state, walking state, etc also suffered from this problem).
  • Server receives 400 input actions. Since it's not allowed to skip any input action, it tells all clients to execute those actions and sends them over the network.
Ironically, the mechanism that was supposed to save some network bandwidth ended up creating massive network packets. In this end this was solved by fixing all the edge cases of updating and maintaining the latency queue. While this took quite some time, in the end it was probably worth doing a proper fix instead of some quick hacks.

Clusterio - The Gridlock Cluster


Clusterio is a scenario/server system that adds communication of game data between different servers. For instance sending items between different servers, so you can have a 'mining server', which will mine all the iron ore you need, and send it to the 'smelter server' which will smelt it all and pass it further along. Last year there was an event using the system which linked over 30 servers together to reach a combined goal of 60,000 Science per minute. MangledPork has a video of the start of last years event on YouTube. The great minds and communities behind the last event have come together again to host another Clusterio event: The Gridlock Cluster. The goal this time is to push the limits even further, explore and colonise new nodes as they are generated, and enjoy the challenge of building a mega-factory across multiple servers. If you are interested in participating in this community event, all the details are listed in the Reddit post, and you can join the Gridlock Cluster Discord server. As always, let us know what you think on our forum.


[ 2019-07-05 13:28:57 CET ] [ Original post ]

Version 0.17.54 released

Changes


  • Removed the message of " 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 undo doesn't work for trains. 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.


[ 2019-07-04 13:05:15 CET ] [ Original post ]

Friday Facts #301 - Crash site: First state

Read this post on our website

Crash site: First state


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 60s/70s 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 dont 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.


[ 2019-06-28 16:20:59 CET ] [ Original post ]

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.


[ 2019-06-24 16:31:03 CET ] [ Original post ]

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.


[ 2019-06-24 13:28:08 CET ] [ Original post ]

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.


[ 2019-06-21 15:34:14 CET ] [ Original post ]

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.


[ 2019-06-17 16:03:43 CET ] [ Original post ]

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.


[ 2019-06-14 14:09:10 CET ] [ Original post ]

Version 0.17.49 released

Bugfixes


  • Fixed sprite batching issue when drawing many inserters with circuit connectors. more
  • Fixed construction robot working shadow. more
  • 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.


[ 2019-06-13 19:17:20 CET ] [ Original post ]

Version 0.17.48 released

Changes


  • Improved manual building of character corpses through the map editor. more
  • Textures that are being streamed are compressed now to reduce RAM usage and increase rendering performance.

Bugfixes


  • Fixed production statistics were not cleared before starting the Introduction scenario more
  • Fixed Compilatron getting stuck in a loop between two help nodes. more
  • Fixed various bugs uncovered (mainly) by more rigid rail signal handling.
  • Fixed that when starting a server with --start-server-load-scenario, --map-settings would have no effect. more
  • Fixed that the minimap radar coverage preview would show radars on different surfaces. more
  • Fixed that turrets would show the glow animation in some cases when dead. more
  • Fixed that checking for mod updates would work correctly if the mod author had previously uploaded a broken version of the mod. more
  • Fixed that crafting machine lights wouldn't render correctly when off-screen partially. more
  • Fixed that the map editor extra-settings GUI didn't resize correctly. more
  • Fixed that the bonus GUI had transparent edges when the vertical scroll bar was visible. more
  • Added workaround for issue with missing icons on macOS with Intel GPUs. more
  • Fixed framerate issues caused by overloading GPU. more
  • Fixed a crash when using some hotkeys while in cutscenes. more
  • Fixed that re-mapping "stack split" didn't work correctly. more
  • Fixed speech bubbles jittering when their target moved across a chunk boundary.
  • Fixed that tank could not drive backwards. more
  • Fixed that rendering.draw_line() sometimes did not render lines. more
  • Fixed that the map wouldn't update during a non-blocking save. more
  • Fixed that LuaPlayer::set_controller() would crash if set to another players character. more
  • Fixed bug where NPE could get stuck in a cutscene. more

Modding


  • Limited maximum number of picture variations that will be loaded from item prototype definition to 16.
  • Added y_offset property to speech_bubble prototype.

Scripting


  • Added a sanity check to LuaForce::chart() that errors on large sizes instead of trying to use 71,000 gigabytes of RAM.
  • Added LuaFlowStatistics::clear().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-06-11 14:22:18 CET ] [ Original post ]

Version 0.17.47 released

Bugfixes


  • Fixed that the game crashed when passing train signal while driving train in manual mode.
  • Fixed that 'station name' and 'player name' map toggles would seemingly randomly toggle on when turning on some options. more
  • Disabled check that prevented loading of some mods. more
  • Fixed crash when saving speech bubbles that had been migrated from old saves. more
  • Fixed NPE crash when Compilatron is boxed while building. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-06-07 15:59:14 CET ] [ Original post ]

Friday Facts #298 - Demo upgrade for Stable

Demo upgrade for Stable


Introduction as Demo In general, the Introduction scenario has been very well received. Feedback has been flooding in, and it has been very useful. Receiving screenshots from all of you has been great. We are mostly happy with the state of the gameplay, and it seems to be having the right effect on new players. When 0.17 moves to stable, there will need to be a new version of the Demo. The Introduction scenario was always planned to be the Demo, but there are still some sticking points we want to address. Loaders/Feeders/Consumers Back in FFF-284 we discussed a plan to promote new players to use belts. This solution worked very well during focus testing when the target points were Underground belts instead of Loaders. Even once we changed the targets to Loaders, players still built belts, but the effect was not as strong. My hope was that this could be solved when the Loaders received new art.
Loaders introduced a new issue which is a good example of contextual blindness. To me, the Loaders were simply a quest item consumer, conveniently placed so that after it was used, the player had accidentally set up some logistics automation. The items go in and disappear. To the players imagination, those items are being transferred to the adjacent structure.
This breaks a fundamental rule that was decided back in FFF-128 when Loaders were being considered. This rule is that there is only one way to move items between structures, by using Inserters. Even though the items were never actually transferred, and our intent was that the Loader consumes them, it is enough that the player might think they were transferred. The next solution
Now that Loaders are gone, we needed a new 1x1 Consumer entity which the player must use inserters to fill. We will be releasing it in the experimental this week so now is a good time to test it and send some last minute feedback. As usual, the introduction takes screenshots of your play-through, which can be found in the 'script-output' directory, please send them to us.

Combat robot and tank changes


There are some small tweaks we have made related to the Combat robots and Tank in this last week, and wanted to just quickly give a summary of the changes and our thoughts. Tank no longer takes damage when hitting rocks We've noticed that the tank would take a huge amount of damage when hitting rocks, which isn't really fun. This change does nothing but remove irritation, and makes it consistent with hitting trees and cliffs. Tank acid resist 50% -> 70% Tanks were a bit too squishy against the acid on ground, especially later in the game, where the acid of multiple types of Spitters/Worms stacks. Just some minor balancing really. Defender robot recipe change We made a change to the recipe of Defender capsules for 0.17, which was adding flying robot frames as an ingredient. This makes the recipe more complex, and critically means you need to have a full oil setup running before you can craft them. We had an intention to buff the combat robots to compensate, but this did not come to pass. A problem with needing oil to produce the defenders, is that once you have oil, a lot of much better options (laser turrets, flamethrowers) become available, and the time taken to unlock all the prerequisite technologies delays their introduction. So we decided to revert the change, and focus more on a niche use-case of the defender capsules. Without needing flying robot frames, you can produce the capsules without the need of any oil products. This means they are accessible earlier, and can be used to fight the medium biters that start appearing around the mid-game. We also decided to buff their base damage from 5 -> 8, to make them much deadlier against the 4 armor medium biters. The other related combat robot changes of 0.17, namely the buff to follower robot count technologies, means they might now see some more use. With all the military science upgrades, defender capsules can become quite powerful. Beams at night A small feature, but every little helps; Beams now show up nice and bright in the darkness:
As always, let us know what you think on our forum.


[ 2019-06-07 11:51:30 CET ] [ Original post ]

Version 0.17.46 released

Minor Features


  • Added an option to filter by has-players in the browse games GUI.

Changes


  • Tank no longer takes damage from hitting rocks.
  • Increased tank acid resistance from 50% to 70%.
  • Defender robots no longer require flying robot frames in their recipe.
  • Defender robotics technology only has Military science pack technology as a pre-requisite.
  • Defender robot damage increased from 5 to 8.
  • The Map Editor - resources - paint and spray options will show the non-infinite ore count next to the cursor.

Graphics


  • Added new higher resolution icons for resource ores with randomized variations when drawn on belts.

Bugfixes


  • Fixed that global programmable speaker volume depended on the zoom level. more
  • Fixed a crash related to changing biter forces. more
  • Fixed that 'signal-check', 'signal-info' and 'signal-dot' were in the 'virtual-signal-color' item subgroup.
  • Fixed a new case of inserters behaving differently when rotated.
  • Fixed unexpected behaviour when it comes to dividing rail segments in some special cases. more
  • Extended straight rail collision box, so there is not an empty space between individual rail entities.
  • Fixed Arithmetic Combinator sometimes outputting wrong number when setting a constant in the first field. more
  • Fixed wording on the Lua Product documentation + fixed reading probability/amount_min/amount_max from Products. more
  • Fixed that modded tiles in blueprints stored in the blueprint library wouldn't persist through mod enable/disable. more
  • Fixed that quickbar pick item shortcut would sometimes select the wrong item when rotating quickbars in multiplayer. more
  • Fixed that widget under the point of (0,0) got always hovered when mouse left the window. more
  • Fixed that leaving the window while entity is selected didn't de-select the entity.
  • Fixed that a fresh stack of wires was not added back to cursor when the cursor stack was depleted. more
  • Fixed that train stopped moving without a schedule. more
  • Possibly worked around the game extremely flickering on some computers when rendering scenes with lot of draw calls. more
  • Possibly worked around "Unknown D3D Error (0x8876017c)" preventing the game to start on some computers. more
  • Fixed crash when dragging station while temporary stop being removed. more
  • Fixed that train entering block that is reserved more than once by it cancelled all the reservations and opened the block for other trains after leaving (and still having another invalid reservation to it) it which could lead to train collisions and desyncs. more
  • Laser turret and robot beams now render properly in the dark. more
  • Fixed that in certain translations, there would be a gap between the shortcut bar and alerts if the shortcut selector was open. more
  • Fixed that failed mod downloads would be incorrectly marked as successful. more
  • Fixed that modded choose-elem-buttons would behave strangely when locked. more
  • Fixed that the candidate_spot_count argument to the spot-noise function was ignored.
  • Fixed spitter and worm acid splashes would deal continuous damage to closed gates and trains. more
  • Fixed that you could set some invalid signal combinations in combinators using lua. more
  • Fixed a desync related to how Lua formatted negative zero. more

Modding


  • Moved the train wait condition default times into utility-constants.
  • Fixed that it was possible to specify max_level of technology to be lower then level and crash the game by it. more
  • Fixed that the game would allow invalid heat-pipe connections that would end up crashing the game. more
  • The update mods GUI will now attempt to install new required dependencies. more
  • Added "trigger_target_mask" to entity prototype definition and triggers as more flexible system for filtering entities in triggers.
  • Added "trigger-target-type" prototype type to define custom values for use in "trigger_target_mask". Current limit for total count of trigger-target-types is 56.

Scripting


  • Added LuaGameScript::evaluate_expression(), which can be used to calculate the technology unit cost formula at any level.
  • Added LuaProfiler::divide() to allow printing average duration.
  • Added optional snap_to_train_stop parameter to LuaGameScript::create_entity.
  • Added LuaEntity::ghost_unit_number read.
  • Added "source_index" to on_forces_merged event.
  • Added LuaStyle::padding, margin write.
  • Added LuaEntity::selected_gun_index read/write for cars.
  • Fixed that LuaForce::index was 1 larger than it was supposed to be.
  • LuaGameScript::forces can now be indexed with the name and the LuaForce::index.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-06-07 11:31:26 CET ] [ Original post ]

Version 0.17.45 released

Bugfixes


  • Changed the go-to-mod buttons in the manage and update tabs of the Mods GUI to switch to the install tab if needed. more
  • Fixed that it was possible to open the command console while inside the technology GUI. more
  • Fixed that it was not possible to build ghosts in normally visible area which is in fog of war in map view. more
  • Fixed a crash when removing modded recipes while hand-crafting those recipes. more
  • Fixed that nested CustomGuiStyle changes didn't work correctly. more
  • Fixed that inserter would sometimes put items on the wrong side of the belt.

Scripting


  • Added only_in_alt_mode to LuaRendering draw functions.
  • Changed LuaEntity::copy_settings() to also copy settings from ghosts.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-31 13:19:00 CET ] [ Original post ]

Friday Facts #297 - New resource icons

Read this post on our website

Inserters are now smarter


A few days ago I was investigating a rather minor bug report related to "Rotational Asymmetry in Belt/Inserter interactions" (aka Inserter was not behaving identically when rotated). This was a classic case of floating point equality comparison. https://cdn.factorio.com/assets/img/blog/fff-297-inserters.gif The Inserter would move it's arm and then it would pick up the item if the current arm orientation is equal to the desired arm orientation. Because of some chain of calculations related to rotation, some precision was lost and the equality check would fail for 1 tick, delaying the item pickup for 1 tick in some Inserter rotations. So I fixed that by finishing the inserter movement if it's close enough. Now the inserters should be a tiny bit faster in some rotations, plus all rotations should again be symmetrical and identical. While analyzing the code and Inserter behavior for that bug, I also noticed that inserters with stack bonus would do nothing for 1 tick after picking up an item from a belt. I changed it so inserters will start moving to a new target immediately after they pick up something. This also sped up the Stack Inserter by a tiny bit. Both the speedups were enough to fix another bug that was often regarded by the other devs as "not a bug": A Stack Inserter was not fast enough to pick up all the items placed on a belt by another Stack Inserter. Furthermore, because of different timings, the amount of items a Stack Inserter would pick up would depend on how far that Stack Inserter was from the item source: https://cdn.factorio.com/assets/img/blog/fff-297-stack-inserters.webm We released the change on Thursday. Something strange was quickly discovered after release... https://cdn.factorio.com/assets/img/blog/fff-297-inserter-bug.webm From Nefrums speedrun stream. As someone from Twitch chat noted "Inserters are so fast now, they even don't care about the side of belt". Remember that I fixed the rotation problem by finishing the Inserter movement if it's close enough. Well, what ended up happening was what now the Inserter would stop 0.0001 degrees short of perfectly vertical. That was of course closer to the other belt lane so the item would be dropped there. Previously it was always dropped perfectly vertical, and the lane decision algorithm would choose the right lane. The fix was easy and it's probably released by the time you are reading this. So with everything fixed, inserters are now more consistent, predictable and intuitive, things that I think are important for a precise game like Factorio. Some situation might end up being slightly slower or will consume a bit more electricity, but generally inserters are now faster.

New resource icons


In FFF-179 we presented new resource graphics for Factorio 0.15. When the resource graphics were finished, we tried to cut pieces from them and compose these into new item icons - but the results were not better than what we already had and we needed to do many more things for 0.15, so we kept the resource icons as they were for the time being.
Recently we have started work on higher resolution for icons, and the resource icons are one of the first families to get a revisit. As mentioned in FFF-179, to save time when creating the resource graphics we used various randomization methods to get a new batch of re-randomized resource pieces easily. This method has one big drawback for icons - its very hard to preview and control in Blender.
However the random generation allows us to generate many random pieces of resources very quickly...
...and combine them in Photoshop into icons with perfect control over every pixel.
However when we put these icons in the game, on belts they seem to suffer a lot from repetitiveness just like the older versions did.
There was one more thing regarding resource icons that we tried to do for 0.15 but did not have enough time for - resources would get randomized variations of icons when drawn on belts. Rendering more variations and assembling new icons was relatively easy at this point, so we made some more versions.
With randomized variations the resources look much more natural and unrefined, which makes a lot of sense as The Factory has not processed them into perfect uniform products yet. https://cdn.factorio.com/assets/img/blog/fff-297-animated.webm The new icons are not ready just yet, but we hope to have them for the 0.17 stable. As always, lets us know what you think on our forum.


[ 2019-05-31 12:46:59 CET ] [ Original post ]

Version 0.17.44 released

Changes


  • The resource frequency slider in the map generator settings has a smaller influence over the amount of ore in the starting area patches. more
  • Inserters with stack bonus are now smarter when picking up items, and thus slightly faster. more

Bugfixes


  • Fixed that researching the appropriate technology would re-add shortcut buttons to the shortcut toolbar even if the player explicitly removed them earlier. more
  • Fixed that some saves that contained multiple surfaces would cause the game to crash on load. more
  • Fixed that auto-barreling opt-out didn't work if the fluid has icons defined. more
  • Fixed that auto-barreling recipes would use the wrong fluid name if the fluid had a custom localised name defined. more
  • Fixed that the entity damaged event original_damage value wouldn't be accurate if the entity had shields or resistances. more
  • Fixed a performance problem related to the undo logic and large blueprints. more
  • Fixed that trying to join Steam networking enabled games with Steam networking disabled didn't work correctly. more
  • Fixed that trains built part of a blueprint was snapping to train stop which could prevent some specific blueprints from being built.
  • Fixed smoke for generators without animation. more
  • Fixed train circuit conditions not working properly sometimes when arriving at disabled station. more
  • Fixed transparency of tables. more
  • Fixed reintroduction of blueprint train building problems. more
  • Fixed that the game could freeze on exit on Linux after clicking a link. more
  • Fixed statistics windows showing strange totals in some situations. more
  • Fixed statistics windows not showing the first few values (e.g. when an items is produced for the first time). more
  • Fixed that belt immunity equipment would drain energy in armor when not equipped. more
  • Using the NO_SCHEDULE train state more consistently (for train in automatic mode with empty schedule. more
  • Fixed inserters behaving differently when rotated. more
  • Fixed that the control key would be ignored by Factorio on Linux if the "Press Ctrl to highlight the pointer" (or equivalent) option was enabled. more
  • Fixed that cloning tiles in the map editor wouldn't always clone transitions correctly. more
  • Fixed that the supply mission finished game GUI was too small. more

Modding


  • Added optional assembling machine gui_title_key property.
  • Changed belt immunity equipment to consume energy through "energy_consumption" instead of "energy_source.drain".

Scripting


  • Added LuaGuiElement::vertical_centering read/write.
  • Added LuaEntity::auto_launch read/write.
  • Added LuaTransportLine::line_equals().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-30 15:19:08 CET ] [ Original post ]

Version 0.17.43 released

Changes


  • The argument to --generate-map-preview is treated as a directory only if it ends with a '/' or '\'.
  • Car/tank color keeps the color of the last user.

Bugfixes


  • Fixed that the technology GUI could freeze on certain technologies. more
  • Fixed a crash when trying to build train ghosts not on rails. more
  • Fixed a crash related to changing the logistic mode on an infinity-chest type entity through mods. more
  • Fixed low readability tag color highlighting in textboxes. more
  • Fixed Korean IME still did not work (Windows only). more
  • Fixed statistics graphs X axis labels showing wrong values for 250h and 1000h time frames. more
  • Fixed that the wrong entry could be highlighted in the electric network graph. more
  • Fixed that picking up an item from quickbar wouldn't reserve the slot with an inventory hand when the inventory was full. more
  • Fixed robot energy consumption when using very high speed bonuses. more
  • Fixed a false-positive changed message in the mods GUI under specific situations. more
  • Fixed icons inside blueprint book items not being scaled properly.
  • Fixed that delimit-procedure noise expressions at the root of an expression tree would crash the compiler.

Modding


  • Added util.combine_icons(icons1, icons2, inputs) function to aid in combining icons tables.
  • Changed the auto_barrel recipe icon generation to account for fluids with an icon_size not set to 32, or fluids with an icons table. more

Scripting


  • Added LuaNamedNoiseExpression and LuaGameScript::named_noise_expressions read.
  • Added LuaEntity::tree_stage_index read/write.
  • Added LuaEntity::tree_stage_index_max and tree_color_index_max read.
  • Added "player_index" to the on_rocket_launch_ordered and on_rocket_launched events.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-24 13:28:29 CET ] [ Original post ]

Friday Facts #296 - All kinds of bugs

Cars/Tanks remember their color


This really is a tiny feature, the car and tank will now save the color of the passengers when they exit the vehicle.
So now you won't forget which vehicle you were driving, and can warn everyone else on the server: "Pink tank is mine".

All kinds of bugs


As uninteresting as it is; most bugs are boring and typically involve missing code. Someone forgot to implement part of a new feature, forgot that some situation could happen, forgot to check for null. Rarely interesting things show up where everything is working but not how we want it to.

Performance: It's never what you think it is


Recently we had a bug report where a modded game would freeze for a minute for seemingly no reason and then continue like nothing went wrong. It being a heavily modded game my first reaction was to blame it on the mods doing something in a very unoptimized way. But I had to test it to figure out which mod was causing the problem. After reproducing it... I was reminded (again) that it's (almost) never what you think it is. When a train is driven by a player the game has no idea what direction the player will drive (straight, left, or right). So, as the train is moving the game goes over the potential rails in front of the train and asks every gate it finds to open in case the train ends up driving over them. This logic was very simple: get the rail distance it would take the train to stop at its current speed and "walk" down the rails until it exceeded that distance. As it walked, tell any gates on any of those rails to open. That logic is "correct" in that it does what it was supposed to do: open any gates that the train could drive over. What it wasn't accounting for was a rail system where everything looped back onto itself 5-10 times per junction.The time complexity for the algorithm it was using was O(N^2). That's "fine" when N is small. However, in this save file, with this rail network, and with these modded trains (with 2,500% speed bonus from modded fuel no less) it meant N ended up somewhere around 75,865. That - as it turns out - was slow.
Interestingly even though the algorithm was recursive it didn't stack overflow. The old algorithm was executing the "open gates on this rail" 5,755,573,057 times. Many of those requests to open gates where duplicates but the algorithm didn't care. In total it took 57 seconds for it to run all of the logic - still incredibly fast for what it was doing (1.6 million rails per game tick). After some thinking about it; I was able to re-implement the algorithm in worse-case O(N) time which ended up executing the "open gates on this rail" logic 42,913 times and took 0.009 seconds.

Crashing on dereferencing null? Add a null check


I love this phrase. It's both correct and incorrect at the same time. I put it right next to "Crashing from an exception? Just try-catch". It's such an easy trap to fall into: fixing a symptom instead of the cause. Earlier this week we got a bug report about the game freezing, consuming all of the available RAM, and then crashing when it ran out of RAM. It was again a modded save file so my first instinct was to blame it on a mod. Again, I had to test it. And again... it's never what you think it is. The crash was correct: it was running out of RAM and when that happens the game crashes and exits. But why?
  • The game failed to allocate memory when it tried to create a furnace smoke
  • Because it was trying to make 4'294'967'000~ (4 billion) smokes
  • Because a small negative signed integer was being converted to unsigned
Clearly the game wasn't supposed to be making 4 billion smokes. So, seeing the problem my first fix was "Casting a small negative signed integer to unsigned makes it 4 billion? If it's negative, I'll just return 0 since a negative amount of smoke makes no sense". I was about to commit this fix when the smarter part of my brain said "that makes no sense, why would this code ever say to make a negative amount of smoke?" So I kept going ... why?
  • ... Because the logic to make those signed integers was "(cycle progress ...) - (last cycle progress ...)" (cycle was < last cycle ... that should never be possible)
  • Because the furnace burner had made a negative amount of progress in burning the fuel (negative progress should not be possible)
  • Because the "remaining amount of fuel from this item to burn" was negative (negative fuel values are invalid and the game won't even reach the main menu if some mod tries to set one)
  • Because the mod API didn't prevent mods from doing: entity.burner.remaining_burning_fuel = -1 AND the game didn't properly clear "remaining amount of fuel from this item to burn" when the item being burnt was removed due to mod migration/removal.
So, I still repeat the phrase: "Crashing on dereferencing null? Just add a null check!" as a reminder to myself and others to always look deeper into why and never stop at the basic symptom of a problem. As always, let us know what you think on our forum.


[ 2019-05-24 10:07:50 CET ] [ Original post ]

Version 0.17.42 released

Changes


  • Tweaked default graphics settings. The game should choose better default graphics settings for computers with integrated GPUs or less than 6 GB of RAM.

Bugfixes


  • Fixed that GUI element size wasn't updated in inactive tabs when ui scaled changed. more
  • Fixed "Confirm Message" conflicting with some key-bindings. "Confirm Message" can no longer be bound to mouse input. more
  • Fixed possible crash when rendering GUI element with dynamically loaded sprite. more
  • Fixed recipe window showing wrong item count or not enough ingredients in some situations. more
  • Fixed a crash when deleting the force of a car with an active logistic network through vehicle equipment grid. more
  • Mod names are no longer allowed to contain rich text. more
  • Fixed IME (Input Method Editors) did not work (Windows only). more
  • Fixed placement of oil and uranium patches back to that of 0.17.40. more
  • Fixed that roboports with a request_to_open_door_timeout of 0 wouldn't work correctly. more
  • Fixed that products wouldn't allow amount_min of 0 for items. more
  • Fixed that migrated/removed fuel items could leave the game in an invalid state. more
  • Fixed a crash when building combat robots after resetting the achievements in-game. more
  • Fixed that assembler ghosts would carry over the unresearched blueprint bug from 0.17.38. more
  • Fixed crash related to clearing a blueprint book from the cursor. more
  • Fixed that the rotation of blueprint was not saved to the blueprint library in some situations.
  • Fixed bad icon in pollution statistics. more
  • Fixed hand icon not disappearing when you grab a blueprint from chat. more
  • Fixed that reviving modded tile ghost entities could destroy other entities in some situations. more
  • Fixed car tooltip showing it's moving when it's not actually moving.
  • Fixed car rotating in place when the speed is very low. more
  • Fixed that fluid wagons could not carry fluids with sub-zero temperatures. more
  • Fixed that rolling stock "must be build on rails" error was not using the name of the rolling stock. more
  • Possibly handled fullscreen window being moved to screen of different size on Windows. more
  • Fixed a crash when using table_size() without any argument. more
  • Fixed players getting a new player character when they connect after disconnecting, connecting and disconnecting again from a paused game. more

Modding


  • Added map-gen-seed-max command line parameter.
  • Added generate-map-preview-random command line parameter.
  • Changed generate-map-preview command line parameter to need PATH instead of PNGFILE, the file name is now always the seed.
  • Made "apply_recipe_tint" be applied also to "light" working visualization effects of crafting machines.
  • Added "use_fuel_glow_color" property to reactor prototype.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-21 16:09:28 CET ] [ Original post ]

Friday Facts #295 - New design for the chemical plant

Read this post on our website Hello, the bugfixing period boringly continues, we got down to 159 active bug reports, so in few weeks we should be finally down with this burden. But at least the graphics department has something new to show:

New design for the chemical plant


After some time working on the redesign of the chemical plant, we can finally show the results:
In the old version, we had the problem of not being very clear when the chemical plant was working or not. So apart from the style modernisation and high resolution, this redesign was aimed for solving this readability issue. As an addition, we tried also to be very clear at the time of viewing what kind of chemical recipe the plant is processing. Finally we came with the solution of adding a big window - pipe style - showing the moving liquids inside with the tinted color, and also adding a chimney releasing smoke when the plant is on. As you can see in the animation above, the smoke is also taking the tinted color of the processed chemical, so it should be crystal clear what its going on now with this entity. This tinted smoke is very experimental, and we need to make more testing before releasing it, the point is to avoid a too colorful pollution, but in terms of concept I find it 'very chemical' having colored smoke, which could fit perfectly with the subject. Here you can see the four rotations:
Factorio wouldnt be Factorio if the things would be easy as "rotate the model in 3D and done". Due to readability requirements, camera perspective, and interaction with any other entity in the game, we have to recompose the entity for every rotation. Thats why even rotating the entity 90 degrees the window remains at the front, and the chimney at the back. Basically every rotation is like a new entity that tries to look like its other rotations, but somehow rotated (!?). We truly believe that this new design is going to be a good improvement for the game. Slowly but steady, Factorio is getting to its 1.0 release. As always, let us know what you think on our forum.


[ 2019-05-17 18:44:55 CET ] [ Original post ]

Version 0.17.41 released

Bugfixes


  • Fixed that some noise expression types used by some mods (literal map positions, offset-points, and distance-from-nearest-point) were unimplemented.
  • Fixed that blueprint rotation was not saved for blueprint books in the blueprint library. more
  • Fixed that the focus-search shortcut could be used to bring up the search field when it was disabled. more
  • Fixed that game.reload_script() could break LuaRecipe/LuaPrototype references.
  • Fixed a PvP script error on configuration changed. more

Scripting


  • Added LuaEntityPrototype::item_slot_count read.
  • Added LuaEntity::get_stopped_train().
  • Added "surface_index" to the on_post_entity_died event.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-05-17 12:23:58 CET ] [ Original post ]

Version 0.17.40 released

Changes


  • Improved efficiency of noise program compilation and quality of error messages.

Bugfixes


  • Fixed a crash that would sometimes happen after deleting a blueprint from the library. more
  • Fixed crash related to train schedule containing only temporary stations. more
  • Fixed GUI inspector vertical align value inconsistency (middle instead of center). more
  • Fixed LuaInventory::sort_and_merge when used on cargo wagons with inventory limits set. more
  • Fixed that distractor robots would show in the bonus GUI under the follower robots section. more
  • Fixed that reading invalid chain signals wouldn't work correctly. more
  • Fixed yet another ghost connection error related to consistency checks. more
  • Fixed some cases of multi-layered icons not being scaled correctly. more
  • Fixed power switch connection consistency problem. more
  • Fixed "Confirm Message" key-binding not working when bound to some mouse buttons. more
  • Fixed backwards/forwards max speed fuel modifier related to two-headed trains. more
  • Fixed interactions of assemblers and underground pipe connections blocked by induced fluid mixing. more
  • Fixed setting entity ghosts to minable=false didn't work. more
  • Fixed that the statistics GUI would show count values < 0.5 as "no count". more
  • Fixed a performance problem with high speed idling trains on circular rail networks. more
  • Fixed signal placement visualisation for special cases related to straight diagonal rail. more
  • Fixed that items supposed to be removed on clearing cursor (copy, cut, paste, blueprints from blueprint library etc.) were put into character corpse. more
  • Fixed uranium cannon shells shooting backwards when aimed closed to the tank.more
  • Fixed Programmable Speaker alert textbox not losing focus when pressing ENTER. more
  • Fixed desync caused by setting font colors on buttons. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-16 16:00:47 CET ] [ Original post ]

Version 0.17.39 released

Bugfixes


  • Fixed that hand crafting wouldn't respect the hide_from_flow_statistics property. more
  • Fixed that modded GUI tables did not display borders that were set in their style.
  • Fixed the game would fail on startup if control settings were reset during migration of 0.16 config file. more
  • Fixed that train stop "must be build next to rails" error was not using the name of the train stop. more
  • Fixed that beam damage interval was sometimes not respected properly.
  • Fixed that beams would be immediately created and destroyed when standing very close to max range.
  • Fixed that beams would not show any animation if the target was killed in one hit. more
  • Fixed that laser beams would always aim at player character's feet.
  • Fixed entity hit_visualization_box not working properly.
  • Fixed running out of memory during sprite loading was not handled gracefully. more
  • Fixed a map corruption problem when creating games from scenarios that used difficulties per-entity. more
  • Fixed that some Lua errors wouldn't show proper lua stack traces. more
  • Fixed a crash related to reading pollution statistic values through Lua. more
  • Fixed a crash resulting from building a blueprint of an assembler with a fluid recipe that is not researched yet. more
  • Fixed that temporary blueprints (e.g. from the copy tool) would sometimes go to inventory instead of being destroyed. more
  • Added fluid mixing check to infinity pipe. more
  • Fixed that you could build rail ghosts in the basic rail tutorial. more
  • Fixed special case of dragging station/condition order in the train configure GUI. more
  • Fixed tightspot script error starting the round with flying text on the map. more

Changes


  • Changed the mods GUI so it lists mod settings by mod alphabetically using natural ordering.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-14 15:56:08 CET ] [ Original post ]

Friday Facts #294 - Blog thoughts Lua documentation improvements

Blog thoughts


As the time goes on, the nature of our weekly FFF post has changed. At the very beginning (FFF-1) it was to let people know that "we're still alive and working on the game", and over time we've grown into covering a range of different topics:
  • Communicating our progress and roadmap of the next releases.
  • Showing new features and gathering community feedback on them.
  • Diving into the technical side of game development and particular challenges we face.
  • 'Meta-posts' about the company and the changes outside of the game.
  • Community spotlights and interesting Factorio related news.
It is always an interesting challenge each week to determine what topics we might be able to cover in the FFF. During the weeks of rapid development the FFF can feel like a triumphant reveal of what we have been working on, and we excitedly await the community response. Other times, such as when most of the team is on bugfixing, we can take the oppourtunity to explore other points of discussion, such as the marketing post last week. The graph of the FFF readership over the last year is quite informative to look into:
We had a good run back in January and February, we had week after week of really interesting posts and a build-up of excitement for the 0.17 release. Now after the release, the readership has stabilized at around 40-45,000 views a week (note, that the graph does not include people reading the blog post through Steam). The FFF is close to its 300th post now, with no signs of stopping soon, and the continued audience of dedicated readers each week help to keep us on track and focused on our quest towards 1.0. As we get closer to completion of the game, the general nature of the blog post will no doubt change even further. The good times of showing a new feature each week might be over, but I hope we will be able to provide interesting insights into the game and our development processes. I would also like to thank all the players/readers who share their thoughts with us each week, it is really great to have so much support and care for our project.

Lua API documentation improvements


The Lua API documentation is one of the most valuable resources for modders: It is generated directly from the game's source code, so it completely covers all scripting functionalities. Furthermore, additional pages cover some general concepts such as in what order mod files are loaded or how to store persistent data. However, a big issue with these pages was that they were linked at the very bottom of the main page, below two long lists of classes and events. This means that they were very easy to miss. To remedy this, all additional pages are now linked at the top of the main page and accompanied by a short description of the structure of the API. To further support getting a quick overview, I added a page about general Lua libraries that Factorio changes. These changes could be frustrating traps where it would take users a very long time to find out that some functions, such as getting the current real time, were not available. The new main page organization should serve well to highlight this new page to make the discovery of these changes much easier. As always, let us know what you think on our forum.


[ 2019-05-10 16:52:18 CET ] [ Original post ]

Version 0.17.38 released

Changes


  • When a train performs path finding while in a chain signal sequence, the pathfinding will have a constraint to not go through reserved block before exiting the chain sequence. This solves a problem of train intersections being possible to be deadlocked even with proper chain signals usage in cases of using temporary stops or when path is changed because of station is being enabled/disabled by a circuit network. (more) This also allowed us to to let train recalculate path spontaneously even in chain signal sequence, as it shouldn't break anything now.
  • When a temporary blueprint(e.g. blueprint from copy) is placed in the quickbar, the blueprint won't be destroyed when clearing the cursor and instead moved to the inventory. more
  • Separated incompatible mods from dependencies in browse mods GUI.

Bugfixes


  • Fixed a crash when trying to build locomotives near water/edges of the map. more
  • Fixed players getting a new player character when they connect twice to a paused game. more
  • Fixed that entity tooltips did not show negative emissions. more
  • Fluid assembler ghosts now show correct pipe connections.
  • Fixed a crash when trying to write auto trash filters with not-a-table.
  • Fixed possible fluid mixing from reviving fluid assembler ghost by higher version. more
  • Disabled areas of new map GUI are set correctly on exchange string import. more
  • Fixed that script rendering sprites loaded from files would disappear on save/load. more
  • Fixed that LuaForce::reset_technology_effects() wouldn't preserve things in the research queue. more
  • Fixed that using an upgrade planner on a blueprint wouldn't upgrade configured modules. more
  • Fixed cross-platform issues related to the Lua bit library. more
  • Fixed crash when changing controller in multiplayer and changing your selection at the same time.
  • Fixed that blueprint shortcuts in action bar would become magically available when they are destroyed, if they originated from the blueprint library. more
  • Fixed that technology tooltips could sometimes end up behind the technology screen. more
  • Fixed that target leading would not take into account any slowdown modifiers on units. more
  • Fixed that the favorite button for servers wouldn't work correctly if the server was already selected. more
  • Fixed that rocket silos would show an unhelpful status in the tooltip. more
  • Fixed PvP crash when loading save games before "player" -> "character" rename. more
  • Fixed PvP crash when importing old configs. more
  • Fixed that only some parts of the current research info panel would open the technology tree when clicked. more

Scripting


  • Added LuaTechnology::visible_when_disabled read/write.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-05-10 14:47:57 CET ] [ Original post ]

Version 0.17.37 released

Bugfixes


  • Fixed acid splashes were blocking placement of buildings. more
  • Fixed that acid splashes would have a burning sound effect.
  • Fixed typo in font name that would cause crash in Cyrillic locales on Linux. more
  • Fixed that script changing train path as a reaction to train created event could break the rolling-stock connection process. more
  • Fixed that scroll panes empty areas of the mod GUI was blocking the mouse interaction with the map. more
  • Fixed that ghost rail building didn't avoid ghost buildings properly. more
  • All unused control inputs are saved in the config file, to preserve mod key bindings even when the mod is disabled and enabled again. more
  • Fixed that zooming in the train preview window didn't respect the zooming key binding settings. more
  • Fixed that train with no path changed from NO_PATH to PATH_LOST and back to NO_PATH every few seconds. more
  • Fixed that train waiting at the signal changed from WAIT_SIGNAL to ARRIVE_SIGNAL and back to WAIT_SIGNAL every few seconds. more
  • Fixed a crash that would sometimes happen when two players were connecting to a server at the same time and one of them quit before the map finished saving. more
  • Fixed a crash related to modded deconstruction item filters. more
  • Fixed performance issues in mipmap generation routines causing the game to freeze or crash at 95% of sprite loading. more
  • Fixed traditional Chinese font being used for simplified Chinese. more
  • Fixed that pollution would not be shown in entity tooltip when using a void energy source. more
  • Fixed PvP re-roll round button not generating a different map with only a single team.
  • Fixed PvP state when playing Last silo standing with only a single team.
  • Fixed PvP DEFCON mode interaction with research queue.
  • Fixed screenshot rendering could crash when using LuaScriptRendering API to draw a sprite from file. more

Modding


  • Added CraftingMachinePrototype::entity_info_icon_shift.
  • Added CraftingMachinePrototype::draw_entity_info_icon_background.

Scripting


  • Included "item" in on_built_entity event when ghost cursor building.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-07 16:40:49 CET ] [ Original post ]

Version 0.17.36 released

Graphics


  • Added new specific remnants for various entities. (Work in progress)

Bugfixes


  • Fixed that ghosts could be built in fog of war.
  • Fixed a stack overflow when merging large electric networks (149'000+ electric poles). more
  • Fixed some achievements not counting their requirements properly. more
  • Changed worm and spitter acid attack so they do not create acid splashes on water. more
  • Changed fonts for Asian languages (Chinese, Japanese, Korean).
  • Fixed that power switch connections weren't restored by undo. more

Modding


  • Added "check_buildability" to "create-fire" trigger effect definition.
  • Added "tile_collision_mask" to "create-entity" and "create-fire" trigger effect definitions as faster alternative to full buildability check.
  • Added "trigger_created_entity" to "create-fire" and "create-sticker" trigger effect definitions.

Scripting


  • Added "item" to the on_built_entity event.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-03 16:30:13 CET ] [ Original post ]

Friday Facts #293 - New remnants 2 1.0 Marketing plan

Read this post on our website.

More remnants


As for the conclusion of the topic opened in the FFF-288 we finally decided to go for a balanced solution in which the player can recognize what entity was destroyed and also walk through them. The solution of going up in the Z-axis is really attractive for designing the destroyed models, but it gives a lot of headaches to the game designers due its need of a bounding box. We are planning also a generic set of remnants for the modders who dont feel like making the destroyed version of their own machines. Here an example of how a factory can look after a biter attack:
These remnants are still a work in progress, many of them are not yet finished and we are planning more iterations with this subject. By now you'll find a sneak peek in today's release (0.17.36).

Marketing plan for 1.0


The 1.0 will be a one time opportunity to drive the sales of Factorio, and as with the steam release, we don't want to leave its potential untapped. I want to call myself a "Idealist Capitalist". This means, that I truly believe in capitalism as long as it is done in a fair way. I want to do as much as I can, to give good credit to capitalism by doing the right things myself. The famous quote of "Do unto others as you would have them do unto you" and also "No bullshit policy" is something we take very seriously all the time during the development since the early days. Things like pricing $30 instead of $29.99, no sales, no micro-transactions, game stability over features, no selling-out to big companies that would use the game as cash grab while destroying the brand (we actually declined to negotiate "investment opportunities" like this several times already, no matter what the price would be), the same would be when it would potentially come to any exclusivity deals, which is its own subject... We should also be true to this when it comes to marketing. In my eyes, there are good and bad aspects of marketing. What I truly hate is banners and forced ad-videos, or radio spots that are just screaming at me and trying to get into my head without my consent. The idea, that I would basically pay for the ad that annoys me by buying the product feels deeply humiliating. So you can understand, that I don't want to pay marketing companies to do this to others. On the other hand, there are a lot of marketing strategies that I'm okay with. I'm okay with media covering a commercial product, as long as I find it interesting. It is a very subjective definition, but it basically means, that it is not about pushing a product into your face, but offering you something that might give you some value even if you never buy that product. Articles about stories of companies, interviews with book/film/game creators are often very interesting, and piqued my interest in products many times before. There are a lot of interesting themes that could be covered about Factorio, its creation story, its mindset of automation and conscious self-observation of what is the biggest time-stealing thing, the programming/engineering parallels and stories of people who consider their carrier path because of it. It also has a potential appeal to the big crowd of gamers from the past, who think that games are just mindless shooters with lootboxes these days. This is the kind of content that I would be interested to read about the game if I didn't know about Factorio, and this would be the best advertising for us. So our goal would be to convince as many related media as we can to write about us when the time comes. I'm talking about the kind of media that covers content related to the themes that Factorio tickles. So anything related to games, technical stuff, engineering, software development, teaching, networking, business, etc. And here comes the moment where I'm turning to you. You could give us pointers, what kind of magazines do you read that could be suitable? Let us know. Do you know anyone related to a media outlet that could cover us? Let us know. Do you have other ideas of what could we do for the release that is still true to our principles? We would like to know. Another way is to make an interesting story that spreads itself, these are the examples:

Breaking all the mods


We released version 0.17.35 yesterday, and it included a change that broke a lot of mods: Renaming the entity 'player' to 'character'. Inside of the game engine, the previous naming scheme was a huge inconsistency, because the terms are generally well defined:
  • Player - The concept of the person controlling the game, doing input, playing the game.
  • Character - The 'real' little dude running around in the world.
A player can exist without a character, such as playing sandbox, and similarly a character (which is an entity) can exist with or without an attached player. Having the character entity named 'player' led to a massive amount of collective confusion over the years, especially in regards to which methods can be called on the LuaEntity and LuaPlayer objects at runtime. Another problem is in the naming of some 'defines' (constant values exposed for Lua scripting). If you want to access a characters main inventory, the value was called 'inventory.player_main'. This makes it sound like it gives the main inventory of the player, but no, it gives the main inventory of the character. If you are in sandbox mode, using 'inventory.player_main' will not give the correct inventory, you will need to use 'inventory.god_main'. Ok, so taking a step back, why are we making these breaking changes now? The short answer is that there is no better option for us:
  • Change it for 0.18 - This would mean waiting months and months to make the changes, and push any bugs it creates further down the line. In the meantime, another major version of Factorio modding will have these inconsistencies.
  • Change it after we have 0.17 stable - We want stable to also be stable for modders. If you write a mod that works with the stable version, you wouldn't expect it to break in another stable version.
  • You should have changed it for 0.17.0 - Well yes probably, that would have been more ideal, but that was several months ago now.
  • Change during 0.17 experimental - This is the option we have chosen, it breaks some mods in the short term, and discourages people from updating, but long term its consequences are small.
We might make some more mod breaking changes in upcoming experimental releases. We'd like to thank all the mod authors and experimental players for their understanding and patience as we work towards the full game. As always, let us know what you think on our forum.


[ 2019-05-03 16:25:29 CET ] [ Original post ]

Version 0.17.35 released

Changes


  • Increased the maximal length of station name to 1024, mainly to allow wider usage of multiple tags in the name. more

Bugfixes


  • Fixed that making blueprints of locomotive ghosts wouldn't include the schedules. more
  • Fixed that worms and spitters didn't show attack parameters in description.
  • Fixed that the game would crash if it was closed when Sound Settings was opened. more
  • Limited the manual rail building distance to 3 times the normal building distance.
  • Fixed dangling tooltip bug related to widget reorganization in map generator GUI and possibly other places. more
  • Fixed that the train time condition label wasn't properly set to squashable resulting in wrong layouting in certain languages. more
  • Fixed truncation of labels containing rich text. more
  • Fixed PvP and Wave defense starting base entities wouldn't spawn if a mod added a tile with a certain collision mask and a name which sorted alphabetically above dirt.
  • Fixed PvP production score error when a mod or script adds another force during a round.
  • Fixed PvP error when using DEFCON mode.
  • Fixed that the shortcut bar selection list wasn't scrollable until the window was resized. more
  • Making disabling of features in map generator more clear by adding checkboxes for it. more
  • The wagon door opening animation (that is only available for horizontal/vertical direction) is now chosen based on the drawing sprite of the wagon selected instead of the orientation of the wagon. This means, that orientations really close to horizontal/vertical still use the animation. more
  • Fixed that changing map size didn't mark the map preset as modified. more
  • Fixed label text not updating correctly when cleared and had non-zero minimal width and height. more
  • Improved handling of whitespace characters in technology count formula parsing.
  • Checking that only the l (or L) variable used in the technology formula on startup, to avoid errors later on. more
  • Fixed NPE error at startup that could occur when using mods. more
  • Fixed GUI window of an entity not updating when pasting settings to that entity. more
  • Fixed error in consistency check of ghost connections related to multiple connections to entities only in the undo queue. more
  • Fixed train condition fulfilling indication for artillery wagon. more
  • IDXGIOutput::FindClosestMatchingMode returning an error is not treated as critical failure anymore. more
  • Fixed that the Mods GUI go-to-dependency buttons wouldn't work in some scenarios. more
  • Fixed that ghost building mode works the same as ghost building (with shift) when it comes to rail building. more
  • Fixed that upgrading entities in would leave invalid module requests. more
  • Fixed, that sorting changes were moving the scrolled position in the browse game gui. It is now consistent with the mods gui. more
  • Fixed some achievements being given to players while the save game is loading, not respecting player online time. more
  • Fixed LuaTransportLine::output_line read for right-hand output lines of a lonely splitter. more
  • Fixes to make tabbed pane work properly when it comes to squashing in different situations. more
  • Tweaked the algorithm that is putting trains on rails to work properly in junctions when constrained by the direction caused by blueprint/ghost train building. more

Modding


  • Renamed the character entity type and name from "player" to "character" to make it consistent with how we call/access it in all other places.
  • Renamed the technology personal-roboport-equipment-2 to personal-roboport-mk2-equipment and gave it corresponding icon to be consistent with other technologies of this kind.
  • Renamed the technology power-armor-2 to power-armor-mk2 to be consistent with other technologies of this kind.
  • Added optional storage tank prototype property "scale_info_icons".
  • Added "manual_rail_building_reach_modifier" to the utility-constants.
  • MapGenPresets' advanced_settings.difficulty_settings.research_queue_setting now works. more

Scripting


  • Mod GUI root elements (top/left/center/goal) are now contained in scroll panes, so when there is not enough space, it will become scrollable instead of being cut off. With enough space, it looks the same as before, the only change is, that the mod GUI contents can now not expect to be squashed by the screen, as it will just make a scroll bar instead.
  • Added LuaCircuitNetwork::connected_circuit_count read.
  • Added LuaEntity::time_to_live read/write for highlight box entities.
  • Added LuaEntity::allow_dispatching_robots read/write.
  • Added LuaEntity::toggle_equipment_movement_bonus().
  • Added LuaEquipmentGrid::inhibit_movement_bonus read/write.
  • Added optional 'radius' to LuaSurface 'find_xyz' functions.
  • Added defines.inventory.editor_main, editor_guns, editor_ammo, editor_armor.
  • AutoplaceSpecification::control is always included in property tree, even for non-peak-based autoplace specifications. more
  • Fixed a save corruption problem when using LuaSurface::clone_area(). more
  • Renamed defines.inventory.player_main, player_guns, player_ammo, player_armor, player_vehicle and player_trash to defines.inventory.character_main, character_guns, character_ammo, character_armor, character_vehicle and character_trash.
  • Removed LuaStyle::title_top_padding, title_right_padding, title_bottom_padding and title_left_padding.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-05-02 14:40:03 CET ] [ Original post ]

Version 0.17.34 released

Changes


  • Improved fluid simulation threading. Decreases CPU usage. Threading available on all operating systems. Simulation performance should remain unchanged.

Bugfixes


  • Fixed a crash when importing blueprint strings with power switch wires.
  • Fixed fluid mixing for fixed recipe assemblers. more
  • Fixed "Not enough rails" message after successful track placement. more
  • Fixed a crash when destroying entities during the on_pre_ghost_deconstructed event. more
  • Fixed that trains with "logistics while moving" disabled would not deploy robots when switched into automatic mode while waiting at a station more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-04-26 15:09:37 CET ] [ Original post ]

Friday Facts #292 - Inching closer to stable

Read this post on our website

Inching closer to stable


The last 2 weeks have been less productive than we would like on the bug fixing front. The Easter festivities along with a wave of illness have dampened our efforts. We have still managed to push out 2 more experimental releases, and fixed a few desyncs. We encountered one specific desync in the mass MP stress test last weekend, caused by a characters inventory size changing (such as researching the toolbelt technology) while the player is respawning. The graph of crashes paints a similar story to how the office atmosphere feels. It is natural though, most of the major crashes affecting most players are resolved, so all that remains are the more difficult issues that only affect a handful of players. This means that each bug fix is less effective at reducing the overall crash count.
This last weekend, we had over 500 total crashes reported, which is a slight improvement over the prior weekend's ~650. One thing that makes our progress hard to evaluate is that we don't know how many people are actually playing experimental. Most people play through Steam, and so far we have found no way of determining how many people are opted-in to the 0.17 experimental through Steam. It could be that the game is more stable, or it could be that less people are playing. There are still over 250 open bug reports on our forum, so it seems it will be a few more weeks until the first stable 0.17. Some people have been asking when we will release the new GUI and GFX updates that we promised before 0.17 release. The plan is that after the first 0.17 stable version, some of the team will be moved from fixing bugs to working on features. At the point where we have a meaningful amount of new content ready (A few GUIs, some new GFX, etc.), we will release it as a new experimental 0.17 version. We plan to give some explanation and notice about these 'mini-content releases' in a FFF before they are each released.

Factorio massive multiplayer stress testing (Part 2)


As mentioned last week, we did a stress test of the Factorio multiplayer last Saturday. We didn't have any crashes, but the server was really struggling at around 300 players, kicking players when they got near that mark. We reached a maximum of 350 concurrent players. The stress testing is also a good way to find and fix desyncs, as the probability of a desync is about 100 times higher with this many players. We made some more tweaks and minor improvements and we plan to make the test again. Every week the stress tests are more stable and allow more and more players. This will probably be a weekly thing for a couple more weeks until we are happy with the stability and performance of multiplayer. So, tomorrow (Saturday 27th April) at around 8pm CEST we will be making another stress test. If you want to help out, join the server and play normally when the game starts. Details will be posted in the KatherineOfSky discord in the #mmo_stresstest channel. Or keep an eye out for the Steam announcement (event) notification. The server will probably become unstable or might require some restarts as we test, debug and trace things, so please bear with us.

Community spotlight


Just wow. https://youtu.be/7lVAFcDX4eM As always, let us know what you think on our forum.


[ 2019-04-26 14:00:03 CET ] [ Original post ]

Version 0.17.33 released

Changes


  • Added out of fuel alert icon to flamethrower turrets.
  • UI scale won't be synchronised over Steam Cloud anymore. more
  • Syncing startup settings with a server will automatically join the server on game restart. more

Bugfixes


  • Fixed yet another consistency bug related to ghost connections. more
  • Fixed crash related to changing force of entity marked for deconstruction/upgrade/in undo queue. more
  • Fixed a crash resulting from overlapping underground pipes. more
  • Fixed power grid overlay not showing correctly on map when changing surfaces. more
  • Fixed another instance of furnaces with fluid outputs not working correctly. more
  • Fixed multiplayer paused notification not being cleared when the client is dropped. more
  • Fixed accumulators showing discharge animation and empty icon at the same time. more
  • Fixed that the game would desync when changing forces of beams, fluid streams, projectiles, stickers, and fire flames.
  • Fixed player inventory income flying text would sometimes show incorrect total item count. more
  • Fixed switched technology levels in the console message when changing research. more
  • Fixed that the keyboard shortcuts for new blueprint/upgrade planner/deconstruction planner wouldn't work when the cut or copy tool was selected. more
  • Changed render layer of belts marked for deconstruction so they don't clip with other belts. more
  • Fixed attempt to rotate ore patches that are out of reach would create "Can't Reach" floating message. more
  • Fixed that generators would produce infinite pollution in some cases. (https://forums.factorio.com/69450) more
  • Fixed that generator tooltips did not show pollution. more
  • Fixed that LuaGameScript::tick_paused read was not of type boolean. more
  • Fixed that the map editor convert-save-to-scenario didn't work correctly in some cases. more
  • Fixed that the map editor intensity slider number fields wouldn't accept numbers outside the slider range. more
  • Fixed that the deconstruction planner "tiles only" mode would ignore tile ghosts. more
  • Fixed that exporting blueprint strings wouldn't include pending icon changes. more
  • Fixed that cloning rocket silos with rockets waiting to launch wouldn't auto-launch correctly. more
  • Fixed that cloning single entities with wire connections to themselves didn't work correctly. more
  • Fixed a desync related to rail item names. more
  • Map generator GUI now remembers the last preset used.
  • Fixed an older bug with pull-placement of power poles. more
  • Fixed copying files to temp folder would preserve read only permissions, which could cause errors. more


    [ 2019-04-24 17:25:17 CET ] [ Original post ]

Friday Facts #291 - New Campaign, MP stress testing, HR Icons II

Read this post on our website.

New Campaign


Have you ever been playing a Freeplay game and realised you don't know what your next big goal is? And then, once you decide to pick a new goal, you realise while you worked on automating the last goal, there were 10 new technologies unlocked and now you don't know which to pick next.
These are the situations we hope to address with the new full Campaign. A guided Freeplay, in which the player plays through the whole tech tree, without being overloaded with choice, while still having the perminance and unidirectional progression of Factorio. The perminance problem has already been solved using the new map expansion technique which is playable in the Introduction scenario. Over the last year we have been working on the bigger design task of unravelling the tech tree and breaking it into a set of choices for the player. This task has been made all the more Interesting as the tech tree is also constantly getting tweaks and revisions over that time as well. I look forward to providing more insights but for now I will leave you with one example (read: spoiler):
Just to note, we won't be changing the freeplay tech tree, which will still have all the choice and diverging paths as it does now.

Factorio massive multiplayer stress testing


A few days ago I was contacted by Caledorn from the KatherineOfSky community. They were doing some tests to see if they can host a massive multiplayer event. I joined forces with him and started looking into the new and old problems we can fix in Factorio so we can host a large number of players. The last test was on Sunday. We had around 80-140 players playing without too many issues. But it was still a small test compared to our previous record of 400 players back in 2016.
Among some small tweaks, I added the ability to set a maximum number of map upload slots for the server. This should help tremendously for events such as these, where the map can get quite large, and there would often be a large flood of players joining, usually after a disconnect or server restart. This would cause a massive flood of map request packets coming to the server and very slow map uploads caused by uploading to way too many players. Now, when many players will try to join at the same time, they will pe placed in a queue and the game will wait for an upload slot to open up. Another small annoyance in these events (or even small multiplayer games) is the constant annoying blinking of the "Server not responding"/"Player is being dropped from the game". I made some tweaks that should show this message less often. We also found a memory leak in input action handling, which Rseding has fixed. There are still some technical problems to investigate and fix, so tomorrow (Saturday 20th April) at around 8pm CEST we will be making another stress test. If you want to help out, join the server and play normally when the game starts. Details will be posted in the KatherineOfSky discord. If we need more players, a Steam announcement (event) notification will be sent out, so keep an eye out for that also. The server will probably become unstable or might require some restarts as we test, debug, and backtrace things, so please bear with us.

High-res Icons part II


Last week I opened the subject of the high resolution icons FFF-290, more focused on the unisize method: re-scaling a single 64px bitmap to any size through trilinear interpolation. The results were very fine, and compared to the old version it was obviously a success. This week we are focused on the mipmap method. Posila very quickly implemented the code for it, and even though I was willing to reject the technique due its extra work and complications, after testing it I changed my mind. Here a comparison with all the methods:
On the first glance the difference between unisize and mipmap is almost not noticeable, but when we surpass the boundary of zoom level 1.000, the mipmap starts to react a bit better. I was worried about the amount of work implied about the creation of the 4 levels for each icon, but after preparing a few of them, I saw that it wasnt that much. Not to mention that having control over 4 different sizes is a big relief, especially the 16px and 8px versions. The best part of the plan is that we can combine both methods, so we can make mipmaps only for the icons that require special attention, it is just about the Lua definition of the item. Now, just for the joy of it, Id like to show a sneak peak of what HR icons means for the GUI.
GUI at 100% scale
GUI at 200% scale I hope this new contrast and definition results in a better experience for the player. As always, let us know what you think on our forum.


[ 2019-04-19 12:19:18 CET ] [ Original post ]

Version 0.17.32 released

Changes


  • Admins ignore multiplayer map upload slot limit
  • "Player is being dropped"/"Server not responding" messages will only show after 2 seconds, to avoid irrelevant short pop-ups.

Bugfixes


  • Fixed that the server-settings.example.json had an additional comma at the end of the file. more
  • Filled in a missing fluid mixing check for miner. more
  • Fixed that create-blueprint-item shortcut prototypes could have no item_to_create set. more
  • Fixed upload slot queue blocking players from joining even if not all slots were filled.
  • Fixed a desync from rotation of an assembler with fluid energy source. more
  • Fixed a connection consistency problems of wire/circuit connections ghosts and undo. more
  • Added a no-crop requirement to the wire sprite definitions to avoid mods removing it, which can confuse the drawing logic. more
  • Fixed text boxes would not respect keyboard layout for shortcuts like copy or paste. more
  • Fixed blocking of game shortcuts when a text box has focus did not take into account keyboard layout settings. more
  • Fixed the game would not respect remapping of modifier keys (Ctrl, Shift, Alt) in operating system. more
  • Fixed it wasn't possible to bind mouse buttons 6 to 9. more
  • It is no more possible to teleport an entity into fluid mixing. more
  • Fixed a crash when defining a programmable speaker with no instruments. more
  • Sync-mods-with-save will no longer offer to load-save when attempting to sync while hosting a multiplayer game. more
  • Fixed that negative health regeneration wouldn't work when the entity had full health. more
  • Fixed a crash related to migrating game versions while having gates marked for deconstruction with ghost walls built over them. more

Modding


  • For performance reasons inserter pickup/dropoff vectors are now limited to half a chunk or less.

Scripting


  • Added LuaEntityPrototype::lab_inputs read.
  • Added LuaEntityPrototype::researching_speed read.
  • Added LuaGameScript::pollution_statistics read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-04-18 11:54:05 CET ] [ Original post ]

Friday Facts #290 - Rail building changes High-res icons

Read this post on our website

Rail building changes


The problem with rail building is that it has too many states. It depends whether you start building the rail with shift, to use the ghost mode or not, and then it also matters whether you still hold shift, to ignore trees or not. Moving from manual building to ghost rail building means cancelling the whole rail building and starting it again with the correct modifier. The problems were reaching the surface from time to time, and Twinsen even drew a nice little state diagram of the rail building system.
It kind of peaked with this bug report. After some time, it became clear that we should simplify it. This is a nice example, where we can talk about change we just released (0.17.29) in a FFF. From now on, instead of 3 modes (building manually, ghost building, ghost building + tree/rock removal), we have only 2 modes, where the ghost building without obstacle deconstruction is not available anymore. So it doesn't matter anymore how you start the building, it just matters whether you are holding shift or not at the moment, which makes it consistent with the normal entity building and the ghost icon.
Once the topic is opened, it is hard to leave it so easily, so we agreed that the rail building could be streamlined even more. The current model is, that you have to build one straight piece of rail first, and then you can use the rail builder on the edge of that rail. It is annoying generally, and especially for the new players, because he might miss the way how it is being used, as the straight rails are built exactly the same way as other entities. The reason we did it this way was mainly, because when we first introduced the (new at that time) rail builder, we weren't confident enough that it could replace even the basic straight rail building. But since the rail building is stable enough, we might go one more step forward. The plan is that the rail won't be used to build straight rails normally the way you can now. The rail item would be always used to build by the rail planner only. Instead of having to snap to an existing rail, you could just start building anywhere on the ground. Instead of showing the rail preview when holding the item, you would see the arrow as when starting the rail building, and you could rotate it with the R key. It would make sense, to make the arrow color/size different for starting a rail planner on the ground versus snapping to an existing rail, but other than that, it would be the same.

High-res icons


Until now with the old GUI non-scalable system, we hadn't had much of a problem with the icons. We use one single version of 32px to display in the GUI slots, and the zooming system of the game takes care of the re-scaling for the rendering in the world. This is not a perfect solution because we use the same set of icons in the GUI and in the world. That means that the zooming level of the game can re-scale them up to 25% so we lose pretty much all control of the bitmaps, and the readability of them is affected. Now with the high resolution possibilities of the new GUI system, we need to double the size of the bitmap, therefore the original icons must be 64px in order to have a correct visualization at 200% GUI scale. We are still using them in the world, so the engine can rescale them up to 9.55%. The amount of out of control pixels is now much more serious. Unisize vs Mipmap We are exploring some possibilities and we want to keep it simple. For now we are testing the limits of our old technique: one single bitmap for all the uses. https://cdn.factorio.com/assets/img/blog/fff-290-zooming.webm Delight yourself with this test icon placed on the belt. 64x64px size, every square is 8px. With it you can see how extreme the resizing can become: From maximum zoom level 3.053 = 76.325% icon size. To minimum zoom level 0.382 = 9.55% icon size. To solve the problem for making it work in all the situations we design the icons in a very synthetic way. We simplify the shape to its purest meaning like the case of the assembling machines, where 1 gear + the color indicates level 1, 2 gears means level 2, etc.
This solution works but we have a lot of icons (~355), and many of them are very complex in their shape and/or meaning. In some cases this complexity is essential at the time of designing the icon -especially the entities- so we need to find the proper synthesis for each icon as we did with the assembling machines. They work fine at any zoom level, even at 128px. But with other entities, like the big electric pole, it's more complicated to keep this level of minimalism due to the fact that the shape itself is already complicated in its essence. If we make it less complex, we wouldn't be able to recognize it anymore.
A possible solution would be using a very minimalistic flat icon, but this wouldnt be integrated as an object in the world. We dont like that. The other solution is using mipmaps. So we use different versions of the same icon optimized for different zoom levels. We would notice the change of version at certain zoom levels, and for solving it we must complicate the situation. This complication would be not just for the code to create some crazy crossfading effect, but also for the designers to keep the several versions of the icon close enough as to not feel the change. I would try to be pragmatic and I bet for the unisize solution based in a proper synthesis, but its not going to be easy for sure, like the entire history of Factorio development. As always, let us know what you think on our forum.


[ 2019-04-12 17:57:54 CET ] [ Original post ]

Version 0.17.30 + 0.17.31 released

Minor Features


  • Added ability to set a maximum number of map upload slots for multiplayer servers. Setting this is recommended to prevent the server from being flooded with map fragment requests from clients.

Optimisations


  • Optimized alt-mode icon background rendering. more

Bugfixes


  • Fixed that cut tool marked trees/rocks/cliffs for deconstruction when there was other valid entity in the selection. more
  • Fixed that movement by keys or clicking on an alert didn't unsnap the currently followed train in the map. more more
  • Fixed that the game would crash when showing blueprint library tooltips. more
  • Fixed that the game would crash when showing a blueprint library tooltip in multiplayer when the blueprint/book was removed by another player.
  • Fixed alt-mode icon background for narrow icons was very subtle. more
  • (0.17.31) Fixed a crash when hosting multiplayer games in some scenarios.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-04-12 17:10:33 CET ] [ Original post ]

Version 0.17.29 released

Changes


  • Simplified rail building. Holding shift while rail building always activates the combination of ghost-rail-building + remove-obstacles, releasing shift returns back to normal manual mode. It doesn't matter anymore, whether the rail building started with shift or not. This removed the possibility to do ghost-rail-building without the remove-obstacles, but since it seems to be almost useless, we consider it to be worth the simplification.
  • font/color rich text tags now have to be properly terminated. This means eg: "[color=red]Red circuits" will now need to be "[color=red]Red circuits[/color]". This fixes a number of issues with handling start/end tags. more even more
  • Enter key will be shown as "ENTER" instead of "RETURN" on Windows and Linux. more

Minor Features


  • Added a shortcut for increasing/decreasing/resetting UI scale, mainly for debugging of proper automatic adjustment of UI, but people might find it useful for something as well.

Bugfixes


  • After a realization of a big misleading mistake, the pollution per second had to be renamed to pollution per minute, because it is what it actually is. more
  • Fixed that tree pollution absorption was recorded as pollution emission in the statistics.
  • Fixed that equipment electric network priority migration wasn't present. more
  • Crafting group selection by typing exact recipe match will now preserve the same way as selecting the crafting group manually. more
  • Fixed few layouting issues in the mods GUI. more
  • Fixed that sticker duration could be 0. more
  • Restored previous behavior where normal (not only underground) pipe connections reconnected when a fluidbox got removed. more
  • Fixed crash when robots try to revive locomotive that has both front and back wheels on rails, but no rail in-between. more
  • Fixed that repair packs could be lost if they didn't fit in your inventory when using personal robots. more
  • Added missing pipe connection arrows to flamethrower turret. more
  • Fixed that custom GUI style values specified directly on the elements weren't updated after UI scale change. more
  • Fixed that the electric network GUI would sometimes be opened when starting deconstruction planner selection on an electric pole in the map view. more
  • Fixed that Textfield and Sliders didn't update its size properly on UI change.
  • Fixed UI change update in ModSettingsGui and MapGeneratorGui with preview open.
  • Fixed quickbar selection disappearing when cursor stack is refreshed with a new stack. more
  • Fixed that nested frame styles (horizontal flow, vertical flow, header filler flow, filler) weren't initialized/updated correctly in the GUI created by script.
  • Fixed that the loading indicator in the browse games GUI was left of the "Back" button. more
  • Fixed turret prototype definition allowed ammo_type of attack_parameters to be optional resulting in crash when the turret started to shoot.
  • Don't consider recipes with 0 minimum amount (and possible randomised result) when resolving automatic crafting of ingredients when crafting manually. more

Scripting


  • Changed the LabelStyle::want_ellipsis default value to true and it is never changed to be something else now. We are considering to even remove this style property completely, as we basically want the ellipsis always when the label is squashed.
  • Added tile parameter to on_player_built_tile and on_robot_built_tile.
  • Removed unused on_player_tool_inventory_changed event.

Modding


  • Added emissions_per_minute property in the energy source, that is supposed to replace the emissions_per_second_per_watt which was basically wrong and hard to work with, both emissions_per_second_per_watt emissions definition will work for some time (at least in 0.17) so mods don't get broken.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-04-12 12:36:49 CET ] [ Original post ]

Version 0.17.28 released

Bugfixes


  • Fixed a crash when hovering over some inventory-like GUI elements.

Includes version 0.17.27


Bugfixes


  • Fixed that pollution statistic values from entities were reversed and didn't increase evolution. more
  • Fixed a crash when mods would set special_signal = true for virtual-signal prototypes.
  • Fixed a crash when a mining drill is destroyed during the resource-depleted event.
  • Fixed a crash when loading modded saves related to recipe migrations and fluidboxes.
  • Fixed a desync related to the blueprint library and keeping outdated blueprints between versions.
  • Fixed crash when undoing manual removal of entity marked for deconstruction. more
  • Fixed that the technology GUI would show 100% researched for near-100% values. more
  • Fixed crash when calling LuaGameScript::take_technology_screenshot for force that doesn't have any technologies enabled.
  • Fixed that action bar link to blueprint in the inventory had tooltip size limited too much. more
  • Fixed that blueprint cost table width wasn't correct for UI scale different than 100%.

Scripting


  • Added surface_index to the on_robot_mined_tile event.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-04-09 19:20:32 CET ] [ Original post ]

Version 0.17.26 released

Changes


  • Reverted fonts used for Chinese, Japanese, Korean and Russian localizations to pre-0.17.24 versions.

Bugfixes


  • Fixed that circuit connection from ghost to entity wasn't preserved when it was upgraded or undone. more
  • Fixed that it was possible to rotate entities whilst the technology GUI was open. more
  • Fixed that the updates-available counter in the update-mods tab didn't update as mods would be updated. more
  • Fixed that LuaSurface::get_closest() did not check the type of the second parameter. more
  • Fixed that LuaEntity::revive() raise_revive parameter sometimes did not work. more
  • Fixed that script render objects sometimes did not render in screenshots.
  • Fixed a crash when rendering inserter interactions for modded furnace recipes without item ingredients.
  • Fixed research queue and technology tooltip for long technology names. more
  • Fixed sprites would render as corrupted on some GPUs with texture streaming enabled. more
  • Fixed layouting of filters of deconstruction planner in a tooltip. more
  • Fixed that the rocket silo alt-info module icons didn't render in the correct location due to the size changes. more
  • Fixed several inconsistencies with the map editor paused state in multiplayer. more
  • Fixed schedule merging when more than one step of connecting train is done and part with the empty schedule is connected first. more
  • Fixed pollution reporting of machines with negative pollution when there is not enough pollution to absorb. more
  • Fixed that building a new rail through robots changed all rail-bound train stops to that station. more
  • Fixed a crash when departing from temporary stations while all other stations in the schedule are invalid. more
  • Fixed that setting a character controller for an offline player would crash the game. more
  • Fixed trains overview GUI updating and performance problems. more
  • Fixed that long server names were overflowing in the Browse games GUI. more

Scripting


  • Added LuaAutoplaceControlPrototype::category read.
  • Added LuaEntityPrototype::alert_icon_shift read.
  • Added LuaForce::research_queue read/write.
  • Added LuaForce::add_research() and cancel_current_research().
  • Removed LuaForce::current_research write.
  • Changed cutscene waypoints to allow all entities as targets.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-04-08 18:31:16 CET ] [ Original post ]

Friday Facts #289 - Character GUI

Read the blog on our website Hello, we are still focusing most of our resources towards fixing as many bugs as possible so we have stable release in reasonable time. In the meantime, the preparation for the continuation of the work on the GUI rewrite is still happening:

Character GUI mockup


The character screen is one of the most used GUI screens in the game, so we need to really try to do it right. We are moving towards the final version of the mockup, so we can start implementing it soon.

Crafting tab



Left frame
  • (1) Inventory: We just translated the previous okay mechanics to the new style so we dont add nor remove any important function.
  • (2) Slots: Those are darker now in order to improve the contrast and readability of the icons.
Right frame
  • (3) Panel tabs: The regular system of tabs takes quite some extra space, so in order to keep a compact design we decided to use a new system for tabs attached to the panel itself. This is a measure we take due to the importance of this player window compared to some other panels. When a tab is selected it looks like a title for the panel frame and the inactive ones are like regular tabs.
  • (4) Search button: After iterating with the design of the new GUI we realised that our actual solution for the search bar is not efficient enough. Our problem was that we were placing it as a tool button in a subheader, so many times we had the situation of placing a subheader in a frame just for the search bar, no tools. This solution takes a lot of space and also can be conflicting with the space for other tools. So we decided to have the search as a panel function attached to the panel and opening it in a floating small window that can be placed anywhere in the layout, certainly very handy.
  • (5) Info button: This function opens an overlay with relevant information about the usage of the panel. This is a new feature and we will probably speak with more detail in future posts.
  • (6) Close button: You will still closing the panel with escape, no worries, but we need a graphical clue for the newcomer to learn how to close a panel. Those buttons will have tooltips explaining shortcuts and relevant information.
  • (7) Category tabs: The classic version uses buttons, For a better readability we find more proper using tabs. With a situation of a heavy modded game we will divide the space for the tabs by the number of categories, so we can have as maximum 8 tabs. For more than 8 tabs, we will add new rows below, and we will change the tabs system for the classic buttons solution increasing also the height of the panel until reaching some generous max height, after this we will be forced to use a scroll. But this solution should be very extreme.
  • (8) Virtual slots: The classic GUI version uses slots for everything, even for crafting buttons. We decided to go deeper on this concept and weve created different kinds of slots. Regular slots are used for real items. Things that the player has in the inventory. Virtual slots are referring to the idea of an item. And they should look like a button: like a crafting button. You must be used to them already in the 0.17 series with the action bar.
  • (9) Rubber grid: This tileset gives us the idea of dynamic content, and saves the balance in the composition.

Logistics tab


Feature wise, most of the changes are in this tab. In the current version, there are logistic requests and trash slots presented as two separate tabs:
As you most probably know, the requests are specifying how much to deliver from the logistic network, while the auto trash is used to specify what is the maximum before items are moved to trash slots and taken away back to the network. There are several problems with this:
  • Its possible to request more than you have set in the auto-trash, leading to a infinite loop.
  • It is cumbersome to align the values when I want to have the maximum and minimum counts the same.
  • The player doesn't see it all in one place
  • Auto trash has infinite slots, the requests do not.
This is how the current mockup looks:
These two tabs were merged into one (1). Every slot can specify minimum (the request), maximum or any combination. The amount of slots is infinite.This means, that the slot have 6 basic variants:
  • (2) Requested amount is the same as maximum amount: Just the number of the request is shown.
  • (5) Requested amount is specified and maximum (bigger) amount is specified as well: We show the numbers in a column following the order of min/max.
  • (6) Requested amount is specified, maximum amount is not limited: Similar as (5), just showing the infinite symbol for maximum.
  • (7) Item is not requested (request amount is 0) and maximum amount is specified: We need to show 0 for the request, to differentiate it from (2)
  • (8) Item is not requested and maximum amount is 0: When you don't want the item to be ever in your inventory, in this case, we just show no number, same as it is in the auto trash slots now.
But this is not everything, there is one little feature in current version, where you can hover a logistic slots, and see how many robots are on the way, and how many is available in the logistic network. This is very handy thing, but not really practical to use:
So what we will have is, that the slots themselves will have color styles depending on the state.
  • (2) All the items are delivered: The default style.
  • (3) items are on the way: Yellow button style (color can change).
  • (4) Items not available: Red button style, no items are on the way, and there is not enough items in the network to satisfy the order at this moment.
  • There could be one more color for when robots are on the way, but there isn't enough in the logistic network, as when you request something that is just being slowly produced, you will have always one robot coming with the freshly created product, but it would take a long time until there is produced enough. But we need to consider whether it is worth to do it or not.
I imagine this to be useful when I come back to the base to let the logistic robots "refill" my inventory, I can just open the logistic tab, and see how the yellow slots are becoming default color, or easily spot what is missing. I already know in advance, that this is the kind of little feature that I will not understand how could I play without it. The logistic request slot is kind of an extreme, as we need to show different kinds of information on top of each other (the icon, the slot type, and the request/trash combination type, and I hope that won't look too chaotic to new players.

Character tab



These are basically the leftovers of what the character might need to access/configure. The important thing is the weapons slots being here, which solves the problem of not being sure what shift-click is going to do. Now, when you have logistics tabs opened, shift-click moves to trash slots, and when you have the character tab opened, it moves it to weapons/armor.

Factorio at EGX Rezzed


A small part of the team is at EGX Rezzed this week. If you are attending, be sure to find them in the Indie Basement and pick up some free pins.
From left to right: Wheybags, Abregado, Klonan, Twinsen, Dominik. As always, let us know what you think on our forum.


[ 2019-04-05 19:17:02 CET ] [ Original post ]

Version 0.17.25 released

Changes


  • The Mods GUI will now always include a link to the mod portal for the selected mod.

Bugfixes


  • Fixed roboport area rendering for players. more
  • Fixed a crash when trying to print invalid values through the Lua API. more
  • Fixed that the rail world preset didn't allow to get some achievements due to smaller base size. more
  • Fixed that the technology GUI technology cost wouldn't show numbers > 2^32 correctly. more
  • Fixed that custom checkboxes didn't render correctly in some cases. more
  • Fixed opening nested items in items so the same item isn't opened multiple times. more
  • Fixed a crash when trying to filter standalone character ammo slots. more
  • Disallowed building train stops in intersections.
  • Fixed that cloning fluid turrets with fluid would crash the game.
  • Fixed that cloning transport belts could crash when cloning fails.
  • Fixed personal roboport would render its construction area even when toggled off. more
  • Fixed train stop names were rendered without rotation. more
  • Fixed Russian and several other localizations would not show symbols , , in train conditions and decider combinators. more
  • Fixed Chinese and Japanese text was too small to read. more
  • Fixed that deleting mods would follow symlinks instead of just removing the symlink. more
  • Fixed that mining drill can't-build messages would be wrong in some cases. more
  • Fixed that the game finished GUI would not show the time played if there were no kills.
  • Fixed building underground pipes over ghosts could crash/corrupt the game. more
  • Fixed that the shortcut selection list wouldn't use a scroll bar if the shortcuts didn't fit on the screen. more

Modding


  • Recipes with duplicate ingredients or products will now error at startup instead breaking crafting runtime. more

Scripting


  • Added surface_index to the on_robot_built_tile event.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-04-04 19:07:13 CET ] [ Original post ]

Version 0.17.24 released

Balancing


  • Changed god controller inventory size to be the same as the character inventory size.

Bugfixes


  • Fixed rendering of targeting range visualization for turrets with limited turn range. more
  • Fixed parameters passed to LuaPlayer::zoom_to_world didn't have any effect. more
  • Fixed that power poles would sometimes build automatically when they shouldn't. more
  • Fixed that editing map gen settings for the non-default surface using the map editor didn't work. more
  • Fixed that LuaSurface::spill_item_stack would ignore belts by default. more
  • Fixed that LuaEntity::set_request_slot() wouldn't allow filters with a count of 0. more
  • Fixed that copying assembler settings would copy direction as well. more
  • Fixed that automation and logistics technologies were marked as upgrades.
  • Fixed that non-upgrade technologies didn't show the level properly. more
  • Fixed default key bindings for in-game copy, paste and undo shortcuts on Russian keyboard layout. more
  • Fixed that remote.call() with small strings didn't work correctly. more
  • Fixed lamp lighting up for 1 tick without any electricity. more
  • Fixed that the next infinite research level wouldn't appear in the technology list after the previous level was queued. more
  • Fixed a crash when changing modded recipes that used fluid inputs or outputs. more
  • Fixed lamp showing full electricity bar without any electricity. more
  • Fixed that large sequential lua tables wouldn't be saved and loaded correctly. more
  • Fixed poor performance when rendering logistic network overlays. more
  • Fixed that the shortcut for opening the console could be also entered into it (does not fix dead keys).
  • Fixed Scroll Lock would trigger an event on both key down and key up. more
  • Fixed trains stop names with icons in them would look wrong when pinging a train station in chat. more
  • Fixed that crafting machines could not be rotated if they used a heat energy source and didn't have fluid boxes. more
  • Fixed inventory hand sometimes pushing items out of the inventory and spilling them on the ground. more
  • Fixed that some languages had no name, and that some used their English name, and some the name in the language itself. more
  • Fixed incorrect scaling of cyrillic characters when viewing them with your language set to English.
  • Fixed two crashes from migration of modded fluid using entities. more
  • Fixed that clicking a technology in the research queue would select the next available level instead of the queued level. more

Scripting


  • Added LuaEntity::get_max_transport_line_index().
  • Added LuaPlayer::last_online read.
  • Added allow_belt parameter to LuaSurface::spill_item_stack.
  • Added corpses parameter to on_post_entity_died.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-04-02 19:40:53 CET ] [ Original post ]

Version 0.17.23 released

Bugfixes


  • Fixed that merging two electric networks didn't merge the statistics which was introduced by the power switch addition in 0.13. more
  • Fixed light not turning off properly when using fluid energy source on an entity. more
  • Fixed a crash when building large electric poles. more

Modding


  • The game now checks that technology levels are contiguous.
  • Non-upgrade technologies are now considered to be level 1; previously they were level 0.
  • Renamed "electric-energy-accumulators-1" to "electric-energy-accumulators".
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-29 17:01:49 CET ] [ Original post ]

Friday Facts #288 - New remnants, More bugs

Removing RTL language translations


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: https://youtu.be/LXnyTZBmfXM

New remnants for almost everything


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. Thats 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 wouldnt 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 were 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 lets use it. Well, remember that the player can walk through it and the remnants don't have collision boxes. Its 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.


[ 2019-03-29 15:36:09 CET ] [ Original post ]

Version 0.17.22 released

Bugfixes


  • Fixed vertical squashing of listbox. more
  • Fixed in-game updater would not work on Windows if Factorio path or write data path would contain non-ASCII characters. more
  • Undoing action of building entity that removed ghosts also restores the ghosts. The same with removal of ghosts by cancelling deconstruction. more
  • Fixed that building power poles when moving very fast did not have consistent spacing. more
  • Fixed undo of train deconstruction. more
  • 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

Scripting


  • Added LuaEntityPrototype::secondary_collision_box read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-29 12:52:00 CET ] [ Original post ]

Version 0.17.21 released

Bugfixes


  • Fixed gates sometimes not closing when next to cliffs. more
  • Fixed crashes related to GUI tables. more
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-03-26 20:55:48 CET ] [ Original post ]

Version 0.17.20 released

Changes


  • Removed RTL language translations (Hebrew, Arabic). more

Bugfixes


  • Fixed crash when opening technology tree.
  • Fixed blueprint loading related to trains and temporary stations. more
  • Fixed that the quick bar and shortcut bar weren't aligned on UI scales other than 100% and 200%, making the game literally unplayable. more
  • Fixed fuzzy search in the select-a-filter GUI could show empty groups. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-26 16:56:29 CET ] [ Original post ]

Version 0.17.19 released

Bugfixes


  • Fixed various layouting problems related to tables.
  • Fixed upgrading underground belt ghosts would not recalculate underground connections resulting in desyncs. more
  • Fixed construction robot tutorial when spamming ghost radars. more
  • Fixed that some entities didn't show the not enough power icon. more
  • Fixed possible crash when editing font names in rich text. more
  • Fix of previous fix of certain situations of assembler settings copy/paste. more
  • Fixed that toolbar buttons stayed pressed down. more
  • Fixed crash when an inventory gui was shown with 0 slots. more

Scripting


  • Added LuaGuiElement::scroll_to_top(), scroll_to_bottom(), scroll_to_left() and scroll_to_right().
  • Added LuaGuiElement::scroll_to_element().
  • Added LuaEntityPrototype::has_belt_immunity, pollution_to_join_attack, min_pursue_time, max_pursue_distance, radar_range, move_while_shooting, can_open_gates, affected_by_tiles, distraction_cooldown and spawning_time_modifier read.
  • Added LuaEntityPrototype::inserter_extension_speed and inserter_rotation_speed read.
  • Added LuaTransportLine::input_lines read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-26 14:57:20 CET ] [ Original post ]

Version 0.17.18 released

Changes


  • Dragging power poles over ghosts of the same type will revive them. more
  • Replaced the hand graphic in the quickbar with a selected graphic, so blueprint books are visible.

Bugfixes


  • Solved train positioning when being built by robots. more
  • Fixed that playing Factorio in full-screen mode on macOS would hide all notifications. more
  • Allow commas with spaces after in color tags. more
  • Fixed the mechanic of saving a scenario locally when joining a multiplayer game that uses a scenario you don't have didn't work correctly. more
  • Fixed that the burner light would still glow even when the entity is sleeping. more
  • Assembler copy/paste now works correctly when pasting both recipe and direction with fluid mixing around. more
  • Tool shortcut bar selection list can be closed with ESC. more
  • Fixed that some technologies wouldn't show in the technology list if they were fully researched. more
  • Fixed incorrect zooming speeds when using keyboard to zoom. more
  • Blank property expression names in map gen settings JSON are ignored. more
  • Seed1 arguments above 255 to noise functions no longer crash the game, warning about the upper bits being ignored, instead. more
  • Fixed broken supply challenge. more
  • Fixed slow horizontal trackpad scrolling in the tech tree view. more
  • Fixing one situation of underground pipe connection over a ghost. more
  • Fixed blueprint icons not disappearing when using set_quick_bar_slot more
  • Fixed PvP force modifiers were being overwritten. more
  • Fixed "graphics_variation" was read-only on entities of type "corpse". more
  • Fixed buildability check of some fluid entities in blueprints. more
  • Fixed gui layouting related to having more squashable elements with different minimal sizes in one row/column.
  • Fixed possible crash when hovering the statistics graphs.
  • Fixed a crash when using LuaGameScript::show_message_dialog during on_init.
  • Fixed headless server would hang when shutting down on Windows. more
  • Fixed interaction of pipe underground connections of different reach. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-25 19:00:12 CET ] [ Original post ]

Friday Facts #287 - Just bugs again

Read the post on our website 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. https://cdn.factorio.com/assets/img/blog/fff-287-splitter-gap.webm 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.
https://cdn.factorio.com/assets/img/blog/fff-287-splitter-no-gap.webm 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.


[ 2019-03-22 16:05:35 CET ] [ Original post ]

Version 0.17.17 released

Changes


  • Fast replacing power poles will keep existing connections but also try to connect to further away power poles if possible. more
  • 0-255 numbers are now allowed in [color] tags. The game will detect if you want to use floats or 0-255, just like the /color command. more

Bugfixes


  • Solved transport line compression related to splitters for various corner cases. more
  • Fixed texture-compression config values that were valid in 0.17.15 but are not valid since 0.17.16 would cause error on startup. more
  • Fixed that reverse/forward speed limits of the train movements were mixed up. more
  • Fixed that reverse locomotive power was the same as forward.
  • Fixed item transfers tutorial giving combinators instead of wood. more
  • Fixed tutorials showing migrations dialog.
  • Fixed slow inserters on transport belt madness level 3. more
  • Fixed massive biter clumps in Wave defense. more
  • Fixed a crash when importing save files into saves with different technology levels researched.
  • Fixed that swapping Command and Option keys on macOS caused neither one to work in Factorio. more
  • Fixed that the technology GUI would list all technology levels if the technology was fully researched. more
  • Fixed a crash when using /swap-players. more
  • Fixed a crash when rotating some modded underground pipes. more
  • Fixed poor performance when large chat messages are rendered. more
  • Fixed a crash when a train traveling to a temporary stop has its schedule copy-pasted. more
  • Fixed a crash when using "Join server after sync" for server hosted over Steam Networking. more
  • Fixed hand missing from quickbar when selecting shortcuts to the blueprint library. more

Scripting


  • Added LuaControl::open_technology_gui(technology) which will open the technology GUI and select the given technology.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-21 20:13:36 CET ] [ Original post ]

Version 0.17.16 released

Changes


  • 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.


[ 2019-03-19 22:06:13 CET ] [ Original post ]

Version 0.17.15 released

Changes


  • Fixed that trains wouldn't depart for temporary stops when waiting at a station. more
  • Fixed that two headed train running out of fuel didn't trigger the out of fuel alert in one of the directions. more
  • Improved Compilatron's ability to select a free space when indicating structures by a factor of 16.6.
  • The player must now wait for Compilatron to follow before being allowed to evacuate the first area of the NPE.
  • The player must collect at least some of their structures before evacuating the first area of the NPE.
  • Updated the player spawn after big biter attack in case the player wants to check how aggressive the biters are.
  • Compilatron now has its own icon.
  • Biters and worms in the NPE will now be aggressive except in special situations.

Gui


  • It is now possible to scroll horizontally with a touch pad in the tech tree view. more

Bugfixes


  • Fixed bugged Compilatron speech in NPE when showing blocked miner.
  • Turrets placed in the starting area will now be detected during the entrench step of the NPE. more
  • Fixed flamethrower turret range visualization was rendered in wrong layer. more
  • Fixed editing map gen settings in the map editor would crash the game. more
  • Fixed that robots would still try to deconstruct trains that left their network. more
  • Reduced screen tearing on Windows 7 when Aero is disabled. more
  • Fixed that converting games to scenarios and back could corrupt script global data. more
  • Fixed that disabling friendly fire prevented fish from healing. more
  • Fixed that LuaEntity::destroy({do_cliff_correction=true}) was ignored. more
  • Fixed toggle state of item selection buttons when clicked with item to fast-select. more
  • Fixed that the Q that cancels wire dragging also removed the hand from the quickbar. more
  • Fixed that selecting quickbar slot while dragging wire only cancelled the dragging, but had to be pressed again to select the slot. more
  • Fixed that modded fluid streams could crash the game in some situations. more
  • Fixed that keys blocked by textfield didn't include CONTROL + A (to select all), the same way as it is doing for (CONTROL + C/V/X). more
  • Fixed the double-click to clear functionality of number text field. more
  • Fixed a crash when migrating mods related to assembling machines and fluids. more
  • Fixed that exporting a blueprint to the library could crash the game. more
  • Fixed a crash when a modded assembler is built over a ghost of assembler with different rotation. more
  • Fixed damage technology migrations not migrating infinite technologies properly. more
  • Potentially fixed a Linux-specific bug where the game would react to key presses not intended for it. more

Scripting


  • Added LuaGameScript::create_profiler() which can be used to measure script performance.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-03-18 20:52:10 CET ] [ Original post ]

Version 0.17.14

Bugfixes


  • Fixed that research queue setting in the New Map GUI wouldn't remember its value. more
  • Fixed a crash when hand replacing an assembler ghost with fluid mixing. more
  • Fixed migration of fluid-using modded mining drill.
  • Fixed ten_minutes modifier bug in NPE.
  • Fixed broken resetting of scenario context.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-15 20:23:18 CET ] [ Original post ]

Friday Facts #286 - Pollution cleanup

Read the blog post on our website

A week in the office


This week is another week of typical bug fixing, so I thought we would make a one-time change of style and do a day-by-day account of what exactly that means for us.

Monday


We had a typical day of bug fixing for the most part. After our weekly Monday meeting, where we discuss the development plan and the Friday Facts plan, everyone settled into the normal bugfixing work, which boils down to something like this:
  • Find a bug to work on - Either by looking through the forum or the Automated crash reports.
  • Try to reproduce the problem, or someway figure out what went wrong.
  • Try to fix the problem. Sometimes this is super easy, other times it can be hours/days.
  • Check the solution is effective at fixing the bug.
  • Check the solution didn't break something else. For this we have over 1,300 integration tests which cover a large amount of the code base. We also have a server which runs tests for all platforms whenever anything is pushed to the master or any pull request.
  • Commit the solution with a changelog entry to master and push!
  • If applicable, move the bug report on the forum to 'Resolved for the next release'.
It was about 4pm when we had to decide about a release. There wasn't anything super game breaking, but there was a Introduction Campaign script problem which we had solved, so we decided to start the deployment process. To be succinct, the deploy process is as follows:
  • We enter a console command on the deploy server.
  • The deploy server does its automation magic, builds all the platforms and uploads it everywhere, updates the locale from Crowdin, etc.
  • A human finishes the non-automated steps, namely posting the Steam changelog and setting the release live on Steam.
This typically takes about 90 minutes. The 0.17.10 deploy process executed flawlessly. However quickly we saw a massive spike in crash reports, seems we had broken something with GUI's in multiplayer. After the first hour, we had over 100 crash reports, so it was definitely a big problem. It was just a simple oversight, so it was a one-line fix. We quickly spun up the deploy script again, the final tally of crash reports was over 300 by the time the hotfix was out.

Tuesday


Tuesday started in the usual way, with most of the team arriving in the office by 11am, and Ben arriving after a long bus ride from Germany. Just before lunch kovarex opened a discussion in the office about the pollution balance, prompted by this forum post. It seems when we normalized the burner energy efficiencies, we didn't consider that it would affect how much pollution the burners would generate. We talked for some time about what to do, the effect of pollution on the strategic gameplay decisions. For instance the decrease in pollution from Steel furnaces to Electric furnaces is an important factor in a players choice of which furnace to use. The starting point is that we don't really have any super solid information on pollution and what the real values in the game are. We were discussing that its some value per tick per amount of energy consumed, but different entities also do it different ways etc. So the idea was floated to add pollution statistics. This would show where the pollution is being generated and absorbed, in just the same way as Item, Electricity, Fluid statistics etc. By the end of office hours kovarex had the pollution statistics in the game, with some finalisation planned for later on. Otherwise, a pretty typical day of finding bugs, fixing bugs, pushing fixes, etc. Rseding spent some time on the 'Back button' logic of the Manage Mods GUI. It is not just as simple as 'A button which goes back', as we have the neat system now that it will show a prompt about any unconfirmed changes still in the GUI, and what you want to happen. In the evening, kovarex finished off the pollution statistics, adding statistic for the tree absorption and the tile absorption. Very often kovarex will work a 'night shift' for a few hours after he has wrestled his 3 young boys to bed. Another change that was prompted while looking at all these statistic GUIs was the statistic smoothing logic. The way it was before, all statistics had a smoothing of 0 except for the Item statistics, which meant they were extremely spiky.
We decided to enable the smoothing for all statistics apart form the Electric network statistics (as by its nature it is smooth). We think the result is much nicer:

Wednesday


A pretty typical day of bugfixing. Kovarex finished off the pollution statistics, and started on normalizing the pollution values. The internal prototype value was renamed to emissions_per_tick_per_watt, and the old prototype value of emissions will be internally converted if it is present. Another change was to amend the tile prototype pollution absorption definition. Currently it is called ageing, what does it even mean? So its now renamed to pollution_absorption_per_second , which gives some hint as to what it does. The next step in this reworking was to show the pollution as a 'x/s' value, as opposed to the current unexplained number. When shown in this format to the player, the numbers were very large and not 'clean', such as '83.33/s'. The goal was to 'normalise' the values, so we have clean numbers such as 1/s, 5/s, while keeping the balance relatively the same. The general result is that all internal values are roughly divided by 60, and there were many migrations which needed to support this:
  • Amount of pollution on each chunk.
  • Amount of pollution absorbed by spawners.
  • Amount of pollution absorbed by trees.
The result is something like this:
After lunch, posila added a new graphics setting for the macOS version: Render in native resolution. The game will by default tell macOS to render the game in the native 'Retina' resolution, however some people were having performance problems on older and weaker MacBook's, so we added the setting so it can be turned off. It is tough developing the game sometimes, a lot of macOS players were telling us for a long time to support the high DPI retina screens, and that they can't believe that we haven't done something as basic as setting the config flag. So we added it for 0.17, and we get another group of players complaining that we turned it on. Sometimes you can't win.

Thursday


After finalizing the pollution migrations and ensuring all the tests pass, the pollution changes were merged to master. The plan was made to make a release which will include the changes, so if there are any bugs we can fix them on Friday before the weekend. With it merged to master and the values somewhat figured out, this is what the new pollution graph will look like in a typical factory:
Another nice addition, was adding the information about what biters will spawn and how much pollution the spawner will absorb when it sends a unit to attack:
This allows players to directly estimate the magnitude of the response of the enemy based on his strategic decisions. For example, you can roughly estimate how long the stockpiled ammo will last in a mining outpost, based on the mining drill pollution generation and spawners attack generation. We are not expecting people to do it regularly, but it is always nice if there is a way to inspect the mechanics of the game closely for those who care. It is also on Thursday that we normally prepare the FFF, which means writing up the topic, preparing GIFs and images, finalizing the features and applying a lick of polish. Sometimes the deadline of FFF is tight, but it works well to push us to get things finished in a reasonable time. We've experienced the problem where if you have infinite time to work on something it ends up taking infinite time to finish. About 16:30 we decided we should get the deploy started, and made the internal announcement. This internal announcement lets everyone on the team know, gives enough time to finish and push any work, and invites them to speak up if there is a reason delay the release. One of the final things for the 0.17.12 release was merging a branch by Dominik related to modded underground pipes, specifically moving the underground connection support from the PipeToGround class into the FluidBox. When we have larger changes like this, we process it through Pull requests. Rseding as our nominated code reviewer will go through the PR for any bugs or issues, and if it all looks good, he will handle merging it to the master branch. So it all looked good for the PR after some minor cleanup, so it was merged, and after tests passed we started the release process. At just about 20:00 CET the whole deploy was completed, 0.17.12 was now available for all experimental players.

Friday


In a way, the plan worked, as after the release we had some feedback about the 'things we missed':
  • Migrating the map setting of how pollution increases the evolution factor. (pollution was increasing evolution 16.6 times faster than it should for existing saves).
  • The emissions of the Steel furnace were too low compared to 0.16.
  • Changed the map_settings_example.json to not have (now) ridiculous pollution values.
Having your evolution factor increase at 16x the normal rate? That's the thrill of playing on experimental! We also made a plan to merge a batch of Introduction Campaign fixes and changes. We wanted to do it early in the day, so there is time to test it and make sure it works, and also that there will be enough time to do the fixes before we want to release. Even further, we need enough time that is there is a catastrophic bug introduced, we can do another release in the same day. Typically on a Friday, the FFF is in the stage of finalization. The last parts of the topics are filled in, the images uploaded, and final editing starts. This week is somewhat special, as I am writing this day-by-day. Its just past 5pm now, most of the team is winding down for the weekend. The count of bug reports on the forum is 366, which lower then the 372 of last week. It seems we might be past the peak of the curve, where the bug reports no longer appear faster then we are able to close them. We have 0.17.13 out, over 100 bug reports resolved in the last 7 days, and a few new features for you all to enjoy. I'd say its been a pretty good week. The last order of business this week is publishing the Friday Facts. This latest release has a new version of the Introduction campaign, we would appreciate if everyone could give it another playthrough so we can get as much feedback as possible, and ideally have someone unfamiliar with the game to try it. As always, let us know what you think on our forum


[ 2019-03-15 16:30:49 CET ] [ Original post ]

Version 0.17.13 released

Changes


  • Modified NPE quest structure to give the player more notice of impending attacks
  • Added missing Steel plate recipe to NPE tech tree more
  • Removed unneeded Iron stick recipe from NPE
  • Fast replacing between rail signal and rail chain signal will preserve circuit wire connection and relevant settings. more

Bugfixes


  • Fixed that the evolution pollution factor wasn't migrated properly. (pollution was increasing evolution 16.6 times faster than it should for existing saves).
  • Fixed a crash when trying to assign invalid things to LuaPlayer::game_view_settings. more
  • Fixed that replays could trigger autosaves and take screenshots. more
  • Fixed that changing mod settings through Lua commands wouldn't trigger the settings-changed event. more
  • Fixed that /config didn't support name, description, or tags. more
  • Fixed a crash when using temporary stations. more
  • Fixed that drop-item into vehicles didn't work. more
  • Fixed that resizing the window while loading on 4k screens would cause the progress bar to not render. more
  • Fixed that the crafting queue GUI wouldn't show correctly when loading a save with crafting in progress. more
  • Fixed text box line wrapping didn't work correctly in most cases. more
  • Fixed a crash when re-joining a multiplayer game while the tips-and-tricks window is visible.
  • Fixed a crash when opening the set-filter GUI on the ammo inventory of other player using the /open command.
  • Fixed that the pollution generation of steel furnace wasn't what it was supposed compared to 0.16.
  • Fixed that you could die during a cutscene and become a ghost when it ended. more
  • Fixed that you could die with required items in your inventory and make the NPE unwinnable. more
  • Fixed that some turrets wouldn't be detected by the quest objectives in the NPE. more
  • Fixed issue with detecting Steam engine on network in NPE more
  • Fixed biters getting stuck in massive clumps in NPE more
  • Fixed biters becoming frozen after arriving at target destination in NPE more
  • Fixed crash when mining scrap metal in NPE more
  • Fixed biters losing aggression after save/load during NPE more
  • Fixed some windows in the NPE having inconsistent header draggable textures more
  • Fixed build order for Compilatron in NPE so it is more successful more
  • Fixed set_active_quick_bar_page not updating the GUI. more
  • Fixed that waiting on temporary stop was reset every time other station was added. more
  • Fixed that blueprints with trains and rails still could snap the trains to different rails. more
  • Fixed LuaGameScript::take_screenshot with anti_alias = true would produce bad screenshots more
  • Fixed that snapping to position while building ghost didn't update the ghost position properly, leading to invisible entities in rare cases. more
  • Fixed a crash when destroying trains while in the paused map editor state. more
  • Fixed that recipes could be setup to produce > 1 count of items that are never meant to be stacked. more
  • Fixed that creating a new blueprint and pressing Q after it was setup removes it instead of putting it into inventory. more
  • Fixed LuaGameScript::take_screenshot with anti_alias = true would produce bad screenshots. more
  • Fixed Artillery targeting remote not showing the correct ability count in the quickbar. more
  • Fixed scrolling through blueprint book with Shift+mouse wheel on macOS. more
  • Fixed Artillery targeting remote not showing the correct ability count in the qickbar. more
  • Fixed that blueprint shortcuts in quickbar linked to the library wouldn't remember their orientation. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-15 16:06:37 CET ] [ Original post ]

Version 0.17.12 released

Features


  • Added pollution tab to the production statistics.

Minor Features


  • Spawner tooltip (including the pollution statistics), shows distribution of biters spawn for the current evolution factor with the pollution costs.
  • Added attack modifier setting into the pollution section in the map generator. This modifies how much pollution is consumed by biters attacking. (default is 50% for deathworld presets)

Changes


  • Pollution generation is now shown in the x/s format both on the entity and in the item/crafting slot.
  • All statistics graphs apart from electricity use smoothing now.
  • The Install Mods GUI will now automatically install required dependencies.
  • Added graphics option "Render in native screen resolution" on macOS to workaround performance issues due to rendering on Retina displays. more

Bugfixes


  • Added another fixing migration of consistency related to undo.
  • Fixed that inserters wouldn't copy the white list/black list setting during fast-replace. more
  • Fixed that building/removing signals forced train in disabled station to move from it. more
  • Fixed that the name of the "Undo" shortcut wouldn't show up in the shortcut selection list. more
  • Fixed that the blueprint book shortcut's tooltip wouldn't show the assigned key combination. more
  • Fixed search bar focus being lost when binding it to extra mouse buttons. more
  • Fixed that shortcut bar keyboard shortcuts would appear twice in the control settings if certain mods were installed. more
  • Fixed that backspacing text covered by unclosed rich text tags could leave them at the end of the string. more
  • Fixed that technology tooltip would show "unknown key" for technologies with no description. more
  • Fixed unable to close the menu when rebinding toggle menu from ESC. more
  • Fixed that modded GUI window frames always contained header filler. more
  • Fixed save file would contain two preview screenshots. more
  • Fixed typo in decoratives.lua. more
  • Fixed that cloning assembling machines wouldn't preserve the direction for some recipes. more
  • Fixed bug with typing certain characters on alternative keyboard layouts on windows. more
  • Fixed a crash of generators whose prototype changes to not use fluid anymore. more
  • Fixed some crashes related to changes of modded fluid recipes. more
  • Fixed NPE bug when Compilatron walks over the iron patch when he's about to build miners. more
  • Fixed switching to map view when holding placeable item in cursor would make the item icon invisible. more
  • Fixed cloning rocket silos with rockets wouldn't work correctly. more
  • Fixed broken and missing support of modded underground pipe connections. more
  • Fixed not being able to use the same key for some actions. more


    [ 2019-03-14 19:28:27 CET ] [ Original post ]

Version 0.17.11 released

Bugfixes


  • Fixed that the process name was set to "Main" on Linux. more
  • Fixed a crash when closing GUIs with escape in some cases. more
  • Fixed a crash when mods set repair pack speeds or entity repair speed modifiers to negative values.
  • Fixed that focus-search wouldn't work in the Recipe GUI or Map Editor. more
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-03-11 21:36:27 CET ] [ Original post ]

Version 0.17.10 released

Changes


  • Terrain generator options are preserved by the map generator GUI unless explicitly changed.
  • Changed landfilling result to be tile called "landfill" instead of tile called "grass-1". It looks the same for now, but it solves some unexpected behaviour. We might give it a custom graphics later on. (https://forums.factorio.com/67282) Existing blueprints containing "grass-1" will be migrated to the "landfill" tile.
  • The game will load without an error when non-essential shaders fail to compile. more
  • When a player dies in the Wave defense, the free equipment will be removed from the corpse.

Minor Features


  • "Make Blueprint", "Make Blueprint Book", "Make Deconstruction Planner", "Make Upgrade Planner", "Toggle Personal Roboport", and "Toggle Exoskeleton" functions are now accessible via keyboard shortcuts.

Bugfixes


  • Fixed references to nonexistent noise expressions in map gen settings would crash the game.
  • Fixed a crash when trying to read Lua drop-down font style names. more
  • Fixed a crash when trying to join a Steam game fails in some cases. more
  • Fixed crash related to latency hiding and undo.
  • Fixed that map generation wouldn't always update to reflect modded noise expressions.
  • Fixed a crash when the open GUI target would become invalidated during the same tick as autosave starting.
  • Fixed that the repaired lab showed in the bonus GUI. more
  • Fixed NPE crash when Compilatron tried to place his chest. more
  • Fixed that Control+F didn't work in the trains GUI. more
  • Probably fixed GUI not responding to user input in some situations. more
  • Fixed scaling of some of the debug info text overlay. more
  • Fixed headless server would be stuck in reset loop when trying to apply an update. more

Scripting


  • Added LuaGuiElement::select_all and select methods that work for textfield and textbox.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-11 17:35:51 CET ] [ Original post ]

Version 0.17.9 released

Changes


  • Disabling station with train waiting in it doesn't force the train to departure anymore so it works as it worked in 0.16. It looked like a useful change for 0.17, but we can control train conditions by circuit network and there are some nice and simple use cases were ruined by trains being forced to departure when the stop is disabled. more
  • Changed expensive version of assembling machine 2 recipe to match the normal version better. more

Minor Features


  • Added map editor support to delete items.

Bugfixes


  • Fixed pipette making error sound in latency state even though you have enough items. more
  • Fixed that technologies would sometimes disappear from the technology list when added to the research queue. more
  • Fixed problems related to circuit network connection inconsistency related to undo. more
  • Fixed NPE issue where Compilatron could destroy essential buildings. more
  • Fixed NPE crash when Compilatron tells you to pick up scrap. more
  • Fixed that he bonus GUI wouldn't show personal equipment. more
  • Fixed using special-item tags would cause desyncs. more
  • Fixed NPE crash when Compilatron tries to point at an object that doesn't exist any more. more
  • Fixed Local errors in scenarios would crash the game when viewing scenarios in the GUI. more
  • Fixed that reviving and underground belt could sometimes change it's direction. more
  • Fixed a crash when using modded recipes in furnaces with fluids. more
  • Fixed that the active-version selector in the mods GUI didn't work. more
  • Fixed that randomizing map seed didn't have any effect after an exchange string was loaded. more
  • Fixed that resources wouldn't be rendered correctly in the map preview. more
  • Fixed miscalculation of peak influence in autoplace specifications with more than 2 peaks. more
  • Layouting fix related to technology gui. more
  • Fixed crash when running out of space in physical texture used for streaming. High detail textures will be evicted instead. more
  • Fixed that mod settings could get scrambled/reset when adding removing or changing mods. more
  • Fixed that you could open blueprint books/armor multiple times. more
  • Fixed that the train inactivity wait condition time was limited to 120 seconds. more
  • Fixed a crash when exiting the game through the "X" button from a tutorial. more
  • Fixed the shadows of some GUIs when circuit network window is shown. more
  • Fixed menu background image would be scaled with poor quality. more
  • Fixed crash related to beam creation when the source or target is removed in the process. more
  • Fixed a hand logic related to loading a save with different mod settings which results in to the cursor being item removed.
  • Fixed being unable to clear "X"(missing blueprint) icon from the quickbar. more
  • Fixed that train two stations of the same name in the train schedule could crash the game. more
  • Fixed consistency check for signal state of train on the way. more
  • Fixed issues with pipes disconnected w/o reason. Added stricter checks for new occurrences. more

Scripting


  • Added LuaSurface::min_brightness read/write.
  • Added LuaEntity::get_connected_rails(), get_rail_segment_entity(), get_rail_segment_end(), get_rail_segment_length(), and get_rail_segment_overlaps().
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-08 17:43:11 CET ] [ Original post ]

Friday Facts #285 - Bugs, Bugs, Bugs.

Hello, This past weekend we beat our previous record of most simultaneous players with a peak player count on Steam of 22,457 players, and no doubt another couple thousand playing the non-Steam version.

macOS Developer needed


We have a proportionate number of bug reports coming in for macOS systems, and we don't have a dedicated developer responsible for the problems. The Job listing is still up on our website, and we have the desk already set up for someone willing to join our team. If you might know anybody who might be interested, please point them in our direction.

Bugs


We are slowly getting to a phase, where we are fixing bugs faster than they are reported. Interestingly enough, the worst bugs were not happening right after the release, but as a reaction to non-trivial fixes later on. Overall there have been over 12,000 crash reports automatically sent in for 0.17, and we are slowly stemming the tide as you can see in the graph.
The second indicator of progress is the amount of active reports on our bug forum reports, the current count is 372. Lets see how long it will take to get it to the magical 0. :)

Visual Bugs


With the entire rewrite of the graphics engine being put to the test, there have been some very interesting and some very cool looking glitches occurring.

This is almost like a 'cell shaded' effect.

The tiles are slowly being soaked in blood.

This one is just glitchy. Even though some may look cool, these 'effects' have been fixed. Other than bugfixing, not much is going on in the office, so we don't have any interesting news to share with you. That said, if you have some thoughts, let us know on our forum.


[ 2019-03-08 14:45:35 CET ] [ Original post ]

Version 0.17.8 released

Bugfixes


  • Fixed modded multiplayer games would incorrectly show a mod-mismatch error (again). more
  • Fixed queued GUIs didn't work correctly. more
  • Fixed that terrain selectors other than 'elevation' messed with the water/island controls more
  • Fixed PvP running on_init when it was already initialised. more
  • Fixed that replacing an underground pipe by a pipe could cause fluid mixing in a special situation. more
  • Fixed that upgrading entities with the upgrade planner would erase the last-user. more
  • Fixed a crash in the update mods GUI.
  • Fixed incorrect styling in the update mods GUI in some cases.
  • Fixed crash when loading a save during a cutscene when following a unit. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-07 14:26:32 CET ] [ Original post ]

Version 0.17.7 released

Bugfixes


  • Fixed game.players[#] would be treated as game.players[tostring(#)].
  • Fixed inserter/mining drill interaction indications would still render for mined-in-latency-state entities.
  • Fixed inserter/mining drill interaction indications wouldn't render in some cases and would ignore ghosts in some but not all cases.
  • Fixed that the game would incorrectly think some mods wouldn't be required when joining multiplayer games even though they are.
  • Fixed some key bindings not working correctly until game restart. more
  • Fixed a crash when changing entity ghosts with wire connections through the upgrade planner. more
  • Fixed that the prevent-robots-from-working-because-i-am-driving-too-fast logic still wouldn't work in some cases. more
  • Fixed that highly nested recipes would freeze the game. more
  • Fixed a crash when loading saves that contain connected cliffs that will be removed due to mod migrations/removals. more
  • Fixed statistics graphs crashing when releasing shift with a tooltip active. more
  • Fixed rendering of tile transitions on Sandy Bridge iGPUs for real this time. more
  • Fixed that it was possible to add a blueprint to other player's shared blueprints. more
  • Fixed that undo was not preserving ghost entity module requests. more
  • Fixed that undo was not preserving circuit connections. more
  • Fixed that un-researching technology wouldn't update GUIs correctly. more
  • Fixed PvP scenarios created in 0.16 and loaded in 0.17. more
  • Fixed PvP script error from bad migration data checking. more
  • Fixed that blueprint that was meant to disappear on Q did not after selecting and cancelling selection. more
  • Fixed persisting tooltips in the technology gui. more
  • Fixed set_quick_bar_slot not refreshing item counts in the quickbar. more
  • Fixed layouting in train configure gui with very long station names. more
  • Fixed layouting in train configure gui with too long condition translations. more
  • Squashed labels get a tooltip with the full text in a similar fashion as buttons.
  • Fixed that research queue setting wouldn't export to map exchange string properly. more
  • Fixed incorrect primary screen index in graphics options GUI.
  • Fixed some cases of fluid mixing related to underground pipes.
  • Fixed crash related to productivity bonus and a catalyst. (When the catalyst count covers all the ingredient count). more
  • Fixed that the reset button wouldn't update after importing a map exchange string. more
  • Fixed messed up research in the NPE more

Scripting


  • Added LuaControl::ghost_cursor read/write.
You can get experimental releases by selecting the '0.17.x' beta branch under Factorio's properties in Steam.


[ 2019-03-06 19:13:20 CET ] [ Original post ]

Version 0.17.6 released

Changes


  • Updated map-gen-settings.example.json to use numeric multipliers, include cliff richness, and demonstrate expression overrides. more
  • It is not possible to fast-replace pipe to ground by another that is in an orthogonal direction.
  • Changed mining productivity cost to 2500 increase per level to fix that the last change was actually making it 5 times less expensive towards infinity. Lower levels are cheaper on the other hand.

Bugfixes


  • Fixed of loading of saves before 0.17.
  • Fixed crash related to conflicting undo in multiplayer. more
  • Fixed crash related to temporary stops and destroyed rails on the path that were already passed by the train. more
  • Fixed yet another train pathing crash. more
  • Fixed the hand logic for god-mode controller. more
  • Fixed, that the hand logic could force an item to filtered slot that doesn't match it. more
  • Fixed, that filtered inventory could ignore the hand when sorting or transferring in some cases. more
  • Fixed overly generous migration of mining productivity research. more
  • Right panel sizing fixes.
  • starting_area (size multiplier) in map gen settings JSON can be represented by a number.
  • Fixed crash related to removing technology from the research queue. more
  • Fixed that driving backwards in vehicles wouldn't trigger the prevent-robots-from-working-because-i-am-driving-too-fast logic. more
  • Fixed crash during startup on macOS 10.12 or older with GeForce GPU. more
  • Attempt to fix tile transition rendering on Sandy Bridge iGPUs. more
  • Fixed a performance problem related to undo in multiplayer. more
  • Fixed upgrading ghost splitters wouldn't copy the splitter settings. more
  • Fixed a couple of situations where fast replacing underground pipe could cause fluid mixing. more
  • Fixed align in the blueprint library. more
  • Fixed a crash when loading modded saves related to fluidbox removal in assembling machines.
  • Fixed blueprint preview would be drawn out of its bounds. more
  • Fixed the featured technology cost for upgrade technologies when the research queue is not enabled. more
  • Fixed that search in the technology GUI would be cancelled by selecting a new research. more
  • Fixed a crash on destroying an entity with fluid energy source. more
  • Fixed a crash when deconstructing trains with inserters trying to put into them. more
  • Fixed layout of circuit and logistic control windows. more
  • Fixed that trying to join a multiplayer game too quickly would lead to a mods-mismatch error. more
  • Fixed that behemoth biters didn't have resistance to acid (as all other biters have).
  • Fixed NPE saves technologies were messed up by a migration in 0.17.5. more
  • Fixed NPE issue where compi smashing a building would lead to a crash in migrated saves. more
  • Fixed that it wasn't possible to access the game menu when the game was paused in multiplayer with the technology screen open. more

Scripting


  • Added LuaItemPrototype::mapper_count read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-05 17:59:50 CET ] [ Original post ]

Version 0.17.5 released

Bugfixes


  • Fixed crash related to train waypoints and very short train paths. more
  • Fixed wrong entity info positioning when all other things in the right container are disabled. more
  • Fixed Wave defense victory not being triggered in some cases.
  • Fixed Wave defense victory message being printed on every rocket launch.
  • Fixed restarting the game after sync-mods-with-save would fail to auto-load some saves on Windows. more
  • Fixed PvP error when loading 0.16 versions of the scenario. more
  • Fixed selection in blueprint preview would have an offset if UI scale was not 100%. more
  • Fixed pie slice used as progress indicator in crafting queue wasn't rendering for small angles. more
  • Fixed that the /time command would give back the wrong time played.
  • Fixed rendered terrain would increasingly get corrupted during movement when using 16bit rendering mode on some OpenGL drivers. more
  • Fixed player.get_quick_bar_slot causing a crash for some values. more
  • Fixed controls were lagging when application window was receiving lot of events it didn't recognize on macOS or Linux. more
  • Fixed "Wait for V-Sync" graphics option was not working on macOS 10.14 Mojave.
  • Fixed crash logs were missing stack traces on macOS.
  • Adjusted the Supply Challenge requirements to make sense. more
  • Fixed a crash when reviving entities through the Lua API.
  • Fixed NPE crash on biter commands during rebuild quest. more
  • Fixed NPE crash during cutscene if player left entity ghosts in the starting area. more
  • Fixed NPE crash on sending biters if you plaster half the map with furnaces (yes, seriously). more
  • Fixed NPE bug where Compilatron would sometimes not continue after players put the required items in his chest. more
  • Fixed that technology slot tooltip didn't reflect the cost of the selected technology in the queue.
  • Fixed NPE confusing flying text at startup. more
  • Fixed that the train passed wait condition time was limited to 120 seconds. more
  • Fixed hand not disappearing from the quickbar in some situations. more
  • Fixed a crash related to the research queue. more
  • Fixed that the research queue could show incorrect research levels. more
  • Horizontal layouting fix of the mods gui. more
  • Fixed that the island related changes in the terrain settings in map generator gui weren't updated if the island preset was preselected. more
  • Fixed that custom Lua-defined shortcuts would desync the game. more
  • Fixed a crash when player is not given when using surface.deconstruct_area(). more
  • Fixed loading of blueprints containing rail temporary stations.

Modding


  • Added SelectionToolPrototype flag "nothing".
  • Made resource autoplace helper functions usable from mods. more
  • Added LogisticContainerPrototype::landing_location_offset.

Balancing


  • Changed mining productivity technology to add 10% in one level instead of 2%, increased the formula from 100 * level to 500 * level and removed some of the low level intermediate levels.

Changes


  • Blueprinting tools are no longer shown in the quickbar filter selection. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-04 17:50:04 CET ] [ Original post ]

Version 0.17.4 released

Bugfixes


  • Fixed crashes related to Lua errors. more
  • Fixed a crash when opening the fluid wagon GUI in the map editor. more
  • Fixed that pressing "back" on the login prompt in the other settings GUI would exit the other settings GUI. more
  • Fixed that robots could get stuck when trying to upgrade in some cases. more
  • Fixed that the tooltips for tooltip times where backwards. more
  • Fixed Lua commands wouldn't work show help correctly. more
  • Fixed portable fusion reactor and rocketry tech pre-requisites - added military science pack. more
  • Fixed uranium processing tech pre-requisites - added sulfur processing. more
  • Removed ghost buildability consistency check until we properly integrate building of ghosts into the fluid mixing prevention logic.
  • Fixed crash related to train pathfinding. more
  • Fixed layouting of Map Generator gui when the preview is shown. more
  • Fixed issues with rich text tags referencing entities that have no icon.
  • Fixed crash related to moving blueprints from game blueprints to player blueprints. more
  • Fixed crash related listing all players while while processing event of player being removed.
  • Fixed a crash related to research that would continue even though the research queue is empty. more
  • Fixed Compilatron placing a chest on top of things. more
  • Fixed crash during quest to reactivate assembler in NPE. more
  • Fixed that script render text would scale with GUI scale. more

Modding


  • Made MiningDrillPrototype::radius_visualisation_picture tintable.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-03-01 18:42:57 CET ] [ Original post ]

Friday Facts #284 - 0.17 experimental

Read the post on our website.

The release


https://cdn.factorio.com/assets/img/blog/fff-284-rocket-launch.mp4 So we finally released the 0.17 experimental this week. (patch notes) Hooray :) Fun fact: The release script failed to post the release announcement on Steam and Reddit and we were wondering why. The reason is that the patch notes were so big, that it exceeded the maximum post size (40k characters). If this isn't the indication that we should split our releases into smaller chunks, than nothing is :). Code wise, it is clearly the biggest release, and the amount of bugs we have to go through correlates with it. In other words, there are tons of bugs of all variety. We want to fix everything eventually, but it will take time, so we had to prioritize this week to aim for the most generally playable version before the first weekend after release. That means mainly unloadable saves, unavoidable crashes, game failing on startup, and the most frequently occurring problems. Our automatic bug reporting system is helping us a lot with the last one. It is uncommon, but sometimes the automatically uploaded crash report doesn't have enough information for us to be able to fix the bug right away, but the number of times we see a crash happening is still extremely useful for prioritizing. When we see a crash on the forum, we can cross reference it to our automatic reports, and if is one of our 'top-hits', we know to investigate it right away. The most prominent crash related to loading specific kind of save happened with pipe ghosts happened more than 200 times. It was fixed (obviously), but lets wait and see what our top hit of 0.17.4 will be after the weekend. Overall this means, that bugs that are not critical, require design discussions or are not that simple to fix are not being dealt with right now. Also, we got quite a surprising cake gift today. It is extremely delicious and we are extremely thankful for it :).

Introduction Campaign - Start to finish


0.17 is out and with it our new Introduction scenario. This FFF will be spoiler heavy, so if you want to play it without insider knowledge then go do that and come back.

A small apology


One thing that you might have noticed is that the Introduction is not complete. The systems, quests, and graphical elements are all still under development and not up to the usual standard of our experimental releases. It is at the point where in house focus testing starts to be less useful than large scale community testing. That said, I think it is already an enjoyable experience.

An enormous thank you


During experimental, when you complete the scenario you will receive a message asking you to send us some automatically generated screenshots of your playthrough. The response has been enormous and my inbox has roughly 10gb of replies already. Most of the feedback has been very positive, but we are certainly not done tweaking, as you will see below.

Epic scope


Perhaps the biggest failing during the development of this Introduction was right at the start when deciding the design constraints. If I were a sane human, I would have settled for just making a new tutorial. Instead what we decided upon was:
  • The scenario will be used as the free demo.
  • It should be the first thing a new player sees.
  • It must demonstrate the art style.
  • It must demonstrate the open design gameplay of Freeplay.
  • It should still be fun for seasoned players.
  • First half should have tutorial elements.
  • Second half gives the player a chance to test themselves in a 'real' environment.
  • No jumping through hoops and simply obeying orders.
  • Encourage the player to be creative.
  • The player must learn the game, not how to finish the scenario.
  • Include as much organic learning as possible.
  • It must limit the environment enough that the player cannot become confused with choice.
  • Players should not receive help until they need it.
  • No quests without purpose.
  • Nothing that I add should affect the Freeplay experience.
As you might expect I try not to mention the word tutorial anywhere.

Feeling like a newbie again


If you have been on reddit or our forums in the last few days you will probably notice that many players feel the scenario is too difficult for new players, or that they played 'like a new player' and found it too hard themselves. Two reasons were frequently given for this:
  • The lack of splitters and underground belts make solving the design puzzles more difficult.
  • Combat heavy gameplay is not what Factorio is about especially at the difficulty presented in the scenario.
We will come back to my thoughts on this, but for now just think about your own idea of 'how a new player interacts with the game'.

Order of concepts not Order of operation


A normal video game tutorial is a terrible thing. Mechanics are broken down into smaller chunks and sorted by which order they must be done in the the main game. Sometimes when a game is complex the smallest chunk is still impossibly large, leading to walls of text that must be read before playing (see the Civilization mobile title). Sometimes the chunks are made very small but then the designers want to speed players through, so they force a series of narrow interactions (see Factorios old tutorial). Neither of these solutions are bad, if your goal is to have the player finish the tutorial. If your goal is to teach them to play, then... well... we as educators can do better. The deepest, broadest and most important concept we need to teach in Factorio is that of Production. That is the end goal, but where does it begin?

Projection of Production


The blueprint for production is the humble recipe tooltip. This is where the player first sees how to make an item in the game. Our job is to teach them how to take the recipe and translate it into a production chain. This is the single most important lesson on the road to automation, so I set out to remove all obstacles. Lets break our discussion down into the mechanical parts: Assembling Machines, Belts, and Inserters.

Upside down power


Assembling Machines are the core of automation but in Freeplay they have a dependency: Electricity. If this was a regular video game tutorial, we would first need to teach the player the following steps (in reverse order): Build power poles, Setup steam engine, set up coal mining. What if we could just do away with all of this? Oh, we can? Wonderful! During the Introduction there are two assembling machines which require no electricity, one for Science packs and one for Iron gear wheels.

Basic logistics


Now the main puzzle pieces are there, the player just needs to connect them. During focus testing, it was noted that the interaction between belts and inserters was not very intuitive to begin with. So again we need to break the concept of Logistics down into two concepts: traversal of items and change of inventory. If this were a normal video game tutorial, we would probably just ask the player to obey, placing a belt in one place and then the Inserter next. Here in the Introduction, I want the player to see both concepts working separately, and to interact successfully with each one.
Compilatron builds a mining setup for the player and then the Objective window directs the player to feed the produced plates into the 'feeder'. Once that is complete, the 'feeder' is removed and the player needs to load and unload the assembling machine with inserters.

Double or nothing


In the next step, the player needs to apply what they have learnt by building a copper smelting setup and then feed two different items (iron gears and copper plates) into a single 'feeder'. Once this objective is complete, the player has, without knowing it, set up Science pack automation.

The question of Splitters and Underground belts


There was a lot of feedback about the player not being given access to Splitters and Undergrounds. Some even considered this akin to 'handicapping the new player'. I would argue that there is a difference between complexity and difficulty. Having those tools makes the puzzle easier yes, but also more complex. Many of the long time players mentioned that they enjoyed solving 'simple, long ago optimized' problems with a reduced toolset. Using an inserter to split a belt does work, and also makes the player realise the importance of Splitters when they are unlocked. #NoWrongWayToPlayFactorio

The big concept: Production


The factory must grow. This is Factorio. Progress never ending. How do we teach a new player the concept of never having enough?

Giving production purpose


I mentioned above that we wanted to remove quests which ask you to produce items for no reason. Several times in the old campaign the player was asked to produce 100s or even 1000s of items "because you will need them", only to move to the next level and take them all away. So, how do we give production a purpose? Consumption. Consumption is the intent of Production. You produce with the intent to consume. In Factorio there are only three ways that the player consumes items:
  • Converting items into research progress.
  • Constructing the factory.
  • Killing Biters (either for defense or for land acquisition).
The first item, research, is a constant pressure in Freeplay Factorio, and not a large one at the beginning. In the Introduction we have created an entirely separate technology tree with much higher costs to support teaching production. However, it fails at showing the player they need to increase production (as opposed to just having some) because the costs are static. We see many players set up basic science pack automation and then go AFK while it finishes. https://cdn.factorio.com/assets/img/blog/fff-284-NPE-slideshow.mp4 As for construction, in the second part of the Introduction we allow the player to build their factory any way they want, and to consume all of their resources to do so. Only after they are settled do we apply the third consumption pressure... combat.

Factorio is about production, not combat!


I received a lot of feedback in the form of "Factorio is not about killing Biters" or "Factorio is not a tower defense". My response would be "killing Biters is not about combat, it is a production challenge". We all know that trees are the real enemy. Not only is it a production challenge, it is one that requires no explanation. Also, unlike the other two consumption pressures, this one is reactive. The player must meet the demands or be overrun.

But why so hard?!?!


To understand production you need to experience the state of not having enough. This is accomplished best when you have two conflicting choices, but can only take one. I've heard it described at "A slave to two masters" and I think that sums it up nicely. Many successful games use this to good effect. In Dragon Age you are forced to choose between your love interests and "doing what is right". In Factorio it is one step more complex than love because the decisions are not Boolean... we have ratios! So I would argue that the most 'representative' way to make the player think about this is to ask them to research something while slowly increasing the consumption of ammunition.

But Ben... it is seriously HARD way too hard for new players!



Actually no, it isnt so hard for new players. It is hard for veteran players. The attack system emulates Freeplays pollution system. If you pollute hard, you are attacked hard. The only difference is that the 'price' of a biter is lowered inversely to how far you are through the final research. Dynamic difficulty is a big topic in the office, but even its staunchest opponent, kovarex, admits he had fun with the final wave. He also holds the high score for kills during the Introduction; Over 9000 :D. We already use dynamic difficulty in the Freeplay, so I would consider it representative. The difficulty will of course get a bunch of balance passes and something will be added to warn players better of the dangers ahead.

What is next?


The introduction is far from done, or even ready for all new players. My task for the next weeks is go over the massive amount of high quality feedback and start testing some tweaks. The scenario will not receive updates every time we update 0.17, instead I will bundle the changes once every few patches. If you would like to share any feedback about the new Campaign, we have set up a dedicated forum here, and if you find any bugs, we also have a place for them here. As always, let us know what your think on our forum.


[ 2019-03-01 18:33:00 CET ] [ Original post ]

Version 0.17.3 released

Changes


  • Disabled target leading for flamethrower turrets until it can be made better. more
  • Changed train pathfinding in a way, that it can find path that ends in the same segment where it started. This worked only for the trivial case of all path of one segment before.

Bugfixes


  • Fixed possible crash related to browsing in the mods gui.
  • Fixed that turning off exoskeletons didn't work correctly in multiplayer.
  • Fixed shaking of blueprint preview in blueprint book tooltip. more
  • Fixed the wrong detection of changed autosave interval in other settings. more
  • Fixed /help *command* would print a number instead of the help message. more
  • Fixed a crash when dying with the locomotive GUI open. more
  • Fixed a crash when using sprite variation sheets with mismatched frame counts. more
  • Fixed that the admin-only portions of the whitelist command where not localised correctly. more
  • Fixed building underground pipe between pipes with different fluids. more
  • Fixed visual direction of fluid flow. more
  • Fixed dead-dry-hairy-tree and dry-hairy sprite shifting in normal resolution. more
  • Fixed PvP error when changing enabled mods. more
  • Fixed number pad Enter key-bindings would be converted to normal Enter when restarting the game. more
  • Fixed small worms having fluid consumption. more
  • Fixed that copy-paste of fluid recipes would sometimes not reset fluid box contents. more
  • Fixed that double-clicking a technology in the tree view wouldn't start research. more
  • Fixed pipes that would sometimes be too noisy. more
  • Fixed that you could build multiple underground belts on top of each-other. more
  • Fixed tightspot level 5 was unbeatable. more
  • Added workaround for GPU accelerated texture compression producing corrupted textures. more
  • Fixed that the technology window scroll position would keep getting reset. more
  • Fixed that the current research panel would not update in multiplayer if some other player changed the research. more
  • Fixed terrain not being rendered when using OpenGL and any game overlay was enabled. more

Modding


  • Added LoaderPrototype::structure_render_layer with default value "lower-object". more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-02-28 18:24:39 CET ] [ Original post ]

Version 0.17.2 released

Changes


  • Reverted default renderer on Windows to Direct3D on all configurations.
  • All infinite technologies have Space science pack as a pre-requisite.
  • Added textual error message when player tries to clean cursor but it isn't possible as inventory is full.
  • Added /unlock-shortcut-bar console command to unlock all shortcuts at once. This command does not disable achievements.
  • Keyboard shortcut for in-game undo feature will default to Ctrl+W on AZERTY keyboard layouts. more
  • Control settings will revert to defaults when starting the game with pre-0.17.2 config with AZERTY keyboard layout.

Bugfixes


  • Fixed Join Game through Steam Friend would fail to connect to a game with an error saying Steam Networking is disabled.
  • Fixed LuaGameScript::take_technology_screenshot() would crash the game.
  • Fixed a crash when trying to use async-saving when hosting multiplayer games on Windows. more
  • Fixed electric mining drill coverage area visualization was not drawn correctly. more
  • Fixed missing sprites on DirectX on GPUs supporting only feature level 10.0. more
  • Fixed that the GUI would be hidden if the game was saved and loaded while the technology GUI was open. more
  • Fixed a crash related to non gun/weapon items getting into the gun/weapon inventories. more
  • Fixed a crash when bringing up the escape menu in multiplayer while in the middle of using blueprints/deconstruction. more
  • Fixed a crash when mining ghosts built in the latency state. more
  • Fixed every incremental change of sound volume would save the full config file. more
  • Fixed that the category dropdown in the install mods GUI would only work the first time it was used. more
  • Fixed that mod thumbnails in zipped mods wouldn't show in the mods GUI. more
  • Fixed pre-requisites for the first tier of all upgrade technologies so that the required science packs are unlocked first. more
  • Fixed electric inserter technology description in the tutorial. more
  • Fixed that the undo shortcut tooltip didn't reflect latency hiding values and invalid entries filtering.
  • Fixed a desync when deconstructing item request proxies in the latency state. more
  • Fixed crash related to the hand logic and switching controllers. more
  • Fixed a crash when lamp with non-electrical energy source (modded) is viewed in the blueprint preview/tooltip.
  • Fixed that read-only multi-line text boxes wouldn't wrap text. more
  • Fixed that the fast and express loader entity icons had the wrong colors. more
  • Fixed that the autosave interval setting was off by one. more
  • Fixed map preview would not be cleared to black before preview is generated on some PCs. more
  • Fixed that active blueprint in a book was not preserved when using the book directly from the blueprint library. more
  • Fixed that the tutorial specific assembler was shown in the "made in in" row in the crafting queue tooltip. more
  • Fixed that the map type selection changed done by reset or changing the preset didn't update the sliders properly. more
  • Fixed a rare issue with migration of fluid mixing in a modded save. more
  • Fixed that the provided map-gen-settings.example.json contained invalid settings. more
  • Fixed that checking for updates could crash the game. more
  • Solved, that blueprint library link from quickbar appeared as an empty slot when the target blueprint wasn't available anymore and it wasn't possible to assign a new item to it.
  • Fixed PvP scenario error when updating space race frame with no silos present. more
  • Fixed drawing of some wires and wire shadows more
  • Fixed a possibility to mix fluid through fast replacing / upgrading a pipe with underground pipe. more
  • Fixed drawing of some wires and wire shadows. more
  • Fixed crash when opening the map generator preview for the first time with invalid settings. more

Modding


  • Renamed EntityPrototypeFlag "hide-from-bonus-gui" to "hidden" and made it also hide entities from the made in property of recipe tooltips.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-02-27 18:18:27 CET ] [ Original post ]

Version 0.17.1 released

Modding


  • Added shortcut bar shortcut type that fires Lua events, for use in mods

Scripting


  • Added LuaPlayer::is_shortcut_toggled, LuaPlayer::is_shortcut_available, LuaPlayer::set_shortcut_toggled, LuaPlayer::set_shortcut_available
  • Added on_lua_shortcut event.

Bugfixes


  • Missing description.json in the campaign folder results into the folder being ignored instead of a crash.
  • Fixed crash when trying to rotate quickbars with a controller that doesn't have it.
  • Fixed crash when trying to open surface map generation settings.
  • Fixed possible crash related to copy paste and multiplayer.
  • Fixed it wasn't possible to use capital 'Z' in save name. more
  • Fixed the infinity chest graphics.
  • Fixed that the boiler didn't rotate in blueprints.
  • Fixed that the bait chest showed in the upgrade planner.
  • Fixed high CPU usage when using steam networking.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2019-02-26 22:01:03 CET ] [ Original post ]

Version 0.17.0 released

New version is up and the changelog is too big for a steam announcement post :D Have a look over at our forum: https://forums.factorio.com/65070


[ 2019-02-26 17:25:22 CET ] [ Original post ]

Friday Facts #283 - Prepare to Launch

Read the blog post on our website.

Playtesting


We have been playtesting a few days this week. There were some things we had to fix on the fly, but we still were able to play quite a lot, so I would say that it went surprisingly well. We have been able to get 3 multiplayer bases into a late game stage.

Tile pollution tweaks


As we played 3 different games already, we discovered that the tile pollution absorption values are quite weird. Water was actually absorbing more pollution than grass, which in combination with the fact that water heavy worlds have less biters and more choke points, makes it way too easy compared to a desert world. In addition, grass and sand pollution absorption was brought closer together, as the difference between desert world and grass world when it comes to bitter attack intensity was way too high.

Pollution absorb setting


In 0.16 one of the the map starting settings related to pollution is called Dissipation rate. Its tooltip says "Control how fast pollution dissipates naturally". Since the word sounds alien to many (I had to search it up), no one touches the setting, and we actually had to dig through the code to figure out, what the option truly does. It was a modifier of how much pollution is absorbed by tiles. And the range is from 1 to 1000. You can't really set it lower then the default 1 and setting it to 100 for example basically removes all the pollution effectively, as tiles suddenly absorb 100 times more pollution. So we changed the setting name and description to absorption modifier, with a tooltip saying "Modifier of how much pollution is absorbed by trees and tiles." The values now range from 10% to 400%, so you can actually use it to make the game harder. This should suddenly make it understandable. Oh, and the Deathworld preset value is now 50% :)

Spawner pollution hoarding fix


As you might know, the Spawner/pollution/attack mechanics work this way: Spawners absorb pollution that reaches them, and after absorbing a certain amount of pollution, they send a unit to join an attack group. The amount of pollution depends on the type of unit, and later units need more pollution. There is also a cooldown limiting the amount of enemies sent to attack per time. So far, so good. But there is a fundamental problem with the algorithm we use, as we randomly figured out by looking at the debug data of a Spawner next to our base.
As you can see, the Spawner needs 200 pollution to send a unit to attack, but it already accumulated more than 100k pollution, which is enough for next 500 units. Basically, the problem is, that the Spawner can accumulate an unlimited amount of pollution at a much higher speed then it can ever use. So the first row of biter nests can easily prevent the other nests from accumulating any pollution, which kind of breaks the difficulty scaling and the whole mechanic. Whether you make a little bit of pollution or a crazy amount, the amount of attacks might be the same. The solution is simple, the Spawner now has an upper limit to how much pollution it can absorb, which is 3 times the most expensive unit it can spawn for the current evolution factor. We made some basic testing after this change, and it seems that it is survivable enough for the release, but we might want to tune the default pollution/evolution/attack modifiers during 0.17 stabilisation.

Biters getting stuck in their own bases


One of the other problems we noticed with biters is, that they got stuck in their own base quite often. We discovered, that they can be trapped by the positioning of Spawners/Worms quite easily.
To solve this, we just added a new optional property into entity definition called map_generator_bounding_box which defaults to collision_box. It can be made larger to limit the placement of the entity by the map generator to keep the space around the entity clear. It is also used when biters are building new bases. Adding a 1 tile safe space around all spawners and worms forced the bases to have enough space for the biters to move through it.
In the future, we (or anyone) could use this property, to limit the density of trees in a forest, or similar things.

Biters getting stuck on belts


The strategy to put belts in the path of bitters to upgrade defense is a nice piece of emergent gameplay, but we noticed, that it tends to be little bit too strong. It was discovered, that biters have a small bug in their code, that affects their movement by belts way much more than it should. https://cdn.factorio.com/assets/img/blog/fff-283-biters-on-belts-bugged.webm So posila went ahead and fixed that, and now, biters are still affected by belts, but it doesn't completely bug them anymore. How did we not notice it for like 2 years? https://cdn.factorio.com/assets/img/blog/fff-283-biters-on-belts-fixed.webm

Introduction Campaign (NPE/Tutorial/Demo)


With 0.17, we will be releasing the first public version of the new Introduction Campaign.Because of this, naturally, we will be removing the old 'First Steps' and 'New Hope' campaigns. The 'Main Campaign' will be added to the game later, and we will be providing some more details on the Introduction and Main Campaigns next week.

The fluids


We were testing the algorithm, and there was a lot of back and forth, but the time was running by and there were some problems not that easy to fix. To prevent things from getting broken in a ways we couldn't anticipate and not to potentially delay the release any further, we decided to split the change. So the fluid mixing prevention and fluid update optimisations are in 0.17, but the new algorithm was put aside for further research.

The Wiki plan


With the upcoming release of a new experimental version, a big question for the wiki is when it will be updated to that version. In the past we updated the entire wiki to the experimental version a few weeks after its release, but we are changing this up: The plan is to update the wiki to the experimental version immediately on release. I wrote some scripts to speed up this process, so the moment you see that the release is out, you can head over to the wiki and check out the new recipes and technologies without having to wait on some slow human to update that info. Furthermore, a clone of the 0.16 state of the wiki will be made and available as a read-only wiki at stable.wiki.factorio.com, for the players that prefer to stay on the stable version of the game.

Mod thumbnails


Small news for mod creators. In the new in-game mod GUI (FFF-272) will show thumbnails for mods alongside mod description. Since you should be able to interact with the installed mod settings also in an offline mode, the thumbnails have to available in the mod package. To make a thumbnail show up, simply include thumbnail.png alongside your info.json. The resolution is 144144 pixels, same as previously on the mod portal. From now on, the mod portal will only respect thumbnails provided in this way.

High Resolution Chests


Its common to think that the smaller is the entity the easier is to make it. Less pixels = less work. Well, not necessarily. Like an icon you have a very small space to express many concepts, material, use, style, etc. That means a lot of work in synthesis. Ive been making drafts and 3d sketches for chests for a while, and this is the best version Ive got for all of them:.
  • Wooden: Nothing much to change here, just a translation of resolution and details.
  • Iron: Before we had confusion between Iron and Steel. Now the difference is much clearer.
  • Steel: More modern and industrial looking. Like a shipping container.
  • Infinity: Not everybody knows this chest exists because its made for testing reasons, you will find it in the map editor.
  • Logistics: The design tries to emulate the style of the Roboport, and we introduce a new concept, an animation for opening/closing the doors.

High Resolution Rocket Silo


There are not that many entity graphics remaining that we have not touched in the last few years, be it a conversion to high resolution, a redesign, or both. The Rocket Silo has several specific qualities that make it very intimidating, and now time has come to face them. We recognized that the design of the Rocket Silo you can see in 0.16, has various issues we would like to address. On the first sight it is obvious that it does not fit into the visual style of Factorio too well anymore, and looks out of place. Not just because its very dark, but also because the giant 9x10 tile entity is completely filled into a rectangular shape. This majorly contributes to it looking like a rectangular sticker on the screen instead of an integrated entity in the world. A lot of the elements in the old model were too blocky and artificial for the modern Factorio look. Over time we have basically replaced all of the areas of the model with new meshes. Albert helped me by creating the robotic arms and their housings in the concrete base of the rocket silo that you can see below. https://cdn.factorio.com/assets/img/blog/fff-283-rocket-silo-preparing.webm When we started working on the high resolution redesign of the Rocket Silo, the first decision we made was that it will now be a 9x9 entity so you could rotate the blueprints properly, and it was clear from the start that we want to make fit on the ground more. This would mean that the structure at the top of the original rocket silo would have to go, and the hole would be moved more towards the center of the entity. The Rocket Silo without the rocket uses sixteen 8192x8192px textures which makes our 1080Ti run out of VRAM to render.. Luckily I have made the rendering as optimized as possible through python scripting as always. Worth noting that without our long-term focus on automation and proper workflow, this could have been a massive problem. It would not have been normal if we did not need to edit things in the code or fix things, and since the Rocket Silo has an obscene amount of layers, layer switching and other crazy quirks in its animation, our beloved posila helped us fix all those issues, though he may have mentioned a few nasty words to himself along the way, and his commit messages contained words like 'black magic' more than once. Last but very far from least, the Rocket Silo has one huge benefit - a lot of the animation happens procedurally which means the source images themselves are static PNGs. This allows for a lot of flexibility and power in Photoshop post-production that we cannot afford with heavily animated entities like for example trains. This made the end of the process extremely enjoyable and allowed us to finish it really properly.

0.17 on track


As you can see, there are a lot of things happening at the last moment, but it seems that there shouldn't be a big obstacle in the way of release next week. As always, let us know what you think on our forum.


[ 2019-02-22 17:43:19 CET ] [ Original post ]

Friday Facts #282 - 0.17 in sight

Read this blog post on our website.

The release plan


This week was the time to close and finish all the things that will go to 0.17.0. Not all of the things that we originally planned to be done were done (surprise), but we just left any non-essential stuff for later so we won't postpone the release any further. The plan is, that next week will be dedicated to the office playtesting and bugfixing. Many would argue, that we could just release instantly and let the players find the bugs for us, but we want to fix the most obvious problems in-house to avoid too many duplicate bug reports and chaos after the release. Also, some potential bugs, like save corruptions, are much more easily worked on in-house. If the playtesting goes well, we will let you know next Friday, and if it is the case, we will aim to release the week starting 25th February.

After release plan


Since there are a lot of things we would like to do before we can call 0.17 good enough, we will simply push new things into the 0.17 releases as time goes on. Even if 0.17 becomes stable in a reasonable time, we would still push things on top of it. We can still make experimental/stable version numbers inside 0.17. Most of the things shouldn't be big enough to make the game generally unstable. I've heard countless times a proposal to make small frequent releases of what have we added, this will probably be reality after 0.17 for some time. The smaller releases will contain mainly:
  • Final looks and behaviour of new GUI screens as they will be finished.
  • New graphics.
  • New sounds and sound system tweaks.
  • Mini tutorial additions and tweaks.
This is actually quite a large change to our procedures, and there are many ways we will be trying to maximize the effectiveness of smaller and more regular content updates.

The GUI progress


There are several GUI screens that are finished. Others (most of them) are just left there as they are in 0.16. They are a combination of the new GUI styles and old ones. They sometimes look funny and out of place, but they should be functional.

Blueprint library


The blueprint library changes have been split into several steps. The reason is, that there was a big motivation to do the integration with the new quickbar (final version introduced in FFF-278) in time for 0.17.0, while the other changes can be done after. The thing with the quickbar is, that it is quite a big change to one of the most used tools in the game and people generally don't like change even when it is for the better. To minimize the hate of the change, we need to "sell it properly". By that, we should provide as many of the positive aspects of the new quickbar at the time of its introduction. So the change that is already implemented and working for 0.17 is the ability to put blueprints/books into the quick bar in a way that the quick bar is linked directly to the blueprint library window, so you don't need to have the physical blueprint items in your inventory. The other change is, that picking a blueprint from the blueprint library and then pressing Q will just dismiss it, instead of silently pushing it to your inventory. This works the same as the clipboard described in FFF-255. You can still explicitly insert the blueprint from the library to an inventory slot, but if you just pick it, use it, and press Q, it goes away. In addition to this, other changes related to the blueprint library will follow soon after 0.17.0. The first thing is the change of how the GUI looks:
We will also allow to switch between grid and list view. It mainly provides a way to nicely see the longer names of the blueprint. We noticed that players try to put a large amount of info about a blueprint in its name, so we are planning to add a possibility to write a textual description of the blueprint.
The last big change is to allow to put blueprint books into blueprint books, allowing better organisation. Basically like a directory structure. Whenever a blueprint/book is opened, we plan to show its current location, so the player knows exactly what is going on.

The hand


Has it ever happened to you, that you have robots trying to put things into your full inventory, while you pick an item from it to build something, and then you just can't put it back, as the diligent robots just filled the last slot in your inventory by whatever they are trying to give to you? Wood from tree removal is the most frequent thing in my case. This was annoying in 0.16 from time to time, but with the new quickbar, it started to happen even more, as now, you have only one inventory, and no reserved slots in the quickbar. To solve that, we just extended the "principal" of the hand. When you pick something from the inventory, the hand icon appears on the slot. As long as you hold the thing in your cursor, the hand stays there, and prevents other things from being inserted there. This way, you should always be able to return the currently selected item into your inventory as long as you didn't get it from external source like a chest.
The hand is protecting the slot from the robots.

Terrain generation updates


Everyone has different opinions about what makes a good Factorio world.I've been working on several changes for 0.17, but the overarching themehas been to make the map generator options screen more intuitiveand more powerful. This was talked about somewhat in an earlier FFF (FFF-258) regarding ore placement,but since then we found more stuff to fix.

Biter Bases


In 0.16, the size control for biter bases didn't have much effect.The frequency control changed the frequency, but that also decreased the size of bases,which wasn't generally what people wanted. For 0.17 we've reworked biter placement using a system similar to that with which we got resource placement under control. The size and frequency controls now act more like most people would expect, with frequency increasing the number of bases, and size changing the size of each base.
New preview UI showing the effects of enemy base controls.In reality the preview takes a couple seconds to regenerate after every change,but the regeneration part is skipped in this animation to clearly show the effects of the controls. If you don't like the relatively uniform-across-the-world placement of biters,there are changes under the hood to make it easier for modders to do something different.Placement is now based on NamedNoiseExpressions "enemy_base_frequency" and "enemy_base_radius", which in turn reference "enemy_base_intensity".By overriding any of those, a modder could easily create a map where biters are found only at high elevations,or only near water, or correlate enemy placement with that of resources, or any other thing that can be expressed as a function of location.

Cliffs


We've added a 'continuity' control for cliffs. If you really ike mazes of cliffs, set it to high to reduce the number of gaps in cliff faces.Or you can turn it way down to make cliffs very rare or be completely absent.
Changing cliff frequency and continuity. Since cliffs are based on elevation,you'll have to turn frequency way up if you want lots of layers even near the starting lake.

Biome Debugging


Tile placement is based on a range of humidity and 'aux' values(humidity and aux being properties that vary at different points across the world)that are suitable for each type of tile. For example: grass is only placed in places with relatively high humidity, and desert (not to be confused with plain old sand)only gets placed where aux is high. We've taken to calling these constraints 'rectangles',because when you plot each tile's home turf on a chart of humidity and aux,they are shown as rectangles. It's hard to make sense of the rectangles just by looking at the autoplace code for each tile, so I wrote a script to chart them. This allowed us to ensure that they were arranged as we wanted, with no gaps between them,and with overlap in some cases.
Rectangles. Having the humidity-aux-tile chart is all well and good, but doesn't tell the whole story,since tile placement also depends on a noise layer specific to each tile type,and could also influenced by user-adjustable autoplace controls (e.g. turning the grass slider up).So to further help us visualize how humidity, aux, tile-specific noise, andautoplace controls worked together to determine tiles on the map,there are a couple of alternate humidity and aux generators that simply vary themlinearly from north-south and west-east, respectively.
Using 'debug-moisture' and 'debug-aux' generators to drive moisture and aux, respectively. This map helped us realize that, rather than having controls for each different type of tile, it made more sense to just control moisture and aux (which is called 'terrain type' in the GUI,because 'aux' doesn't mean anything).
Sliding the moisture and aux bias sliders to make the world more or less grassy or red-deserty. A pet project of mine has been toput controls in the map generator GUI so that we could select generatorsfor various tile properties (temperature, aux, humidity, elevation, etc) atmap-creation time without necessarily needing to involve mods.This was useful for debugging the biome rectangles, but my ulteriormotive was to, at least in cases where there are multiple options,show the generator information to players. A couple of reasons forthis:
  • It was already possible for mods to override tile property generators via presets, butwe didn't have a place to show that information in the UI.So switching between presets could change hidden variables in non-obvious waysand lead to a lot of confusion.
  • I had dreams of shipping alternate elevation generators in the base game.

Water Placement


For 0.16 I attempted to make the shape of continents more interesting. Some people really liked the new terrain, or at least managed to find some settings that made it work for them. Others called it a "swampy mess". A common refrain was that the world was more fun to explore in the 0.12 days. So in 0.17 we're restoring the default elevation generator to one very similar to that used by 0.12. Which means large, sometimes-connected lakes. The water 'frequency' control was confusing to a lot of people including myself.It could be interpreted as "how much water", when the actual effect was to inversely scale both bodies of water and continents, such that higher water frequency actually meant smaller bodies of water.So for 0.17, the water 'frequency' and 'size' sliders are being replaced with 'scale' and 'coverage',which do the same thing, but in a hopefully more obvious way.Larger scale means larger land features, while more coverage means more of the map covered in water.

New Map Types


In order to ensure a decent starting area, the elevation generator always makes a plateau there (so you'll never spawn in the middle oft he ocean), and a lake (so you can get a power plant running). Depending on what's going on outside of that plateau, this sometimes resulted in a circular ring of cliffs around the starting point,which looked very artificial, and we wanted to reduce that effect. In the process of solving that problem I created another custom generator for debugging purposes.This one simply generated that starting area plateau in an endless ocean.I don't actually remember how this was useful for debugging, but at one point I directed Twinsen to look at it to illustrate the mechanics behind generating the starting area. The rest of the team liked that setting so much that we're making it a player-selectable option. So in 0.17 you'll get to pick between the 'Normal' map type, which resembles that from 0.12,and 'Island', which gives you a single large-ish island at the starting point.There's a slider to let you change the size of the island(s).
Maps with multiple starting points will have multiple islands.
PvP islands! And speaking of scale sliders, we're expanding their range from a factor of 2 (the old 'very low' to 'very high' settings)to a factor of 6 (shown as '17%' to '600%'). Previously the values were stored internally as one of 5 discrete options,but as the recent terrain generation changes have made actual numeric multipliers more meaningful in most contexts(e.g. the number of ore patches is directly proportional to the value of the 'frequency' slider,rather than being just vaguely related to it somehow),we're switching to storing them as numbers.This has the side-effect that if you don't mindediting some JSON,you'll be able to create maps with values outside the range provided by the GUI sliders. Mods will be able to add their own 'map types' to the map type drop-down, too. If you really liked the shape of landmasses in 0.16 and want to be able to continue creating new maps with it, please let us know on the forum.

High-res accumulators



The design of the accumulator has been always good. The 4 very visible cylinders, looking like giant batteries, Tesla poles and the electric beams perfectly telegraphed its function in terms of style and readability. Thats why for the high-res conversion we were very careful about keeping this entity as it was. The only thing that was a bit disturbing (for some) are the poles crossing to each other when more than one accumulator is placed in a row. So we decided to fix it (or break it). The rest of the work was making the entity compatible for the actual look of the game. But in essence accumulators are still the same.
As always, let us know what you think on our forum.


[ 2019-02-15 16:45:44 CET ] [ Original post ]

Friday Facts #281 - For a Few Frames More

Read this article on our Website.

For a few frames more


Previously on Factorio Friday Facts (#264): "No wonder, scenes heavy on smoke or trees can tank FPS, especially in 4K. Maybe we should do something about that..."

Sometimes, it's just a bug


Writing technical Friday Facts helps me to summarize what I know, look at problems from a different perspective, and sometimes try to answer questions I haven't even thought of asking before. For example, I made the overdraw visualization just for screenshot for FFF-264, and while writing the FFF I didn't analyzed them. Just after the blog post was released I looked at it and started thinking - why does smoke create such a huge overdraw blob when it is just barely noticeable in game view? Well, it turned out it was largely due to a bug. Some time ago we optimized smoke particles so that they are only updated once every 120 ticks (2 seconds), and its animation (movement, scale and opacity) is interpolated during drawing. Thing is, particles are destroyed only during their update, if the lifetime of a particle ended somewhere in middle of the 120 tick window, the particle would be still drawn until destroyed. Because smoke fades away and scales up during its lifetime, it would be drawing itself fully transparent over a large area. Making the smoke particle not draw itself past its lifetime reduced number of particles being drawn by 15%, and reduced the number of pixels being rasterized even more. Additionally, particles below 2% opacity don't really seem to add anything to the final picture, so we can safely not draw those to get little extra boost.

Turret range visualization optimization


Probably only a very small number of our players actually run into this issue during normal play, but it is simple problem that we used to learn more about how to use GPUs more efficiently. Turret ranges in the map view are rendered as opaque geometry (no sprites) to an offscreen buffer which is subsequently drawn semi-transparently to the game view. This makes the turret ranges blend into single solid shape of the same color. Every pixel is written for each turret in range, but if it is written once, subsequent writes are unnecessary. We had two ideas how to optimize this. First, enable stencil test, so that pixels can be written just once. The second, pass a list of turrets to the GPU and test if each pixel is in range of any turret using a pixel shader. The stencil test idea yielded about 3x speed-up in our extreme test cases (20x20 turrets) which was not good enough - if your GPU had a problem with 3x3 grid, it would have problem again with 9x3 grid, which is not such a preposterous setup to have. The pixel shader idea turned out to be mixed bag - if the entire screen was in range, the shader would be lightning fast, but as soon as there were pixels outside of range, which meant shader had to iterate through entire list of turrets to figure out none covers it, performance started to drop off rapidly. In the worst case, it would be worse than without optimization. Jiri came up with idea to do prepass, in which we would render the geometry into a much smaller buffer (let's say 16x smaller in both width and height) and then in turret range shader we would check if a pixel is definitely in range (pixel in prepass buffer is fully opaque), definitely out of range (pixel in prepass buffer is fully transparent) or we don't know (pixel in prepass buffer is semi-transparent due to linear filtering) and we need to the pixel against the turret list. He did that and performance improved slightly, but not as much as we hoped for. After further investigation we found out the GPU really doesn't like the early exit in the pixel shader. Jiri managed to remove it by rendering all the certain cases first, while marking uncertain pixels in stencil buffer, and in another pass he would run the turret range shader on just stenciled pixels. This solution ended up being up to 20x faster in cases that were too slow with the un-optimized solution, but as you would zoom out more and there were more turrets covering less pixels on screen, the orginal solution would become better. So we turn on the optimization only when you are zoomed in enough. By the way, artillery ranges suffered from the same problem in early 0.16 versions, but they are so large it was good enough for us to test if entire screen is in range, and draw just single fullscreen rectangle in that case. Turrets were very likely to cause problems on low-end GPU even when not covering the entire screen.

GPU performance


As always, the root of all performance degradation is memory access. Since we mostly do just simple sprite drawing, the GPU has to read pixels from a texture, and blend it into a framebuffer. Which technically means reading pixels from another texture, doing some simple maths with the two values, and writing the result back. GPUs are designed to do this on a massively parallel scale and are optimized for high memory bandwidth while sacrificing memory latency. The assumption is you'll want to do at least a little bit of maths on the colors that you fetch from textures, to give the resulting image some dynamic detail. Every GPU core can then have many scheduled tasks and switch between them as the current task starts waiting on some memory operation to finish. When you don't really do any math to add dynamic details, and all detail comes from drawing more layers of sprites, the GPU cores quickly reach their limit of maximum tasks and every one of them is stalled by a memory access. That is not to say we don't hit memory bandwidth limits on some hardware. For cases where we do hit memory bandwidth limits, we added an option to do rendering in 16-bit color depth (as opposed to the normal 32-bit). This option is intended for old GPUs and integrated GPUs. An obvious way to improve this is to shade less pixels. This is something I mentioned before in FFF-227 by splitting tree shadows from tree trunks to remove large areas of completely transparent pixels. This can be improved further by drawing sprites not as rectangles but as generic polygons that envelope sprites such that most of the fully transparent areas won't be rasterized. This is something we will probably do for the most problematic sprites (trees and decoratives). Another way to reduce the number of shaded pixels is to simply to render in lower resolution. We actually do this for lights for a long time already, but it could be used for other effects that don't have important high frequency detail - for example smoke. Ultimately, some GPUs are not cut for rendering the game in FullHD resolution no matter what (for example Intel HD Graphics 2500 or multimedia cards like GeForce GT 710 and Radeon HD 6450 come to mind), so they would benefit from an option to render the game view in lower resolution with native-resolution GUI overlay. In FFF-227, I also mentioned mipmaps - downscaled copies of textures that are used when a texture is being scaled down. This helps to better utilize the caches on GPU, and therefore reduce the need to access main VRAM. We already used mipmaps for trees and decoratives in 0.16, but paradoxically some people had performance issues when they had mipmaps enabled. The problem is, in 0.16 we always use trilinear filtering for mipmapped textures. That means when you want to draw as sprite at 75% scale, the GPU will get a pixel from the 100% scale mipmap, and the 50% scale mipmap and average them to get the pixel for the 75% scale version. The access to two different mipmap levels would make things slower. In the new rendering code, we are able to control this, so for sprites that are likely to cause performance issues (for example smoke) we can just fetch pixels from the closest finer detailed mipmap.

Texture compression


GPUs natively support block compressed formats - the texture is divided into 4x4 pixels (or possibly different sizes in formats that are not commonly supported by desktop GPUs) and each block is compressed into a fixed number of bytes. Commonly supported formats on desktop GPUs are BC1-7. Most interesting to us, are:
  • BC1 (used to be DXT1) - Intended for RGB without alpha (or 1 bit alpha) with uses 4 bits per pixel (as opposed to the 32 bits raw RGBA uses).
  • BC3 (used to be DXT5) - Uses 8 bits per pixel - same format for color as BC1, but uses 4 extra bits for the alpha channel.
  • BC4 - Stores just a single color channel in the same format as the alpha channel in BC3 is stored (so 4 bits per pixel).
These formats work pretty well with normal textures, but not so well with 2D art that contains a lot of small detail. With our art it is not so bad as long as sprites are static, but as soon as we apply the compression on animations, even tiny changes in individual pixels results in larger changes in blocks that contain them, and the resulting animation ends up looking very noisy. https://cdn.factorio.com/assets/img/blog/fff-281-player.webm https://cdn.factorio.com/assets/img/blog/fff-281-player-compressed.webm Uncompressed vs. BC3 compression Awesomenouts developers described this in their blogpost on how compressed formats supported by GPUs work, what kind of artifacts it creates in their art, and what they do to improve quality. They store their sprites in a slightly higher resolution (for example 41% larger width and height) to spread the large frequency detail more apart. This makes compression less efficient but still worth it. The problem is, we can't really do this as it makes our sprites look pretty bad and blurry. During our initial experiments with compression, we deemed the quality of compression to be too low. In addition to that it somewhat slowed down the game startup as we built sprite atlases in an uncompressed format first and compressed them at the end of the sprite loading process. I left the 'Texture compression' option in, for people who really needed to use it, and it would compress only the sprites that usually blend over some other graphics (like color masks, shadows and smoke). The most commonly used image or video compression formats (like JPEG or H.264) exploit the fact that human vision is actually pretty bad at recognizing colors and is much more sensitive to changes in brightness. Instead of RGB color space they use of color space based on luma (brightness) and chrominance (color), and apply better quality compression to the luma component and lower quality to color components, resulting in a very high quality image to the human eye. Some smart people thought this technique could be used to improve the quality of GPU block compression formats. One of the ideas is YCoCg-DXT compression which uses BC3 as an underlying format and stores luma in alpha channel for higher quality compression and chrominance in RGB channels. Pixel shaders that use these textures need to do just a little bit of math to convert colors from YCoCg color space to RGB. We tried to integrate this (using separate BC4 compressed texture for alpha channel) and were pleasantly surprised by the result. You probably won't notice artifacts unless you zoom-in a lot and look for them. In fact, two weeks ago I enabled texture compression by default (and didn't tell anyone), and whenever I ask somebody on the team if they disabled it, they say they didn't know it was turned on. So I am pretty happy about that. The small downside is the need to use two textures (BC3 + BC4) resulting in 12 bits per pixel, but the best thing is, despite the pixel shader having to fetch from 2 textures instead of just one, the GPU is able to render up to twice as fast due to caches being able to fit more pixels in compressed formats than in raw formats. Luckily the paper contains the pixel shader code for compressing to this format on GPU, so we just had to adapt our sprite loading code to efficiently utilize GPU for compressing sprites as they are being loaded, so that the fact that we are compressing sprites during startup doesn't make the game load slower. In 0.17, the texture compression graphics setting is changed to a drop down list containing 'None', 'High quality' and 'Low quality':
  • High quality will use the custom YCoCg-DXT compression and will be the default on most computers.
  • Low quality will use BC3 and is intended for use only on really weak GPUs.
There shouldn't be any reason for you to disable compression, the option to do so is there mainly just in case some technical issue appears. Compression is applied to all sprites except the GUI, which needs to be as crisp as possible. Also, regardless of the texture compression option, shadow sprites will be always compressed using the BC4 format. https://cdn.factorio.com/assets/img/blog/fff-281-017-uncompressed.webm https://cdn.factorio.com/assets/img/blog/fff-281-017-high-compression.webm https://cdn.factorio.com/assets/img/blog/fff-281-017-low-compression.webm Uncompressed vs. High quality compression vs. Low quality compression After we added the high-res worms, biters, and spitters, VRAM usage rose up to 3.5GB (with high-res enabled, obviously) when no compression (even the shadow one) was applied. Compressing just shadows decreased VRAM usage to 0.16 levels of ~2.5GB. With high quality compression enabled, VRAM usage of sprite atlases currently is ~1GB (without mipmaps). This means, vanilla should be perfectly playable in high-res on GPUs with 2GB VRAM, and in combination with texture streaming these GPUs should be able to keep up in high-res even in cases when mods add a lot of new sprites. High-resolution sprites were originally intended for players with the most powerful computers, but in 0.17, they'll essentially become new standard. The goal is to eventually remove the 'low' and 'very-low' sprite resolution options, as 'low quality' texture compression on normal sprites + texture streaming should be able to run even on GPUs with very low VRAM sizes. Side note: I mentioned there are 7 BC formats. BC7 is intended for RGB or RGBA textures, and has potentially much better quality than BC3 with the same compression ratio. The problem is, the format was introduced with DirectX 11, so it is not supported by DirectX 10 class hardware, and it is not available in OpenGL on macOS. The second problem is that it takes a very very long to compress something into this format, because the compressor has to try out a large number of configurations for each block to find the one that yields the best quality. Since Factorio is kind of outlier in that its art is distributed in bunch of PNG files instead of having everything neatly packaged so that graphical assets can be loaded directly to the GPU, without any transcoding to a different format or dynamically building sprite atlases, we require a real-time compression solution. We are not eager to change how the game is distributed too much, for one having everything in separate files makes updates reasonably small when we change some of them, and having vanilla data completely open makes it easier for people to mod the game.

Now look at these graphs


We took some benchmarks of extreme scenes. The first one is on save from public Clusterio event last year. Twinsen sent me the save, because he was getting framerate drops in the middle of large steam turbine array. The second one is save from a bug report. I choose the save because it has rails going though forest and because I could really get low FPS on it even in 0.16, I used map editor to carpet the ground with grass decoratives. We tested on GPUs with 2GB or 1GB of VRAM, that we have in the office. Benchmarks on desktop GPUs ran on single PC (we just swapped GPUs between runs) - Intel Core i7-4790K, 16GB RAM, Windows 10. We measured the time a frame was being processed by GPU, for 1000 frames, and averaged out the results. We benchmarked against the 0.17 build from before GPU-side optimizations were implemented, unfortunately we don't have a way to capture GPU timings in 0.16. Tests ran in FullHD resolution (1920x1080) with high resolution sprites enabled, with a graphic configuration that I believe to be the best for rendering performance. For old build: Mipmaps, Atlas specialization, Separate lower object atlas, Texture compression options enabled, Video Memory Usage set to All. And equivalent configuration for the new build, except for using the new high quality compression option. We also included a result from one high-performance GPU (GeForce GTX 980 4GB), but this was ran in 4K resolution (3840x2160) as opposed to FullHD.The benchmark of Intel HD Graphics 5500 was ran on a laptop with Intel Core i7-5600U and 16GB RAM, and used Low quality texture compression instead. We also included results with 16-bit color depth enabled.



Times were measured in milliseconds. Lower times are better, and for 60 FPS, a frame needs to take under 16.66ms. If you are interested in how GPUs work more in-depth, Fabian Giesen wrote a nice series of articles on the topic. As always, let us know what you think on our forum.


[ 2019-02-08 15:12:12 CET ] [ Original post ]

Friday Facts #280 - Visual Feedback is the king

Hello, as we learned countless time before: Visual feedback is the king! Especially when the GUI is as complex as the Train GUI.

Train GUI part 2


The biggest missing feedback I could identify in the Train UI is not seeing the path the train is going to take, so it was the first thing we did: https://cdn.factorio.com/assets/img/blog/fff-280-path-visualisation.webm Adding a station by selecting it from the list of the stations is nice and all, but being able to interact with the minimap directly is an opportunity that would be a shame to miss, so we added the possibility to shift-click a station to add it to the schedule. Since visual feedback is the king, holding shift shows the path to the selected station, so you have an idea how is the train going to get there. The train can take a different path in the end, as there are multiple possible paths to the same destination, but in general this works well. https://cdn.factorio.com/assets/img/blog/fff-280-station-path-visualisation.webm The same goes for temporary stations, holding Control (the default modifier to add temporary stations) shows the path to that point. This can be also used to figure out problems in the rail network, as moving the mouse can help you to find out what section is blocked out because of bad signaling, missing rails etc. https://cdn.factorio.com/assets/img/blog/fff-280-temporary-station-visualisation.webm But once we allow any interaction with the map, the map needs be useful, so we allow to move and zoom the map the same way as the normal game map. The view is centered on the current locomotive by default, but once you start dragging, the link is cancelled, and you can move wherever you like. Pressing the button will center it again. https://cdn.factorio.com/assets/img/blog/fff-280-drag-map.webm As you might know, if the train has stations that are not available, the train skips them. But the reasons for it might be different, and it might not be that clear what is going on, so we decided to indicate the station state in the GUI, and give the player tooltip based info on why is the station is disabled.

When you have multiple stations with the same name, we show how many there are next to the name in the station selection window. It can happen, that a station is not available from the current train location. Reasons can vary. The stop could be in different train system, there might be a bad signal, rail problem somewhere etc. So we show the inaccessible train stops with a red color, and put them at the bottom of the list. We even have special feedback for stations being partially accessible, IE when not all of the stations with the given name are accessible.
It is a small thing, but an example of what we learned in the settings GUI. Hovering the button to remove a condition works normally, but hovering the button to remove the whole station also highlights the buttons to remove the related conditions, as they are removed along with them. https://cdn.factorio.com/assets/img/blog/fff-280-remove-visualisation.webm One of the most common ideas from last weeks discussion thread was some visualisation of the AND/OR condition precedence, which was quite easy to do. When you don't have a complex condition, such as a simple 'Time elapsed AND Inactivity', the visualisation won't show. Only when you have a combination of 'AND' and 'OR' conditions, will the precedence be shown. https://cdn.factorio.com/assets/img/blog/fff-280-boolean-visualisation.webm The last thing is not really GUI related, but rather a change of the train behaviour. We were asked many times, to support waypoints. A waypoint would be a stop in the schedule, where the train doesn't even stop, it just goes through it. Instead of having another checkbox settings on every stop for that, we just changed the rule, that no conditions on a stop means, that the train doesn't stop at all. https://cdn.factorio.com/assets/img/blog/fff-280-train-loop.webm If you want a Train to come to a full stop and then continue, you can add a 'Wait 0 seconds' condition. Implementation wise, the implications of this for the train pathfinding logic weren't that straightforward. Previously, each train pathfinding is done from its current position, to the next stop where it stops. But now, since the train might want to continue through the next stop at full speed, it needs to plan the path ahead through the next stop once it gets to the point of no return (the point where it needs to start braking to stop in time). This means, that the train pathing can be ahead of the current station target by many stops, and since the schedule works circularly, it can plan through the whole schedule 2 or more times. The fact, that all these things are finished now means, that the Train GUI chapter is closed and we can move on. There are a few nice ideas of what could be done to make the train schedule way more powerful in the endgame (Train names, Train groups, conditional stations), but this will have to wait until some future time. I believe, that this was the most complex UI we have done for 0.17, so it should only get easier from here on out :).

Tool bar


Related to the new quickbar, we had this idea of an easier way to access some game tools, especially blueprinting tools. This is how the Tool Bar came along.
The tool bar is a small section to the right of the quickbar that contains a customizable set of buttons for some commonly used actions or tools (or actions/tools that don't belong anywhere else). You can see the tools we have far in the image below.
The Tool bar has 2 sections: the main panel and the tool selection list. The list contains all the possible tools and allows you to pin them to the main panel, sort them, or use them directly. Pinned tools are visible on the main screen all the time for ease of use. The main panel will change its size to accommodate for the selected tools. If no tools are selected, the main panel minimizes itself into a small button that opens the tool selection list. All the tools related to blueprints were removed from the blueprint library and moved to the toolbar. Also they work a bit differently: when pressing "new deconstruction planner" for example, you will get a deconstruction planner that you can use immediately, and pressing Q will not place it in the inventory, instead it will place it back "into the button". This allows you to quickly deconstruct something without having to carry a "default" deconstruction planner around. Also avoids the situation where you end up with a bunch of different deconstruction planners in the inventory. You can of course still keep the deconstruction planner by explicitly clicking it in the inventory, quickbar, blueprint library, or any other inventory, such as a chest. The same behavior applies to the upgrade planner and empty blueprints. Some tools will display useful information in the tooltips, for example: Paste will show a blueprint tooltip of the blueprint in the clipboard. Special shortcuts will allow you to navigate through the "clipboard history". Undo will show a textual representation (possibly also a visual representation) of what will be undone. Such as "Undo construction of Transport Belt", "Undo construction of 35 entities and 250 tiles". Each tool will have it's own keyboard shortcut, so the tool bar will also teach players about these shortcuts through tooltips, hopefully to the point where they no longer need the tool bar. Mods will be able to add their own tools to the list, making it a nice place for players to access mod-created tools. Let us know what other quick tools would you like to see added to that list, or any other thoughts on our forum.


[ 2019-02-01 17:36:11 CET ] [ Original post ]

Friday Facts #279 - Train GUI Modern Spitter

Hello,

FFF motivation


This weeks Friday Facts are a good example of how they serve not only the obvious role ofinforming the community, but also helps us to divide the work into smaller chunks with individual deadlines. As this Friday Facts was scheduled to be about the Train GUI, we had to put special effort into finishing everything planned for the Train GUI, so it can be presented, and we can move to another task and 0.17 comes in reasonable time :).

The train GUI


We introduced the plan and mock-ups for the Train GUI quite some time ago in FFF-212. Many things changed since then, the final GUI style and rules are different now, and we also re-iterated the UX of it. But the main general idea of the layout remained. The train schedule is one big list with stations and conditions all visible, so you don't have to click through the list-box of individual stations to see the conditions.

Drag and drop


Previously, stations and conditions were added after the currently selected station/condition. Since there is no selection now, you just always add to the end. Changing station/condition order is done by drag and drop. The drag and drop was possible in the list-box version as well, but it was quite a hidden feature, as it was the only list-box in the whole game that allowed that, and there was no visual indication of that functionality. We also believe, that the visual feedback of re-arranging is now better than before. https://cdn.factorio.com/assets/img/blog/fff-279-drag-drop-017.webm

Wait condition visualisation


One of the things I always missed in the Train GUI was an indication of how much longer the train going to wait in the station. After some discussions, we decided to give visual feedback to all reasonable conditions by gradually changing the style of the condition frame to green as if it was a progress bar. The question is, how do we calculate the fraction of completeness for individual type of wait conditions?
  • Elapsed time - The most obvious one, as it is known how much time the train has spent in the station, and how much more is remaining.
  • Inactivity time - Also simple, similar to elapsed time.
  • Inventory full - We can calculate the fullness of individual cargo wagons and average it.
  • Inventory empty - Simply (1 - fraction of full) :)
  • Item count - Here it starts to be tricky. If the comparator is > (greater than) or (greater or equal than), we just calculate the amount of that item and divide it by the goal. If the comparator is anything else, I can't show a progress. I know how far I'm from the goal, but I don't know what to compare it to, so in this case, we just show either not completed at all, or fully completed.
  • Fluid condition - Basically the same as Item count.
  • Circuit condition - Here we just show nothing or full, as we can't really know.
The result is quite nice for simple cases: https://cdn.factorio.com/assets/img/blog/fff-279-full-empty-loop.webm And in more complicated cases, it can be a great tool to quickly identify a problem: https://cdn.factorio.com/assets/img/blog/fff-279-train-complex-conditions.webm

Temporary stations


The second most desired feature is temporary stations. The main motivation for them is the usage of trains for personal transportation. When I want to do that now, I have to:
  • Open the map and search where I want to go, and find the nearest station.
  • Remember the station name.
  • Enter the locomotive and add that station (by searching through the list) to the schedule.
  • Confirm some random wait condition.
  • Press the "go to the station" button.
  • When it gets there, delete the station from the schedule again.
With temporary station support, what I do is:
  • Enter the locomotive and find the place where I want to go directly in the map preview.
  • Ctrl+Click nearest rail/station.
Using the control click will select the nearest station or even just a rail, and set it as a target of temporary station. By this action, the temporary station is added in front of the current goal (if there is any) and is ordered to go there. Once the goal is reached, the station is automatically removed from the schedule and the train will continue to the goal it was headed to before adding the temporary station. This means, that I can carelessly hijack any train passing by for my personal travel, as it will continue its schedule once I'm done with it. It also adds some possibilities for when I need to send train from dried out mines into smelting and depots etc.

The modern Spitter


In the animation below you can see the new high-res spitter walking in 3 levels. As you can see we took the chance to work a bit different the same concept as before but integrating some new details that in my opinion makes them more interesting. https://cdn.factorio.com/assets/img/blog/fff-279-spitter-walk.gif Note: the colors are not necessary final. We keep the modular shell due the familiarity with the biters. Also for convenience with the color tint. The same way the modern Biter moves a bit closer to a spider concept, the Spitters are going more to a woodlouse or a small centipede. The point is it's flexibility at the time of shooting, also they shoot from far away from the target, so there's no need to look specially strong or agile. https://cdn.factorio.com/assets/img/blog/fff-279-spitter-shoot.gif The 'classic' design of the Spitters is based in the idea that they shoot from some height in order to bypass the walls of your factory with their acid spits. This is a nice concept, but at the time of walking it doesn't make much sense to keep standing up. That's why we took the chance of improving this feature, and we divided the modes of the Spitter in two: walking and shooting. Now when shooting, they stand up as before, but for walking they use all the legs. We also added this big mouth claws that open and close when spitting to give a better expression. The rest is pure fun. We have also been with Vaclav on the way they shoot...

Worm and Spitter stream attack (V453000)


With the new high resolution Worms (and now also Spitters), their projectiles started to look even more out of place than before. On top of that, a homing acid projectile makes about as much sense as a homing laser beam. We were quite sure we want Worms and Spitters to spit acid, but closer to how the flamethrower 'stream attack' behaves, so we started with that. https://cdn.factorio.com/assets/img/blog/fff-279-no-prediction.webm While visually it makes much better sense and the acid looks much nicer thanks to the work of Dominik (from the GFX gang, not pipe programmer gang) and Ernestas, the acid stream has a downside - it can easily be dodged. In fact, as long as you keep moving, the stream never hits you. Therefore we added predictive targeting to streams - so Worms, Spitters and Flamethrower turrets can hit the target unless it changes direction.It is still possible for the player to dodge them if they try, but with higher numbers of Worms it becomes a lot harder. https://cdn.factorio.com/assets/img/blog/fff-279-prediction.webm When the target too fast and/or the predicted position is out of range, the prediction is turned off. We will probably tweak this so that the prediction tries to go as close to the border of its range as possible. At some point even the homing projectiles from 0.16 miss so this is not much difference, the threshold probably comes a little earlier though. Where the acid stream hits, it creates an acid splash on the ground. The acid splash does damage to trespassers (currently not buildings), and applies a slow debuff. Enemies are not affected by the acid splash. To make the effect less binary (slow/fast), we added a tapering slow - at first it applies a lot of slowdown, but the effect linearly decreases over a few seconds until it disappears completely. All of the worms have a large enough stream attack that it damages more than one building if they are next to each other. Spitters smaller than behemoth do not possess this ability. https://cdn.factorio.com/assets/img/blog/fff-279-super-trooper.webm Some details and numbers are still being worked on, but with all of the changes combined, it should be more fun to attack biter bases. If you are not a fan of 'combat dancing', you can always just invest a bit more into military technologies and win with brute force. As always, let us know what you think on our forum.


[ 2019-01-25 17:40:42 CET ] [ Original post ]

Friday Facts #278 - The new quickbar

It's finally here


The proposal was first mentioned more than 1 and a half years ago, in FFF-191. Since then, we kept mentioning it in our blog posts and players kept asking about it. After a lot of back and forth within the team on whether we should implement it or not, and how it should work, we finally have it almost ready for 0.17.

The quickbar



To refresh your memory: the quickbar is changed from being a separate inventory to simply a shortcut bar to the player's main inventory. It will mostly work like the current quickbar, except item slots can only be filters. This means that when you place, for example, an Inserter in the new quickbar, it creates a shortcut telling you how many inserters of that type you have in your main inventory. Clicking the shortcut, will grab the first available stack from the inventory. That shortcut will stay there throughout the game, even if the inserters are depleted temporarily. This solves quite a few annoyances:
  • No more random items appearing in the quickbar as you craft them.
  • No more items moving to different slots when they get depleted and re-crafted.
  • No more using the quickbar to carry things around.
  • No more "will this be crafted to inventory or to the quickbar?".
  • No more confusion when shift-clicking an item if it will go to the quickbar or the trash slots, or somewhere else.
  • Guides the player to make proper shortcuts. Players are much more likely to remember shortcuts they created themselves.
  • Player is in full control of the quickbar instead of the game trying to be 'smart'.
  • Managing 1 inventory is simpler than managing 2 inventories.
  • Relevant item counts.
The main inventory size was increased by 20 stacks to compensate for the inventory slots that now became shortcuts.

The quickbar pages


A suggestion that quickly gained traction was the ability to configure and switch between multiple pages of shortcuts, not just two. So the new quickbar is actually 10 pages of shortcuts that you can configure as you like: e.g. a page for general factory building, a page for combat, a page for building trains, a page for building outposts, a page for oil processing, a page with utility blueprints. It's up to the player to configure these pages as they like.
When clicking on the button next to one of the selected pages, a page selector will open which shows all 10 pages of shortcuts. You can then easily select what page(s) you want to actively use and see on the main screen. The number of pages visible on the main screen is configurable. The page selector also acts as an extended action bar, allowing you to quickly grab an item or blueprint that you don't commonly use, or allowing you to quickly configure your pages. The default keyboard shortcuts changed a bit: keys 1 to 0 will pick the item in the slots of the top selected page. Shift + 1 to Shift + 0 will change the the top selected page. So an advanced player will be able to quickly swap pages to build what they want.

The ghost cursor


A feature for more advanced players is the ghost cursor: When selecting a 'buildable' item from the quickbar or when using the pipette tool, if you have no items of that type in your inventory, a ghost will be placed in the cursor instead. It's a common situation where for example you build something and you run out of inserters. So instead of crafting more or running to the other side of the base to get more, you can place ghosts, continuing to focus on designing what you are building instead of being distracted.
To avoid confusion for new players, this feature is off by default and can be turned on in the interface settings menu.

Integration with blueprint library


This is still work in progress, since big changes are also coming to the blueprint library. The plan is that you will be able to create shortcuts for blueprints from the blueprint library. This means you can place your most commonly used blueprints and books in one of the shortcut pages and use them directly from the blueprint library without clogging your main inventory.

Non-GUI progress update


There was some talk following last weeks GUI progress update, as to why we don't release now, and finish the GUI's during the experimental phase. One major clarification I'd like to make, is that it is not only the GUI that is not yet finished. While GUI is currently the largest task remaining to be done for 0.17, there are still some other non-GUI features that are yet to be completed:

Finalization of new Fluid system


The new fluid system (FFF-274) is almost complete, but it is yet to be merged into master. After internal testing we have been making efforts to tune the new behavior, specifically how throughput over distance and flow with different fluids works.

High resolution enemies


The new Biters and Worms have been showcased already in previous blog posts (FFF-259, FFF-268), and the last puzzle piece is the new Spitters. Alongside a graphical update, we have also been experimenting with some functional changes to the enemies.

Further map generation tweaks


We presented our most recent developments on the map generation in FFF-258. Since that post, there have been some further planned changes and improvements, specifically to the placement of tiles, biomes, trees, doodads, cliffs.

Playtesting, bug fixing, and design balancing


It seems to always be the case, but $nextUpdate is going to be the biggest Factorio release so far. While some initial playtesting shows that most things are stable, we have yet to have our typical office-wide week/fortnight of playtesting and tweaking. Inevitably things that we need to solve will come up during this playtesting, so it would be unwise to release before it is complete. There are also over 50 unsorted bug reports in our forum, which we will need to sort through. Looking over what is left to be done, It is clear to me that the release won't be ready in January. When we are ready to release 0.17, its launch definitely won't be a surprise. We will announce the exact date in the FFF at least the week before. As always, let us know what your think on our forum.


[ 2019-01-18 13:28:45 CET ] [ Original post ]

Friday Facts #277 - GUI progress update

GUI progress update


This is a continuation of the last status report from FFF-269. As it might not be a surprise, the biggest bottleneck of the 0.17 release is the GUI. I like to believe, that we have learned a lot from the pitfalls of the collaborative creative process of GUI. This is the typical way we were redesigning the GUI:
  • Two to three people started discussing what could be cool to change in the particular GUI. Some people randomly joined and left the ongoing discussion. Arguments to discard certain ideas have to be repeated over and over. Then the discussion is ended because of something.
  • A week later people start talking again, most of them forgot most of the stuff, or were discussing it with different people, so they assume some details of the changes to be understood by everyone, while they aren't.
  • They come to an agreement how it should be done.
  • They have a random discussion about it a week later and figure out, they had completely different ideas about how it should be done, they just didn't articulate them precisely. Both are kind of angry to have to reopen and re-negotiate the subject again.
  • Someone starts to implement the GUI, but half-way through it is uncovered, that there was another layer of misunderstanding when specifying how should the work be done, and we need to go to step 1 again and repeat.
Since many GUIs are thought and worked on in parallel, these situations overlapped and amplified the problems of mixing things up in our heads about what we agreed on in which GUI. Luckily, we eventually figured out, that it can't be done like this, and since there is a lot of work in the GUI, we need to make a process. It goes like this:
  • First, there is some general discussion about the GUI, all team members can share their ideas.
  • kovarex + Twinsen sit alone in the office, and discuss for some time (can be hours), all the pros and cons of how things should be done, and make some agreement.
  • Twinsen writes a detailed UX document about the GUI containing the structure, and more importantly the behaviour, in a detailed manner.
  • Twinsen + kovarex discuss the UX document and propose changes until they agree on the final version.
  • Albert + Ale take the UX document and create a UI mockup based on it.
  • kovarex + Twinsen + Albert agree on the UI mockup or propose changes.
  • Someone is assigned to implement the GUI based on the UX document and UI mockup
  • kovarex reviews that the implementation is correct and points out some inconsistencies that he can see. Part of this step is making sure, that we share as many GUI styles and code as possible across different GUIs.
  • kovarex + Albert have a final look on the implementation and fix final details until they both agree that the screen is fully finished.
Having the UX documents/UI mockups always available proved to be a huge time saver. Not only it helps us to solve the communication problems, we also don't have to remember and re-articulate decisions from some time ago as we can just open the document and see what we agreed on and instantly continue where we left off. A good part of this strict pipeline is that we now have better knowledge of the state of the work progress. These are the GUI screens that we hope to deliver for 0.17:
You can see, that there is still a lot of to do, but the work tends to accelerate as more and more of the GUI layouts/tilesets/standards are being finalized and reused. The conclusion is that 0.17 experimental in January is possible, but it might be February as well :).

The little details


Also, one of the reasons the work progresses slower, is that since we are making final versions of everything, we want to make it feel polished before we consider it finished, since there won't be time to come back to it. For example, in every settings screen, we have the 'reset to default' button now. The first logical step was to only enable the button, when some of the options are different from the defaults. But the next logical step was to somehow let the user know, what settings will be changed when he uses the reset button. So we simply highlight all the non-default settings when hovering the reset button, and it feels nice since suddenly you have instant feedback of what you can expect from the action. https://cdn.factorio.com/assets/img/blog/fff-277-reset.webm https://cdn.factorio.com/assets/img/blog/fff-277-reset.mp4 I understand, that spending too much time in settings GUI might not look like a good idea, since it is not used that much and the in-game screens are more important, but many of these principles we realize on the way will be useful when designing changes for the in-game GUI.

The scaling problem and solution (kovarex)


One of the many goals of the GUI rewrite was to make sure that the GUI looks correct in all possible UI scale values. By correct, we mainly mean, that the proportions of everything stay the same, so it is just smaller, but not deformed in a weird way. This might look like a simple thing to do, but it isn't as all the GUI values (sizes, widget positions, paddings etc.) are integer values, as in the end, every element needs to be on some specific pixel as long as we want it to be crispy clear. Imagine that you have a 1 pixel wide gap between two 20 pixel wide buttons and then you want it to show in 120%. The buttons are enlarged to 24 pixels, but the gap either stays 1 pixel or becomes 2, but the proportions of the layout changes. To solve this (and other issues), we decided to use something we call "modules". 1 module is 4 pixels in standard scale (100%), and almost everything is a multiplication of modules (sizes, positions, paddings etc). On top of that, we limited the possible scale values to be multiples of 25% (from 75% to 200%). This means, that the size of one module can be different (from 3 pixels at 75% to 8 pixels at 200%) but the proportions of everything stay the same, so it looks correct.
This works quite well so far, but it brings another problem for 0.17. I don't know if anyone noticed, but the item slots (inventory/logistic filters, crafting slots etc.) were intentionally scaled less than other UI elements. The reason for this was that the 3232 icons we have for all the items/fluids/recipes don't look good if stretched too much.
3232 icons that are stretched to 200% don't work good. But since we had to abolish this special rule for 0.17 we need to make sure that all the 3232 icons (285 items, 27 signals, fluids and more) will have to be provided in 6464 resolution, so all the supported UI scales will look nice. This is going to be quite a lot of work, but since we render the icons from 3D models anyway, it should be manageable. We will probably push the high-res icons to 0.17 during the experimental phase.

Procedural Wave defense


We have had the Wave defense scenario in the game for a few years now, and over that time I have collected a lot of feedback. One problem I have determined, is that the scenario really lacks replayability, due to the fixed map. Since the map doesn't change at all, once you have a set of blueprints and tactic that works, repeat plays are mostly boring. With recent changes and the great work by TOGoS, the procedural map generation is working really well, and is very reliable for a given set of settings. This gave me the idea, that it might be possible to make the Wave defense use a new map every time. I have been experimenting with some preset values, and I believe it will work really well. However I have some indecision within myself, and there are several advantages and disadvantages between a handmade custom maps and randomly generated worlds. Advantages of a bespoke map
  • The map can be specifically designed and tweaked for a better experience, I can test and iterate the way biters move through the map, adjust the placement of trees, resources, tune the difficulty etc.
  • We don't have to worry about map generation engine changes breaking the scenario.
  • It is a reliable experience for all players, people can share specific tips, designs and tactics that are more specific for the map.
Advantages of procedural maps
  • The scenario has much greater replayability.
  • We don't have to worry about migrating map data, tiles, entities, etc. to newer versions.
  • Any improvements to the map generation will be reflected in the scenario.
  • People can't cheese the scenario using other peoples blueprints.
  • We can add some configuration options for people who want to tailor the experience.
  • It is easy to add support for servers to continue running after victory/defeat.
So I am making the changes now to test whether procedural can work,and it shouldn't take too long as most of the scenario script will remain the same. I wanted to ask for some community feedback and thoughts: Have many of you played the Wave defense? Do you think a random map would be more fun? Do you think you would play it more if the map was different each time? As always, you are welcome to let us know what your think on our forum.


[ 2019-01-11 16:23:05 CET ] [ Original post ]

Friday Facts #276 - Belt item spacing Script rendering

Hello, the office is slowly ramping back up after the Christmas and New year festivities.

Belt item spacing


Part of the final polishing and cleanup work of preparation for 1.0 is cleaning up and smoothing out some of the hiccups in the game. Many will remember FFF-266 where we talked about some of these upcoming changes and simplifications. One suggestion that came up was to adjust the belt throughput from its unfriendly 13.33 items/s. Belt throughput is determined by 2 variables, how far the belt moves items each tick, and how much space there is between each item. There is a visual requirement that belts only move integer number of pixels every tick, so that is 1/2/3 pixels for transport belt, fast belt, express belt respectively. This means the only 'allowed' way to change transport belt throughput is by changing the spacing between the items. The spacing currently is 9 pixels between items. The fact that each tile is 32 pixels, and that 9 is not a factor of 32, explains the odd throughput number. This spacing also leads to some undesirable behavior, such as when using the circuit network to read the belt contents sometimes the belt can fit 8 items, sometimes it can only fit 6, and the count will fluctuate between the two:
At this point it is quite obvious to reduce the spacing to 8 pixels, which is a factor of 32, and gives a nice even 15.00 items/second, which is what we have done for 0.17:
With a spacing of 8 pixels, belts now always fit exactly 8 items (4 on each side), so for instance, reading a fully compressed belt gives a reliable result:
The change overall gives a 12.5% buff to belts, provides nice round integers for calculating factory requirements, and removes a few oddities. A next step we are considering is tweaking the furnace recipes to match the belt speed, but that is a consideration for another day.

Script rendering


In the last few weeks I have been working on a system that allows mods to easily render geometric shapes, text and sprites in the game world. Like many modding features, the implementation of this rendering system was prompted by a modding interface request. When I first saw this request, I doubted the usefulness of adding a whole new API that needs to handle saving and rendering for just one mod author. A few months later, another mod author discovered a newly added method to create text that was only visible to one player and requested more features for it. Through further discussion with the mod author it became obvious that they were looking for a system to show some helper text and sprites to only one player. After other mod authors joined in to point out that the solutions implemented at the time were not sufficient, the idea of a script rendering system was dug out again and I picked up the task to implement it. Of course, one does not simply invent a new system without first finding out what the system should be able to do. Here I want to thank the regulars in the #mod-making channel of the Factorio discord. They were a great help in suggesting features and always happy to answer questions about what they render in their mods. I also consulted old modding interface requests on the forums to find out what features were desired, amounting to a total of 12 requests that are now fulfilled by the new system. With this information I wrote a rough design document that listed the desired features without considering their implementation. The current implementation of the script rendering boasts eight different object types. The basic geometric shapes being line, circle, rectangle, arc and polygon. Additionally, sprites, lights and text can be drawn. One of my main aims was to make the system as flexible as possible which I achieved by making every single property of the render objects changeable after creation. One example of this is that the size or orientation of a sprite can be changed without destroying and recreating it. This differs from the previous rendering that mods used. They would create many entity prototypes which had sprites with the desired orientation or size and then switch those out to change the orientation and size of the sprite. This frequent replacing of entities comes with a considerable performance cost which the script rendering completely eliminates. Furthermore, the rendering objects are simply identified by numeric IDs which are much more performant to handle in Lua than LuaEntities. Another advantage of this dynamic system is that nothing in the rendering relies on the data stage. Unlike the mentioned technique of using entity prototypes, the script rendering does not need prototype data. This means that scenarios, the so called 'soft-mods', can also make full use of this new system. https://cdn.factorio.com/assets/img/blog/fff-276-script-render.webm https://cdn.factorio.com/assets/img/blog/fff-276-script-render.mp4 The first big point in the design document was to allow any target to be either an entity or a position. This point with, the addition of entity offsets, works beautifully in-game. Objects can be 'attached' to entities or placed at static positions. Even a combination of the two is possible if an object like a line has multiple targets. Due to the attachment to entities, the render objects are deleted when the entity is destroyed. This leads to some very useful behavior: If mods for example want to simply place some text above all their entities, they don't have to handle deleting the text when their entities are mined by the player or eaten by biters. The second big point was conditional visibility, this means that it is possible to restrict the rendering of objects to certain forces and players. This will hopefully see use by the helper mods that prompted the implementation. This conditional visibility had also been requested in the past where it was handled as something that simply 'won't be implemented'. The main reasoning for this was the predicted performance impact of adding the player whitelist to many entities that the base game uses. This performance concern is irrelevant when using the script rendering because it is a completely separate system from the base game rendering. If you don't use mods you won't even notice that it's there and it won't impact game performance. https://cdn.factorio.com/assets/img/blog/fff-276-script-render-2.webm https://cdn.factorio.com/assets/img/blog/fff-276-script-render-2.mp4 In combination with other modding additions, the new render system opens a lot of interesting possibilities for mods to explore. In general, this new system means that mods no longer have to abuse entities like beams, smoke or flying-text for rendering. This opens up a lot of possibilities of new rendering options that previously could not be considered, such as custom fonts for text or easily changeable scale and orientation of sprites. So, mods authors, please think about what rendering options would be useful for your mods and request them on the forum if they are not already implemented. As always, let us know what you think on our forum.


[ 2019-01-04 15:20:34 CET ] [ Original post ]

Friday Facts #275 - 0.17 Science changes

It's the last Friday of 2018, and as such the last Friday Facts before the New year of 2019. We all hope everyone has had a great 2018, and looking forward to a lot more automation fun to come in 2019. Albert has produced a postcard for you all to share to give the year a good send-off.

0.17 Science changes


Science in Factorio or more separately, technologies and science packs, are the main progression mechanisms in the game, and all entities are unlocked by it. This is great but it also means that when we change or add almost anything to the game, it will certainly have some impact on science. Over time we have changed the technologies and science packs multiple times because their context and design goals moved and evolved with the game.
Before 0.15 we had a fairly linear progression of getting from Science pack 1 to Science pack 3 with increasing complexity, plus the go-fight-your-neighbours Alien science pack which didnt really require much factory/crafting. In 0.15 Kovarex introduced a new design where the player should be able to make a choice between different tech paths and get different benefits from each. The amount and price of these science packs also made the game significantly better paced and longer, meaning you have enough time in the game to appreciate the intermediate steps between upgrades, like for example, not ignoring Modular armor or Power armor Mk1. In 0.15 we also added infinite technologies with Space science packs, which give more sense to the large factories that never have to stop. During 0.15 we did some tweaks to Production science pack as we realized neither the Assembling machine 1 or Pumpjacks were the right ingredients... and it ended up a bit too simplified. I really like Kovarex general idea of the 0.15 science packs, but I also feel like its possible to improve the implementation in order to really make more out of its potential...

Current state - 0.16


Over time we have gathered a lot of experience through playing the game ourselves and feedback from reading your posts and comments about the technologies and science packs. Here are some of the issues we noted:
Military science pack
  • Gun turret in Military science pack is really expensive and the rest of the ingredients seem too small in contrast, which makes them feel redundant.
  • In the crafting menu, Science pack 3 is sorted before Military science pack, but when playing its almost certain that players obtain the military science first (except in peaceful mode), and Science pack 3 later simply because of the oil processing barrier which is hard for many.

Science pack 3
  • Science pack 3 suddenly adds the most amount of complexity (mainly oil mining, oil processing, setting up chemical plants), and a lot of extra resource requirements (4.5 times more expensive than the first two science packs combined).
  • Electric mining drill recipe in Science pack 3 has boring ingredients (Iron plates, Iron gear wheel, Electronic circuits) we use in multiple other places, and the Inserter in Science pack 2 is one of them. It is also the miner that raises the price of the science pack a lot.
  • Electric mining drill in Science pack 3 was supposed to hint to the player to expand production because things are about to get wild and expensive, but this hint doesnt seem to work well.

Production science pack
  • Production science pack has surprisingly few ingredients (two) for its expected higher tier.
  • The step from Science pack 3 to Production science pack is minimal in complexity - use the simplest oil processing result (Lubricant) to upgrade Engines from Science pack 3, and produce more of the same (Steel and Advanced circuits) for Electric furnaces. For the first time you need a steady supply of Stone bricks, unless you have their smelting automated for Walls or for the handful of Oil refineries you needed earlier.
  • There are not that many unlocks that the Production science pack alone would actually give you. The interesting ones require High-tech science pack as well so in the end there is little choice as you simply need both anyway. This in combination with the difference in complexity and price between Production and High-tech science packs, means that most players dont even realize that the design is that they can choose between the two science packs. Therefore its common to think that the High-tech science pack is obviously superior to the Production science pack... in fact even the name of the science pack implies that it is.

High-tech science pack
  • High-tech science pack is very expensive compared to the Production science pack.
  • The step from Science pack 3 to High-tech science pack is moderate in complexity but huge in price (crazy amount of Electronic circuits, Advanced circuits and smelting to support them).
  • Processing units in High-tech science pack are very expensive and the rest of the ingredients seems irrelevant and low tier.
  • High-tech science pack needs Copper cables as a high-throughput ingredient, which feels out of place to many people as you can craft Copper cables from the beginning of the game, and they dont feel very high-tech. But its cool that its a little different - makes you consider using direct insertion in the build or not etc.
  • Batteries feel quite low tier - if you want early laser turrets, robots or accumulators, its usually the first oil product you make.
  • High-tech science pack needs Speed modules which have a much less interesting impact on the game than Productivity or even Efficiency modules.
In short, Military pack could be nicer and cheaper, Science pack 3 is a huge difficulty spike, while Production vs. High-tech science pack balance doesnt really work. Lets have a look at what we can do about it.

0.17 science


While the design idea stays the same, the new science is trying to make the progression difficulty smoother and the places with choice more clear. We will try to achieve this in three steps - changing the names, recipes, and technology dependencies.

Step 1: Science pack names


The names will make more sense once you know the rest of the changes, but I think its important to set a dictionary first so the article is less confusing. One of the other factors which may have made things further confusing is that the naming convention of science packs is a mix of old science-pack-1,2,3 from pre-0.15 and unique names (military, production, high-tech, space). The idea behind this was that the specialized science packs get unique names, while the mandatory early game progression keep numbers 1,2,3. With the upcoming changes its a great opportunity to make this more consistent and fitting. Its noteworthy that we considered multiple options - whether we should keep the naming, give them numbered names or just name them by colours. Naming by numbers Giving them numbered names (1-7) would mean that any choices would be out of the window, unless we would add sub-numbers like for example Science pack 3A and Science pack 3B. Thats completely abstract though - would you ever remember which one is A and which one is B? Naming by colours The other option would be to just call them by colours - so many people do that already regardless. However, a lot of us also say green/red/blue circuits or yellow/red/blue belts. And thats completely fine, but the official name in the game should be representative about the differences. The main difference between a green and a red circuit is not the colour, but the recipe and complexity. Furthermore, I believe it has some value to have official 'formal' names, even if we know that we will call all of the things with simplified 'informal' names anyway. I believe that creating this informal language, in your mind or in the whole community, is subconsciously really cool. Youre calling things by their colour, its easy to remember and everybody understands each other - but only because you all share the knowledge of what the colour in that context means. To summarize; it would be best to have unique names which represent each science pack well, they should be a representation of its purpose, of the stage in the game and the recipe, be short and easy to pronounce, it would be nice if each science pack name would start with a different letter, and so on... The only slight problem would be that those names werent easy to find, but I believe now we have them at last:

Step 2: Science pack recipes


One of the most important aspects of the science pack is its recipe as it defines how many resources it costs, how complicated is it to produce, how much do you need to research before being able to produce it (because of prerequisites), and how much time it takes to craft it including all the ingredients.
We are happy with the first science pack, especially when it gets a nicer name that sets the tone for the whole game.
The second science pack is fine. Here the name was not very easy to find as 'green science' is used to unlock so many various things, but logistics are a big part of them (red belts, car, trains, stack inserters, robots). In general Automation + Logistics is the first, and mandatory, part of the game so they fit well together, and the ingredients (Inserter + Transport belt) are both related to moving items around. Especially since Assembling machine 1 does not have the 2 ingredient limit (FFF-266), Id say this option is not completely off the table yet so Im especially interested in what you think about this.
  • Piercing rounds magazine stays as its one of the more vital things to have automated for your health and well being on this planet.
  • Grenade stays as its a very useful weapon against large groups of enemies, like biters or trees.
  • Replacement of Gun turret with 2x Wall. This means more price balance between the ingredients so all of them feel reasonable, a lower price of the science pack in total, and now it requires Stone which is nice for variety and makes you automate Stone brick smelting you will need to craft Oil refineries.
  • It shows before Science pack 3 in the crafting menu.

  • Engine units and Advanced circuits stay, as they are the first intermediate products with longer crafting times and decent complexity, but they are not too resource expensive. You also need Engines for pumps/trains/cars, and Advanced circuits are useful for a whole bunch of other things.
  • Electric mining drill replaced with Solid fuel, giving you a lot more buffer room to produce something before your refinery deadlocks when one of the three oils has no use. The player is also much more familiar with item storage compared to the newly learned fluids at this stage so it is much easier to handle the possible deadlock. In general it also means that you don't need to rush towards Advanced oil processing to unlock cracking as early, especially if you send some of your Solid fuel to burn in boilers.
  • Since in the crafting menu it now shows after Military science pack, it would look weird that you get 2x Military science pack per craft, but just 1x Science pack 3. Now a single craft of Science pack 3 returns 2x as well. The ingredient count and crafting time has been increased to compensate. Its also more clear that both Military and Chemical science packs are in a different tier to the first two science packs.

  • Electric furnace stays. It has a nice recipe and motivates upgrading to Electric furnaces, which in turn motivates players to extend boiler-based power generation, or replace it with with either solar or nuclear. Maybe youre also motivated to build an external smelting because the 3x3 furnaces arent compatible with the old 2x2 ones, and external will likely be more expandable and use trains.
  • The Productivity module is not only an obvious choice because of the names and theme of getting more stuff produced. Using Productivity modules motivates you to extend your power setup since it makes machines eat more power, and extend your factory because it makes machines run slower, all while making you spend less time building mining sites. On top of that, its a common mistake that people research Productivity module 3 and then try to produce those immediately - which gets quite grindy because of the long investment return period of Productivity module 3 - but if you use level 1 first and work your way towards the top tier in smaller steps by upgrading to level 2 as a middle point, it becomes a lot more feasible. Since it is included in the science pack recipe, you are more likely to use Productivity module 1 earlier.
  • Rails. One of the coolest recipes in the game which also uses Iron sticks and raw Stone. Rails are also produced quickly while being relatively cheap - this means they can be used in high quantities in the science pack recipe to achieve the same 'high throughput ingredient' as 0.16 High-tech science pack had with Copper cables - except rails do not feel out of place because its never too late in the game to start building trains. The point of 'do you use direct insertion' is here twice as you can direct insert Rails into Production science pack machines, and you can do the same for Iron sticks into Rails (the ratio is also very nice by the way). The idea of making it easier for people to try using trains is also good.
  • Production science pack now returns 3x packs in a single craft, making it clear that it is a tier above Chemical science pack.

  • Utility science pack now returns 3x packs per craft, making it clear that it is the same tier as Production science pack.
  • Processing units stay, but their number is reduced from 3 to 2, it was just too many.
  • Flying robot frame is basically an upgrade to Battery and the Electric engine so it feels much more appropriate for a high tier science pack than either of those two did. And you are just a small step from worker robots - getting specifically Construction robots is one of the biggest power spikes that you get in the game - everything suddenly becomes much less tedious and defenses can be automatically repaired, while Logistic robots have their own share of awesome progression feelings when you get them, even just for personal delivery.
  • Low density structure. As hinted in earlier FFF-257, Low density structure is much more useful earlier on now, and since it is one of the ingredients for multiple advanced personal equipment items, it makes perfect sense to use Low density structure in the Utility science pack as most of the top tier personal equipment is unlocked by Utility science.

This recipe does not exist as it kind of is the process of the Rocket silo, but the values are representative. Note that it returns 1,000x science packs. The Space science pack is only influenced by Low density structures having a slightly different recipe (20x copper plate, 2x steel plate, 5x plastic bar), but other than that it is the same. Renaming of the science packs gave me an opportunity to rethink if it really should not be called Rocket science as many people have half-jokingly suggested.In my mind 'Rocket science pack' would mean you are trying to research some technology which improves rockets, which is not what is happening in the game. Space science pack tells me that I am discovering space, which is what the rocket is doing if you assume that the Satellite is sending you scientific data and the Rocket silo turns them into a bottle of scientific data, like any of the other coloured scientific data in the game. Also space is said to be infinite, and this is a science pack for infinite technologies.

The math


Numbers are definitely important when it comes to science packs as they are a significant portion of where your resources are spent. When iterating the different science pack recipes, it was immensely helpful to use a spreadsheet in combination with my favourite Factorio calculator (thank you very much for this useful tool Kirk McDonald). If you are interested you can find the full spreadsheet here.
The spreadsheet can be pretty confusing so lets just summarize the most significant points:
  • Oil is hard to quantify in the same formula as ore resources so its calculated separately.
  • Chemical science pack ore price is less than half of 0.16 Science pack 3 - the main hurdle is the complexity of oil processing so the oil price is also more.
  • Military science pack is significantly cheaper making it more viable earlier.
  • Using Productivity modules affects Military science pack very little as it includes no intermediate items, making it relatively expensive in the late game if you use Productivity modules for everything else.
  • Ore price of Production and Utility science packs is exactly the same, the Utility science pack is more expensive on oil.
  • The oil difference between Production and Utility science pack drops significantly with the use of Productivity modules.
  • Space science pack is more copper heavy because of the Low density structure recipe change.
  • The late game total ratio of Iron:Copper consumption is significantly different (1 iron : 1.4 copper), but Copper consumption is reduced more by Productivity modules (1 Iron : 0.76 Copper).
  • Coal and Stone are more relevant than in 0.16.
  • The total cost of all science packs combined is roughly 10% lower in ore resources, and about 10% higher in oil.
  • Another interesting number is the total crafting time required, which is also taken into consideration, as it basically says how large factory you need in order to craft the recipe at a given rate.

Step 3: Technologies and science unlocks


As its been hinted in FFF-245 earlier, one of the issues was the distribution of which technologies were unlocked by Production and Utility science packs. The same FFF also stated that we are trying to improve this and showed the tech trees for it. At that point the new science packs were not in our master branch yet so it wouldnt be wise to include them in that FFF. Now we have a newer version... Production science pack alone now unlocks:
  • Logistics 3 - Express belts always make sense for more production.
  • Level 3 modules - pimp my base, more production with less mining.
  • Automation 3 - faster Assembling machines with more module slots mainly for better utilization of Productivity modules.
  • Effect transmission - using Productivity modules with the help of Speed modules in Beacons - the recipe for moar production.
  • Coal liquefaction - very useful when you have a lot of coal but not enough oil. The Coal liquefaction recipe is also changed so its more useful - now it produces much more Heavy oil that you can crack into whatever you need, but produces less Light oil and Petroleum gas. If we cracked everything to petroleum, the maximum gain is almost doubled compared to 0.16.
  • Kovarex enrichment process and Nuclear fuel reprocessing
  • Worker robot capacity 2 - Better throughput for your robots - since you dont have the full Logistic system yet, this is just for de-Construction robots and less Logistic robots needed for each personal delivery.

Utility science pack alone now unlocks:
  • Worker robot speed 3 - More convenient personal delivery and personal construction goes very well with the theme of Utility science. Speed for Construction robots is also very helpful when you are in a Tank and a Construction robot is chasing you to repair it.
  • Logistic system - The ultimate factory utility tool. Without Production science you cant get ridiculous throughput, but you get the ability to move items by air.
  • Personal roboport, Power armor Mk2, Fusion reactor - More utility/personal equipment for combat, construction and faster movement.
  • Military 4 with Uranium ammo, Destroyer robots, Atomic bomb, Artillery.
  • High tier damage/shooting speed/follower robot count upgrades for military things.
  • Rocket control units - the final Rocket ingredient and Atomic bomb prerequisite.

With that the only technologies which require both Production and Utility science packs are:
  • Rocket silo
  • Space science pack (unlock of Satellite)
  • Atomic bomb (its fine if its super late game)
  • Upgrades like Inserter capacity, Worker robot speed/capacity, Mining productivity
During several playthroughs of very different settings and styles I have tried how viable it is to prioritize one or the other science pack (Production vs. Utility) and I got results I was very happy with.

Military upgrade technologies


Separately from any science pack rework, we have realized that we have a few too many technologies for damage/shooting speed upgrades.
In general the combat rebalancing Twinsen did for 0.15 is very good and all weapons have their uses, but in order to make for example Shotgun useful you have to invest a lot of time and resources into upgrades for it. This is hard to justify when you could instead research upgrades which benefit both Gun turrets and your Submachine gun and get a comparable amount of offensive power. A similar case happens in multiple places.
Please note that the icons above are provisional, but the solution is that we are merging all military upgrade technologies except Artillery upgrades into 5, which should make a lot of technologies much less redundant. The new technologies are:
  • Physical projectile damage - Bullets, Gun turrets, Shotgun shells, Tank cannon shell
  • Energy weapons damage - Laser turret, Personal laser defense, Distractor robots, Destroyer robots
  • Stronger explosives - Grenades, Rockets, Land mines
  • Refined flammables - Flamethrower turret, Flamethrower (handheld)
  • Weapon shooting speed - Bullets, Shotgun shells, Tank cannon shells, Rockets
Artillery, Follower robot count, and Laser turret shooting speed upgrades remain as separate technologies. The prices of these new upgrades are about double than what 0.16 individual upgrades used to be. However you almost always get more than two improvements in return and some of the science packs (Military, Chemical and Utility) are now significantly cheaper.
You dont get all of the upgrades from level 1 though. For example Stronger explosives level 1 gives only Grenade damage bonus, on level 2 it gives both Grenade damage and Land mine damage, and from level 3 further it influences Grenades, Land mines and Rockets. That way we avoid that you would get an upgrade for something far before you could actually possibly unlock and craft it. Also, it means for example Tank cannon shell upgrades do not have 7 tiers but just 2 (Physical projectile damage 5+ and Weapon shooting speed 5+), but instead they are expensive and very impactful.
All the weapons which have a shooting speed kind of make sense that they could be in a single technology, so we did just that. The Artillery shooting speed is separate mainly because its an infinite research unlike the Weapon shooting speed.
One of the reasons why for example Land mines didnt have their own upgrade technology is because it would be just another research. With this kind of grouping it is so much easier to add it into one of the categories without adding more technologies which would feel like bloat.
Personal laser defense is now also influenced by Energy weapon damage upgrades (which also affect Laser turrets), but on the other hand we decreased the base damage it does, and also decreased its power consumption so it is fun to use even with Personal solar panels early on, and if you invest into the Energy weapon damage, it becomes quite good later.
Combat robot damage was quite hideous because it didnt actually provide bonuses for all combat robots - just for the two later tiers. Defenders did still get upgrades, just from a different place - the damage and shooting speed upgrades for bullets. Now its much clearer as Defenders are kept the same way while the upgrade for Distractors and Destroyers are in Energy weapons damage which is clearly focused on laser and electric beams.
Both Personal laser defense and Distractor robots now have the same laser beams as the new high resolution laser turrets (FFF-228).

Rocket silo


With the military technology changes, Rocket shooting speed technologies no longer exist. This opens the question what do we put to the Rocket silo prerequisite instead of Rocket shooting 5... The answer is: Nothing. Putting any arbitrary military upgrade there just makes that weapon type mandatory to upgrade even if you dont want to use it. Not only that, but it was also the only reason why you would need to make Military science packs if your only intention is to launch the Rocket.
This makes it even more clear that the Military science pack is a separate branch of science. It depends on the progression of your factory, but its sole purpose is to deal with the distraction - the enemies - from your main goal. Biters by themselves already give you a very good reason to invest into Military science regardless and its unnecessary to force the Military science pack on people who play without biters - just because of the few Rocket shooting speed (or any other) military technologies that you dont even make use of. Or maybe you play with biters but are badass enough to just use more unupgraded Gun turrets and launch the Rocket without any Military science packs anyway, well leave that decision to you.

Freeplay victory condition


Its late at night, you have been playing for a while now (again), you built all the assembly lines to make the rocket parts, provided the gluttonous silo all the parts it demanded. You can finally see the counter of rocket components say 100%. You watch the great animation of the rocket preparing. All excited you hit the LAUNCH button written in capital letters because this stuff is lit. Your emotions are through the roof, your eyes are desperately trying to remain dry. In feelings of pride and accomplishment, thinking about all the effort it took to achieve this great technological feat, you observe your great creation flying upwards. The epicness of the moment couldnt be much higher. At least until you see the following:
How many of you have seen this great message before and how many of you have seen it on your first rocket launch? Its really easy to forget the satellite, especially as the GUI slot for it only shows after the rocket is ready to launch. Not to mention that a new player might not know at all that the satellite even exists and is required. Mainly for these reasons, you now win the game by launching an empty rocket. The satellite is unlocked with the Space science pack technology and its only purpose is obtaining these science packs. The idea of an escape pod has been abandoned but we will might try to somehow use it in the campaign. Mods like SpaceX which redefine the victory conditions with a super-satellite can use a remote call to disable the default victory condition. As always, let us know what you think on our forums.


[ 2018-12-28 14:06:37 CET ] [ Original post ]

Friday Facts #274 - New fluid system 2

New Fluid system 2


Hi Factorians, Here is Dominik, with an update on the fluids. This time it is pretty much finished so I can tell you facts instead of just speculations. You will find how the new algorithm will work and some new handy usability features. In FFF-260 I wrote about how it all started, why we are doing it and what the plan is. There was a huge response from you all and I want to thank everyone for their contributions. Let me apologise to redditors, as at the beginning I started responding on the forums and when I realized there is reddit too, there were too many comments for me to handle. The forum users produced many ideas on how the system could work. About third of them was a fluid teleportation, many where known but many were entirely new and interesting. What intrigued me was the large variety of backgrounds they came from - differents kinds of engineers (mechanical, CS, electrical, ...), mathematicians, physicists, and even people with real pipes hands on experience. I wont go through them here, you can find them on the forums or reddit. There were two proposals on the forum though that were so good that they made it into the game - from quinor and TheYeast. Both of these proposals were very similar and kinda similar to the previous game logic. What it shares is that the mechanic still uses fluid physics simulation and volume in a pipe as a base for the movement calculation. As a result, not much changes on the first glance. What they add though is an emphasis on the fluid network update being independent on the current state (i.e. updating one pipe only depends on state from the last tick) and is therefore independent on evaluation order, which was one of the big pains of the old model that led to sometimes ridiculous junction behavior. Difference between these two was rather small - quinors version allowed perfect throughput with 3 passes over the fluidboxes (fluidbox is the thing managing fluids for entities, so I will talk about them), while Yeasts one was 2 pass with throughput. What was outstanding though is that TheYeast, a physicist, supported the model with a nice theoretical background and whats more, he made an amazing JS simulator to test and compare various modification of the model. Because that extra pass in quinors version was too high a price for the perfect throughput, I went with TheYeasts two pass one. Since the old algorithm only used a single pass run by entities for the update, I first needed to overhaul the whole system to allow accommodating the new one. Going from one pass to two passes necessarily means higher complexity, so we made a big effort to optimize everything we could to make sure we will still end up faster than 0.16. Kovarex wrote about it in FFF-271.

The new algorithm


The new algorithm follows realistic wave equations. It works with two variables.
  • The volume of a fluid in a fluidbox (FB) and the corresponding column height.
  • The flow speed in a connection between fluidboxes.
The exact behavior then depends on two constants:
  • C^2 - corresponds to the mass of the liquid. Affects how quickly changes (waves) propagate.
  • Friction - affects how quickly throughput drops with pipe length.
The first good news is that these variables can now be set for fluids separately so different behaviour can be achieved. E.g. crude oil pipeline will require some pumps while steam will be totally fine.
The two pass algorithm for one update (leaving out many details) is then as follows:
  • Update flow speeds on all connections A. d = difference of fluid column (input has always 0 and output has max) B. d *= c^2 C. (mechanism for damping waves) D. Flow speed += d E. Clamp the flow to take max of contents (otherwise we could get below 0 - remember that we only use last tick information); fluid can go over max temporarily.
  • Move the fluids along all connections A. Just move 'speed' amount of fluid from one FB to another
This algorithm is so simple and works so well, and also requires only very small changes, that it was a clear winner. The main downside is that it can only move of FB content in one tick, so FBs are enlarged to compensate. Another is that the fluids may seem to travel quite slowly into an empty pipe, but that is actually quite realistic and looks nice. The third issue might be some waves and oscillations, which are a result of the realistic model, and are very small with the current dampening model. This could be limited even further by introducing continuous fluid production/consumption, but it does not seem necessary at the moment. What you get over 0.16 is that the fluids now behave correctly and intuitively, performance is consistent (pipes to ground wont help you with throughput anymore), different fluids actually move differently.
As a small but handy improvement, you can now see flow rate information in the entity info of each pipe.
My big thanks go to quinor and mainly TheYeast for coming up with the model and doing a lot of work with me on tuning it and finding improvements to make the behaviour as nice as it is now. In case you are interested in more detail, see TheYeasts forum posts and simulator source code.

Efficiency


The overhauls and optimisations in FFF-271 cut the update time by some 50% and up to 10x on some high-end CPUs. Introducing the new algorithm made it immediately 30% slower. Long story short, through various fixes, including a small change that made the algorithm 1 pass again, this increase was cut down to 15%. So the overall result is that the fluid update is still a lot faster than it was before. I am still debating the segment merging, as it is not that simple and it would cost the simulation some detail. It is a low priority at this point compared to other parts of the update time.

Fluid Mixing



Thats right. No more fluid mixing. Once an empty fluid system (connected network of fluidboxes - pipes, crafting machines etc.) touches either a fluid or a fluid filter, the system is locked onto that fluid. It is then not possible to connect it to another system with a different fluid. There are quite a few actions which can result in merging systems, so each needed to be checked:
  • Building an entity with fluidboxes (Eg. pipes, pumps, storage tanks)
  • Setting a recipe with a fluid input/output
  • Rotating an entity

In order to use the system for a different fluid, the system must first be reset - by draining its fluid and removing all the filters. Please note that old saves have to work with this so if your save currently contains some fluid mixing setup, it will be automatically fixed upon loading it. This will be done during migration either by removing some fluids, unsetting recipes, or destroying entities if need be.

macOS developer needed


At the start of this week our long time macOS maintainer and web admin HanziQ let us know he was leaving the team and moving on to other projects. He has been part of the Factorio team for nearly 4 years, and in that time has contributed a lot to the game and community. We all wish him the best in his future endeavours. HanziQ leaving, along with the departure of our other macOS developer Ji, means we currently have nobody on the team to work with and maintain the macOS version of the game. This is a pretty significant issue, as we have the largely untested GFX engine rewrite due to be released with 0.17. If you know anybody who may be able to help us fill this position, please direct them to our macOS developer job listing.

Steam keys direct from us


We have long sold the game through our own website, which involves receiving a code and then registering an account etc. I have received quite some community feedback, and from this feedback we have decided to start selling Steam keys directly through our site. On the buy page you will be given the choice of a Website key or Steam key.
We hope this will be more convenient for a lot of people, especially for those wanting to gift a copy of the game this holiday season.

Steam awards 2018


The Steam awards 2018 voting has begun, and Factorio is nominated for 'Most fun with a machine'. There are also 2 other Czech games nominated for the same category, so the country is quite well represented.

Animal named after the game


A new species of scorpion Neobuthus Factorio was just identified and classified. My father has a hobby of going (not only) to dangerous places and identifying undiscovered species of scorpions and spiders. He offered to name one of his classifications after the game for fun. You can find the full publication here. As always, let us know what you think on our forum.


[ 2018-12-21 13:38:00 CET ] [ Original post ]

Friday Facts #273 - Cutscene controller Localisation plan

Hello, we recieved a lovely holiday gift from Steam this week:
The note reads: Happy Holidays! From the Steam Team The chocolates are delicious and do not seem to be lasting long...

Cutscene Controller


One of the things planned for the 1.0 release is a proper campaign and a tutorial-like New Player Experience. Both of these try to guide the player, and for that we sometimes need to divert the player's attention to a particular place in the virtual world. In other words, we need cutscenes. Basic cutscenes are relatively simple things:We need to take the control away from the player, move the camera around to show the things we need to show, and maybe display some messages on screen. Cutscenes are meant to be triggered and controlled by scenarios, so there needs to be a generic way for scripts to describe a cutscene. Inside the engine, player inputs pass through a layer called, unimaginatively,"controller". The 0.16 version of the game knows three controllers:
  • Character controller, where player inputs control the engineer entity in the centre of the screen.
  • God controller which is not tied to an in-world entity but rather allows the camera to fly around the world freely and interact with anything.
  • Ghost controller which does not allow the player to control the game at all.
The controller layer is the ideal place to take control away from the player in a cutscene. It is also a convenient place to move the camera automatically. Even better, Lua scripts can already change the current controller for any given player. Adding a new controller type to facilitate cutscenes was the obvious choice here. The new cutscene controller is created with a list of map positions to pan the camera to, along with how long each pan should take, and how long the camera should stay in that position. The controller figures out on its own how to move the camera between the specified points for that, it uses Cubic Hermite splines to make the camera movement nice and smooth. Once the controller reaches the last specified camera positions, it smoothly pans back to the starting position and restores the previous controller, giving control back to the player. Here is a short video of the cutscene controller in action: https://cdn.factorio.com/img/blog/fff-273-cutscene.mp4 Since this is all accessible from Lua, modders and scenario creators will be able to make a use of this new functionality in 0.17 from day one.

Rail clock


While working on the campaign, I ended up needing to do some work on cutscenes too. Inspired by a Youtube video I ran across by the venerable "arrow in my gluteus maximus", I decided that a great test case for cutscenes would be a static camera for a rail clock in the office, which could display the actual time.
Because of some technical issues, this needs to run as a multiplayer game, and it actually ended up exposing a few bugs in the cutscene implementation that only manifested in a multiplayer game, so that was a nice side effect. Here's a video of it in action: https://cdn.factorio.com/img/blog/fff-273-rail-clock.mp4 If you're a reasonably technical user, and would like to run one yourself, you can check out my rail clock repo. Unfortunately, as it does use various 0.17 features, you can't actually run this today, but once 0.17 is released publicly, it should work just fine. You will also need to use either Linux or macOS. Windows might work, but there is a python component involved which has never been tested on Windows.

Localisation plan for 1.0


For a long time we have been using Crowdin for all the non-English translations of the game. Over the course of the early access period this has served us really well, the majority of the contributions were of a high quality, and since we automated the fetching and packaging of the translations, it was a mostly hands-off system. As we approach 1.0 next year, we want to make sure that all parts of the game are as polished as they can be, so we are planning to have a 3rd party proofread and finalize the game localisation. While most of the current translations are really great, some of the languages we support have less than 50% of the strings translated and approved, so contracting another company to help fill out the rest is a reasonable course of action for us. However we need to know where we should prioritize our efforts, so that the languages we target and focus on are the most significant ones and will help as many players as possible enjoy the game. To gather some preliminary data, we have created a simple Google form with some questions for our community. If you could help us by spending a few minutes filling it out, we will be able to make a more accurate decision on which languages are most important. You can find the survey here. Furthermore, if you have any other suggestions or feedback on the localisation of Factorio, any companies which you would recommend, etc. please let us know. As always, the place to share these helpful thoughts is our forum.


[ 2018-12-14 13:53:03 CET ] [ Original post ]

Friday Facts #272 - Mod GUI

Hello, a large part of the team is attending GDS, if you are in Prague and interested in Games, you are welcome to come as well.

New Manage/Install/Update mods GUI


As we were going through the main menu, improving the looks and sometimes the interaction of most of the GUIs, it was obvious the mod management needed some attention. Most of the interaction was quite unintuitive and limited, making most players prefer using the web version and managing the files manually. Mods will be managed, installed and updated from the same GUI, the 3 operations being shown as 3 tabs. The interaction, arrangement and intuitiveness of the GUI should be vastly improved. It still won't have all the features of the online mod portal (such as discussions) but provides a very quick hassle-free way of installing and updating mods without having to deal with files.


Note these are just mockups, the in-game integration will be starting soon, and it should be done for 0.17. The most notable changes are:
  • Only mods compatible with your game version are shown.
  • The list of visible mods can be additionally filtered by their category.
  • Mods will have a picture when browsing the mods list.
  • When updating mods, you can clearly see version numbers, browse the changelog, and choose what updates, if any, you want to skip.
As usual I wrote an internal document to be used as a reference. It's quite boring and contains the same information, just more verbose. If you really want, you can see it here.

Invariants are required


In a version of Factorio long ago we had this recurring problem with items and inventories. When an item was added or removed from some inventory it's meant to generate an event about what changed. These events are used for a multitude of different things and allow for many code simplifications and optimizations such as "turn off the inserter until a new item shows up in the chest it's taking from". It used to work like this:
  • Code to remove/add some item in some inventory
  • Some logic with those items
  • Send the event about what changed in the inventory
However as with most things - things changed. Someone would add in new logic or just forget and not send the changed event. After all - programmers are human and we make mistakes. The issue kept recurring and was incredibly hard to test for because you can't write a test for some logic which doesn't exist yet: you can't test something is correct until you've written it and if you forgot to sent the changed event you can forget to write a test that checks you didn't forget it. The only solution I could think of to the "human problem" is to remove the human part of the problem. If we no longer needed to remember to write the code to send the event and it "just happened automatically" any time we changed items around then the problem would just go away. That invariant - that changing any item sends an event - solved the problem. However, it also taught me something: if some invariant is ever allowed to vary (aside from the obvious "an invariant that varies isn't an invariant") it's completely useless. Invariants are amazing tools. We can write tests to enforce an invariant. Programmers don't need to think about handling things outside of the invariant because they can always say: "it should work as the invariant describes so I just don't need to handle the other cases". If the invariant is ever broken it's clearly a bug and has a clear solution. Could also mention something like: Invariants also make for cleaner code because we don't need to add a lot of redundant error checking at every level of logic. As always, let us know what you think on our forum.


[ 2018-12-07 13:14:51 CET ] [ Original post ]

Friday Facts #271 - Fluid optimisations GUI Style inspector

Game Developers Session 2018


GDS 2018 will be taking place next week, running from Friday 7th to Saturday 8th. This year, like last year, we are silver sponsors of the event, which means you will see some Factorio branding around the event and in their official booklet. Part of the preparation on our side was to produce a nice graphical asset for their use, which you can see below:
The image is an aesthetic composition to showcase the design and theme of the game and its elements (while not necessarily making logical sense), and also contains the first public display of our new official Wube Software logo. About half the office team here will be attending the event, so if you are also going you might bump into us.

Fluid optimisations


We are tackling the fluid changes in 3 stages:
  • Move all the fluid logic into a separate system.
  • Merge straight sections of pipes into segments.
  • Tweak the fluid flow logic, which will not be an optimisation, but a gameplay mechanics improvement (FFF-260).
Dominik has just finished stage 1, and it has been merged into 0.17, so let me present what was changed, and how it helps. The approach is similar to what we did with transport belts (FFF-176). One of the main things slowing down the simulation is that every entity handling fluid (pipe, assembling machine with fluid connection, refinery, mining drill with fluid connection, pump, offshore pump) has to be kept as updatable and its update needs to be called every tick just to update the flowing of the internal pipes. So mining drills/assembling machines are being forced to do its logic instead of going to sleep. From the perspective of optimisation, every extra piece of data that needs to get to the CPU cache is like an extra weight you need to carry around. It slows the whole simulation down. The pipe is used just to call the inner update:
The other problem is, that the pipe memory is scattered around randomly. So we cut all the fluidboxes from the entities using them, and put them in a separate system (we call it the Fluid Manager). It is storing the fluidboxes like this:
The advantage of having data in continuous memory is mainly the fact that when CPU is copying the data from memory to cache, it is doing it in chunks, so when updating one thing, the next one is already in the cache. Modern CPUs are also smart, and they can detect continuous memory access, so they start prefetching the subsequent fluidboxes automatically in advance. But it is not that simple, as the fluidbox always has neighbours (as the flow is from one fluidbox to others), and one of the neighbours can be on the other part of the continuous memory, out of cache, so it is still not perfect. The next step was to divide the fluid boxes in something we call a Fluid system. A fluid system is basically all the Fluidboxes that are connected together. So, for example, in this refinery setup there are 5 fluid systems.
Each of the fluid system is now its own separate continuous memory of fluid boxes in it. The first advantage of this is that it increases the chance that the neighbours of a water pipe are close (memory wise) to the original pipe, the cached data from touching it for update could still be there when it is being touched as a neighbour. But the second advantage is even greater, as the fluid systems are now independent and fluid flow doesn't interfere with anything else in the map, their update can be completely parallelized without any worries. So we just did that. The final benchmark on a real fully producing map that uses pipes for production of materials and power (nuclear reactors), I was able to see a 6.5 times speedup of only the pipes update. The speedup wasn't so big on less beefy computers as it depends on the CPU, cache sizes, CPU core count etc. but was still around 3 times faster. I also expect the speedup to get bigger with bigger factories with more separate fluid systems and also with future CPU with more cores. Dominik did benchmarked every step with a real save game on his reasonable i7-4790k, and recorded with the following overall performance gains.
(The graph shows some unexplained intermediary steps.) Just a reminder that this is just a stage 1, before actually merging straight pipe sections into one fluid box which should improve things again. Even in systems with a lot of branching, as even 2 fluidboxes merged into 1 should help. In the example of refinery setup above, it seems that the fluidbox count could be reduced by factor of 4 or so. That should make the savings big enough to justify the planned 2 times slowdown of the future fluid flowing algorithm, as we will probably need 2 passes to make it work good enough. Dominik will have an update on the algorithm and conclusions from the previous discussions in a future FFF.

GUI style inspector


The implementation of several GUI redesigns is in progress, and it is being done by several team members. Suddenly we realized that coordinating more people brings new problems (what a surprise^^). We started to have mess in the styles, as everyone was inventing their own styles for the GUI to be same as the graphical mock-ups given by the graphics department. After some discussions of how to solve this, we realized, that we mainly need some common language with the graphical department when it comes to the style hierarchy names. For that we need everyone to be able to quickly inspect which styles are used where and what is the hierarchy. For that reason, we made the GUI style inspector. By pressing a key (Control + F6 by default), every UI element will show a tooltip with information about the widget and its style, and will highlight of the widget as well. We wanted to use it only internally first, but we decided, that if it shows some info for the GUI created by scripts/mods, like name and type, it might be also useful for mod writers to be able to quickly inspect what is going on.
We even use colors to help us navigate:
  • Red: The value was needlessly redefined (which was happening a lot).
  • Green: The style value that is being used
  • White: A style value that is not used as it is overwritten by a descendant style.
This tool (even when quite easy to add), immediately became very useful and it has already helped us to clean up some mess, and should improve the work efficiency when it comes to further GUI implementation. The main reaction when I showed this to the rest of the team was, "Why didn't we have this earlier?"... Well, better late than never. This also means, that we are showing quite a lot about how the GUI style is organized to the players, so we need to be extra careful about making it tidy, to avoid bug reports about 'the weird mess' in the styles. As always, let us know what you think on our forum.


[ 2018-11-30 15:34:46 CET ] [ Original post ]

Friday Facts #270 - HR Substation Save/Load overview

Steam Awards


Steam has opened up the nominations for this years Steam Awards. Last year Factorio was actually selected as a nominee for the 'Haunts My Dreams' award.
There is a category this year for 'Best Developer', and many in the community have wanted to nominate us for that category. Unfortunately to be eligible, we would need to have a developer page set up on Steam. We had some discussions, and decided to wait until we have a final 'Wube Software' logo and theme finalized before setting up a developer page. This means you won't be able to vote for us as best developer this year... This doesn't meant that you can't nominate Factorio for one of the categories, and there has already been some discussion on the subreddit about which games people are voting for.

HR Substation


The Substation was another of the entities we couldn't just render in double resolution, so it has taken quite some time and iterations to get to something we are happy with.

Deterministic save/load in Factorio


One of the key parts of the save/load process in Factorio is that it must be deterministic. This means that for a given save file (when no external factors change) saving, exiting, and loading the save shouldn't change any observable behavior. There are a few reasons and benefits for this strict requirement:
  • Without it: You couldn't join a running multiplayer game (and by proxy save, exit, and resume one).
  • Without it: the replay system wouldn't work if you ever saved, exited, and resumed playing.
  • With it: we can easily test that saving and loading produces no observable change letting us know we implemented save/load correctly.
  • With it: you won't see things change randomly as a result of 'reloading' like you do in so many other games.
The premise sounds simple enough: make 'running game -> save -> exit -> load -> running game' produce the same results every time (when nothing else changes). However in practice this ends up being quite complex. Factorio uses serialization and de-serialization (more), the exact format of the serialized save file changes from map version to map version so we always have to keep that in mind when loading. As a slight aside, we took some measurement of what parts of the map data take what amount of space in a typical uncompressed save game:
Saving the game is fairly straight forward: Loading however becomes quite complicated due to the variety of things we need to account for:
  • Map version migrations
  • Mod additions/removals/changes
  • Potentially invalid/corrupted save files
Over the years of Factorio development we've had a handful of strange bug reports about saves not loading which have been tracked to the loading logic previously not handling all of these special cases. A few notable examples:
  • When items are changed due to base game/mod migrations, it can change what type an item is, resulting in what used to be a module now being something else but still occupying an entities module inventory.
  • During loading the bounding box of an entity can change if the prototype data for that entity was changed (mod changed, mod added/removed). When the bounding box changes it can change which chunks the entity will overlap with. During loading it's expected that the number of chunks doesn't change. When the bounding box of an entity changes it can overlap with a chunk which didn't exist during saving.
  • When prototype data changes it can mean that entity bounding boxes have changed and what electric networks an entity was in could have changed.
  • When something is removed during loading (mod removal) we have to destroy them in a specific order because entities/items/electric networks can have references to eachother, and expect to be destroyed from a specific state in a specific order.
Overall the entire process has grown quite complex to the point where it's difficult for us to remember all of the special rules. With that in mind I spent a day earlier this week documenting the entire process for easier reference as to what the order of things is and why we do what we do. For those interested in an even more technical overview of the save/load process a copy of that document it can be found here. Also on the topic of loading, we have decided to drop support for loading maps from version 0.13 and 0.14 in the latest version, which mean when you get your hands on 0.17, you will only be able to migrate a save game from 0.15. However as it worked before, you can still download 0.16 to migrate from 0.13, then migrate from 0.16 to 0.17.

T-shirt for Christmas


It is approaching the festive season once again, and as such it has been nearly a whole year of selling our official Factorio T-shirts. Since moving to the new office, the merchandise operation has been given a whole double room to handle all the storage and shipping of the T-shirts.
Last year there were some cases where the orders didn't arrive in time for the Christmas tree, and a few people reported the packages taking over 1 month to arrive at their destination. We ship the orders from our office each Wednesday, so depending on when you order it can take almost a week for any shipping confirmation. Once it is shipped, a parcel will typically be delivered within a week anywhere in Europe, and take about another week or 2 to arrive in the USA and Worldwide. Outside of shipping each week, we can't make any promises on when the orders will arrive, so the best way to prevent any heartache, is to order from our store as soon as possible. As always, let us know what you think on our forum.


[ 2018-11-23 17:14:27 CET ] [ Original post ]

Friday Facts #269 - Roadmap update Transport belt perspective

Roadmap update


A lot of people have been asking recently, when can they expect a new release and when is the game going to be finished. The original plan was to finish everything, and release the final version of Factorio ideally before the end of 2018. This was the plan at the beginning of the year. We worked in our usual way of "it is done when it is done" for quite some time, but then it started taking a little bit too long, and we weren't even sure what is a realistic timeframe to finish it in. To help this issue, we tried to become a little more organized in the past few weeks. We went through our list of all the development tasks, and tried to finalize it. We removed all the things that we decided to cut, and added all the missing things that we need to do before the game is finished. Then we tried to make some kind of time estimate for each task, to get a general idea of when everything will be finished. We started to be more conscious of who is working on what, and how much time each task is taking, to know how accurate the estimates are. The result was, that if it all goes well, we could be done in 6-9 months. This is probably not something you wanted to hear. After a few rounds of discussions, we decided split the releases of 0.17 and 0.18 in the following way: 0.17 plan It will contain all the things we have done up to this point, mainly:
  • New render backend, which helps performance and solves a lot of issues (FFF-251)
  • The graphical updates: walls, gates, turrets, belts, biters, spawners, electric poles (FFF-268, FFF-228, FFF-253)
  • The GUI reskin (FFF-243)
  • New map editor (FFF-252)
  • Resource generation overhaul (FFF-258)
  • Robot construction tools (FFF-255)
  • Rich text (FFF-237, FFF-267)
  • And more...
It will also include some things we know we can finish soon enough, mainly:
  • Redoing some of the most important GUIs (Action bar, character screen, main game GUI, train GUI, play GUI, tooltips)
  • Fluid optimisations
  • And several smaller things, which depends on how it goes
We will release this during January 2019, we will announce it more precisely in advance. 0.18 plan It will become the final 1.0 version once it is stable. It will contain mainly:
  • New tutorial
  • New campaign
  • Final mini tutorials
  • Revision of rest of the GUI
  • All remaining high res graphics graphics and final polish
We obviously don't know exactly when is it going to be ready, but we hope it to be sooner than 9 months from now.

Transport belt perspective


Over time we have reworked many graphics, sometimes 'just' bringing them to high resolution, sometimes changing their design, and sometimes even changing their perspective.Our 'camera angle' is 45 degrees, which in 'real projection' would result in rectangular tiles, but in Factorio this is contradicted by our tiles being square. This contradiction makes for a whole lot of challenges which we are addressing more and more over time. You might remember the old rails, concrete with grid, or trains which did not stretch. Now we have found the solution for the last 'perspectively' incorrect entity - transport belts.
The basic idea is to give the belts some kind of a wall/structure to bring them off the ground, and create the illusion that they fit into the world correctly. The transport belts have two main limitations - the belt lanes of items are not to be changed, and the belt sprites already occupy a big portion of the tile so there is very little space to show anything extra.
It would be a shame to abandon the idea with the conclusion of "its impossible", when we do physically impossible things all the time, so we thought of exactly where we can go over the tile edge to get more space.
Because of how our sprite sorting works, going past the bottom edge of the tile should be safe, which gives the desired effect for horizontal belts and curves. Verticals need to be happy with just a few pixels for the structure, but on the right side we can add a shadow to show their height.
This is the smallest unit you can build in the game and demonstrate the concept. You can now see how belts reverse in the endings and see the reversed belt running underneath.
We have spent many hours with Albert trying to find the final shape. How big should the holes be to show the belt movement underneath, versus how massive should the holding structure be to demonstrate the shape. In the limited space every pixel matters, and the design you see is the one we arrived at after many iterations of experiments and tests.
Previously it didnt matter how the endings worked, because they 'just disappeared' into the ground. Since it is now possible to see the full loop, the endings are now much more constraining for the artist, because they need to have an exact integer amount of belt pieces in order to fit into the animation. A Normal belt tile has 4 pieces.For the ending, 3 pieces would be too long, and with only 1 piece you cant bend the belt, so 2 pieces is the only feasible option. That means the ending is still much longer than before, which invites a bunch of glitches and problems too, but most of them had easy solutions, or our sprite sorting 'just handled it'. This seems to work more or less until you see and realize that belt sprites are being flipped by the engine, which causes the shadows to break entirely, while the horizontal and curve lighting isnt having a great time either. In the following picture you can see that each sprite has 1 correct, and 1 wrong use, but its the same sprite so you cant fix the issue just by changing the sprite without breaking the other use.
Therefore we are finally getting rid of all flipping logic for belt sprites! Originally the flipping logic was there to save as much VRAM as possible because belts used to be a significant portion of all VRAM. Nowadays they are not, and it makes little sense to save memory at all costs on one of the most visible entities in the game. I already found the flipping super weird when I was working on the high resolution belts (FFF-154), mainly the fact that 3 of the defined curves would almost make a circle, but the fourth would be mirrored for 'reasons'. Now each 'rotation' has its own unique sprites, which allows us (and mods) to be a lot more creative with custom belt sprites, and it is much easier to work with. More problems were caused by exceeding the bottom and right edges of the tile. From some pieces drawing incorrectly over other pieces, through the shadows showing where they shouldnt, to belt endings and underground belts breaking badly in multiple cases. We were speaking about redesigning the underground belt structures with Albert multiple times already, and this was an ideal opportunity, but a redesign alone couldnt fix everything...
The underground belt structures are always drawn above belts and icons - that means if they go below the tile border, they draw over belts in the front tile which should not happen. You can see neither of the previous problems are present in the following screenshot:
Mods can now define back_patch and front_patch layers to underground belt structures. The front patch prevents the structure from overlapping with the belts in front of it. The back patch prevents the structure from overlapping with the items inside the structure.
The new underground belt structure now fits better to the rounded shape of the endings and covers everything it needs to cover, but in some cases it also reveals more than before!...
As a bonus, the underground belt structure has a variant which shows a hole when you side-load into the underground belt.
Its been a lot of work of iterating, fixing glitches, and solving problems, but you can see that the correct perspective makes the whole picture feel much more natural than before. We believe this will have a very positive impact on your experience in 0.17. As always, let us know what you think on our forum.


[ 2018-11-16 15:20:36 CET ] [ Original post ]

Friday Facts #268 - The modern Biter

The modern biter


Besides vegetable and plant stuff, biters are the main population on the surface of the Factorio planet. They are the locals, and somehow, from a twisted perspective, they can even be considered the bad guys. Not anymore. The magic of high resolution gives us the chance to move deeper into their conceptualisation and we've added a new ingredient to their formulation: cute...-ish. For the last couple of weeks Ernestas and I have been working on the new version of the biters. Together we worked on developing the concept and ideas behind them, and Ernestas was doing the rest: modeling, texturing, shading, rigging, skinning, animating, rendering, post-processing, and being patient with me and my constant comments and changes. Cute is how we like them, we want you to feel sorry about planning massive biter massacres. In fact we want you to feel pity towards them, especially when you are killing them and destroying their habitat at industrial scale. But also we want you to be disgusted by them, because they are alien to you, and they need to look the part, so it is quite a complicated equation.
Basically after the experience in-game with the classic version, we've learned what aspects of the biters are working well, and how to improve the parts which aren't. So we've decided to elongate their legs and accent their eyes in order to provide this more insectoid feeling. Also their new design is optimized for their attacks, they have 2 stronger front legs for providing destruction, 4 back legs to be able to run and stand during the attack, and stronger articulated mandibles to chew on your factories.
In these animations we can fully see the potential of disgust, the way they move now is more insect-like, similar to a cockroach (many people are disgusted by cockroaches), and also we've balanced the animation loop with their speed in the game, so they shouldn't slide around. Keep in mind that this is still a work-in-progress and we have some more tweaks to do and extra animations to make, like their attack and death. We are also working on their sound design, and apart from that we might have some other surprises to make killing them extra gratifying to watch.

Community Spotlight


Redmew is a Multiplayer community that has been working on some really interesting scenarios. One which particularly caught our eye was the Diggy map. In this scenario the player starts underground, with only a pickaxe, some walls, and a market to buy items. The walls hold up the ceiling of the map, and if you are not supporting the base as you dig-out more factory area, there is a risk of a cave-in. https://youtu.be/4cRsx-wl_fk Redmew also hosts other custom multiplayer servers, such as a PvP biter battle scenario, and servers with custom maps. If you are interested in knowing more, you can check out their Discord and Github. You can find the game servers by searching for "Redmew" in the matching server. As always, let us know what you think on our forum.


[ 2018-11-09 18:19:33 CET ] [ Original post ]

Friday Facts #267 - Experiments, Explosives Extended tags

Entity info experiments


The Entity info is the information about the currently selected entity that appears on the right side of the screen:
We had 2 problems with its current state:
  • As it is on the side of the screen, and the entity you are inspecting is generally in the center, it feels cumbersome to move your eyes from the entity to the info and back all the time.
  • As it is always appearing, it adds unnecessary clutter to the screen. It is always blinking there, while 99% of the time it is not really needed.
So we experimented with entity info as a tooltip next to the cursor when hovering the entity:
So we tested 3 different ways to activate it:
  • It always appears at the cursor, which has the disadvantage of always being in your way in the middle of the screen.
  • It always appears, but it has some delay.
  • It only appears when a hotkey is pressed (we tested it with Shift), which has the disadvantage that you have to actually do something to see it.
We assigned each of the options to be tested by someone, with the hope to figure out which (if any) of them is better than the current one. Vaclav tested option 1, Twinsen tested option 2 and I tested option 3. Unfortunately the result was that in the end everyone preferred his option the most, and we had no conclusion at all. Then we realized that the flaw of the test was that each of us picked the kind of option we already knew we would probably like. After some discussions, we decided on the following:
  • The current version of entity info will be the default.
  • We add an option to set a custom delay for it, that is different than the normal tooltip delay (or never).
  • We add an option to activate it with a key.
  • We add an option to have it next to cursor or on the side.
Two years ago, I was under the impression, that we need to eradicate all the weird options, to make the game just work for everyone. Over time and after all experience and feedback we have gathered, I started to realize that different people have different expectations, and their brains are wired differently. Some option might be useless for 99% or players, but for the 1% of players, it might be the most annoying thing to be able to customize it.

Cliff explosives with construction bots


The initial task, "Add support for robots to blow up cliffs", was easy. 1 cliff gets marked for deconstruction and 1 robot is sent to blow it up. The tricky part comes when you want to account for the fact that 1 cliff explosive can blow up more than a single cliff. When a robot is sent to blow up a cliff, the system has to do a little extra work:
  • Figure out which cliffs within the radius of the cliff explosive are also marked for deconstruction that aren't already going to be blown up by another robot.
  • Re-center the 'drop' position for the explosives on the gravity-center of the found cliffs.
  • Figure out which cliffs are within that new area and record that 1 more robot is on its way to blow them all up.
This extra work isn't for free, however the game isn't likely to have a large number of robots actively bringing explosives to blow up a cliff, since as soon as a robot is dispatched it quickly finishes the job and the cliff is permanently gone. Using this system the game can track if a given cliff is going to be blown up, even if it isn't yet marked for deconstruction. This way you don't get weird overlaps in robots flying out to cliffs that will be blown up shortly by another robot. https://eu3.factorio.com/assets/img/blog/fff-267-cliff-explosives.webm After making this system it has made me think if I could apply some variant of it to robots building things, so a robot could theoretically grab 3 inserters and build all 3 quickly in series. It's an interesting thought for another time...

Rich & Interactive Text 2


As we mentioned in FFF-237, we are going to be adding some fancy text effects to the game in 0.17. In that blog post we mentioned the possibility of having some interactive text elements, such as clickable icons in chat messages, blueprints, etc. Well, we have an update on that, as we have now implemented several of these features. These tags are created in a somewhat general way, if you have the console/chat open and shift-click something, it will insert a chat tag. Blueprint tags Hovering a blueprint tag will show the full blueprint info, and clicking it will create a copy of the blueprint in your cursor. https://eu3.factorio.com/assets/img/blog/fff-267-blueprint-tag.webm Map pings Shift-Clicking the map with the console open will create a map ping. Clicking a Map ping will open the map at the specified position. https://eu3.factorio.com/assets/img/blog/fff-267-map-ping.webm Recipe tags Hovering a recipe tag will show the full recipe info. https://eu3.factorio.com/assets/img/blog/fff-267-recipe-tag.webm Armor tags Hovering an armor tag will show you the armor and equipment layout for that specific armor. https://eu3.factorio.com/assets/img/blog/fff-267-armor-tag.webm As you can see above, each special tag has some [description] text associated with it, which lets you know you can interact with it. It will still be possible to insert plain icons that won't have any interactions. For now, 'interactable' tags will only work in chat, but they might end up being allowed in mod GUIs too. As always, let us know what you think on our forum.


[ 2018-11-02 14:42:37 CET ] [ Original post ]

Friday Facts #266 - Cleanup of mechanics

Hello... Part of the GUI rework for 0.17 is also tweaking the tooltips:

  • They should be structured better.
  • They should contain more useful information.
  • They should be a better tool for new players to understand how things work.
We will cover more of the tooltip changes in a future FFF, but the necessary preparation for this is to rethink the way we explain some basic properties of machines to avoid as much bloat as possible. One of the good ways to do that is also to remove the need to show some of the mechanics by simplifying them, or completely removing them if we figure out that they are not really important for the game.

Cleanup of mechanics


It has been quite a long time since the work on Factorio started, and we obviously couldn't see which mechanics/systems would be useful later on, and which would not. At that time, it was completely okay to just throw concepts into the game and see how it all works together. But now, when we are finishing the game, it is the time for cleanup. Time to identify which mechanics are just adding barriers to understanding the game while not adding much to the game-design aspect, a good example of something we already removed a long time ago is the old furnace mechanics. In the ancient versions of Factorio, the furnace mechanics were much more complicated. The furnace had to "warm up" before being operational, and if it wasn't used, the temperature went down again. This sounded like a nice mechanic, but it was soon discovered, that it adds little value in the scale of the factory, and it just bloats the games rules, so these complex mechanics have been removed from the the game for a very long time already.

Pickaxe removal


In the ancient times, you first had to create a wooden pick, to create a stone pick, to mine basic resources, to make iron, so you can make an iron pick. Yes... this was clearly Minecraft affecting our ideas. We identified soon, that this prequel of manual mining has nothing to do with the core of the game, and is an unnecessary distraction. The fact that it was the first thing the player had to do in the game was gravely affecting what new players thought the game is about. So we kept only the iron/steel pick to streamline things. Fast forward to these days and play-testing some of the tutorial tweaks. We noticed that players, when they start with Factorio, they often try to mine by taking the pickaxe into the cursor and doing the mining (as they might be used to doing from Minecraft or other similar games). https://eu2.factorio.com/assets/img/blog/fff-266-mine-with-axe.webm https://eu2.factorio.com/assets/img/blog/fff-266-mine-with-axe.mp4 So we were thinking how to improve the tutorial to avoid this mistake, but the next natural question was: "Why would we even need to have pickaxe in the game?". We realized that it is the item that you just craft in the beginning, and upgrade once in the middle for a steel pick, and that is it. The cost of it is zero compared to the factory output. It is just bloat. So the change for 0.17 is that we completely removed mining tools from the game. The mining speed at the game start is the same as with iron pickaxe, and the research that unlocked steel pickaxe just increases player mining speed accordingly and that is it.

Burner efficiency streamlining


We use 3 energy sources in the base game, burner, electricity, and heat. When an entity uses a burner energy source, it consumes the fuel, and the energy is used for it to function. Now lets say, that we want to answer this question: How many boilers can be continuously fed from a single yellow belt of coal? Lets look on the information the player can get:


So we will need to calculate how much energy is supplied by the value of the full belt of coal, which is 13.33/s * 8MJ = ~107MW. Now, we should divide by the energy consumption, so 107 / 3.6 = ~29. Wait, what is this efficiency, and do we have to factor it in? In the base game, this efficiency mechanic is almost completely useless, so we decided to remove it. To keep the previous balancing on the same level, all the fuel values have been halved, and the efficiency set to 100%. This just means, that the fuel value is the amount of energy the machines can actually extract from the fuel and calculations like this will give clear results. In this case, the functionality will still remain for mods to use.

Hardness, Mining power, Mining speed & Mining time streamlining


Lets start with a small quiz. Based on these two tooltips, are you able to calculate how much iron ore an electric mining drill will produce each second?

The answer is 0.525/s. The calculation is simple...
  • The hardness of the iron ore (0.9) is subtracted from the mining power of the mining drill (3) to get the adjusted mining power of 2.1.
  • This is multiplied by the mining speed of the mining drill (0.5), to get the adjusted mining speed of 1.05.
  • Since the mining time of the iron ore is 2, I divide 1.05 by 2 to get the 0.525 ores mined per second.
The hardness was supposed to be something like an "armor" of mining. It was meant to provide possibilities to define different tiers of mineable materials. However this feature was hardly ever utilized in the end. So the decision is that the whole hardness and mining power mechanics was removed. To make things even more straightforward, I made the mining time of stone and iron the same (stone was the only basic resource with different mining speed), so now, we can get the information needed as directly as this:

Calculating how many miners can fill a belt is now quite a straightforward task, and even with ores of non-standard mining speed, it is still much clearer, as the modifier should be understandable:

Resistances streamlining


We have 8 different damage types in the game now: physical, impact, poison, explosion, fire, laser, acid and electric. Every other building has some kind of resistance, and it got so much in the way, that we don't even show resistances in tooltips anymore, only for enemy units and spawners. The plan is to:
  • Reduce the number of damage types to something like: generic, impact, heat, and acid.
  • Keep the resistances mainly only on fight-related entities (walls, turrets, enemies) and remove them from the rest.
  • Show the resistances for everything except some very specific cases (fire resistance for rails and poles to survive fires etc.).
This is also related to the way these things will be presented in the tooltip, but that too is a topic for a future FFF.

Assembling machine ingredient limit removal


The idea behind this mechanic was that better assembling machines can use more complex recipes. But the reality is, that there is not really a clear connection between the number of ingredients and the complexity of the recipe. Since it was yet another thing that had to be explained somehow, we decided to just remove it. The only real downside is, that the achievement "lazy bastard" will be much less of a puzzle, but we still consider it to be worth it. As always, let us know what you think on our forum.


[ 2018-10-26 15:25:22 CET ] [ Original post ]

Friday Facts #265 - Nomenclature Steam networking

Factorio Nomenclature


Today I want to discuss some common problems that we see in video games. Inconsistent Terminology When I asked out loud "So what is an Intermediate Product anyway?", I got a similar reaction as when someone mentions The Berlin Interpretation at a rougelike convention. So what is an Intermediate Product? Well it is a product that is used only as an ingredient for something else. No, that's not right because Science Packs are not used in any recipe. So what then, Intermediate products are just things that you can use Productivity Modules on? Perhaps they are simply items that can be found in the Intermediate Crafting menu. Then are they not Intermediate Recipes? To give another example, answer these questions:
  • Name the action a player performs when they add an entity to the world?
  • Name the action a player performs when they remove an entity from the world?
  • Name the action a player performs when they add a ghost entity to the world?
  • Name the action a robot performs when they add an entity to the world?
  • Name the action a robot performs when they remove an entity from the world?
Here are a few situations where the game displays your possible answers:
A player builds.
A player mines entities.
Robots repair and build entities, but wait the player places buildings and builds ghosts?
But here Robots are constructing machines.
Here the robots are deconstructing items! This leads into a discussion about what is an item and what are entities, and that discussion leads us into the next point... Internal nomenclature leaking out During game development it is very common to use internal names to refer to mechanics, items, or characters. It does not feel like such a big deal, and many early access games simply ignore the problem completely. I'm not going to point any fingers, but if you look you will find some examples. Oh wait, here is some from your favourite early access game!
Internally, things that exist on a surface in the game are called entities.
All these items are capsules internally, but only 5 of them are actually labelled as capsules. Really, these should be categorised by how players use them, and indeed there is an attempt to do so. Remotes are items used to trigger an effect, Grenades are things you throw... but why is the Poison Capsule not called a gas grenade? There are more inconsistencies but to keep this article reasonably not-short, I will let you find the others yourself (and to save something for a future FFF about Tooltips). Why change? You might be thinking that this is not a big problem. Some others might be thinking that the problem is too pervasive to bother changing. There are a few reasons why it is important, the first, and most important of which is our quality mindset; everyone on the team here wants the game to be as great as possible. Next we should see this increase the quality of the translations. A translation is only as good as its source, and having a consistent usage of words can go a long way to helping the translators do better work. The effect of this can be increased by providing a dictionary of important words to the translators so they can be sure to always use the same term in all places. Since we are also working on a guided experience (Campaign), this would also help us give much clearer instructions to the player. An example of confusion here would be if one quest said "Place a chest" and another said "Place the item in the chest". The player needs to read the entire quest caption (probably twice), and can never build up a mental map of our language. This leads to the player spending more mental energy (cognitive load) while playing the game. Changing this to "Build a chest" and being consistent, allows the player to create mental shortcuts, meaning the quest tasks require less effort to understand. Finally, consistency in terminology will help new players, and I don't just mean sub-1 hour playtime players. Factorio is a 'Big Game' and players are encountering new items, entities, concepts, and text for a long time. How many hours did you play before you discovered this helpful trick, or this one? How to change? We could make the vocabulary consistent with what the current player base uses. This option sounds pretty good until I started asking people questions similar to those I asked you at the beginning of the article. Here are another two as a refresher:
  • Where do biters come from?
  • I come in 7 colors, what am I?
The only wrong answer is if you said there was only a single right answer. Prepare your rotten tomatoes, Ben is about to say something unpopular. The influx of players that are to be expected from 1.0 give us an interesting option. We could theoretically change the vocabulary of the game to be more consistent, reasonable, and generally more helpful to players. Then, as new players join the community, this new language will slowly replace the old. This would help ease communication between all players; veterans and new addicts alike. Consistency will also help polish the experience to the level that players expect from the game. Who should change it? Before Rseding jumps in with some awesome news, I would ask you to have your say in this Google form. It will be fun to see what you come up with, and I will publish the results in a few weeks.

Steam Networking


As many of you might know if you've tried hosting a stand-alone multiplayer game (Factorio or otherwise) from a home internet connection, it's not a very reliable experience. This can be due to multiple different things (bad home routers, company/school firewalls and so on). I arrived in Prague earlier this week and was given the task of improving that experience through Steam Networking support. The way Steam Networking works is: when you start a multiplayer game, the game can tell Steam that you want to accept connections from other Steam users. The benefit of doing this is if someone can connect to Steam, they can connect to you. Even if your local connection isn't setup to let the multiplayer game work, Steam can route the network data through it's existing connection and get the packets where they need to go. After a few days of working on it and testing it seems to be working and working reliably. You can just click "start multiplayer game", and anyone on your friends list can click join. You can mix non-steam and steam players on the same server and it "just works". As a bonus while working on this I discovered some issues with the non-steam networking logic that should improve the "Could not establish network communication with server" error that keeps coming up. As always, let us know what you think on our forum.


[ 2018-10-19 14:20:04 CET ] [ Original post ]

Friday Facts #264 - Texture streaming

Hello, it is me, posila, with another technical article. Sorry.

Bitmap Cache


In 0.16, we added graphics option mysteriously called "Low VRAM mode", it enables a basic implementation of texture streaming, but I didn't want to call it that way, because I feared its poor performance would give texture streaming a bad name. How it worked? Every sprite has specified some priority, and the "Video memory usage" option - despite its name - controls which priorities of sprites are included in the sprite atlases. What happens to sprites that don't go to atlas? They are loaded as individual sprites. Normally, these sprites are allocated into texture objects. The reasoning behind this is that graphics driver has chance to decide how it wants to layout these small textures in memory, instead of it being forced to work with huge atlases.
What part of a sprite atlas looks like. When you enable "Low VRAM mode", non-atlas sprites are loaded only to RAM, and texture is allocated for them only when used during rendering. We called class that handled this BitmapCache and there was maximum limit of how many mega-bytes of texture data the bitmap cache could use at once. When this limit was reached, it failed to convert memory bitmap to video texture, and Allegro's drawing system would fallback to software rendering, which absolutely tanked FPS, but this didn't happen... most of the time. So apart from the obvious problem of falling back to software renderer (which we don't have any more after the graphics rewrite, so the game would crash or skip a sprite if this happened), there are other performance issues. Most sprites have a unique size, so we can't reuse textures for different sprites. Instead, when a sprite needs to be converted to a texture, a new texture is allocated, and when the sprite is evicted from the cache, its texture is destroyed. Creating and destroying textures considerably slows down rendering. The way we do it also fragments memory, so all of the sudden it may fail allocate new texture because there is no large enough consecutive block of memory left. Also, since our sprites are not in an atlas, sprite batching doesn't work and we get another performance hit from issuing thousands of draw calls instead of just hundreds. I considered it to be an experiment, and actually was kind of surprised that its performance was not as bad as I expected. Sure, it might cause FPS drop to single digits for a moment from time to time, but overall the game was playable (I have a long history of console gaming, so my standards as player might not be very high :)). Can we make it good enough, so it wouldn't be an experimental option any more, but something that could be enabled by default? Let's see. The problem is texture allocations, so let's allocate one texture for the entire bitmap cache - it would be a sprite atlas that we would dynamically update. That would also improve sprite batching, but when I started to think how to implement it, I quickly ran into a problem dealing with the fragmentation of space. I considered doing "defragmentation" from time to time, but it started to seem like an overwhelming problem, with a very uncertain result.

Virtual texture mapping


As I mentioned in FFF-251, it is very important for our rendering performance to batch sprite draw commands. If multiple consecutive draw commands use the same texture, we can batch them into a single draw call. That's why we build large sprite atlases. Virtual texture mapping - a texture streaming technique popularized by id Software as Mega Textures, seems like a perfect fit for us. All sprites are put into a single virtual atlas, the size of which is not restricted by hardware limits. You still have to be able to store the atlas somewhere, but it doesn't have to be a consecutive chunk of memory. The idea behind it is the same as in virtual memory - memory allocations assign a virtual address that maps to some physical location that can change under the hood (RAM, page file, etc.), sprites are assigned virtual texture coordinates that are mapped to some physical location. The virtual atlas is divided into tiles or pages (in our case 128x128 pixels), and when rendering we will figure out which tiles are needed, and upload them to a physical texture of much smaller dimensions than the virtual one. In the pixel shader, we then transform virtual texture coordinates to physical ones. To do that, we need an indirection table that says where to find the tiles from the virtual texture in the physical one. It is quite a challenge for 3D engines to figure out which virtual texture pages are needed, but since we go through the game state to determine which sprites should be rendered, we already have this information readily available. That solves the problem of frequent allocations - we have one texture and just update it. Also, since all the sprites share the same texture coordinate space, we can batch draw calls that use them. Great! However we could still run out of space in the physical texture. This is more likely if player zooms out a lot, as lot more different sprites can be visible at once. Well, if you zoom out, sprites are scaled down, and we don't need to render sprites in their full resolution. To exploit this, the virtual atlas has a couple levels of details (mipmaps), which are the same texture scaled down to 0.5 size, 0.25 size, etc. and we can stream-in only the mipmap levels that are needed for the current zoom level. We can use lower mipmap levels also if you are zoomed in and there are just too many sprites on the screen. We can also utilize the lower details to limit how much time is spent for streaming per frame to prevent stalls in rendering when a big update is required. The Virtual atlas technique is big improvement over the old "Low VRAM mode" option, but it is still not good enough. In the ideal case, I would like it to work so well, we could remove low and very-low sprite quality options, and everyone would be able to play the game on normal. What prevents that from happening is that the entire virtual atlas needs to be in RAM. Streaming from HDD has very high latency, and we are not sure yet if it will be feasible for us to do without introducing bad sprite pop-ins, etc. If you'd like to learn how virtual texture mapping works in more detail, you can read the paper Advanced Virtual Texture Topics, or possibly even more in-depth Software Virtual Textures.

GPU rendering performance


The main motivation behind texture streaming, is to make sure the game is able to run with limited resources, without having to reduce visual quality too much. According to the Steam hardware survey, almost 60% of our players (who have dedicated GPU), have at least 4GB of VRAM and this number grows as people upgrade their computers:
We have received quite a lot of bug reports about rendering performance issues from people with decent GPUs, especially since we started adding high-resolution sprites. Our assumption was that the problems were caused by the game wanting to use more video memory than available (the game is not the only application that wants to use video memory) and the graphics driver has to spend a lot of time to optimize accesses to the textures. During the graphics rewrite, we learned a lot about how contemporary GPUs work (and are still learning), and we were able to utilize the new APIs to measure how much time rendering takes on a GPU. To simply draw a 1920x1080 image to a render target of the same size, it takes:
  • ~0.1ms on GeForce GTX 1060.
  • ~0.15 ms on Radeon Vega 64.
  • ~0.2ms on GeForce GTX 750Ti or Radeon R7 360.
  • ~0.75ms on GeForce GT 330M.
  • ~1ms on Intel HD Graphics 5500.
  • ~2ms on Radeon HD 6450.
This seems to scale linearly with the number of pixels written, so it would take ~0.4ms for the GTX 1060 to render the same thing in 4K. That's pretty fast, but our sprites have a lot of semi-transparent pixels. We also utilize transparency in other ways - from drawing ghosts and applying color masks, to drawing visualizations like logistic area or turret ranges. This results in large amount of overdraw - pixels being written to multiple times. We knew overdraw was something to avoid, but we didn't have any good data on how much it happens in Factorio, until we added the Overdraw visualisation:
The game scene being rendered.
Overdraw visualisation (cyan = 1 draw, green = 2, red >= 10).
Overdraw visualisation when we discard transparent pixels. Interestingly, discarding completely transparent pixels didn't seem to make any performance difference on modern GPUs, including the Intel HD. Drawing sprites with a lot of completely transparent pixels is faster than an opaque sprite without having to explicitly discard transparent pixels with shaders. However, it did make difference on Radeon HD 6450 and GeForce GT 330M, so perhaps modern GPUs throw away pixels that wouldn't have any effect on the result automatically? Anyway, a GTX 1060 renders a game scene like this in 1080p in 1ms. That's fast, but it means in 4K it would take 4ms, 10ms on integrated GPUs, and more that a single frame worth of time (16.66ms) on old, non-gaming GPUs. No wonder, scenes heavy on smoke or trees can tank FPS, especially in 4K. Maybe we should do something about that... As always, let us know what you think on our forum.


[ 2018-10-12 14:24:36 CET ] [ Original post ]

Friday Facts #263 - Trains in blueprints

Trains in blueprints


Building trains again and again might be a daunting task. Especially when you start making a lot of mining outposts, artillery/supply trains with filtered cargo wagon slots etc. So I decided that we should extend blueprints to work with trains as well. The first condition was, that trains are only selected when you explicitly allow it in the checkbox, so they don't get in your way when building rail setups.
Checking the button allows the train that was there to be put into the blueprint (similar to the way tiles work). For the sake of simplicity, we decided that once there is any rail in the blueprint, the train in it will be always buildable (as a ghost obviously), even if there are not rails to support the train at the moment. The train ghost will simply stay there and won't be buildable until rails are placed under it in a way so it can be placed.
https://us2.factorio.com/assets/img/blog/fff-263-train-rails-blueprint.mp4 https://us2.factorio.com/assets/img/blog/fff-263-train-rails-blueprint.webm If I remove the rails from the blueprint, I get a second type of rail blueprint. In this case, all the parts of need to have rails to support it, this is mainly needed as without rails, there is no rail grid forced, so we should make sure, the train ghost won't be created in some wrong position.
https://us2.factorio.com/assets/img/blog/fff-263-train-blueprint.mp4 https://us2.factorio.com/assets/img/blog/fff-263-train-blueprint.webm The small touch here is, that the blueprint also contains the schedule. With little-bit of improvisation, I can optimize the mine building a lot in the late game. I create a blueprint of mine train station. The stop will be called Mine X. Both of the trains in the blueprint will have the Mine X -> Smelting schedule setup. Once I build the blueprint, I just rename the Mine X to whatever I want (Mine 12 for example), and the train schedules are updated as well, so I'm almost ready to go. https://us2.factorio.com/assets/img/blog/fff-263-train-station-blueprint.mp4 https://us2.factorio.com/assets/img/blog/fff-263-train-station-blueprint.webm The last tweak I'm considering is to allow blueprints to contain the fuel insertion info similar to how they contain the module insertion info for assembling machines now.

Upgrade planner tweaks


When we showed it, the upgrade planner was Prototype ready, but playtesting uncovered various kind of missing tweaks, and as always the real usability is in the details. Especially since the mod already solves most of these issues, we have to at least be as good as the mod. The first problem was, with underground belts. With the naive approach of just upgrading entities that are selected, it happened quite a lot, that I upgraded some belt area, but I didn't notice, that some of the underground belts have only one side marked for upgrade, so the belts get disconnected when the upgrade is executed:
This was be usually discovered half an hour later when I was investigating the reason of some part of factory not producing. When it happened few times in a row, it was quite annoying... So the fix was, to make sure that the upgrade planner always upgrades connected underground belts in pairs if possible:
Part of the tweak is, that the robot upgrades both part of the underground belt as one action, so the items that are "flowing" underground don't have to be touched. The next thing we wanted was to not only upgrade entities, but their also contents, so you can now specify module upgrades in the upgrade planner as well. (Please note, that the upgrade planner/blueprint UI is a work in progress, and this particular screen was not yet addressed by our GUI polishing process).
Another feature is to be able to upgrade blueprints with the upgrade planner. The upgrade planner mod could do it as well, but we will be able to integrate it better with our GUI better.

You can immediately see, that another tweak might be to also upgrade the blueprint icons as well. My thanks goes to galibert, who created the original pull request of this feature (giving source access to stranger sometimes helps us) and Rseding91, who fixed the technical problems and added the tweaks mentioned earlier.

Finalizing features and latency state (technical)


It has been quite a long time since we described our latency hiding system in FFF-83. Since then, we have had to make a tough choice whether to incorporate a new interaction feature into the latency hiding or not as we developed it. With undo, it was kind of implied, that it needs to be incorporated in the latency state system, since you need accurate instant feedback of what you undo-ed, especially when you are undoing few things in a row, and you don't want to do more steps by accident because of the multiplayer delay. Since there are more and more things in the latency state, and they need to interact with each other in a reasonable way, the amount of possible cases starts to grow, so we have to make sure that the corner cases are covered by tests more than in other areas. Let me present you a quite simple case of what you see compared to what is happening in latency state under the hood, this is a simple thing: Start
Furnace built
Marked for deconstruction
Undone
But when you play in multiplayer, it might easily happen, that after the last undo step, not even the first command to build the actual furnace is in the game yet as the multiplayer latency might be too big. But as the local simulated state must act as it all was done instantly, it needs to solve different kind of situations What you see (latency state) / Actual game state Start / Start

Fake furnace created / Nothing yet

Fake furnace fake marked for deconstruction / Nothing yet

Fake furnaces fake mark for deconstruction fake undone / Nothing yet

Now real furnace fake marked for deconstruction / Furnace built in game state

Real furnaces fake mark for deconstruction undone / Furnace marked for deconstruction in game state

What you see is what you get / Furnaces mark for deconstruction undone in game state

Doing all of these kind of cases right might make a big difference between Prototype ready and Release ready. With the undo feature itself, I added 42 different tests and I'm not completely finished. As always, let us know what you think on our forum.


[ 2018-10-05 15:26:45 CET ] [ Original post ]

Friday Facts #262 - Hello my name is: Compilatron

In FFF-241 we discussed how the game delivers information to the player in a number of confused ways; Blinking arrows and circles, chat messages on the bottom left corner of the screen, objectives in the top left, orange modal boxes bubbles on top of the player, and so on. These problems are exacerbated on high resolution monitors, where the information becomes even further spread apart. We have tried a few ways to unify this information, but much of it was required to be in the world space, or needed to have a link between the screen space and the world space. The common solution to this is to have the GUI 'point' to an entity in the game world, but we wanted something more interesting.

Hello my name is: Compilatron


The idea for a robot sidekick in a video game is nothing new, but the solution fits to Factorio really well. When I arrived at the office and mentioned the concept, Albert immediately asked “Have you ever notice the forum FactorioBot?" and proceeded to show me some concept renders for the robot. Alberts idea had been discussed several times before as a solution to this very problem, just waiting for the right time. Well, Compilatron your time is now!
Albert's latest render of Compilatron, our companion character. The Compilatron character allows us to couple text and positional data together, which creates a much tighter connection between the subject of the information and the information itself. Previously, the orange modal boxes and blinking arrows could be used in this way, as they could point to entities in the world. Compilatron can do this without breaking the immersion and game flow.
We don’t want to reveal too much, but you can see that this is already better than the orange modal windows. Compilatron also gives us a hand with screen space information. If we can successfully style some of the user interface elements (such as the new as-of-yet-unshown objective window) to match the Compilatron style, I believe we can create an even stronger association between text in the screen space and that in the world space. Another way the Compilatron helps us keep the immersion intact is as a plot agent. Currently campaign plot events just 'happen' when objectives are completed, or when characters internal monologue decides the next move. Now we can have Compilatron act as a driving force to the campaign, it gives the objectives to the player, interacts with entities during cutscenes, and overall makes things less awkward than they are now. These are two of the major benefits of having Compilatron, there are also some more interesting things we can do with it in the future, The specifics of how Compilatron will work and interact with the player are still in development, so expect some changes from what you see here. So far I feel like the solution is working out, but not without some issues, the largest of which was working with the current Unit AI...

Compilatron - Technical additions


I have been working on the technical side of Compilatron, which should be of interest to the modders among you. Compilatron is entirely scripted through Lua, it is not a custom C++ entity at all, which meant we needed to add a few things to our scripting API to make it possible. First off, The Compilatron is a Unit, which means it is controlled in the same basic manner as the biters. As Units have never been used in the base game for anything but biters, there are quite a few unusual behaviours baked into the Unit control code, that didn't really make sense outside the context of biters. To fix this without breaking the base game, I've been adding prototype flags to units which disable these special behaviours by default, and enabling them only on biters (e.g., trying to return to a spawner every now and again, which can mess up your current command execution). These are being fixed on an ad-hoc basis whenever we run into them, so if you're a modder who's had some pain with this kind of thing, please let us know what you'd like to change. The most significant change I've made is probably opening up the pathfinder to Lua script. This means that you can issue asynchronous pathfinding requests that are not associated with an actual command, useful for e.g., checking if you can path from one place to another. Later on, we will also include the ability to issue a move order and pass in the computed pathfinding data, which would let you modify paths before executing them, or even write your own totally custom pathfinding in Lua. As well as what's mentioned above, there's been a whole host of miscellaneous changes and additions, including:
  • Script event on AI command completion, so you know when a Unit has completed its current command.
  • Allowing units to pathfind through friendly buildings (i.e. walk over to it, destroy it, then continue over the place it used to stand). Only when explicitly requested, of course.
  • Allowing units to path through and open friendly gates.
  • Added a whole bunch of flags to go_to_location commands, exposing pathfinder internals such a low priority pathfind requests, and prioritising straight paths.
  • Units will now avoid pathing through all friendly entities, as opposed to the old behaviour of only avoiding same-force entities.
  • Added new AI command stop, and improved the wander command significantly.
  • Added a new HighlightBox entity, that will draw a selection box around a specified entity or at a specific position.
  • Added a speech bubble entity.
  • Allow accessing Lua scripts by __MOD-NAME__/script.lua style path, so you can reference the same Lua scripts from multiple scenarios in one mod.
Klonan has already made a mod to help test and debug all the new modding commands, scripting, and API features: https://eu1.factorio.com/assets/img/blog/fff-262-mod-example.mp4 https://eu1.factorio.com/assets/img/blog/fff-262-mod-example.webm We're very interested in the benefits that these changes will bring modders "for free", so if you're an interested modder with some opinions/requests about this topic, let us know, we've started a specific forum thread for the topic here. As always, let us know what you think on our forum.


[ 2018-09-28 16:28:27 CET ] [ Original post ]

Friday Facts #261 - Performance + New player interaction

We have already pointed out, that we are trying to make a new campaign (FFF-245), and part of it is the core beginning, the NPE/tutorial. The tutorial is one of the very critical parts of the game, as if the first 15 minutes of a game feels shitty, there is big chance, that the player will not play any further. I had this experience in many games myself. So the challenge could be articulated like this: "The current tutorial is okay, but can we make it great?" The approach in the current tutorial is to feed the player with the basic knowledge of how to control the basics of the game (the first mission and the start of the second mission) in the fastest way possible.
The player is even given descriptive info like this, to diminish the chance of not understanding how the basic entities work.
After few steps in the 2nd level, the player can start exploring his first self-feeding loop (make iron to make more iron).
The tools used to this is mainly:

  • The message dialog that stops the game and explains the player various things.
  • Minimization of the amount of things the player can interact with to absolute minimum, so he can't start doing other things before the basics are clear.
The possible drawbacks:
  • The constant interruptions can get really annoying (typically around 22 message dialogs before the player starts to play relatively freely in the 2nd level).
  • The possibility, that the player will mindlessly follow the step-by step tasks without understanding it, so he can become really lost later on, and the tutorial basically wouldn't help him to understand things.
So the question is: Can we make a tutorial that makes these problems go away?, and alternatively, How big are these problems actually? The current direction of the new tutorial attempt is to never use the message dialogs, so the player can learn the game more fluently, and to leave way more things to explore, as learning things yourself has a better chance of success than force-feeding generally. We made a few tests of the new approach with a few people, the main takeaway, is that nothing is for free, and this approach created new drawbacks.
  • If the player doesn't figure out something basic, it can be very frustrating for him to figure out what is going on when not moving forward for a long time.
  • It might be possible, that some things are just not fun to learn by exploration, and it is more comfortable if they are force fed to you. I would compare this to a friend explaining you how to play a game for 5 minutes compared to 2 hours of trial and error.
There are more possible outcomes from this, and we shall see how different tweaks of both strategies work in the testings. It might be interesting if you mentioned your experience with the tutorial in the comment section as well.

Generic usability improvements


Regardless of the final tutorial approach we choose, we made some generic improvements that should help to avoid some of the pitfalls. Interaction error messages People sometimes struggled (in the beginning), to figure out why they can't interact with an object (open/mine/build, connect wires etc.) when it is too far away. We still keep the Beep Boop error sound and the different (yellowish) color, but we added a short flying text explaining the problem. https://us1.factorio.com/assets/img/blog/fff-261-not-reach.mp4 https://us1.factorio.com/assets/img/blog/fff-261-not-reach.webm https://us1.factorio.com/assets/img/blog/fff-261-not-wire.mp4 https://us1.factorio.com/assets/img/blog/fff-261-not-wire.webm This also includes GUI related stuff like this: https://us1.factorio.com/assets/img/blog/fff-261-not-ingredients.mp4 https://us1.factorio.com/assets/img/blog/fff-261-not-ingredients.webm https://us1.factorio.com/assets/img/blog/fff-261-not-hand.mp4 https://us1.factorio.com/assets/img/blog/fff-261-not-hand.webm https://us1.factorio.com/assets/img/blog/fff-261-not-machine.mp4 https://us1.factorio.com/assets/img/blog/fff-261-not-machine.webm Some of these error had description messages, but these were in the bottom-left corner in the console, but we observed, that since it might quite far from the mouse and focus of the player, it can be easily missed. Even if it is not missed, it is not that comfortable to look somewhere "far away" for an error. Highlighting of inserter/miner related entities When building/hovering an inserter, miner or any entity that inserter/miner can interact with, the corresponding entities are highlighted. This should help to understand the connection, and even for me, it is useful sometimes to see instantly, whether the inserter is one tile off or not when building it.

Performance tweaking


Sometimes, I wondered why is the performance in Factorio is very unstable. The update runs fine (lets say 5ms) most of the time, and from time to time, it takes much longer (16+), so the frame is skipped, so the game feels choppy. For a long time, I expected, that this is caused by some Factorio tasks that can peak once in a while (train path finding), but the weird realisation came, when I played multiplayer, and I noticed, that other people didn't have the problem, so I started to investigate. Browser I realized this long time ago when doing performance tests. Running any browser with modern (dynamic) page, or and browser related applications (slack for example) take more performance than you think. I could measure non-trivial increases in performance when I closed all these. Windows - performance options There is a Power options panel in windows (Control Panel → Hardware and Sound → Power options), you can select different power options. It mainly controls things like how long it takes before it goes to sleep, or when are the Hard disks stopped, but it contains more, notably the minimum processor state, which by default (in the default plan, is 5%):
With this settings, I am seeing performance similar to this on my test save Values are avarage/minimum/maximum in the context of the last 10 seconds.
While the default for high-performance is 100%:
With this, I am getting this result:
You can see, that the average time spent on update is roughly the same, but with the balanced mode, ther are quite big peaks of slowdowns that are happening regularly. You can test this yourself. The minimum processor state basically allows the system to somehow slow down or turn off some parts of the processor. Factorio works in a way, that it does a lot of work in the update steps (the 5ms time), and then, the update thread has to wait until the time of the next update. My theory is that when the thread is waiting for the next update, the system thinks that it doesn't need that much CPU power suddenly, so it slows down, but it doesn't switch back to full power fast enough when it is needed again in the next update. I would be careful with this, as I can imagine that having this option all the time might not be that a good idea, mainly for laptops, but if your game starts to be choppy because of performance, it is worth a try to set this option for the time when you play Factorio at least.

The forums update - part 2


The new forum theme caused quite some debate on the forum and in the office this week, specifically about the limited content width, and the result is that we added a slightly modified theme to scale the forum to the whole screen width. I would like to know your opinion, whether you prefer a limited content width, or prefer the content to fill your whole browser window, there will be a poll to vote in the forum post for this FFF. As is standard, you can leave us your thoughts and feedback on our forum.


[ 2018-09-21 13:19:21 CET ] [ Original post ]

Friday Facts #260 - New fluid system

Hi Factorians, This is Dominik, and my first FFF post ever! I will use this opportunity to talk to you about the exciting subject of pipes. Yeah, I know, right? Spring came and with it Twinsen, saying "Pipes suck. Two people already tried to fix it and failed, who wants to be next?", and I’m like "Hey, that’s just pipes, you just make a simple simulation, simple AF. I’m in." The conditions were even quite lenient:

  • Fluids get where they should.
  • They should act in a predictable manner, with reasonable splitting/joining in junctions.
  • Fluids can travel instantly, if need be.
  • Respect the pipe throughput limitations.
  • Flow can be viewed on the pipes.
  • Don’t do f**** up stuff like running in a circle indefinitely, sloshing back and forth endlessly etc.
  • Should be faster/more UPS efficient.
I am mostly working on the new GUIs, but still, the fact that summer is over and pipes are not done, kinda shows how simple fixing them is. Very naive I was.

Problems with the current system


There are couple mishaps in the current pipe system. Good thing is that they work - the fluids do get from A to B, in most cases anyway. It follows a simple elevation model, fluidboxes will try to equalise with their neighbours, which is quite fast to evaluate and solves the simple cases, but it does not address much outside of running through a straight pipe.
(Green column represents volume, Blue represents flow) The first of three main issues is that in junctions it behaves in a very random fashion. As a result, you might get recipients that are not getting any fluid where they obviously should be.
The second issue players voice is the limited behavior of the elevation functions. Only a fraction of the fluid is moved to its neighbour, so you rarely have a tank that is entirely full or entirely empty, which is a problem when you try to mix that with the integer based circuit network. The third issue is performance. Even though the formulas are simple, they are calculated for every connection in every fluidbox, which adds up. As a result, nuclear power is unfeasible for megabases. There are other problems too, such as throughput loss over distance, fluids moving faster or slower depending on the entity update order, etc.
(Fluid flows much quicker in the bottom pipe)

My simulator


The game is not at all practical for testing and debugging pipes, so I built a simple command line pipe simulator to develop the new system in. As I was attacking what I thought to be a simple problem, I started simple, and then had to refactor it several times whenever I realized that the problem is harder than what my simulator can support. I will shortly describe how it works, before going to the model itself. The pipe layouts are loaded from a text file such as “5 1 s p p d 0”, which is 2 dimensions of the system, followed by a 2d layout, in this case just one row source-pipe-pipe-drain-empty. The simulator loads the layout, connects pipes and then updates the system tick by tick on request. I get a very rough overview, as picture below, but most of the time I have to inspect the running code to see what is going on under the hood.
Though now with the new map editor and the ability to step through single ticks, it will be much easier to test in-game too.

Possible solutions


Before going to the current, simulation based model, I will shortly discuss other approaches that we have rejected. Optimizing the current system This is something Harkonnen tried a long time ago, to reduce indirection in the update of the fluidboxes. Essentially, instead of each entity updating their own fluidbox, all fluidboxes in a segment would be kept in a singular part of memory, and then the simulation could be updated much faster. Initial experiments showed a performance increase of 30-50% updating all fluidboxes. However this would not address any of the other issues, and would add a significant amount of complexity to the currently quite simple handling of the fluidboxes, which we decided isn't worth the price. Flow model Since we are doing flow here, flow algorithms look like a candidate. The most naive Ford–Fulkerson method, although theoretically infinite, could work super fast in our case. Problem is that it only finds the maximum flow - the top limit of what we can push through. We could then divide this max fluid flow between the consumers and kinda get a working results. But the behaviour on the way would be ridiculous with full flow through one pipe and 0 through next, 0 to dead ends etc. In other words, the junction behavior would be entirely broken. Better balanced flow algorithms exist but these also don’t do exactly what we need and the complexity quickly jumps to astronomical realms. Electric network model Another proposal was modelling like an electric network. Fluid flow is a popular analogy to their workings, and they do have a lot in common. The great thing about them is that they precisely model the flow branching and it could work out of the box. What it does not allow though is to limit the flow - one wire can, theoretically, run any current, but not so for the pipes, and we don’t want one pipe to be enough to supply whole factory. The limitations could be added, but that would, again, kill it with complexity. A simplified version of this is what we consider the 'nuclear option'. In short, fluid network and pipes would work like the current electric network, instant transmission from production to consumption. This would increase performance by orders of magnitude, and remove the unintuitive flow of the current system, all consumers would get an equal split of the production, and storage tanks would act like accumulators. However we have decided not to pursue this, for a few reasons.
  • There would be no visualisation or indication of the flow of fluid.
  • There would be unlimited throughput, one water pipe could supply all boiler and reactor setups.
  • It abstracts away part of the realism and charm of the game. (While this is subjective at best, it does mean something to us.)
Merging fluidboxes This would mean merging all the similar pipes in a segment into only a single fluidbox that needs updating. This would solve the performance issues, and the throughput loss over distance, however on its own, it would not solve the issues with update order, unintuitive flow direction/splitting etc. Physics When it comes to the basic physics model, I ended up with something that is not at all realistic, but works well in practice. At the beginning, I tried to do almost realistic physics - as a proof of concept, with momentums and all that. But quickly I became cluttered with complicated formulas and it did not work at all. The system is so heavily discrete that physics are not really applicable. In Factorio, a full content of a ~meter long pipe moves into the next pipe in one tick and instead of mixing single molecules in a junction all in real time (infinitely little steps) we have to mix/split huge blocks in one shot. It’s more like moving Lego blocks than running fluids. For a long time I was playing with pressure but I dropped even that in favour of just two variables - volume and speed, where the speed kinda models the pressure as well. Volume is the amount of fluid in the segment, speed affects how much of it wants to move on in a tick - as speed x volume. Just this is enough to provide a pretty decent simulation. Junction model Most difficulties come from modelling the junctions. The general problem is that when anything does not behave entirely correctly, there exists a situation where it creates a total breakdown, such as no flow into some pipe. There are colliding forces in play. We can only evaluate one pipe connection (one inlet/outlet) at a time, but the behavior needs to be symmetrical and fair towards pipes that are to be evaluated later (currently it is not). What is the right order of evaluation and how to make it symmetrical without super complex look-ahead? Well, another big consideration is accuracy vs. complexity. Over many iterations I kept developing models, followed by counterexamples that killed them.

My model and improvements


The evaluation model I have arrived to works with two passes through the pipes in one tick. The formulas are more complex than the current one so it should be slower, but there will be one improvement to counterbalance it. The rough algorithm in one tick is as follows (I omit many necessary but boring details):
  • (Done at the end of previous step) Every pipe states how much fluid it intends to send to neighbours (called flow reservation) using a simple heuristic.
  • Perform topological sorting by direction of reservations from 0.
  • Evaluate pipes in the opposite direction, i.e. from end to start, against the expected flow.
  • Update a pipe in two stages:
    • Move fluid in it to neighbours proportionally to the space in them, space allocation they gave to the current pipe (providing they were already evaluated), and previous tick flow.
    • Allocate the resulting free space to neighbours that are yet to be evaluated to ensure they get fair share of it.
  • Go through the pipes again and do clean-up and calculate reservations for the next tick.
So in this algorithm, we go from the last pipe, always moving fluid and making space for the next one. The reservations/allocations system ensures good behavior in the junctions. Essentially at every junction, the fluid will try to be split evenly between all the possible connections, which makes things very intuitive. It works nicely, but unfortunately this system is even more computationally demanding. Here comes in the key improvement which is taking every straight pipe (every segment that has max two connections) and connect it into one piece. No matter how long it is, it will be evaluated in one calculation. Naturally, this loses some realism, but it is insignificant as it is the junctions that matter and those will remain unaffected. So as long as you don’t do crazy stuff like making pipe grids and keep your pipes straight, they will have zero effect on UPS. To put it more simply, updates will only be run on junctions and segments. At each junction, fluid will be split evenly among the neighbouring segments and junctions, any excess from one neighbour will spill evenly to the others. A segment is just a section of pipe without any splits, and fluid will transfer instantly through segments, but with a limited throughput.
So in the setup above, we would go from updating 32 individual pipes with the 'old' system, to updating 3 junctions (blue) and 8 segments. Since a segment can be any length, overall we expect a big performance increase. It could also lead to more UPS efficient designs, trying to minimize the number of splits in your pipe network, we know some players really enjoy trying to optimize for different metrics. A last convenience improvement are some rounding mechanisms to fill or move away those 0.0001 fluids, draining the last drops from the pipe system if the sources are disconnected, and filling all the way up if production is greater than consumption. Another point left to consider is how to solve accidentally connecting pipes and tainting your whole oil system with water.

Current state and next steps


All this is nice and already working, but still in the stage of the simulator. What I still need to do to get it to 0.17:
  • Figure out good model for storage tanks, and how they fit in.
  • Perhaps refactor it from floats to integers, which would make it work more cleanly, but would also make some calculations more complicated. TBD.
  • Finish the algorithm for correctly drawing the flow direction in the connected straight pipes (not that simple).
  • Move it all into the game code.
  • Write tests for it (I am probably overreacting but I feel that this will take as long as all the work up to this point).
So to sum up, we have had this on our minds for a long time now, and performance was not the only issue we have considered. The new system will hopefully address all the issues we mentioned at the start. As always, let us know what you think on our forum. Actually, speaking of the forum, you might notice that it underwent some changes this week. Sanqui has updated our forum from phpBB version 3.0 to 3.2, which is a bigger jump than it sounds. It brings us more in line modern web features, the forums are now usable on phones, it heightens security, and paves the way for future extensions. Some style changes are final, but if you have any particular gripes, please say so and we will try to accommodate everybody.


[ 2018-09-14 13:10:24 CET ] [ Original post ]

Friday Facts #259 - Scan-codes, Prototype IDs, HR worm

Scan-codes vs Key-codes


While migrating from Allegro to SDL, HanziQ and Jiri replaced the keystroke handling from using key-codes to scan-codes. Before you start jumping with joy, you’ll probably wonder: What is that and why should I care? Well, funny you should ask. You probably won’t care, unless you live outside of USA and/or you use a non-US keyboard layout. In short, key-code is a key identifier dependant on the symbol the key will output when pressed, scan-code is a key identifier based on the physical location of a key. So for example players with French keyboard layout (AZERTY) have to jump to the control options after launching the game for the first time, and remap movement from WASD to ZQSD, in order to be able to move their character without hurting their hand.
In 0.17, the controls will map to the correct keys by default, regardless of your layout, and stay mapped to those physical keys even if you for some reason change your keyboard layout while the game is running. The disadvantage is, most of the non-US layouts didn’t end up with completely broken controls, so people kept playing with them and got used to them. So they’ll need to get used to the layout the game was originally designed with, or manually configure controls back to what they are used to. But wait, there is a catch... A few weeks ago we have announced new construction tools, which are by default bound to quite universal shortcuts (Ctrl+C for copy, Ctrl+X for cut and Ctrl+Z for undo). Bilka pointed out that the German keyboard has Z swapped with Y (as does the Czech one, but developers often don't use it) and undo incorrectly defaults to Ctrl+Y instead. To fix these kind of shortcuts we determine the appropriate default scan-codes at start-up, so that undo is always Ctrl+Z, regardless of your layout, but the action will stay bound to those keys if you change keyboard layout at runtime, which is hopefully a reasonable compromise. We might do it for other controls too (it feels natural for M to always be the default key to open the map, and T to open the technology screen), but there is another catch. It is completely reasonable for player to walk north, and Ctrl+click some entities. Remember AZERTY keyboard? Player keeps Z pressed down to walk north and presses Ctrl to start control clicking. Well, I tested this and it doesn’t trigger undo, but still stops player from walking. So it is not completely destructive, rather annoying. I am not sure how or if we’ll solve this, perhaps people with these layouts that create these kind of collisions will need resolve them by changing controls options manually.

Stable prototype IDs


The new Map Editor is finished, with one of the last things completed being importing surfaces from other save files. Importing surfaces from one save into another turned out to be quite complex, but not for the reasons you might think. The copying of a surface to a new surface is relatively easy, the main problem came from how we store map data in a save file. Factorio internally makes lists of every entity, item, decorative and so on at startup and generates a mapping of the text name to an integer ID. This is internally called an ID mapping, and provides several benefits both runtime and when it comes to saving/loading the game. The main benefit being: we (and modders) don't need to track and manually assign ids to everything added to the game - the engine does it all automatically. Anyone familiar with modded Minecraft before version 1.7 can attest to how much of a pain manually handling IDs can be and how easily it can break. Because things can be added and removed due to our internal changes or by adding/removing/changing mods, the ID mapping often changes. Because it can change we have to include it in the save file to know what it was when the save was created. When Factorio saves the map one of the first things that's written to the save file is that ID mapping. The way it worked before was: at load time - the game would attempt to restore whatever the ID mapping was for the save it's loading. Anything it can't find means that thing doesn't exist any more, and anything new is stuff added. This lead to saves having different ID mappings for the same set of mods depending on the steps taken to make that save file. This worked for the most part but had a few small problems:
  • Any time something was removed it was signalled by setting the ID at that location in the mapping to 0.
  • The removed IDs couldn't be re-used until the save was fully loaded, saved, and loaded again (leading to gaps in the IDs).
  • Different save files could end up using different IDs even when using the same set of mods.

With the new Map Editor wanting to take any save file and import it into your running game the fact that the ID mapping could be different was a problem. To add to the complexity we also have a migration system in place that lets you tell the game "I want to change all entities/items/... named *A* into *B*". This migration system also works when you remove the source otherwise it wouldn't be that useful. After several false starts (a common theme when it comes to these complex reworkings), I came up with the following simple requirements:
  • IDs will get assigned once after loading mods - after that they are never allowed to change for the lifetime of the program
  • When a map is loaded instead of restoring the ID mapping it was using it will create a migration from the old ID to the new ID (if it still exists)
  • The tracking of what was removed is done through a different system instead of treating a '0' ID as a removed ID.

During this rework I discovered we were doing a bunch of extra work (some of it even causing bugs) just to restore the save file ID mapping, and I was able to simply delete all of it now that the IDs simply migrate to the correct values any time a save file is loaded. I even inadvertently fixed a bug someone reported related to crashing when loading a specific scenario-using save file due to this rework. Overall the system is simpler now and doesn't have any of the 'quirks' it used to. The new Map Editor can import any save file the game is capable of loading and it all 'just works'.

HR worms


As you might know already from an earlier post, we are working with Ernestas on the high-res version of the enemies. This is a great excuse for also refining the concept of them. This week we want to show the new look of the worms.
The intention is to keep what we had in the previous version, but to emphasize its personality and behaviour. This new version tries to be more aggressive, powerful and disgusting, while also acting more nervous and agitated. The "fingers" on its head are for digging tunnels, something that wasn't really explained before, and which will also help to express the character of the worm. Now we are working on the animations, trying to emphasize these concepts, basically the worm is a creature of pure hate and killer instinct. Together with the sound effects, I hope it is going to be a pleasure killing them. As always, let us know what you think on our forum.


[ 2018-09-07 12:06:39 CET ] [ Original post ]

Friday Facts #258 - New autoplace

Taming the random generator


One of the things in the large TODO list for 0.17 is giving a final polish to the map generator. There are quite a few obvious problems now in 0.16, and some less obvious ones. Here are some of the fixes and improvements (some work in progress):
  • All combinations of settings should no longer create strange maps such as circles of cliffs.
  • Much more predictable starting area resources that don't overlap each-other and are not covered by water.
  • The resource generation settings now have a much more dramatic effect (previously they had little to no effect).
  • Increased the number of steps (small, medium, big, etc) for each setting from 5 to 9 for even more customization.
  • The starting area will always contain water, most often a lake close to the spawn position.
  • Since the algorithm for generating ores was pretty much completely rewritten, there are many small improvements.
Now for the less obvious problem: unpredictability. I saw quite a few people complain with vague comments like "the map generator sucks". So I often asked them what the problem is in detail. Some were complaining about the above problems, some did not understand what the settings do, and some had problems finding a "good map". I saw quite a few players click "regenerate" like crazy until they got a map with fat patches in the starting area, big oil patch and also uranium, complaining that it's too hard to find a "good map". Due to the randomness we seem to have set the expectation for "good map" a bit too high. Oil and uranium were never intended to be in the starting area, but due to the randomness of the generator they sometimes were there. Also sometimes maps were so wild that you would start off either swimming in resources or desperately looking for another iron patch. It would be simple to just say "that's just RNG, deal with it", but blaming poor game experience on RNG is just bad design. So what we did is:
  • The starting area contains only iron, copper, coal and stone, in very predictable amounts. Uranium and oil are explicitly excluded from the starting area.
  • Starting area resources are usually in one ore patch each (depending on settings).
  • The starting area patches are usually close together.
  • The starting area size setting no longer affects resource placement, it just has a fixed size.
Outside the starting area, the regular algorithm "kicks in" so you can still get quite wild results, but they are far enough that it averages out. I believe this is a good balance where you can still have different experiences depending on your luck, but your starting experience is much more predictable and does not leave you with the feeling that you got screwed over by the map generator. We definitely don't want the map generator to be extremely flat and predictable. Opinions on the subject are quite wild too, with people having different expectations of what a good map should look like, so we try to only make changes based on actual problems. This might seem a bit controversial so we can add an option that disables this whole starting area logic, for purists. We plan some small tweaks coming to biters also (a tiny bit more biters close to the starting area), small tweaks to terrain, cliffs, water generation and possibly some new features to make the generated trees and decoratives look better. Most of these problems including the obvious and apparently simple ones were not that easy to solve. It's hard to make random generators do what you want, so TOGoS will explain what it took to actually get it done.

Taming the random generator - the technical side


Good day procedural map generation enthusiasts! The terrain generation in Factorio works by calculating probability and richness for every autoplaceable tile, entity, and decorative at every point on the map. To oversimplify slightly, the thing with the highest probability "wins" and then gets placed (if it's a tile) or has that probability of being placed (for entities and decoratives). As some of you may recall, one of the features we added in 0.16 was a new terrain generation systemdriven by functional expressions built in Lua code. Mods define a function (not a Lua function, but a data structure representing a function in the mathematical sense)to be applied at every point on the map to calculate those values. This gave us a lot more control over elevation, temperature, humidity, and a few other variables across the map. However, the probability and richness functions for specific objects (notably resources) were controlled by a separate system. I had wanted to unify these two systems since I started working on terrain generation last summer. Since releasing 0.16, our desire to improve resource placement, combined with my inability to come up with a good way to do it using the existing autoplace system, led me to finally bite the bullet and undertake 'the big autoplace refactoring'. It was a lot of work. The result is that existing AutoplaceSpecifications still work (because rewriting them all would have meant even more work), but under the hood they are compiled to expression trees, just like the ones for elevation, temperature, etc. As an alternative to the peak/dimension system, autoplace specifications can be defined in terms of a probability and richness expression directly, allowing a mod author to use the full potential of the programmable noise system. An advantage of this approach is that we can now add new types of noise expressions without the need to reconcile them with all of the existing autoplace specifications or cram them into the ever-mode-complex monolithic AutoplaceSpecification object. Specifically to make generation of resource patches more controllable, I added a new noise expression type called "spot noise". The way it works is that the map is divided into regions (large areas whose size is configurable per spot noise expression) and for each region:
  • A list of random points is generated.
  • Density, quantity, radius, and favorability are calculated for each point, based on noise expressions provided as parameters.
  • The total desired quantity for the region is calculated by averaging the density from all points and multiplying by the region's area.
  • Points are sorted according to their favorability, highest-to-lowest.
  • Points are chosen from the front of that sorted list until the target quantity for the region is reached.
Having generated a list of spots with position, quantity, and radius, the output of the spot noise function is high near the spot centers and zero at a distance equal to their radius, such that the total value in the spot equals the spot's quantity. This value can then be used (for example) as the richness for a resource (such as iron-ore). By itself, this gives us 'conical' spots (if you think of resource patches as being mountains):
This result can have some noise added to it to make the resulting spots non-circular:
I had to be somewhat careful when applying this noise; since there is more area outside the spot where richness can be raised above zero than there is inside to be lowered, any randomization will add a positive bias to the overall quantity. I have been compensating for this by subtracting some constant fraction of the amplitude of the noise, though it's been on my mind that the problem could also be resolved by using differently shaped spots. This system opens up a lot of possibilities:
  • We can use the maximum of two different spot noise expressions to place starting area ores using completely different settings than we do for the rest of the map.
  • We can vary quantity per spot and frequency of spots independently, which will allow the sliders on the new map screen to have more predictable effects.
  • Spot quantity can depend on the suitability of the location. For example, we could set suitability to correspond to elevation so that spots are not placed underwater. The system would then continue through the list of candidate spots, placing more spots at locations above water to compensate. In the base game we're planning to do this for starting area resources, but not for resources outside of the starting area.
  • In general, spot noise allows us to mess around with the placement of resources while keeping overall quantities constant.
Here are some map previews of the same seed, to illustrate spot-placed resource patches being moved to avoid water in the starting area as the water level is raised:


Putting everything together, here's what a typical starting area and surrounding region generated by the new system looks like.We may make a few more tweaks before 0.17 but this is probably pretty close:
All that said, I was perfectly happy when ore placement was unpredictable and sometimes there was no copper in the starting area and really long belts (and walls to defend them) were in order. So if I have my way there will be a "no special starting area resource placement" option. As always, let us know what you think on our forum.


[ 2018-08-31 09:34:11 CET ] [ Original post ]

Friday Facts #257 - NPE/Campaign update

With most of the team away for Gamescom or vacation, I have the pleasure of writing a Friday Facts for you this week.

NPE/Campaign update


As you probably know, I've been working on the New Player Experience (NPE, as we call the new demo + tutorial) and the new Campaign. However we don't want to talk about it too in-depth or be too specific about either of these subjects, purely to not spoil it for the FFF readers, but there is some related news to share. The NPE needs a lot of scripting and design work to make sure the new player does not get stuck anywhere because it is a tutorial, and to make sure that it gives a taste of what the game is about because it is also a demo. Since the NPE was the first thing we started, we already have a working version and we have been testing it with people at the office, and also people who have never played Factorio, to get the necessary feedback to polish it further. From what we gather, it seems that the NPE is in a decent state, the main design seems to work very well and we are just improving details and making the map look nice. The main campaign design has been completely finished for a while now, we have made a 'geographic' map layout and now we are 'just' implementing it in cooperation with Rseding, who is improving/adding tools for the map editor which makes our work a lot easier and in many cases just makes it possible (love letters, non-genital-shaped candy and other gifts to his address please), just like for any future map creators. It's still going to take quite some time to finish all of this, but the progress is steady and we can't wait to see people play it in 0.17.0. One of the things we could really use in the campaign was a terrain that the player can't build on, but can walk on, so we are adding shallow water as a new terrain type. So far it's a cheap solution from our side - it's just a new tileset that is combined with decorative entities to make it look like walkable. Currently we don't plan to use this in freeplay, but if we can find its gameplay purpose and make the terrain generator use it properly, it's not impossible, but for now not a priority.

Finalization of science pack specific technologies


As I already wrote in an earlier FFF, that when working on the design of the NPE and the campaign, it's not rare that we come across something in the game which could work much better just by changing some recipes or technologies. As I also wrote in that FFF, all science packs will have their own unlocking technology in 0.17 - but I did not show or tell how does this apply to Space science pack since you never unlock it as a recipe - you only need satellite and rocket silo for it.
At the same time when designing the campaign, we feel that the player should get more an idea of what they're progressing to reasonably early in the game and build towards it. On top of that I really don't like the dynamic in freeplay that you need as soon as you research rocket silo, you immediately have to build all the production lines for the rocket parts at the same time. This results in:
  • You no longer win the game by launching a satellite, there is a new "Rocket escape pod" that you launch in a rocket to finish the game. Currently the escape pod has no other use.
  • Satellite is unlocked by its own "Space science pack" technology that has rocket silo as a prerequisite.
  • Rocket silo technology only unlocks the Rocket silo and the Rocket part item the silo crafts internally.
  • Rocket fuel is unlocked by researching its own technology which has Rocketry and Engine as a prerequisite. This means you can get rocket fuel for your vehicles way before the rocket silo.
  • Nuclear power is split to Uranium processing and Nuclear power, where Kovarex enrichment process only requires Uranium processing and Rocket fuel so you can get Nuclear fuel for your vehicles without the rocket silo.
  • Rocket control unit is unlocked by its own technology which has Production and High tech science pack technologies as a prerequisite. Additionally, Rocket control units are in the recipe for Atomic bomb instead of Processing units.
  • Low density structure is unlocked by researching its own technology which has Science pack 3 and Advanced material processing as prerequisites. The Low density structure is also used in multiple advanced personal equipment recipes (mk2 things, Portable fusion reactor, Personal laser defense) instead of steel.
We hope that these tweaks and changes will help to smooth out the experience for new players and veterans alike. If you have any suggestions, feedback or comment, we are always happy to hear it over on our forum.


[ 2018-08-24 08:13:18 CET ] [ Original post ]

Friday Facts #256 - The little things 3

Hello, A bunch of us will be travelling to Gamescom next week as visitors, if you see anybody wearing a Factorio t-shirt, it might very well be one of us. We don't have a booth or exhibit this year, as we don't want to take any focus away from the development of the game.

Catalyst fixes


When we first released 0.15, we allowed Kovarex enrichment to use productivity modules. It very quickly became clear this doesn't work, as when the extra products were produced, it would output an additional 41 U-235, even though 40 of them were used as ingredients. An additional problem is that the 40 U-235 used as ingredients was shown as consumed in the production stats, and 41 as produced, even though really only 1 U-235 is produced. We added a fix for the production stats, but had more pressing concerns so we moved on. However one of our source access members, Nexela, saw the potential, and decided to develop the concept more fully. With his work and some final integration tweaks from kovarex, we now have a proper catalyst system for the recipes in the game. What this means is that productivity will only apply on the count of produced items which are not also ingredients, with the enrichment process example, the bonus production will only give 1 U-235, not 41. This also means that Coal Liquefaction has been somewhat nerfed, so we might take a look at rebalancing it. For modders: Catalyst ingredients are automatically calculated when the recipes are loaded, or can be manually assigned by putting `catalyst_amount = ...` in the ingredient and/or product definition.

Items not spilling on belts


We've all had the situation, where you are swapping out your armor and you accidentally spill your inventory all over the place. It is often not so hard to clean up, you can just use a filtered deconstruction planner to select the items on the ground. However if the items drop onto belts, the clean-up can be significantly more troublesome, as the items are swept away into the heart of the factory. https://us2.factorio.com/assets/img/blog/fff-256-drop-on-belts.mp4 https://us2.factorio.com/assets/img/blog/fff-256-drop-on-belts.webm It's not the biggest and most pressing issue in the world, but the result of this one misclick can result in a large amount of unfair annoyance. So just as a small tweak to the spill logic, in 0.17 if you do end up spilling your beans, they won't land on your spaghetti: https://us2.factorio.com/assets/img/blog/fff-256-no-drop-on-belts.mp4 https://us2.factorio.com/assets/img/blog/fff-256-no-drop-on-belts.webm

Tile ghost tweak


We have all had the notion, that once we have a good and powerful network of Roboports and Construction robots set up, we would very much like to start paving the whole world with concrete. This is generally a slow process, but since it is automated, who cares about that. However there was an issue, when you placed down a blueprint for something actually important, the bots would be too busy processing the tile orders to notice. This is due to the way we internally structure the construction orders, essentially we just put all the ghosts in a big list, and work through it to check if we can build the ghost. The problem is that for performance reasons, we only process a small number of these orders each tick, and with a list that is quite large, it can take quite some time to process the new blueprint you just placed down. In 0.17, we have split this list into two, one for tile ghosts, and one for entity ghosts. This doesn't solve all the cases where blueprints will have quite some delay before building, but it solves the most typical case we see. We did a similar improvement a while back with the personal Roboports, where they independently check for nearby ghosts, outside of the global (per force) construction queue.

Belt Immunity Equipment


In the later game there is often an annoyance when trying to work around your overgrown belt jungle. It especially just leads to misclicks and a lot of hassle for something that doesn't really add much value to the gameplay at that stage. So the simple solution, in 0.17, there is a piece of armor equipment you can equip, that will make your character immune to belts.
As always, lets us know what you think on our forum.


[ 2018-08-17 14:32:22 CET ] [ Original post ]

Friday Facts #255 - Construction tools

Hello, we had a small Factorio 0.17 LAN party this weekend. The purpose was to try and test some of the new features and play the game properly as I haven't had time for that for quite a while. I used this opportunity to think about all the smaller or bigger decisions, features or change of plans in the context of playing the game for many hours.

Copy paste


One of the most praised new features we had available was the copy paste (and cut paste) functionality. As you know already, everything is more complicated than expected... but this feature was the exception from the rule, as it took only something like 1-2 hours to make the copy paste fully functional, as it was just about connecting all the tools we already have (generic selection tools, blueprints, deconstruction planner, easy to add key shortcuts etc.). This is how it works: You press Ctrl+C, and you activate the copy-paste selection tool, which is similar to selecting a blueprint: Once you have made your selection, you can build immediately: https://eu2.factorio.com/assets/img/blog/fff-255-copy-paste.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-copy-paste.webm When you press Q, the paste just goes away, but pressing Ctrl+V re-activates it any time in the future. The cut paste is similar. Ctrl+X also allows you to select an area, but as a bonus, it also marks it for deconstruction. This is especially useful, when you need to just move some setup from one place to another. https://eu2.factorio.com/assets/img/blog/fff-255-cut-paste.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-cut-paste.webm Our plan is to have a special UI button for the copy, cut and paste tools on the main screen. The paste tool button can be used (apart the obvious use of clicking it to activate it), to edit the clipboard the same way blueprints can be altered, and maybe even access the history of the clipboard.

Upgrade planner


Upgrade planner has existed as a mod for some time already, and it is one of the most popular mods with over 250,000 downloads (It is made by Klonan by the way). Since the feature is so useful, we decided that it is important enough to integrate it into Factorio natively. This gives us some advantages over the mod implementation:
  • The main advantage is that it uses fast-replace functionality with construction robots, so upgrading chests keep the inventory, upgrading belts doesn't require all the items to be picked up etc.
  • The tool can be stored in the blueprint library.
  • The tool will also support upgrading tiles.
  • The (arguable) advantage is, that it can no longer upgrade instantly from the player inventory, so it is more balanced and consistent with the other construction tools.
We also tested it in our playthrough and it was definitely a big quality of life improvement. https://eu2.factorio.com/assets/img/blog/fff-255-upgrade-planner-1.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-upgrade-planner-1.webm https://eu2.factorio.com/assets/img/blog/fff-255-upgrade-planner-2.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-upgrade-planner-2.webm One of the features we would like to add before 0.17 is to allow the upgrade planner to work also inside a blueprint, so you can upgrade the whole blueprint by it, or just select part of it to be changed.

Undo


You might have experienced the situation as well. You build/deconstruct something and it ends up not being the thing you really wanted for some reason, so you instinctively press Ctrl+Z to undo it. When this happened to me I was always like "ha ha, I'm pressing Ctrl+Z, but I'm playing Factorio". We realized, that it might actually not be such a stupid idea to actually make it work in the game, at least partially. The undo functionality is fully dependent on the construction robots being available, as doing anything else then construction orders would feel like cheating. Our prototype of the feature supports just 2 actions, building and removing, but it is already enough to make it useful at times. When you build a blueprint of something, pressing Ctrl+Z cancels all the ghost entities, and if some of them were constructed already, they are marked for deconstruction. https://eu2.factorio.com/assets/img/blog/fff-255-blueprint-undo.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-blueprint-undo.webm The same works for manual placement: https://eu2.factorio.com/assets/img/blog/fff-255-manual-build-undo.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-manual-build-undo.webm When you deconstruct something, pressing Ctrl+Z cancels the deconstruction, and for entities that have been removed already, it places a ghosts so they will be rebuilt again: https://eu2.factorio.com/assets/img/blog/fff-255-undo-deconstruction.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-undo-deconstruction.webm The same works for manual mining: https://eu2.factorio.com/assets/img/blog/fff-255-manual-mine-undo.mp4 https://eu2.factorio.com/assets/img/blog/fff-255-manual-mine-undo.webm

Research queue conclusion


The LAN party also gave us insight, that the research queue is still valuable in some cases, especially in multiplayer, where I can add the research I need after the current one without cancelling the research of someone else. After some discussions, internal voting and more discussions, we decided to go this way: Research queue is in the game, but it is disabled by default. It can be turned on with an advanced option checkbox, and this option is also turned on automatically once a player finishes the game for the first time. This way, we still ensure that the new players have the experience as wanted, but veterans that play it again and again, and players who are researching infinite technologies, have it available.

Blueprint library conclusion


As copy-paste solved most of the annoyances with blueprints, the second most annoying thing was, that when I wanted to manually pick a blueprint from a blueprint book to build something, pressing Q didn't put it back in place in the book, but instead, it moved it to my inventory. It was also annoying, that I can't re-assign the blueprint contents of a blueprint in a blueprint book directly. These two things are already solved by the previous plans (FFF-250), but there are other tweaks we realized are needed.
  • When the blueprint library has a grid and works similarly to the inventory, the movement from blueprint library to inventory makes a copy instead of moving it. We think making the blueprint library more persistent is a big priority.
  • Blueprint library slots are still big and have the space underneath them for the name as it is now. We realized, that the main downside of showing as an inventory is removing the possibility to see the names, which is a main way to identify blueprints for some players.
  • The blueprint library window is opened as a side panel, and can exist next to normal active windows. Blueprints can also be built directly from it.
  • The shared blueprints feature is still useful, so we decided that it will stay. It will be a tab in the blueprint library, but it will only be visible in games with multiple players. This is important mainly for new players, so they are not overwhelmed by a lot of stuff at the beginning. The shared blueprints won't contain every players own library, only blueprints they explicitly choose to share.
  • The last change is about what happens when a player creates a new blueprint and it only exists in the cursor. When he presses Q, where should the blueprint go?. In the current game, it just goes into the inventory, however in the FFF-250 write-up, it is removed. Neither of these options were ideal for us, as it feels like a hidden behavior. This will be changed, so when the player presses Q, it will invoke a small selection popup next to the mouse, so the player can explicitly select what to do:
    • Put it in the blueprint library - clicking it just opens the blueprint library, so it can be put there, if it is already opened, it just flashes.
    • Put it in the inventory - clicking it just opens the character screen with inventory, so it can be put there, if it is already opened, it just flashes.
    • Destroy
    I believe, that this helps the player understand what is going on. This popup can be either used to quickly access the storage for the blueprint, or the popup can be completely avoided if the blueprint is manually put into some storage. Since we have the copy paste now, the need to make a one-time temporary blueprint should be non-existent , so it shouldn't add any extra annoyance in this use-case.
As always, let us know what you think on our forum.


[ 2018-08-10 15:03:31 CET ] [ Original post ]

Friday Facts #254 - No research queue for you

Hello, we are really appreciating that the new offices have proper air conditioning...

The research queue


The research queue was one of the planned and implemented features for 0.17. The player could queue up to 5 technologies so the research would flow better. The weird thing about this feature is, that it sounds much better on paper than in reality.
I was playing with the research queue for the first time when I was testing the new tutorial/campaign and I noticed a weird thing about it. As I just queued all the 5 possible technologies in the first mission, I had no idea what and when was unlocked, so I was not taking advantage of these things for quite some time. Vaclav played a lot of normal (freeplay) games with the queue, and he also supported me that the feature in reality doesn't make the experience better. After that, we started to reconsider the feature. The breakdown is this: Cons:
  • The newly unlocked recipes might be overlooked (It is solvable by some kind of pop-up, but it is far from perfect).
  • It removes the joy of looking at the result of the research and of picking a new thing that will be the next one to do.
  • It adds to the feeling of just going through a to-do list without having much to say about it.
  • The queue has to be changed a lot as the priorities change.
Pros:
  • It feels appropriate in some situations, like finishing all remaining green science that I don't care about as I'm not producing blue yet etc.
  • It feels okay to queue the repeating upgrade research at times, but as the cost grows quite fast usually, it becomes less and less of a problem.
So the overall decision was to remove this feature, on the condition that I have to say that I kovarex, personally, killed it. I am the one to blame :)

Mod portal features 2


We have another round of Mod Portal updates for you. There is now a new Trending section where you can browse fresh mods that have have seen a surge in downloads recently. The exact algorithm? Secret sauce, of course.
While browsing and searching for mods, you can now filter by game version, with the latest stable version naturally being the default selection.
The mod portal gives each mod its own little discussion section. However, rather than being a convenient place for mod authors to communicate with their fans, this could also be a source of annoyance, as some mods have other avenues (forum threads, GitHub...) and the mod portal had to be checked separately. This has now been alleviated with the new notification system. Mod authors are automatically subscribed to their mods' discussions, and posters can subscribe to the threads they create or reply to. Email notifications are off by default, but there's nothing easier than enabling them.
To further make the discussions more usable, mod authors and collaborators now have more moderation tools at their hands: they can lock and trash threads, as well as change their titles and category.
I will be shifting my focus from the mod portal for now, but feel free to post feedback and feature requests in the mod portal section on the forums. As always, the pitchforks and flaming torches can be found over on our forum.


[ 2018-08-03 13:12:51 CET ] [ Original post ]

Friday Facts #253 - Fans Fun

Going through to-do list


One of the many small tasks for 0.17, was to solve the occasional problem I had when I didn't notice that one of my trains didn't have the refuelling automated. One train out of fuel can halt all the train logistics easily, and sometimes it takes quite a while to notice it. For this reason, we added an alert for trains running out of fuel when in automatic mode.

NTK LAN report


On Monday we went to the National Library of Technology (NTK). As we mentioned a while ago, they have loaded their library PC's up with Factorio, and they invited us for a tour, and a Factorio LAN party. We got to have a look at their server infrastructure and inner workings of the library, including an automated splitter type machine for sorting which floors returned books go to. The LAN party went really well, we had nearly 50 players join and help build our factory. Unfortunately we couldn't get to launching a rocket in the 4 hours we had. If you want to check our progress, you can download the save game here. Of course we had to take some time out of automating to build a flashing NTK sign:
Surprisingly, there was quite a lot of local press at the event, and there were a couple of Czech articles published this week: Novinky.cz, České noviny.

Fan delivery


TOGoS arrived for a visit last week, and quickly dove right into deep discussions with Albert, Twinsen, etc. about the map generation improvements. More on that later... But with him he brought along an incredible package from one of our fans, PeteTheLich:
The big beacon is about 6" (15 cm) tall, and the base is about 6" in diameter, and it functions as a piggy bank, with a slot in the top to put in coins, and a hatch on the bottom to get them out. Everything he sent is really awesome, and we're super grateful for him sending them over (especially with all the customs problems on the first attempt). If you are interested in getting some of these items printed, you can check out the Factorio Thingiverse page. Fan creations such as this are really inspiring, and gives us great ideas for our own official Factorio products in the future. Speaking of fan creations...

How fast can you go?


arrow_in_my_gluteus made an interesting investigation into the exact top speed a player can achieve in the vanilla game: https://youtu.be/EF99Ym5jXjg The final result is cheesing the game mechanics a little bit, but to quote kovarex: "It is emergent gameplay", so we can expect to see start seeing more rocket silo highways in factories to come.

HR defensive structures


Ernestas and Vaclav recently finished off the defensive structures in high resolution. Notably, the walls and gates were completely redesigned, and now have a filler sprite when the wall is several layers thick.
As always, let us know what you think on our forum.


[ 2018-07-27 13:44:04 CET ] [ Original post ]

Friday Facts #252 - Sound design Map editor

New sound design


Val: Do you remember the smell of the fresh air near the seashore? Can you describe, a forest that rumbles its trees after a summer rain? All that you hear and see goes right into your mind. All of our senses are connected with each other in our memories. When we feel at least one of them, our imagination brings the others. Sometimes, and even often, we can't see the object, but we can hear it! You can't see the wind, but you feel it and hear it! The bird is singing. You can't see it hiding in a bush, but you hear a beautiful song and can define the direction it comes from. The forest, the sea, the desert... Night and day. Clanking of a loading cannon and snoring of unseen monsters. That is what we are planning to do. To put the unseen colors of sound and add some feeling of life to the planet of Factorio. Even the emptiness has it's own voice... Albert: As you probably know, we are in a stage of polishing all the possible aspects of the game. Last week we were cooperating with Val, our new sound designer, and we spent the entire week defining new concepts for environmental sounds and sound effects. Also we were working on the sound of the biter nests and the artillery cannon. This is definitely a huge subject full of details that can really improve the play experience of Factorio. Here I can show you a work in progress of the artillery cannon: https://us2.factorio.com/assets/img/blog/fff-252-artillery-cannon.mp4 We have to tweak some behaviour of the entity in order to make it act more mechanical, but overall, the possibilities that sound design can bring to the game are really interesting. Compare the simple shooting of the cannon in the actual version with this proof of concept with all those details in rotation and loading. Of course this level of detail complicates the work a little bit, but I'm convinced it's worth it.

Spawners redesign in HR


We are also working in parallel with Ernestas, who is improving the look of the enemies. Right now we can show a sneak peek of how the new spawners look in HR. Together with TOGoS, we are working in a more specific map generation in order to improve the composition of the nests. The intention is to generate a special ambience for those areas that makes you feel like you are in enemy territory.
Everything here is a work in progress, let us see how we end up with all those plans. Soon I'd like to show how the nests look with the animations, the ambience, and all the biters and worms around.

Nobody uses the Map editor


Factorio has had a Map Editor since the early stages of development. It was initially used to create the current campaigns and scenarios, and from time to time we would use it to help diagnose desyncs. However, as development continued the Map Editor seemed to have been forgotten. Inside the Factorio engine, almost every game GUI/action is associated with the player that is looking at the GUI and doing the action. This makes sense because when the game is running everything is done by a specific player, and GUIs need to know stuff about that player. When actions are processed the game applies them to a specific player in the world, and handles stuff like multiplayer syncing of actions done by different players. In the Map Editor there is no "player" - there is just the editor - and this has caused a massive divide in what the editor can do compared to the main game. Because the Map Editor has no 'player' it can't use any of the action processing logic the normal game uses, and instead uses a large copy-paste of the action processing and attempts to apply it to the map knowing there's no player associated. This 'works' for the most part, but some actions are inherently tied to a player and simply don't work in this disassociated context. Having this split of 'game' and 'editor' means we had to essentially write any action processing logic twice: once for the game, and once for the editor. Most people skipped the second part and so the editor fell behind. From time to time someone would report a problem with it, or ask if we could add some new functionality (or even if it could just do what the normal game could do). The internal joke was always "Nobody uses the Map Editor" to explain-away why it was so lacking. When 0.17 tasks where being assigned, the topic of the Map Editor was brought up and I (Rseding) indicated I would be interested in working on it. Knowing what the problems where and how I wanted to go about fixing them I started. Several months of work (and several false-starts) later, I now have a 90%-there new Map Editor. The new Map Editor has several key differences over the old one:
  • I removed the separation of 'normal game' and 'map editor'. The Map Editor is built right into the standard game logic. Anything the normal game can do it can do automatically. For those familiar with Factorio's modding: it's a new controller like the 'god controller', called 'editor controller'.
  • The standard interaction mechanics of the normal game 'just work' in the Map Editor (Hotkeys, QoL shortcuts, Pipette tool, etc.).
  • The Map Editor can be toggled on and off while playing any game. You no longer need to save, exit the game, go to the map editor, convert-save-to-scenario, and then finally load-in-map-editor. You can just be playing the game and switch to the editor (and back).
  • The Map Editor is multiplayer compatible: It doesn't make any distinction between singleplayer and multiplayer - it just works for both.
  • The Map Editor can pause/unpause the normal entity update but still interact (in multiplayer as well). Non-map-editor players are frozen in place but can still talk, switch to/from the editor, connect, and disconnect from the game.
  • The Map Editor is King. Anything you want to do, it lets you do (if I thought of it), at no point during development did I decide "No, you just can't do that with the editor - it would be too powerful". The point of it is to be powerful.
https://us2.factorio.com/assets/img/blog/fff-252-editor-switch.mp4 After replicating the functionality of the old editor, I started working on new features that have been requested by community and other team members:
  • A new cloning tool to copy entities/decoratives/tiles in any combination from one area (and surface) to another. This copies almost everything about the entity - items, recipes, variations and so on:
https://us2.factorio.com/assets/img/blog/fff-252-copy-paste.mp4
  • A paint-bucket tool for painting tiles that would paint-bucket replace all tiles of a specific type under the mouse:
https://us2.factorio.com/assets/img/blog/fff-252-paint-bucket.mp4
  • Extending the force-editor to create/remove/edit forces fully.
  • Extending the entity-editor to let you place entities on other forces than the defaults.
  • Extending the decorative editor to have more fine-grain control of placing/removing without needing to know the exact decorative you're looking at.
  • Controlling the simulation rate and controlling tick execution.
https://us2.factorio.com/assets/img/blog/fff-252-time-control.mp4 Finally what I see as the ultimate request: "Ability to Copy & Paste an area from 1 map to another, transferring tiles/doodads/biters/trees/entities/items/...". The key part being "from 1 map to another" meaning "let me import stuff from other save files". I have a plan to make this work, but it will be restricted to single-player only. Still, I can see it being incredibly powerful when finished. In summary: there is still more work to be done but the new Map Editor is coming together amazingly. I'm looking forward to what people will create/do with the new power the new Map Editor will bring. For us it will greatly speed up the work on the new campaign maps. As always, let us know what you think on our forum


[ 2018-07-20 11:28:43 CET ] [ Original post ]

Friday Facts #251 - A Fistful of Frames

Factorio at the National Library of Technology Prague


If you are in Prague this summer, and wanting to satiate your Factorio cravings, you can stop in to the National Library of Technology Prague, where Factorio is loaded onto 150 computers for all to play. Entry is free for all visitors Monday to Friday 08:00 - 22:00 until the 31st of August. The PC's are running Linux (Fedora), loaded with a custom build of the game HanziQ put together, and you can host LAN servers and play with your friends.
On the 23rd of July we will be hosting our own Factorio LAN party at the library starting at 16:00 CEST (Prague time), so you can come along and play with us. It is advised to bring your own set of headphones if you are going to attend.

Rendering optimization


As we started to modernize our rendering backend, the absolute must have was to make it at least as fast as the old one. We had the chance to do things however we wanted, so we were excited about the capabilities newer APIs unlocked for us, and we had lot of ideas how to draw sprites as fast as possible. But first, there is no need to reinvent the wheel, so let’s see how Allegro makes the magic happen. Allegro utilizes sprite batching, which means it draws multiple sprites that use same texture and rendering state, using a single command sent to the GPU. These draw commands are usually referred to as draw calls. Allegro draws sprites using 6 vertices, and it batches them into a C allocated buffer. Whenever a batch ends, it is passed to the OpenGL or DirectX drawing function that copies it (in order to not stall the CPU) and send the draw call.
That looks pretty reasonable, but we can’t do the exact same thing, because in DirectX 10, there are no functions for drawing from C-arrays directly, and it is mandatory to use vertex buffers. So our first version created vertex buffer to which current batch was always copied for use in a draw call, and we would reallocate a buffer with a larger size if the current batch wouldn’t fit. It was running quite fine, probably not as fast as Allegro version, and it lagged noticeably whenever the vertex buffer would need to be resized. After reading some articles, for example optimizing rendering in Galactic Civilizations 3 and buffer object streaming on the OpenGL Wiki (which was very helpful), it became clear that the way to go is to have a vertex buffer of fixed size, and keep adding to until it is full. When we finish writing a batch to the buffer, we don't send a draw call right away, we write where this batch starts and ends into a queue, and keep writing into the buffer. When the buffer is full, we unmap it from system memory, and send all the queued draw calls at once. This saves on the expensive operation of mapping and unmapping the vertex buffer for each batch.
As we were trying to figure out how to serve data to the GPU in the most efficient way, we were also experimenting with what kind of data to send to GPU. The less data we send, the better, and Allegro was using 6 vertices per sprite with a total size of 144 bytes. We wanted to do point sprites which would require only 48 bytes per sprite and less overall maths for the CPU to prepare a single sprite. Our first idea was to use instancing, but we quickly changed our mind without even trying, because when researching the method, we stumbled upon this presentation specifically warning against using instancing for objects with low polygon count (like sprites). Out next idea was to implement point sprites using a geometry shader.
We tried it, and it worked great. We got some speedup due CPU needing to prepare less data, but when doing research how different APIs work with geometry shaders, we found out that Metal (and therefore MoltenVK) on macOS doesn’t support geometry shaders at all. After more digging, we found an article called Why Geometry Shaders Are Slow. So we tested using the geometry shader on a range of PCs in the office, and found that while it was faster on PCs with new graphics cards, the older machines took a noticeable performance hit. Due to the lack of support on macOS and the possible slowdown on slower machines, we decided to drop the idea. It seems the best way to do point sprites is to use a constant buffer or texture buffer to pass point data to a vertex shader, and expand points into quads there. But at this time we already have all the optimizations mentioned in the first part, and the CPU part of rendering is now fast enough that we have put the point sprite idea on ice the for time being. Instead, the CPU will prepare 4 vertices per sprite with a total size of 80 bytes, and we will use a static index buffer to expand them to two triangles. The following benchmark results are from various computers. The benchmark rendered a single frame at max zoom out (about 25,000 sprites) 600 times as fast as possible without updating the game, and the graph shows the average time to prepare and render the frame. On computers with integrated GPU there was little improvement because those seem to be bottlenecked by the GPU.
We also noticed higher speed-ups on AMD cards compared to nVidia cards. For example in my computer I have a GTX 1060 6GB and Radeon R7 360. In 0.16 rendering was much slower on the Radeon than on the GeForce, but with the new renderer the performance is almost the same (as it should be because GPU finishes its job faster than the CPU can feed it draw commands). Next we need to improve the GPU side of things, mainly excessive usage of video memory (VRAM), but more on that topic in some future Friday Facts... As always, let us know what you think on our forum.


[ 2018-07-13 15:10:45 CET ] [ Original post ]

Friday Facts #250 - Dead end conclusion

Mod portal features


Sanqui has been quite effective these last weeks getting stuck in with the mod portal, so we have some interesting additions to talk about. Mod deprecation A modder can mark a mod as deprecated, which indicates they are no longer updating or maintaining it. The typical case is a mod will add something relevant for the current version of the game (E.G, a mod to scan the players starting area), and then an update to the base game makes the mod obsolete. Just deleting the mod could potentially cause problems for people playing an older version, people might ask what has happened to it etc.
Marking as deprecated will keep the mod up on the portal, but it will be hidden from any public searches. This way people downloading using 'Sync mods with save' feature can keep playing, while new players won't stumble upon a mod that is no longer useful or up to date. It also preserves the downloads and discussions in case the author wants to revive it later. Collaborators It is often the case, that a mod author will want someone else to help them maintain and manage their mod, for instance if they are going on holiday when a major release is coming out. The way it has worked in the past, another modder would have to come and upload an updated version of the mod under their own name. Now a modder can set another player as a 'collaborator', which means they can help out will all the maintenance of the mod. Collaborators can do everything the author can do, except add or remove collaborators.
You might also spot the other feature, transferring mod ownership. This lets the author give the mod completely to a collaborator, in the case that they are no longer interested in working on the mod at all. Discussions notice Mod authors can now display a notice above their mod page discussions, informing the users of any useful information. For example, an author might prefer you to report bugs on their GitHub page, so the notice will inform users of where they should go. An additional option allows the author to disable the discussions completely, in the case they have their own forum/thread somewhere for discussions.
If you have any ideas for an improvement to the mod portal, please let us know on our Mod portal discussion subforum.

Blueprints - Proposal Zero


I feel that none of the propositions in the previous Friday Facts were really that great. We spent some more time thinking about the blueprints and the blueprint library while going through the player feedback, and we are now agreeing on what I like to call Proposal Zero, because it was the first idea and the first mockup I ever made related to this subject. Put simply, blueprints stay as items, and the blueprint library becomes a regular inventory, like a chest (that is of course accessible across all your saves). The idea goes together well with the "quickbar is an action bar" idea explained in the FFF-191. The details and mockups for the action bar are taking shape, so expect more about it in a future FFF. When working on GUIs, I like to create design documents where I try to explain how something works as objectively and as complete as possible. It ends up sounding like a boring legal document, but it helps force me to think of all the corner cases and possibly find problems. I will use this opportunity to also tell you how we usually work on the GUI. Here is what I have written so far:Blueprints and blueprint library Proposition Zero:
  • In the text below, Blueprinting Tool = Blueprint, Blueprint book or deconstruction planner. Library = Blueprint Library. Book = Blueprint Book.
  • Blueprinting Tools stay as items, they interact consistently throughout the game.
  • The blueprint library: One window with one grid of large (or small?) spaces. The grid expands infinitely on a row-by-row basis (if any item is placed in any slot of the last row, a new row is added). This grid act almost identically as a chest. Items can be manually moved there, or fast transferred using any of the shortcuts that work for normal inventories (see comment below). This inventory grid can only hold blueprints, books or deconstruction planners.
  • Special behavior: when picking up a Blueprinting Tool from the blueprint library, it is replaced with a "hand". This means that when pressing Q to drop it, it is not returned to the player inventory, instead, back to that slot in the blueprint library. This is so blueprints can easily be used directly from the library.
  • The functionality of automatic blueprint library sharing in multiplayer is removed. The "shared blueprints" panel is removed. Blueprints and blueprint books in multiplayer will be shared by manually trading the items or by linking them in the chat. Blueprints or books linked in the chat can be clicked to pick up a copy that can be used as a normal item.
  • Every Blueprinting Tool will have a unique identifier, so every blueprint item is unique, even if it has the same contents.
  • The blueprint editing interface (the UI that opens when you right-click a blueprint) will have 2 new buttons:
    • Reassign: assign new contents to this blueprint. This is helpful when you want to update a blueprint and leave it in the same place in the player inventory, blueprint library or action bar.
    • Duplicate: create a new blueprint with a different unique identifier, but the same contents, and place it in the player cursor. This can be useful when players want to take a copy of a blueprint from the library to edit, experiment with or remove buildings from, without changing the original blueprint.
  • Shortcuts to Blueprinting Tools can be created from the player inventory or from the blueprint library to the action bar:
    • Right clicking a shortcut to a Blueprinting Tool will open the blueprint editing interface, as if it was right clicked in its original location.
    • If a Blueprinting Tool is moved between the library and the player inventory, the shortcut in the action bar remains valid and unchanged.
    • If the Blueprinting Tool is moved outside any of these inventories (e.g., placed in a chest, or given to another player), the shortcut will become greyed out and cannot be interacted with, only cleared. If the Blueprinting Tool is placed back in the player inventory or blueprint library, the shortcut becomes valid again.
    • If the Blueprinting Tool is removed (or destroyed) from the library, and a different game is loaded that had a shortcut to that Blueprinting Tool, the shortcut will become greyed out forever, and it can only be cleared. This is to give feedback that there used to be a Blueprinting Tool there.
    • If a Blueprinting Tool is explicitly destroyed using the trash button, the shortcut will become greyed out forever and it can only be cleared. This is to keep consistency with the two rules above.
  • Blueprint books will work very similarly to the library: it will be an inventory which can hold only blueprints (maybe also deconstruction planners?).
  • Blueprint books will have the same sparse grid where you can arrange the contents as you like. 'Shift + Mouse Wheel' will move to the next/previous non-empty slot.
  • Blueprint books will not have any special behavior or interactions while in the library, right clicking them will open the book in a separate window, possibly closing the Library. Clicking them will pick them up to the cursor.
  • Blueprinting Tools are created using buttons in the Library. Blueprint string importing will also be there.
  • Quick Copy pasting will be done using new copy-paste functions that work almost identically to blueprints. Pressing 'Ctrl + C' will place a copy tool, similar to a blueprint in the cursor. You can use this select a number of entities to copy. Pressing 'Ctrl + V' will place a quick paste tool in the cursor, similar to a blueprint with items. You can use this to place as many copies of the things you copied as you like.
  • The quick copy and quick paste tools are not items. Pressing Q will simply clear the cursor and not return anything to the inventory.
  • The quick copy and quick paste buttons will also be shown in the main GUI, next to the action bar. Hovering over the paste button will show a tooltip of the blueprint that is currently in the 'clipboard'.
Comments:
  • Being able to use all the fast transfer shortcuts in the blueprint library makes it very consistent with a chest, but can lead to very nasty situations where one accidental click can transfer all the blueprints and books to your inventory, completely screwing the order and organization you had in the grid. At the same time "transfer everything" can be something some players might use often if they don't have many books.
Other:
  • The blueprint editor GUI should allow you to zoom and pan around to better inspect it. You can add buildings while holding an item or ghost item from the action bar; for convenience a small interface will give you the possibility to place any ghost item in the cursor. This is intended for quick corrections. Things like connecting cables or changing entity settings will not be possible; for bigger changes use the Reassign button.
  • The blueprint library button will be disabled until bots are researched or until any item is added to the library for the first time. This means less GUIs for new players to get lost in, also less of an invitation to use the controversial string importing at the beginning for the game.
Usually I create a very crude and simplified MS Paint mockup of any changed GUIs.
I use all this, the design document and mockup, to present the idea to the other devs, make some changes, and if we all mostly agree with it, all this goes to Albert so he can more thoroughly design the look and arrange all the GUI elements. There is usually a lot of back end forth between us so we can properly tie UI and UX together. After the mockup is finished, one of the programmers, usually Oxyd, Dominik or I(Twinsen) start putting it in game, with the help of kovarex who makes sure AGUI has all the new functionality we need in the back-end. After we have the interaction in the game and we are able to play with it, there is of course further tweaking. Well, the process I wrote about is the ideal case, in reality every different part of the UI is done slightly differently, especially since we are still at the beginning and we are still trying to figure out the concepts of the GUI, but I hope we will be able to use this pipeline to go though the GUI like butter. Let us know what you think of the proposed changes to blueprint on our Forum.


[ 2018-07-06 15:28:01 CET ] [ Original post ]

Friday Facts #249 - Dead end exploration

While working on the GUI, we reached the infamous blueprint library, and we started talking about how to improve it. This lead to discussions about how we can improve the entire system of blueprints. The problem was not simple at all, and these discussions have been going on for a few days.

Current version


The current version of the blueprint library has several problems:
  • Clicking a blueprint in the blueprint library means creating a blueprint, almost always. So if you click the blueprint library blueprint to build something and then press the Q key to clear the cursor, it goes into your inventory. This can easily lead to random blueprints slowly cluttering your inventory as you use blueprints directly from the blueprint library now and then.
  • As blueprints in the game and in the library are two separate things, the players need to manually check that the blueprint library version of the blueprints are up to date. Once you play more games and use the blueprint library to share the blueprints between them, which is the reason for it to exist, it naturally happens that you end up having out-dated versions of blueprints in the library, as you changed them in the previous game, but you forgot to update them in the library. Also, updating the blueprint library isn't easy, as when you update some of your blueprints in the game, you have to search the corresponding original blueprint in the library, remove it, and move the new version to the library. A process which is annoying at the very least. I find this point to be the most troubling, as we want people to upgrade their blueprint layouts as they play, not just mindlessly copy-paste the first version of the blueprint they figured out over and over.
  • The standard way of putting new blueprint into the blueprint library just puts it at the end of the blueprint library, and deleting any blueprint moves everything under it around. This means some blueprints are constantly changing positions and are hard to find.
  • Once new players open the possibility of making blueprints, it opens many things at the same time for them. Construction robots, blueprints and their creation, deconstruction planners, blueprint books and the blueprint library. The easier (smaller) can we make this step, the better.
  • Other UI annoyances such as exporting and importing blueprints through the obscure "Drop here to move blueprint" box.

Changes that will be done no matter what


  • First of all, blueprint library and blueprint books will not have this list of blueprints. It will have a grid similar to the one in inventory, so you can arrange the blueprints better.
  • There will be a way to do copy-paste quickly without having to create a blueprint. This solves one of the biggest sources of inventory cluttering, as now you have to make a blueprint for every copy-paste which ends up in the inventory after pressing Q. The most probable idea is, that pressing Ctrl+C would activate the 'copy' tool. You select what you want, confirm the selection with the blueprint dialog. After that, whenever you press Ctrl+V, you activate the last copy. Very similar to how computer clipboards usually work.
Apart from this, there is the problem of how to resolve the rest of the blueprint library problems.

Proposal 1 - no blueprint items, just quickbar references of 2 kinds


This would be implemented together with the quickbar is just an action bar idea explained in the fff-191. The idea is, that blueprints would never be items. Quite an extreme change, as it would mean, no blueprints on belts, no blueprints in chests etc. In this scenario, we could still allow a mod to create/allow blueprints as items, but it wouldn't be the vanilla way to do it. If you create a blueprint, there would be 3 things you could do with that.
  • Use it (or not) and press Q, the blueprint would be destroyed. The reason for this, is that we want players to put blueprints explicitly in a slot or the library, instead of cluttering the main character inventory.
  • Put it into the quickbar. The blueprint (or book) stays in the quickbar until it is removed or replaced by another blueprint. It is not in the library.
  • Put it into the blueprint library, by opening it, and explicitly selecting a slot where to put it.
You can use blueprints directly from the quickbar or from the library. You can also pick a blueprint from the blueprint library and place it in the quickbar. The tricky part is in the last point. There would be basically two kind of blueprints in the quickbar:
  • Blueprints that are only in the quickbar, so it is the stores all the blueprint data.
  • Blueprints that are just a reference to the blueprint library. This itself is quite a weird thing to have.

Proposal 2 - Blueprint items that are linked to the blueprint library


In this proposal, blueprints exist as regular items again, but to solve the problem of having two different versions of the blueprint in the game and in the library, blueprints could be linked. This means, that moving a blueprint from the library to your inventory would make the link with the library. Making any changes to the blueprint would automatically update the blueprint library version and, upon loading any other save that has blueprint linked to the same blueprint, the blueprint in the inventory would be also update to the new version. This looks nice and all, but it has its own collection of problems.
  • There are two kind of blueprint items now: blueprints that are only in the inventory and blueprints are also linked.
  • What happens when you put your linked blueprint into a chest, is it still linked?
  • What happens when your linked blueprint in a chest is picked up by another player?
  • What if you have two identical blueprints in the library that are both linked to each other. Will the player always understand that changing one will change both?
  • And many more...
It kinds of leads us to not liking this option too much as well.

Proposal 3 - Blueprints only in blueprint library that is also a blueprint-bar


There would 10 slot blueprint bar under the quickbar (or action bar). It would be the only possible storage for blueprints, so no blueprints as items and no separate blueprint library. It would have unlimited amount of pages that can be added/removed/selected. This blueprint bar would be shared between all games. The advantage of this is simplicity and straightforwardness, that there is suddenly only one kind of blueprint (instead of 3 in Proposal 2). No need to transfer from inventory to library and back. The storage and place where it is used from is the same. The disadvantage is mainly the fact, that it isn't integrated with the quickbar (or action bar), so you can't use the default 1-10 shortcuts to access it.

Proposal 4 - Action bar is persistent and the only storage for blueprints


Again, this goes together with the quickbar is just an action bar idea explained in the FFF-191. Additionally the action bar will have multiple pages of shortcuts. You can select what page of shortcuts you want to use in which of the 2 displayed bars. Something like this:
This is similar to proposal 3, but with blueprint-bar and action-bar merged. The action bar (with all the pages) would be shared between games. Blueprints could only be stored in the action bar. I personally like this the most. Even the description of it is stupid simple. You just open different save, and you are guaranteed to have access to all the blueprints and action bar selections you created in the previous game(s). You can use keyboard shortcuts to access blueprints, you can combine pages of action bar of items and blueprints to your liking. For example, action bar with rail building would have rails, signal, locomotives, wagons, and different kind of rail building blueprints(or books). The disadvantages of this solution are the limitations. If we keep the amount of action bar pages to 10 for easy access through keyboard shortcuts, it implies limited amount of space for the blueprints. I personally wouldn't see it as a problem as it is 10x10 slots should be enough for everyone right? :) But seriously if at least 30 should be free to be used by blueprints, and since we have blueprint books that have unlimited storage size, the amount of blueprints you could store would still be unlimited, only the amount of books (categories) would be limited. How many people out there would have actually problems with the limitation of having around 30 blueprint books? Obviously the second solution is to allow more than 10 pages of quick bar, but it would come with different kind of problems. The second problem that might be the fact, that you can't make a blueprint "just for this game" without putting it into the library. I personally don't see it as a problem, as the whole point of the blueprint library rework is to avoid the problems of merging two kind of storages of blueprints. This would force the player to have only one. The third problem of this might be the fact, that the blueprints are not items anymore. Some people might prefer to store their blueprints in chests over the map in certain way. For example, putting oil setup blueprints in their oil setup map area etc. This wouldn't be possible anymore, as the blueprints would always have to be in the action bar somewhere. As you see, it is quite a tough problem, and it is cases like this where your feedback is even more valuable than usual, so please let us know what you think on our forum.


[ 2018-06-29 20:06:29 CET ] [ Original post ]

Friday Facts #248 - Not Saturday Facts

Status report


On Monday June 18th, we marked the last version of 0.16 as stable. There were no major problems, so now we are almost exclusively working on 0.17. Work on 0.17 is progressing well:
  • Regarding the new campaign, we are already internally playing a rough version of the new player experience.
  • We are still trying to figure out the exact and final style and concepts for the improved GUI, but we have some GUI windows implemented in game already, plus many base widgets. We use those to get a feel of what works and what doesn't.
  • The new graphics back-end rewrite is nearing finalization. A closed-beta branch was sent to a few players to test that rendering works correctly across different hardware. The rendering is faster and no major issues were reported so far. But there is still much to do, such as improvements to VRAM usage and many experiments with shaders.
  • Since from the graphics department Albert is working on the GUI and V453000 is working on the new campaign, only Ernestas is left working exclusively on the entity graphics. He is reworking some more entities for high-resolution, so expect some teasers in the future.
  • There are of course other small projects that are ongoing, such as improved pipe-fluid physics and improved map generation, but more on those when they are fleshed out.
Oh, and our coding always goes as planned without any problems.

Modding support


With every major version of Factorio, we work on improving the Lua API and modding support. In 0.17 I've been looking at cleaning up my back-log of things that I've wanted to implement for quite some time but never got around to. Things such as:
  • Sync mods with a server you want to join.
  • Having multiple versions of a mod installed and being able to switch between them.
  • Letting mods set entities to not require power.
  • Adding support to clone entities/areas of the map from one location to another.
And in general looking at "hacks" that mods are currently doing and seeing if it's reasonable to make the game support what the mod was trying to do in a non-hacky way. Bilka and I have been going over the Mod Interface Requests section of the forums and cleaning it up; implementing things that make sense and taking care of outdated or won't-implement requests. Time and time again Bilka will ask "why can't I do X with a mod?" and the answer is almost always "because nobody asked for it so nobody added support for it". So with that said: if you're a mod developer and think the mod API is lacking something feel free to stop by the forums and ask for it.

Fan Mail


A few weeks ago Demod was showing us some 3D printed belt keychains he made, and mentioned he wanted to send some to us. I showed it in our team slack channel and many us wanted them. A lot of 3D printing later, he sent us a nice package with gifts for most of us.

Hate Mail


You can't receive fan mail without receiving some hate mail. We also received an anonymous package telling us to "eat a bag of d*cks", along with a bag of tasty gummy d*cks. The truth is I know who sent it and it was just a small practical joke. They were trying to show their frustration with the matching server in a friendly-funny way. We thoroughly enjoyed shoving them down our throat.
As always, let us know what you think on our forum.


[ 2018-06-22 12:19:45 CET ] [ Original post ]

Friday Facts #247 - Pricing and its exploits

Regional pricing exploit


Earlier this week I received an unusual number of support emails, some players were having trouble redeeming their Steam keys on our website. In each case, the key they purchased was not a key eligible for a Steam key. Our order/account system isn't the most intuitive, so let me explain the ways in which people can buy the game, and how it relates to our website:
  • Our website - You buy from our website, and you get a key from the Humble checkout. You use this key to upgrade an account, and you can redeem a Steam key.
  • Steam - You buy on Steam, which adds it to your Steam account. You then link your Steam on our website, which upgrades your account.
  • Humble Store - You buy a Steam key, which you activate on Steam, and then follow the steps above.
  • GOG - You buy the game on GOG, which lets you download the DRM free version. You can also redeem a retail key, to upgrade your account.
So in the cases above, the only way to get a Steam key from our website, is by buying directly on our website. The players in question managed to get their hands on 3rd party retail keys. These retail keys aren't distributed for reselling anywhere, so the fact I was seeing a lot of emails coming in about these keys, was an indication something fishy was going on. The source of these keys is GOG, I double checked this my comparing some of the keys these people purchased with the list of keys we generated for GOG, and they matched. My first suspicion was someone cheesing the GOG return policy, buying the game, redeeming the key, and then refunding it. I emailed our contact and there were only 21 refunds in the last 3 months, so it was not the case. The second suspicion was that the GOG server was breached somehow. They reported no incident, but we disabled all the unredeemed keys anyway just to be sure. I checked with the list again, and none of the keys that we deactivated were used by any account. This led to the conclusion, at the very least, these keys were purchased legitimately. So people are legitimately buying keys, GOG confirmed sales had shot up in the last week. Then the question, where are the sales coming from? One last email to GOG and we had our answer: Russian Federation. The reason? We have regional pricing on GOG at parity with Steam, which means someone buying from Russia could buy the game for ~$8.30. Once they buy on GOG, they can redeem the retail key, and sell it for about $20 on a 3rd party site. So one clever guy saw this opportunity, and started buying the game hundreds of times on GOG. The immediate solution is to remove the regional pricing, and in the long term we may be able to implement some 'GOG linking' similar to the current system for Steam users. It is strange that it was only taken advantage of recently, as we have had regional pricing since our launch on GOG 2 years ago. It may be related to the recent price increase.

Price change reception


At the end of March, around when 0.16 was first made stable, we announced the price change from $20 -> $30. I thought it would be interesting to see what affect it had on sales, and as showing it better than telling, here is a graph of units sold between February and June:
It is quite clear there is a huge spike when we announced the change, and again just before we implemented it, but more interesting is the comparison from before and after. You can see that there is a noticeable decrease in sales before and after, but overall it is still quite strong and consistent. This reflects most of the player reaction to the announcement too, many people were commenting that they support the price increase, and believe the game is still worth the asking price (if not more). Regardless of the recent changes, we have had consistent week-on-week sales of the game since our Steam launch, and we are fast approaching 1,500,000 copies sold. I think in part, this is due to our no sales policy, but that is a discussion for another day.

Satisfactory game


We were all excited early this week, when we saw the reveal of another title in the automation and simulation genre: https://www.youtube.com/watch?v=W_lmP8jYVLs From the point of a player I would say that the trailer looks amazing. The energy of it, the looks, the potential, the promise is fantastic. I don't doubt that our office will be playing from the day 0 once it is released. Let me quote /u/european_impostor by saying: "They've certainly talked the talk, now let's see if they can walk the walk". From the point of a Factorio developer, I would say that it makes me proud and insecure at the same time. As the game is undoubtedly inspired by Factorio, it makes me proud that we most probably helped to make this "genre" become a thing. It makes me insecure as well, as it could also completely overshadow our game. To that, I would say, that if they managed to do a game that is better then Factorio on every level, then they deserve it. If there are still going to be areas where Factorio is better, the potential success of the game can actually help us, as when more people come to play the game, more people will eventually look for alternatives in the similar way as the people asking for "other games like Factorio" from time to time. If there is some takeaway for us, then it is, that we shouldn't wait with finishing the game too much. Let us know what you think on our forum.


[ 2018-06-15 22:56:18 CET ] [ Original post ]

Factorio 0.16.51 released

Graphics


  • Changed the battery item icon to be more consistent with the technology icon.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-06-15 12:46:59 CET ] [ Original post ]

Factorio 0.16.50 released

Bugfixes


  • Fixed loading script data when a mod is disabled. more
  • Fixed that 0 time interval was shown as an empty string. more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-06-11 15:35:51 CET ] [ Original post ]

Friday Facts #246 - The GUI update (Part 3)

Ok→Cancel versus Cancel→Ok


A really strange debate started as a continuation of FFF-238. I insisted that the button order should obviously always be OK Cancel, as in any UI I see around.

But little I knew, that this is actually specific to windows, and on Linux or macOS, the order is reversed:
Eventually, we figured out, that we are not the first one trying to solve the problem.The solution we are now experimenting it sounds like a bad idea: "Make it so much different and Factorio specific, that the way it is done in your specific system will not interfere with your muscle memory". Which brings me to the load game dialog mockup:

Load game dialog


The load game dialog is currently the first dialog we are trying to implement with the new tileset and the mockup Albert created recently. The mockup looks like this:
The idea is, that all the dialogs will have this flow from left to right, on the very left, you go back, on the very right, you continue to the next window. The same logic would be consistent in all the dialog windows. Options for example, have only the Back button in 0.16:
It is currently quite weird, as it is not clear whether it is confirm or cancel. Actually, if you press Escape you exit the options without saving it, but if you press "back" you confirm the changes. So these will also have cancel on the left and confirm on the right. Escape is the same as clicking back.
Please note, that all of the pictures are work in progress.

The map generator GUI


Hopefully you are not getting tired of hearing about the GUI, because this game sure has a lot of them, and the next one to talk about is the Map Generator GUI.Since we will have high-resolution spreadsheets for the GUI, all the mockups below are done on 200% UI scale, so they are scaled down on this page. You can click each image to see it in full size. You will notice things were moved around quite a bit. The seed and the replay toggle were moved to the top since they are not part of the preset. Then the preset dropdown, the reset to default button and the description, which are visible at all times so you know what you are editing. Everything inside the tabs is part of the preset.

A new tab is the Enemies tab. The generation settings (Frequency, Size, Richness) are moved from being hidden in the terrain settings, to it's own category. Also the important Peaceful Mode is right at the top.
Finally the advanced tab contains the rest of the settings. Map width and height will now also be part of the preset.
The map exchange string can help you save all your settings in a string, but more importantly to share it with others. Clicking one of the buttons opens an in-window pop-up. The pop-up can be closed just by clicking outside. Player can use the "copy to clipboard" button, but can also copy directly from the textbox.
Now for the neat part: the map preview will be part of the map generator window. Clicking the "Preview" button expands the window (possibly with some quick animation). You can then change the settings as you like, then click Update to see the new map. You can have the map update automatically as you change the settings, by enabling the option. "Real-time update" is off by default since the preview generation can be a bit slow, and having the preview constantly flickering as you change the setting would be pretty annoying. Notice that the "Preview" button has a warning icon next to it (in the images above). Hovering over it will give you a warning that the preview can spoil the exploration part of the game and should be used to understand the settings. My hope is that the majority of players will open the preview, play with the settings, then close the preview and re-roll the seed before pressing play.
(click to view full size) We plan that almost every widget in this GUI (and the of the game) will have tooltips briefly explaining what everything does, since for example not even us developers know what Enemy base Richness actually does any more. As a bonus, here is a mockup with all the ores showing their richness. As always, let us know what you think on our forum.


[ 2018-06-08 13:27:26 CET ] [ Original post ]

Factorio 0.16.49 released

Bugfixes


  • Fixed belts in blueprints weren't selectable in the blueprint GUI.
  • Fixed bad mouse-point when holding blueprints with belts.
  • Fixed wrong connectivity in underground belt fast replace. more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-06-08 12:01:23 CET ] [ Original post ]

Factorio 0.16.48 released

Bugfixes


  • Fixed changing filters in cars wouldn't wake up inserters. more
  • Fixed train driving directions when not accelerating while driving backwards. more
  • Fixed copy-pasting between surfaces would render incorrectly. more
  • Fixed that empty storage tanks had the sound of fluid. more
  • Circuit connection distance check fix. more
  • The logic that shows rail signal indicators now respects bounding box and collision box of the currently held signal. more

Modding


  • Fixed allow_copy_paste only worked on the source entity. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-06-07 17:35:57 CET ] [ Original post ]

Friday Facts #245 - Campaign concept

Being brought in to create content on a very mature project has been an interesting experience to say the least. One of the first things I did was analyse the features of the game and which kind of player the game currently supports. The obvious thing is that Factorio Freeplay strongly attracts and engages players who enjoy an open-ended sandbox type of game. Achievement statistics show that only about 11% of players on Steam have ever launched a rocket, which currently means 'won the game'.
What about the other player types? Well for those that are new to the game, or unsure if they are interested, we will have the New Player Experience. This is a free, combined tutorial and demonstrator mission which we discussed in FFF-241. But what about those that prefer a guided experience? This is the sort of player who wants to play the game, and experience all of what it has to offer, but wants to be taken on a journey. For these players we have the campaign. Why do we need a new campaign at all? We find that the current campaign:

  • Does not include all the Freeplay content as it currently ends after Advanced Circuits.
  • Severely limits player investment by forcing a new factory to be built each mission.
  • Does not convey the feeling of loneliness that the Freeplay does.
  • Is showing its age visually, as it was made before high-res textures and the terrain rework.
To solve these issues we have set about designing new Campaign elements to act consistently to provide the player with a guided experience all the way from Science pack 1 to Space science packs. The first step to achieving this is to have the map border expand each time the player completes a section of the main 'quest line'. This means that the player never loses any of their progress, and as long as these transitions are presented in a smooth way, the jarring effect of the old level restarts will be removed.
Having a continuously expanding map presents many other challenges, but we are confident that it will be worthwhile. This style of level will fit with the style of Factorio much better. Such a map should also end up being as huge as a regular Freeplay environment so as to better place importance on exploration. Exploration in Freeplay is generally player motivated, such as when you are almost out of iron and need to find that next big patch. In a guided experience, letting the player know that there is something out there can give them impetus to dive into the unknown. This brings us to technologies. Now that we have removed level transitions, we have also shot ourselves in the foot. How else will we deliver the technology tree in chunks? Simply making the entire tree available from the start of the game will cause all sorts of balance issues. In our NPE discussion we stated that new recipes should only be given to the player via research. In the campaign, unresearched technologies will only be given by moving to given locations on the map. These would include some non-generated terrain and pre-placed factory structures to help to player see where they are. These could also help to show concepts and workable designs, one thing that the current campaign does do well.

Science packs and technologies


When designing the campaign, we look at many things in the game very closely and often we start seeing some problems. One such problem that has been confusing players for a long time now is the fact that the most important ingredient for progression - the science packs - are unlocked in arbitrary technologies. On top of that we changed those technologies a couple times already, so remembering if that elusive blue bottle is unlocked by battery or advanced electronics just adds to the confusion. So in 0.17 we are going to add science pack technologies which only unlock that new science pack, making it clear in the tech tree where you get them and what they will lead to. Doing this properly requires a bunch of changes to the prerequisites of many technologies, but those are generally just cosmetic changes that don’t actually have any bigger impact on the game. Here you can see the technology tree for the Logistic system. The GUI rework is being worked on in parallel, so this will actually be much nicer to look at in 0.17.

Production vs. High-tech science


When we were designing the High tech and Production science packs for 0.15, the purpose was to create a choice for the player whether after Science pack 3 they want to continue with a more 'production' or 'high tech' oriented method. Looking back, the idea is definitely good, but we want to make it more clear. One of the big obstacles was that the Power armor mk2 required level 3 modules, which are a great candidate for production science pack - but Power armor mk2 is meant to be in high-tech. That made us only put the productivity module to the production science pack, but productivity modules without beacons and speed modules aren’t all that great, so you would still need the high tech science pack to make full use of productivity modules. The resulting solution is that we changed the recipe of Power armor mk2 to require level 2 modules (which still require just Science pack 3) instead of level 3, and moved all of the level 3 modules to production science pack. Additionally the beacons are now unlocked with Production science packs without the need for High tech science packs. The total cost of Power armor mk2 is roughly unchanged, we just tweaked the numbers of modules it requires. These changes should already make both of the science packs offer quite appealing benefits, and it’s not so clear that one science pack is superior over the other. Because of the new technologies for unlocking science packs, it is really easy to see what options each pack unlocks.

Overall we want to keep the campaign and the Freeplay technology trees exactly the same to avoid confusion, so any change we make, we make in both - which should give the Freeplay another layer of polish. As always, let us know what you think on our forum.


[ 2018-06-01 14:30:55 CET ] [ Original post ]

Factorio 0.16.47 released

Bugfixes


  • Fixed wall related consistency check related to modded walls with altered collision boxes. more
  • Fixed inconsistent train direction when reversing in a train vehicle that is not a locomotive. more
  • Fixed that having more than 6 products didn't fit the ui, as it wasn't wrapped. more
  • The system data path is removed from the log when it's automatically uploaded by the crash reporter.
  • IP addresses are no longer hashed in the log file. All IP addresses are removed from the log when it's automatically uploaded by the crash reporter.
  • Fixed crash when placing an entity with title while backers list was emptied.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-05-31 07:52:09 CET ] [ Original post ]

Factorio 0.16.46 released

Bugfixes


  • Another fix for setting PvP map dimensions to 0. more
  • Fixed possible desync related to circuit networks.
  • Another possible fix for multi-GPU setups on Linux. more
  • Fixed that modded infinite inserter stack size research would wrap around instead of maxing out. more
  • Fixed scenarios with partial identical names didn't work correctly. more
  • Fixed splitter lane selection inconsistency when inserting into middle. (Now it is always right for both belts, splitters and underground belts.) more
  • Fixed LuaPlayer::build_from_cursor. more
  • Fixed a desync in replay that would happen if console commands were used during the play. more
  • Fixed desync when setting inserter filters while it's connected to the circuit network more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-05-29 14:40:46 CET ] [ Original post ]

Factorio 0.16.35 released

Bugfixes


  • Fixed shifting for half-belt drawn as part of loader. more

Modding


  • Added recipe-prototype show_amount_in_title and always_show_products.

Scripting


  • Added Added LuaRecipePrototype::show_amount_in_title and always_show_products read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-03-24 12:00:25 CET ] [ Original post ]

Friday Facts #235 - 0.16 stable

0.16 to be declared stable



Rseding thinks that we have the least amount of bugs in the game we ever had. Mostly because of the automated reporting system and partly because of my pushing of everyone to fix everything before starting other tasks. The 0.16.35 (to be released soon) will be declared stable on Monday, if no critical problems are discovered. This naturally leads us to:

0.17 plan


Major features of 0.17:
  • Mini tutorials (kovarex, Twinsen, Albert, wheybags). We would like to iteratively improve the quality of the tutorials based on our first attempts and cover the rest of the game mechanics by it.
  • Improved First Steps campaign and new main campaign (v453000, Albert, wheybags, Ben).
  • Gui rewrite. (Twinsen, kovarex, Dominik, Albert). It is both improving the looks of the GUI and changing the way it works. Some of the drafts were already published in FFF-212 andFFF-191.
  • New graphics back-end, SDL, OpenGL, DX11, v-sync fix, texture streaming, VRAM usage optimizations, shaders (posila, hanziq, jindri, wheybags).
  • Recipe tree GUI (Oxyd). This should be the foundation of some kind of ingame factoriopedia. It should provide the player fast ways to get the answer to questions like: "what is this item used to?" and "What is the graph of recipe dependencies for this".
  • Mod integration improvements (HanziQ, Rseding). Mainly extend the feature of syncing mods with save from save loading to multiplayer game joining, mod browsing improvements, which should at least show the mod picture and more smaller things.
  • Map Editor improvements, both technical and usability wise (Rseding).
  • Map generator improvements and fixes, autoplace specification improvements and documentation (TOGoS).
  • High-Resolution sprites for the rest of the game, including few changes to some entities (GFX).
  • Final game balancing (kovarex, v453000, Twinsen).
Possibly:
  • Spidertron (kovarex, GFX)
  • Better car handling and car in latency state (Dominik)
  • Better fluid physics
  • Organised playtesting for the new GUI, campaigns and tutorials before release.

The big picture


0.17 is a 1.0 candidate, but due to all the new rewrites (new GUI, new graphics, new tutorials, new campaigns), it is very likely that there will be unforeseen changes we need to do. So 0.18 should be a rather short release where we polish the GUI and campaign based on player feedback and also fix any final or long-standing bugs, possibly fix long-standing minor issues and once it becomes stable, it will be declared 1.0 once stabilized.

Weird crash reports


In 0.16.31 we released a bug fix for a specific modded scenario that involved some heavy refactoring of game logic that checked if an item could be put into a given entity. Once 0.16.31 was live we started to get an unusual amount of crash reports inside the Furnace::canInsert(...) logic which made no sense. I thought maybe my fix somehow broke the furnace logic but I couldn't see how it was possible. I spent half an hour theorizing what might be happening but got nowhere. Then I decided to see if any of the other devs might have ideas. Still, we had no idea what could possibly cause it to crash where it was crashing. We finally decided to change our crash log uploading to include minidumps for this specific crash in hopes it would shed some light on the issue. From one of these minidumps, we got a look at the raw assembly code causing the crash, which confused things even further, as it said it was executing code that didn't exist in the executable: 00007FF6DA0B13B2 48 8B 8D D8 00 00 00 mov rcx,qword ptr [rbp+0D8h] 00007FF6DA0B13B9 41 B2 01 mov r10b,1 00007FF6DA0B13BC 48 3B 8D E0 00 00 00 cmp rcx,qword ptr [rbp+0E0h] 00007FF6DA0B13C3 74 51 je Furnace::canInsert+106h (07FF6DA0B1416h) 00007FF6DA0B13C5 48 8B 03 mov rax,qword ptr [rbx] 00007FF6DA0B13C8 E9 33 EC E3 FF jmp 00007FF6D9EF0000 // Jump outside of the Factorio executable 00007FF6DA0B13CD 90 nop // Padding 00007FF6DA0B13CE 90 nop // Padding 00007FF6DA0B13CF ?? ?? ?? // Illegal instruction - crashes here 00007FF6DA0B13D0 75 3F jne Furnace::canInsert+101h (07FF6DA0B1411h) 00007FF6DA0B13D2 0F B7 41 04 movzx eax,word ptr [rcx+4] 00007FF6DA0B13D6 45 32 D2 xor r10b,r10b When 0.16.33 went out the number of crashes in Furnace::canInsert(...) dropped by a factor of 15. We changed nothing about how it worked and somehow it was crashing less. After some further discussion this morning, we believe that we've got a plausible explanation as to what is going on: Someone probably used something similar to Cheat Engine to cheat by modifying the program memory runtime. In fixing a bug, I refactored how Furnace::canInsert(...) operates enough that the executable now crashed in what ever the cheat engine script was doing. As we released new versions, the people using that script stopped using it because it was crashing their game, and so we stopped getting crash reports. As always, let us know what you think on our forum


[ 2018-03-23 22:02:50 CET ] [ Original post ]

Factorio 0.16.33 released

Features


  • Added dropdown to the replay viewing control that allows to switch between the view of different players.

Changes


  • Updated map-gen-settings.example.json. more

Bugfixes


  • Fixed, that when the server is slower then the client, the player input is stuck. more
  • Fixed that using rail by the rail planner stopped replay. more
  • Fixed that burner inserter didn't show fuel in the entity info. more
  • Fixed that blueprint manipulation was broken in replays. (even opening the gui crashed the game) more
  • Fixed PvP script error when 'DEFCON timer' was set too low. more
  • Fixed that ctrl-click to transfer modules into assembling machines didn't work correctly. more
  • Small improvement in mining logic when using rail planner. more
  • Fixed an issue with un-researching upgrade-based technologies. more
  • Fixed a layering issue related to the train stop visualization. more
  • Fixed that player joined/left game messages weren't visible in the replay.
  • Fixed that health bar of other players weren't visible.
  • Fixed a rare crash when joining multiplayer games on Mac.
  • Fixed crash when player with debuff sticker disconnected from game and later reconnected.

Modding


  • Added recipe-prototype allow_intermediates.

Scripting


  • Added events and remote interface to PvP scenario.
  • Added LuaRecipePrototype::allow_intermediates read.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-03-22 17:11:42 CET ] [ Original post ]

Factorio 0.16.32 released

Minor Features


  • Added string import/export to PvP config.

Changes


  • Only item ingredients are automatically sorted in recipes.

Bugfixes


  • Fixed LuaEntity::get_merged_signals() would always require a parameter. more
  • Fixed a crash related to mod settings losing precision when being saved through JSON. more

Modding


  • mod-settings.json is now mod-settings.dat - settings will be auto migrated.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-03-20 13:07:54 CET ] [ Original post ]

Factorio 0.16.31 released

Minor Features


  • Added 'Max players', 'Neutral chests' and 'DEFCON mode' PvP options.
  • Empty fuel slot tooltips show what fuel they accept.

Changes


  • Enemy mines are not completely invisible anymore in PvP scenarios.
  • Land mines now also stun enemy players.
  • Walls will extend towards cliffs same as they already do towards water. more
  • Blueprint building over entities of an enemy force is no longer ignorable(blue). more
  • Ingredients in recipes are automatically sorted. more
  • Changed it so when loading a multiplayer map in single player it auto-promotes you to an admin. more

Bugfixes


  • One more transport belt unsquashing tweak. more
  • Changed LuaSurface::find_entity to also find entities with zero sized bounding boxes but with the given position. more
  • Fixed drawing icons with layers when layers didn't have same source size as main icon. more
  • Fixed another bug where tables were disabled at certain scroll positions. more
  • Fixed applying blueprints could rotate unrelated assembling machines. more
  • Fixed that the god controller wouldn't trigger the player_moved event. more
  • Fixed script error in logistic tutorial when player went outside of logistic area. more
  • Fixed a crash when calling factorio Lua API functions with the wrong number of parameters. more
  • Fixed that blueprint tooltip text wouldn't line wrap. more
  • Fixed that heat and electric energy sources would show prototype efficiency even when they didn't support it. more
  • Fixed wrong scroll pane size in a specific situation. more
  • Fixed a crash when resetting technology effects while the technology GUI is open. more
  • Fixed crash with high-speed short trains crashing into something. more
  • Fixed that multi-line descriptions for multiplayer games would break the config.ini. more
  • Fixed creating cliffs through script or map editor didn't snap them to proper position. more
  • Fixed a crash related to biters in modded games. more
  • Fixed that several errors related to HTTP failure weren't localized. more
  • Fixed ghost rail-planner building would lock in the build rotation after being used once. more
  • Fixed that mod-associated character entities wouldn't be effected by force modifiers. more
  • Fixed that fast-transferring equipment into modded car equipment grids didn't work correctly. more
  • Partially fixed trains sending circuit networks signal to the wrong station. more
  • Fixed a crash when deleting 2 or more stations from a train within the same tick while the last station is selected in the GUI.
  • Fixed another crash when saving fails when out of disk space.
  • Fixed a crash when an open assembling machine with no recipe is mined while in the same tick another GUI is opened in multiplayer.
  • Fixed a crash in multiplayer related to DNS failure.
  • Fixed a crash when the game.take_screenshot() would fail.
  • Fixed that switching between manual & automated mode was creeping forward by a bit every time when manual mode was re-activated.
  • Fixed a crash when trying to set a mod setting value to 0.033333 repeating.
  • Fixed that replay didn't check crc values.
  • Fixed several problems related to replay saving.

Modding


  • Added Entity prototype flag "not-flammable", it prevents entities from catching fire.
  • Stickers can by applied onto players now. Slowdown capsule has been changed to affect enemies only.
  • Fixed some imprecisions in the Production/Electric statistics calculations.
  • Added order_in_recipe into item-group, it defaults to the value of order property.
  • Added item prototype flag "hide-from-fuel-tooltip".

Scripting


  • Removed LuaElectricEnergySourcePrototype::effectivity read since it didn't do anything.
  • Added LuaGroup::order_in_recipe read.
  • Added on_technology_effects_reset event.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-03-19 19:17:18 CET ] [ Original post ]

Friday Facts #234 - Office pictures

Hello

Office pictures


We are moving to a new office in 6 weeks, so we thought to take some pictures of our current one so you can better compare later. The office is certainly more busy than when we moved in, and we have been essentially at maximum capacity now for a year, The extra space of the new office is much needed, and we will show some pictures of our moving when it comes to pass (1st of May).
Windows developer room - Posila, Rseding91, Twinsen, V435000
Support room - Jitka, Klonan
Graphics developer room - Albert, Ernestas
MacOS / Linux developer room - Sindri
Kitchen
Server room, Twinsens 3d printer

Community spotlight


Last weekend there was quite a big event, a 7 team PvP production battle. It was really interesting to watch over 20 players fight it out over the course of the 3 hour match. If you didn't catch it, you can watch the stream video by the organiser and commentator cl0wnt0wn: https://youtu.be/7zu_Ect-tXA In general PvP has not had a lot of extensive playtesting, so every event like this is a great opportunity to see what needs to be tweaked and adjusted. We aren't looking to shift the focus to PvP, but it is nice to make some things less cheesy. One thing that was made clear in the event, is that landmines are a bit OP. They are an invisible insta-kill, with the only counter being to throw grenades everywhere you walk. To make things fairer, in the next 0.16 release you will be able to see a small part of enemy landmines, so if you are paying attention you can know where not to walk:
Can you spot all the landmines? Another change is that players will also be affected by the 'stun' mechanic of the landmines, which means it is less easy to walk through 5-10 of them at once, and they gain extra utility at controlling space. We have some other ideas for making landmines feel better, but those are bigger tweaks that need deeper consideration. As always, let us know what you think on our forum


[ 2018-03-16 18:31:13 CET ] [ Original post ]

Factorio 0.16.30 released

Bugfixes


  • Filters no longer disappear when inventory is downsized. more
  • Fixed free floating sprites would get corrupted on window resize with DirectX renderer when Low VRAM Mode was disabled. more
  • Fixed a crash related to resetting technology effects while a research was in progress/just finished.

Scripting


  • Made it possible for the LuaFrame::align and LuaFrame::vertical_align to have effect on the align of the inner container.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-03-12 23:10:03 CET ] [ Original post ]

Factorio 0.16.29 released

Bugfixes


  • Fixed that small numbers in recipe tooltips wouldn't render correctly. more
  • Fixed a bug where tables do not react under special conditions. more,more
  • Fixed belt movement with squashed items and other gaps present. more
  • Fixed that splitter input priority was not that reliable. more
  • Fixed that fast replacing a circuit connected entity will sometimes double circuit network contents. more
  • Fixed the EULA GUI wouldn't wrap text. more
  • Fixed 'per second' suffix was not localised. more
  • Attempt to fix a problem that would prevent the Linux version from starting. more
  • Fixed that blueprints in the library would show empty component slots. more
  • Fixed that mining item entities when out of inventory space would move the item around. more
  • Fixed multiple desyncs related to walking near walls. more
  • Fixed that the "don't play sound for chat" option didn't work in multiplayer. more
  • Fixed some inconsistencies between damage bonus in item tooltip vs entity tooltip. more
  • Fixed that the players main inventory filters wouldn't persist through death. more
  • Fixed that pipes to ground didn't connect in blueprint preview the same way as pipes do. more
  • Fixed that some underground belts would not be correctly marked as ignorable(blue) when building blueprints.more
  • Fixed enemy land mines would be highlighted when showing blueprint collisions. more
  • Fixed that walls would connect to ghosts from another force.
  • Fixed rebinding build would cause artillery to fire multiple times per click in the map view.
  • Fixed a crash when starting a headless server related to RCON.
  • Fixed a crash when setting item stacks above their stack size through script.
  • Fixed a crash when saving fails due to out of disk space.
  • Fixed that vehicles and train stops wouldn't respect the "not-on-map" flag.
  • Fixed that you couldn't move the map view while running the game at very high speeds.
  • Fixed a crash when taking a large screenshot by script fails due to a lack of memory.
  • Fixed a crash when canceling crafting after changing recipes through mods.
  • Fixed a crash when merging forces through script while a recipe tooltip is visible.
  • Fixed a crash when using the /open command and then opening an item in the players cursor.
  • Fixed a crash when creating modded tree particles.
  • Fixed a crash related to modded speaker entities.

Modding


  • Changed the maximum number of electric poles that can be connected to one entity from 255 to 65535.
  • Added optional Electric pole prototype "draw_copper_wires" and "draw_circuit_wires".
  • Added Entity prototype flag "not-rotatable".
  • Fixed a crash when not defining a stream particle animation.

Scripting


  • Added LuaRCON to allow printing text to a calling RCON instance.
  • Added LuaItemPrototype::fuel_emissions_multiplier read.
  • Added LuaRecipePrototype::emissions_multiplier read.
  • Added LuaFluidPrototype::emissions_multiplier read.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-03-12 16:27:05 CET ] [ Original post ]

Friday Facts #233 - Wiki admin

Hello, it is another Friday already, and one step closer to the double-digit temperatures of spring.

T-shirt shop in full-swing


The T-shirt shop has been back up and running now for a few weeks. If you missed your chance to get a T-shirt before Christmas, now is the chance to place the order while stocks last. It is not quite the rush we had during the holiday season, but our inventory is slowly making its way into the hands of our fans.

Wiki admin visit


Long ago, we created the Official Factorio Wiki, and we mostly decided that the community will maintain it. After some time we looked upon the Wiki, and saw that it was not that great. So we created the guide. Time passed still, and soon the guide was out of date. It is tough being early access in this way, any work we do not may be out of date in several months. Two people stepped up for us during this time, Gangsir and Bilka. From the mess it was, they salvaged and recovered the Wiki to some reasonable state. Soon the quality and usefulness of the Wiki exceeded that of the guide, and with their incredible work, the Wiki became the great resource it is now. At this point Gangsir is no longer able to volunteer his time to administer the Wiki, so Bilka stepped up to take over all wiki administration. Over the last year Bilka has made many key improvements to the Wiki, as well as sorting out technical issues and laying a solid foundation for the rest of our Wiki contributors. Since the work and result has been so exceptional, and the ongoing maintenance of this community resource more important than ever, we have decided to hire Bilka to work remotely as our official Wiki admin. To this end, we invited him to spend a few days with us in the office, to get to know us more closely, and to sort out the details of this cooperation. The following is a short write-up of his visit, and some more info on the work he has been doing.

Office visit & Wiki back end


I arrived in Prague on Sunday evening after an 8 hour train ride from my home town in Germany. While I enjoyed the changing landscapes, I used most of the time to sleep after a long night of playing Factorio. The week started off by Klonan giving me a small tour of the office and then showing me to the desk I'd be working from for the next few days. This was close to Rseding and Twinsen, whom I already knew from discord, so we had many interesting conversations during my visit. The atmosphere was always relaxed, even when we talked about the controversial subject of belts and bots. I also discovered that bugfixing can be a fascinating process to watch, even if it means staying up until 5am. However, most of my time was spent working on the wiki. As a wiki admin I look after the 'back end', which includes tasks like organizing pages and files, guiding new users, and making sure that content is presented nicely. For example, on Tuesday I migrated all technology files to their in-game names using a script, finishing off the long-term effort of unifying file names on the wiki. Refactoring like this makes it easier for new editors to contribute, since they no longer have to tediously search for the right image. I also created some documentation, such as the style and translation guides, which ensures that contributors are up to speed on how things work, and new contributions end up in the right place. One thing that helps with presenting the content is the template system. Templates are small bits of wikitext that can be included in a page to perform a common function, like displaying a button to copy a blueprint string:
Together with scripts, templates allow us to partially automate updating the wiki to the newest version, and alongside access to the game's source code, it is possible for me to update the wiki to a new version within a few minutes. This alone greatly improves the quality of the wiki, and makes it a much more useful resource than it was a year ago. But the wiki is the work of many people, contributing to a common goal. So if you have something you'd like to add, want to translate one of the pages into your first language, or you have some modding knowledge that can find its place on one of the prototype pages, you are invited to request an account and get going! As always let us know what you think on our forum.


[ 2018-03-09 18:54:41 CET ] [ Original post ]

Factorio 0.16.28 released

Minor Features


  • Added a simple recipe price calculator to PvP production score.
  • Item number in quickbar now shows over the "hand" when part of the stack is picked up. more

Bugfixes


  • Fixed drawing endings of transport belts entering underground belt sideways. more
  • Fixed a bug with pumps not activating sometimes. more
  • Fixed roboport connections would be missing in some cases. more
  • Fixed a bug with pumps not activating sometimes. more
  • Fixed that biters in groups had too low tolerance for getting stuck. more
  • Fixed that you could set accumulator energy below 0. more
  • Fixed a crash in rail pathing when deleting signals. more
  • Fixed a crash when creating beam entities through script. more
  • Fixed old boilers in New Hope level 4. more
  • Fixed that changing the values in new game gui could move other gui elements. more
  • Changed order of drawing, so if sprite button uses caption, its text is over the picture. more
  • Fixed that the wire connection distance visualization didn't match the actual distance limits. more
  • Fixed a crash when trains are destroyed while the trains GUI is open. more
  • Fixed train stop indicators wouldn't render with larger blueprints. more
  • Fixed mod changing chest collision box could break PvP starting chest accessibility. more
  • Fixed that the Map editor wouldn't clear the cursor when the tool changes. more
  • Fixed a crash when destroying rails with trains on them. more
  • Fixed a crash when joining Steam games through the Steam interface.
  • Fixed a crash related to adding equipment grid support to armor in existing games.
  • Fixed several crashes related to GUI logic.
  • Fixed a crash when loading pre 0.16 saves when in a vehicle as a god controller.
  • Fixed a crash when teleporting offline players between surfaces.
  • Fixed non-stackable items wouldn't enforce they aren't stackable.
  • Fixed a crash when changing runtime mod settings while someone is joining a multiplayer game.
  • Fixed a crash when a character or spawner dies in the map editor.
  • Fixed a crash when hovering over blueprint book item in the map editor.
  • Fixed a crash when right-clicking a blueprint to open it for editing in the map editor.
  • Fixed a crash when putting blueprints into blueprint books in multiplayer.
  • Fixed a crash when importing some blueprint strings.

Scripting


  • Added has_hidden_tile and collision_mask flags to LuaSurface::find_tiles_filtered and LuaSurface::count_tiles_filtered.
  • Added LuaSurface::set_hidden_tile().
  • Added LuaGuiElement::ignored_by_interaction which prevents the elements from stealing mouse interaction with the parent elements. more
  • Added LuaSpriteButton::number which allows the number to be rendered in the standard way in the right-bottom corner of the sprite button.
  • Added LuaSpriteButton::show_percent_for_small_numbers which, when set to true, forces the number to be shown as percent when smaller than 1.

Modding


  • Added ItemPrototype::fuel_emissions_multiplier which scales pollution generated when the fuel item is used.
  • Added FluidPrototype::emissions_multiplier which scales pollution generated when when the fluid is consumed.
  • Added RecipePrototype::emissions_multiplier which scales pollution generated by the entity using this recipe.
  • Added support to set scroll_pane_style horizontal_scroll_bar_style and vertical_scroll_bar_style.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-03-05 18:13:40 CET ] [ Original post ]

Friday Facts #232 - PAX, Bugs, Graphs

Hello, it has been extremely cold these last weeks. It's one of those weeks when we can't think of anything to write about. So we will try to write some small parts.

The struggle for the stable


Most of us are working on fixing bugs and small issues on our backlog, but some of us are already working on 0.17. TOGoS is doing major changes to the map generator in order to fix the many small issues it still has. HanziQ and sindri are working on the OpenGL 3.3 graphics back-end replacement, along with posila who started working on the DirectX 11 back-end. Wheybags is working on the new font rendering. Oxyd started implementing our first GUI from the GUI rewrite, a new technology GUI that among other small things, has a queue.

Crash reports per version


We made a quick graph from the reports gathered by the crash log uploader.

Factorio is going to PAX East


We have confirmation from PAX that we will have a booth there (number 10019). The event is in Boston between 5th to the 8th of April. We purchased our plane tickets and reserved our accommodation. The tickets for the general public during some of the days seem to be sold out already, so if you want to come check us out, you should buy a ticket soon. We will be there mainly to show the game to new players, see how new players react to the game, hang out with fans and other developers. The devs who will be there are: HanziQ, Klonan, Rseding91, Twinsen, and V453000. Rseding91 and I will also be visiting Los Angeles afterwards, so if there are some hardcore Factorio fans around, we can probably go for dinner or even have a small meet-up. HanziQ will be staying in NYC for 7 days after the convention, so if you are around there you can arrange a meet-up with him. We even played a small mini-game of trying to efficiently fit all the furniture in our booth space, and Klonan made an isometric representation of what it will look like:

Edge case bugs


In the last 2 weeks thanks to the auto crash reporting system I've fixed so many crash bugs that we haven't gotten a single report about. One particularly interesting crash that I fixed a few minutes before writing this was related to Mod Settings in multiplayer, and took me a few minutes of staring at the crash log to understand what was happening. When you join a multiplayer game, the server saves the map and starts uploading it to you. In the meantime it keeps ticking along letting the rest of the connected players keep playing. Anything the other players do is queued and sent to you to be processed once you finish downloading the map. When a player changes a mod setting runtime it packs and sends that change just like any other action, except the logic to load that data was never expecting it to happen while someone was still downloading a map in multiplayer. The end result was: while you're downloading the map the game loads the "mod setting changed" data into memory and says "I don't know what this mod setting is; I'll load it and throw it away" (this logic is meant to handle loading save files when you remove a mod). Once the game finishes loading it applies all of the pending actions to catch up with the other players - as it should - except when the "mod setting changed" is applied, it's now applying an empty setting and the game crashes. The fix was simple but the series of steps and timing required reproduce the crash meant anyone trying to do so most likely would never be able to. Factorio has a handful of these special rules about what you can and can't do at specific parts of the simulation.
  • You can't expect game prototypes to be setup when loading any network actions.
  • You can't delete items while the game is loading.
  • You can't delete entities while the game is loading.
  • You can't use the random generator while the game is loading.
  • You can't enable/disable an updatable entity during the entity setup while running setup as a result of loading the map.
The list gets more and more specific as we keep going. It just goes to show that Factorio internals are very complex and bugs can go hidden for years.

IME support for Chinese, Japanese, Korean


In update 0.16.26 that dropped on Monday, we included partial (Windows) IME support developed by a Chinese fan, pjincz, who kindly implemented it for us. It turned out to be quite a challenge for us westerners, who have never experienced typing in a language that has more characters than there are keys on a keyboard. The feature was requested for a long time by many players, as they couldn't conveniently chat or name things in the game in their native languages.
As always, let us know what you think on our forum.


[ 2018-03-02 21:21:43 CET ] [ Original post ]

Version 0.16.27 released

Minor Features


  • Added refined concrete and refined hazard concrete.

Changes


  • The the name textfield in the rename train stop dialog gets automatically focused and the text is pre-selected.

Bugfixes


  • Fixed that dying would only put the first stack into the dead body. more
  • Fixed that infinite resources would always produce the same result when at minimal yield. more
  • Fixed how the switch event is processed. more
  • Fixed behaviour of the train station list-box when player inventory was big enough to be scrollable. more
  • Fixed that always_show_made_in didn't work for recipe tooltips in the technology GUI. more
  • Fixed a crash when migrating item types in some cases.
  • Fixed movement of belt segment that has a lot of squashed items in it.
  • Fixed a crash in the map editor when changing player armor.
  • Fixed a crash related to mods destroying the player during player events.
  • Fixed a crash when creating a Factorio account using the in-game option.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-02-28 18:44:06 CET ] [ Original post ]

Version 0.16.26 released

Features


  • Added partial IME support for typing Chinese, Japanese and Korean text on Windows.

Changes


  • IPs are no longer directly logged.

Bugfixes


  • Fixed several belt compression problems.
  • Fixed crash when rendering turret range visualization in camera widget.
  • Fixed incorrect behaviour when a text box line wraps. more
  • Fixed achievement deletion dialog. more
  • Fixed choose-elem-button locking not persisting across saves. more
  • Fixed item creeping forward on belt sometimes. more
  • Fixed removal of tracked silo script items. more
  • Fixed a crash when using the Lua GUI element type "entity-preview". more
  • Fixed that "Expected resources" didn't always match what you actually got. more
  • Fixed that heavily modded saves with large amounts of tile types couldn't be loaded without the mods. more
  • Fixed that buffer chests could get items sent to them they weren't requesting. more
  • Fixed belts would stop animating after really long time. more
  • Fixed crash when vehicle with personal roboport was destroyed because of impact damage from its own movement. more
  • Fixed the help locale for the /toggle-rockets-sent-gui freeplay command. more
  • Fixed wrong scale of icons with non-standard icon_size in alt-mode. more
  • Fixed generator effectivity being applied twice when below 100%.
  • Fixed a crash when failing to download a map in multiplayer.
  • Fixed crashes related to Lua stack overflows.
  • Fixed a crash related to changing the stack size of items when removing mods.
  • Fixed a crash when researching logistic request slots.
  • Fixed a crash related to the ending screen data in multiplayer.
  • Fixed a crash when explosion entities where created during migration scripts.
  • Fixed a crash when exiting the game while it's saving.
  • Fixed a crash when loading a map file fails.
  • Fixed a crash related to modded burner generator equipment in multiplayer.
  • Fixed labels could render outside of their defined area.
  • Fixed a crash when placing assembling machine blueprints over ghosts.
  • Fixed a crash when clicking quickly while joining multiplayer games.
  • Fixed a crash when saving the game fails.
  • Fixed a crash when deleting chunks with cliffs on them.
  • Fixed a crash when trying to set player inventory filters in the map editor.
  • Fixed several GUI related crashes related to multiplayer latency.
  • Fixed a crash when hosting LAN-enabled multiplayer games in some instances.

Modding


  • Added GeneratorPrototype::scale_fluid_usage which scales the generator's fluid usage to its maximum power output. Default is false.
  • Generator will now produce pollution if emissions is specified on the energy source.

Scripting


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


[ 2018-02-26 16:47:00 CET ] [ Original post ]

Friday Facts #231 - Belt compression Crash log uploading

Belt compression


The decision of how to approach the belt compression in 0.16 was not an easy one, we were basically facing two possibilities:
  • Splitters are the only way to reliably compress a belt.
  • Compression is automatic everywhere (inserters, sideloading, mining drills).
Non-automatic belt compression is kind of an nice example of emergent gameplay mechanic that I liked. It was not forced on players, but it allowed to get some extra efficiency if they cared enough. On other hand, the solution to the problem is kind of obvious, and having to use it in all the setups everywhere might add more repetitiveness than fun. So after some discussions, we decided to make compression automatic. But we weren't really sure how to do it. The problem is, that once the items are pseudo-randomly added to the belt, with lot of gaps not big enough for another items to fit, it is not clear how should the additional inserters compress it:
The solution was, that whenever there is any gap bigger than the standard distance between items on a belt, item can be inserted there and for a (usually) brief moment, the items are squashed together closer than usual. But once the belt starts moving, the gap between the two squashed item extends to the standard size. This change required us to do some fundamental changes to the belt logic, which could introduce a lot of new problems, but since we just wanted this to be resolved in 0.16, we had to do it now. The result is, that the same setup in 0.16.25+ results in perfectly compressed belt:
The belt mechanics are now easier to use, but the game also flows more nicely. The belt flow still needs to be controlled and belt balancers are still needed. As that feels to be the more interesting part of belt handling to me, I am happy with the final result.

Crash log uploading


Introduction Since 0.16.24, Factorio uploads its crash log to us whenever it crashes (This can be disabled from the options menu). For a very long time we wanted to be able to do this. I would often say that the crash reports we get in the Bug reports forum are a very small percent of the actual crashes, and that we don't really know what is important or not unless there is a major bug that many people report. This was proven to be true after releasing 0.16.24. We had received hundreds of crash logs but nothing was posted in the forum and we quickly found a major problem and fixed it. The way it works is that when Factorio crashes and a crash log was generated, in its dying moments it starts a new process that tries to upload factorio-current.log (and in some rare cases factorio-dump-current.dmp). Once on our server, we parse the stack trace from it and organize it with identical crash logs into folder. This way we can know which crashes occur more often, and allow us to prioritize more effectively. Our interface looks something like this. So far it has proven to be very useful. In just 2 days Rseding fixed about 12 crashes that were found by our reporting tool, none of which were reported on the forum.
This does not mean you should stop reporting crashes on the forum. If anything it means you should report them more often. We very often need more information about the crash, such as steps to reproduce or a save game, but we have no way of contacting the person that uploaded the crash. So please continue to report crashes in the Bug reports forum. Privacy concerns Of course you can't mention the words "uploads data to our server" without some people being concerned about privacy. So I will try to address any uneasiness and apprehension about this new system by being completely transparent. The log only contains basic system information (CPU, GPU and free memory), game display settings, operation log, crash stack trace for the main thread and in some rare cases a minidump. We send that information (if you didn't opt out), in our binary format, securely, through HTTPS to one of our servers. In the next version we even sanitized the log a bit so it does not contain anything that might be seen as a privacy breach, such as IP addresses. We also updated our EULA and included it in the game to mitigate any legal issues. Even will all of this some people think that we are doing something wrong. To paraphrase what kovarex said: "The games I played send all kinds of data and they don't allow me to opt out, now we do it and are transparent about it and we are the bad guys?" A few people mentioned we should make it opt-in not opt-out. Unfortunately this won't work, since very few people will actually check the options and alter the default behaviour, this means we will be back to square one where we rarely know what crashes happen and how often they happen. Another idea was to have a prompt asking if you wish to upload the log or not, after every crash. Apart from the extra implementation time, players will still often click "Don't send", either because that's what they have been doing for many years or because they just want to quickly get back in the game or because they feel that the crash was somehow their fault. This is an invaluable tool that helps us make the game much more stable and provide a great experience to everyone, while sending very little information to us. If you don't trust us you can of course opt out. The mysterious Ryzen issue (aka memory corruption/cpu corruption/bad hardware/not our fault for sure) The second most common crash that was reported in 0.16.24, with 61 unique crashes, was a mysterious crash in EntityRenderer::prepareRow. It's one of those crashes that pops up on the forums every few months, we are unable to find the cause, so we end up not fixing it. Some of us often blame it on memory corruption or CPU error, but I'm often the sceptical person saying that we can't use this excuse every time we can't find the cause of a crash. Now that we have the crash uploading tool, we can do more. First of all we noticed that 100% these crashes were on an AMD Ryzen CPU. Even with all the crash logs we would still not figure out what was going on. So in 0.16.25 we started uploading minidumps when the EntityRenderer::prepareRow crash occurs. The few minidumps we received are still very strange and we are unable to figure out what is going wrong, with the easiest scapegoat being to throw the blame on bad hardware. This will probably be one of those bugs that will haunt us for some time... As always, let us know what you think on our forum.


[ 2018-02-23 21:20:52 CET ] [ Original post ]

Factorio 0.16.25 released

Changes


  • Inserters and belt sideloading can now squash item on belt even when the gap isn't big enough. The squashed gap is extended to normal size once the front of the belt starts to move again. This means, that inserter rows and side loading can produce fully compressed belts without the usage of splitters.

Minor Features


  • Improved behavior of mode switches in deconstruction planner. more

Bugfixes


  • Fixed crash when train was leaving station that was disabled by circuit network or destroyed. more
  • Fixed search box losing focus inconveniently in mods gui. more
  • Fixed client crash when server exits while player has the save game dialog open. more
  • Removing components of a blueprint no longer resizes the window. more
  • Fixed performance issue when running out of storage while big deconstruction is in progress.
  • Fixed scrollbar buttons that would ignore mouse up event. more
  • Fixed that after changing some control settings, the quickbar wouldn't react to them until the game was reloaded. more

Scripting


  • Added LuaControl::is_player()
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-02-19 20:59:50 CET ] [ Original post ]

Friday Facts #230 - Engine modernisation

Hello, on Thursday we received a belated Christmas package from our friends over at Steam:
They definitely won't be lasting long :-).

Getting rid of Allegro


As you may know, one of the foundational blocks of the Factorio engine is Allegro. In fact, it has been part of the game since the very first commit! It is a library for handling all sorts of platform interaction, like creating windows, sound playback, handling input, and graphics rendering. Over the course of the last 5 years, we have hacked a lot of custom enhancements and optimizations into Allegro. Since it is a library with a long history, Allegro copes with a lot of legacy hardware that we don't really have to worry about, which makes it hard to expand and build upon. We also have to deal with a lot of technical issues and driver problems due to the old graphics API that Allegro uses (DirectX 9 & OpenGL 1.2). This has ultimately become a real issue for us and we decided it was time to part with it. The plan is replace the graphics engine with our own code, and leave window management, event handling, and input, to SDL. We hope that using SDL will result in fewer technical issues, better support for multiple platforms, and greater overall stability. Further down the line we can also explore supporting different input methods, such as gamepads and touch-interfaces.

Graphics engine rewrite


Allegro has sneaked it's way into a huge portion of our codebase, so for the past few months, I have been removing Allegro from as many places as I could, and I've replaced some of its functionality with our own code. I've managed to reduce the number of places we call into Allegro by roughly 50%, and now has come the time to start working on the graphics engine. So a month ago, HanziQ and I have started on a long and painful journey of replacing the Allegro rendering completely. There is not really a better way to do this than to just rip the band-aid off, so we removed all Allegro rendering and started writing our own from scratch. We are using OpenGL 3.2 for now, but DirectX 11 support is definitely coming before we release it. We are obviously very good at it and encountered no problems whatsoever.
The whole process was smooth sailing from the get-go.
In fact, it was so easy, that we even had time to unwind with some controlled substances.
Right now, we've got the game back to rendering almost everything properly, and within a few weeks it should be just the same as the Allegro rendering. From this we can start building out our own feature set designed around what we need, and do more advanced work. For instance, DirectX 11 allows us to use a new shader model which has a higher instruction count limit, which will let us do more complex and interesting things with shaders. The more modern API's also have much better developer tools for diagnostics and debugging. There are a lot of other possibilities moving forward with our own rendering engine, and it is a good step towards the long term viability of the 'Factorio engine'.

T-shirt shop re-opens


Jitka has arrived back from her vacation this week, so we have now re-opened the t-shirt shop. Orders will be sent out every Wednesday as before. As always, let us know what you think on our forum.


[ 2018-02-16 17:23:35 CET ] [ Original post ]

Factorio 0.16.24 released

Minor Features


  • When the game crashes, the crash log is uploaded to us. You can opt out by disabling it in the options menu.
  • Player chat color when set through '/color r g b a' command will be brightened. more

Bugfixes


  • Fixed that LuaEntity::get_merged_signals() would return wrong value if no wires were connected. more
  • Fixed flamethrower turret could get stuck in deactivated state when fluid type in its pipe changed. more
  • Fixed energy consumption of laser turret in recipe tooltip. more
  • Fixed that specifying a shift for a storage tank's fluid_background would shift it incorrectly. more
  • Fixed that ctrl-arrow/backspace/delete worked in the console but not in other text boxes. more
  • Fixed that you could define a fluidbox height of 0. more
  • Fixed trains "twitching" under certain circumstances. more
  • Fixed wrong hairy dead tree graphics positioning. more
  • Fixed that ping-pong DNS lookup failure would shut down running multiplayer games. more
  • Fixed LuaInventory::getbar/setbar used zero-based indexing. more
  • Fixed incorrect electric network connection rendering on the map. more
  • Fixed train would reset its "waiting on signal" penalty when recalculating path due to waiting too long. more

Scripting


  • Added script.on_nth_tick(n, function).
  • Added LuaSurface::can_place_entity(...) optional parameter "build_check_type" and "forced".
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-02-15 17:14:47 CET ] [ Original post ]

Factorio 0.16.23 released

Changes


  • Lamps stagger again during day/night transition. They also turn on much sooner and turn off much later.
  • The deconstruction planner "trees/rocks only" option can be inverted using the whitelist/blacklist toggle.
  • The Rocket silo entity info now shows 'Rocket parts: 50/100'.
  • Removed 'starting inventory' PvP option, as starting chests are a more proper solution.
  • Added 'required satellites sent' option to space race PvP game mode

Bugfixes


  • Fixed snapping locomotive to station sometimes not working. more
  • Fixed modded loaders with different dimensions crashing when destroyed. more
  • Fixed that module effects would go negative when adding too many beacon effects together. more
  • Fixed that changing an assembling machine recipe by copy-paste would delete the in-progress recipe items. more
  • Fixed that directly replacing modules didn't work correctly. more
  • Fixed that changing train stop names wouldn't update the last-user. more
  • Fixed that the logistic count tooltip wouldn't show correctly for negative values. more
  • Fixed that changing the stack size of the satellite through mods could make it impossible to win. more
  • Fixed circuit controlled stack override sometimes being incorrect. more
  • Fixed that mods could specify invalid categories, for a few classes of modded item. more
  • Fixed pipette tool orientation of curved tracks. more
  • Fixed that beacons would ignore the allowed effects on an entity. more
  • Fixed that rail ghosts weren't placeable on top of enemy force's land mines, thus revealing the location of the mines. more
  • Fixed Lua module limitations array being a map of strings to numbers, instead of an array. more
  • Fixed that the market GUI wouldn't use a scroll bar even when the offers didn't fit in the window. more
  • Fixed worker robot speed in PvP scenario. more
  • Fixed that the blueprint preview in the blueprint library was smaller than the blueprint view you get after opening a blueprint item. more
  • Fixed that the technology search would be broken by disabled technologies in some cases. more
  • Fixed that mods changing stack sizes would break the inventory transfers tutorial. more
  • Power switch copper wire connections are now saved in the ghost when destroyed and restored when rebuilt. more
  • Fixed LuaSurface::regenerate_decoratives() would generate much more decoratives than normal map generator run. more
  • Fixed clicking the label in sort-able tables wouldn't effect sorting. more
  • Fixed that recipe tooltip labels would render outside of the tooltip area in some cases. more
  • Fixed clamp_position=true on artillery shells would negate artillery range bonus. more
  • Fixed item icon would not be rescaled to normal size if icon_size not 32. more

Modding


  • Added "friend" and "not-friend" force trigger modifiers.
  • Added optional night vision equipment prototype "darkness_to_turn_on".

Scripting


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


[ 2018-02-12 10:46:28 CET ] [ Original post ]

Friday Facts #229 - Taiwan report Lamp staggering

Taipei Game Show 2018


After a long 14 hour flight back, Albert, kovarex and I arrived back from Taipei, after our attendance at the Taipei Game Show. Jitka started her vacation by staying there to visit the Taiwan island. We stayed there for 7 days (2 days in the business area, 3 days in the convention area and 2 days of free time where we visited the city). In the business area we met many potential business partners and got way too many business cards. We made some friends among the other indie developers and tried all kinds of fun, weird, interesting and some bad indie games. The convention area was very crowded, with 350,000 visitors slowly trying to make their way through the fairly small convention hall. I can't speak for the others, but I still enjoyed myself. Even though it was crowded, most of the games were in Chinese, and I only got to try one AAA game, there is something about being surrounded by games, gamers, and game developers that makes me feel great. Our booth was in the indie area. We had many people coming to try the game but also many fans wanting to speak with us and congratulate us for making a great game. AndrewIRL who lived there for a few years, invited us for dinner to "the best restaurant in the city", and we were not disappointed. Factorio is not an easy game to demo, since it takes at least 30 minutes to kind of understand what the game is about. But having the trailers looping on the screen, and having subtitles for the gameplay trailer meant that the people got a fair idea about what the game is about and how complex it is. While not the best, we had people start by playing the campaign. Most of them were leaving after the first level but some of them were also getting addicted and playing for multiple hours. We gave free Steam keys to some of the people who were more engaged with the game. It was a learning experience to see people play the game for the first time and to see the most common problems with the campaign, the interaction, the UI and the Traditional Chinese translation. The days were super exhausting though, many of us collapsing at the accommodation and sleeping for 10 hours. Luckily we had 2 more days to relax and enjoy the city before flying back. We mostly split up and each of us visited what they were most interested in, with me going through the electronics markets and riding a rented bike through the rainy streets. To give credit where credit is due, I'd like to thank the game show for inviting us and sponsoring our booths, and Razer for conveniently lending us the laptops we used to demo the game. Financially there is no point in us going to a game show, our attendance did not bring us any extra sales in Asia, as expected. The point of going there, for us, is to visit the show floor, play and see random games, make gamer friends, meet fellow developers, meet big fans of the game and maybe make some business partners. Since many of you mentioned PAX and some of us are interested in going there, we are trying to see if we can attend PAX East this year (April 5-8th). So you might have another opportunity to come and take selfies with some of the Factorio devs.
From left to right: Jitka, Albert, Twinsen, kovarex.

Lamp staggering returns


It was always a nice aesthetic touch, and we have had it for a long while, but during the most recent 0.16 one small feature has been absent. That is of course, the lamp staggering: During the day/night transition, lamps will turn on and off and different times. For example, this is how it looked it 0.15:
During the development of 0.16, there was a move by kovarex to optimize the lamps. By all means the optimization was a success, but along the way the lamp staggering was removed. This didn't go unnoticed, but a proper solution was quite tough. A simple way we tried (even in the first 0.16 release) was to just visually turn the lamps on at different times. It looked the part, but unfortunately was technically incorrect, as the lamps would look 'on', but not actually consume any electric power until the required darkness at which point they all started consuming power. Due to its incorrectness, this visuals-only solution was reverted, so for most of 0.16 this is what it looks like:
It is also obvious in this GIF, that they turn on way too late, it is already very dark before they turn on. So anyway, there is a problem here, in that we want the lamps to turn on 'correctly', but it needs to not basically undo all the optimization. To give a brief summary of the optimization, the lamps no longer have to update themselves, the electric network just knows how many lamps there are. When it gets dark enough, the electric network knows that all the lamps will turn on, so just multiplies the consumption of the lamp by how many there are. This is similar to the solar panel and accumulator optimization. To work correctly, the rendering of the lamp, and the electric network update, have to know exactly when a lamp will be turned on, without being able to share any information with each other. So first we define two values, how dark is it when they start turning on, and how dark it is when they should all be turned on. This gives us a darkness interval where the staggering will take place. Then when a lamp is built, we assign it a specific time in this interval at which it will turn on, and then also keep that value in a list in the electric network. This way, the lamp will visually turn on, at the same time as the electric network will know an additional lamp is consuming electricity. The result unsurprisingly, looks similar to how it was before, and the lamps don't turn on too late:
A side benefit, now each lamp prototype can define its own intervals, so it's easy to adjust for the intrepid modders out there. The other problem was also cleanly resolved alongside the staggering, so now the lamps turn on at a reasonable time once again. You can look forward this minor change with 0.16.23, which will be released on Monday. As always, let us know what you think on our forum.


[ 2018-02-09 17:23:12 CET ] [ Original post ]

Friday Facts #228 - High resolution turrets

Bugfixing report


Stabilization goes well, the game seems to be quite stable right now (as in - not many crashes are being reported), in fact I think we are at the phase where additional bugfixing makes the game less stable, because more bugs are introduced than fixed, or some critical bug slips through our automated tests. But there are still lot of issues that need to be resolved before we declare 0.16 stable and move on to 0.17 development - the largest issue being belt compression problems. We finally fixed compatibility problem with OS X 10.9 Mavericks after it was broken in 0.15.40, when we updated our development environment to a newer version of boost, and was still broken in 0.16.x despite of us completely replacing boost with standard libraries from a newer version of C++. However, we might drop Mavericks support in 0.17, as we are considering migrating the game to OpenGL 4.1, which won’t be available on Macs that are unable to run a newer version of macOS. Speaking of OpenGL, we have several reports of the game crashing in rendering on Linux when the game is disturbed somehow (for example window resizes, loses focus or user switches workspaces), even though it is terribly inconvenient, the game seems to be otherwise playable on these configurations, and we don’t want to spend a terrible amount of time trying to figure out what is wrong with our current rendering system, when we plan to do complete overhaul of it in 0.17. We will investigate these issues, but they might go unresolved until 0.17. I’ve been looking into some corrupted saves this week, still not being able to figure out how these mysterious corruptions occur. For example this save had two iron ore entities on two different chunks saved with zero entity ID. This could have happened only if those entities had a wrong pointer to the iron ore prototype, so when the game read the ID from the prototype on saving, it would read a value from some random part of memory, or if the ID was corrupted on copying from the prototype to buffer that is saved to disk. Since these kind of corruptions seem to be relatively rare, we suspect it might caused by random hardware failures (maybe cosmic ray hitting a transistor and flipping bit somewhere?), but it would be nice to have some proof it is not some dangling pointer in our code that causes random parts of memory to be overwritten by who knows what. One way to test it would be to check for tile corruptions. Tile data for a chunk is allocated in a 4kB array at the beginning of the chunk. We could create custom allocator for chunks, so that data structure representing chunk is aligned to virtual pages. That way tile data would occupy a whole single virtual page which we could flag as read only. Then, if due to a bug we write over tile data, the OS would crash the game and we would get a stacktrace and crash dump to investigate. But if a cosmic ray would hit the RAM and flip a bit, the corrupted save would still be produced. However, we currently don’t do any custom allocation of virtual pages, so it might be quite hard to implement. We also need to change tiles sometimes (when map generation runs, when player uses concrete or landfill, when a script changes tiles, etc.) and we don’t know how expensive it would be to change pages from read only to read-write and then back to read only. So it might be just easier to spend two hours on fixing a broken save that someone sends us once every week or two.

HR Turrets


Recently I have been working on high resolution graphics for gun and laser turrets. The 3D models are pretty much exactly the same as Albert with Pavel made them back in 2015, so I just needed to make them render correctly in our modern system. You can see the laser turret base is different, tt was created a long time ago as well, just never used. With the high resolution versions, we can now take the chance to alter the designs of entities, in this case just use what we already have. We believe that the new stand fits much better to the laser turret as it doesn't need any super heavy basing, and makes the two turrets more visually distinguishable. They are still a work in progress, but as you can already see in the following mock-up, laser turrets are now going to shoot something we can actually call a laser.
It often happens that we make very nice graphics for the entity itself, but spend less time on extra effects which would really make it feel great in the game. In my opinion the laser turret is the prime example of this. The laser "beams" have been ridiculed many times in many discussion threads, and now with the work on the high resolution version it is finally a good opportunity to change them. The way how it applies damage is probably going to have to change at least a little bit along with a few other minor things, so they might not make it into 0.16 to avoid any unnecessary problems, but we will see about that. In the following action movie you can see our very own Posila running away from the fauna of the unexplored planet full of life and natural resources, being saved by nothing other than his skills and laser turrets, while his productive teammate watches the action unfold.
The flamethrower turret is also going to receive some small graphical polishing with its high resolution version. We will present that one some other time as it is not ready yet. As always, let us know what you think on our forum.


[ 2018-02-02 19:37:42 CET ] [ Original post ]

Factorio 0.16.22 released

Bugfixes


  • Fixed a crash when loading saves with modded camera GUI elements. more
  • Changed the "load save in map editor" to "convert save to Scenario" to support locale and custom scripts. more
  • Another attempt to fix crashes on OS X Mavericks (version 10.9). more
  • Fixed that some mod settings would always detect as different than the server when trying to join. more
  • Fixed that turrets that died and where rebuilt couldn't be mined. more

Modding


  • Added optional RecipePrototype::allow_as_intermediate to disable a recipe being used as an intermediate when hand crafting.
  • Added PlayerPrototype::enter_vehicle_distance.

Scripting


  • Added LuaRecipePrototype::allow_as_intermediate read.
  • A player changing the active index in a blueprint book in the cursor will now fire the player_cursor_stack_changed event.
  • Added LuaEntityPrototype read properties: running_speed, maximum_corner_sliding_distance, build_distance, drop_item_distance, reach_distance, reach_resource_distance, item_pickup_distance, loot_pickup_distance, enter_vehicle_distance, ticks_to_keep_gun, ticks_to_keep_aiming_direction, ticks_to_stay_in_combat, respawn_time, damage_hit_tint, character_corpse.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-02-02 09:20:17 CET ] [ Original post ]

Factorio 0.16.21 released

Minor Features


  • Added support to load save files directly in the map editor.
  • Added "Save and play" button to map editor, to allow quick iteration.
  • Added levels in campaigns to level editor "open" menu.

Changes


  • Requesters requesting from buffer chests (which includes players) have higher priority than other requesters.
  • Player death messages will be printed to all forces they are friends with.
  • Player death messages include the player tag.

Gui


  • The left/right switch used in locomotive and splitter can be also switched by clicking the label buttons.

Bugfixes


  • Fixed teleporting pumps would crash the game. more
  • Fixed dragging in the map preview and technology GUI didn't work correctly. more
  • Fixed walls wouldn't connect correctly when built through script in some cases. more
  • Fixed that the equipment grid was too small when using extra-low graphics quality. more
  • Fixed inserters could get stuck trying to pick up items off the ground in some cases. more
  • Fixed issues related to splitter priorities. more
  • Fixed that the "recursive technology prerequisites detected" error message wouldn't print the dependency cycle properly. more
  • Fixed (and hopefully generally improved) the splitter GUI so invalid states are not possible. more
  • Fixed that biters would not be able to path find close to cliffs. more
  • Fixed mod control settings would be wiped out when game entered minimal mod due to mod error on start up. more
  • Fixed that the tips-and-tricks GUI would open when running a replay. more
  • Fixed that the blueprint setup GUI wouldn't show in some situations. more
  • Fixed that the asynchronous saving process could freeze in headless mode. more
  • Fixed crash in PvP when distance between starting areas was too low. more
  • Fixed small locale error in resource entity info. more
  • Fixed crash when player deletes blueprint book from their library while other player has the book opened. more
  • Fixed that custom scroll panes didn't respect vertical scroll policy correctly. more
  • Fixed a crash in the technology GUI when using LuaForce::disable_all_prototypes(). more
  • Adjusted collision boxes of decals to reduce chance a decal will be generated in position colliding with water. more
  • Fixed that the recipe tooltip "made in" wouldn't show every possible machine when there was a lot of them. more
  • Fixed ghost of lamp would not connect to logistic network when revived. more
  • Fixed that the command line --map2scenario option wouldn't convert scenario-created saves correctly. more
  • Fixed handling of mouse bindings in map view. more
  • Fixed that you could get stuck after using cliff explosives. more
  • Fixed biters getting stuck next to a wall in some situations. more

Modding


  • Added optional create_ghost_on_death for entities with health that normally make ghosts on dying.
  • Added optional always_show_made_in to recipe prototypes.

Scripting


  • Added last_research to the on_research_started event.
  • Added LuaEntityPrototype::energy_per_hit_point read.
  • Added LuaEntityPrototype::create_ghost_on_death read.
  • Added CustomMinimap GUI element type.
  • Added CustomEntityPreview GUI element type.
  • Added LuaInventory::sort_and_merge().
  • Added an optional "invert" option to LuaSurface::find/count entities filtered.
  • Added LuaForce::enable_all_prototypes().
  • Added LuaRecipePrototype::always_show_made_in read.
  • Added LuaControl::get_main_inventory().
  • Added LuaGuiElement::column_count read.
  • Changed util.merge to always deepcopy nested tables. more
  • Changed events so they won't fire until every mod has had on_init ran.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-02-01 15:36:51 CET ] [ Original post ]

Factorio 0.16.20 released

Bugfixes


  • Fixed another compression problem on belts related to splitters.
  • Fixed that the cancel craft, import blueprint and blueprint book buttons didn't work.
  • Fixed biter related desyncs. more
  • Fixed possible desync related to logistic network.

Modding


  • Renamed render_layers: ground_patch, ground_patch_higher, ground_patch_higher2, and air-entity-info-con to ground-patch, ground-patch-higher, ground-patch-higher2, and air-entity-info-icon.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-01-26 21:47:17 CET ] [ Original post ]

Friday Facts #227 - Rendering, Trees Scenario talk

Hello, another week has passed here, with part of the team still out in Taiwan. They should be back next week, with some news of their great adventure.

Rendering/VRAM optimizations


With the addition of high resolution sprites we have started pushing memory limits of GPUs much harder than we originally anticipated. Currently the game requires about 2.4 GB of VRAM for sprites alone, and then it can use couple hundred megabytes more for working buffers and minimap data. While trying to optimize rendering we learned that the issue is quite complicated, as one optimization could improve performance on one PC, and worsen it on another PC even with a similar hardware configuration. For this reason we usually make it possible to turn these optimizations on or off in graphics options. Since the beginning, Factorio was using so called sprite atlases - which are big textures with lot of individual sprites packed into them. The advantage of using them is that we can batch rendering of sprites that are in the same atlas, and reduce the total CPU overhead of creating many draw commands for the GPU. A disadvantage is that it might be harder for the graphics driver to fit this single large texture into VRAM, as opposed to a lot of small ones. Since high resolution sprites don’t fit into the single largest supported atlas size any more, we started to sort them into logical atlases - things that are drawn usually together are put into the same atlas. So terrain tiles, shadows, GUI graphics, icons, and recently objects that are drawn under shadows, are all separated into their own atlases. This way we can keep most of the sprite batching intact, while overall enabling us to add a greater number of larger sprites. Another problem we can solve is related to texture sampling. When you zoom out a lot, an entity which was 256 pixels wide could be only 32 pixels wide, which means only every 8th pixel from the source sprite is drawn. This can have be problem for the GPU’s texture cache, and can cause a significant framerate drop when zooming out. To solve this, we can enable mipmaps, which are pre-downsized versions of textures, from which the GPU will select the size that is the most appropriate for current scaling factor. This is what we did for trees in 0.14 and now for terrain and decoratives in 0.16. The disadvantage is that mipmaps take up extra VRAM, and sprites can’t be as tightly packed in the atlas because they would start to ‘bleed’ into each other in the downscaled versions. With the ever increasing amount of high-resolution textures, we have some plans to implement some stronger VRAM optimizations later on. We will have some news on these as we develop them, but one way which coincides nicely with the high-resolution update, is the splitting of sprites from their shadows.

Trees refresh


Right now trees are kept as single sprites, with the tree and tree shadow combined. We originally thought this would be a benefit, as it would reduce the number of sprites the game has to render by half, but in the case of trees, this leads to a lot of empty space in the sprite image:
The entire orange portion is just empty pixels that the GPU has to waste time sampling, which can be quite wasteful when there are hundreds of trees partially overlapping. A second downside is that they will take a larger amount of space in the sprite atlas, meaning a greater VRAM usage. Splitting the shadow from the sprite also has some side effects, due to the overlapping shadow sprites all being merged before being rendered. This means there will no longer be the deep black areas where the old tree shadows would layer on each other. There is some further reading on shadow rendering in FFF-42.
This helps the terrain fit more naturally with the trees, and helps keep the darkness of the shadow consistent with the other entities. But has some downsides.
By removing the deep black areas, the resulting scene tends to look more flat, and our eyes see the colors as more washed out, even though they are the same on both sides. We can counter this problem by adding deeper shadows to the sprite itself, but this only works for trees using volumetric leaves, so we are reworking all the trees to work with this new system.

Scenarios & Competitive scenarios


As it turns out, not so many people know that we package quite a few scenarios with the game. Personally I like scenarios because allow us to explore aspects Factorio gameplay in a more focused way. While generally we aim to make a fulfilling freeplay experience, we are always looking for other interesting ideas that work within the game. If you have no idea what I am talking about, look here:
The most interesting to me, is exploring the nature of competitive Factorio. This doesn't necessarily mean fighting killing each other toxic cut-throat competition, but giving that heart-racing high-pace action that you don't really find in the rest of the game. Already we have two scenarios with a competitive nature:
  • Team production - Teams are given a small area to work in, and a random task to fulfil.
  • PvP - Allows setting up multiple teams with a wide variety of customizability and setup preferences.
Having written and played both of these quite extensively, I have some experience in what they 'feel' like. Honestly the fact you are working against other players in a meaningful way, really does give something the freeplay doesn't. Team production has the 'hit the floor running' pace that really feels pretty nice, there is this real rush to get the furnaces down and the smelters smelting before the other teams. Since PvP has a lot of setup options and game modes to pick, how it plays can vary a lot, but in general the concept leads to some great player interactions. Perhaps the name is a misnomer in this way, but PvP scenario can also be used to set up allied teams, just playing together with separate bases and technology progression, so it isn't always combat/competitive focused. Honestly over the last few years of playing, especially on medium to large game servers, I find the freeplay Factorio experience quite calm and relaxing, almost a little boring at some points. I am not saying I have seen it all, but there is not so much thrill to this side of the game to me any longer. For me at least, scenarios let me employ the best parts of the games design, in a way that brings back the challenge and interesting gameplay decisions. I am also thinking of starting an 'official' Factorio MP server, so we can showcase these scenarios with some planned events. There are a few questions related to this, and scenarios in general, that I would like to put forward:
  • Do you have any ideas for new scenarios, or improvements to the current ones?
  • What sort of scenarios and events would you like to see and/or take part in?
  • Do you think developing a competitive aspect to Factorio will benefit us in the long run?

Production score


I recently added a new game mode to the PvP scenario: Production score. The concept is simple enough, you will earn points for the amount of items your factory produces, and teams will compete to earn the most points. In general I think it is quite nice, as teams can compete somewhat indirectly with one another, and victory isn't solely dependant on military power. Part of the result of this, is that the price generator I developed can be used for other things. It is done in a general way so it will dynamically calculate new prices when mods and other things are considered, and we can use it to make nice graphs such as the following:

Scenarios as mods


Speaking of scenarios, I often see some issue raised that there is no easy way to share and install scenarios. Really that is quite true for stand alone scenarios, as you will need to copy the folder into some other scenario folder which might not exist in the user directory, or you can join a server hosting the scenario already and a copy will be saved locally. These are both quite messy and unviable methods. Thankfully there is a very easy solution, and that is to pack your scenario into a mod. This essentially solves the problem of scenario distribution, and makes it as simple as adding any other community addition to the game. There is also the system, that mods that include only locale, campaigns and scenarios, are marked as 'non-game changing'. Since it doesn't affect the state of the game, the mod is completely ignored when dealing with mod syncing, and you won't have to worry about having the mod installed or not when joining any servers. As an example of how it can be done, I have packaged one of my pet projects as a mod, so you can see how easy it is to package scenarios into mods: Factory floor. As always, let us know what you think on our forum.


[ 2018-01-26 18:51:55 CET ] [ Original post ]

Factorio 0.16.19 released

Minor Features


  • Added PvP options: Disband team on loss, team area artillery and give artillery remote.

Bugfixes


  • Fixed that the game allowed mining speed modifier less than -1, which resulted in negative mining speeds. more
  • Fixed that fast-replacing power poles while running would just delete them. more
  • Fixed that you couldn't exit vehicles with large collision boxes. more
  • Fixed that LuaPlayer::can_insert and LuaPlayer::insert didn't agree. more
  • Fixed game state corruption related to ordering deconstruction of entities with enabled connection to logistic network. more
  • Fixed that teleporting roboports when robots where charging would lead to corrupt saves. more
  • Fixed that toggle-console wouldn't work with modifier keys. more
  • Fixed graphical artifacts in terrain when zoomed out. more
  • Fixed that LuaForce::disable/enable research wouldn't update the GUI correctly. more
  • Fixed that pumps would ignore fluidbox filter. more
  • Fixed crash caused by non-ASCII characters in name of custom scenario. more
  • Fixed that idle biters would ignore the player when approached. more

Modding


  • Added support for setting icon_size per icon layer.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-01-25 20:07:45 CET ] [ Original post ]

Factorio 0.16.18 released

Bugfixes


  • Fixed searching for recipes could add the "no recipe available" message multiple times. more
  • Fixed a crash related to biters. more
  • Fixed that setting locked = true on choose-elem-buttons through the mod API would still let the button be cleared. more
  • Fixed logistic entity highlighting didn't work correctly in some cases. more
  • Fixed that the map editor could get stuck if you built out-of-map tiles directly in the center of the screen. more
  • Fixed Linux runtime requirements being dynamically linked. more
  • Fixed (hopefully) macOS crash on startup due to 10.9 compatibility fix. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-01-23 10:48:19 CET ] [ Original post ]

Factorio 0.16.17 released

Features


  • Added filter to splitter.
  • Added input and output priority to splitter.

Minor Features


  • Added a "clone group" button to the permissions GUI.
  • Added PvP options: Spectator fog of war, starting chests, chest item multiplier, team areas turrets, automatic round time, and base exclusion time.

Balancing


  • Increased the stack size of roboport from 5 to 10.
  • Decreased collision box of substation, radar and chemical plant so it is possible to walk between it and other entities.

Bugfixes


  • Fixed that rail chain signals didn't work with copy-paste. more
  • Fixed that double clicking the empty space in scroll bars on the load/save map GUIs would trigger the load/save. more
  • Fixed that walking near the edge of water could result in no footstep sounds. more
  • Fixed building belts over splitters marked for deconstruction while a ghost belt was under the splitter didn't work. more
  • Fixed that ghost solar panels would show as having energy. more
  • Fixed that the bonus GUI didn't show correct numbers for some bonuses. more
  • Fixed that a single water tile that separates two terrain types would become invisible. more
  • Added graphics option "Separate lower object atlas" to address performance issue when rendering lot of decoratives on some PCs. The option will put sprites drawn under shadows in a separate sprite atlas with mipmaps enabled. This should reduce GPU load, but slightly increase CPU load and VRAM usage. more
  • Added a command-line option --executable-path to allow launching Factorio through a custom ld.so on Linux. more
  • Fixed a crash when setting invalid prototype values for vehicle type entities through mods. more
  • Fixed that you couldn't attack nests with your pickaxe.
  • Additional fix of the rail block visualization for high res. more
  • Fixed jittering when running against entities with connected bounding boxes (for example pipes). more
  • Fixed that entities with multiple items to build them wouldn't fire mod events in some cases. more
  • Fixed recipe tooltip with many raw materials showing incorrectly. more
  • Fixed invisible GUI when assembling machine with no recipe is opened. more
  • Fixed a crash on Linux that would happen after dragging a UI element outside the game window. more
  • Fixed inconvenient drag-placing of electric poles around large entities. more
  • Fixed un-setting controls wouldn't work correctly for key bindings with default modifiers. more
  • Fixed artillery projectile shadow was not aligned with artillery cannon shadow. more
  • Fixed line breaks in changelog with UI scale. more
  • Fixed that too many biters trying to return to a spawner could make all other biters inactive. more
  • Fixed robots deconstructing artillery turrets could lose ammo. more
  • Improved scroll behaviour in server list. more
  • Fixed possibility of receiving the previous rounds input items in Team production. more
  • Fixed that the game could create many enemy unit groups resulting in poor performance. more
  • Fixed pasting entity settings would not disable connection to logistic network. more
  • Fixed blueprint containing rocket silo could result in broken silo if placed before rocketry was researched. more
  • Fixed rail chain signal ghost would emit light. more
  • Fixed that blueprint strings wouldn't retain storage chest filters. more
  • Fixed passing LuaObjects through the remote interface wouldn't always work correctly. more
  • Fixed that LuaSurface::create_entity wouldn't work to create walls on top of ghost walls. more
  • Fixed that a furnace or assembling machine with > 100% productivity with a <= 1 tick crafting time recipe wouldn't work correctly. more
  • Fixed building blueprint rails on rails marked for deconstruction didn't work correctly in some cases. more
  • Fixed a migration issue related to logistic entities and inventory resizing. more

Modding


  • Removed terrain_collision_box from fish prototype. To prevent fish with non-zero collision box from blocking offshore pump placement, default collision mask of fish has flag 'colliding-with-tiles-only'. more
  • Disabled recipes won't be cleared from an assembling machine ghost, if the assembling machine prototype has fixed_recipe set.
  • Entity of type offshore pump can be rotated on ground if flag 'filter-directions' is not set. more

Scripting


  • Changed the tile related events to include the old tiles and positions instead of just positions.
  • Added on_pre_player_crafted_item and on_player_cancelled_crafting events.
  • Added on_entity_damaged event.
  • Added on_chunk_charted event.
  • Added LuaEntity::splitter_filter, splitter_input_priority and splitter_output_priority read/write.
  • Added ghost_name and ghost_type to LuaSurface::find/count entities filtered.
  • Fixed recursive call in util.merge(). more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-01-22 20:23:07 CET ] [ Original post ]

Friday Facts #226 - New mod portal other news

Hello, this week has been a week of typical bug fixing of 0.16, so development news wise, there is not much to write about. However we have some updates on some other goings on in the company.

Taipei game show


Albert, Jitka, Kovarex and Twinsen have boarded a flight today, taking them to attend the Taipei Game Show. This will be the first convention we have been in attendance with as Factorio, and we will have a booth there with some laptops for attendees to try the game. We wish our team the best of luck, and if all goes well, we will be more confident to attend more conventions in the future. Are there any conventions this year you would like to see us at?

New mod portal


On Wednesday morning HanziQ quietly launched the much anticipated new mod portal. Our intention was that nobody will notice, and it seems like we mostly achieved that. There were some small issues that we resolved following the deployment, but overall we would say it was a success. One thing you might notice, is that now the mod portal is generally pretty quick. To put it mildly, the new mod portal is about 10x more efficient and effective than the old one. It took quite a lot of time to get to this point, but anything worth doing, is worth taking a long time to do. Another result is that it is generally in a more maintainable and extendable condition than before, this means that any future work on developing the website will be a lot easier.

T-shirt shop update


The last shipment of t-shirt orders was sent out before the new year, and it seems most people have received their parcels now. The feedback we've received has been very positive, and we are happy that our focus on the quality and presentation of the T-shirts was worth it. We have now been delivered another batch of T-shirts, about 3,000 this time. However due to some issues with our Paypal account, and the fact that Jitka will be out of the office, we have decided to not re-open the eshop for now. If everything goes to plan, we will re-open for orders when Jitka returns to the office, around the 14th of February.

Bots conclusion (for now)


Over the last 2 weeks we have had an absolutely huge response to the topic of 'Belts vs Bots', and the amount of feedback we have received is simply incredible. It really does feel great to have a community that is so passionate about our game, and willing to share their thoughts with us. Though with great discussion, come great disagreements, and this conversation has definitely sparked some debates in the community. We hope we can join together once again, not as 'bot lovers' or 'bot haters', but just as players that enjoy the game. After extensive discussions in the office and internal testing, we have come to the conclusion that we need more time. This is a delicate topic, and the solution has to be one that walks a fine line within the design of the game. We are moving to work on other features and improvements, some of which are related to the balance of power between belts and robots, but for now it is highly unlikely there will be any changes in 0.16. When the time comes around to look at this topic again, we will keep you informed of any progress. As always, if you have something to share, the place to do it is our forum.


[ 2018-01-19 18:21:44 CET ] [ Original post ]

Friday Facts #225 - Bots versus belts (part 2)

The previous FFF seems to have caused quite a reaction. We had many discussions in the office regarding this topic, so this week some of us prepared some detailed responses.

Bots vs. belts aftermath


I started the article from last week saying this was mostly of a rant, so just the opinions of a player who prefers belts over bots. There was no real conclusion other than "What changes, if any, could we do to make everything more fun?". Then I decided to make the writing more dramatic by making it look as if we plan to remove bots from the game. My intention was to create an emotional roller-coaster in order to make the FFF a more interesting read. Combined with the context of the recent nerfs, some people got very angry very fast. "Remove bots from the game" was nothing more than a thought experiment, not a proposition. Unfortunately that didn't work out as intended. This has taught me some valuable lessons in writing, including that I should not play with people's emotions, at least not the way I did. The reactions were very strong, from long analytical posts, to heated but deep discussions, to personal attacks towards me. Not to mention the 46 forum pages that make that FFF the one with the most forum replies by far. It's clear that there's a strong emotional attachment to bots that plays an important role. But I would like to add that it's our jobs as game developers to make sure that the most optimal way of play is also the most fun way of play (ref1, ref2). What is most fun is of course an subjective and extremely complex topic that dives deep into game design, human psychology and player motivation. The reasoning behind the why we wanted to do some minor nerfs to bots, was actually to promote player choice. Many players argued that choice matters and we should leave bots alone. If choice matters, then the player should be able to chose between belts and bots. Is this much of a choice if you just look at the numbers and want to play optimally? Bots are easier to use, offer more throughput, they are inherently balanced, are way more flexible, easy to expand, and use less UPS. So by looking at the facts, bots are superior in every way, and they are the only choice if you want to play optimally. The reason people will ever chose belts is because they want to go for the fun option (in their opinion) not the optimal option. The idea was to level this a bit so players who want to play optimally can choose to play using belts without feeling like they made the wrong choice. Buffing belts is not something easy to do any more since we have always done it over the years (fixing belt corners decompressing the belt, making the distance between items smaller, etc), so we were looking at bot nerfs. There will probably be no nerfs coming to bots since it's hard to nerf something players are so attached to. Seeing your factory produce much less won't be seen well no matter how good the reasoning behind the change is. It could also be argued that the reason why bots are fun is because they are overpowered and they offer a massive progression to your factory, maybe what some people see as game-breaking is simply game-changing. Kovarex will go into more detail with his thoughts on this...

Bots vs. belts aftermath


I agree with everything Twinsen said. I would like to liken bots to the Death Spell in Baldur's gate (one of my favorite games of all time).
In Baldur's gate, you start at level 1 and you are very weak. Almost every monster is a challenge and a threat to kill you. But as you gain experience and level up, you get stronger and if you are a wizard, you also get stronger spells. At level 12, you get one of my favourite spells called Death spell. It instantly sucks the life out of all low/middle level monsters within a certain radius. When acquired, it gives you feeling of being very powerful, as instead of having to fiddle with the enemies one by one, you just end the battle instantly. It is one of the things you look forward when you start the game and gives you great feeling of improvement. This is very similar to how bots work. Once you get them, they give you the same 2 similar things. First is the power, as they just provide stronger logistics. The second is that they free you from having to fiddle with every little logistic detail and let you think more in the bigger scale. The big difference between Bots and the Death spell is, that in Baldur's gate, Death spell only works on the low/middle level monsters, so as you progress through the game, there will be less and less enemies who are affected by it. It is still useful to clean out the weaker part of the enemy group, so you don't waste time with the small things, and you can concentrate on the stronger ones. The game would certainly be very bad, if the Death spell would be ultimate way to kill anyone anytime, as at the point of getting it, all the other spells and things would be borderline useless. You probably understand where am I getting to. Yes, we kind of managed, to make long distance transport to be more suited for trains, but other than that, bots are the one solution for everything. With bots, there is no reason to think about other types of transport (Cable cars or automated vehicles for example), because why would anyone use it when you have bots? It is kind of fun getting to the bots setup, and moving to the bot-only factory, but once it is achieved, the continued play feels very dull for me, because I know that this is it: There are very few improvements I can do to the system, and extending the factory is just about plopping more assembler/requester/provider cells without any thought. Also, with bots in the game, making extensions to Factorio feels useless. For example, the extension where you would expand to other planets, start there over, and once you achieve the rocket there, you would combine the production of the two planets somehow. But if starting on another planet just means playing with robots from the start, which means plopping a few cells of what you need and making a few mines, I don't see the point. The question is, how to approach this problem? As Twinsen said, making belts stronger would not only be a compromise in some way and it would also reduce the amount of moving things, which is the proper metric in my eyes. When you see a huge factory, it is cool, because there are 16 blue iron belts being filled, not because the output is X per minute. To be able to compare numbers, I made test setup. I created 4 fully compressed express belts and put them against a fully satisfied lane of roboports (also 4 tiles wide). To be able to measure the throughput easily, I just modded the furnaces to be very fast and smelted the result, iron for belts and copper for robots. This is the setup where belts are as strong as they can possibly be are in the bots versus belts balance. In majority cases, bots are going to be relatively much stronger compared to belts.
The result is, that bots did 16.4k per minute while belts only 9.6.
With worker robot speed research, it approaches the maximum around 19.5k per minute. With this in mind, we can safely say, that robots are at least 2 times stronger then express belts, but in real factories, it is much more as belts need lot of other parts and are rarely used as ideally as robots would be, so my private guess would be that robots are currently around 5+ times stronger compared to belts.

The question of belt throughput improvements


In the last half year or more I have been putting together a lot of ideas around the concept of increasing the throughput of belts, and the last FFF and the resulting discussions made me focus on this topic heavily this last week. There are various options we looked into, some of them we even tried to prototype and played with them for a bit. I'll briefly try to describe some of them: Packed items like pallets/containers
  • Just adds another thing to do for every single recipe, mostly just adding tediousness. Basically mandatory barrels if you wanted to increase throughput.
  • More tediousness means robots are an even better option; even if robots couldn't carry these heavy items, you could still use them for the unpacked item distribution. What would probably end up happening is that you would feed the stacked items from trains directly to unpacking assembling machines which would output to provider chests for robots.
Adding a new tier of super-fast belt or belt speed research
  • Inserters would either need a speed increase as well, or would stop being able to take from the belt until the belt backs up. Increasing speed of inserters also increases the speed between containers, which would have an even bigger impact on robots.
  • It would get ridiculously fast if you wanted to make a substantial increase (say, 3 times more speed).
  • We already have 3 levels of belts and adding a speed research is just another number increasing research without unlocking a new entity.
New 1x1 Belt Stacker entity as the way how to make the stacks
  • Gives the ability to make high throughput belt at the price of extra complexity.
  • If the 1x1 entity is a chest-like loader which outputs on one side, it actually gets so hard that it reduces the amount of designs you can do with a fully beaconed setup to something like one or two obscure layouts which can't even output both compressed lanes of a fully stacked belt, making it even less interesting.
  • If the 1x1 entity is a belt piece which lets items pass through and from the top new stacks can be added, it's just a belt piece which you have to build everywhere and you still can't use it to unload inserters directly into splitters/underground belts. At that point you might as well have inserters get this ability instead.
  • You would have to adapt/rebuild all of your layouts, which in the late game is just not that appealing, if you can rip up your whole base to use robots.
New Belt Buffer entity like Klonan's mod
  • Simplifies too many things and makes pretty much all designs obsolete except the simplest one.
  • Doesn't actually increase belt throughput, just helps belt loading/unloading.
Research to have each N-th item be able to stack on the belt.
  • Pretty much the same as belt speed research.
  • Stack belt implementation would not be easy, especially visually.
  • Having only every N-th item stack up and not all of them, would look really strange.
New tier of belt which would be able to stack items.
  • You just have to produce and replace a new tier of belts.
  • If only the stack belt is allowed to have stacks, then whenever items move to a single tile of a normal belt, all of the items would un-stack, which woulbe be quite annoying.
  • If the stacks could only be created on the stack belt, but stay stacked on the normal belts, you would just build your insertion points, splitters and UG belts with the stack belt tier.
  • Both of the previous points might not be the worst thing but it would be quite weird and would motivate you to just get rid of all normal belts ASAP.
  • If only inserters would be able to create the stacks, it would get really annoying to attempt making a fully compressed, fully stacked belt even if inserters auto-compressed the belt.
Technology which would turn all belts into stack belts.
  • You would research this and automagically all inserters, splitters and side-loading (also mining drills) would be able to make stacks on any type of the 3 belt tiers we have now.
  • You don't get any new entity, but you get the choice between upgrading all of your belts with this technology and not having to do any extra work, or tearing up your base and replacing with robots.
  • When you get the research, all of your belts would start buffering extra items, which some people might find annoying.
  • If we could code this and find a visual solution which wouldn't take too much work, I would prefer this option.
All in all, the general issue of all of the belt throughput increases is the question if it wouldn't reduce the amount of belts that a newer player uses in their play through, reducing the complexity and interesting part of the game. I believe if this kind of research would happen after the rocket launch this would not be that much of a problem, especially since with robots you can reduce the amount of belts and complexity related to them to zero even earlier in the game. The visual solution for the stack belt we intended would be items stacked on top of each other, which would be really hard to do as many of the item icons would have to be rethought. Keeping in mind that we have hundreds of item icons, this could be really dangerous, hard and time consuming to do. It's worth mentioning that with a stacked belt it would likely be less visually clear if your belt is fully stacked and compressed. The coding solution of the stack belt including all of the item stacking in splitters, miners and side-loading might not be that easy either. I think there is a bunch of issues that belt throughput increase would address, like:
  • The "production numbers" reward for time spent when setting up robots is clearly bigger than for time spent building belts.
  • Belts can't really keep up with heavily boosted setups by beacons.
  • The last belt technology is relatively early in the game, so when you just look at the tech tree, you immediately know that robots are supposed to be the next step.
  • The highest producing base possible to build at 60UPS is strictly robot based.
I had a look at various megabases, and I was actually quite surprised how far you can get with belts if you really try to be efficient. Of course not all of the UPS is tied to just belts, in fact the usual entity update consumes a greater portion now, but increasing the belt throughput 3 times seems like it would at least make belts competitive. However this is pure guesswork from seeing some big bases and reading their update times, and having some feel from using belts myself. If you are interested, you can send me your belt megabases that push the game to the limit, possibly with modded 3 times faster belts and inserters. In general being able to see belt megabases to me is something really substantial. If a new player looks at a random Twitch stream, Youtube video, or Imgur album of a megabase, everything he sees now is a train network connecting a bunch of segregated robot production cells, which is visually repetitive, and compared to belt bases, visually less interesting. Being able to see belt bases in this top tier would be something that a new player could aspire to do one day and be inspired by. That would be the result of what Twinsen says about having the most interesting way to play being the most effective way to play. As you can see each of the solutions has at least one serious problem, and it addresses a specific issue that you only really face after hundreds of hours in the game. It is probably better to leave this issue as it is so that we don't break the existing game. It might be better to focus on making belts more convenient to use instead of brute forcing the problem with throughput increases - especially as it's quite easy to address the speed changes in a mod which will just work together with the convenience improvements.

Belt buff


We decided that we won't make stronger version of belts for now, but we could still improve the usability of belts. I tried to make some interesting setups with belts and sushi setups, but I feel, that the belt filtering with filter inserters is very clunky when it is supposed to be reliable and have large throughput. This is why we decided to add a few options to splitter configuration. These might be perceived overpowered by some, but we believe, that these mainly solve problems in the later part of the game when belts compete with bots, and when the player needs more control over the belt logistics.
Let me sum it one by one:
  • Input priority - Specifies whether the left or right input should be always used first. The typical example where it might be useful is the case of "this mine should be depleted first, so lets prioritize ore coming from it".
  • Output priority - This was often simulated using the circuit network, but it was not always 100% reliable, and when it was, the configuration was kind of clunky. Having priority is something simple that people can use very often, so we believe that it should be simple to achieve.
  • Output filter - The strongest feature provided. It allows one item to be filtered to go to either left or right, while everything else goes to the other side. It might be argued, that this is what filter inserters are for. The problem with filter inserters is that you need several of them to make it work reliably, and the setup breaks when you run out of power for a small while as inserters would stop but not the belts. The setup can be made in a way that it doesn't break even in this case, but it makes it even more awkward. With the splitter filter, we have an easy way to reliably specify that an item that goes to the side and never gets to the other.
Here are few examples of what the splitter configuration can do:
The splitter additions will come with the next 0.16 release.

The conclusion


The conclusion is, that I strongly believe that bots should have a debuff. They should still be a big and powerful advancement when they are researched, but they should work more like the death spell. It should solve the little stuff that isn't that powerful (in Factorio, it is equal to smaller production). I even believe that robot-only Factory should be possible and not useless, I just don't believe, that they should be 5+ times stronger than anything else. Players would still be able to build robot only factory, belt only factory or combination of those, but the strongest strategy would be to combine all types of transport, each for the part where they are the strongest. My suggestion would be to either completely remove the Worker robot cargo size research, or more likely, to multiply the charging time several times. For factory transport, both would have the same effect, but the latter wouldn't hurt personal transportation that much, as robots would transport all the missing items to player before they would need to be recharged, and then they would recharge when the player is already supplied and doing something else. As always, leave us your thoughts and comments on our forum.


[ 2018-01-12 18:26:35 CET ] [ Original post ]

Factorio 0.16.16 released

Minor Features


  • Items on the ground can be mined manually for precise control of what you pick up.
  • Added 'duplicate starting entities' option to PvP.

Changes


  • Changed splitters so they work more intuitively. The left and right lane splitting is now completely independent. The decision whether item goes to left or right output is now independent of the item type.
  • Hide cliff explosives in bonus GUI as they don't really receive any bonuses. more
  • Tweaked the balancing of the PvP production score.
  • Changed size of offshore pump from 3x1 to 3x2 in order to prevent pump placement in overlapping positions. more

Optimisations


  • Optimized drawing of artillery range visualization when many artilleries were in range of viewed area. more

Bugfixes


  • Fixed that consequtive splitters could uncompress compressed belt. more
  • Fixed that loading from the game-over screen would result in a crash if loading failed. more
  • Fixed several settings copying issues when placing blueprints over existing entities related to multiplayer. more
  • Fixed machines disabled by circuit network sometimes staying disabled when they shouldn't. more
  • Fixed Linux users sometime crashing when relaunching the game. more
  • Fixed that blueprint library GUI would lose your filter when you view a blueprint. more
  • Fixed that biters would sometimes be deactivated when they shouldn't. more
  • Fixed that artillery would target forces marked with cease fire. more
  • Fixed a crash when using LuaTransportLine::remove_item(). more
  • Fixed that the beacon would show energy consumption twice. more
  • Fixed PvP production score calculation for hand crafting and launching satellites.
  • Fixed jittering when walking into a straight water/land border. more
  • Attempt at fixing missing symbol on macOS 10.9 more
  • Fixed that turret range map and hover overlays didn't quite match. more
  • Fixed that RCON would only respond to the first command in a packet. more
  • Fixed PvP no rush restriction could be bypassed using a vehicle.
  • Ensure that there is always at least a minimal lake in the starting area.
  • Fixed script error if a removed modded item was sent in a rocket. more
  • Fixed that loading logistic heavy saves after changing mods would take 20+ minutes. more
  • Fixed a crash when mods would try to set item health values to negative amounts. more
  • Fixed requester chests could get stuck in some cases. more
  • Fixed that manually putting damaged items in the output slot of an assembling machine could lead to lost items. more
  • Fixed chunk edge cliff discontinuities due to ore patches. more

Scripting


  • Added LuaEntity::cliff_orientation read.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2018-01-10 16:46:57 CET ] [ Original post ]

Factorio 0.16.15 released

Bugfixes


  • Fixed that underground belts built by a blueprint would not respect the type of an existing belt. more
  • Fixed pump ghosts would always highlight attached rail, not just when selected.
  • Fixed that logistic network requests would get into invalid state when migrated from save where player had more requests due mods. more
  • Improved number formating in electricity overview to make it less jumpy. more
  • Fixed logistic robots migration related to changing force of logistic robots while stationing. more
  • Fixed when sliding around entity, the character could be pushed to a position colliding with water and get stuck in the terrain. more
  • Reduced RAM usage by removing unnecessary memory buffers for textures when using OpenGL. more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-01-05 20:12:58 CET ] [ Original post ]

Friday Facts #224 - Bots versus belts

The 0.16 stabilisation update


We had quite a lot of critical bugs after the 0.16.8 release that introduced the logistic chest finalisations mentioned in the last FFF. I'm sorry for the trouble, but it is called experimental version for a reason. It seems that 7 releases in the past week has been enough to stabilize it. We are finally in a state, where we are fixing more bugs than are reported, and we are reaching the first boundary of less than 100 active bug reports. It seems that the most urgent things are to be be finished soon, and we could find the needed time to dive into the belt logic to be able to consolidate it. This is my plan for the next week.

Removing logistics bots from the game


During more boring FFF, I like to do these gameplay rants where I share my ideas about game design. Here is one of them. Ever since I started playing Factorio, I have thought of logistic bots as too powerful. Actually, I refused to use them thinking "surely there is some catch to this and they can't replace belts". Since then I was always a "bot hater". I believed it trivialized base building and managing belts. I also believe that building belts is way more fun due to it's inherent complexities, challenges, and emergent situations (the most common example being belt balancing). Bots vs. belts is a controversial subject, even in our team, but most of us believe bots are too powerful. So we did small nerfs from time to time in an effort to compensate for this, but we still keep coming to the same conclusion. My argument is that bots are simply fundamentally better. Bots basically cheat by "teleporting" items, plus they are extremely easy to build and expand. This means that almost any nerf we throw at them is always solved by building more bots and/or more roboports and/or more solar panels. All of this can be done with a simple copy paste using blueprints. Plus they are even UPS friendly, so it seems like bots are the win-win-win solution. So I had this rather crazy idea of removing logistic bots from the game. Basically my idea was that construction bots would still be a thing and player logistics would still work. This would be done by:
  • Merging logistic and construction bots into just Flying Robots.
  • Removing Active provider, Buffer and Requester chests and having just Passive provider and Storage chests.
  • Flying Robots will do everything construction bots do now and also supply the player.
  • Simplifying recipe complexity a bit so the belt spaghetti does not get ridiculous.
Now, hopefully you aren't smashing your desk and writing us an angry email. Don't worry, logistics bots won't be removed from the game, mostly because it's a feature that has been developed and polished quite a lot. Also many players love the feature, and we've all become used to it over the years. But think of it a different way, imagine there were two parallel universes:
  • The universe we are in, where Factorio has had logistic bots since very early.
  • A universe where Factorio never had this feature. Construction bots were eventually added, and using bots to move items freely is nothing more than an idea that pops up from time to time but it's quickly discarded due to it breaking the game.
Which Factorio would be the best and most fun one for the players in that universe? To be honest it's very hard to decide. I would go with the more pure Factorio from universe 2 that focuses on it's core and most fun mechanic: belts and belt logistics. I'm curious what you guys think. I mentioned this, because I think this way often in an attempt to "make the best game ever" without being influenced by my biases of being used to some feature or style of play. But let's return to reality and the game we have now. Quite recently I actually realized that bots are not as bad as I thought. The logistics system is placed very late in the tech tree, so most of a typical playthrough will be done using belts. The fact that you get this almost game breaking feature is not so bad because it's late in the game. After this you can continue to challenge yourself and build even bigger using bots, or belts or both. We are still looking to incentivize belt building a bit more, since it is the more fun way to play Factorio, but the question is how. We have ideas like increasing the power consumption, decreasing the maximum stack size bots can carry to 2 items or buffing belts by adding a "stacked" belt tier. Like I mentioned before, I try to balance things by looking at numbers and objective facts. I'm trying to determine how much better bots are than belts, so I can know if for example nerfing the stack size to 2 will have the desired effect, or just make players angry. I thought of metrics like throughput over time to set up, or throughput over base size. But how do these metrics influence the big picture and will any of these make the game more fun in the long run? We don't know the answer to these questions yet. What is your take on this bots versus belts thing? What changes, if any, could we do to make everything more fun? Pro-bot arguments:
  • The fact that they are so powerful, gives a very big sense of progression. They are behind a late game research, and gives you things that are very powerful and game changing.
  • It adds large diversity to the game.
Anti-bot arguments:
  • Bot bases are usually less complex and less interesting to look at, manage and expand.
  • Because of their ease of use (and apparent ease of use), players tend to go to bots. We believe that belts are more fun, but we are guiding the player towards a less fun style of play.
  • When you learn that bots exist and how they work, building bases with belts just seems tedious.
Related to this I'd like to give a shout-out to forum member ultramn, for his interesting Self-contained 1,000 SPM base. We analysed his save while we were having some bot vs. belt discussions this week. His save proves that bots can get ridiculously powerful, but at the same time it shows that there is a lot of fun to be had with bots if you challenge yourself to make something.
As always, let us know what you think on our forum.


[ 2018-01-05 19:11:52 CET ] [ Original post ]

Factorio 0.16.14 released

Minor Features


  • Added 'allow spectators' option to PvP.

Changes


  • Changed rail world settings to have normal biters frequency.

Bugfixes


  • Fixed loading specific saves wouldn't migrate the character requests correctly to request from buffer chests. more
  • Fixed that migrating saves would make research impossible in the level 4 of New hope campaign. more
  • Fixed that inserters would try to put items into furnaces that could never fit. more
  • Fixed requester chests wouldn't keep up with the request amount demand in logistic heavy saves. more
  • Fixed that request chests weren't equally distributed when there were not enough robots.
  • Fixed that migration to 0.16.8 which de-duplicated logistic requests wasn't doing so for offline players. This could cause crashes as the internal data structures take it as granted.
  • Fixed that download progress bar in the sync save with mods wasn't being updated.
  • Fixed that exiting the connection in progress (by pressing escape) soon enough could result in a screen without any menu.
  • Fixed some PvP game modes being won by launching a rocket.
  • Fixed config.ini would be purged when game decreases graphics settings when loading sprites throws an error. more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-01-04 21:07:39 CET ] [ Original post ]

Factorio 0.16.13 released

Minor Features


  • Added a time limit option to PvP game modes 'Production score' and 'Oil harvest'
  • Added 'score per minute' to the PvP Production score GUI.

Bugfixes


  • Fixed a crash when blueprinting modded logistic storage chests. more
  • Fixed requester chests wouldn't work with specific combinations of storage, buffer, and provider chests. more
  • Fixed a crash with the command line map preview option. more
  • Fixed the world-icon for the cliff explosive didn't match the item icon. more
  • Fixed the progress indicator in the browse-mods GUI would update too quickly. more
  • Fixed changing the force of a robot waiting to charge would break the robot. more
  • Fixed that joining modded multiplayer games where the spawn area was deleted would error. more
  • Fixed that pasting text didn't work correctly in any text field. more
  • Fixed a crash related to tile transitions. more
  • Fixed logistic storage filters would be ignored in some specific cases. more
  • Fixed that side-loading underground belts could lead to them getting stuck. more
  • Fixed that modded storage chests would allow more than 1 filter when the extra filters weren't valid. more
  • Fixed that the map preview seed wouldn't get used when the generate map GUI had an exchange string entered. more
  • Added yet another migration fixing invalid state created between 0.16.8 and 0.16.11.
  • Fixed that startup mod settings could be changed while in-game by clicking the label on checkboxes. more
  • Fixed that tooltip of disabled widgets didn't work.
  • Added greyed-out look to disabled textfield and checkbox to make it more clear that it isn't editable.
  • Fixed one of the curved rail segment visualizations wasn't aligned correctly. more
  • Fixed that the console could be opened in a paused game where it can't be interacted with.
  • Fixed issues of console in combination with technology GUI in multiplayer. more
  • Fixed changelogs (including mod changelogs) not properly displaying the "All" subversion for a version x.y when there was no version x.y.0. more
  • Fixed horizontal scroll pane scroller. more
  • Fixed that changing value in GameViewSettings in the Lua script didn't update the gui until the game was reloaded.
  • Fixed a crash when controller view is disabled. more
  • Fixed script error when destroying a chest in the supply scenario.
  • Fixed PvP production score price calculation.

Modding


  • Entities without an item-to-place can still be deconstructed if they are minable.

Scripting


  • Added LuaPlayer::blueprint_to_setup read.
  • Changed default value of 'expires' when creating ghost through LuaSurface::create_entity from 'true' to 'false'.
  • Fixed invalid internal state + crashes when ghost without "expires = false" was created through the script when ghost time to live was 0. more
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2018-01-03 21:56:13 CET ] [ Original post ]

Factorio 0.16.10/11 released

Bugfixes


  • Fixed crash related to setting logistic requests by circuit network.
  • Fixed requester chest state migration between different save versions.
  • Fixed one of the problems of internal provider data corruption related to setting inventory bar limit.
  • Fixed yet another requester chest state migration error.
  • Fixed that burner inserter didn't show the fuel icon when out of energy sometimes. more
  • Fixed that some specific pre 0.15 maps couldn't be loaded.
You can get experimental releases by selecting the '0.16.x' beta branch under Factorio's properties in Steam.


[ 2017-12-30 20:17:49 CET ] [ Original post ]

Friday Facts #223 - Reflections on 2017

Hello, this is the last Friday of 2017, and as such, the last Friday facts of this year.

0.16.8/9 is out


It almost seams that our team never stops. To be honest, even on the Christmas eve, when everything was over and family went to sleep, I couldn't resist to stay up for little while to fix a few things :)

The fluid balancing changing follow-up is in this release


- Changed fluid wagon capacity from 75k to 25k (Same as storage tank). - Lowered fluid wagon weight from 3000 to 1000 (same as cargo wagon). - Changed fluid wagon recipe so it requires just 1 storage tank instead of 3. - Lowered barrel fluid capacity from 250 to 50. (So cargo wagon with barrels holds 20k and logistic robots are not too strong alternative to carrying fluids.) - Decreased barrelling crafting time from 1 second to 0.2 seconds. The overall feeling we had was that fluid wagon capacity is too large, fluid trains have to barely move around, and waiting for the wagon to be filled often takes too much time. We also wanted to make sure, that wagon with barrels just can't hold more fluids compared to fluid wagon, because even when barrels are generally more work to handle, it is not what you would intuitively expect. With the fluid wagon separation gone, the main advantage of barrels is not capacity, but versatility. They can be combined with other barrels of different kind, or items in the train, they can be limited by the inventory limit, or easily filtered by filter inserters, transported by robots, belts etc. This advantage seems to be much more intuitive and I hope it makes sense now as whole with the removal of the fluid wagon separation to you.

The buffer chest finalization


The 0.16.8 also finishes the buffer chests. The promises from last FFF materialized in this update. Requester chests always have priority over buffer chests, and by default request chests don't even request from buffers chests, only player and construction. This is what we feel is the most common use-case. But as we don't want to limit the possibilities, so the behaviour can be manually changed.

The 2017 recapitulation


Jakub Dvorský, the head of Amanita design, said that projects tend to be more creative in the fist 3 years of the development, while the last 2 years are more about tweaking, polishing and finishing. I feel exactly the same about Factorio. Most of the creative work has been done, and we focus more and more on finishing the game. We've said it before, that the game will be finished and released during this year and we mean it this time. There is even the joke in the office that the game is always to be released 'next summer', which never comes. But this time we really really mean it, we want to finish the game in 2018. Finishing doesn't necessary mean no new stuff for Factorio, it might even mean the opposite. Why? Because we will have all of our technology/graphical/design debts paid. Debts from the past we solved this year:
  • We stabilized 0.14, which meant the rewrite of the multiplayer internals based on our experience form the first version, and we now have something that seems to work quite reliably.
  • We went back and created high-resolution variants of the vast majority of the graphics.
  • We revisited the terrain and decoratives for the last time to make an environment we are content with
  • We integrated blueprint usage into network games by allowing them to be copied between players, and allowed them to be moved between individual save games.
  • We have rewritten most of the internals of how GUI works for 0.16, which should simplify additions related to GUI in the future.
  • Opened the subject of interactive mini tutorials, far from finished, but we are getting the experience there as well.
  • Tightened the user integration of mods, once the new mod portal site (which shouldn't be as unusably slow as the current one) is done, it will improve the usability of mods a lot.
  • Improved programming productivity internally by getting rid of boost, improving compile times, extending automated/heavy/valgrind tests on the server, and starting more elaborate internal documentation. So many more problems are discovered early on, and people spend less time figuring out what is wrong.
  • Improved Factorio link time in Visual studio. This was done by Rseding91, who provided the visual studio guys with Factorio sources and kept bothering them until they tested that and improved C++ link time in the 15.5 Visual studio release. The final release of Factorio with all optimisations and link time code generation took 45 minutes to compile and link, and now it takes 3.5 minutes. This sped up our release time quite a bit.
There are still some debts to be finished in 2018, mainly the GUI update, which is actually a huge project. We have very large number of different windows in the game, and if we really want to improve both the looks and the usability, we will have to put a lot of time and thought into it. Also the mini tutorials will have to be finished and few entities will probably be re-designed. But once all these things are solved, it not only means that we could get out of early access, but also, if we ever decide to add more content to Factorio, having these things finished should pay off by letting us to focus on the new things only instead of having to fix the old ones. Another possibility, is to use the Factorio engine for completely different game or for fast prototyping of crazy ideas. Whatever we decide to do in the future, having polished base seems like an important thing to have.

Almost 6 years of Factorio in numbers


The initial Factorio commit was done 31.3. 2012, so Factorio is in the development for 5 years 9 months. I did this kind of comparison in fff-88 which was even before the steam release, I hope you don't mind if I compare it with the current state. Our effort in numbers:
  • In development for 1106 → 2099 days.
  • 88 → 221 public releases.
  • 14 082 → 34 686 commits in the master branch.
  • 204 917 → 465 550 lines of code, 546 339 → 1 258 939 words and 7 693 483 → 17 517 675 characters, this is equivalent to 15 → 35 average books.
  • 20 791 → 56 947 different sprites with 54 114 147 → 336 907 147 non empty pixels.
  • 1492 → 5034 resolved bugs (only counting those reported on our forums).
  • 3027 → 7670 lines in the changelog.
Results in:
  • 56 500 → 341 000 Youtube videos
  • 403 000 → 1 900 000 Google hits of Factorio.
  • 75 146 → 303 773 forum posts
  • 11 704 years of combined playtime played on steam.
  • and finally 74 914 → 1 200 000+ copies sold.
This leads me to different kind of comparisons:
  • 2.7 → 0.42 lines of code per one buyer
  • 12.7 → 16.5 commits per day or
  • 2.7 → 6 Youtube videos per one sprite
  • 2.3 years of playtime per resolved bug report
  • 4 months of playtime per one commit
  • 9.1 days of play for each line of code
  • 18.2 minutes for each pixel
I could go like this for a while :) But mainly, it makes me realize, that making changes, improving things, and fixing even small annoyances in the game is worth it. I would also like provide the overall graph of commits frequency, some of the releases are quite visible there :)
As always, let us know what you think on our forum.


[ 2017-12-29 21:55:06 CET ] [ Original post ]

Factorio 0.16.8 released

Features


  • Storage chests can be filtered.

Minor Features


  • Requester chests can now request stuff from buffer chests as was originally intended. Buffer chests are provided items only if all requester chests are satisfied for that specific item.
  • Requester chests have a checkbox that specifies whether it should or shouldn't request things from buffer chests. It is off by default.

Optimisations


  • Optimized selecting robot tasks for requester chests.

Balancing


  • Changed fluid wagon capacity from 75k to 25k (Same as storage tank).
  • Lowered fluid wagon weight from 3000 to 1000 (same as cargo wagon).
  • Changed fluid wagon recipe so it requires just 1 storage tank instead of 3.
  • Lowered barrel fluid capacity from 250 to 50. (So cargo wagon with barrels holds 20k and logistic robots are not too strong alternative to carrying fluids.)
  • Lowered barelling speed from 1 to 0.2.

Bugfixes


  • Fixed loading of achievements with steam version. more
  • Fixed train schedule resizing with very large player inventory. more
  • Fixed missing auto resizing of Lua GUI elements when caption changes. more
  • Fixed that it was possible to set duplicate logistic requests.
  • Fixed missing entity counts when selecting area for blueprint on low graphics quality. more
  • Fixed calculation of basis noise when x<0 more
  • Fixed missing locale key in fluid wagon description. more
  • Fixed that the fluid wagon wouldn't show any GUI when it had an equipment grid. more
  • Fixed evolution command output in campaigns. more
  • Fixed shotgun shooting direction when aiming between the player and the nozzle. more
  • Fixed technology sorting. more
  • Fixed that the default listbox font was called "default-list_box". more
  • Fixed that clicking "Generate" button in the generate map window while the exchange string field was enlarged moved the button around before the mouse up was registered. The exchange string field will now never shrink on focus lost.
  • Fixed that setting LuaPlayer::opened to an empty item would crash the game. more
  • Fixed performance issues when hovering over huge resource patches in map or zoomed-to-world view. more
  • Fixed a desync when hosting multiplayer directly and building blueprints. more
  • Fixed a crash when calling specific LuaEntity properties. more
  • Fixed module effects weren't checked correctly for modded modules. more
  • Fixed a crash when teleporting roboports or logistic containers marked for deconstruction. more
  • Fixed roboports would show up twice in the logistic GUI. more
  • Fixed the background on the select-recipe GUI for the choose-elem-button didn't show correctly. more
  • Fixed changing transport belt speeds through mods on existing saves. more
  • Fixed a crash when setting filters on cargo wagons in multiplayer. more
  • Fixed a crash when trying to put blueprint books in blueprint books. more
  • Fixed that train could overshoot a station when the schedule was changed by the script.
  • Fixed that heatpipes would incorrectly update their connections when teleported. more
  • Fixed the problem of flickering tooltips in a generic way (hopefully). more
  • Fixed that the table of games was focused (for keyboard control) even if the player focused the search bar manually. more
  • Fixed crash that can happen when train on its path to station that was deactivated finds path to different alternative station of the same name that leads in opposite direction to current train movement. more

Scripting


  • The item-with-tags and selection-tool item types now support LuaItemStack::item_number.
  • Added an optional player parameter to LuaEntity::order_deconstruction, cancel_deconstruction, LuaTile::cancel_deconstruction, LuaSurface::deconstruct_area, and LuaSurface::cancel_deconstruct_area.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-29 18:25:48 CET ] [ Original post ]

Friday Facts #222 - Christmas avalanche

Hello, as you could expect this Friday facts is mainly about our fight with the avalanche of bug reports, which is actually not as huge as we expected it to be to be honest. We released 0.16.7 yesterday, and this will probably be the last update for a while. Most of us now are taking a break, enjoying the festivities, and visiting our friends and family.

Transport belt compression update


Regarding the belt compression discussion opened in the last FFF: We are considering an option where side loading and inserters would compress belts natively. We will make a branch with it to test it how it works, and we will let you know our decision.

Fluid wagon update


We made a decision to completely abolish the mechanics of fluid wagon tank separation. We knew that a lot of players would not like it, but this might just be because they got used to it, and because of the argument "if you don't like it, don't use it". There are more arguments to destroy.
  • Fluid wagon capacity is somewhat too big, which means that the fluid trains have to move around very sporadically compared to the trains with items. Making the wagon fluid capacity smaller (we didn't do it yet) and removing the separation, is similar to making the whole fluid wagon as big as one section.
  • It was solving a problem that has quite a trivial solution (use two separate wagons). We try to add mechanics mainly for things that don't have a solution otherwise, or the solution is weird.
  • We won't have to keep the code alive, we won't have to update the UI of it (in the upcoming GUI update) and fix the bugs related to it. This argument is the smallest, but is also here, as everything has a cost and it is about priorities.

Requester chest update


The change of the requester chest having priority over buffer chest was not that easy, as I decided to combine it with optimisation I wanted to do for a long time. In the current version, requesters have just 2 containers internally: "unsatisfied requesters" and "satisfied requesters", every tick, the "unsatisfied requesters" are iterated and it is checked whether supply is available for them. The second bucked with "satisfied requesters" is separated so we don't have to iterate through requesters that don't need anything now. The problem with this approach is, that once there are more a lot of unsatisfied requester chests for the same thing (lets say iron), and there just isn't iron in the supply at this moment, all the requesters have to be wastefully iterated again and again. So the change is, that every requests of chests are tracked separately for every item, and once the item isn't available, the rest of the requesters don't have to be iterated. I didn't measure, but it might have some minor impact in big bot-based Factories. The reason why was the optimisation written together with the fix is, that requesters have to have priority over buffer chests independently for each item, and it works quite nicely with it. TL;DR, this functionality is now merged into our master branch, and you will get it in the next bugfix release. I also feel, that we should add 2 things to the logistic system in 0.16:
  • A checkbox in the requester chest that would allow the player to specify whether it should or shouldn't take from buffer chests, as even with the priorities, it might be annoying if robots took all the stuff from buffer stations to the requesters just because the supply train is going to arrive 10 seconds late, so the buffer chests would be supplied again soon. I would even say that the option might be to not take things from buffer chests by default.
  • A filter for the storage chests. Buffer chests somewhat help to sort the storage, it doesn't really replace the need of storage chests to have a single filter for the whole storage chest. This would allow it to be reserved just for something specific, which would solve a lot of different problems

3 major train problems resolved


Thanks to train bugfixes from the user aaargha, there were 3 quite important fixes related to trains done. All of them were in the game for a very long time, more than 3 years, which surprises me a lot.
  • A train decelerating to stop in a station created penalty around 2^32/10 (a lot) on the path it went through. This was sometimes causing trains to do very crazy and huge paths just to avoid this point. It was especially annoying as the penalty was easily enough to force train to go through different stations (that has penalty of 2000) which could cause traffic jams in a lot of systems.
  • The train penalty of 2000 to avoid trains going through stops not on its own path was applied to the destination stop before actually reaching it. This caused the train path-finding to potentially search a huge amount of paths while the destination stop was just ahead of it. It was just a potential performance problem, but as you probably noticed, we need to care about performance.
  • The last bug is related to this example:

The top train arrives later because there is no rail signal just in front of the stop. Sounds weird right? This bug was related to a hacky solution to a problem with extremely fast trains 3 years ago, and it basically caused trains to start slowing down for a station 2 times sooner in many cases. All of these problems are already fixed in the current 0.16.7.

Steam awards


Factorio has been nominated for one of the Steam awards, 'Haunts My Dreams'. It is a nice mark of recognition for all the work we've put to the game this year. It seems the other nominees are pretty much the giants of the industry, so it is most likely one of these will win. Still, it is nice to be included with the big kids. The voting for this category opens on the 29th of December, at 10 AM PST, for 24 hours only. So if you are interested in voting for one of the entrants, be sure you can get to a PC on that day. As always, let us know what you think on our forum.


[ 2017-12-22 22:51:45 CET ] [ Original post ]

Factorio 0.16.7 released

Bugfixes


  • Fixed that trains approaching train stop started breaking 2 times sooner when no signal was in front of the stop.
  • Fixed order of controls in the control settings GUI. more
  • Fixed rail pumps becoming invalid after being teleported via lua. more
  • Fixed that biter expansion chunks weren't being generated correctly. more
  • Fixed that rail signal ghost of different force (so invisible) was restricting rail placement.
  • Fixed server crash when last player leaves the game while the server is saving. more
  • Fixed text cursor positioning inside a textbox during scroll. more
  • Fixed an additional crash when trying to filter the main inventory in the god-controller in the train GUI. more
  • Fixed that blueprint strings wouldn't copy station names in blueprints. more
  • Fixed that blueprints would build partially in chunks not visible by radar from the zoomed-to-world view. more
  • Fixed a crash when canceling loading of specific save files. more
  • Fixed the programmable speaker GUI wouldn't update correctly. more
  • Fixed a bug where text in a textbox disappeared after jumping to cursor that is off view.
  • Fixed --apply-update not setting executable permissions more
  • Fixed that pasting assembler recipe to requester chest would request too few items for some recipes. more
  • Fixed crash when exiting the game while a recipe tooltip was open. more
  • Fixed positioning of progress bars in mod download dialogs. more
  • Fixed creation of overlapping wagons under certain circumstances. more
  • Fixed scrolling by caret in a textbox that would cause lines to disappear.
  • Fixed jittering when driving cars/tanks in some cases. more
  • Fixed that only the first blueprint book, blueprint, and deconstruction planner item type would show in the blueprint library. more
  • Fixed crash when recalculating connections between roboports. more
  • Fixed crash when exiting mod portal during a refresh. more
  • Fixed error in saving blueprinted inserters with overridden stack size. more
  • Entities waiting for modules can now be fast replaced. more
  • Fixed saving of New hope level 2. more
  • Fixed that the game would crash trying to load some old saves. more
  • Fixed train top speed calculation when not all locomotives used the same fuel type. more
  • Fixed roboports wouldn't provide the repair packs for other robots to use when loading saves from 0.15. more
  • Fixed a crash when removing modded tiles that had tile ghosts waiting to be built. more
  • Fixed a crash when loading saves without specific mods. more
  • Fixed that scenario errors would lead to getting stuck on the map preview screen if started through the map preview. more
  • Fixed multiple issues with enemy force interaction. more

Changes


  • Removed the mechanics of 3 different fluid tanks in fluid wagon, and simplified it so the fluid wagon has just 1 fluid.
  • Ghost belt entities don't connect to other (ghost/or non-ghost) belt entities if they don't have the same force. This prevents ghost belt of other force (invisible to the player) from changing the shape of the belt.
  • Building a blueprint on top of existing assembling machines, refineries and chemical plants also copies the rotation, along with the recipe. more

Scripting


  • Added direction, created_by_moving, and shift_build event parameters to on_put_item event.
  • Replaced ScrollPane::dont_scroll_horizontally by horizontal_scroll_policy and vertical_scroll_policy.
  • Added LuaGameScript::backer_names read.
  • Added LuaStyle::want_ellipsis read/write.

Minor Features


  • Added /version command.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-21 19:16:07 CET ] [ Original post ]

Factorio 0.16.6 released

Bugfixes


  • Fixed a crash when trying to filter the main inventory in the god-controller. more
  • Fixed various crashes caused by mining or otherwise changing power poles. more
  • Fixed a desync when using bad values in the /color command. more
  • Better handling of the case where we mine our own car but our inventory's full. more
  • Fixed placing blueprint over existing Rail Signals does not build wires. more
  • Reverted "Number of entities in hand when previewing the entity to be built is now aligned to the entity." It proved to create too big problems with readability while building and running.
  • Fixed that rolling stocks in cursor had no icon when there was no valid location for them.
  • Fixed jumpy loading bar. more

Scripting


  • Fixed that TextBox was not re-layouting text when size was changed through styles.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-18 18:54:39 CET ] [ Original post ]

Factorio 0.16.5 released

Bugfixes


  • Fixed boilers outputting water in New hope campaign levels. more
  • Fixed slow saving of New hope level 2. more
  • Fixed that blueprint books couldn't be built from the zoomed-to-world view. more
  • Fixed a crash when loading saves with modded blueprint entities migrated multiple times. more
  • Fixed a crash when importing blueprints with circuit connections when a mod had made the entities not circuit connectable. more
  • Fixed that forced ghost building (shift + click) didn't work correctly.
  • Fixed destroying an entity powered from two electric networks would corrupt future saves. more
  • Fixed zooming in on uncharted map areas would reveal tiles on uncharted chunks. more
  • Fixed beacon would not highlight labs that are in range of its effects. more
  • Fixed disappearing sprites with Low VRAM Mode option enabled. more
  • Fixed glitch in one of the stone path transition sprites. more
  • Adjusted default graphics options to reflect increased memory requirements for high resolution sprites due to more sprites being converted to high resolution in 0.16.
  • Improved very poor performance with video memory usage set to low. more

Modding


  • Fixed circuit connector would not be visible on entities with more than one picture layer. Now the connector will render as 10th layer. more
  • Fixed icon_size scaled also icon's dark background in alt mode. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-17 20:01:12 CET ] [ Original post ]

Factorio 0.16.4 released

Bugfixes


  • Fixed progress bar in automatic updates GUI. more
  • Fixed crash caused by mouse drag in an empty schedule in Locomotive GUI. more
  • Belt rendering fix. more
  • Fixed the mining speed for drills would show 1 higher than it actually was. more
  • Fixed issue with changelogs in mods. more
  • Fixed that the server could crash if it received invalid data. more
  • Fixed crash on startup when texture compression was enabled. more
  • Fixed that roboport connections wouldn't render as cleanly as 0.15. more
  • Fixed that using the /ban command with no parameters would crash the game. more
  • Fixed brwose mods/games, so the vertical progress bars always keep space for the scroller, so the window doesn't change size when data is loaded, or searching minimizes the result to just a page or less.
  • Fixed the game would not enter minimal mode if there was an error in migration script. more
  • Fixed the delete-achievements tooltip wouldn't be removed. more
  • Fixed the use-recipe-groups config option was ignored in the select-signal GUI. more

Scripting


  • Fixed that LuaPlayer::admin write didn't work. more
  • Added 2 optional parameters to LuaSurface::create_entity when creating resource entities: enable_tree_removal and enable_cliff_removal.
  • Changed burner prototypes to support fuel_category or fuel_categories + changed the Lua API to match.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-16 12:02:38 CET ] [ Original post ]

Friday Facts #221 - 0.16 is out

Hello there. As you probably know, we released the experimental version of 0.16 this week. As usual after such a big release, we are working as best as we can to fix the bugs to make the game reasonably playable as soon as possible. Our current goal is to have semi-stable version before Christmas.

Temporary buffer chest simplification


Buffer chests, that were introduced in fff-203 are now in the game, but they are now usable only for personal logistics and construction, but not for requester chests. We changed it before the release, as we noticed during the play-testing, that a lot of the the items are moved to buffer chests which could be on the other part of the factory, just to be immediately moved to requester chests, which could be all the way on the other side. It was basically broken and we did not foresee it. We have some different things in mind to solve the problem. If it works out, we would like to enable buffer chests for requesters during the stabilisation of 0.16
  • Give requester chests priority over buffer chests. This means, that nothing would go to buffer chest request unless that item is already satisfied for all requester chests
  • We were also considering, that the player could have a checkbox in the requester, that could allow to specify whether the requester should get things from buffer chest or not. We prefer if the game doesn't have too many settings like this to get lost in, but it might be useful to give the player more options.
Part of the testing revealed to us, that buffer chests are not fully replacing the possible feature of having dedicated storage chests. As this feature seems to be easy to do, we might do it as well. It always seems easy to do, until we actually make it :)

Belt compression mechanics


The belt internal mechanics have been changed a lot in this release, as a side effect of the belt optimisations. Some of the things don't work as before. Some of the changes are intentional, such as using underground belts to compress belts, no longer works. Some of the side-loading tricks were not intentional, and some of the usages of side-loading were tricks that I didn't even know about. We are going to have some discussions in the office about how should the belt compressing work, and what techniques should work and what shouldn't. I would personally prefer, to make the only way to compress two uncompressed belts by using a splitter, as all the other tricks are kind of unintuitive usages of bugs in the previous belt internals. Others think differently, as they want to make inserters and side-loading to compress automatically. I think that it would actually remove part of the emergent-gameplay and something for the player to learn as he/she explores the mechanics of the game, but I have to agree, that the game would be more comfortable to play. You are free to say your opinions in the comments :)

Bug hunting


These is only a single place we handle bug reports, the bug report forum. If you make a post somewhere else, or PM one of the developers, we might not see it, and these reports can get lost. So if you find an issue, crash, glitch etc. go to the forum first. Okay hold up, don't just make a topic just yet, first search or browse around to see if someone has reported it already. If you don't see anything similar in the main bug report section, please use the forum search to see if a report was moved to one of the subforums (Assigned, pending, resolved etc.). As a bonus, this is like a sneak peek into the bug fixing process, and you will be able to directly talk with the team and help us make the game better. Some things however, are not bugs. We don't want to be ungrateful, but reporting things you dislike as a bug doesn't help us. We are happy to receive this feedback in the Ideas & Suggestions forum. Some things though, are bugs. But we can't fix everything instantly, they need some deeper work, or maybe they just aren't a priority. Game crashes, corruptions and similar issues are the most important things to fix. We are sorry we cannot get to the things that are bugging you right away, but with a little patience we will have everything sorted out before you know it. We don't ignore things in bug reports, but we do leave them alone sometimes. Don't worry if it seems we have overlooked your report, there are just other things to do right now.

T-shirts shipped


So Monday afternoon we received 28 boxes of T-shirts.
Soon after, we opened our store to orders. Frankly we were not expecting this many orders... but only 24 hours later, we had received over 700 orders. So then begins the process of packaging and shipping these. It took 3 of us (Jitka, HanziQ, and myself) over 12 hours to pack all of them, but we did it.

The first shipment of 786 packages was sent Wednesday morning, which included all the orders places before midnight on Tuesday. As of this morning, we only have 800 T-shirts left, we ordered a batch of 3,000 more, but they wont' arrive till the new year. As you can expect, this week has been quite hectic for us, but nonetheless, we are looking forward to reading your thoughts and comments on our forum.


[ 2017-12-15 21:40:48 CET ] [ Original post ]

Factorio 0.16.3 released

Changes


  • When mining normal entities ghost entity selection is disabled until the mining key is released.

Optimisations


  • Train stop penalty is applied when exiting the block with it instead of entering which should prevent searching for long paths just before destination train stop.

Bugfixes


  • Fixed changelog GUI displaying no version when launching the game more
  • Fixed crashes and desyncs related to circuit controlled lamps in more electric networks. more
  • Fixed advanced rail tutorial no path error. more
  • Fixed inventory transfer tutorial furnaces couldn't smelt ore. more
  • Fixed unknown locale key in train station tutorial. more
  • Fixed new hope level-02 script error. more
  • Fixed that the player would die when mining an enclosed vehicle while driving it. more
  • Fixed achievement progress bars rendering that caused misalignment of tracked achievements. more
  • Fixed that achievement title was sometimes not visible.
  • Fixed spacing of effect icons in technology detail. more
  • Fixed that the player could teleport over things to get into a vehicle. more
  • Fixed the achievement progress bars rendering.
  • Fixed that achievements not obtainable with peaceful mode were obtainable with enemy settings lower then default. more
  • Fixed that exiting the car whilst shooting could lead to a crash. more
  • Fixed that you could not submit a console message if you mapped it to ENTER. more
  • Fixed that the value of "bottom" of vertical align was not parsed properly. more
  • Fixed crash related to scenario message dialog.
  • Fixed very low performance of drawing decoratives on medium or lower video memory usage setting. more
  • Fixed that window to select signal wasn't working when sub-groups were enabled but groups disabled. more
  • Fixed that LuaGame::take_screenshot would ignore the given surface. more
  • Fixed the tank being hurt by its own flamethrower. more
  • Fixed updater not properly setting permission bits more
  • Fixed that hazard concrete didn't have a walking sound in one rotation. more
  • Fixed force-building blueprint rails would build multiple rails on the same location. more
  • Fixed that you could copy-paste enemy structure settings. more
  • Fixed that double clicking the scroll bar in the save-game GUI would save the game. more
  • Fixed that exiting the car with a passenger would leave the car driving in some cases. more
  • Fixed that the read stopped train output signal wouldn't show unless the enable/disable checkbox was checked. more
  • Fixed amount in resource entity tooltip might be displayed as negative number. more
  • Attempted to fix hangs or crashes when using single channel textures for alpha masks on some PCs. more
  • Fixed that the deconstruction marker on diagonal rails was off-center.
  • Fixed wrong order of buttons in Direct connection password dialogue. more
  • Reactor pipes now render correctly, without rotation. more
  • Browse games GUI now shows active filter text after reopening the GUI. more
  • Fixed incorrect number of rails being used when building with rail planner. more
  • Fixed priting of errors in Browse games GUI. more

Modding


  • Fixed JSON parser did not fail on comma at the end of list or dictionary. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-15 15:21:37 CET ] [ Original post ]

Factorio 0.16.2 released

Bugfixes


  • Fixed a crash when using the "flow" custom GUI element type in a mod. more
  • Fixed a crash when migrating energy sources from mods. more
  • Fixed a crash when a request to mod portal timeouts. more
  • Fixed that burner inserters wouldn't fuel burner furnaces in some cases. more
  • Fixed blueprint labels wouldn't render in the world. more
  • Fixed building entities very quickly could duplicate them in some cases. more
  • Fixed a crash when clicking refresh in Browse mods dialog. more
  • Fixed a crash when fast-replacing electric poles. more
  • Fixed a crash when trying to load mods in zipped format. more
  • Fixed a crash when loading saves where the character was in a vehicle which is being removed due to mod removal. more
  • Fixed that right click didn't work in the production/electric stats GUIs. more
  • Fixed a crash when migrating specific simple-entities to 0.16. more
  • Fixed lamp energy info in sidebar and in the Lua interface.
  • Fixed that the logistic network embargo achievement didn't disallow the buffer chest.
  • Fixed that fast-replace building ghost underground belts and pipes wouldn't rotate the direction correctly.
  • Changed (hopefully improved) the heuristic that decides which rail path should be selected for manual rail building.
  • Attempt at fixing game not working on macOS 10.12 and older. more

Modding


  • Fixed the game did not check type of units defined in resul_units of unit-spawner. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-14 12:15:18 CET ] [ Original post ]

Factorio 0.16.1 released

Bugfixes


  • Changed requirement for parallel loading of high quality sprites to 12 GB of RAM to prevent chance of running out of memory on startup. more
  • Fixed that saves with modded progress bar GUI elements couldn't be loaded in 0.16. more
  • Fixed crash when loading crop cache from previous game version. more
  • Fixed that LuaRemote::call() wouldn't copy string values/keys correctly. more
  • Fixed updater would re-launch the game with deprecated --autoupdate-finished parameter.
  • Fixed that scroll pane created unnecessary horizontal scroller when squashed vertically (MapPreview, blueprints, probably more) more
  • Fixed that the Linux binary was corrupt and wouldn't start. more
  • Fixed error checking when compiling GLSL shaders. more
  • Fixed artillery would still show as being able to shoot when on enemy forces. more
  • Fixed the programmable speaker GUI wouldn't show settings correctly when opened. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-13 21:14:07 CET ] [ Original post ]

Factorio 0.16.0 released

Major Features


  • Added logistic buffer chest. It can request items that are still available to the logistic system.
  • Added the artillery wagon and artillery turret which will automatically shoot biter nests and worms.
  • Added cliffs. (https://factorio.com/blog/post/fff-219)

Features


  • Train block visualisation.
  • Building entities over identical ghosts will revive them. When building a different entity on top of a ghost, settings from the ghost will be copied if possible.
  • Train schedules and wait conditions can be rearranged by clicking and dragging.
  • New mini-tutorials: Construction robots.
  • Belts, underground belts and splitters can now fast replace each other.
  • Roboports now provide the repair packs they have for other robots to use.
  • Logistic request tooltips now show the count of items in the requester, on the way, and in the network.
  • The players main inventory can now be filtered.
  • New terrains and new terrain generation.
  • All terrains, including stone path and concrete, have transitions with water.
  • Map generation dialog now contains a preview of the map.

Minor Features


  • Ctrl-delete now deletes whole word in a text field instead of a single character. more
  • Placing output underground belt as ghost properly retains its type as output underground belt. Also underground belts now respect nearby ghosts and become output if there is input ghost nearby. Underground belt and pipe ghosts when hovered show outline of where they will connect more
  • Headless server will automatically save the game when the last player leaves and auto-pause starts.
  • Added support to disable debug settings for non-admin players in multiplayer through the /config command.
  • Dropping items on belts manually (Z) won't spill items if they won't fit on the belt.
  • Trees can now be configured in the generate-map GUI.
  • Hotkeys can be un-bound by right clicking.
  • Rail chain signals can be read by the circuit network.
  • Small electric poles and medium electric poles can be fast-replaced with each other.
  • In multiplayer players can now ride as passengers in cars/tanks.
  • Electric poles and power switches can be opened from the zoomed-to-world view.
  • Terrain can be configured in the generate map GUI.
  • When holding an offshore pump, all valid build positions will be highlighted.
  • After desyncing in multiplayer, the game will not automatically connect back, instead a dialog with more information will be shown.
  • All map visualisations work also when in zoomed in map mode, where normal view and map view is combined based on radar/player coverage.

Graphics


  • More entities in high resolution: laboratory, radar, worker robots (construction and logistic), combat robots (defender, distractor and destroyer), combinators, electric & circuit wires, pumpjack, storage tank, player, solar panel, lamp, roboport, tank.
  • All terrain now supports high resolution.
  • Blueprint previews and ghost entities now have their walls, pipes and belts connected.
  • New alert icons.

Balancing


  • Removed Assembling machine 1 from the production science pack.
  • Changed nuclear reactor stack size to 10.
  • Moved cluster grenade recipe to military 4 research.
  • Changed uranium ammo prerequisite from military 3 to military 4.
  • Explosives now produce 2 per craft.
  • Slightly adjusted some recipe craft times to better reflect their ingredient count.
  • Changed the terrain building size limit to be based off the player reach.
  • Biters scale less with distance and there are generally less biters.
  • Resources are much more spread apart. To compensate, patches are larger. Since it's easier to mine, the amount of resources on the map is 3 times less.
  • Resources scale slightly less over distance.
  • No uranium as a starting resource also no uranium is ever generated near the starting area, you need to go look for it.
  • There is 1.49 times more iron on the map to compensate for the extra iron required in a typical game.

Changes


  • Disabled loading of saves before 0.13.0 version (You can use 0.13 to load older saves and re-save them).
  • Train doesn't need to come to a full stop when manually changing train destination or switching from manual to automated mode.
  • Removed the "shift" value from map generation settings as it wasn't needed anymore.
  • Creating blueprints and using deconstruction planner in zoom-to-world map mode now skip entities covered by fog of war. more
  • Changed the default autosave interval settings from 2 to 5 minutes.
  • It is possible to open/close and interact with the chat console when the map is being saved or server loosing connection dialog is active.
  • The game uses only the cloud version of player-data and achievements on steam to avoid problems with resets.
  • Increased the limit of recipe categories from 255 to 65535.
  • New blueprint no longer includes entities marked for deconstruction.
  • Enable Map Exchange String for sandbox games
  • Copy Paste from assembler to requester chest now scales with assembler speed and recipe crafting time.
  • Blueprints never show the number 1 when held in cursor.
  • Robots in the air from personal roboport now count towards logistics requests for that robot type more
  • Added /server-save command that does the same thing as lua server_save, but doesn't disable achievements. more
  • Gamesave names in the load game dialog that are too long to fit the gui now show in a tooltip in full. more
  • Removed the option to turn off the item groups and sub groups from the GUi. It can still be done through the config file or lua commands.
  • Added separate control option for placing tags on the map, so by default map scroll is left click, and place tag is right click.
  • Allow easier dragging of underground pipes and belts when not moving in a perfect straight line.
  • The Arithmetic Combinator can now use a constant as the first parameter, not only the second. So you can do operations like 2^SIGNAL. more
  • When building blueprints, any already existing building of the same entity type will have their settings updated instead of showing red. more
  • The options menu has been organized better. Some options were moved to a new "Interface" settings menu.
  • Updater proxy settings were removed from the options menu. They can still be accessed through the ini file.
  • Exchange strings are now compressed before being converted into base64.
  • Improved GUI search.
  • Added /delete-blueprint-library *player* command to remove blueprints of players from the game.
  • The map view will attempt to treat very short clicks as clicks instead of drags to make it easier to click things.
  • The explosive cannon shells now target the ground where you shoot.
  • Transition from terrain to water is no longer buildable, meaning entities can no longer be built partially on the water.
  • Resources will have much less trees on them near the player starting area.
  • Tanks no longer take miniscule amounts of damage from hitting trees.
  • Previously, building while running at very high speed would create gaps. These are automatically filled now.
  • Locomotive will show train ID in its tooltip. The ID can be used in circuit network conditions. more
  • When two trains are being merged, the decision which schedule should be used for the merged train has been changed from bigger schedule to schedule that has latest change. more
  • Number of entities in hand when previewing the entity to be built is now aligned to the entity.
  • Added sliding when the player character collides with water or entities with rotated bounding box.
  • Improved drawing of turret radiuses in blueprint. Many overlapping radiuses no longer covers terrain completely.
  • External blueprint library is no longer merged with blueprint library in save. Instead, in-save library is always overwritten by the external one.

Bugfixes


  • Fixed that train arriving to station could give astronomically big penalty causing trains to go through weird places. more
  • Fixed that fluid wagon pumps would sometimes not connect properly more
  • Fixed that module icons in blueprint previews wouldn't render correctly in some cases. more
  • Fixed long mod manager preview labels would extend out of the frame.
  • Fixed that the ~ key couldn't be used to close the console.
  • Fixed that the mining progress was reset when mining selection is lost while mining button pressed. more
  • Catalysts in recipes are automatically recognized and not counted towards production/consumption statistics. more
  • Fixed that ghost rail signal emmited light.
  • Fixed that different icon sizes were not scaled properly when drawn in the alt-info mode. more
  • Fixed latency sound effects in multiplayer latency hiding would sometimes play too many times.
  • Fixed that errors in fonts would give useless errors. more
  • Fixed problems related to trains crashing rarely. more
  • Disabled possibility to attempt opening invalid save/replay by double click or enter.
  • UTF-8 BOM in JSON, INI and LUA files will be ignored instead of causing parsing error. more
  • Fixed that clearing all blueprint icons would cause the entire blueprint to be cleared without a warning. more
  • Conflicts of multi-modifier hotkeys are now resolved correctly. more
  • Fixed sprite rendering at large distances from 0,0. more
  • Interacting with a filter slide bar requesting amount over capacity of a full requester won't dispatch robots anymore.
  • Fixed restart after the second update in a row crashed the game due to duplicated launch parameter (Linux/macOS). more
  • Fixed that "asdf" and "as df" were considered the same when listed in the stop selection. more
  • Buildable item counts in inventory in Sandobx mode now update properly with resource changes. more
  • Fixed that map width/height accepted value of 0. more
  • Fixed crash when loading Vorbis Ogg files with metadata. more
  • Fixed that the manual rail building ended up one tile before the cursor. more
  • Assembling machine can now output product with amount over stack size. more
  • Fixed entity description for resources that require fluids. more
  • Possible fix of the problem that map download blocks all other communication and client is disconnected when downloading. more
  • Fixed that the game could crash when catching up when processing queued gui actions. more
  • Fixed a rare case, when the paused dialog stayed active when reconnecting game after drop. more
  • Fixed colored lights would lose their color when nightvision was on. more
  • Fixed very bad performance when previewing blueprint with one big connected circuit network. more
  • Fixed that an attacking group of biters would sometimes get stuck in a cyclic back-and-forth walking pattern. more
  • Fixed that in certain scenarios, the blueprint library wouldn't synchronise. more
  • Trains now recalculate next station correctly when more stations are en/disabled at the same tick. more
  • Fixed that the server would sometimes quit if a player tried to connect after another player tried to connect unsuccessfully. more
  • Fixed when updater requested administrator rights, updated Factorio would be started in elevated mode too. more
  • Fixed steam "leaking" outside of storage tank window on high sprite quality setting. more
  • Programmable speakers with "Global playback" active won't play for players in a different force.
  • Beam weapon now shows correct damage when modded into dealing damage more times during its duration. more
  • Fixed that large entities wouldn't render correctly on the map. more
  • Fixed that the mining drill wouldn't show the speed bonus in the same format as assembling machines. more
  • Fixed the entity icons for combat robots didn't match the item icons. more
  • Train can't block its own path anymore. more
  • Fixed circuit wire connections wouldn't render correctly in rotated blueprints in some cases. more
  • Fixed that changing the system time forwards would cause Factorio to freeze.
  • Fixed a crash when changing large circuit networks. more
  • Fixed closing window right after it was created would hang the process. more
  • Fixed it was possible to open entity GUIs from zoom-to-world when holding some items in cursor. more
  • Fixed that negative a productivity bonus would show in entity GUIs and create negative progress bars. more
  • Fixed that when biters were attacked but couldn't find a path to the attacker, they would stoically accept their fate. more
  • Fixed that the multiplayer-waiting icon wouldn't render in the map view. more
  • Fixed global achievement progress was multiplied by number of player in multiplayer game. more
  • Fixed that passing a LuaObject instead of a plain Lua table to LuaBootstrap::raise_event would crash the game. more
  • Fixed setting active=false then true on a beacon wouldn't update the beacon correctly. more
  • Possible fix of a crash when a player leaves when a blueprint is being transferred. more
  • Fixed that the rocket silo would get stuck if it died and was re-built by robots while launching the rocket.
  • Fixed transport belt circuit connector would draw over splitter in front of it. more
  • Fixed that it was still possible to get some achievements in a replay. more
  • Fixed that circular references passed through the Lua remote interface would crash the game. more
  • Fixed missing personal robot recharging animation when character was in a vehicle. more
  • Fixed that vertical size of progress bar wasn't respecting the gui scale.
  • Fixed that the number drawn next to cursor when item is held was differently positioned compared to how it is in the inventory.
  • Fixed texture compression would not be disabled when d3dx9.dll is not installed, corrupting sprites that were expected to be compressed.

Optimisations


  • Improved performance of transport belts about x5 times. (https://www.factorio.com/blog/post/fff-176)
  • Added prefetching of the next entity in the update loop improving overall update performance by approx. 10 %.
  • Improved performance of Item manipulation (4% effect on the overall performance).
  • Improved performance of crafting machine (furnace/assembling machine) (2% effect on the overall performance).
  • Improved performance of electric network transfer more than twice. (10% effect on the overall performance).
  • Improved performance of smoke greatly. (2.5% and more effect on big factories).
  • Improved performance when building rail blocks with many segments.
  • Improved performance of logistic provider and requester chests.
  • Improved performance of blueprint previews (the GUI and holding it in the world).
  • Improved game startup time when a sufficiently powerful computer is detected.

Modding


  • Train path finding penalty values are now in utility-constants, to make it viewable and moddable.
  • Fixed storage tank with non-square collision box would not align to tiles in all rotations properly. more
  • Fixed belt-immunity equipment so it now works on cars.
  • Fixed that the radius property for the area trigger effect was called perimeter.
  • Fixed that crafting machine with non-square bounding box was not rotatable. more
  • Removed default values for icon_size, so icon_size is now required property. more
  • Updated the serpent library to version 0.30.
  • Changed the "item that builds this" list for entities so is's sorted first by ItemPrototype::primary_place_result_item and then by normal item prototype sort order.
  • Changed default value of InserterPrototype::allow_custom_vectors to false.
  • Changed "Nothing" technology effect "effect_key" to "effect_description" and changed it to accept localised strings.
  • Changed rocket silo prototype "result_items" to be defined in the item as either "rocket_launch_product" or "rocket_launch_products".
  • Changed the string mod setting type so it will attempt to localise items in the dropdown using "string-mod-setting.mod-name-stting-name-dropdown-item".
  • Changed technology modifier icons so they can be defined per-modifier-type instead of always using the red "+" icon.
  • Changed LuaObject::destroy() so it won't error if called on invalid objects.
  • Changed mod settings so the game will remember settings from removed mods should they be re-added in the future.
  • Changed how TilePrototype::transition_merges_with_tile works. See https://www.factorio.com/blog/post/fff-214 for more details.
  • Scenarios can contain folders with arbitrary names.
  • Added 'single_line' and 'want_ellipsis' to Label style specification.
  • Added force bonus for following robot time to live.
  • Added force bonus for research productivity.
  • Added ability to import and export item-with-tags to/from strings.
  • Added support for fast-replacing character entities.
  • Added CombatRobotPrototype::light.
  • Added TurretPrototype::alert_when_attacking.
  • Added optional 'respawn_time' (in seconds) to the character entity.
  • Added "hide-from-bonus-gui" entity and item prototype flags.
  • Added support for mods to disable custom-input prototypes of other mods.
  • Added support for mods to show changelogs (following the same format as the core game changelog).
  • Added MapGenSettings support to fully define which autoplace definitions are used for a given surface.
  • Added AutoplaceSpecification::default_enabled - if a given autoplace specification should be enabled without being explicitly enabled in map gen settings.
  • Added allowed_effects support to the mining drill.
  • Added optional "has_belt_immunity" property to the unit and car prototype.
  • Added optional "hidden" prototype property to the achievement prototype.
  • Added support to link custom-input prototypes directly to game controls instead of having them act as their own control.
  • Added a new entity type "infinity-container" that can automatically add/remove items from itself; useful for scenarios and modding.
  • Added support for incompatible dependencies.
  • Added an entity prototype flag "hide-alt-info" to never show alt-info for a given entity.
  • Added distance bonus support to the mining tool item type.
  • Added InserterPrototype::draw_held_item.
  • Added FluidPrototype::fuel_value and Generator::burns_fluid.
  • Added mod-developer support to runtime change autoplace specifications enabled through the command line option --enable-runtime-autoplace-modification using F2 in-game.
  • simple-entity, simple-entity-with-owner and simple-entity-with-force can now define 'animations' instead of 'picture' or 'pictures'.

Scripting


  • Fixed that LuaSurface::get_trains() didn't work for trains without locomotives. more
  • Fixed that reversing technology effects in different orders than they where researched could lead to a non-zero number. more
  • Fixed surface_index was off by 1 for on_player_built_tile and on_player_mined_tile events.
  • Fixed possible desync when teleporting underground belt ghosts and pipe to ground ghosts.
  • Changed the robot_built and player_built events to pass the item stack used to do the building instead of the item name and tags.
  • Changed "on_preplayer_mined_item" to "on_pre_player_mined_item".
  • Changed LuaEntity::recipe to LuaEntity::get_recipe() and LuaEntity::set_recipe().
  • Changed LuaSurface::regenerate_decorative/regenerate_entity to accept zero arguments and regenerate everything.
  • Changed the root custom gui containers (top, left, center, goal) to have the corresponding name.
  • Changed the event data from script.raise_event will contain mod_name, the name of the mod that raised it.
  • Changed LuaFluidBox fluid from {type="...", amount=...} to {name="...", amount=...}
  • Changed name of colspan parameter of table to column_count.
  • Changed LuaItemPrototype::group_filters and sub_gorup_filters to item_group_filters and item_subgroup_filters to match the prototype values.
  • LuaEntity::set_recipe() returns the items removed from the entity as a result of setting the new recipe (if any).
  • Moved Mod-gui button flow to gui.top.
  • Removed LuaEntity::passenger read/write.
  • Added style::width/height to set maximal/minimal value at the same time.
  • Added style::align to set the align of inner elements.
  • Added style::stretchable / squashable.
  • Added LuaEntity::get_driver(), set_driver(), get_passenger(), and set_passenger().
  • Added LuaGuiElement::hovered_sprite and clicked_sprite read/write methods for the SpriteButton.
  • Added support to change daytime length and brightness on a per-surface basis.
  • Added GameViewSettings show_rail_block_visualisation property that forces the visualisation to be always on.
  • Added LuaItemStack::export_stack and LuaItemStack::import_stack to export/import supported items to/from strings.
  • Added LuaEntity::tree_color_index read/write access and LuaEntityPrototype::tree_color_count read access.
  • Added LuaEntity::selection_box and secondary_selection_box read.
  • Added LuaBootstrap::mod_name read.
  • Added LuaControl::in_combat read.
  • Added LuaTile::order_deconstruction() and cancel_deconstruction().
  • Added optional cause and force to LuaEntity::die().
  • Added on_player_used_capsule event.
  • Added on_player_promoted and on_player_demoted events.
  • Added on_player_changed_position event.
  • Added LuaEntityPrototype::alert_when_attacking read and LuaEntityPrototype::alert_when_damaged read.
  • Added LuaEntity::power_switch_state read/write.
  • Added on_combat_robot_expired event.
  • Added LuaEntity::relative_turret_orientation read/write for vechicles with turrets.
  • Added LuaEntityPrototype::color read.
  • Added LuaTrain::passengers.
  • Added LuaEntityPrototype::collision_mask_collides_with_self read.
  • Added "fluid", and "recipe" type to the choose-elem-button custom GUI element.
  • Added LuaGuiElement::locked read/write - when true the given choose-elem-button can only be changed through script.
  • Added an optional parameter to LuaSurface::drop_item_stack to mark dropped items for deconstruction.
  • Added LuaForce::cancel_charting(...).
  • Added LuaSurface::force_generate_chunk_requests().
  • Added support for setting a LuaGuiElement as the opened GUI for a player causing it to close with the normal close-GUI methods.
  • Added on_gui_opened and on_gui_closed events.
  • Added on_player_muted/unmuted and on_player_cheat_mode_enabled/disabled events.
  • Added LuaItemStack read properties to tell if a given item is some specific item type.
  • Added LuaAutoplaceControlPrototype, LuaNoiseLayerPrototype, LuaModSettingPrototype, and LuaCustomInputPrototype.
  • Added LuaGameScript autoplace_control_prototypes, noise_layer_prototypes, mod_setting_prototypes, and custom_input_prototypes read.
  • Added LuaForce::reset_evolution().
  • Added LuaSurface::create_trivial_smoke().
  • Added LuaPlayer::enable_recipe_groups() and enable_recipe_subgroups().
  • Added LuaItemStack::rocket_launch_products read.
  • Added on_mod_item_opened event.
  • Added LuaItemPrototype::can_be_mod_opened read.
  • Added the item stack index as a second return value to LuaInventory::find_item_stack.
  • Added LuaItemStack::transfer_stack().
  • Added LuaGuiElement type "slider".
  • Added on_gui_value_changed event - fired when a slider value changes.
  • Added optional color field as a second parameter to the 4 print functions.
  • Added support to change LuaSurface::map_gen_settings runtime.
  • Added LuaEntityPrototype::allowed_effects read.
  • Added LuaEntity::effects read.
  • Added LuaPlayer::can_place_entity(), can_build_from_cursor(), and build_from_cursor().
  • Added LuaSurface::play_sound().
  • Added LuaForce::play_sound().
  • Added LuaGameScript::play_sound() and is_valid_sound_path().
  • Added LuaPlayer::play_sound().
  • Added support to teleport train stops, rail signals, walls, gates, and entities with fluidboxes.
  • Added LuaEntity::rotate().
  • Added LuaEntity::get_infinity_filter() and set_infinity_filter().
  • Added LuaEntity::infinity_filters and remove_unfiltered_items read/write.
  • Added LuaEntityPrototype::rocket_parts_required read.
  • Added LuaEntityPrototype::fixed_recipe read.
  • Added LuaGameScript::kick_player(), ban_player(), unban_player(), purge_player(), mute_player(), and unmute_player().
  • Added LuaPlayer::admin write support.
  • Added LuaGuiElement::focus().
  • Added on_character_corpse_expired event.
  • Added on_pre_ghost_deconstructed event.
  • Added on_player_pipette event.
  • Added LuaEntity::character_corpse_player_index, character_corpse_tick_of_death, and character_corpse_death_cause read/write.
  • Added LuaSurface::get_tile_properties().
  • Added LuaSurface::can_fast_replace().
  • Added support for player associated characters - characters that get logged off/on with a given player but aren't directly controlled by the player.
  • Added LuaEntity::associated_player read/write.
  • Added LuaPlayer::get_associated_characters(), associate_character(), and disassociate_character().
  • Added LuaPlayer::ticks_to_respawn read/write.
  • Added old_state to the on_train_changed_state event.
  • Added LuaRecipe::catalysts read.
  • Added LuaRecipe::hide_from_flow_stats read/write.
  • Added LuaRecipePrototype::hidden_from_flow_stats read.
  • Added LuaEntity::tick_of_last_attack and tick_of_last_damage read for the character entity.
  • Added LuaLogisticNetwork::passive_provider_points and active_provider_points read.
  • Added LuaPlayer::display_resolution read.
  • Added on_player_display_resolution_changed event.
  • Added LuaPlayer::display_scale read.
  • Added on_player_display_scale_changed event.
  • Added LuaTrain::weight and riding_state read.
  • Added LuaEntity::products_finished write.
  • Added optional surface to game.take_screenshot(...).
  • Added LuaEntityPrototype::construction_range and logistics_range read.
  • Added LuaGuiElement::index read.
  • Added LuaForce::max_successful_attemps_per_tick_per_construction_queue and max_failed_attempts_per_tick_per_construction_queue read/write + technology modifiers.
  • Added LuaGuiElement::mouse_button_filter read/write for buttons and sprite-buttons.
  • Added LuaSurface::find_tiles_filtered() and count_tiles_filtered().
  • Added LuaEntity::get_train_stop_trains().
  • Added LuaLogisticNetwork::force read.
  • Added LuaItemStack::item_number read - the unique ID of the item if it has one.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-12-13 12:47:51 CET ] [ Original post ]

Friday Facts #220 - The best Friday Facts ever

Christmas is coming early for Factorio fans. We have a lot of exciting things to show you and announce this week, so hold on tight.

The artillery train


Some of you might remember we said there is an artillery train planned, well we now have a playable version of it, so we can show it to you today. The artillery train (or more correctly, the artillery wagon) is an end-game wagon you can add to a train. It fires artillery shells over large distances, either automatically at nearby bases, or at manually designated targets. In automatic mode, when the train isn't moving, the artillery wagon will automatically scan for enemy buildings (biter nests and worms) and shoot at them. Manually designating targets is very simple, you click on the ground (or on the map or zoomed map) using a special targeting item. For each click, an artillery wagon in range will fire once at the target. Firing at the biters from far away isn't all consequence free, as they will come running to your train, so you will have to make sure there are some defences nearby, or are prepared for a quick getaway. Currently it has a range of 7 chunks (224 tiles) when firing automatically, and a range of 17.5 chunks (560 tiles) when firing manually. The main reason for this range difference is to incentivize players to use manual mode, since it is quite a fun way to use the artillery wagons, and it gives the satisfaction of blowing up biter nests remotely. Albert is working hard to finish the graphics, but here's a untextured work in progress preview. https://eu1.factorio.com/assets/img/blog/fff-220-WIP-artillery-wagon.mp4 Projectiles are slow and are shown on the map. They explore every chunk they travel across. https://eu1.factorio.com/assets/img/blog/fff-220-auto-shooting.mp4 Since they explore the area before exploding, you can zoom in and watch the impact. https://eu1.factorio.com/assets/img/blog/fff-220-manual-shooting.mp4

New terrain/Transitions


As we proclaimed in FFF #199 we wanted to move grass-to-water transitions, from the grass tile to the water tile to make it impossible to build on tiles that visually have water on them. Moving the transition created some new problems. First we had to change rules for building offshore pumps, as they would be placed too far into land. Walking or driving around water felt very wrong suddenly, as player character would get stuck on corners that looked like they should be walkable. So we had to adjust player and vehicle collisions to account for that. We also wanted to allow transitions from any terrain type and water. With some adjustments to our new alpha-masking capabilities we were able to create few sets of transition sprites, most of which are shared by multiple tile types. The new problem now is that the transitions are screaming for animated water now. Oh, well...


Official Factorio t-shirts


Its been a long time in the works, and we've been asked about it countless time, but the Factorio T-shirts are finally happening, and will be available next week. It has been tough to find a printer who can meet our requirements. After many different companies, tests and iterations (such as the batch for the party), we have an order booked for 2,000 T-shirts scheduled to arrive on Monday. Once we check them and make sure everything is alright, we will open up to orders through our new Eshop on our website. The T-shirts are grey unisex, available in sizes XS to XXL, with the Factorio logo printed on the front. It was especially important to us that the silkscreen was of a high quality, and we are happy to say these are better than your typical print shop. The price is $20 USD per shirt plus shipping. There are some limitations on the countries we will be shipping to.
If everything goes according to the plan, we will send the first shipment on the 13th of December, and subsequent packages every Wednesday after. Packing the orders is all going to be handled by us, and since we are expecting a large initial demand, we hope that you will be understanding if we don't mange to get them to you before Christmas. For now we will be limiting orders to a maximum of 3 per person, so we can make sure they end up in the hands of fans, and won't all be scooped up by some scalper/reseller. We also reserve the right to cancel any suspicious/large orders to further this goal, and will be looking through the recipients to make sure nobody is taking more than their fair share. We have the full terms of service on the store, so please check it out before you make any order. We won't really appreciate if we see anybody reselling the shirts, as we aren't really making any profit from this venture, we are just trying to do a good service to our fans. In any case, once we have a good gauge on the demand, we will be able to produce some more batches early next year, so we can keep the supply flowing.

Factorio 0.16 experimental


We had some discussions some weeks ago about when we should release 0.16. Because of the approaching winter holidays, we realized we have two choices, either to release before the winter holidays or some time in January. We decided that Factorio fans would really like to play during the holidays, so we plan to release 0.16.0 next week. This date is quite tight, but this week's internal playtesting went well, with only a few bugs and desyncs. It does not include everything we wanted but a smaller and quicker release is probably better. Please bear in mind that this is an opt-in experimental release of an early access game, there will be bugs, especially since the release is a bit premature. We will have just 1-2 weeks of bugfixing before most of us will go on holiday, so it might not be perfect, but we will make it as playable as possible. Plus some of us (like Rseding91) will be fixing bugs during the holidays. The next few weeks will be a bit crazy for us, working overtime to fix bugs and pack t-shirts, so let us know how excited you are about the news at the forums.

Level designer needed


As an unrelated footnote to this weeks FFF, we are looking for an experienced level designer to help us develop the mini-tutorial and campaign levels. For more information, see the job description on our website.


[ 2017-12-08 22:09:24 CET ] [ Original post ]

Friday Facts #219 - Cliffs

Cliffs - introduction and gameplay


Several months ago TOGoS (Dan) half-jokingly mentioned that what Factorio really needed was mountains and cliffs. This was also suggested many many many times.Albert immediately got very excited and they started having some discussions about how to make it happen. Fast forward a few months, and Ernestas had made some cliff graphics that looked really nice when layered onto pretty much any type of terrain. Fast forward a few more months and add a few months of programming and polishing, and cliffs are almost done, so we will be showing them to you today. Cliffs, together with the other map changes TOGoS did, should make the map look much more diverse and interesting compared to 0.15. Hopefully it will make exploration more fun, since you will be finding more diverse and unique areas in the world. Since cliffs block your path, they can affect gameplay significantly. To not make this annoying, cliffs are never too long and often have gaps. We tried to balance the length so they will be long enough to create interesting combat situations, or with some modifications serve as a natural wall against the biters, but so long that they block your path when you want to get somewhere. Cliffs will also not appear in the starting area, to give you plenty of space for your initial base. Finally, in Factorio nothing should stand in the way of automation, so if you don't like cliffs, you can always blow them up using a new mid-game item called "Cliff explosives".

Cliffs - graphics


Map generation is hard mainly because it is procedurally generated. That means that the computer is mixing all the pieces to create the terrain on the fly. This leads the artists to a very difficult situation,because it is very hard to guess in which conditions the tilesets will be used. Factorio terrain 0.1 We started the generation of terrain in Factorio with very basic rules, mainly mixing clusters of 32px tiles. But obviously that wasn't enough.
Factorio terrain 0.3 With better looking tiles, transitions from one terrain to another, and variations of tiles, terrain looks much better. But this technique was a pain for the artist to generate an interesting and detailed tileset. The 32px grid was killing any attempt to have a natural looking terrain.
Factorio terrain 0.12 New technique: Instead of having only variations of 32px tiles, we produce a tileset with different sizes (x32, x64, x128, x256) in order to break this squary sense of grid, and even being able to render more detail in bigger sized tiles. So terrain looks much more natural. The visible tile-grid is almost gone, and we start spreading a new concept for us: the doodads. These are little sprites of plants and rocks randomly spread throughout the map in order to provide more variability and an organic feeling.
Factorio terrain 0.15 Things are getting better, the doodads were optimised and we're able to place much more of them, creating more interesting patterns and mixtures. It is also worth it to mention that the introduction of the high resolution graphics does a lot to help the look of the terrain.
Factorio terrain 0.16 After all those iterations, the next terrain generation integrates a couple of new concepts: the decals which are "just" doodads but ground-related. Decals are meant to generate terrain accidents and details without being oppressed by the rules of "tileability" and size. Basically decals are patches on top of a tileset that are very rich in detail. In combination with the doodads, the absence of the tile-grid and the high-res, we start to have a natural looking terrain. I have to add that the good and fast work of Ernestas, our environment artist, made possible the evolution of this new state of terrain. Now with our new techniques, the creation of a new tileset is very smooth.
Even with all the improvements, terrain still looks too flat, so another addition to 0.16 are the cliffs. Finally we can break the flatness of the Factorio surface, without having to change the mechanics of the game.
This new feature can add a bit to the fun of designing a factory by taking advantage of the topology of the map.
Or can lead combat to more interesting situations.
There are more additions to the terrain, and we will dedicate more time to this subject in future posts.

Cliffs - Programming


After seeing a graphical mock-up, I was tasked to figure out how they would be integrated into the game. We had some thoughts about making them tiles, or even a new kind of terrain layer, but in the end decided the simplest way forward was jut to make cliffs entities. The "cliff" entity prototype type has some smart logic in it about how all the different cliff orientations work, and that if a cliff gets destroyed, its neighbours need to be fixed up. There are also some special cases about how they interact with projectiles, but for the most part, cliffs just act as walls. The other aspect to cliffs is how to generate them on the map. Since we already have an elevation function, we can just place cliffs wherever we have a steep slope, right? Well, it is not quite that simple. Because of the way the cliff entities were designed, we can't just place them anywhere, we need to make sure they get placed many segments in a row. The rows of cliffs also need to be spaced apart (in cases where there's enough of an elevation change to have multiple rows of cliffs), or they don't look good. The first approach I took was to look at the change in elevation on each side of each 4x4 tile (the size of one cliff segment) cell. If an edge crossed a certain elevation and was steep enough, then we'd say that edge crossed a cliff, and select an appropriate cliff segment to put in the cell based on which edges crossed the cliff elevation upwards or downwards.
A couple of problems became apparent:
  • Slopes of north-south and east-west cell edges that cross a cliff line aren't necessarily correlated. The result being that cliffs running nearly north-to-south, for example, would often have gaps at points where they crossed a grid line to the east or west.
  • There was nothing in this algorithm preventing 'impossible' cells, such as one where every edge has a cliff crossing, and we don't have a cliff graphic to represent that situation.
In the end I removed the slope calculation. We still check that edges cross a threshold elevation, but instead of using slope as the second factor for cliff placement, there's an additional noise layer called 'cliffiness' which applies equally to the north-south and east-west edges. That fact that this noise layer is completely independent of elevation has the added benefit that it's easier to tweak, e.g. to ensure that there are gaps in cliff faces every so often. To prevent impossible situations, the cliff generator now builds up map of cliffs for an entire chunk at a time, and then, cell by cell, removes edges marked as cliff-crossing until no cell has more than 2 'cliff-crossing' (this concept becoming more and more removed from the original elevation function) edges. Of course edges shared with neighbouring chunks are off-limits to the edge removal algorithm, since they have to match whatever cliffs are generated (independently) for that chunk. As always, let us know what you think on our forum.


[ 2017-12-01 21:17:18 CET ] [ Original post ]

Factorio 0.15.39 released

Bugfixes


  • Fixed corrupted Windows release. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-11-27 19:56:35 CET ] [ Original post ]

Friday Facts #218 - Import bpy, Export player

Hello dear biters and related species from unexplored planet full of life and natural resources. Recently I have been working on several high resolution graphics for your best friends - the tank and the player character. In this article I would like to show their updated visuals to you, as well as a sneak peek at how they are produced. The following text may contain traces of automation.

High Resolution Tank


Like most biter stories end, this story started with the tank. I just took the 3D scene that Pavel made in 2014. There was quite a bit of work required to make it all render correctly, but eventually I arrived at the desired result.
However there was one thing that really bothered me in the process - making the colour mask look good was rather impossible.
In general this is an issue that we already encountered earlier with the locomotive, cargo wagon and train stop. The cause was the RGBA values set for player colours, so I went ahead and changed all of them, I even added a “default” colour, so you can easily revert back to the single player default colour in 0.16 (which is also "Orange"). The dynamic colour algorithm (we call it tint) works in very weird ways, where if Alpha is set to 1.0, it kind of multiplies the mask by some selected colour. Alpha 0.0 somehow makes the whole mask sprite draw additively while colorized by the selected colour.
Regardless of the technical magic, the final verdict is that unless you are doing something extremely specific, the colour mask values should always be at 0.5 Alpha. You might have already noticed that the train colour sliders only allow you to change RGB values and not Alpha. That makes the colour much more stable - any RGB value you pick is going to work, once you start touching the Alpha it can look wrong and broken. I would like to take this opportunity to ask modders to keep this in mind, as I have noticed multiple mods using 1.0 Alpha values in colour mask tint. The Alpha is black magic, keep it at 0.5 please.

Player character colours


The tank and the car colours are both much nicer now, but the player character colours seem a bit off...
The whole mask-works-with-0.5-alpha has one big condition - both the mask and the masked area of the sprite under it have to be desaturated. And the player graphics are already made to be orange. This is especially visible in the image above on colours like gray.This was never an issue since the player colours were using 1.0 Alpha, apart from the problem that all of the non-default colours looked horrible.
It might have been possible to do some quick hacks and just desaturate the player sprites where needed, but we found it more appropriate to take the opportunity to bring the player character into high resolution and fix it along the way.

High resolution player character


We were already aware that the player character is a very special task. Just the amount of spritesheets and Blend scenes already screams madness. Basically, the player character was split across many Blend files that Albert produced in 2015, each of them having one animation sequence. I honestly didn’t even ask how much work and time did it take for him to create all of this.
The game currently uses:
  • Idle player
  • Idle player with gun in hand
  • Mining player without axe
  • Mining player with axe
  • Running player
  • Running player with gun in hand
  • Player corpse
Each of these animations then have a variation for two armor levels, which can be drawn on top of the basic character. In total we are talking about over 4,000 individual sprites, double that number when we also consider high resolution.
From past experience we already know that re-rendering an entity in high resolution is almost never “just make it have more pixels”. Shaders and details start working differently, and it’s always necessary to do some changes. However, editing 21 Blend files at the same time does not sound very appealing or efficient, so our plan was to merge all of the animation into one huge Blend file. The aim is to have:
  • Blender file with 21 scenes, each rendering one animation.
  • Everything must render automatically.
  • All of the meshes linked so if we edit one, the rest automatically update.
  • All of the meshes use the same materials so we just edit one.
  • It must be possible to revisit the player character in the future.
Per usual this is much easier said than done, it is possible with the tools that Blender has, but would require an extreme amount of manual work. It would also take way too much time, and would be way too fragile.

Graphics workflow


Making the player character in high resolution would have been utterly insane without the use of scripting. In the following part of the article I will show you a few of the most useful Blender scripts that I wrote and used in the process. 1. Copy objects between Blender scenes The first task sounds simple - copy-paste the objects from the source Blend file to the new one - until you try to do it. In Blender you can Copy + Paste objects between scenes easily, the catch is that in the destination, they are all pasted to the same layer, depending on which layer is active. However the objects forget which layer they are from in the source scene. This is a big problem, but after short thinking I wrote a new object transferring tool.
It is a set of two scripts, the first one prepares objects in the source scene (it changes their names to have a prefix with layer numbers). The second script processes them in destination by reading the name, moving the object to the appropriate layer(s), and cleaning up the name as if nothing ever happened. 2. Link mesh data of identical objects The copy pasting is great, but every new paste creates a set of new unique objects with unique materials. If you do this 21 times, the amount of duplicate data which is supposed to be the same goes up like a rocket. Generally 3D software has a way to create duplicates which are linked so if you edit one, you also edit the other. However once you break the link, it’s not so easy to bring it back, because the program isn’t sure if the two objects are really the same. In Blender this is possible, but doing it one by one would be way too much work so it’s time for another script.
This one reads every object’s vertices one by one, and saves them to giant lists. It then compares it to another object, and if the other object is identical, it makes a link between them - if not, it keeps both of them unique and adds the new one to the list of vertex data to be compared with. It’s actually surprisingly fast, considering that it filters through about 5 million vertices, but it still takes several minutes to process. The result seems good except for one problem - some of the objects have identical mesh data, but special materials that we used for rendering shadows, which is solved by running another script, which searches for objects with the shadow maker material and removes them. This has to be done before linking the mesh data to make sure that our mesh data ends up with the correct materials. 3. Clean material slots The next step is to unify materials. This is already mostly taken care of because the mesh data already carries the used materials in it, but going through all of them and manually checking was required. It wasn’t helping that every object had defined about 20 material slots, even if it was using just a handful of them. Whenever you have a mesh with multiple materials being used on different polygons, and you remove some polygons, chances are that you aren’t using all of the materials any more.
So I made myself a script which removes the unused material slots so I wouldn’t have to manually check so many of them. It’s not only more work but it’s also much easier to spot errors when you see only what you need to. 4. Generate Render Layers and Compositor Nodes With all of the objects correctly linked and materials properly editable, it’s time to figure out how to output this whole thing into sprites. As we already hinted in FFF-146, we are almost always using Render Layers going into Compositor nodes to output many different passes of the same scene. Since we are keeping the layer structure of the original source, it was possible to set up the rendering system to do the same again. It was still a lot of work because it was not always consistent and many of the scenes required small but hard to spot tweaks. One thing which helps at least a little bit, is pre-generating all of the render layers with their names and some basic setup, which is consistent between all scenes.
Render Layers aren’t much without a way to save them to the final images - this is handled by the compositor nodes. There is a special case for Ambient Occlusion and Shadow passes, but in general it’s absolutely consistent so scripting this part is great as it removes all need for manual attention to this. The script just reads the Render Layers and generates the nodes to fit them. 5. Rendering and final processing To render all this from the 3D scene, we are using a fancy system which allows us to render across multiple computers, as the animations would take over 40 hours to render on a single PC.
The rest is basically the same as with the combinators shown in FFF-194, so I won't go into details here.

Result


After all this, we get the player graphics in high resolution, with colour masks working correctly and also a lot of new Blender tools for ourselves to work with.
And here is a preview of how the colour masks work for 0.16.
All the things in this article combined took a lot of time to make, especially the high resolution version of the player character. In the long term we are likely going to do some more changes and adjustments to the player character models and animations. Thanks to the new source files we will be able to do that, and for now we are satisfied with how the player looks for 0.16.

Razer Chroma


Razer contacted us quite a while back and asked us if we could add Razer Chroma support to Factorio. Razer Chroma/Chroma Link means that the game can take control of any supported RGB devices (from mouse and keyboard to LED strips and chairs) and control the colors of the lights. We implemented the following:
  • Background: Factorio orange (Keyboard, mouse, mousepad, headset)
  • Damage taken animation (Keyboard, mouse, mousepad, headset, chroma link)
  • Player Healthbar when damaged (Keyboard, mouse, mousepad)
  • Player shields when damaged (Keyboard, mouse, mousepad)
  • Progress-bar during game loading, savegame loading, multiplayer map download multiplayer map loading, multiplayer catching up(Keyboard, mouse, mousepad, headset, chroma link)
  • Flash technology key on technology researched (Keyboard)
  • Flash map key when building are destroyed (Keyboard)
  • Custom Ripple animation when achievement is unlocked (Keyboard, mouse, mousepad, headset, chroma link)

People already want to control their light using the circuit network and Lua, so something like that could be cool to add in the future if there is demand for it. Normally we wouldn't add features to 0.15 after it was marked stable, but since there will be some Razer events, we thought it's good idea to have Factorio in the list of supported games. So the feature was added today to 0.15 as an experimental update but it will be marked as stable next week if nothing is broken. If you have anything to say you can let us know on our forum.


[ 2017-11-24 16:35:35 CET ] [ Original post ]

Friday Facts #217 - Just another Friday Facts

Hello, most of the team is out of the office today attending the Game Developers Session here in Prague, if you're around you can look out for some people wearing Factorio t-shirts. As we were thinking about what to write in this Friday Facts, kovarex suggested "In the next Friday Facts we should write about how hard it is to write Friday Facts". Sometimes it is really difficult to find something interesting to write about. Thankfully we found some short things that that we thought you would like.

Passenger seat for vehicles


Just a minor multiplayer feature.

Resource generation and game balance


I wanted to have a look at how we generate resources and try to balance and improve it so it's a bit more fun. When playing the game, I noticed that I always need more iron than copper and I also felt that there is more copper than iron on the map, so I first wanted to look at that. When we balance out any part of the game it's usually something like "that seems a bit low, let's increase it by 0.2-ish and see how it goes". While this worked surprisingly well so far, I like to take a more scientific approach and look at hard numbers when possible. First I looked at resource requirements. In order to complete all non-infinite research you need:
  • 60,445 Science pack 1
  • 59,885 Science pack 2
  • 48,600 Science pack 3
  • 20,800 Production science pack
  • 27,925 High-tech science pack
  • 32,445 Military science pack
To make all this you need:
  • 3.5 million copper and 5.2 million iron. Ratio: 0.67 (in normal mode)
  • 10.4million copper and 10.9 million iron. Ratio: 0.95 (in expensive recipes mode)
I would say it's safe to assume that these are close to the number of resources needed to finish the game. Since you wont research everything, which will compensate for the cost of infrastructure and combat. Here I see that there is a different ratio of copper to iron, and the ratio is different in expensive mode. Now going to the map generation, I generated some 2048x2048 maps and calculated the total number of resources on them. For some reason there was always more copper. This seemed very strange since the map generation settings had the same values for both copper and iron. It turns out that some resources are always on top of others. Coal was on top of copper that was on top of iron that was on top of stone that was on top of uranium (alphabetical order). This meant that there will be more copper on average. To be precise, the maps had 1.5 billion copper and 1.3 billion iron. That's a ratio of 1.15 caused by overlapping. I changed the order of resources around a bit so Iron is on top. To balance all this out, the plan is to change some some recipes in expensive mode, so that the required copper to iron ratio is roughly the same in normal and expensive mode. Then the map generator settings will be tweaked so it also reflects that ratio (of course while keeping in mind the difference caused by overlapping resources). Now some might argue that what's the point of all this. Making things balanced does not mean more fun, for example making the player and the tank overpowered and unbalanced in combat made them way more fun. But for resources I believe it's more fun to find value in almost every resource patch you find as you explore, instead of "oh, another copper patch, how useless", especially if the player assigns the same value to it and has some expectation that they are balanced. Balancing all this is not a big deal, but it's just a subtle attention to detail that might make the game 1% more fun, and polishing all these little things will happen more and more as we approach 1.0. While I'm looking at the resource generation, there are more things that I plan to improve. For example:
  • Tweaking the resource density (average number of resources per tile).
  • Making resources much more spread apart.
  • Reworking how the staring area works so that it always contains a predictable amount of resources. This means that every new map is feasible.
  • Making sure the starting area is not covered by trees.

More optimizations


When we talk about game performance improvements it's almost always focused on the entity-update time as that is primarily what determines how fast the game can run. There is however one other important part and that's the "prepare" step that collects minimal information about the game to be rendered on screen. This step happens between the game being updated and the results being rendered on the screen which means the game has to be paused while it's run. We haven't looked into improving this part of the game for quite some time because it runs in multiple threads and was always been "somewhat quick". Recently I decided to spend some time trying to improve it and found several easy optimizations. The end result being the prepare step now runs roughly 50% faster than it did before, leaving more time for the game logic and entity updates.

Lua API additions


With every major update we add keep improving the Lua mod API and 0.16 is no exception; between the larger tasks and bug fixing I've been working on requested Lua API additions. For those interested I've been keeping a public gist of the 0.16 changes and additions here. I'm always reading the forums for new requests or changes to the API, so If you can make a valid argument for some new API feature (and provided it doesn't negatively impact the game performance when not used), please let us know on the Modding interface requests forum. Let us know what you think by commenting in our usual topic at the forums.


[ 2017-11-17 11:49:10 CET ] [ Original post ]

Friday Facts #216 - Paving a path for the GUI update

Hello, I wanted to write about the things I'm improving in our GUI library, but I realized, that the important part is to explain what is the motivation to do so. So let me present the history of Factorio GUI.

Version 0.X


Back in the day when Factorio started, I was quite clueless. I needed some GUI library for allegro, and agui was the only one I could find, so I started using it. As in most of the story, I didn't really pay much attention to GUI, it was just the pesky part of the code which I needed to work in order for the game to function. There weren't much GUIs back then, and most of them were done by manually placing bunch of elements so it is possible to interact with it. The look and positioning was quite random.
The previous strategy stopped being possible quite soon, and we realized that we can't just manually place widgets in a window, so we started to use the layout functionality to build the GUI, so it doesn't break immediately once it contains just a little bit of different data. At that time, it was good.

Version 0.5


It is hard to believe now, but at that time, I was insisting, that the GUI is OK, and we don't need to improve it, but luckily, I was persuaded by Albert and Tomas that we need to give the GUI a better look. That was how was the look similar to the current one created. We needed to add hierarchical graphical style system to be able to control the looks and positioning of individual elements, so we did it. We also needed to add several additional functions to the layout mechanism as the need to make these two windows have the same height automatically and similar things. So we made specialised features for that by bending some of the original GUI library code. It usually worked, and when it didn't we made little hacks here and there to make it work. It also created new problems, like the random margins of elements that were supposed to be aligned with something. As all of this was made by unique specific numbers of widths/heights of elements, it could never work right, as all the style values were scaled depending on the resolution.
Here for example, the progress bar style was specified to have a somewhat correct width, and we didn't even care or understand how bad it is.

Version 0.6


It was identified at this time, that we need some mechanism to solve these kind of problems, so I created the stretchable functionality. As I was clueless about the library internals, I was afraid to break anything, the usage of it was quite awkward, it had to be used together with the functionality of mechanism from 0.5 to stretch windows to have the same width/height. You needed to set correctly some of the style values and some of the C++ object values to make it work properly. You had to set the stretchable not only the element but all of the parent elements etc. But it worked ...

Current day


Small hacks here and there accumulated. When you use stretch layout and set align to right doesn't work? Well just set the layout to go from right to left and put things in opposite order. Isn't the layout doing what you need? Just calculate the needed dimensions manually and force them in the style. And much more ... New people started joining our team and they didn't know the subtle things you needed to push to make it work and lot of new code was created with even more hacks. The GUI started to be a crazy complex beast. At that time, one of the new programmers wanted to fix some of the hacks. The result was, that he wanted to fix everything, and after 9 months of repeated inability to show anything, he was fired. After that time, GUI was considered even more scary. Things like this started to appear all over the place in the desparate hopes of making it work:
Some people have even shown their disgust by naming their variables:

GUI refactoring


Now we are facing the need to make the GUI update (first part was presented in one of the recent fffs). At this point, you have some idea of how painful would it be to just glue the needed additions to our current GUI. It would be painful complexity squared. This is why I decided to roll up my sleeves and just dive into it. I started rewriting and clean-up the core parts of how the layout works. At this is point, I have a branch that has 52k lines of changes compared to master, and the internal workings of the GUI have been revised a lot. A lot of the mechanisms that had to be hacked painfully work automatically and there is much less code and knowledge needed to write the GUI in the new branch. But this also means, that we have to go through every single GUI and remove the previous hacks by the new functionality, which is a lot of work. To aid in the GUI simplification work, we created a simple GUI debug view, to let us quickly see how are the layouts stacked. I will leave it in the game, as it could be also useful for modders when they need to debug their GUI structures.

On top of that, I started to write GUI tests, as GUI layout is the great example of piece of software, where fixing one thing breaks some other without you knowing. These changes will also change the way modders specify GUI structures (mainly related to the align and stretching), but it wouldn't be us if we didn't break mod compatibility in a new release. As always, let us know what you think on our forums.


[ 2017-11-10 18:36:06 CET ] [ Original post ]

Friday Facts #215 - Multithreading issues

Hello, it is Friday once again.

Multiple starting areas


To make PvP fun, and fair, it is pretty important that all the teams have a fair start. We do this for the normal game by using some special logic to generate a specific starting area. While the map generation didn't support this, I worked around the issue by copy-pasting all the starting area chunks to new starting areas for all players. This looked very odd though, and since it was done in the Lua script, was very slow.
So the solution is to fix the map generator to create multiple starting points, which with all the refactoring work by TOGoS, was not so hard to do. Whereas before all the logic calculated its own 'distance from the start' from (0,0), now it looks for the closest starting area, and calculates the distance from that. This actually fixes and simplifies a lot of the PvP script, as I also don't have to worry about clearing away huge biters nests from each teams front door.
This is a much cleaner solution, as the new starting areas are seamlessly integrated into the map.

Multithreading issues


We were always saying, that we keep the full update multithreading as the last ace in the sleeve to be used after the normal optimisations become too difficult. Apart from the plan to split update into chunks and update them separately, there are also smaller and simpler things we can do. We have for example this part of the update step, where we update trains, electric network and belts, and we update it one after another like this:
But these tasks are almost independent as neither trains or belts use electricity and belts don't interact with trains. There would be some details that would have to be solved, like Lua API calls and inserter activation order, but other than that it would be pretty straightforward. So I tried to run these things in parallel and measured how fast it would be:
To my surprise, the parallel version didn't speed things up, it was actually even slower. First I thought that it is caused by the fact, that the threads steal each others cache or the task is too short to be parallelized etc., but then I realized, that we already do the "prepare logic" in parallel. The prepare logic gathers all the data (sprite draw orders) for rendering and it is doing in parallel up to 8 threads. The task is iterating through the game world, and it is also quite short. Yet still the parallelization works pretty well there. After a few days (and many cppcon videos about multithreading later), I got the answer to my question. The answer is the same as many other answers related to performance, it is caused by cache invalidation. There is some shared cache for all the threads (L3 I believe), and some smaller caches specific for each of the cores (L2 and L1 I believe). The cache is divided into some kind of pages. The problem is that as long as I don't control the memory allocation, the data of 3 objects that might be completely independent can end up in the same page of memory cache. So lets imagine this situation:
Even if two different cores work with the same part of memory, they don't slow each other down as long as they only read the memory (Which is the case of our prepare logic as it is read only operation) as each core has its own copy of the memory page. The problem arises when the operation is not read only:
Each thread has its own copy of the page, but whenever something is changed, the other copies of the same page need to be invalidated and updated. This means that the threads are invalidating each others cache all the time, which slows the whole process so much that it is slower than the non-parallel solution. How do we solve it? The solution would probably be to organize the memory allocation in such a way, that everything that is on the same chunk, or related to some specific task would have to use its own memory allocator that keeps things in one place together in the memory. Every chunk would have its own piece of memory dedicated to entities in the chunk, trains would have all its data in one piece of memory together etc. This way, it shouldn't happen that two tasks would work on one piece of memory at the same time so the multithreading would actually speed things up. The problem with this is, that it requires big changes in the code as not only the entities itself but all their dynamically allocated data would have to be always allocated depending on the entity position. Whenever the entity moves between chunks, all its data structures would have to be re-allocated in the new chunk. All pointers to any data structures in entity would have to be properly updated as they move around etc. This means, that once (if) we decide to do this step, it would probably be one big update related only to this and this is not something we have time to do before 1.0. As always, let us know what you think on our forums.


[ 2017-11-03 17:19:38 CET ] [ Original post ]

Friday Facts #214 - Concrete rendering

Hello, there has been an illness running around the office this week, so productivity has been down. Regardless, it is still friday, so here are the Factorio Facts.

High-resolution concrete


It seems concrete became the main ground texture of most megabases, which is something we didn’t expect when we added the stone and concrete 'paths' a few updates back. Since we are remastering all sprites into high resolution, we decided to redesign concrete to fix some issues we have with it:
  • It has a visible grid that doesn’t match the tilted projection of the game.
  • It doesn’t seem to have any height.
  • Hazard concrete transition to concrete is very sharp which makes it look too artificial.
When drawing terrain, we try to hide the fact it is composed of repeated square tiles. For this reason we use various tile sizes, where bigger tiles can have some larger features that wouldn’t fit onto a smaller one. This solution was not good enough for concrete rendering any more. We were inspired by an article about detail textures, and decided to try to draw concrete in two layers - material and detail. The idea was that we would create a larger material texture that would be laid out in a regular grid under the whole world, and we would cut out the shape of the concrete placed over it. Then on top of the material, we would add some detail defined in our regular 1x1, 2x2 and 4x4 tile sprites. We experimented with this and liked the freedom from having to create 32 by 32 pixel sprites that need to tile with each other. For other terrain types we use prerendered transition sprites on border between two terrains, but because of the material layer, we needed to render transitions at run-time. To finish this up, we needed to add alpha masking to our rendering capabilities. The alpha mask is a greyscale or single channel image which is multiplied with the actual texture, so that a pixel in the texture becomes more transparent the darker the corresponding pixel in the mask is. Now that we have this capability we can replace the prerendered transitions with masks, that are shared by multiple terrains, so we will save some video memory. This will be big deal when we do transition from any tile type to water.
In 0.15 we made a change that merged concrete and hazard concrete transitions to other terrains. Initially hazard concrete had its own graphic for the transitions, but the algorithm that was drawing them produced flawed results in some edge cases, so we decided to use the same transition graphic as normal concrete does. To fix the flaws of the original drawing algorithm, we render transitions in two passes. First we resolve transitions as if all hazard concrete was regular concrete, then we render transitions just for the hazard concrete. This also allows us to create irregular edges between hazard and normal concrete. In the end we didn’t use normal tile sprites to add any additional detail, but we used normal (non-masked) transition sprites to add a border from the concrete bricks. The following GIF illustrates how individual layers are added together.
In some way it's a pity that we decided to tackle the concrete last, as we could of used this functionality for all the other terrains. The final result is a much better and easier system to work with, and will allow the artists to create the best art without worrying about the technical considerations too much.
These improvements lead to other ideas to improve our graphics rendering, and a lot of difficult issues are still left to be resolved, so let us know what you think on our forum.


[ 2017-10-27 15:41:58 CET ] [ Original post ]

Friday Facts #213 - The little things 2

Hello, we are still here, working on the game.

Tutorial dependencies


As we were going through and polishing some of the mini-tutorials, we hit a bit of a problem. We wanted to introduce a new concept to the player, but we don't enforce or encourage any order to the tutorials. This means a player might start the ghost rail tutorial before he knows what ghosts are, or play the rail signal tutorial before he knows how to use the trains. The solution is to add dependencies to the tutorials, so we recommend to the player, "You should play this tutorial before another".
Another advantage of this is that it sorts the tutorials better. Now suggested or unplayed tutorials will show at the top of the list, tutorials with missing dependencies will show in the middle, and complete tutorials will be at the bottom. From a tutorial design standpoint it makes things a lot easier. I can make safe assumptions about what skills the player has, and not have to worry about re-teaching the basics in every tutorial 'just in case'.

Logistic request pasting


Logistic chest pasting is a great quality of life feature when setting up 'shopping malls' with logistic bots. Drop a assembling machine and requester chest, set the recipe, then copy-paste from the assembler to the requester chest. The design question is how much should the logistic chest request? Quick recipes like electronic circuits need a lot of materials to avoid idle time, while items that are slow to craft, like modules, can result in a lot of materials sitting idle in the chest. This creates a lot cases where the pasted amounts needed to be adjusted manually. One of our community contributors, Mylon, designed a new system, which is now integrated into 0.16. The system scales the count of requested items to the crafting time of the recipe, and to the speed of the specific assembling machine. It aims to keep the chest supplied with 30 seconds of crafting ingredients. So notice in this example how the amounts varying between the machines being pasted from:
Adding modules and beacons to a design and then repeating the copy paste will recalculate the requested amounts, whereas before the amounts would need to be modified by hand. We still have a prototype defined recipe paste multiplier for very expensive items, like Nuclear reactors and Satellites, but overall this new system will be much more flexible, and deal with most of the annoying cases.

Buildability checks


"Is the thing in the cursor buildable where it is behind held?". It sounds simple at first, but as the game has advanced it has quickly become anything but. Not all entities have the same buildability rules:
  • Gates can be built on rails - but not all rails.
  • Mining drills can only be built on the correct ore type.
  • Rail signals can only be built next to rails.
  • Offshore pumps can only be built at the edge of water and land.
To complicate things even more the rules change when building ghosts:
  • Other entities are ignored if they're marked for deconstruction.
  • Signals can be built anywhere instead of only next to rails.
  • Ghosts ignore ghosts of other forces.
  • Tile ghosts can't be built on tiles of the same type (it wouldn't do anything).
When shift clicking blueprints:
  • Trees and rocks are ignored - since they will be marked for deconstruction if they are in the way.
  • Anything that can't be built is just ignored in the blueprint.
There are so many special cases and so many combinations of when things can and can't be built (or can be ignored when building) that I've probably missed a few of them here. Something that has been missing for some time now has been making all of these variations render correctly in the preview you see before you build something. A simple example is when holding a blueprint over a patch of ore with shift held down. Any trees and rocks in the way will be marked for deconstruction, and the ghosts will be placed. In 0.15 the preview would not be updated, so the drills would show as red. Now in 0.16 they rendered correctly:
It's a very small thing, but one more thing that when it 'just works', it makes the overall experience that much better, after all, perfection is just doing a lot of little things right. As always, if you have any suggestions or ideas, please let us know on our forums.


[ 2017-10-20 16:40:52 CET ] [ Original post ]

Factorio 0.15.37 released

Bugfixes


  • Fixed false positives in detection of crashes caused by incompatible version of RivaTuner Statistics Server.
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-10-17 14:05:56 CET ] [ Original post ]

Friday Facts #212 - The GUI update (Part 1)

A long time ago, in FFF-191 I wrote about improving the GUI. Well, things are finally starting to move, so this week I'll bring you an update on that. We even have a GUI team:

  • Twinsen(me): UX and programming
  • Albert: UI, graphical design, layouts, mockups, UX
  • Rseding91: main programming and GUI internals
The plan is to go through the entire game's GUI (including main menu, all entity GUIs and all game windows) and improve it both visually and interaction wise. This is quite a huge undertaking because:
  • Factorio's interactions are quite complex
  • If you count all the entity windows and panels, we have about 120 windows to go through in the game.
  • Mods can change many aspects of the game so we have to account for that to make sure windows still look good and are still easy to use: e.g. having 15+ recipe categories, having assembling machines with 20+ module slots, having recipes with 20+ ingredients, having players with 200+ inventory slots, etc.
  • Many players are already used to interacting with the game in a specific way, so any major changes are hard to make.
  • Our GUI back-end (heavily modified AGUI) is not exactly well written, programmer-friendly, or feature-rich.
  • Many of the features and polishing we want to add were not done previously due to their programming complexity.
At the moment we are still early in the project, just defining the style and the concepts. During the next months, I'll try to make a series of FFF talking about the improvements we are making (starting with this one) so you can see how the project progresses, and offer feedback along the way. Everything I mentioned in FFF-191 will be there, but we have even more cool improvements coming to the toolbar that we are working on, so today I'll talk about something else: the new train/locomotive GUI. Disclaimers:
  • Everything you see are mockups made by Albert and are not from the game, but we will try to make it look almost identical in game.
  • The style (colors and look) is not final. This is the 3rd iteration and Albert is still experimenting with making everything look nice.
  • The purpose of these mockups are mostly to define the layout and interaction.
This is how the new Locomotive GUI will look. As you notice, apart from the style changes, they way the stations and conditions are shown is very different, but I'd say much more intuitive, informative, and easy to use.
Let's go through a short use case. You click add station and the list of stations appears. You can add a station by clicking on the station in the list or by clicking it in the small map. The map can be zoomed and moved around so you can easily find your station. Also, as you hover over stations in the list, the map will show their location. The stations marked differently are unreachable from the train's current position. This way you can more easily recognize and possibly ignore stations outside of the current network.
Once you click a station, it is added to the schedule, along with a default condition. You can continue adding more stations, or add/edit the conditions for the new station.



Finally a schedule can look something like this. The path of the train will be shown. We will try to paint the path the train is taking at the moment, it will change as the train takes different paths.
The fuel can be accessed from the separate tab and the color of the locomotive can be changed using the color picker. The buttons in top of the map, from left to right are as follows:
  • Turn station names on or off.
  • Change the angle of the station names.
  • Switch to map view.
  • Switch to camera view.
  • Center view on the train.
The small 'info' button you see on the right side will be a help button we will use throughout the game to help explain how different GUI work and when their elements mean. We will write more about this in some of the next parts of the FFF GUI update series.
We also want to add a neat tool for advanced players. Control-clicking on any point on the locomotive's map (or any station) will add a 'Temporary stop' to it's schedule. The train will try to go as close as it can to that point, wait a few seconds and finally automatically remove the 'Temporary stop' from it's schedule. This is very useful for quick transportation. It also allows you to quickly 'hijack' an existing train and use it to get somewhere, since the 'Temporary stop' will be deleted and the train's normal schedule will be resumed. Another quality of life improvement will be a game option to automatically add some fuel from the player inventory when building vehicles (car, tank or locomotive), making rail transportation as simple as placing a locomotive on a rail, entering it and control-clicking where you want to go. We hope you like the proposed changes. No doubt things will change as we implement and playtest these changes, but we thought it would be interesting to show you an early preview. Finally the million dollar question is when will this be in game? Because it's quite a bit of work we already pushed the GUI update to 0.17. On the bright side, this mean 0.16 will come a bit sooner. Let us know what you think by commenting in our usual topic at the forums.


[ 2017-10-13 19:46:16 CET ] [ Original post ]

Factorio 0.15.36 released

Bugfixes


  • Fixed a bug in the fix of electric network from 0.15.35.
  • Fixed a crash when deleting chunks in specific cases. more
  • Fixed a crash when coupling/decoupling trains through the Lua API.
  • Fixed crash when unknown program arguments were passed. more
You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


[ 2017-10-10 15:24:41 CET ] [ Original post ]

Friday Facts #211 - The little things

We are aware that we don't add so much content to Factorio these days. The reason we always state is that we are focusing on polishing and finishing the game. There are a lot of little things and details (some call it quality of life improvements), that don't look that awesome when reviewed one by one, but once they accumulate together they should make a big difference in the game experience. I'm going to talk about some of them now, but don't be afraid that we won't add anything new in the 0.16, as the work on the artillery train has already started and it is probably going to be epic :).

Blueprint connection


One of the problems with blueprints and ghosts was when you create blueprint of this:
Entities don't connect in the blueprint itself, so it looks as ugly as this:
Once you build the blueprint, it looks like this until it is actually constructed:
This bugged me, but the solution wasn't so straightforward. The logic of connecting entities is based on the them being actually placed somewhere on the map, but in the blueprint, the entities kind of exist "in the air". So I had to make special piece code for connecting entities in blueprints. I only cared about the visuals of belts, walls and pipes, so the code wasn't that complex after all. The looks like this in 0.16:
Next step was to make special code to connect ghosts entities together (and also normal versus ghost). This was the most tricky part, as we needed to make sure to not connect the internal transport lines of belts when doing so. Otherwise, the ghost belts would just work as normal belt :). We also needed to avoid ghosts of connected gates to not interfere with opening/closing logic of existing gates etc, but it works now and this is the result of the built blueprint now:
You can see, pipes are still not connecting. They are more delicate, as it would be harder to make the connections without affecting the performance of the pipe transition logic. We might either just not do it for pipes, use some special trick later, or wait until the fluid flow gets optimized. The optimizations would probably mean that the fluid control logic would be handled externally like belts, which might simplify things regarding the fake connections.

Blueprint and mods


We described the problem in fff-201. Basically, blueprints with modded content would lose all their modded content whenever you load a game with the related mod deactivated. There is no going back, once you activate the mod again, the items are still lost. The solution of this was one of the first task to Tom, one of our new programmers. Now when the blueprint is being loaded and it encounters entities that are no longer available, the original binary source of the blueprint and some additional meta data is saved along the blueprint, so once the mod is activated again, it can be fully revived. Blueprint with modded content.
How it looks in the blueprint library when the mod is removed.
Preview of the blueprint that indicates where are entities that are not available now.
As always, let us know your thoughts, ideas and feedback on our forum.


[ 2017-10-06 13:52:08 CET ] [ Original post ]

Friday Facts #210 - Circuit connector module implementation

It’s been several weeks since we showed you the graphics for new high resolution circuit connector modules (FFF-202). However now is finally the time when we have them in the game. In this article I will briefly show you what was done both in the graphics and code, and what new benefits are there for you as players and modders. I find the 0.15 version of the circuit connector module has following “problems”: [olist]

  • The wire connectors are different from the combinators.
  • Wires sometimes completely overlap, making only one of them properly visible.
  • Modularity - you can somewhat tell what is happening based on the LED states, but it could be much nicer.
  • Connecting a belt always looks weird, while the yellow structure which holds the connector box could be made more specific.
  • Some of the rotations are utterly useless.
  • The Lua definitions are spread over every single entity, so revisiting them all is a big pain.[/olist]

    1. The wire connectors are different from the combinators


    We have been experimenting with the design of how the little pieces which connect to wires should look like. Most of them don’t really make sense in terms of physics, but visually the combinator ones seem to work pretty nicely in my opinion. That, and the circuit connector should be somewhat consistent with the combinators in this regard, so we just used the combinator design from when Albert made the combinators back in 2015 (FFF-88).

    2. Wires sometimes completely overlap


    As we already tried to hint in FFF-202 (but we didn’t have a proper picture for it yet because the hr circuit connector wasn’t in the game yet), when you build entities vertically, they would very often only show one colour of wire.
    To prevent this from happening, I took a pixel grid in Blender and I tried to always have the connectors far away from each other to prevent this from happening. The same issue happens with combinators, but let’s see if we ever have time to change that.

    3. Modularity


    The system of drawing has slightly changed - now when you connect an entity, you can clearly recognize what it is doing and what is it's state. The rule is: Red/Green LED means write mode - generally stopping/starting the entity. Blue LED means reading mode - generally reading chest contents, reading signal colours, and so on.
    If you only connect to the logistic network, even the wire connection points are going to disappear as you can see on the pump above.

    4. Transport belt connectors


    Previously we were using the universal connector on belts, and to support it we made a special layer with a frame to hold it. This just uses another layer and generally looks rather weird.
    We found it better to just make specific sprites for belts, which should integrate nicer and use less layers.

    5. Useless rotations


    If you ever looked at how the circuit connector module spritesheet actually looks, you would have noticed that there are 32 rotations of it. For the first row, which is just flat on the ground, all of the 8 rotations are useful, but when the box starts tilting, the last three are looking away from the camera and are basically impossible to use.
    At the same time, on some entities and in some cases it would be really cool to be able to just put the wire connection points at the opposite side of the box. I put the two things together and made the impossible-to-use rotations just be a flipped version of the useful ones. The picture below is a mockup, the actual spritesheets have separate layers to allow the modularity mentioned above.
    The game does not actually utilize all of the 32 rotations, but it’s easier to have them all for future new entities - importantly also new entities added by mods.

    6. Lua definitions made at each entity


    When the graphics were finished, I was looking at how could I put the connector in the game. We had good experience with generating the Lua code in combinators, and I wanted to make use of some similar system again, because there is just a stupid amount of shiftings and definitions to be made. To get all the shifting values, we are using a very similar system to what was described in FFF-202, special pictures from After Effects processed by python scripts. The only real difference is that now After Effects also has to import spritesheets of our existing entities and align them with the shifting values. Luckily, After Effects supports javascript based expressions which makes this work simpler. var shiftingX = 16; var shiftingY = 8; var finalX = transform.position[0]+ (shiftingX * 2); var finalY = transform.position[1]+ (shiftingY * 2); [finalX, finalY] This simple expression just lets me center the sprite and copy the X and Y shifting values from Lua, instead of having to worry about making calculations all the time, and it’s more readable when re-visiting and checking. With the shifting values ready, the next step is to tell the game to accept them somehow. I wouldn’t dare to try overwriting all of the entries in entities.lua and similar files, simply because it would probably mean massive amount of errors, both by hand or somehow automatically. So instead Michal (Posila) wrote a python script which generates a new circuit connector file where all of the specific definitions are kept, and refactored the entities so that each entity connectible to the circuit network just grabs the values from the master circuit connector file. Hopefully this makes it more maintainable for the future...

    High resolution lamp


    As one of the often used entities in the circuit network, the lamp is getting a high resolution version. The graphics are a work in progress so there will likely be some changes.
    As always let us know what you think, just like you have been in the last 4 years (FFF-1) on our forum. We would like to thank you for all the attention and feedback through all this time, it’s really nice to be able to talk about our work, and sometimes even add something we forgot and you mentioned.


    [ 2017-09-29 14:49:09 CET ] [ Original post ]

  • Factorio 0.15.35 released

    Bugfixes


    • Fixed that after a player reconnected after a desync, while blueprints were uploaded, the game would crash. more
    • Fixed that in certain scenarios, the blueprint library wouldn't synchronise. more
    • Fixed that the server would sometimes quit if a player tried to connect after another player tried to connect unsuccessfully. more
    • Fixed a rare desync related to electric sub networks.
    • Fixed archaic (from 0.12) migration that was supposed to fix rollingStockCounts on rails and it broke it instead.
    • Fixed possible desync when rotating pipe to ground. more
    • Fixed a rare possiblity of internal electric network crash when loading game. more
    • Handle network errors (caused by LavasoftTcpService64.dll corrupting Winsock) gracefully. more

    Scripting


    • Fixed changing force of underground belt entity would cause desync. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-09-28 13:34:16 CET ] [ Original post ]

    Friday Facts #209 - Optimisation is a way of life

    I need to make a confession. I'm addicted. Addicted to optimisation. I earned some money by the game ... you know .. I could just .. I don't know .. play games and ... have some leisure time, but do you know what would be the problem? I would have to think about some Factorio optimisations I wanted to do anyway. When I go to bed in the evening, I think about cache locality and data structures. I dream about ways to reorganize structures to minimize the amount of data needed to be read to perform Factorio logic. When I walk in the park, i visualize the tricks that could be done to decrease data and logic dependencies. This usually only stops when I see how many bugs need to be fixed after release when lot of changes are done.

    Electric network optimisation


    The electric network optimisation for 0.16 was simple in principle. We currently have one continuous buffer of electric connector data stored in the electric network. It needs to be iterated twice (first for calculation, second for power distribution).
    The change was to categorize energy connector data by the prototype:
    It adds another layer of indirection when something needs to be added/removed from the network, but that happens quite rarely. The advantage is, that all the prototype specific values, like inputFlowLimit, outputFlowLimit etc. can be accessed once at the beginning of the processing of one category, which (together with other size squishing), results in a much smaller memory layout, which results in faster iteration of the algorithm. The conclusion is that electric network transfers are more than twice as fast compared to 0.15.

    Smoke optimisation


    Smoke already had the first iteration of optimisation 125 weeks ago. But Factorio is many times faster since than, so smoke started to appear in our profiling again. The problem was that even creating the smoke object and registering it on the map was slowing the game down. The plan was to make something we internally call TrivialSmoke. The Trivial smoke data size is 32 bytes which is quite small compared to the previous "smoke as entity" size of 256 bytes. It contains only the most basic data squashed as much as possible, and it is stored in a continuous piece of memory on the chunk it was created.
    As the updates happen in regular intervals (120 ticks), it is always guaranteed, that the smokes to be updated this tick are at the beginning of the buffer, I don't have to check the rest. The same buffer is used for update and for render, so these objects don't need any other references to it. It is similar to the Chunk update planner mentioned in fff-161, just flattened. The result is, as expected, that the smoke creation/update/removal times were significantly reduced.

    The logistic bots dilemma


    The dilemma is, whether to use similar approach to the logistic bots as for the smoke. This would mean that logistic bots would be created/updated/removed very fast and their memory footprint would decrease a lot, but they wouldn't be regular entities any more. They couldn't be mined (which could be for the better actually), couldn't be attacked or damaged by anything (which again, would be welcomed by some players). I'm quite sure that it shouldn't apply for the construction robots, as they are more related to the fighting part of the game, but logistic robots aren't. The dilemma is, whether changing the game rules like this just for optimisation isn't going too far.

    Running total


    I benchmarked a huge save of Vaclav (https://imgur.com/a/qDDs1), and it can already run 2.4 times faster in 0.16 compared to 0.15 so we met our "2 times faster release" quota, but I'm afraid that this won't stop the addiction.

    Stone path update


    Almost all of the terrain has been updated for 0.16, which includes the high-res update of it. We will certainly cover the terrain/trees/decals improvements in future FFF. Here I would like to present the new version of the stone path terrain made by Ernestas. It is inspired (as many things in Factorio) by the eastern style of pavements, and I'm starting to be a fan of his work.
    As always, let us know your thoughts, ideas and feedback on our forum.


    [ 2017-09-22 19:15:28 CET ] [ Original post ]

    Friday Facts #208 - Tips and tricks improvement

    Hello, it's another Friday, so time for another Friday Facts.

    Lets try to unify the crafting categories


    As we were discussing the GUI/UX rewrite (which is going to be covered in detail in future FFF), we came across the crafting categories implementation. We have 4 in base game, but with few mods, it can go up to 20+ which is quite hard to manage in a GUI that is still practical and looks nice. Making its own sub-category for transport belts and putting them there is (probably) fine, but if it is done this way (5dim code), it only moves the vanilla transports belts there. but if some other mod adds transport belts, they will still stay in the old category, making it all messy. data.raw.item["transport-belt"].subgroup = "transport-belt" data.raw.item["transport-belt"].order = "a" data.raw.item["fast-transport-belt"].subgroup = "transport-belt" data.raw.item["fast-transport-belt"].order = "b" data.raw.item["express-transport-belt"].subgroup = "transport-belt" data.raw.item["express-transport-belt"].order = "c" This is a typical situation, where the fact that our data definition is done in a scripting language can be taken advantage of. We can just replace the previous code by more generic variant. for index, recipe in pairs(data.raw.recipe) do -- Assuming the name of the entity is the same as name of the recipe, it could be solved more precisely if data.raw["transport-belt"][recipe.name] then recipe.subgroup = "transport-belt" end end The code goes through all the recipes and whenever its result is a transport belt, it is moved to the correct category. This way, all the possible other transport belts added by other mods will go there and my change of categories doesn't actually make more problems than it solves. This is a shoutout to the mod devs so they try to be reasonable with the crafting categories, so it doesn't happen that often that -1, -2, -3 is on one place, but -4 is somewhere else, just because it was introduced by a different mod. Either try to keep things in their official categories as long as possible, or recategorize properly.

    Tips and tricks improvement


    The tips and tricks GUI is perhaps one of the greatest sources to teach players about some of the obscure convenience features we have added to the game over the years:
    • Fast replacing furnaces, inserters, assembling machines etc.
    • Copy-pasting entity information, recipes, schedules etc.
    • How to turn on detailed view (alt-mode).
    • The hotkeys for the quickbar.
    • And the rest...
    It is a shame then that this GUI is rarely read by the player, and this is our fault. It is easy to see the main reasons why:
    • It is only shown at the start of a new game, when many of the tips are not relevant.
    • Once it is closed, it cannot be reopened without starting a new game.
    • Many of the tips are outdated, old, or just plain ugly.

    So with this in mind, I set to correcting things as best I could. Since the tips and tricks have been in the game for a very long time, this involved moving some of the information around to make it work in multiplayer, but because they don't affect the gamestate, determinism was not a concern. After adding a hotkey to bring the tips back up, it feels very natural now to hit the hotkey on and off just to quickly check them. Another improvement I made was a button to go backwards through the tips, and to loop once you've reached the last one. Then it comes to the visuals. The biggest flaw is that most of the images are out of date, and taken on differing terrains - many are not even the same size as the others. This not only affects the size of the GUI, but gives the unpolished feel to the whole system. The other issue is the layout of the widgets in the GUI. With an invaluable mock-up from Albert, defining the styles and arranging necessary elements wasn't too much of a struggle. So the main task now is to recapture and go over the images, and recreate them in a consistent visual style.
    After freshening up the current tips, I will feel better about adding more, without the worry that "Nobody will ever read them". No doubt the GUI will still change, especially with the GUI rewrite in the works, so I wouldn't get too attached to the exact way it looks now.

    End of the guide


    Back in 2016 just before Steam launch, we didn't really have a good online guide for the game. We had the wiki but it was somewhat underdeveloped, and not geared towards a new player to the game. So the guide was the perfect resource for us, and it has served our newer players extremely well. Unfortunately in the 18 months since Its introduction, a lot of the materials on the guide have become outdated. It would no doubt be a losing battle to try to keep it updated as we are continually adding and changing things in the game, so we have decided to take down the guide from public access. The wiki has received a lot of care from Gangsir and Bilka, and is a much better resource for players of all skill levels, so it is now our recommended destination. As always, let us know what you think on our forum.


    [ 2017-09-15 18:52:58 CET ] [ Original post ]

    Friday Facts #207 - Lua noise specification

    Hello, it seems the summer heat has finally subsided, and we have not had to run our AC units the whole week. We mentioned earlier we have had Dominik in for a testing week, and we are happy to say that he is quite qualified for a position here, so will be remaining with us. Tom has also joined us, moving here from the Republic of Ireland, and has been getting settled in working through a lot of the small unassigned tasks. It also seems most of us are back from our vacations, so the pace is picking up again. Most of the work this week has been on the unentertaining sepctrum, with a lot of internal reworking and refactoring going on. A lot commits related to fixing our compilation after the move to C++17. Many of the GUI and input action functions were broken (such as rebinding keys, switch map editor tabs, setting combinator filters), so its been a team effort to fix these as they are found. Hopefully not many will slip through the cracks and into release.

    Lua noise specification


    As mentioned in an earlier FFF,one of the planned features for 0.16 is to allow composition of noise functionsfrom Lua code, so that we (and modders) can have more control over how the map is generated.Over the past several weeks I've been getting that workingand playing around with it trying to make a world that has a lot of variationas you explore far away, but is not too crazy near the starting area. Sometimes it can be hard to visualise what effect changing the noise will have on the resulting map. To give a somewhat more intuitive feel to how the 'elevation' of the noise is affected, I added height shading to the preview. While only used in the game to place water, showing it in this way really helps to see the underlying structure of the noise.
    One of the problems I've been tackling is how to allow large bodies of waterwhile ensuring that the player never starts on a tiny island.One way to do this is to add in a web-like structure near the starting area.This can be done by taking some medium-frequency noise with a positive bias(to ensure that there are land bridges to everywhere)but folded back down above a certain elevation to add lakes,subtracting distance from the starting area from that,and then taking the maximum of that and the general world elevation noise. As a simple example, the Lua code to do create such a noise function looks like: data:extend{ { type = "noise-expression", name = "starting-area-webbing", expression = noise.define_noise_function( function(x,y,tile,map) reset_seed(map.seed) local continents = new_basis_noise(x,y,32,1/512) local webbing = noise.ridge(new_basis_noise(x,y,16,1/64), -math.huge, 8) return noise.max(continents, webbing - tile.tier) end) } } The result looks like this in the previewer:

    Mod portal 2.0 progress


    Over the summer, we have had a French student Lucien working with us in the office. As a part of his internship, he was helping us develop the new version of the mod portal. It took a long time, as I (Martin) had many other things to work on, and couldn't fully dedicate myself to finishing this long-overdue project, but we are nearing the end. We're hoping to release the new version this month. Apart from speed and performance improvements, there will probably not be many more changes on release, but we'll start working on new features right away. This new version gives us a much more solid foundation to work from. You can let us know on our Mod portal discussion sub-forum which features/improvements are the most important to you, and there will proobably make a poll later on to see which we should focus on. As always, let us know what you think on our forum.


    [ 2017-09-08 18:05:02 CET ] [ Original post ]

    Friday Facts #206 - Workflow optimisation

    Hello Factorio players, lets start our developer to player interaction right now! :)

    Belt fast replace improvements


    Dominik is our new programmer in for a testing period. He was given the task to add support for fast-replacing splitters and belts in a reasonable way, and he ended up extending the functionality a little. Adding a belt junction:
    Removing it:
    Adding underground part:
    Removing it:
    It is something I wanted in the game for a long time!

    Compile time optimisations - Technical


    Rseding91 explained in the FFF-201 how important it is for us to not only optimize the game for you the players, but also for us, so we can speed up our change->compile->run/test cycle. Step 1 - Hardware When I returned from my holiday this Friday, I noticed that the recompile time of Factorio on debug mode took almost 5 minutes, which is more than I was used to. We checked the CPU temperatures and memory speeds, and they are okay, but the compile time was still double of what others have on similar hardware. It turned out that it is most probably caused by slow SSD speed, which could be caused by writing a huge amount of data when working. From what I found on the internet, the typical SSD write capacity is something around 1TB (EDIT: I meant 1000TB) of data, which is not so hard to approach if one recompilation cycle of Factorio generates 5GB of data. It is quite possible, that the drive just gets slower as it approaches its limit. Actually, the lifespan my specific SSD is typically a year or less. Luckily, our new computers with sweet i9-7900X CPU were ready to be assembled at this time, and I'm planning to get enough memory to compile on ramdisk to prevent this problem in the future. Step 2 - Hardware updated So, after half a day of fiddling, I installed everything on a brand new computer so I could test the compilation speed. Discovering that it still took 2 minutes was not really satisfying. Step 3 - Getting rid of boost Boost is a special kind of demon. It lures you in by giving you all these cool and simple to use features, and then it beats your soul from you by increasing compilation times absurdly. There are two main problems. Problem one is that they don't care much about compile times and two, they want to have everything nice and generic ad absurdum, and they even defend it as the correct style. The result is, that changing boost::mpl::vector66 to std::variant can improve the compile time from 1:44 to 1:20 and getting rid of templates completely by using unions can decrease the compile time to 0:53. I'm talking about changing 2 headers of 2 classes in a project with 3390 files, 410k lines of code and 15Mb of source code. Everything that was compiled to Factorio, GUI, graphics library, networking, entity logic, scripting, modding, logistic system... all these things together took the same time to compile as two instances of boost::mpl::vector. Our current goal is to get rid of the boost library completely. The conclusion is that moving from 5 minutes compilation times to sub 1 minute in one week feels good, and it is worth the trouble to improve it from time to time (Until a better language for our purpose is invented, which Jai could be someday).

    Test runtime optimisations


    Another thing that was done to improve the speed of our change->compile->run/test cycle was the improvement of the automated test run speed. Rseding91 made a great feature that runs the tests in parallel, which is especially useful with our new 20 thread systems. Debug mode Standard: 270.23 seconds. Fork: 45.64 seconds. Difference: 5.92 times faster Release mode Standard: 58.94 seconds. Fork: 17.56 seconds. Difference: 3.35 times faster (limited by slowest suite) Heavy mode Standard: 7456.27 seconds Fork: 877.82 seconds Difference: 8.49 times faster (limited by slowest suite)

    High res pipe entities


    As pipes and pumps are high resolution already, it only makes sense to upgrade the entities that tile with that, such as storage tanks and pumpjacks.
    As always, let us know your thoughts, ideas and feedback on our forum.


    [ 2017-09-02 10:13:35 CET ] [ Original post ]

    Friday Facts #205 - Teaching the things that everybody knows

    Hello, it's vacation season here in the office, with a lot of the team taking some time off. We just released what will probably be the last version of 0.15, so now is the best time for everyone to take a breather.

    Armor & equipment


    I've been working on the next set of mini-tutorial in preparation for 0.16. I recently finished the last logistic bot tutorial, when I pondered what needs to be explained next. My thinking is that the complexities of the game lay in the 'high concept' areas, train systems, circuit network, logistics etc. Everything below this is just so simple and obvious, we can just assume the player will learn it on their own. So with my brainstorming not turning up any good candidates, I asked Jitka (our office administrator) what aspects of the game she struggled with. One thing she mentioned was the whole equipment section of the crafting menu. She said "I don't know what it is, so I have never touched it". It gave me the realisation that to an untrained eye, equipment modules are just random items put in your crafting section. With this new perspective, I started to see the lack of information related to this topic. The most glaring omission is in the item tooltip itself. It doesn't say "I am equipment, put me in armor" or "I am armor which can accept equipment modules". The issue of mods adding equipment grids to cars and trains somewhat complicated the issue, but in a short time Rseding had a working version of the feature running smoothly.

    With this information more clearly available to the player, and the mini-tutorial explaining how all of it works, I am confident that no player will ever see these items and say "I don't know what they do".

    Mod dependencies



    This is another one that is just 'obvious' to us. A dependency with a question mark in orange is optional. What does optional mean? Well its obvious right? Optional means it isn't required to run the mod. Once again, the problem is that we don't communicate any of this to the player, and it isn't so hard to explain:
    Its been quite interesting to look through the game with the lens of "Do we ever explain this?", and it will certainly help me as I write more mini-tutorials on all different aspects of the game. If you have had any of these experiences in the game or know of any of these 'unexplained' areas, please let us know.

    HR radar


    Another dose of high resolution anticipation.
    As always, let us know your thoughts, ideas and feedback on our forum.


    [ 2017-08-25 16:23:19 CET ] [ Original post ]

    Factorio 0.15.34 released

    Bugfixes


    • Fixed that after a player reconnected after a desync, their blueprints would no longer upload. more
    • Fixed that it was possible to modify other players' blueprint libraries. more
    • Fixed a crash when loading a save that was transferring blueprints to a now offline player. more
    • Fixed that the blueprint library would remove duplicate blueprints even though they were in different books. more
    • Fixed bug in GUI that led in freez when lowering replay speed more
    • Disabled possibility to open invalid save/replay by enter key or double click.
    • Fixed rare crash when being disconnected from multiplayer. more
    • Fixed creating map from scenario would copy also system and hidden files from scenario folder. more
    • Fixed threading issue causing random server crashes. more
    • Fixed that if the server was launched with --start-server-load-scenario, the /save command with no name would cause the server to hang. more
    • Fixed --start-server-load-scenario would ignore --map-gen-settings, --map-settings and --preset options. more
    • Fixed disabling shaders would cause crashes. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-08-23 13:05:57 CET ] [ Original post ]

    Friday Facts #204 - Another day, another optimisation

    Hello,as the team is getting slowly bigger and we still don't have any dedicated project manager, we had to start looking for tools to help us manage the team. We are testing software that allows our team members to track time spent on individual tasks, so right now my timer on "Friday facts related work" is running. I hope it to give me better insight into what kind of tasks our time goes to, where are we losing most of it, or what were the people doing when I was not here. People tend to not like these kind of changes, but we just have to admit that we are not the 4 people punk development team working from our living room and we need to invest more time into working efficiently.

    Prefetching (Technical)


    Kovarex already presented a concise summary of the prefetching patch, here is some more background and dirty technical details. I started to look into Factorio performance improvements a while back, more specifically UPS (updates per second) improvements for large bases. It is widely recognized that the UPS are mostly limited by memory performance (more). That is normal - even highly optimized scientific simulation codes are rarely limited by arithmetic instructions. At first, I looked into ways to reduce the size of Entities. Common entity sizes like Inserter (536 bytes) or AssemblingMachine (648 bytes) seem surprisingly large at first. I tried some changes, e.g. moving less frequently accessed data out of the actual entity in a separate object in memory. These changes had significant impact to the code in many files, but just saving a few bytes didn't make a measurable impact to performance. Back to a bit of theory - there are two different ways in which memory can become a bottleneck: bandwidth (the amount of data supplied over time, e.g. 50 GB/s) and latency (the time until a requested piece of data is available, e.g. 50 ns). Comparing the results for different RAM timing settings (CAS latency) shows, that latency has a significant impact. It is important to note, that Factorio is not a homogeneous workload - some parts are still limited by memory bandwidth, others by CPU. Modern CPUs are extremely good at mitigating memory bottlenecks by using caches, speculative execution and prefetchers. However, all active entities are read at every tick of the game. In large factories, this is too much data for caches. Also a virtual function call - such as the update of an entity - cannot be executed speculatively. Prefetchers are a part of the CPU that predicts what memory is going to be accessed soon and transfers it even before it is explicitly loaded. But since the entity update loop iterates over a linked list - the address of the next entity is stored within the entity itself - it is difficult to predict (not impossible). This is where software prefetching comes in - the programmer gives a hint to the CPU what memory is accessed soon. That is what we now do in Factorio: Before an entity is updated, the next entity is already requested so that it can be loaded in the background. The principle also applies to a few other loops over linked lists. The nice thing about this, is that it is an extremely simple and isolated change in the code. The downside is, that you are entering the realm of architecture-specific micro-optimization. If you aren't careful, it can even be bad for performance. A good rule is to never guess about performance - always verify. So I did some tests with different maps and the results were promising. Entities are larger than a single cache line and the pointers point into the middle of the object due to multiple inheritance. Many experiments later, the optimal range showed to be -128 byte to +384 byte (8 cache lines). This coincides with the sizes of typical entities. The prefetching instruction has another parameter determining the cache level used - which again was determined experimentally.
    To get a bit more diversity, the measurements for this chart were done on a different CPU (i7-6700K vs i7-4790K previously), and include some more maps. It showed that the new belt-heavy map got less speedup (+5%) from software prefetching than the others. As a remedy, this map gets a huge boost from the belt optimization before. Other saves got a nice 9-13% speedup. All measurements are averages update times over 3600 ticks, the boxplots show 20 repeated runs. Overall software prefetching is a nice effective micro-optimization with very little code changes, but many measurements to find the right configuration and verify.

    Crafting machine animation optimisation


    The issue is, that crafting machines can have arbitrary count of secondary animations tied to it (rotating fan, liquid in the chemical plants etc.). As each of the animations can have different speed and frame count, we kept positions of all of these animations in dynamically allocated vector and just updated each of these independently whenever the crafting machine was producing. But now, we just have one number representing the overall offset of the animations. We move it depending on the speed of the crafting machine and all the animations calculate their cyclic position depending on the modulo of this value only when we need to actually draw the machine. This means, that this complicated code: [noparse]void CraftingMachine::setupWorkingVisualisationFrames(double performance) { const CraftingMachinePrototype& prototype = *this->getPrototype(); this->frame.move(performance, prototype.animation.getAnimation(this->direction)); if (this->workingVisualisationFrames.empty()) { this->workingVisualisationFrames.resize(prototype.workingVisualisations.size()); for (size_t i = 0; i < this->workingVisualisationFrames.size(); ++i) this->workingVisualisationFrames.randomize(prototype.workingVisualisations.getAnimation(this->direction), this->getMap().getRandomGenerator()); } for (size_t i = 0; i < this->workingVisualisationFrames.size(); ++i) this->workingVisualisationFrames.move(prototype.workingVisualisations.getAnimation(this->direction)); [/noparse] Becomes this simple: void CraftingMachine::setupWorkingVisualisationFrames(double performance) { this->frameReference += performance; this->showWorkingVisualisations = true; } The memory size of crafting machine is decreased and the overall performance of game is improved by additional 2%. Another day, another optimisation :)

    HR Lab


    The weekly dose of update high resolution graphics:
    Related to HR entities, It turned out that our zooming system never showed an exact zoom of 2.0, which would be the 'pixel perfect' zoom level for the HR entities. By changing the zoom rate from 1.1, to the 7th root of 2 (1.104089...), the zoom now increments perfectly from 1.0 to 2.0 in 7 steps. As always, let us know any thoughts or feedback over on our forum.


    [ 2017-08-18 18:16:52 CET ] [ Original post ]

    Friday Facts #203 - Logistic buffer chest

    Further optimisations


    I finished the item stack optimisations mentioned in FFF-198, and was able to do some performance tests. First I tested how many stacks on a big map actually need to use an externally allocated object (Item), and how many of them are plain. On the huge map I tested, it turned out that only 36K out of 1M stacks need the Item object. These were mainly science packs, as they need it for the progress of how used-up they are (and now when I think about it, it could also be omitted by only using the objects for science packs that are partially used up already). Overall factory performance was increased approximately 2% by this. It is nothing huge, but every bit matters. One of the programmer that has read access to the code (Zulan), came up with a pull request that improves performance in Factorio by prefetching memory in the update loops ahead. The problem when normally updating objects is, that CPU asks for memory representing the object. The memory is slow, at least compared to the CPU cache or the CPU speed. The memory transfer speed itself is not that slow, but the waiting (latency) time between ordering and receiving it is. This means, that what very often happens is, that CPU orders data of next entity from the memory, then it waits for quite a long time to get it, and then it does its logic. The memory prefetching partially solves it by doing this:
    • Order data of the next entity from memory (prefetch)
    • Do the logic of the current entity in the meantime
    • Go back to start
    The overall measured performance improvements vary between 6-10%, which is certainly a nice addition.

    Logistic buffer chest


    As flexible and powerful as it is, we have always felt there was one key missing to the puzzle. The main issue is that requester chests cannot provide their items to any other member of the logistics system. Trying to workaround this by putting an inserter to a passive provider, just leads to the robots moving the items in a loop. This is also a nuisance trying to supply construction robots with materials, as they can only collect them from storage or provider chests, and they are only typically located in the main base areas.
    It is easy to design a system to resupply far out areas using trains to directly put items in provider chests, but if they are in the same logistic network we encounter the same loop as before. We were also concerned of people segregating their logistic networks for more control, it seems to us it was a workaround to a problem we should fix. The solution is the buffer chest, which functions as both a requester and passive provider chest.
    You can see the buffer can act as an 'in-between' for storage/provider chests and the requesters. This leads to a solution of the main annoyances we identified. Typically when you set up all the provider chests, they are spread out across your whole factory. When you return to base for a resupply, you end up waiting for a long time while the bots travel from all over the factory with items. By using a buffer chest, you can setup a dedicated 'supply area', where the buffer chest will already contain all the typical items, and the bots can quickly top-up your inventory.
    Another problem is when you have a large perimeter defence, and you want it to be maintained by the construction robots. When the main base is so far away, it can take a long time for robots to arrive with repair packs, so the biters might be able to break through. Using the buffer chest, it will be easy to setup nearby supplies to quickly repair the walls when needed.
    Last, but not least use-case is when you want to dedicate part of your storage for specific things. The reason can be either just OCD, or the fact, that you can make sure that too much coal for example won't make it impossible to store enough of iron ore in your storage system.

    High resolution robots


    Here we present you the regular dose of new entities updated for high resolution for the hopefully fully high-res friendly 0.16 release.
    As always, leave us any feedback or comments on our forum


    [ 2017-08-11 16:59:52 CET ] [ Original post ]

    Factorio 0.15.33 released

    Changes


    • Mod name in mod info pane will no longer be localised. more
    • Optional mod dependencies now show as orange when invalid. more

    Bugfixes


    • Fixed crash when trying to load replay that is not compatible with current version.
    • Fixed ghosts might emit light. more
    • Fixed removing land mines didn't make any sound. more
    • Fixed creating window larger than screen. more
    • Improved performance of rendering uranium ore. more

    Modding


    • Bonus UI now shows additional force modifiers more
    • simple-entity-with-owner (and simple-entity-with-force) now supports apply_runtime_tint in sprite definition.

    Scripting


    • simple-entity-with-owner exposes color property through LuaEntity::color. Set it to {r=0, g=0, b=0, a=0} to use color of entity's force.
    • Fixed LuaEntityPrototype::distribution_effectivity would return value of supply_area_distance instead. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-08-09 16:14:29 CET ] [ Original post ]

    Friday Facts #202 - High res circuit connectors

    I decided to write about the results of the item stack optimisations explained in the FFF-198, so I rushed today to finish its implementation, just to find out that the task affects an even bigger part of the code than I expected, Items are related to many things in Factorio :) After many hours of rewriting and fixing, I can compile it and even start a game, but most of the things are broken. It is quite funny to see some of the basic item interactions to be broken. Now I'm making commits like "Now I can split stacks", "Now I can merge stacks", etc. It reminds me the old days. In conclusion, the details of the optimization will have to wait for next week, and since it is after 10pm, this Friday facts will be somewhat shorter :)

    High res and improved circuit connectors


    I can at least present you the continued work on the updated high resolution graphics. The update of circuit connectors not only provides them in high resolution, but as it is possible to see it in more detail, the graphics can show more accurately what it represents. Specifically, if the connector is only reading the state of the machine (blue LED), controlling its behaviour (red/green LED) or both. You can also clearly see how weird it looks when we combine a low res entity (roboport, chests, liquid tank) with a high res connector, but this is just a temporary state and most of these entities should be high-res compatible when the release is ready.
    You can also notice (on the chests for example), that the green and red connectors are not vertically aligned, which might look slightly weird, but it is on purpose. In the current version (0.15), when two entities are in one column and they are using both the green and red cable, they overlap perfectly so it is impossible to see both of the cables at the same time as shown below.
    Additionally, the green LED in this example doesn't make any sense, as the chest will always have only read mode, which is also addressed in the new graphics. As always, leave us any feedback or comments over on our forum


    [ 2017-08-04 20:24:21 CET ] [ Original post ]

    Factorio 0.15.32 released

    Bugfixes


    • Fixed compatibility problem with several antivirus programs. more
    • Fixed seed in map-gen-settings.json would be ignored when creating map on headless server. more
    • Fixed that connecting to a multiplayer game with a large blueprint library might be difficult. more
    • Fixed that using capsules would open an Entity's GUI when clicked. more
    • Fixed that --window-size=maximized wouldn't work on Linux. more
    • Fixed that changing reactor consumption(production) values through a mod didn't update its production until rebuilt. more
    • Fixed that blueprints would sometimes stop transferring.
    • Fixed crash when opening item/container and at the same time the controller is set to some that doesn't have inventory. more
    • Fixed 3 possible crashes related to getting malformed network packet over the network.
    • Maybe fixed a biter path cache-related crash. more
    • Fixed that bad_alloc and similar low level erros were catched internally, so we couldn't get proper stack trace of those.
    • Limited the size of a train chart tag when the map is zoomed in. more
    • Possible rare crash fix related to building rails and viewing preview of entities right after that. more
    • Limited technology cost multiplier to maximum of 1000. more

    Scripting


    • The log method also specifies the mod that wrote that, not only script file.
    • Added LuaEntityPrototype::distribution_effectivity read.
    • Added LuaEntityPrototype::time_to_live read.
    • Added LuaControl::following_robots read.
    • Added LuaPlayer::pipette_entity().
    • Added LuaEntity::can_be_destroyed().
    • Added script_raised_destroy reserved event ID.
    • Added script_raised_built reserved event ID.
    • Added script_raised_revive reserved event ID.
    • Changed LuaEntity::time_to_live to also work for combat robots.
    • Changed LuaEntityPrototype::fluid_capacity read to also work on fluid-wagon.
    • Changed LuaEntityPrototype::turret_range read returns nil instead of error if not turret.
    • Changed LuaEntity::train to return nil if entity is not rolling stock.
    • Added LuaEntityPrototype::explosion_beam read.
    • Added LuaEntityPrototype::explosion_rotate read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-08-02 12:37:54 CET ] [ Original post ]

    Friday Facts #201 - 0.15 Stable, but not really

    Hello, the 0.15 has been declared stable. Unfortunately we found some smaller problems, so there is going to be at least one bugfix release. One of the problems we discovered yesterday, is a glitch in the blueprint transferring logic that results in the transfers stopping forever when a player that is just transferring his blueprint into the game leaves. I'm quite surprised that I found it out myself when I was testing something else, and we didn't have a single bug report regarding it.

    Blueprint library versus mod issues


    This is a great example to show why complexity of software grows faster than linearly with the amount of features. We have mods and we have the blueprint library. Both systems work when used separately, but new problems come when you use these two features together. The bug report is basically describing that when you have blueprints with modded content, and you switch to vanilla (or different mod setup), all the mod related content in the blueprint library is removed upon opening any game. This makes these blueprints useless if you want go back, enable the mods and use the blueprints again. This is can be very annoying for the player, and after quick a discussion we decided to solve it by having blueprint library separated for every mod configuration and by allowing players to transfer library contents from different mod configurations to the current one on demand. We decided to not push this into 0.15 as we are too afraid to break things now, so it is going to be 0.16 feature.

    Blueprint interaction while being downloaded


    The second major problem with the blueprint library is the UX, especially in multiplayer. When the blueprint/book, is big and is being transferred while the player is already holding it, it can't be moved to inventory/quickbar, and the 'drop here to export to main inventory' button does nothing but print a message to the console. The plan is to make a special item type, that will be basically a promise of blueprint and use it in this case. Once the blueprint transfer into the game is finished, the item will change into the blueprint. When the player related to it will leave, or remove the blueprint from his library, the item will just disappear. It can even have nice info into tooltip about what is going on. This is (obviously) also going to be in 0.16 not 0.15. Generally speaking, the blueprint library is a new thing to Factorio, so there several other UX tweaks and polishes we want to do.

    Rail block visualisation finished


    The rail segment visualisation that I described in FFF 198 is now completed.The main problem I had to solve is how to color the segments to make sure, that two neighbour segments don't have the same color. Some of you probably know, that this is well known thing called graph coloring. For plain graphs (which the rail segments are), it has been proven long time ago, that 4 colors is enough to color every graph, but the proof and algorithm is not simple. But for 6 colors, the algorithm is pretty easy, the only downside is, that it is designed to color the graph as a whole, which is fine when the game is being loaded, but not acceptable when adding a single signal to a huge rail network, I needed something incremental. In the meantime I wanted to test the visualisation graphics proposal from Vaclav, so I made a very simple logic that picks the lowest available color index that is not already taken by neighbour rails to see how it looks. I was surprised to find out that in normal rail system, it doesn't use more than 3 colors most of the time, and it is very rare to see the 5th color . The conclusion is simple, this is good enough. Although it is possible to construct rail system that results in our algorithm putting two of the same colors next to each other, it is not really a problem, as it doesn't break anything, and in a normal game, the chance of it happening is close to 0. The takeaway is that it is important to realize how strict you need to depending on the situation. Here is an example of intersection with a missing signal, how fast can you find it the old way?
    How fast can you find it when you see the visualisation?
    I guess that this topic is closed, the fact that 2-3 colors are used most of the time makes the visualisation not look too colorful and it will help both new players to understand the concept of blocks as well as help experienced players when signalling an intersection to see what is going on at a glance.

    Optimisations


    There's always something else that can be optimized. Last week we purchased some new hardware because I wanted to test if 'throwing money at it' was a viable method of improving compilation times (and the speed at which we can develop/fix things). We purchased a brand new i9-7900X CPU and compatible hardware with great results. After some difficulties getting everything setup it was almost 150% faster than the previous setup I was using. After that significant improvement in compilation times that got me wondering what else I do multiple times per day development wise that I could speed up. That led to game startup time, map loading/saving, and map generation.I grabbed a relatively large save file with a large factory setup (Colonelwill's current map) and set out to get a baseline. The save file is 45.7 MB compressed and 132 MB uncompressed. In 0.15.31 it takes 3.89 seconds to load and 2.46 seconds to save. I think I can safely say that nobody likes waiting for the game to save (myself included); it's distracting and breaks you out of whatever you're currently doing in the game. While working on potential improvements to save time I measured exactly what happens when I tell the game to save and the results gave me a little more appreciation for just how fast saving actually is. Technical/numbers The way saving works in Factorio is through a process called serialization. We go over the entire loaded map beginning to end and write out each piece that's needed to restore the map. Every time something needs to be saved it calls the seralizer method 'write' with the data and how many bytes it should serialize. On the 132 MB of data that makes up the uncompressed map the 'write' method on the seralizer is called 84'272'542 times. Of those 84 million calls to write 99% are < 10 bytes. Data size Write count 0 bytes 51'527 1 bytes 47'267'254 2 bytes 24'264'184 3 bytes 124 4 bytes 11'277'751 5 bytes 791 6 bytes 971 7 bytes 591 8 bytes 1'390'402 9 bytes 870 10+ bytes 18'077 The largest was only 121 bytes (called 84 times). In total 152'472'991 bytes were processed making for an average of 1.8 bytes per call. The entire process completed in 2.46 seconds for an average of 334'257 calls per millisecond. The serializer we use for saving the map uses several memory buffers that it cycles internally as it writes one buffer to disk in parallel with the rest of the map saving logic so there wasn't much performance to gain in this logic. But, seeing the numbers gave me a better picture of just how much work happens when the map is saved. In the end I found a few small things to improve on such that saving the map in 0.16 now only takes 2.25 seconds (a 9% improvement). Not what I hoped for but an improvement is an improvement. Map load time When looking at the time spent loading maps I found that we had a similar memory buffer system to saving but with 1 major difference: when the buffer ran out it would stop and refill the buffer from disk. That was an obvious slow spot with an easy fix: use multiple buffers and load them from disk in parallel with the map deserialization. I also found some inefficiencies in how trains were loaded causing them to run O(Rails * Trains) operations every time the map was loaded which I fixed to just O(Trains). The end result being what took 3.89 seconds to load in 0.15 now takes 2.8 seconds to load in 0.16 (a 28% improvement). Game startup time - Graphics On this new computer with normal graphics quality Factorio takes 9.84 seconds to reach the main menu. I think that's pretty good for a game these days but as we work on Factorio we close and restart the game 100s of times per day. Every time we change something, test a save file from a bug report, or as I was doing: testing out changes to see how they impact performance I have to wait for the game to start and it's wasted time. There's a disabled config option that takes all of the loaded graphics the game uses and packs them into 1 large file that can be read at startup. It mostly helps when you frequently restart the game - which is exactly what we do every day. With that enabled the game launches in 5.31 seconds (a 46% improvement). Game startup time - Mods We don't tend to use mods while we're working on new features so some performance problems related to them go unnoticed. One bug report recently had 111 mods the person was using which exposed a slowdown in processing all of the mods at startup. When mods are loaded we track what a mod changes, to record the history of what mods change what game objects. Originally we did this using the C++ Boost library "property tree" class, but it turned out to be faster to write our own logic using Lua than use the Boost class. Since that change we wrote our own version of the property tree class and in testing it showed to be even faster than doing the logic inside Lua. In 0.15.31 it took 28.72 seconds to process the mods and now in 0.16 it only takes 20.2 seconds (a 29% improvement). Not only does this benefit the players but it helps us because we don't have to spend as much time waiting for the game to load when working on modded bug reports. Game startup time - Sounds With the loading of graphics and mod data no longer being the slowest parts the next thing that started taking the majority time was loading sounds. I realized, after my work on improving map loading, that there wasn't any reason I couldn't just load sounds in parallel with the graphics. It was a 20 minute 'fix' and now by the time graphics are finished loading, sounds have long finished meaning it can proceed straight to the main menu. Game startup time - Conclusion With graphics being loaded from the atlas-cache, mod data processing being almost twice as fast, and sounds loaded in parallel I can now launch the game and be at the main menu ready to play in just 2.962 seconds (a 44% improvement). The change was interesting to get used to over the past week but now when I need to test things in 0.15 I find myself annoyed at how long everything takes compared to the 'new hotness' of 0.16. Map generation - New maps Unless I'm working on some specific save file I generate maps almost as frequently as I restart the game while working on bug fixes/new features. I've never considered generating a new map particularly slow but it never felt fast either. 0.15 already generates the map in the background while the game runs to prevent stuttering while new chunks are generated but the starting area when making a new map is not. I changed it so the starting area would generate in multiple threads if possible (while still maintaining determinism). The end result being: 0.15.31 generates a new map in 1.83 seconds and 0.16 generates a new map in 0.8 seconds (a 56% improvement). Conclusion Overall the start-game/load/generate game experience is measurably faster. Most importantly it feels noticeably faster, and makes for a better overall experience when we don't have to wait for things. With the belt optimizations and everything mentioned here, 0.16 is already promising to improve performance in multiple areas and full 0.16 development hasn't even begun, with other ideas we've talked about in previous Friday Facts still to be implemented promising even better performance. As always, leave us any feedback or comments over on our forum


    [ 2017-07-28 14:57:46 CET ] [ Original post ]

    Factorio version 0.15 - Now stable


    We have been working to fix all the bugs and polish our latest release 0.15 for the last 3 months, and we feel now is the time to mark it as stable. This means we are happy with how the game is performing, and that there are no major game-breaking or save-corrupting issues. 0.15 is one of the biggest updates we have ever developed, with a large number of major and minor additions, alongside countless other changes. Note: Due to a change in the size of boilers, previous steam engine power stations will be non-functional, and will need repair.

    Uranium & Nuclear power


    This new resource to mine and refine opens up a new branch of possibilities to players, from highly compact and efficient power stations, to deadly atomic bombs. Processing this new resource comes with its own challenges, the new centrifuge machine and enrichment recipes, and even the mining of this valuable ore is not simple.

    Research revolution & Infinite science


    The introduction of 3 new science packs - Military, Production and High-tech - drastically change the progression and feel of the game. The new recipes provide a steady increase in complexity, as well as acting as better stepping stones to build a factory around. Introduced alongside these changes is the new infinite technologies. These are long term improvements that take a greater and greater sink of science to unlock. They offer bonuses such as Worker robot speed, Turret damage, Mining productivity and much more. However they require 'Space science packs', obtained only by sending satellites to space on a rocket.

    High-resolution sprites


    This update adds the first batch of high-resolution sprites to the game, with the majority of necessary factory entities covered: Transport belts, Inserters, Assembling machines, Mining drills, Pipes, Trains, and so on. Not all of the game entities are available in high-resolution as of yet, but work is still in-progress to update the whole game to this new quality. Set sprite resolution to ‘High’ in the graphics options to enable high-res sprites

    Blueprint library


    A new system for storing and managing your in-game blueprints. Blueprints can be transferred easily from your player inventory into the library, and can then be accessed from another map on the same system. You can also share and see other players blueprints in multiplayer, just by joining a server. Sharing with players outside of the game has also been made a lot more simple, with the ability to export and import whole blueprints and blueprint books as lines of text.

    Much, much more...


    These are only the major features, and there are countless other additions and changes to the game to discover: Wave defense and PvP scenarios, new oil processing recipes, programmable speakers, new logistic network overview, mini-tutorials... We have a plan moving forward to update and finish the game, you can check our roadmap on our forum.


    [ 2017-07-27 15:52:56 CET ] [ Original post ]

    Factorio 0.15.31 released

    Small features


    • Train stop text angle is now configurable in the graphics settings. Default value is 30 degrees.

    Bugfixes


    • Fixed that resizing the game window was very slow on Linux. more
    • Fixed rendering of turret ranges on map. more
    • Fixed "Disable listed mods" in minimal mode would disable all mods including Base if mod-list.json didn't exist. more
    • Fixed that pressing escape in the "mods error" GUI would close it and leave the game in a broken state. more
    • Fixed possible crash when loading game. more
    • Car and Tank now make a sound when deconstructed. more
    • Fixed that using the color command with no arguments would set your color to black.
    • Fixed a crash when deleting a blueprint book while the label is being edited in the blueprint library. more
    • Fixed crash when closing the game in the Generate Map GUI. more
    • Fixed that the generate map GUI would show incorrect values for some of the enemy expansion settings in some cases. more
    • Fixed that some blueprints would always have to be reuploaded after connecting to a server, even if they weren't changed. more
    • Fixed that the map seed field wouldn't be used when given in a map-gen-settings.json file through the command line. more
    • Fixed that missing controls in "autoplace_controls" for map gen settings would get filled with default values instead of disabling unlisted controls.
    • Fixed that blueprints would stop transferring if the game was loaded from a map that included some transfers in progress. more
    • Fixed missing font for Thai language.
    • Changed the hazard concrete/concrete tile transition so it behaves predictively.

    Modding


    • Fixed layered icons would render incorrectly in some cases. more

    Scripting


    • Fixed a crash when using LuaPlayer::disable_all_prototypes() and opening the technology GUI. more
    • Fixed that research bonus could be set to negative. more
    • Fixed that items in the character trash slots would get lost on reducing inventory size instead of spilling the items on the ground. more
    • Fixed validation for pickup_position and drop_position. more
    • Exposed internal buffer of fluid turret to Lua as its last fluidbox.
    • Added LuaEntityPrototype::fluid_capacity read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-07-25 17:15:40 CET ] [ Original post ]

    Friday Facts #200 - Plans for 0.16


    Hello, I can't believe that we have been able to produce a post every Friday for 200 weeks without missing a single one. To be honest I'm not sure if this isn't the right time to pause for a while, to avoid being this kind of show that gets worse and worse over time until it is so bad that you want to take your intestines and strangle yourself with them. But people in the office convinced me with arguments like "FFF is the only good thing we have", so we probably have to continue for a little longer.

    0.16 plan


    Our 0.16 trello card list is long, probably too long, it contains 80 cards. Many of them have a similar history as this one:
    The main reason of showing this is, that that it is almost certain, that some of these tasks will be pushed again to next version, or away completely. It depends how fast will the work on the more important things progress. The bigger things are:
    • Artillery train
    • GUI/UX improvements
    • Mod portal improvement (rewrite)
    • Map generation improvement (related to the updated high res terrains and decoratives)
    Then there are optimisations, we want to tackle mainly these:
    • Train pathfinding and collision checking optimisations
    • Additional smoke related optimisations
    • Lamp related optimisations
    • Item stack optimisation
    • Optimisation of electric network update logic
    • Optimisation of logistic robot movement
    • Group multiple item icons to one sprite in order to optimize rendering of saturated belts
    There are overall tweaks planned like:
    • Find a way to show connected walls + pipes in a blueprint
    • Confirm blueprint deletion
    • Fluid squashing in pipes
    • Map interaction improvements
    And there are these semi-bugs or small things like:
    • Train block its own path with chain signals
    • Make programmable speaker 'Global playback' only apply for people on that force
    • Electric network UI weird with lots of accumulators.
    Lets hope we can finish at least half of the stuff we plan for 0.16.

    Map generation


    The current terrain generation tends to make a world that looks the same everywhere.With the goal of making exploration more rewarding we've been working on a branch called "mapgen-fixes",which introduces some new biomes, new decoratives, and changes to the way things are distributed.I've been tasked with fixing up the obviously screwy parts(next on the to-do list is to deal with an overabundance of biters)so that this can finally get merged to master and others can start testing and giving their feedback. On the one hand this kind of work is fun because you have a bit of artistic freedom.There is no 'right answer' to what the Factorio world should look like,so I can play with settings and try to create a result that I think is interesting.On the other hand, not having a 'right answer' means you can't just write a unit test to tell if your job is done.I needed a way to look at results from the map generator and compare changes across versions that would be more efficient and easier to automate than loading up the entire game and poking around in the map editor, waiting for chunks to load,and then trying to remember what it looked like before and asking myself if this is better or worse. So I created a map preview generator. Map Preview Generator In the interest of being able to compare against maps generated with the current versions of Factorio,I got the map preview generator merged early. In fact it's already available on 0.15;you can use it from the command-line like so (adjust path to Factorio binary as needed): bin/x64/factorio --generate-map-preview=output-name.png --map-gen-seed=1230 --map-preview-scale=4
    The above map is 900x900 pixels and has a resolution of 4 meters per pixel, so is 3.6km on a side.To give some sense of scale, a medium-sized factory with mining outposts could easily extend to the edge,but to cover the entire area would be rather impressive. If you make a very zoomed-out map (scale=32 is the maximum supported for 0.15.x)you may notice that it takes a long time to generate the preview.On 0.16 this will have been taken care of by refactoring the terrain generation system to operate at arbitrary scales instead of always generating 32x32-tile chunks.To understand why this works, you need to understand that map generation is done in 2 phases:
    • Calculating the value of several variables (elevation, temperature, humidity, and a few others) for every point on the map. This is done by sampling a coherent noise function (whose basis is similar but not identical to Perlin noise). The value at each point can be calculated solely based on the point's coordinates and the map seed, making this part 'embarassingly parallelizable' and easy to do at any scale (and with a bit of further refactoring, by arbitrary transformations of the inputs).
    • One chunk at a time, 'correcting' the results of the first step, making sure entities don't overlap, replacing combinations of tiles that we don't have good transition graphics for, etc. This is where we enforce that the only thing that can be adjacent to water is grass, because that's the only transition we have graphics for (which happens to be something the art guys are working to rectify).
    For the sake of making the map preview generator fast and simple,only the first step is done.This is a good enough approximation for my purposes,though if you look closely you may notice that shorelines are off by a tile or two in some places. Programmable Noise One of the things that I disliked about how Factorio's map generation works even before I was hired to improve it, was that once you've expanded your base to a certain size,exploration of the map ceases to be interesting.At an extreme scale this uniformity is exceedingly obvious,but it is also apparent at realistic factory scales.There are no especially large lakes to work your way around,and different parts of the map don't really have any unique character. Take for instance this super zoomed-out map (32 tiles per pixel):
    In part, this is due to the underlying noise functions we use not being very flexible.The function to calculate elevation, for example,is defined by a very small number of variables, including seed,number of octaves,and persistence.Persistence itself is varied over the map so that in some areas you get smooth coastlines and in others very noisy ones.This simple specification does a pretty good job of generating random-looking worlds,but it doesn't give as much control as I would like in order to make different parts of the world look different. In order to efficiently calculate terrain,a lot of the low-level code is dedicated to caching noise values and vectorizing calculations on them.This is great, but means the high-level logic for how noise is generated is rather buried in a lot of implementation details,and is therefore difficult to reason about and even harder to change.But abstractly, the noise function is just a functional program that adds and multiplies values from the basis function (at different scales) together.In order to make this logic more obvious I've created an assembly-like language for specifying the steps to produce noise.e.g. Take basis noise at a certain scale, divide it by persistence, add in basis noise at another scale, and so on.This approach is super flexible, but the assembly language is not very nice to read or write.A longer-term solution will be to allow building noise functions from Lua code,which will have the side-effect of making the system hackable by modders. Abstracting high-level aspects of terrain generation out of the C++ code opens up a lot of possibilities.Some ideas:
    • Larger scale features that are modulated by distance so that the starting area remains relatively flat and predictable, but you find seas and larger continents far away.
    • 'Ridge' some large-scale noise to produce linear features like mountain ranges or rivers.
    • Altering the input to some noise layers with the output of another noise function. This can warp landforms in a way that looks a bit like the result of plate tectonics.
    Related to this, we are also working to make the world seem a bit less flat, but that is probably better left for another FFF. As always, leave us any feedback or comments over on our forum


    [ 2017-07-21 16:51:23 CET ] [ Original post ]

    Friday Facts #199 - The story of tile transitions

    Hello, version 0.15.30 was released today, and we consider it to be our first 0.15 stable version candidate, as long as no other big bugs appear, we will have 0.15 stable in a week.As the teasing never ends, it is time to show some ongoing work on 0.16 already.

    Transport belt optimisations


    The transport belt optimisations explained in FFF #176 are now merged in our 0.16 developer branch. I tested it on a megabase factory and the improvement was quite noticeable. The UPS of the whole factory was increased from 25 to 38, the belt update itself runs 5 times faster now. I hope that we can make the game run 2 times faster again before 0.16 is out :)

    Water - land transition study


    There is a basic problem with the way grass and water terrain interact in Factorio. The first one is related to the fact that the transition is on the tile of the grass. This means that the whole transition is considered to be a grass tile, which leads to weird looking things like this:
    The solution is quite simple, we will just define that the transition is drawn on the water tile instead, something like this:
    It will make structures like this impossible:
    as the minimum width of one tile of land will make this shape:
    This is simple so far, but it creates new problem, as suddenly we need to solve situations like this:
    it looks like this in 0.15:
    but in next version, we would need to have graphics like this:
    Note, that this is just one combination, we would need all the other shapes like "O", "U", "L", and mainly the graphics of the transition suddenly wouldn't have the space of the whole tile, as a possible transition to another terrain can be on the other side. The solution of the problem is being investigated now by making some graphical experiments, but the possible solutions we see now is:
    • Just make the transition smaller to make it work.
    • Make 2-3 layers of the transition, so they can be combined together nicely.
    • Use our 'tile correction logic' that we hate so much, which would just make this configuration impossible to exist.

    The second part of the interview


    As some people requested it, we made subtitles of the second part of the interview with me. It is more focused on the technical part of Factorio which might not be entertaining for so many people, but some might still find it interesting. As always, let us know if you have any thoughts or feedback on our Forum.


    [ 2017-07-14 18:48:22 CET ] [ Original post ]

    Factorio 0.15.30 released

    Bugfixes


    • Fixed crash related to empty player blueprint shelf. more
    • Fixed crash related to handling focused state of widgets.
    • Fixed possible crash when using font with size 0. more
    • Fixed focus error preventing to access GUI when the game is paused in multiplayer.
    • Fixed a crash when the map can't be saved to disk due to permission errors when joining MP games. more

    Modding


    • Added optional "hide_resistances" to entity prototype to control whether resistances should be hidden in description for friendly forces. Default is true.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-07-14 16:38:37 CET ] [ Original post ]

    Factorio 0.15.29 released

    Changes


    • Underground pipes will no longer connect if there is candidate ghost underground pipe between them.
    • Command line option --window-size can be also used to start the game in maximized mode when used as --window-size=maximized
    • The library no longer shows unavailable blueprints of off-line players, since there is nothing that can be done with them.

    Bugfixes


    • Fixed that the edit field of a blueprint book in the shared pane would get reset every time crafting finished. more
    • Fixed that setting visibility to false on modded GUI elements while a text field had focus would keep blocking normal input. more
    • Fixed a performance problem when having the blueprint library GUI open while robots add/remove large amounts of items from the character. more
    • Fixed that walls and pipes built from blueprints could mark trees/rocks for deconstruction by mistake in some instances. more
    • Fixed entities with force color (turrets, gates, ...) would be drawn black in blueprint preview.
    • Fixed false positive in game state corruption detection logic. more
    • Fixed pipette tool would pick diagonal rail with wrong direction. more
    • Fixed migrating save from level 4 of New Hope campaign would disable Plane recipe. more
    • Fixed that the blueprint library wouldn't close when Q is pressed and bound to the Close Window action. more
    • Fixed that blueprints would stop transferring if the game was saved whilst some transfers were in progress and then reloaded from this save. more
    • Fixed error with modal focus related to having blueprint error message and removed content message at the same time.
    • Fixed server wouldn't close and delete a temporary save file made for a client that disconnected before the server finished saving. more
    • Fixed that standing on belts facing each other between two chunks would cause the player actions to run at double speed.
    • Fixed that in an artificial test-case, two blueprints couldn't in the library at the same time. more
    • The Pipette tool will now copy the rotations of vehicles and trains. more
    • Fixed that making blueprints of ghost tiles on top of real tiles would have seemingly "random" results in the blueprint. more
    • Possible fix of the double "Communication with server failed" error. more
    • Fixed entities to be built wouldn't get rendered in some places when hovering over transparent GUI elements in the map editor. more

    Modding


    • Added optional "render_not_in_network_icon" for logistic container prototypes defaulting to true.
    • Fixed empty sprite path would cause game to crash instead of entering minimal mode. more

    Scripting


    • Added LuaItemStack::swap_stack().
    • Added on_player_removed event.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-07-13 19:42:11 CET ] [ Original post ]

    Friday Facts #198 - Rail segment visualisation

    Hello, after weeks and weeks of going through bug reports and fixing stuff (after all 0.15 was one of our biggest releases), it seems that we are approaching the end of 0.15 stabilisation. The (wishful) plan is to have a stable candidate for 0.15 next week. Sadly, this will change our attention to just different category of bugs: Those that we plan to fix for the 0.16 as they are not so critical and the changes required to fix them are too big to be done in 0.15 at this point.

    Blueprint library trouble


    We had trouble with the blueprint library, mainly the blueprint duplication problems. Let me explain how it works internally. For performance reasons, the blueprint library generates and stores CRC of each blueprint. This can be used to quickly detect a duplicate blueprint when merging player blueprint libraries and blueprints stored in a save. For some reason, this wasn't working perfectly, as a lot of players were reporting that blueprints are somewhat being duplicated in the library. We assumed, that the error is in the CRC generation from the blueprint entities. That some property of an entity in the blueprint isn't initialized properly, so the CRC would be different for 2 blueprints that are the same. After some digging, we discovered what is wrong: CrcWriteStream* crcWriter = new CrcWriteStream(); MapSerialiser mapSerialiser(crcWriter); this->save(mapSerialiser); this->crc = crcWriter->checksum(); The way it works is, that the blueprint is saved as it would be normally saved, but instead the data goes into a CRC engine. The problem is, that our MapSerialiser writes current output map version automatically in a constructor. This means, that whenever we changed version of factorio, which is every release at least, the CRC values of the blueprints changed, and they were suddenly considered to be different. It was quite hard to reproduce because of this. Anyway, forcing the serialiser to not write the map version to the output in this case fixed this issue. We were also wondering how big is the chance, that 2 blueprints in one blueprint library will have the same CRC. The CRC is 32 bit, so there are 2^32 combinations. If we take into account 1 million players, and assume that each of them is having 20 blueprints in their library and all of the blueprints are random, the chance that it happens at least once is 9%. (You can try to calculate it yourself if you like math). Lets wait if it happens or not :)

    Item stack optimisation


    One of our plans for 0.16 is the optimisation of the internal ItemStack representation. The current data representation of an item stack is like this. struct ItemStack { ItemCountType count; Item* item; // dynamically allocated classed based on the item type }; The Item needs to be a pointer as different kind of items have different properties and can hold different kind of data:
    This representation is nice and simple, but performance wise, it is bad, as whenever the ItemStack is accessed, it needs to access different part of memory to know the ID or any other information about the item as it is in the dynamically allocated part. When the item is transferred from one place to another, the dynamically allocated pointer can be transferred as well, but in cases when the stack needs to be split (which is happening almost always with stack inserter for example), a new copy of the dynamically allocated class Item needs to be created, which is generally slow as well. To solve this, we can take into account the fact that vast majority of items in the factory are simple items (ore, plates etc.). We will simply just store the basic item data directly in the ItemStack, so it looks like this: struct ItemStack { ItemCountType count; ItemID id; Item* item; // null unless the item needs special data (blueprint, armor etc...) }; Now, in the vast majority of cases, the ItemStack is simple and flat, so any operation with it will be much faster. It is possible that this change might improve the performance, but until we actually implement it and test it, we will never know.

    Rail block visualisation


    While testing our tutorial sample, which focuses mainly on rails and signals, people discovered that we have a debug visualisation called "show-rail-blocks", which looks like this when active:
    The people were commenting, that once they used that, they were able to understand the way signals work almost instantly. The problem is, that debug options are generally not intended to be used in normal game, as the way these are generated is slowing the render a lot and the looks of it is far from production quality. But it gave us an idea, that we should probably provide this visualisation in game properly. We are experimenting with the way it should look, but it might be something conceptually similar to this:
    The first problem is, that using colors is very practical way to indicate which rails are connected into one segment, but it also makes the game look too much like a circus. We shall see what can we do if we use different than the RGB colors for it. Another problem is the question, when exactly should it be shown, our first guess is to show it whenever building rails or rail signals, but the problem is, that the amount of indications you see when building rail signals is starting to be quite too high:
    • The new rail segment
    • Possible signal positions
    • Positions of train vehicles
    • Direction of the train that will approach the signal
    • Count of signals in the cursor
    • The cursor to be built
    Which results in a bit of a messy composition:
    So the final result is subject to our experiments, I just wanted to show you the process. As always, let us know if you have any thoughts or feedback on our Forum.


    [ 2017-07-07 17:12:33 CET ] [ Original post ]

    Factorio 0.15.28 released

    Balancing


    • Reduced time needed for an unit of Automation 2 research from 15 to 5 seconds to compensate for previous change of science packs requirements.

    Minor features


    • Added --window-size launch option. For example --window-size=1680x1050 more
    • Damaging a tree with impact or physical damage generates some leaves.
    • Warning icon for logistic chests that are not in a reach of roboport.
    • Train stop names are rendered at 45 degrees to better show names.

    Bugfixes


    • Fixed that ghosts would stay over entities after deconstruction was canceled. more
    • Fixed that the controls menu wouldn't use a fixed common width between controls sections.
    • Inserter researches now require equal ratios of science pack types.
    • Fixed that transferring blueprints from the library could make the headless server crash. more
    • Fixed that blueprints could be duplicated when moving to a new version. more
    • Fixed progress bar not showing in the entity info panel if the text was too long. more
    • Fixed (at least one of the cases) of crashes related to not being able to connect to auth server while joining game. more
    • Fixed, possible crash related to changed bounding box of entity by a mod. When the mod is removed (added) the corner of the entity can occupy chunk that doesn't exist yet which would cause a loading error. more
    • Fixed that mining sounds and the leaves effect weren't present when mining tree from a car. more
    • Fixed possible crash when removing modded rails during save migration. more

    Modding


    • Mod hotkeys are arranged per-mod.
    • Disallowed defining different rail categories for this moment as having more than one will never work properly until we spent some non-trivial time with that, which is not a priority now.

    Scripting


    • Fixed that item-with-inventory filters wouldn't be preserved when cloned through the Lua API. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-07-06 16:49:03 CET ] [ Original post ]

    Factorio 0.15.27 released

    Balancing


    • Speed and efficiency module 3 technology now requires high tech science packs instead of production science packs, so that working towards power armor mk2 does not require production science packs. This makes the branching between high tech and production science packs more meaningful.
    • All researches now require equal ratios of science pack types. This reduces the cost of some researches.

    Bugfixes


    • Fixed manually inserting items into the blueprint book would disconnect you in multiplayer. more
    • Fixed a crash when clicking an alert the same tick the game is loaded. more
    • Fixed a crash when saving screenshot failed. more
    • Fixed that trains could stop in the middle of chain signal blocks in some specific setups causing deadlocks. more
    • Fixed that large drop-down widgets would render off the bottom of the screen in some cases. more

    Modding


    • Added "render_layer" property to car prototype definition.

    Scripting


    • Fixed that calling LuaForce::chart(...) would try to chart chunks outside the map limits. more
    • Fixed that LuaPlayer::unlock_achievement() would keep showing the notification after the achievement was unlocked. more
    • Fixed that LuaItemStack::create_blueprint didn't behave the same way as normal blueprint creation in regards to ghost tiles. more
    • Fixed that LuaEntity::selected_gun_index write was 0-based. more
    • Fixed that mods could do remote calls outside of events when the game isn't in a valid state. more
    • Fixed that a time_before_removed of 0 on a corpse entity could crash the game in some instances. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-07-03 17:15:52 CET ] [ Original post ]

    Friday Facts #197 - Chugging along

    Hello, not much at all has happened this week. It has been rather quiet with the Art department out of office the last few days. However there has been some additional success on our recruitment drive, so there will be an additional 3-4 bodies (live) in the office within the next month.

    Almost stable 0.15


    I was surprised this week when I saw on our forum that we are down to only a single page on our bug forum. Of course this is only half the story, as we still have whole other page in 'Assigned', as well as many which may be moved from pending - but at last it is feeling under control. We hoped that the release on Thursday would be our stable candidate, but due to some introduced bugs, we have had to do some additional releases.

    The Gui is not so simple


    When development on Factorio started, a lot of thought went into the design and implementation of the entities, prototypes, and other key elements of the game. Always the GUI code was written with "Its just GUI, it is not so hard..." as the mindset. The following picture has been generated by doxygen, which shows all the class inheritance of the GUI code.
    As you see, over the time it has grown to be quite a large and complex area of the project. For our next development, we would definitely like to take more time in the beginning to think about our GUI system. Recently there has been more discussion in the office about the GUI, and the problems inherent with it. For 0.16 Twinsen has assigned himself a lot of these 'Fix the GUI' tasks, so no doubt there will be some interesting FFF material from him coming soon.

    Community spotlight


    A while ago there was quite some craze about 'Micro-factories' by players, to fit some production setup in as small an area as possible. The bar has been set very high by this recent creation by Dave McW. By using the Recursive blueprints mod, he has managed to program a complete science production facility in only a 9x14 area. https://youtu.be/U-qs_Kscrfw So if you have any comments or feedback for us, please let us know over on our forum.


    [ 2017-06-30 18:21:49 CET ] [ Original post ]

    Factorio 0.15.25 released

    Bugfixes


    • Fixed that energy shields would charge faster than normal when the generators couldn't provide full power and there was a bettery with available energy in the grid. more
    • Fixed crash when making blueprint from power switch ghost.
    • Fixed a desync when loading save files from different game versions. more
    • Fixed that the map gen presets listbox wouldn't respond to mouse clicks. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-29 17:49:46 CET ] [ Original post ]

    Factorio 0.15.24 released

    Minor features


    • Power switch connections are stored in the blueprint.

    Changes


    • The F1-F12 debug hotkeys can now be reassigned.
    • Disabled pumps don't block other pumps from connecting to fluid wagon anymore. more
    • Pump can connect to fluid tank that is slightly rotated, but only to tanks that are standing on straight rails.
    • Blueprints in the library no longer transfer automatically when a player joins. Instead, they are transferred on-demand.
    • Admins are allowed to modify other players' blueprints in the library, including deleting them.
    • Changed default keybind for toggle filters on macOS to Command + Right Click more

    Bugfixes


    • Fixed Infoboxes sometimes going to the center of the screen on scale change or display size change. more
    • Fixed the direction of underground belts/pipes wouldn't get detected correctly when using the pipette tool in some cases. more
    • Fixed that accumulators had two energy bars and one of these was showing incorrect value. more
    • Fixed that Copy paste couldn't be used in the numeric edit box.
    • Fixed that the recipe tooltip would resize/change every time something was crafted. more
    • Fixed burner inserter reading signal pulses twice more
    • Fixed electric buffer error that could happen when updating save to newer factorio version or changing mods. more
    • Fixed that failing to mine an entity wouldn't try to transfer all items in the entity. more
    • Fixed locomotive could snap to train stop after it was attached to an existing train. more
    • Fixed that the item counts when making blueprints or deconstructing things would render off-screen. more
    • Fixed impossible research tasks in team production challenge. more
    • Fixed that the blueprint library GUI wouldn't restore scrollbar position when moving in or out of a book. more
    • Fixed that setting inserter filters wouldn't update the last-user. more
    • Fixed that fluid would not flow through circuit network disabled mining drills. more
    • Fixed a crash when exiting multiplayer due to a script error while hosting a public game locally. more
    • Fixed pump would not connect to last tile of a train in some cases. more

    Modding


    • Changed the format for localised mod name and description.
    • Fixed that assembling machines using the heat energy source type would go inactive when out of power and stay inactive. more
    • Limited map gen presets pollution diffusion and dissipation rate values to prevent never-ending pollution bloating map sizes by mistake. more
    • Removed CustomInputPrototype consuming types "all" and "script-only".
    • entity-with-owner now supports variation in blueprints.

    Scripting


    • Fixed that marking an entity for deconstruction through script wouldn't fire the event. more
    • Fixed that level based research wouldn't fire the research-finished event in some cases. more
    • Fixed that several of the drop-down related methods for LuaGuiElement were 0-based.
    • Added a global Lua function "table_size" which will quickly compute the number of values in any lua table (not to be confused with the # operator).
    • Added LuaGuiElement::remove_item for drop-down type elements.
    • Added LuaSurface::clear_pollution().
    • Added events on_console_chat and on_console_command.
    • Added LuaEntityPrototype::production read.
    • Added LuaControl::mine_tile().
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-29 11:16:59 CET ] [ Original post ]

    Friday Facts #196 - Back on track

    Hello, after a lot of planning and preparation, the party on Saturday went very well. We really enjoyed spending time with some of our fans, and it has definitely sharpened our motivation to do right by our community and make the game as great as possible. With this festivity behind us, we started this week with some renewed focus.

    0.15 Stabilization push


    These last few days we have made a larger push to handle all the 0.15.x bugs reports on the forum, our current estimate is that we will have a stable release within a few weeks. As the player base has grown so has the number of bugs found - things which we haven't touched for quite some time end up being broken in interesting or weird ways. Most of the time the fixes are simple, but they can have unforeseen consequences that show up quickly with the number of daily active players. We do our best to test that we don't break anything with a bug fix - and write tests when it makes sense. However sometimes this isn't enough, and we happen to get something like this recent bug introduced in 0.15.22 and fixed in 0.15.23: As of 0.15.22 modded GUI elements are marked per-element with which mod created them so when the mod is no longer active they can be automatically removed. The logic was simple: store a mapping of the mod name to the elements it owns. On load if the mod isn't active or doesn't exist, all the elements that it owned are removed. It was tested through save/load and through mod removal, and the system worked great. Except it didn't. Almost as soon as 0.15.22 was released, someone reported a problem with losing modded GUI elements through save/load. It turned out that due to how we store mod names in the game ("mod-" + mod-name), some logic wasn't working correctly. If the mod added between 4 and the length of the mods name + 4 GUI elements, it would break and falsely detect the mod as removed when loaded. If the mod added less than 4 or more than the mods name + 4 GUI elements it worked just fine. We just happened to test a mod that only added 1 GUI element so all the testing worked perfectly.

    Wireshark dissector for Factorio - quick and dirty (Technical)


    A couple of weeks ago I joined a Factorio MMO event from KatherineOfSky. In the event, all players were invited to join the server. But as we were reaching about 60 players, people were starting to get dropped and they were unable to connect back. It looked exactly like a network bandwidth problem so my first thought was "well, get a better server before hosting an MMO event". But I started looking at the traffic on my computer and there was some unusually high bandwidth being used, especially during connection. Later I was shown that with about 60 online players and no one downloading the map, the server was uploading game traffic at up to 90 MB/s (yes megabytes). So I started Wireshark, my favorite and I believe the best tool for inspecting network packets. I captured the game traffic and started to look around. I could see that there was a very large amount of packets but since everything was binary data, interpreting the packets was not easy. It took me 10 minutes just to decode a few fields of one packet. It was hard to know what was being sent that is so big. So since I like Wireshark so much, I decided to extend it so it can interpret Factorio packets. Factorio's network packets are extremely complex. We have 175 InputAction types(e.g. StartWalking, CursorTransfer, EditTrainSchedule, ChangeArithmeticCombinatorParameters), 22 SynchronizerActions (e.g. MapReadyForDownload, ChangeLatency), 17 Network Message types(e.g ConnectionRequest, ServerToClientHeartbeat, MapTransferBlock) all of these each with possibly tens of fields, plus many more intermediate data types that hold all of these together. Add some more logic such as custom packet fragmentation, It was clear that I could not simply write a packet interpreter from scratch, for example using Wireshark's Lua api. I would have to reuse Factorio's code as much as possible in order to save time. Part of the team, including me, thought that it might not even be worth spending time on making this tool, especially since in the meantime we found out what was causing the large bandwidth problems. That meant that I would either have to stop or make the tool as quickly as possible.I choose to try and make the tool as fast as possible. In order to make a C/C++ plug-in for wireshark, I had to install and setup the entire wireshark build environment. Meanwhile Factorio is built using FASTBuild. We had to somehow bring these together. The solutions we were thinking of were:
    • Build everything in wireshark's build environment. This meant adding only the relevant networking classes from Factorio into Wireshark's project. Some would say this would be the 'proper' way to do it. Unfortunately everything in Factorio is tightly coupled. Some networking classes access entities, or prototypes or graphics or GUI. This means I would have to go through hundreds of classes and manually remove any code and includes that are not related to networking. Not to mention I would then have to make then build correctly in a different build environment. While this would be the 'proper' solution it would take a very long time and it would be hard to maintain.
    • Build Wireshark in Factorio's build environment. Wireshark's build is very complex. It has 424 CMakeLists/Makefile files totaling 5086 lines. There would be no way I would make that build correctly in our environment using FASTBuild.
    • Build Wireshark with a small interface in it's own environment and have it link to Factorio's library which is built in FASTBuild. This meant that that the Wireshark plugin would include almost the entire Factorio code including gui, graphics, sound, lua, etc. It's not what some people would call proper, but it would work. One day of tweaking compiler flags I never knew existed and I managed to get them to link correctly. From here it's just a matter of creating instances of a few classes to get the networking part of Factorio running and calling some methods from the Factorio code in order to build a tree of the data. In the end I put everything in one DLL. The DLL is a massive 20MB, but it works and it's actually easy to maintain.
    I would say that the lesson to take from this is that what looks like a quick and dirty hack might in the end be a much better solution. I ended up with an easy to maintain plugin that gets the job done and I did it in a little over 2 weeks. Here is a screenshot of how inspecting a packet looks like.
    So now when you want to report a bug related to networking or inability to connect, adding a Wireshark (.pcapng) capture might help us debug the problem.Regarding the bandwidth problems, they were caused by the blueprint library when players with very very large blueprint libraries were in game. This has since been fixed by Oxyd, and he is working on improving the synchronization bandwidth further.

    Mini-tutorial review


    I am looking to go over the newly added tutorials of 0.15, and to try see what was done well, and which areas need some improvement. I would like to ask for some community feedback on this topic. At the moment we have the 5 train tutorials, but more will be in the works soon. I don't want to start work on new tutorials until myself and the others in the team are satisfied that we have the process and mechanics of the tutorials working perfectly. So if you have any comments or feedback on the mini-tutorials, factorio or just something you'd like to say, we welcome you to fill us in over on our forum


    [ 2017-06-23 17:18:23 CET ] [ Original post ]

    Factorio 0.15.23 released

    Changes


    • Reverted change that made Inserters no longer drop what they are holding when disabled by the circuit network. more

    Bugfixes


    • Fixed that the UI scale option wouldn't apply until restarting the game in some cases. more
    • Fixed that number-input fields would also block letters/other keys. more
    • Fixed that tile filters in the deconstruction planner wouldn't get used in some cases when entity filters were also defined. more
    • Fixed curved rail ghosts wouldn't mark trees/rocks when force-built. more
    • Fixed construction robots could stop doing their jobs when roboport was destroyed or unpowered. more
    • Fixed long strings in the right description pane. more

    Modding


    • Fixed that some mod mods would falsely be detected as removed and have GUI elements they added removed on load. more

    Scripting


    • Fixed that teleporting entity ghosts didn't work correctly. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-22 17:00:59 CET ] [ Original post ]

    Factorio 0.15.22 released

    Changes


    • Blueprints in the blueprint library are sorted using case-insensitive natural compare. E.g. the sorting order now is "1", "2", "10", instead of the previous "1", "10", "2".
    • Inserters will no longer drop what they are holding when disabled by the circuit network. more
    • The deconstruction planner filter now treats any entity filter as also matching entity ghosts of that type.
    • Multiplayer creation GUI now remembers game name. more

    Balance


    • Explosive Mine now only does damage to enemy units and structures.

    Sound


    • Added missing vehicle collision sounds (pipes, solar panels, etc...)
    • Reduced volume of ore mining and tree chopping.

    Bugfixes


    • Toggling fullscreen via options or Alt-Enter now keeps window on the same monitor. more
    • Fixed that in long recharging queues some robots would never get a chance to recharge. more
    • Fixed that it wasn't possible to click and drag blueprints into an empty blueprint book. more
    • Fixed that deconstruction/blueprinting selection would be canceled if the selection ended on one of the always-visible GUIs. more
    • Fixed the productivity bar in the furnace GUI wouldn't show in some instances. more
    • Fixed exiting a multiplayer game hosted through the in-game multiplayer option. more
    • Fixed that tile ghosts would always get selected over real entities. more
    • Fixed that the heat-connection icon was not visible on entities other than boiler and reactor. (related to modding)
    • Fixed that furnace with heat source couldn't be rotated before placing it.
    • Fixed the gui of furnace using heat as energy source.
    • Fix PvP Gui script error. more
    • Fix that clearing items in Transport belt maddness didn't give the items back. more
    • Fixed that rails marked for deconstruction wouldn't allow canceling deconstruction while a train was on them. more
    • Fixed that biters would change orientation rapidly when they were near a player whom they couldn't attack. more
    • Fixed that Rocket Silo would continue crafting for 1 tick after completing a rocket. more
    • Fixed that lot of other keys that can be used to write characters in the edit box (or console) were not blocked from affecting the game if they are assigned to do a game action. Having text box active now means that all of the keys are blocked from affecting the game.
    • Fixed (hopefully), that the stretching of bounding boxes of walls to touch their neighbours was not taking into account when marking things in the way for the blueprint. more
    • Fixed that the description pane would change width depending on the content. It should now never change width. more
    • Fixed that the shooting-target would render as valid to shoot with rockets when it actually wasn't. more
    • Fixed that programmable speakers would get wrong instruments after importing pre-0.15.19 blueprint string. more
    • Fixed that maximized Factorio window had thin border around it. more
    • Fixed that vanilla and modded version of achievements could be mixed up. more
    • Fixed that inserters would try to insert items into other non-burner inserters. more
    • Fixed that fast-transferring modules into the rocket silo would put them into the module slots and the rocket at the same time. more
    • Fixed that the "rocket launched without satellite" message couldn't be dismissed in some cases. more
    • Fixed the mining drill GUI wouldn't show mining progress when it had a large number of modded module slots. more
    • Fixed fast-replacing an assembling machine with overloaded ingredients would spill the items. more
    • Fixed many ingredients or products in recipes would break the assembling machine GUI. more
    • Fixed wrong values when using /config set allowed-commands with invalid values would crash the game. more

    Modding


    • Fixed that giving rolling stock entities invalid collision masks would crash the game. more
    • Mod title and description can now be localised.
    • Fixed a crash when mods use reset technologies during the technology researched event. more
    • Fixed that modded GUI elements wouldn't get removed in some cases when the mod was removed. more
    • Fixed source_effects applying effects to the source by the target instead of to the source by the source. more

    Scripting


    • Fixed setting robot.energy for logistic/construction robots wouldn't account for the robot battery upgrade. more
    • Fixed that setting LuaBurner::currently_burning didn't accept LuaItemPrototype as the docs said. more
    • Added LuaEntityPrototype::count_as_rock_for_filtered_deconstruction read.
    • Added LuaEntityPrototype::filter_count read.
    • Added LuaEntity::spawner/units read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-21 16:33:13 CET ] [ Original post ]

    Friday Facts #195 - Poles re-design

    Tomorrow's party


    Since a couple of weeks ago I was working for the 1M Party. Made some little graphic design jobs which finally became not that little and much more than "some little". I have to admit that I had quite some fun doing them, cause these small things are giving me the chance to experiment and play with the graphical identity of Factorio, like the happy logo variation, the small jumping gear, some layouts, the 1 color version of the Factorio logo and so on.
    Luckily I finished the jobs with time enough as to come back to the game gfx. But to be honest, Jitka is the person who's really taking care of every single detail for the party, and preparing and organizing everything. She became a master with the stamp and other stuff that I can't reveal just to not spoil surprises.

    HR electric poles


    Most of the time when converting normal-res graphics (NR) to high-res (HR), I like to take the chance to re-think the design of the entity. Normally after testing it in the game for so long, it is easy to find better solutions for old problems. But the main reason for re-designing an entity, is that it doesn't support the double resolution - because it was designed and optimized for NR - and sometimes it is because the style is primitive and doesn't fit with the actual standards of the game. Both reasons are true for the case of the electric poles.
    Now that I see them again, after working for so long with the HR versions, I don't find them that bad, but it is true that there are problems, especially with the medium one. I will talk about it later. Let's start with the big pole, the 'easy' one.
    The model v.1 doesn't support HR, and I always thought that it could be much nicer. This new v2.a model, is in fact a real one that exists not too far from my home. It's just perfect - in real life - but for Factorio it has some problems. The base is too thin, it needs to cover 4 tiles, and it has 6 connections instead of the 3 that Factorio requires. I asked for having 6 connections and little variations in the position and rotation of the poles, to make it more natural in the game. But the amount of work and potential problems that this would cause makes it just not viable. A really nice point of this model is how it rotates. It's very clear in its geometry, clean and transparent at the time of overlapping with other tiles.
    After the first attempt, the proposed solution is more conservative. Getting back to the classic v.1. v2.b is just trying not to freak out too much, and moves forward within the comfort zone. Just the same as the v.1, but better for HR and the modern Factorio style. The problem of this model is the rotations, specifically the horizontal view, so I believe a 3rd version will come out after mixing the best parts of the other two.
    The main problem with medium and small poles, is that they are normally located in the middle of your factory, so if you have a tight setup they can be very intrusive. They need to be transparent. On the other hand, they have to be visible enough in order to feel comfortable at the time of playing. That's why medium pole v.1 is a diagonal. It is just an experiment that tries to show the tiles behind as best as possible. But to be honest I find a bit annoying the absurdity of having a diagonal pole that requires another support on the base just to be stable. What kind of engineer does a pole like that? The good part of the v.1 is that it is very unique, and you can recognize this pole as from Factorio anytime you see it. With this new model v.2a, I'm trying to simplify the shape as much as possible in order to be more light and transparent. The problem is that the horizontal rotation is not spectacular, and this sense of uniqueness is quite diluted.
    So comes the medium pole v.2b, which is trying to keep the lightness of 2a, even increases it, and it tries also to recover this lost uniqueness from v.1. Rotations are not super spectacular either, but for the horizontal rotations which are the most difficult ones, this model works pretty well. I believe that a medium pole v.2c will come by taking the very best of the other models.
    With this first version of the small electric pole, I had already a long and difficult process for building it. In my opinion there's not really any serious issue with it apart from the HR incompatibility. So basically v.2a is just a cleaned and stylized version of the v.1. Anyway it needs to be tested to see if it really works. So that was a short and brief trip to the re-design for HR in Factorio. I just wanted to continue a little bit the last FFF, in order to show more deeply the process of creating an entity. Many times we speak about technical stuff, meaning code and complicated tools, but we sometimes forget to talk about conceptualization and design, which is full of techniques and twists. As you can see, everything in here is a work in progress, so we will probably speak about the final HR electric network in action soon. I hope you find it interesting.
    As a bonus, I'd like to introduce you to the new version of the warning signals. I had to clean up the style a lot in order to make it very visible in any situation. Still work in progress so expect changes, but step by step Factorio looks better. Any feedback from you is always interesting. See you in the forums.


    [ 2017-06-16 20:16:45 CET ] [ Original post ]

    Factorio 0.15.21 released

    Bugfixes


    • Fixed that the server would crash if someone tried to connect when there were no blueprints being transferred. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-15 10:33:23 CET ] [ Original post ]

    Factorio 0.15.20 released

    Changes


    • Transports belt entities show belt speed in the tooltip and entity description.
    • Reduced fluid wagon air resistance from 0.05 to 0.01
    • Scenario names are now localised.

    Bugfixes


    • Fixed login details getting lost (hopefully). more
    • Fixed a crash that would happen if the game exited due to a script error that happened immediately after deleting a force. more
    • Fixed int mod settings would show incorrect values in the GUI. more
    • Fixed gun sounds would continue when switching weapons while firing. more
    • Fixed a performance issue caused by spawners being active all the time in peaceful mode. more
    • Fixed a crash when removing train stops next to other train stops and then building locomotives. more
    • Fixed a rare desync related to opening your player inventory. more
    • Fixed a crash when teleporting/setting the force of a offline roboport. more
    • Fixed inserters with custom pickup/drop locations from mods would retain the custom data when the mods were removed. more
    • Fixed a crash when deleting blueprint records from the blueprint library while another player is viewing the record tooltip. more
    • Fixed that some clients wouldn't be able to connect to a server when blueprints were being uploaded. more
    • Fixed that Factorio wouldn't start when run from an NFS partition. more
    • Fixed crash on macOS older than 10.9 more

    Modding


    • Removed unused "energy consumption" from the roboport equipment. more

    Scripting


    • Fixed that setting researched = true on level-based research in progress wouldn't update the research level displayed. more
    • Fixed that game.write_file would cause desyncs if it failed due to file permission issues. more
    • Fixed a crash related to the train changed state event. more
    • Added events on_player_setup_blueprint, on_player_deconstructed_area, and on_player_configured_blueprint.
    • Added LuaEntity::secondary_bounding_box read.
    • Added LuaForce::worker_robots_battery_modifier read/write.
    • Added LuaGuiElement::enabled read/write.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-14 16:04:58 CET ] [ Original post ]

    Friday Facts #194 - Automated combinator pipeline

    Hello inhabitants of a remote and unexplored planet full of life, richness and natural resources. The group of entities we are bringing to high resolution currently is the combinators. The main problem with them is the amount of shifting values needed, so we used a specific workflow which I will try to show and explain today. Some of the parts have already been described in FFF 146, so I will only mention what is necessary for this article. Please fasten your belt as this will be a ride full of automation.

    01 - Blender


    Here it all starts. As you might already know, almost everything in Factorio comes from 3D models created in Blender. This time I already had the combinator models ready as we updated them relatively recently (in 0.13).
    In 0.15, we added many new operations for the combinators, which required additional display graphics, some of them having quite complicated shapes. For some obscure reason I was afraid that the old matrix of lightbulbs wouldn’t be able to represent such detailed symbols so I increased the resolution from 7x7 to 15x15. I wasn’t too happy with the result, but at that point time was a big pressing factor so we just kept it. The thin lines however lose quite a bit of the granular display nature and they behave quite poorly when zooming out.
    Now when I had the chance of revisiting combinators, I tried to redo the symbols with 9x9 as I was thinking “Well, I probably abandoned 7x7 for a reason so let’s not try that.” However, I quickly found out that it’s actually very easy to fit all of the symbols in 9x9 so I tried 7x7 out of curiosity. I was very surprised to see that it’s actually totally fine and there was no reason to abandon the 7x7 grid. So, here you can see all the old-new displays.
    Once the 3D models are prepared, I could get into rendering them very fast just by changing a handful of values. You can see that the original scene was already prepared for resolution doubling.
    It’s worth mentioning how the rendering system actually works. The combinator objects are split into layers, separating horizontal and vertical models (because they are different due to projection), and rotating them between frames 1 and 2 in time.
    With this, we can assign RenderLayers to combine the layers and output what we want.The next step is naming the outputs correctly and putting them in their own folders - for that we use a fake rendering scene which has only one purpose - collect the RenderLayers from the real model scenes, and save them to disk.
    Once that all works we just need to press one button to output everything.

    02 - Photoshop


    Many things can be achieved in a 3D program, but human touch in Photoshop is always a very vital step for vast majority of our graphics.The main technical criteria for Photoshop output is the ability to import the working file into After Effects as separate layers. I will show why this is necessary later. Since there are 12 combinator variations, maintaining your 12 PSD files would become a pain sooner or later for many reasons, so I import everything into one big file.Here I typically space the imported layers out so that I can see and edit everything at the same time. We will center them back later. This way I can paint on all of them together which not only saves time otherwise spent by switching files, but it also lets me see the differences and make sure I'm not overdoing it on some of them. Typically we duplicate the layers twice (groups in this case) and blend them with Screen and Multiply modes. Of course the blending only happens in carefully hand-painted spots, which gets us to the outputs we are trying to get out of Photoshop - masks which control the correction seen above. This is how one of them looks like:
    A special thing to mention, we also generate ground integration with Drop Shadow functions in Photoshop, which has to be merged in a single layer so it could be exported. The problem with this is that it has to be done manually so again doing it just once in one big photoshop file is faster than in 12 different files.

    03 - After Effects


    The place where everything fits together is After Effects. Here we bring all of the rendered outputs from Blender together with the masks exported from Photoshop, and with some system combine them into image sequences which will later be processed by python scripts.
    The obvious thing to do first are the combinator sprites, this is using the quite typical system of taking the rendered sprite, masking it and duplicating it to screen/multiply blend itself, of course feeding it the mask from Photoshop. The Photoshop masks are imported directly from the PSD file as layers, which is why it's important to have them ready for this step. In After Effects they have to be centered back to fit the render, to compensate for the spacing in Photoshop. After that it’s just doing the same for all combinator types, rotations and shadows. The pipeline can look like this:
    • Render - raw footage directly from Blender
    • Ps-EDIT - applying the Photoshop masks
    • Sequence - final positioning tweaks
    • Output - separating the sequence into separate outputs for each combinator type (arithmetic, decider, constant)
    The exact same applies for shadows. Rotations, dance!
    This After Effects pipeline is quite typical for all of our entities. The system can differ in complexity but it’s something similar. The special part here is that combinators have a huge amount of shifting values for the wire connections in Lua, and we need to somehow define them. To be more specific, we have:
    • Red wire input
    • Green wire input
    • Red wire output
    • Green wire output
    • Red wire input shadow
    • Green wire input shadow
    • Red wire output shadow
    • Green wire output shadow
    Even though the constant combinator doesn’t have any input, it still totals 80 shifting values just for the wire connections, not even mentioning shiftings for the displays, activity LEDs and the combinator graphics themselves. Doing each point manually would be insanely tedious, time consuming and to redo it you simply have to do it all over again, at which point you might as well just go hang yourself with a red and green cable.
    When we combine it all, in total we exceed 111 shiftings. Because we are proper Lazy Bastards, we have a special pipeline to prevent doing all this manually. (Automation, anyone?) In After Effects we take the centered sequence of combinator sprites and desaturate them. On top we put 1 pixel indicators for the wire connection points. The result looks like this, note the small colourful spots. The gray arrow is just for debug and to prevent mistakes.

    04 - Shifting processing


    The previous picture alone isn’t very useful as we do not have a tool which would just calculate the shifting outright so we need to process the pictures and filter them by colour. Each of the coloured pixels is going to be split into one file which results in a funny picture which has just 1 pixel for you to find in case you want to have a look manually. There is a simple colour code for the filtering:
    The aim is to separate them all into their own exclusive folders, where they will be waiting eagerly to be processed and spat out by the next assembling machine script…

    05 - Spritesheeter


    We already mentioned multiple times that we are using an universal python script to crop images and calculate the shifting required to re-center the cropped picture. This is generally useful simply because it’s cropping the data to the minimum possible bounding box, minimizing the file sizes of the game and leaving less work for texture Atlas cropping during loading time. Now we can use this tool to calculate the wire shiftings for the combinators from the single-pixel images from the previous step. This doesn’t happen magically by itself, we still need to tell Spritesheeter what to do, so we can just casually generate the .bat command for Spritesheeter by another python script. Spritesheeter devours its prey per folder, which is why we separated each of the shifting pictures into their own folder. The output is 80 text files which look something like this, focus is of course on the 'shift = ...' line.
    Note: the real combinator sprites, activity led and display sprites also go through Spritesheeter, outputting whole spritesheets where possible, like for example those two.

    06 - Lua generation


    If you ever looked into entities.lua and searched for combinators, you probably noticed that it has quite a bit of code. More specifically, whole file has about 12,500 lines. When we separated combinator pictures (not even the whole code), it dropped to 10,500. That’s 2 000 lines of Lua mess to define the new graphics in. It’s safe to assume that it could take me over 2 days to do all this manually so I decided to generate the whole combinator-pictures.lua with another python script automatically. Since I don’t have that much programming experience, I obviously quickly discovered that it isn’t as easy as I imagined it to be, and I quickly got into readability problems so I had to do some code cleaning up because I just got absolutely lost in it at one point. Even now it still has some messy parts, but overall it was a quite straight forward process.
    It took me about 4 days it probably took a bit longer (about 1-2 days) than doing it manually, although if I had to redo just half once, it might have already evened out, but that’s all just guessing. Even fixing mistakes and errors is much easier as I can just fix a few scripts and re-generate the whole thing within seconds. Most importantly, I learned a lot of new things, and we can reuse the processing pipeline in similar entities like the electric poles or circuit connector module (the yellow box which appears when you connect something to circuit network), and many others.

    07 - Copy to Factorio


    We have pictures and code but we need to put all these files in the game. Taking the files manually and putting them into the game is not terribly hard, but you can forget some files, place them in wrong locations, or the folder/naming system between the game and the working directories can simply be different. So it’s very convenient to write another script which actually copies the files to the local git repository, after that it’s just about starting the game and seeing how it works.

    08 - In the game


    Of course the code seemed to be correct by eyeballing it, but the game is stubborn about syntax and all those unimportant things so I had to do some fixes. This was a repetitive process between editing the 06-Lua generator and putting the files into the game, sometimes even having to re-generate sequences from After Effects and running the whole processing pipeline again. After doing this a few times it was time for automation so I added a script which automatically triggers all of the 04-07 scripts, letting me to just fix issues and see them in action with just one double-click.

    Conclusion


    The whole process isn’t exactly short, but automating the steps helps so much, especially when we get to the last step of really making it work right. At that point it is extremely important to be able to say “Can we change this, can we improve that?” and your answer is “Yeah, just change these two things and let it re-generate.” It lets you focus on quality instead of thinking how much time would it take to do all the process manually again, and I really enjoy working this way, not to mention that every time I learn something new to make the tools even better and faster next time. Doesn’t that remind you of some game?

    Community spotlight


    While we're on the topic of combinators and automation, Reddit user /u/mgabor has spent the last month working on an automated way of importing MIDI to Factorio as programmable speaker songs, introducing MIDItorio. https://www.youtu.be/wOfsikccYvw Hopefully this article was interesting for you, let us know what you think on our forum.


    [ 2017-06-09 17:50:46 CET ] [ Original post ]

    Factorio 0.15.19 released

    Changes


    • Added alarm sounds to programmable speaker.
    • Fullscreen is on by default.
    • Locomotive snaps to a train stop when placing the first locomotive next to the train stop.
    • Changed automation and fluid wagon research so it doesn't have multiples of science packs per unit. more
    • --start-server-load-scenario can load scenarios provided by a mod. For example, --start-server-load-scenario base/wave-defense will load the wave-defense scenario from the base mod.

    Graphics


    • Changed the icon of the automation research, so it is not confused with the logistics research.

    Bugfixes


    • Fixed that destroyed transport belt could leave zombified items in nearby tile more
    • Fixed inserter zombification at rail junctions more
    • Fixed visual seams on map/minimap more
    • Fixed that gate over rail could be rotated
    • Fixed GUI size problems with the logistic networks GUI. more
    • Fixed that the headless server didn't close when it failed. (Most typically because of script error) more
    • Fixed misaligned force color mask on capsule projectiles. more
    • Fixed crash when changing player's controller, when player was controlling a vehicle with god controller. more
    • Fixed a crash caused by manually deactivated units. more
    • Fixed that exporting blueprints wouldn't respect the current filter options in the setup GUI. more
    • Fixed that selection-by-typing in listboxes would also trigger normal game actions. more
    • Fixed that adding stops to a train could change the current station. more
    • Fixed that the search text didn't reset after leaving the browse-mods GUI. more
    • Fixed that the mods-load-error GUI could end up too large to fit on screen. more
    • Fixed a crash when interacting with the "save/quit/reconnect" window after losing connection with a server. more
    • Fixed crashes when locking bitmap fails. more
    • Fixed rail preview was rendered under entities. more
    • Fixed message box in main menu being not clickable more
    • Fixed trains stuttering on extremely short paths. more
    • Fixed flamethrower stream would destroy trees directly. more
    • Fixed that some information was missing from generator entities. more
    • Fixed that Factorio would hang on Linux after trying to paste a string when the clipboard was empty. more
    • Fixed generating unwinnible research tasks in team production scenario. more
    • Fixed that clicking escape while connecting to the game could lead to weird situations as the normal menu was opened. Pressing escape while connecting will abort the connection instead. more
    • Fixed the productivity bar in the mining drill wouldn't show in some cases. more
    • Fixed that the blueprint book gui didn't stretch vertically when possible. more
    • Fixed inconsistent hovered font color on buttons and dropdowns. more
    • Fixed train stuttering with only disabled stations in their schedule more
    • Fixed that you could disconnect wires at any distance. more
    • Fixed the icon used when rendering coal being held by construction robots. more
    • Fixed headless server on macOS getting stuck when in background more
    • Fixed that attempting to edit a blueprint label for the second time would show the original label before any edits were made. more
    • Fixed that --start-server-load-scenario wouldn't give an error when the specified scenario couldn't be found. more
    • Fixed that robots would leave items on the ground when building ghosts in some cases. more
    • Fixed train GUI size problems when the fuel tab is removed due to it going out of reach. more
    • Fixed that blacklisting tile ghosts in the deconstruction planner didn't work. more

    Modding


    • Fixed that the fluid wagon wouldn't show the equipment grid when one was added through mods. more
    • Fixed loading the item-with-tags item type. more

    Scripting


    • Fixed set_command with an empty list of commands would crash the game. more
    • Fixed LuaRandomGenerator docs. more
    • Added LuaTechnology::level write support for level-based technology. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-08 11:50:31 CET ] [ Original post ]

    Friday Facts #193 - Party planning plans

    Hello, it has been a pretty hot week here in Prague, and we have finally wheeled-out and hooked-up our little air-conditioning unit, which has been making a valiant effort to keep the office cool.

    Summer team reinforcement


    We have had a Linux developer join us this past week as a trial, and he has been tasked with several train related UX features. For instance a small indicator over a pump when it cannot connect to a fluid wagon for some reason, and automatic snapping to position when placing locomotives at train stops. While not the most glamorous or highest priority tasks, these are the sort of polishing and general improvements we are looking at for 0.16, and has involved quite some exploration of our code-base. We are happy to say that Tom's work has been really excellent, and he will be joining us full-time later this summer.

    Party party party


    Albert, Jitka and I (Klonan) have spent the first half of this week organizing and planning more and more party related topics. This is the first large event we are setting up, so there is quite some learning we have had to do, but it is no doubt good experience for a potential 'FactorioCon' or 1.0 release party in the future. We now have a set of party related graphical assets, as well as designs for party merchandise.
    We have sent out a specially designed party invitation to the local developers and games media here in the Czech Republic, and all the fan tickets are now sold out, so our outlook is optimistic that the celebration will be quite successful. Jitka has been handling most of the communication with the venue, figuring out the more mundane details such as what food and music will be there.

    High-resolution Inserters


    We released 0.15.17 this week, which included a new set of high-resolution sprites for the inserters. It was a natural choice to choose Inserters as the next entity to upgrade, mainly because they are everywhere, we knew it will take some time, and the solution might not be the final one, so we wanted to know what are we dealing with as soon as possible. The base platforms were quite straight forward, just like any of the other entities we brought to high resolution. However the hands and arms are special. Since they stretch all the time, we thought it fitting to make them in an even greater resolution - 4 times the normal resolution on each axis. This lead to some difference in the painting, as the normal level of detail we are used to is suddenly scaled in various ways. So I (V453000) set up some automated system for rendering and putting them in the game as always, and just iterated on the painting, sometimes changing just a few pixels here and there.
    For now we are happy with the result and we will be prioritizing other tasks before revisiting the inserters. In general the biggest issue is that inserters can reach and grab in all crazy directions, so the hands must look kind of flat otherwise they would look wrong in about half of the orientations. The other family of entities we are currently working on are the wire-connected things - electric poles and combinators, which you can look forward to seeing very soon.

    Terrain plans


    We are also working on a total terrain rework including high resolution. With making the red desert last year we realized what we need to do with the other terrains as well. New decoratives, rocks, and many other things, all of which make the terrain look nicer, in additional to new water, and transitions from water to any other terrain. We are also working on new algorithms and processes for map generation, so it will also be more than just a cosmetic improvement. This is a very large and complex topic, so the plan is to release it in 0.16 as a smaller release, soon after 0.15 is stable.‎ We just wanted to make this clear as there has been some confusion about the terrain among players, mostly because we haven't mentioned it much. Hopefully we will have a larger update on the topic to show soon, to build on the small preview that was shown in FFF 187. So let us know if you have any thoughts and opinions you'd like to share over on our forum.


    [ 2017-06-02 18:15:36 CET ] [ Original post ]

    Factorio 0.15.18 released

    Bugfixes


    • Fixed that wire connections were not preserved in tightspot campaign. more
    • Fixed various crashes on macOS related to logistic counts. more

    Modding


    • Changed default value of "allow_custom_vectors" in inserter prototype to true, vanilla inserters set it to false explicitly.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-01 22:36:48 CET ] [ Original post ]

    Factorio 0.15.17 released

    Graphics


    • Inserters in high resolution; normal resolution inserters are unchanged.

    Bugfixes


    • Fixed some inconsistencies in programmable speaker gui more
    • Fixed that headless mode wiped out controls section of config file more
    • Fixed that detached roboports (e.g. after blackout) would not reset circuit network readings on number of robots more
    • Fixed that active blueprint/deconstruction-planner selection did not reset when switching between game and map more
    • Fixed AltGr behavior with special characters more
    • Fixed that mining bar would steal mouse focus more
    • Fixed the /evolution command would underflow when showing negative pollution values. more
    • Fixed crash when mod-list failed to save when exiting the game. more
    • Fixed game would not save at all if generating preview picture failed. more
    • Fixed desync related to driving vehicles. more
    • Fixed unnecessary quotes in programmable speaker note translations more
    • Fixed that the bonus GUI wouldn't fit on screen with a large amount of modded content. more
    • Fixed crash when closing public server. more
    • Fixed that filter inserters lost their filter in tightspot campaign. more
    • Fixed empty space would be rendered if glyph was missing in current font. more
    • Fixed that resizing the game window while catching up after joining a multiplayer game would leave the map blank. more
    • Fixed issue and desync when disconnecting one wire color of an entity connected to 2 wire colors. more
    • Fixed a multiplayer crash that would happen when a player left whilst uploading their blueprint library and then rejoined the same server. more
    • Fixed another issue that prevented spawners from spawning. more
    • Fixed game would fail to load if max-texture-size was too low. more

    Modding


    • Moved the "mod-settings.json" file so it now resides in the "mods" subfolder allowing it to work with the mod-directory command line option.
    • Added support for virtual-signal migrations.
    • Inserters now require the inserter prototype property "allow_custom_vectors" to be true before they allow setting custom pickup/drop locations.
    • Font paths were moved from locale cfg to locale info.json (see core/en/info.json).
    • Changed default value of hand_length in inserter prototype to 0.75, to make inserter shadow look nicer.

    Scripting


    • Fixed crash when teleporting character entities while in vehicles. more
    • Fixed that character.character_maximum_following_robot_count_bonus didn't work. more
    • Fixed that /help for lua commands wouldn't do parameter substitution correctly. more
    • Added LuaEntityPrototype::resource_categories, fluid, and pumping_speed read.
    • Added LuaEntity::previous_recipe read.
    • Added LuaEntityPrototype::stack/allow_custom_vectors read.
    • Changed LuaEntityPrototype::speed to also work for rolling stocks.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-06-01 13:09:59 CET ] [ Original post ]

    Factorio 0.15.16 released

    Changes


    • Temporarily reverted GUI interaction changes (some GUI elements responding only to left mouse button, buttons clicked on mouse up instead of mouse down) introduced in 0.15.13 and 0.15.14.

    Bugfixes


    • Fixed the "back" button wouldn't work in the save-game GUI. more
    • Fixed the "cancel" button wouldn't work in the user-login GUI. more
    • Fixed that the map editor item/inventory buttons didn't work. more
    • Fixed beacons would "wobble" in blueprints. more
    • Fixed crashes related to clicking different buttons.
    • As a one-time migration, enemy spawners will reset their absorbed pollution to zero when a save from a previous version of 0.15 is loaded. more This is to avoid an extreme temporary spike in difficulty that would happen after loading a save with many spawners that were affected by a bug in the previous versions.
    • Fixed the market GUI didn't work. more
    • Fixed crash when pollution reaches unreasonably far chunk. more
    • Fixed power bars glitch in electric network statistics dialog. more

    Scripting


    • Fixed setting LuaGuiElement::elem_value would always expect the elem_type to be "item". more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-27 15:28:13 CET ] [ Original post ]

    Factorio 0.15.15 released

    Bugfixes


    • Fixed desync related to loading pre 0.15.14 save with beacons marked for deconstruction without resaving it first.
    • Fixed that spawners would sometimes stop spawning units even when polluted. more
    • Fixed crash when changing assembling machine recipe. more
    • Fixed crash that would happen after clicking a button in the tech tree. more

    Scripting


    • Fixed crash when creating smoke entity through create-entity trigger effect. more
    • Added Entity::update_connections. It updates connection of loader and beacon to entities that might have been teleported out or in. The effect might include more things later on.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-26 17:47:47 CET ] [ Original post ]

    Friday Facts #192 - One million

    Hello, we try to fix bugs as fast as we can, the more we fix, the more get reported, it will takes weeks to get to stable version ... blah blah blah

    One million copies sold


    YEEEEEEEEEYYYYYY!!!! :) So it actually happened. We are in the club of games that have sold out 1 million copies. I can't really believe it. It is almost the amount of people living in Prague. Which is a lot. It is hard to imagine all the people. I want to see the people. Well ... at least some of them.

    The celebration party


    We decided to make a celebration party. Most of the Factorio team will come, and we plan to invite our friends and other Czech developers. We want to make it possible for the players of Factorio to come as well if they want. We are not really sure how many people could actually come to such event in Prague. Actually there is a guessing contest in the office, where I'm the most pessimistic guy guessing that less than 50 people will come. The party will take place on Saturday the 17th of June, here at a venue here in Prague. Each ticket costs 10 Euro, which is a symbolical price to make sure that people who get the tickets will actually attend, and to prevent a single person from getting all of the tickets. There are only 100 fan tickets available, so if you want to attend please make sure you get your ticket before they are all gone. There will be a chance to chat with most of the team, including developers, artists and myself. Free food, beer and soft drinks will be on offer to all our guests, along with some music. We are also planning a Factorio 'Pub quiz', with some prizes for the winning teams. Of course this will be a great opportunity for everyone to chat with other fans of the game from around the world. More details, along with how to purchase tickets here

    The interview and AMA


    This is the first time you can actually see me talking about Factorio. I talk about the way Factorio started and struggled over the years. It ended up to be more of a monologue interrupted by occasional question, but lets call it an interview. https://youtu.be/zdttvM3dwPk As a follow-up to this interview, I will take part in an AMA (Ask Me Anything) on Reddit, while the most basic and broad questions are already answered by the interview. The AMA will be held on the Factorio reddit next Tuesday (30. May) after 2pm CEST. As usual, let us know what you think at the forums.


    [ 2017-05-26 17:21:56 CET ] [ Original post ]

    Factorio 0.15.14 released

    Optimisations


    • Optimised beacon update times which helps especially when the power is not full and it fluctuates.

    Changes


    • Added support for using username and password for proxy connections.
    • Changed technology sorting. All of the science pack types affect the order, not just the most expensive one. more
    • Leading and trainling whitespaces will be trimmed from host name or IP address entered to Direct Connect multiplayer dialog. more
    • Electric network info window shows all connected entities in the list and the graph even when they have 0 consuption/production. This means, that the count of entities connected to the network is shown even if they don't consume or produce.
    • Electric poles that have 0 consumption as well as 0 production show empty electricity graph instead of full. more

    Bugfixes


    • Keypad enter is treated as regular enter more
    • All buttons apart the inventory/recipe/crafting queue and item selection slot react on mouse click instead of just mouse down.
    • Fixed that mining drills would continue to insert into entities when moved far away. more
    • Fixed that right click and drag in the blueprint setup GUI didn't work to remove things from the blueprint. more
    • Fixed that blueprint icons couldn't be removed with right click. more
    • Fixed that right-clicking items in the crafting queue didn't work to cancel 5.
    • Fixed window being created slightly offscreen on certain resolutions. more
    • Fixed that the edit field for a blueprint book would get reset when bots delivered items to the player. more
    • Fixed that inserter facing north was slower compared to other directions. more
    • Fixed that the solaris achievement ignored usage of steam-turbines. more
    • Fixed that setting logistic requests didn't work in the map editor. more
    • Fixed crash after dropping a blueprint into a book inside the blueprint library. more
    • Fixed loading blueprint library from before 0.15.4 might crash. more
    • Fixed a crash related to changing the rail system when signals get disconnected from blocks. more
    • Fixed that furnaces and assembling machines weren't rotatable with heat pipe connection. more
    • Fixed crash when using --load-game with an error in a mod. more

    Modding


    • Fixed reading LuaCommandProcessor::commands when one of the help keys was empty. more
    • Fixed that disabled mods could change the mod event order.

    Scripting


    • Fixed changing force of lab ghost would cause desync.
    • Added LuaCustomGuiElement type "text-box".
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-26 11:55:41 CET ] [ Original post ]

    Factorio 0.15.13 released

    Changes


    • Most of the gui elements now work only with left mouse button, so other buttons might be used without intefering with gui.

    Bugfixes


    • Fixed that biters would sometimes try to attack indestructible entities. more
    • Fixed that clearing the blueprint label would make the GUI show the previous label. more
    • Fixed personal laser defense equipment shooting at player in vehicle would hit the player instead of the vehicle. more
    • Fixed that the edit label button on blueprint books in the library could get hidden behind the delete button. more
    • Fixed missing space after timestamp in server console output messages that didn't contain tag. more
    • Fixed that the blueprint library wouldn't update blueprints stored in books. more more
    • Fixed that reach-distance checks for curved rails only checked against one end of the rail. more
    • Fixed bonus GUI display values when the bonuses were negative. more
    • Fixed that the auto launch settings of rocket silo was not saved in blueprint. more
    • Fixed beta campaign level 02 would error for migrated save games. more
    • Fixed locked belts in demo campaign level 03. more
    • Localised programmable speaker notes and instruments. more
    • Fixed that mining drill window got repositioned to the center every time it switched to another resource. more
    • Fixed fluids/virtual signals in the blueprint library wouldn't migrate correctly between different modded saves. more
    • Before 0.14 the game didn't track online time of players, this caused that games transitioned from pre 0.14 could prevent players to get achivements until they spent enough of time in the game again. So for single player games, when transitioning to 0.15.13, the online time is reset to be full time of the map.
    • Fixed that the bonus progress of assembling machine didn't reset when the recipe was changed by using copy paste. This could be exploited to get extra free product of expensive items. more
    • Fixed crash when loading modded saves that used the flamethrow-explosion entity type. more
    • Fixed performance problems when building rails related to large rail sections and chain signals. more
    • Fixed desync related to trains.
    • Fixed blueprint library wouldn't use the Open Item GUI keybind. more
    • Fixed that errors in mod locale would only show in the log file instead of giving the standard mod-error GUI. more
    • Fixed that turret help view on map did show turrets from other surfaces. more
    • Fixed that silo script didn't validate items on configuration changes. more
    • Fixed that tightspot level 05 had incorrect recipes unlocked. more
    • Fixed that you could pippete items and break transport belt madness. more
    • Fixed that the game would crash when trying to load corrupt blueprint-storage.dat. more
    • Fixed that map was not updated correctly when tile editing ended up changing other tiles in different chunk. more
    • Fixed crash when loading modded saves that contained specific items without the mods. more
    • You can now open circuit network connectible entities while holding copper wire. more
    • Fixed crash when closing the game window in Browse Games/Play on LAN gui. more
    • Fixed that the bonus progress bar of furnace disappeared when the smelting was not currently in progress.
    • Fixed that changing recipe in the furnace didn't reset the bonus progress bar. more
    • Fixed that selection box of rotated (and modded) storage tank wasn't respecting the rotation properly. more

    Modding


    • Electric energy sources now support effectivity.
    • Fixed crash when mods add values to data.raw incorrectly. more
    • Fixed some entities using heat energy source types wouldn't connect to heat pipes correctly when rotated. more
    • Mod settings now shows the mod display name instead of the mod ID name (My Mod Name instead of my-mod-name).
    • Changing mod startup settings will now fire the on_configuration_changed event when appropriate.

    Scripting


    • Fixed crash when using game.take_screenshot and then deleting the surface. more
    • Fixed the old train ID wouldn't be included in some cases during the on_train_created event. more
    • Fixed crash when trying to register negative event ids. more
    • Fixed that force.reset_technology_effects() didn't preserve currently researched technology and saved technology progress. more
    • Fixed LuaEntity::neighbours return format to match the docs. more
    • Fixed LuaPlayer::mine_entity() would return false when successfully mining the given entity. more
    • Changed create_entity 'item-request-proxy' "modules" to take the same format as LuaEntity::item_requests. more
    • Changed LuaSurface::freeze_daytime() to freeze_daytime read/write.
    • Removed LuaPlayer::cursor_position.
    • Added LuaEntity::proxy_target read - the target an item-request-proxy is pointing at if any.
    • Added LuaEntityPrototype/LuaEquipmentPrototype::electric_energy_source_prototype read.
    • Added LuaEntityPrototype::fluid_usage_per_tick, maximum_temperature read, target_temperature.
    • Added LuaForce::get_saved_technology_progress() and set_saved_technology_progress().
    • Added LuaFluidPrototype::gas_temperature read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-23 15:14:16 CET ] [ Original post ]

    Friday Facts #191 - Gui improvements

    Since all of us are fixing bugs, there is not much to report. So I will take this opportunity to rant about game design, gameplay design and UI. Please note that these are my (Twinsen) personal opinions and do not necessarily reflect Factorio's direction. Nonetheless it should make for an interesting Friday Facts.

    Game design is hard!


    I was always hired to work as a programmer on games (including Factorio), but part of my job was very often to thoroughly design the gameplay elements that I am about to code. I started designing games in 2012, playing around with Unity. Since then I have been the main gameplay designer for 4 small games. During that time I read many articles, some developer blogs, watched random videos, took a course in gamification and played lots and lots of games. I play about 20 mainstream games per year, on different platforms, most of them I finish. One notable mention is World of Warcraft which I played since 2007 (and still actively play at the moment) for a total of almost 7500 hours, during which I was one of the top 0.2% PvE players for a short time. I did some theory crafting, combat analysis and most importantly I tried to understand why its endgame gameplay is able to keep the players engaged for months. Of course there is all the work I did and things I learned so far from Factorio. This does not make me some big-shot game designer, but there is one conclusion I would always reach: Game design is hard!. The way I see it, programming is easy. If something does not work out, you almost always know what's going wrong and what you need to do to fix it. With game design on the other hand, you can end up spending weeks (or years) implementing your 'amazing' ideas for a game, only to find out that your final game isn't fun or engaging for the general public.

    Factorio must be the best game no matter what!


    Sometimes when making game design decisions for Factorio, especially when it comes to interaction, we come to a change that can make the game slightly better, but that will not be seen well by the current active players who have played for many hours, since it changes something they got used to. Usually my approach is that Factorio must be the best game no matter what. So if a changes messes up people's bases, or nerfs their favorite weapon, or changes the GUI interactions that players used for 3 years, I'm most of the time the bad guy who says "I don't care about the current players, Factorio has to be a good game from the perspective of new players, who will later become your active players anyway". The game is early access after all.

    New toolbar proposal


    Hang in there. After this lengthy introduction I'm slowly getting to the point. We always wanted to make many improvements to both out UI and our UX. But no one was really doing it so we kept postponing it. We hired Norbert as an UX designer, but that didn't work out, and he is unfortunately no longer working with us. So now I am looking on how we can improve the game's UI/UX. To get the discussion started in our team, I made a 63 slide presentation about what we can improve and how. Part of it was about Quickbar, Inventory and Character GUIs, and this is what I will be showing you today. The basic idea is to change the quickbar from a separate inventory to simply a shortcut bar to the player's main inventory. It will mostly work as the current quickbar, except item slots can only be filters. Some people on the forum are already proposing and discussing this change.
    The problem I have with the current quickbar is that most of the time filters are the items I want, while everything else is just random junk put there by the game. If you arrange the quickbar without using filters (consider a new player that does not know about filters yet), it will always get messed up over time.

    By making them only shortcuts, all this confusion is removed. Shortcuts are created by placing an item in the slot or by clicking an empty slot and selecting what you want there. Clicking the shortcut or pressing the shortcut key will take a full stack of that item into your cursor. For items such as equipment and weapons, clicking the shortcut will equip the item. For usable items, clicking the shortcut will use the item.
    As a bonus, this goes well with another idea: building ghost buildings without having the required item. When you click a shortcut for something you don't have any items of, you grab a ghost of that item in your cursor. Placing the ghost item places a ghost of the building. It's a common situation where you build something and you run out of inserters. So instead of crafting more or running to the other side of the base to get more, you can place ghosts, continuing to focus on designing what you are building instead of being distracted. Another use case is making future plans by placing items you are not crafting or you haven't researched yet. Simply make a shortcut for any item you want and you can now easily build ghosts of that building.
    Advantages I see:
    • No one is taking away your inventory space. Main inventory will be increased to compensate for the slots lost in the shortcut bar
    • Relevant item counts
    • No more random items appearing in the quickbar as you craft them
    • No more items moving to different slots when they get depleted and re-crafted
    • No more using the quickbar to carry things around
    • No more “will this be crafted to inventory or to the quickbar?”
    • Guides the player to make proper shortcuts.(This is a very important point)
    • Player is in full control of the quickbar instead of the game trying to be “smart”
    • Managing 1 inventory is simpler than managing 2 inventories
    Disadvantages I see:
    • The granularity of 2 inventories is lost. Putting your entire inventory in a chest while keeping your toolbar inventory is no longer possible
    • People don't like change

    Character interface


    The player inventory could also use some improvements.By default, the new player inventory is a sparse inventory you can arrange as you like. Sort and auto-sort buttons will keep the items sorted. Additionally, filters can be used to make specific items go somewhere and to make sure you always have space for them.
    Now let's talk about the character screen. I never understood why all my weapons and ammo need to be shown on my screen all the time, when 95% of my time is spent building factories. I also never liked how the logistics section has to be there in the center of my screen whenever I need to craft something or grab something from my inventory. So what I propose is a character screen with tabs:
    Opening the character screen(using E) will open it with the last tab. To open the character screen in a specific tab, the F1, F2, F3 keys can be used. The equipment inventory from the bottom right will be removed and replaced with just a view of the currently equipped weapon and ammo. All of these changes come together to solve one of my biggest annoyances with the character screen: inventory transferring. Shift-clicking an item in my inventory transfers it where? To the logistic trash slots? To the quickbar? To the equipment slots? I never know and with the exception of ammo it never seems to go where I want. But with the tabs and the new shortcut bar now it's clear: items go to logistic trash slots if the logistic tab is open, to your character slots if the character tab is open, or to the entity's inventory if an entity is open.
    Looking at the big picture, a tiny bit of functionality is lost, but I believe there is a big gain in making the interaction more intuitive. I fear many current players, especially those who won't read this Friday Facts might see this as a bad change, a change for the sake of change. Because I am taking away something they understand and know all the quirks of, to replace it with something that's simplified and new. This is one of the reasons why improving the UI/UX is so hard. We made it 'okay' so we can maybe improve it later, but now when everyone (including us devs) have used it for so many years, it's hard to see what's wrong with it, because we eventually got used to all the unintuitive things. As mentioned above, I don't mind being the bad guy, so taking away the hatred of active players who don't like change, do the above changes make Factorio a better game? Let us know what you think. I'm also curious what you guys think about bout our UI/UX and general game interaction. Should it be improved? Is it good enough? Do you get lost in the menus? Did you have problems when first playing the game?Comment in our usual topic at the forums.


    [ 2017-05-19 17:18:14 CET ] [ Original post ]

    Factorio 0.15.12 released

    Changes


    • Zooming with the mousewheel in the map and zoom-to-world is less aggresive.
    • Fast entity transfer by dragging (ctrl + clicking and dragging) will remember if you're trying to insert or extract items.
    • Changed the deconstruction planner "trees only" filter to "trees/rocks only".
    • Lab speed info in the description contains the researched speed bonus as well.
    • Sprite quality defaults to High when at least 2.7 GB VRAM is detected (instead of 1.7 GB).
    • Video memory usage defaults to All when at least 1.5 GB VRAM is detected (instead of 0.8 GB).

    Bugfixes


    • The statistics window (electric/production/kills) will automatically move to avoid being partially offscreen. more
    • Fixed that keypad /*-+, enter and delete were not usable in the text boxes if assigned in the controls.
    • Fixed that power poles could be built at any distance by exploiting click-and-drag. more
    • Fixed marking underground belt output for deconstruction wouldn't block input from pushing more items into the underground part. more
    • Fixed "Read Stopped Train" checkbox not showing the correct value. more
    • Fixed entities with a burner energy source would show the incorrect power consumption. more
    • Fixed that production achievements could not be obtained. more
    • Fixed that some achievements (raining bullets, logistic network embargo, maybe more) were not properly marked as gained. more
    • Show the productivity bonus on mining drills even when they have no other effects on them. more
    • Fixed some GUI shortcuts not working when colliding with other shortcuts. more
    • Fixed that electric network visualisation on chart showed electric poles from other surfaces. more
    • Fixed that non-ASCII input wasn't possible on Linux. more
    • Fixed error when loading a save containing a folder which contained only subfolders but no files. more
    • Fixed swinging axe as attack might spawn mining particles of a nearby tree or resournce patch. more
    • Fixed that signals built by robots on places that didn't match the suggested direction didn't connect. This caused that some otherwise correct blueprints required manual intervention to fix the signals. more
    • Fixed handling of X11 focus events. more
    • Fixed trains wouldn't leave disabled stations when the next station in the schedule was the same station. more
    • Fixed train stops wouldn't import as string correctly. more
    • Fixed requester chests would render numbers larger than 2,147,483,647 as negative values. more
    • Fixed logging in with email in updater set your username to your email. more

    Modding


    • Fixed that electric boiler didn't work. more
    • Fixed int mod setting error display message didn't show the upper limit correctly. more

    Scripting


    • Fixed cloning blueprint books wouldn't copy the label/active index. more
    • Fixed that inoperable entities couldn't be rotated even when rotatable was true. more
    • Changed LuaItemStack::trees_only to trees_and_rocks_only.
    • Added LuaEntity::loader_type write.
    • Added LuaFlowStatistics::on_flow().
    • Fixed lua documentation for DeciderCombinatorParameters and CircuitCondition. more
    • Fixed passing invalid arguments to LuaGame::take_screenshot would cause desync. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-18 14:17:16 CET ] [ Original post ]

    Factorio 0.15.11 released

    Minor Features


    • When a train is stopped at the train stop, a circuit network signal is sent with a unique number for that train. more

    Changes


    • Added headless server option --server-id to allow specifying custom path to the server ID file.
    • Increased the minimum custom UI scale from 50% to 80% to avoid some scaling issues.
    • The zoom level at which the map switches from 'map view' to 'world view' was increased.
    • The first level of infinite researches is not needed for the tech maniac achievement anymore.
    • The game will default to low sprite quality on computers with less than 2.5GB RAM. more
    • Tweaked the rocket launch gui. It doesn't show the result inventory slot when it is empty to avoid confusion when people put the setellite in it.
    • Removed the zoom-to-world-outside-coverage debug option because it was causing issues. more
    • Added "create specialized sprite atlases" option to graphics settings. If checked, tile and shadow sprites won't be put into separated sprite atlases instead of the main one. This should give graphics driver more room to fit required sprites to graphics memory.
    • Added "atlas texture size" option to graphics settings. Larger atlas texture can fit more sprites into single atlas which reduces CPU load when rendering. But smaller atlases are more likely to fit into VRAM and reduce GPU load when rendering.

    Bugfixes


    • Fixed nuclear reactor and centrifuge were not placed into toolbelt automatically. more
    • Tweaked the way heat pipes work, mainly to make it work the same regardless order of build. more
    • Fixed that click-and-drag interaction logic didn't work for trains. more
    • Another attempt to fix the ranged-based research info in the technology icon.
    • Fixed that not all items were cleared in the transport belt madness campaign. more
    • Fixed that browse games table was inconsistent after resizing. more
    • Achievements should no longer be unlocked when replaying a game. more
    • Updated supply challenge level requirements. more
    • Fixed fluids consumed/produced by boilers didn't show in the production stats. more
    • Fixed that pasting very large strings wouldn't work on Linux. more
    • Fixed naming convention of transport belt madness campaign levels. more
    • Fixed copy-paste with containers so they correctly copy the inventory size limit. more
    • Fixed the progress bars in the lab wouldn't show correctly in some cases. more
    • Achievements are no longer be unlocked when replaying a game. more
    • Achievements are no longer unlocked by playing multiplayer game in which the player spent less than 50% of time online.
    • Fixed that the blueprint renaming textbox would close every time crafting finished. more
    • core/backers.json is now included in the core data crc. This means that different content of this file will be properly detected when joining multiplayer game.
    • Fixed that loader filters were not saved in the blueprint string. more
    • Gas color is now tinted with the fluids 'flow_color'. more
    • Fix wave defense crash when a silo died while nobody was connected. more
    • Fixed that the "confirm and download" button in the sync-mods-with-save wouldn't restart the game once all mods were downloaded. more
    • Fixed construction robots could get stuck trying to repair curved rail forever. more
    • Fixed that the technology cost tooltip description wouldn't scale correctly. more
    • Fixed that the /help command when run from the server console would always output the server commands list. more
    • Fixed strange behavior when a train has the same station in the list multiple times with no other valid station. more
    • Fixed crash related to dying with some GUI open. more
    • Fixed rail signals getting stuck reserved when mining/building rails in some setups. more
    • Fixed desync when pumps are setup to pump into the output of an assembling machine. more
    • Fixed the final level of formula based research would show the wrong name when researched.
    • Fixed crash when maximizing the game with the achievements window open. more
    • Fixed switching weapons while firing in the tank would keep playing the previous weapon sound. more
    • The productivity value in the miner description now contains also the researched bonus.
    • Fixed insert seding a signal twice during fast replace. more
    • Fixed crash that would sometimes happen when a player left whilst some other player was in the process of joining. more
    • Fixed hazard concrete item description. more
    • Fixed that some of the slider in the new game settings weren't controllable by scrollbar.
    • Fixed recipes with long names would extend out of the tooltip GUI. more
    • Fixed keyboard input would be blocked in tutorial, if console was opened when entering the tutorial. more
    • Fixed robots could deliver the wrong number of modules during roboport blackouts. more
    • Fixed that the game would freeze if there was no valid place to drop items on limited size maps. more
    • Fixed fire wouldn't pollute in some cases. more
    • Fixed that the delete-blueprint button would show when it wouldn't actually work. more
    • Fixed an error when resource scaling results in amounts too large to store in a resource entity. more

    Modding


    • Fixed generator power output was always based on heat capacity and default temperature of water. more
    • Fixed logistic and construction radius visualization sprites would ignore tint. more

    Scripting


    • Fixed setting technology::researched wouldn't research all levels of a formula based technology. more
    • Fixed it was possible to add gui element with same to the same parent name more than once. more
    • Fixed the custom camera widget wouldn't render the correct entities when switching the surface it was rendering for. more
    • Fixed LuaTrain::schedule would allow an invalid current schedule record. more
    • Added LuaEntityPrototype::mining_speed, mining_power, energy_usage, max_energy_usage, normal_resource_amount, infinite_depletion_resource_amount, attack_parameters read.
    • Added LuaLampControlBehavior::color read.
    • Added LuaRailSignalControlBehavior::red_signal, orange_signal, green_signal, close_signal, read_signal, circuit_condition read/write.
    • Added LuaEntityPrototype::mineable_properties fluid_amount, required_fluid, mining_trigger, effectivity, consumption, friction_force, braking_force, tank_driving, rotation_speed, turret_rotation_speed, guns, speed, speed_multiplier_when_out_of_energy, max_payload_size, energy_per_move, energy_per_tick, max_energy, min_to_charge, max_to_charge properties, and building_grid_bit_shift.
    • Added LuaBurner::fuel_category read.
    • Added LuaBurnerPrototype.
    • Added LuaControl::mine_entity().
    • Added LuaEntity::text read/write.
    • Added read/write support for flying text color through LuaEntity::color.
    • Added LuaTrain::get_fluid_count(), get_fluid_contents(), remove_fluid(), insert_fluid(), and clear_fluids_inside().
    • Added LuaGameScript::check_prototype_translations() - a way to check if all expected prototypes have valid translations.
    • Changed LuaEntityPrototype::mineable_properties "miningtime" -> "mining_time" and "miningparticle" -> "mining_particle".
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-16 12:42:26 CET ] [ Original post ]

    Friday Facts #190 - The quiet days

    Hello, it's been a rather quiet week here in the office, with all of the teams attention towards fixing bugs and other minor issues.

    Realism vs. Simplicity


    With the development of the nuclear power, there were some associated UX changes that were made in relation to the boilers and steam engines. One decision related to this was to show the hot water as 'steam' in the pipes. It was decided that internally the steam would just be water, and the name and look of the fluid would change depending on its temperature. While it wasn't so simple to implement, the logic of changing the look of a fluid based on its temperature wasn't anything outside the realms of possibility. Thus soon we had hot water that looked like steam, along with a nice animation and icon from the GFX department.
    However once 0.15 was released, some complications arose that we had not anticipated. The main issue was that while it looked different in the pipes, when you read the contents of a storage tank, it would tell the circuit network that it contains water. Additionally the circuit network had no signal to represent steam, so easily settings conditions for managing nuclear power setups was not possible.
    This design choice thus begins to creep into the realm of 'inconsistency'. By trying to both look like a different fluid, while not acting as one, the steam implementation was in an impossible situation. There were 2 proposed solutions to this:
    • Revert steam to showing as just hot water.
    • Make steam its own fluid.
    In the end we decided that reverting it back to hot water would be a step backwards in term of clarity and design. The visual distinction of steam was a very useful indicator to the player. By making it a separate fluid, I could also complete my vision for the coal liquefaction recipe, by making it require steam as an ingredient.

    Achievement changes


    We are quite surprised sometimes by the bug reports, and the surprisingly logical nature of many of these issues. Due to our deterministic gameplay requirements, a replay of a game has to replicate exactly what actions the player has performed. Any changes in the gamestate between the game and the replay will make the replay invalid. So of course the conclusion to this, is that if you watch a replay of someone earning an achievement, you will also earn that achievement. While Kovarex was on the topic of fixing this achievement related issue, another that has been affecting many players was brought up. When a player joins a multiplayer game, no matter how long he has been on that server, he will earn all the achievements earned in the map. This was especially detrimental to new players, who might just want to have a peek at another factory, before diving in and experiencing the game fully themselves. This could potentially ruin a lot of the fun for achievement hunters. Now when you are playing on a multiplayer server, you will only earn achievements if you have played more than 50% of the total map time.

    Developers needed


    We have had to say our partings to Kuba (Blue Cube) as of last week, he has decided to leave the project after 5 years to work on his own ideas. Currently he's spending his time working on a open source CNC application, and no doubt he will be visiting the office every so often to play with our 3d printer. Due to this, along with some other personnel changes, we currently have several open desks at our office here in Prague. If you or someone you know is interested, please refer to our job listing for more information. As always come to our forums and let us know what you think.


    [ 2017-05-12 17:55:08 CET ] [ Original post ]

    Factorio 0.15.10 released

    Changes


    • Added rail block debug visualization.
    • Increased maximum wire distance of all circuit connectable entities from 7.5 to 9.
    • Steam is now internally a separate fluid from hot water.
    • Coal liquefaction recipe now requires steam instead of water.
    • Terrain, shadow and smoke sprites are sorted into separate sprite atlases in attempt to optimize GPU memory access during rendering.

    Graphics


    • Added burner mining drill in high resolution and replaced the normal resolution version.

    Bugfixes


    • Fixed speed-module-3 recipe typo. more
    • Fixed downgrading underground belts by fast replace would not work for even if output piece was close enough. more
    • Fixed that robots trying to repair each other wouldn't work correctly. more
    • More understandable description current level of technologies that have multiple levels merged into one slot in the technology gui.
    • Fixed crash that would happen when loading old modded saves in vanilla Factorio. more
    • Fixed that it wasn't possible to fast-transfer blueprints to other players. more
    • Fixed that hitting rocks with vehicles made no sound. more
    • Fixed blueprint preview icons scaling and size to be consistent across all places they're shown. more
    • Fixed that you couldn't delete blueprints from your trash slots. more
    • Fixed that storage tanks used 4 directions although visually only showed 2 so they would conflict in blueprints. more
    • Fixed crash when loading blueprint storage while also migrating save files. more
    • Fixed a useless error when locale isn't correct for a scenario. more
    • Fixed possible desync related to inserter circuit network stack size control.
    • Fixed that multiple passengers in a train could result in erratic behavior when trying to drive. more
    • Fixed that manually inserting the satellite into the silo when auto-launch is enabled wouldn't launch the rocket. more
    • Fixed crash when killing yourself with your own weapon. more
    • Fixed F12 might freeze or crash the game. more
    • Fixed circuit network controlled rail signal sometimes not going red when building rails. more
    • Fixed crash when starting tutorial at the same tick as autosave starts. more
    • Fixed that it wasn't possible to scroll the active blueprint in a blueprint book if the scroll bar was visible. more
    • Fixed crash when exiting some modded games. more
    • Fixed that Factorio wouldn't keep file permissions when saving a map. more
    • Fixed that the blueprint library wouldn't remember the player filter after opening a book. more
    • Fixed that player names in the blueprint library weren't sorted. more
    • Fixed the blueprint book tooltips would flicker when your inventory changed. more
    • Fixed desync when catching up.
    • Fixed desync when adding/removing blueprints to blueprint books in some cases. more
    • Fixed some crashes related to loading invalid combinator parameters. more

    Modding


    • The game will now detect when joining a multiplayer game if any mods you're using are broken such that joining the game could result in desyncing.
    • Fixed that exiting the mod settings GUI without changing anything would incorrectly think you changed settings in some cases. more
    • Fixed crash when loading mods control.lua produces an error. more
    • Added favourite server icon to utility sprites. more
    • Added a global table "mods" - a mapping of mod name to mod version available during the prototype loading stage.

    Scripting


    • Fixed some missing Lua docs and added information about the settings stage to the data life cycle. more
    • Fixed crash when trying to create stickers on entities that don't support them. more
    • Fixed that LuaGuiElement::surface_index was using 0-based indexing. more
    • Fixed that LuaEntity::graphics_variation was using 0-based indexing. more
    • Fixed that LuaItemStack::active_index was using 0-based indexing. more
    • Fixed rendering of layered icons in custom GUI. more
    • Added "item" and "tags" to the robot built entity/tile events.
    • Added LuaEquipment::burner read.
    • Added LuaEntityPrototype::crafting_categories read.
    • Added support for setting 'tags' and 'custom_description' when making items through Lua.
    • Added LuaBurner::burnt_result_inventory read.
    • Added LuaInserterControlBehavior stack size read/write.
    • Added LuaTrainStopControlBehavior enable/disable conditions.
    • Added LuaTransportBeltControlBehavior enable_disable, read_contents, read_contents_mode read/write.
    • Added LuaTrain::id read.
    • Added LuaEntityPrototype::supply_area_distance read.
    • Added LuaEntityPrototype::max_wire_distance read.
    • Added LuaEntityPrototype::max_circuit_wire_distance read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-10 17:40:14 CET ] [ Original post ]

    Factorio 0.15.9 released

    Bugfixes


    • Fixed crash when opening the train GUI while in the train.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-05 20:28:20 CET ] [ Original post ]

    Friday Facts #189 - Specifying the 1.0

    Hello!

    Bug hunting


    Same as the previous week, we have spent most of our time bug hunting. This time, the disparity between how stable the game felt in our playtesting, and the current 240 bug report count is the biggest I have felt. I guess that this is the tax of having quite a lot of players playing the game, so we just go there and fight these one by one until it is done.

    Specifying the 1.0


    The plan is to finish the 1.0 (and by that I mean the stable version of 1.0) this year. There is just one big or two smaller releases ahead of us before we reach that. This means, that this is the time to decide what stays and what goes for 1.0. The overall plan is to mainly polish and finish what we have so far, with just little feature additions. We went through most of our Trello cards yesterday (And there are LOTS of them) and sorted this out, while the most asked question was: "Is this a new feature?", and the most frequent reaction to "Yes" was to delete the card. The only currently planned gameplay features are the artillery train and (probably) the spidertron.

    Balancing changes


    I was sick the last week so I decided to do one more playthrough of Factorio. It made me start a discussion in the office which led to additional balance tweaks: Altering the science pack recipes The overall feeling was, that we might have gone little bit too far with all the science pack extensions, so I wanted to make it slightly less expensive. So we changed it that the science pack 3 (the blue one) requires mining drill instead of assembling machine now. The reason for it is, that we usually tend to automate mining drill production at this stage anyway as it crafts slowly and is needed in large quantities. The point of the science packs usually is to guide the player to automate things that he should have automated anyway, and this seems like more natural choice and part of the semi-hidden message of: "Oh, you want to automate blue science pack, it costs a lot more iron that the previous ones, so you will probably have to mine more, so it is a good time to automate the mining drill production.". The second change is the the pumpjack ingredient in the production science pack (the purple one) being switched with the assembling machine 1 previously used in the blue science pack. The reason for this, is that pumpjacks are not used in higher quantities and people rarely automate it unless it is needed for the science packs. While assemblers are more likely to be automated anyway, so it not only reduces cost, but the average factory complexity (by a very small margin). Decreasing the crafting time of several things The crafting time of Oil refinery, pumpjack, chemical plant and roboport have been decreased. The reason for high crafting time is almost always to give bigger motivation to automate that specific item. But with pumpjack for example, I just craft it when I need it on place, and it just slows the game down. The slowdown is not enough push to automate the production, so the only effect is the extra time to wait for crafting which makes the game just less fun in my view. Fast and express belt length increase This came up when reviewing one of the trello card for possible underground belt length research. It sounds nice until you realize how much problems would it cause with blueprints. Blueprint made with higher research of length wouldn't work with lower one. So we decided to go with the simple way of increasing based on the belt level.

    Blueprint based gameplay


    This was just an idea, but the more I think about it, the more I like it. Special mode where you start with power armor MK2, personal roboports and construction robots that have the speed and cargo researches finished. Some additional starting items like extra miners or stone furnaces might be also added. The map seed would be predefined, so the map would stay the same every time you start in this mode. The goal would be to try to finish the game as fast as possible this way. What I Imagine, is that people might have set of blueprint books for different stages of the game prepared, they could swiftly change from starting setups, to middle game setups. They could expand the production very fast as it might have been planned out already by few repeated playthroughs. As the manual labor value would be diminished the return on investment of everything would be the king. The great thing about this idea is, that it is very easy to implement, it is just question of adding very simple custom scenario. As always, let us know if you have any thoughts or feedback on our Forum.


    [ 2017-05-05 19:50:32 CET ] [ Original post ]

    Factorio 0.15.8 released

    Changes


    • New Supply challenge map.
    • Circuit network-based inserter stack size overrides now take effect immediately instead of waiting until the inserter has moved something.

    Bugfixes


    • Show 0.7% in the uranium processing recipe instead of 0.0 for uranium 235. This generally works for any recipe that gives less than 1 of anything.
    • Don't draw player names on the map that is not in range of player or radar on the zoomed in map.
    • Fix some ores with negative values in Tight spot level 04. more
    • Fixed inserters couldn't insert fuel into locomotives. more
    • Fixed random inaccessible map area in Beta campaign level 04. more
    • Fixed various inserter GUI bugs. more
    • Fixed train station tutorial relied on specific train schedule state. more

    Balancing


    • Changed iron gear wheel price of fast and underground belt from 20->40 and 40->80 to even out the bigger length.
    • Fix that biters would sometimes stop and go to sleep during an attack. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-05 18:06:17 CET ] [ Original post ]

    Factorio 0.15.7 released

    Balancing


    • Changed production science pack recipe to require assembling machine 1 instead of pumpjack.
    • Changed science pack 3 to require electric mining drill instead of assembling machine 1.
    • Changed crafting times: Oil refinery 20->10 Pumpjack 10->5 Chemical plant 10->5 Lab 5->3 Roboport 15->10
    • Reduced the mining time of the storage tank from 3 seconds to 1.5 seconds.
    • Increased the mining time of the reactor from 0.5 seconds to 1.5 seconds.
    • Increased the underground belt length (basic, fast, express) from 5,5,5 to 5,7,9.

    Changes


    • When a connection is refused the username is included in the log message. more
    • Copying entity settings from a disconnected entity will no longer disconnect circuit wires. more
    • Trains in manual mode now have twice the penalty and trains in manual mode without a player in them have 2.5 times the penalty.
    • Reactors produce used up fuel cell when it is completely consumed instead of at start. more
    • Reverted flamethrower turret liquid consumption change from 0.15.5. Instead of 30/s it will use 3/s.
    • Flamethrower turret no longer shoots in its prepare state. more
    • /color command defaults alpha (the 4th parameter) to 255 (instead of 0) if not specified. more
    • Reduced default requester chest paste multiplier for nuclear reactor recipe to 1 and for centrifuge recipe to 2. more
    • Inserters will no longer take fuel from locomotives and instead will take the burnt result items if the locomotive fuel uses that system.

    Bugfixes


    • Fixed that clicking locomotive from zoomed in map view would change color (and show fuel) for some other locomotive on the train more
    • Fixed that construction bots could repair vehicles from very far. more
    • Fixed that rocket silo or other GUIs would obscure finished-game dialog. more
    • Fixed that boiler could output a different fluid than its input. more
    • Fixed that the inserter would sometimes report bad values to the circuit network. more
    • Fixed pump recipe description having wrong pumping speed. more
    • Fixed wrong error message when loaded headless save file doesn't exist more
    • Fixed the "Input action fragment is missing" crash that would sometimes happen due to packet loss. more
    • Fixed crash when resizing the game window while having an assembling machine level 1 GUI open. more
    • Fixed alternative zoom controls would do nothing in map editor. more
    • Fixed some cargo wagon spritesheets were offset by 1 frame. more
    • Fixed that it was hard/not possible to select the character corpse over some entities. more
    • Fixed that the blueprint book GUI would scroll to the top after every click. more
    • Fixed crash when trying to disconnect non circuit connectible entities using Lua::Entity::disconnect_neighbour. more
    • Fixed that calling Lua::Entity::disconnect_neighbour would sometimes disconnect more wires than it should.
    • Fixed mod settings corruption when removing mods that contained mod settings. Note: this will reset all mod settings. more
    • Fixed inconsistent selection of resource patches on the map. more
    • Fixed GUI sizing when resetting mod settings. more
    • Fixed that the blueprint book GUI would scroll to the top after every click. more
    • Fixed that dropping a blueprint onto a book icon in the library GUI would drop it in the top level instead. more
    • Fixed that the blueprint library would sometimes stop opening books. more
    • Fixed GUI scaling problems with the assembling machine GUI. more
    • Fixed desync related to the on_selected_entity_changed event. more
    • Fixed that the atomic bomb shooting speed cooldown didn't work. more
    • Fixed the constant combinator GUI when the constant combinator name was larger than the rest of the GUI. more
    • Fixed that the reactor didn't show fuel in the description. more
    • Fixed making blueprints of requester chests with "set requests" would copy the current requests into the blueprint. more
    • Fixed that deleting saves with the delete key key wouldn't maintain focus on the saves list. more
    • Fixed crash when mining rails while having the "show rail paths" debug option enabled. more
    • Fixed infinite loop when migrating entities from an unrelated type to a roboport type. more
    • Fixed that the technology multiplier didn't apply on infinite research. more
    • Fixed filtering server list for games with mods. more
    • Fixed mod version checking for automatic mod download. more
    • Fixed flamethrower turret would not shoot last single shot worth of liquid. more
    • Fixed crash when exiting server list more
    • Fixed "Right mouse button to open" in opened armor. more
    • Fixed that the blueprint library wouldn't use scroll bars for shared blueprint books. more
    • Fixed that resource patches in unexplored areas could be examined on the map.
    • Fixed rail ghosts could not be placed over ghosts of enemy force. more
    • Fixed the sulfuric acid fluid icon. more

    Modding


    • Icons are now required to have correct size (which can be overridden by icon_size property). more
    • 32x32px for entity, fluid, item, item-group, recipe, technology, virtual-signal
    • 128x128px for achievement, tutorial
    • If icon path references base mod, technology icon is expected to be 128x128px and item-group icon 64x64px.
    • In near future, we may remove default sizes and require icon_size to be always specified.
    • It is no longer possible to teleport any rolling stock or train stop. more

    Scripting


    • Fixed LuaChunkIterator could become invalid and crash the game if used. more
    • Added LuaPlayer::mod_settings read - the runtime player mod settings for the given player.
    • Added LuaEntity::temperature read/write - the temperature of entities that use the heat energy source type as well as reactors and heat pipes.
    • Added LuaEntity::get_burnt_result_inventory.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-05 12:43:47 CET ] [ Original post ]

    Factorio 0.15.6 released

    Changes


    • Increased roboport construction range to 55 (110x110 area) to make roboports able to build each other without interconnecting their logistic areas, and not break when there are obstacles like trees or rocks.

    Bugfixes


    • Fixed centrifuge glowing for one frame each time inserter drops something. more
    • Fixed biters expansion was biased towards northern part of the map. more
    • Fixed blueprint preview splitter not bending nearby belts correctly. more
    • Fixed items on ground were not cleared in tightspot campaign. more
    • Fixed that mining drills wouldn't pull in enough acid to continue mining. more
    • Fixed that you could complete some advanced signal tutorial stages by blocking trains. more
    • Fixed that nuclear fuel reprocessing was used to calculate raw ingredient requirements. more
    • Fixed that you could input invalid value to PvP config. more
    • Fixed crash when changing force of turret ghost. more
    • Fixed inserters would grab items off belts and try to drop them onto rails after the train left. more
    • Fixed inserters would rest with their hand above the center of a splitter. more
    • Fixed desync caused by heat pipes. more
    • Fixed crash when trying to edit mod settings after joining a paused multiplayer game. more
    • Fixed removed decoratives were migrated as big-ship-wreck-grass instead of being deleted from map. more
    • Fixed input underground belt fast replace would also replace output piece even if input changed direction. more
    • Fixed combinators continuing to output signals when parameters are cleared or when disconnecting feedback wire. more
    • Fixed programmable speaker continuing to make sounds without a wire connected. more
    • Fixed that it wasn't possible to scroll with the mouse wheel in the mod settings GUI. more
    • Fixed updater would fail if Factorio was in folder with name containing non-english characters. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-05-02 12:34:20 CET ] [ Original post ]

    Factorio 0.15.5 released

    Bugfixes


    • Fixed crash when setting character trash slots through script while having the character GUI opened. more
    • Fixed crash on joining a multiplayer game if the "use different mod settings per save" was disabled. more
    • Fixed blueprint with roboports wouldn't draw roboport connections. more
    • Fixed crash when building rails in specific setups while trains are reserving signals on the rails being changed. more
    • Fixed when changing graphical variation of a tree from script or in map editor. more
    • Fixed flamethrower turret was using 10x less fluid than it should.
    • Fixed opening item GUI wasn't rebindable more
    • Fixed burner inserters would try to fuel themselves with fuel they couldn't use. more
    • Fixed crash when deleting chunks in some instances. more
    • Fixed one direction of hazard concrete had no walking sounds. more
    • Fixed rare crash when getting killed by the locomotive you had opened. more
    • Fixed that right clicking the map view buttons would change the option but not update the button. more
    • Fixed the generate-map settings wouldn't be saved when switching to the mod-settings through the generate map GUI. more
    • Fixed crash when interacting with the map view buttons in some cases. more
    • Fixed crash when mousing over entities in some rare cases. more
    • Fixed crash when trying to mine tiles from the zoomed-to-world view. more
    • Fixed crash when editing speaker parameters in the map editor. more
    • Fixed that train stops wouldn't show the correct name when changed remotely. more
    • Fixed crashes related to electric pole/accumulator removal when migrationg saves from 0.14 into 0.15. more
    • Fixed rail signals built by robots would frequently lead to the signals not connecting properly. more
    • Fixed GUI layout problems in the rocket silo GUI when adding/removing productivity modules. more
    • Fixed items on belt flickering when occupying same position. more

    Scripting


    • Fixed module inventory insert() didn't work for assembling machines. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-30 11:07:21 CET ] [ Original post ]

    Factorio 0.15.4 released

    Changes


    • Added /permissions reset to reset all permissions to default.
    • Steam and water content of fuild wagons are now shown separately in locomotive tooltip.
    • Removed the "minimum chunks between new bases" map generation setting because it wasn't doing anything.
    • Re-added custom /color support through /color r g b a.
    • PvP: Added a biter easing option to prevent excessively large bases close to team starting areas.

    Bugfixes


    • Fixed crash when building rails while a train is currently reserving some of the signals. more
    • Fixed that you could set the inserter stack size over the researched maximum by sending negative numbers with the circuit network. more
    • Fixed combinators continuing to output signals after disconnecting the input. more
    • Fixed blueprint would reference force it was created on and crash in rendering if that force no longer existed. more
    • Fixed that names of books stored in the blueprint library wouldn't be preserved after save and load. more
    • Fixed supply scenario would sometimes show the next level button in error. more
    • Fixed the rocket silo wouldn't copy the "auto-launch" option in blueprints.
    • Fixed Sulfuric Acid recipe using 10 times less water. more
    • Fixed that dropping blueprints into a book inside the library would sometimes drop the wrong blueprint. more
    • Fixed crash when changing mod settings runtime while in a multiplayer game. more
    • Fixed that opening the blueprint library after calling game.remove_offline_players() would crash the game. more
    • Fixed that --start-server wouldn't find the save file when given just a name without the .zip suffix. more
    • Fixed that it was possible to export a blueprint book into another blueprint book. more
    • Fixed that it was possible to have the same blueprint multiple times in the library. more
    • Fixed that it was possible to grab a blueprint from the library whilst also holding a deconstruction planner in hand. more
    • Fixed desync when moving mouse over areas outside of radar range in zoomed-to-world view. more
    • Fixed crash when leaving the technology price multiplier blank. more
    • Fixed crash when removing modded rails during save migration. more
    • Fixed lab without power would be still rendered as active. more
    • Fixed several instances of the "laser user" field not getting updated. more
    • Fixed rocket silo would not increment its "products finished" count when finishing rocket. more
    • Fixed landmines would last forever when friendly fire was disabled. more
    • Fixed possible crash when closing Factorio during loading. more

    Modding


    • Blueprints/books/deconstruction item prototypes with the "hidden" flag will no longer show up in the blueprint library. more
    • Added missing lua docs index section for settings and fixed some wording. more

    Scripting


    • Fixed assigning invalid index to LuaEntity::graphics_variation would cause crash. more
    • Fixed setting LuaItemStack::blueprint_icons didn't work correctly. more
    • Fixed teleporting entity with rectangular bounding box would reset bounding box to north orientation and cause desync. more
    • Added LuaEntity::products_finished for crafting machines.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-29 18:27:12 CET ] [ Original post ]

    Friday Facts #188 - Bug, Bug, Desync

    0.15 release


    I would be surprised if you are reading this blog and didn't know that we released the 0.15 experimental this Monday. After more than 6 months of work and effort put in, we are really happy to finally see everyone playing and enjoying it so much. We'd like to thank you all for the feedback and suggestions we've received, and for being patient with us when we couldn't keep to our plans. The whole team here is committed first and foremost to making as great a game as possible. While the delays were not insignificant, we really hope we have met your expectations and delivered on what we have promised. Initially we had a small issue with our new config system and a script we use for Steam cloud syncing, leading to the game looking for a value which was no longer there. Thankfully HanziQ solved the problem in short time, and we released 0.15.1 just 3 hours later. The rest of the week ran pretty smoothly with the typical bugfixing, while the majority of the GFX department takes a well deserved break. If you are interested in seeing an overview of all the new features, you have a choice of British or American flavour, provided by MangledPork and Xterminator respectively: https://www.youtube.com/watch?v=CTSCrQlAugs https://www.youtube.com/watch?v=MONGUN1oL0A

    Help us fix desyncs!


    As you may or may not know, our multiplayer code uses Deterministic Lockstep to synchronize clients. "Deterministic lockstep is a method of synchronizing a game from one computer to another by sending only the inputs that control that game, rather than networking the state of the objects in the game itself". You can read more about that in this article. Simply put, what it means is that all of the players need to simulate every single tick of the game identically. If any computer does something ever-so-slightly different, a desynchronization (desync) occurs. That means that that player has to reconnect and re-download the map from the server, in order to get back in sync with everyone else.Unfortunately making a fully deterministic game is not easy, so you will notice desyncs, especially at the beginning of a new experimental release such as this one.When a desync occurs, the game generates a desync report. This report contains the game state from the server and the client and by looking at the differences, we can try to determine what went wrong. So this is where you come in. Next time when you are in a multiplayer game and you experience multiple desyncs, go to %AppData%/Factorio/archive (on Windows). There you will find files that look like this: desync-report-2017-04-28_15-46-04.zip. Take the relevant one and report it in our bug report forum. You can upload it directly to the forum or share it any way you like (dropbox, google drive, or you own server). Simply uploading the desync report won't help too much so try to add as much context and details as possible, such as what you and other players were doing as the desync occurred, especially if the desync happens often. Finding a way to reproduce the desync, such as "load this save, wait for friend to connect, click this inserter and desync occurs", together with a desync report, means we can hopefully identify the cause and fix it very quickly. We will try to improve how the game behaves when a desync occurs, and possibly make uploading of report easier, but for now fixing the major bugs in 0.15 is a priority.Meanwhile please be patient with us, this is an experimental release of an early access game, and we still need your help to make the game better. As a reminder, we use our forum as a bug tracker, so please report any bugs on our bug report forum. Reporting bugs in other topics, on the steam forums, in private messages or emails will mean they won't get prioritized, or they can even get lost.

    Community spotlight


    I think we all expected that with the introduction of the Programmable speaker, it would open a whole new category of crazy combinator contraptions. Not even a whole day had passed before Tritexio posted this wonderful rendition of Portal's Still Alive: https://www.youtube.com/watch?v=K1oRQX8xQeg As usual, let us know what you think at the forums.


    [ 2017-04-28 16:12:08 CET ] [ Original post ]

    Factorio 0.15.3 released

    Changes


    • Wave defense: Units won't spawn if there are more than 500 already on the map.
    • Wave defense: Added a 'Unit bounty bonus' upgrade.
    • Removed the ability to set /color using RGB values.
    • Wave defense: Added Uranium to the map.
    • "Disable all mods" option in mod load error dialog doesn't disable base mod anymore.
    • Changed stack-split so "splitting" a stack of 1 still transfers the 1 item. more
    • Change submachine stack size to 5. more
    • Blueprints, blueprint books and deconstruction planners can be destroyed by clicking the trash can icon in their GUIs. Clearing a blueprint is still possible via the Shift+Right Click shortcut.

    Bugfixes


    • Fixed the fluid usage description for the steam engine would flicker when holding the steam engine in the cursor. more
    • Fixed that assembling machines would think the fluid barreling/unbarreling recipes could be used to calculate base ingredients for recipes. more
    • Fixed performance problems when opening the blueprint library GUI when the map has a large number of players. more
    • Fixed crash related to connection attempts from players with mods with mod settings. more
    • Fixed getting "No map setting instance" error when loading faulty mod instead of actual error. more
    • Fixed entering tutorial would remove scenario control script from current game. more
    • Fixed crashes related to saves with migrated circuit network signals. more
    • Fixed numeric inputs would block all keys instead of just numbers. more
    • Fixed ore field amount stuck to cursor when in technology view. more
    • Fixed crashes related to migrated saves with circuit network signals. more
    • Fixed that train station tutorial would not progress if you removed the train wait condition. more
    • Fixed crash when changing mod setting prototype types. more
    • Fixed the refinery flame would freeze when using the coal liquefaction recipe and the machine didn't have any coal. more
    • Fixed fluids would be counted incorrectly for production stats when a pumpjack was placed on an oil well with a modded extremely high yield. more
    • Fixed the trains GUI wouldn't scale correctly. more
    • Fixed you could select entities in the zoomed-to-world view outside radar coverage. more
    • Fixed prompt about disabled base mod would not show up. more
    • Fixed crash when train was destroyed while hovering over it in map view. more
    • Fixed that the team production starting lobby had some uranium ore. more
    • Fixed hovering over very large resource patch in map view would crash the game. more
    • Fixed the "don't mine resources if mining starts with non-resources" logic. more
    • Fixed crash when the preview picture can't be saved for a save file. more
    • Fixed crash when trying to filter opened other players quickbars. more
    • Fixed crash when setting resource minimal yield above the normal yield. more
    • Fixed the tab complete logic for the /mute-programmable-speaker command. more
    • Fixed that you could only build blueprints in the zoom-to-world by click and drag.
    • Fixed script error in basic train tutorial. more
    • Removed redundant recipe unlock in trash slot technology. more
    • Fixed inserter stack size override sometimes being lost when importing a blueprint.
    • Fixed crash that would occasionally happen after deleting a book from the blueprint library. more
    • Fixed fluid could flow into the heat exchangers output fluidbox. more
    • Fixed that inserters would try to put stuff into the rocket silo result inventory. more
    • Fixed some invalid map exchange strings would crash the game. more
    • Fixed train stop would not output content fluid wagons to circuit network. more
    • Fixed locomotive tooltip would not show contents of fluid wagons. more

    Modding


    • Prototype names are not allowed to contain the '.' character.

    Scripting


    • Fixed typo in defines.shooting.shooting_selected (was "shooting_seleted"). more
    • Fixed type in defines.control_behavior.type.train_stop (was "train-stop"). more
    • Fixed the custom camera widget was using 0 based indexing for the surface_index parameter. more
    • Added missing control behavior types to defines (wall, mining_drill, programmable_speaker). more
    • Added LuaTrain::fluid_wagons read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-27 19:14:54 CET ] [ Original post ]

    Factorio 0.15.2 released

    Changes


    • Reduced wave defense biter power increase as more players join to reduce pathfinding performance drain. more
    • Tweaked the biter and uranium ore settings of the 'Rail world' preset.
    • Changed mining drill fluidbox to allow fluid to flow to pipes without the use of pumps.
    • Changed the "sync mods with save" button to support disabling mods a save file wasn't using.
    • Computers with 2GB or more video memory and 8GB or more RAM will default graphics quality to high.
    • Selecting high sprite quality in graphics options will show warning if computer doesn't have enough video memory.

    Bugfixes


    • Fixed tightspot campaign debt calculation. more
    • Fixed basic train tutorial rail setting offset. more
    • Fixed story script copying of assembling machines without recipes. more
    • Fixed crash when cycling through empty blueprint book. more
    • Fixed crash when the wrong fuel type was put into a burner equipment. more
    • Fixed LuaFluidBox::get_capacity() didn't work when the fluidbox was empty. more
    • Fixed LuaFluidBox::get_capacity() used 0-based indexing. more
    • Fixed blueprints with circuit wires would crash in some instances.
    • Fixed the map would render black if the game was resized immediatly after loading a large save file.
    • Fixed that the technology cost multiplier allowed a value of 0.
    • Fixed crash when circuit connector sprites aren't defined for a given entity. more
    • Fixed crash when inactive mining drills are disconnected from the circuit network. more
    • Fixed that the programmable speaker wouldn't save settings correctly when exported as a string in blueprints. more
    • Fixed crash when the base mod is disabled and no other mod defines map-settings. more
    • Fixed fluids consumed in the mining drill for mining resources didn't get counted in fluid production statistics. more
    • Fixed crash after display reset when browse multiplayer GUI was opened. more
    • Fixed browse games GUI sorting. more
    • Fixed wave defense GUI error. more
    • Fixed transport belt walking sound being controlled by the wrong volume slider. more
    • Fixed exiting tutorial would mute game sounds. more
    • Fixed crash when hovering over train with invalid path. more
    • The "Kovarex enrichment process" is no longer usable with productivity modules. more
    • Fixed alternative zoom would cause crash when bound to keyboard instead of mouse. more
    • Fixed that train stop would output circuit network signals with train contents regardless of it's parameters.
    • Fixed possible desync related to train stops connected to circuit network.
    • Fixed the exchange string wouldn't get cleared when clicking the reset button in the generate map GUI. more
    • Fixed crash when executing commands ban/unban/bans in a single player game. more
    • Fixed that opening another player's blueprint book though the /open command would crash the game. more
    • Fixed possible desync related to constant combinator filters.
    • Fixed tooltip delay option didn't work. more
    • Fixed that disconnecting of electric poles hid some of the electric network visualisations on the map. more
    • Fixed crash when closing window on splash screen. more
    • Fixed that steam wouldn't show up as steam in fluid wagons. more
    • Fixed inactivity wait condition didn't work properly with fluid wagon. more
    • Fixed name of train field in on_train_created event. more
    • Fixed the technology list scrollbar position reset after clicking any technology.
    • Fixed that LuaFluidBox would ignore the temperature field when setting a new fluid. more
    • Fixed crash when using recipes in furnaces that don't produce the exact amount of output items as the furnace output slots. more
    • Fixed crash when loading some older save files in 0.15 related to modded recipes. more
    • Fixed crash due to "Construction robot is in invalid state". more
    • Fixed game hang when connecting train in a loop more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-25 21:42:39 CET ] [ Original post ]

    Factorio 0.15.1 released

    Changes


    • Reduced noise effect on zoom-to-world view.

    Bugfixes


    • Fixed update error.
    • Fixed Steam config loading error.
    • Fixed headless not starting without server-settings.json more
    • Fixed the "reset" button in the generate map GUI wouldn't reset settings to the actual default values. more
    • Fixed that right clicking icon in the tag edit gui crashed the game. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-24 22:03:19 CET ] [ Original post ]

    Factorio 0.15.0 released

    Configuration


    • Configuration has been reset.

    Major features


    • Research overhaul. 4 new science packs: Military, Production, High-tech and space. > Space science packs are generating by launching a rocket. > Added infinite researches.
    • Nuclear power.
    • Blueprint library: Allows for keeping players blueprints between individual game saves and allows sharing blueprints in multiplayer games.

    Features


    • Map Interaction improvements: > Selectable map overlays: logistics networks, pollution, electric network, turret range, etc. > Train stations and trains can be opened by clicking them while in the map view. > Zoom to the world view from the map. It only shows parts of the map covered by radar or other players though. > Custom map markers can be added by the players.
    • Added wagon for transporting fluids. > One side of pump can connect to the fluid wagon, the other side has to be connected to something else.
    • When dying in multiplayer you leave behind a body with your items that slowly degrades.
    • Added infinite mining productivity research, each tier increases mining productivity by 2%.
    • Fuel type now affects vehicle acceleration and top speed.
    • Added coal liquefaction oil processing recipe.
    • Added Pipette Tool. Picks up items from your inventory used to build the currently selected entity. For resources it will select the fastest available resource extractor.
    • Mini tutorials. Small missions that explain some of the game mechanics. The current content is a testing sample and it only covers trains.
    • New scenarios: PvP and Wave defense.

    Graphics


    • Added high graphics quality option. In this settings the following list of things will have double resolution: Car, Trains, Rails, Rail signals, Train stop, Transport belts, Underground belts, Splitters, Pipes, Steam engine, Assembling machines, Oil refinery, Chemical plant, Mining drill, Furnaces, Resources
    • New ore graphics that makes the ore patches look less tiled.
    • Tweaked the GUI graphics.
    • Decreased the size of the recipe icons on assembling machine by 23%.

    Minor features


    • Fast in game interactions like fast inserting into/from entity and copy paste can be done by dragging instead of having to click one at a time.
    • Build-by-moving for electric poles now accounts for covering all unpowered entities on the way.
    • Fast replacing input piece of underground belt will also fast replace ouput piece if possible.
    • Added support for setting player color from the /color command using Lua syntax: {r=...g=...,b=...,a=...}
    • Added warning for situation when robots don't have storage place to put items in the logistics network.
    • Pumps show their direction in the detailed view.
    • Belts and pipes show correct connections when building a bluprint.
    • Technologies show the required science packs below the icons in the technology GUI list.
    • Technologies are sorted by the science packs needed.
    • Added /screenshot command - takes a screenshot of your current game screen.
    • Added support for equipment grids in the map editor.
    • The build rotation of each blueprint is remembered independently of the general item build rotation.
    • Infinite resource minimal yield is calculated using the initial resource amount and the prototype minimum yield.
    • Added optional filters to the deconstruction planner.
    • Copying from assembling machines to filter inserters will set the filters to the ingredients of the assembling machine recipe.
    • Combat robots and construction robots are maintained between sessions in multiplayer and when changing surfaces.
    • Added reverse-rotate.
    • Offshore pump and generator show pumping speed/fluid usage.
    • Alternative select with blueprints (shift + select) skips the blueprint setup GUI.
    • Mining rails is disabled if mining starts with trains or gates.
    • Toggle fullscreen using Alt + Enter.
    • Added "f"/"force" option to the /players command
    • Added Logistic networks GUI containing a list of all networks and contents with search (opened by the L key).
    • Added /open command - opens another players inventory if you're an admin.
    • Added /alerts command - configures alerts for your player.
    • Added /mute-programmable-speaker command - disables global sounds created by the Programmable Speaker entity.
    • Added /seed command - prints the map seed.
    • Added fluids to the production GUI.
    • Added kill statistics GUI.
    • Added enable/disable all mods button to the mod manager GUI.
    • Added automatic barreling support for all fluids.
    • Cargo wagons can have settings copied from any distance like Locomotives.
    • Added the ability to auto-launch the rocket.
    • Train stops can be colored like trains.
    • Fish can be collected by robots.
    • Extended map generator settings to include an advanced section.
    • Added map generator presets.
    • Show fog-of-war and radar radius when holding radar in cursor.
    • Seed for map creation on the headless server can be specified via map-gen-settings.json
    • Damaged items merge into one stack, the health of the stack will be the average of the items.
    • Added server whitelist support -- see the /whitelist console command.
    • Added /banlist command to operate on the banlist, in addition to the pre-existing /ban and /unban commands.
    • Added "favourite" feature in public games list: Keep your favourite servers at the top of the list.
    • Added /permissions command for managing permissions in a multiplayer game.
    • Added ability to change individual inserter stack size bonuses through GUI or the circuit network.
    • Added ability to export and import blueprints, blueprint books, and deconstruction planners as strings.
    • Server console will print JOIN and LEAVE messages for players joining or leaving.
    • Server console messages that aren't a part of the main log can be logged separately by running the server with the --console-log option.
    • Translatable energy units and SI prefixes (eg. "100 ГВт").
    • Furnaces and assembling machines show the amount of products finished.

    Balancing


    • Increased the rate at which resources grow with distance from the center by 50%.
    • Crude oil balancing: Halved the resource amount on the map Increased the minimum yield from 10% to 20% Halved the rate of depletion. Doubled the starting yield. Fixed that the mechanics of increasing richness with distance from start wasn't working for crude oil.
    • Increased module inventory size of Chemical plant and oil refinery from 2 to 3.
    • Increased logistic slot/trash slot count from 5 per level to 6 per level.
    • Removed processing unit from the modular armor and portable solar panel recipe.
    • Increased the pump pumping speed 4 times.
    • Reduced the plastic bar recipe requirement of petroleum gas 30 -> 20
    • Reduced the electric engine recipe requirement of lubricant 20 -> 15
    • Reduced the electric furnace recipe requirement of steel 15 -> 10
    • Reduced the steel furnace recipe requirement of steel 8 -> 6
    • Reduced the pumpjack recipe requirement of steel 10 -> 5
    • Reduced crafting time: Engine unit + electric engine unit: 20 -> 10 Pumpjack 10 -> 8 Advanced circuit 8 -> 6 Processing unit 15 -> 10 Cracking recipes 5 -> 3
    • Increased stack size of stone wall pipe and belts 50 -> 100
    • Increased the maximum power production of steam engine from 510kW to 900kW
    • Doubled the heat capacity of water from 0.1kJ per degree per liter to 0.2kJ.
    • Increased the substation supply area (16X16 to 18X18) and wire reach (16 to 18).

    Combat Balancing


    • Player regains health at a much higher rate, but only after being out of combat for 10 seconds.
    • Discharge defense equipment pushes back, stuns and damages nearby enemies when activated by the remote.
    • Decreased the size of Discharge defense equipment from 3x3 to 2x2.
    • Greatly increased the damage of Personal Laser Defense Equipment.
    • Flamthrower gun has a minimum range of 3.
    • The flames created on ground from the flamethrower significantly increase in duration and damage when more fuel is added to them by firing at the same spot.
    • Increased fire resistance of biter bases.
    • Increased the health of player non-combat buildings.
    • Increased player health from 100 to 250.
    • Increased collected amount and effectiveness of Fish.
    • Increased the damage, range and health of biters worms.
    • Decreased health and resistance of Behemoth biters.
    • Doubled the stack size of all ammos.
    • Tweaked the cost and crafting time of some ammos.
    • Increased the damage of most player ammos. Greatly increased the damage and fire rate of Rockets and Cannon Shells.
    • Increased the collision box of Cannon Shells.
    • Increased Tank health and resistances.
    • Added research for Tank Cannon Shells damage and shooting speed.
    • Tweaked research bonuses and added more end-game research for military upgrades.
    • Greatly increased the damage of Mines. They also stun nearby enemies when they explode.
    • Added uranium rounds magazine and uranium cannon shells.
    • Added flamethrower to the tank.
    • Other minor changes.

    Optimizations


    • Improved performance of mining drills in general and significantly improved performance when mining drills get backed up.
    • Improved performance when tiles are changed due to migration/mod removal.
    • Significantly improved GUI performance for inventories that required scroll bars.
    • Improved GUI performance in general.
    • Improved performance of radars scanning chunks.
    • Improved map generation speed and generation algorithm.
    • Improved game load performance when a large amount of mod data exists in the save.
    • Optimized graph rendering in production statistics window.
    • Improved regenerate entity performance.
    • Improved network map transfer performance.
    • Improved train performance when building/mining rail related entities.
    • Optimized memory requirements for storing tiles under concrete.

    Circuit Network


    • Significantly improved circuit network performance. Up to 25 times less CPU usage and 10% less memory usage.
    • Added the Programmable Speaker: it shows alerts and plays sounds based on circuit network signals. It can be used to make simple songs.
    • Train Stop can output the contents of the stopped train's cargo.
    • Train Stop can be disabled using the circuit network. Trains will skip disabled Train Stops, allowing simple train control.
    • Mining Drills can be turned on and off using the circuit network. They can also output the remaining expected resources.
    • Pumpjacks can be turned on and off using the circuit network. They can also output the current oil mining rate.
    • Added Modulo, Power, Left Bit Shift, Right Bit Shift, Bitwise AND, Bitwise OR and Bitwise XOR to the Arithmetic Combinator.
    • Added >=, <=, != to the Decider Combinator and Circuit Conditions.

    Changes


    • Boilers are more powerful and bigger and have dedicated output for the steam. Default boilers output steam at the fixed temperature 165.
    • Removed support of 32 bit systems.
    • Removed alien artifacts and alien science packs from the game completely.
    • Changed bounding box of burner mining drills and pumpjack, so it is possible to walk in between them.
    • Disabled loading of saves before 0.12.0 version (You can use 0.12 to load older saves and re-save them).
    • Changed "small pump" to "pump". Small pumps in old saves will be migrated but they will be misaligned and disconnected from pipes.
    • Train station adds 2000 tiles penalty when path finding, so trains try to avoid stations not related to their path.
    • The map seed is used to generate unique maps instead of just shifting the starting position.
    • The "decorative" entity type has been deprecated and replaced with the prototype type "optimized-decorative".
    • Multiplied all fluid amounts by 10.
    • All default map editor actions are now on left click.
    • Change fluidbox height and base level of boiler, steam engine and pump to improve fluid flow.
    • When the active train stop is removed trains will immediately leave the station if they're waiting at the station.
    • Changed the default comparison type for train conditions to "or".
    • Fast replacing splitters maintains the splitter contents on the new splitter instead of returning it to the player.
    • Research started/changed notifications are only shown when in multiplayer.
    • Crafting is now paused when the results can't be given to the player instead of spilling them on the ground.
    • Changed evolution from global to per force.
    • Disabled mining of vehicles other players are driving.
    • Decreased biter sounds volumes
    • Laser turret projectiles move much faster
    • Roboport construction area changed from 50 to 51 to allow roboports build/deconstruct each other even when there is a 1 tile gap between their logistic areas.
    • Restart button now uses map generation settings from currently loaded save.
    • New rocket silo GUI and visbility button for freeplay and sandbox scenarios.
    • Unified internal name of the 'flame-thrower' to 'flamethrower'.
    • Manual ghost building will mark trees/rocks for deconstruction similar to alt-building blueprints.
    • Trains are now always visible on the map, not only on chunks observed by radars or players.
    • Renamed "armor-making-2" to "heavy-armor".
    • Renamed "armor-making-3" to "power-armor".
    • Renamed "diesel-locomotive" to "locomotive".
    • Increased blueprint book size to hold 1000 blueprints
    • Blueprints, blueprint books and deconstruction planners are obtainable from the library GUI with no crafting cost.
    • Added combinator working, wire hold and wire place sounds.
    • Single player can be continued when you die.

    Modding


    • Fast cropping of sprite boundaries - it's no longer necessary to delete crop-cache.dat when existing sprites are modified.
    • Utility sprites are now defined fully in the core mod prototypes.
    • Added support for burner type generator-equipment.
    • Added "simple-entity-with-force" and "simple-entity-with-owner" entity types.
    • Boiler has now dynamically specified energy source (as inserter and similar).
    • Added support for mod settings: startup, runtime, and runtime-per-user.
    • Added commandline option --check-unused-prototype-data
    • Added a "nothing" technology modifier type with an "effect_key" property for script-based-effect research.
    • Redundant technology prerequisites are logged when verbose logging is enabled.
    • Changed technology prototype icon_size to default to 32 instead of 64.
    • In any instance an icon isn't 32x32 the icon_size property must be set to the actual size of the (square) icon.
    • Added the ability to have "friend" forces. Friend forces are given unrestricted access to buildings and won't be attacked.
    • Changed container entities to not scale info icons by default + added the optional prototype property "scale_info_icons" to enable scaling.
    • Added property "turret_base_has_direction" to turret entity types. Set it to true if you want to use turn_range property in turret attack_parameters. This property has to be true for any fluid-turret, because of pipe connections.
    • Added support for different recipe and technology complexity definitions.
    • Added "item-with-tags" item type that can store any basic arbitrary Lua data.
    • Lamps, roboports, walls, rail signals, and accumulators now accept any signal type (item, fluid, virtual).
    • "animation_speed" property of animation definitions has to be greater than 0.
    • Renamed smoke-with-trigger "action_frequency" property to "action_cooldown".

    Scripting


    • Added "by_script" to on_research_finished.
    • Added "cause" to on_entity_died - the entity that did the killing if available.
    • Added "recipe" to on_player_crafted_item.
    • Added "rocket_silo" to the rocket launched event.
    • Added 4th custom gui root position "goal", which is used in the objectives.
    • Added column_alignments settings in table style.
    • Added LuaBurner - readable off entities and equipment - the burner energy source for the entity.
    • Added LuaCircuitNetwork::network_id read.
    • Added LuaConstantCombiantorControlBehavior::signals_count read + set_signal and get_signal.
    • Added LuaControl::shooting_state, repair_state, picking_state read/write.
    • Added LuaCustomChartTag + LuaForce API to add/find them.
    • Added LuaDecorativePrototype.
    • Added LuaEntity::connect_rolling_stock and disconnect_rolling_stock methods.
    • Added LuaEntity::get_logistic_point().
    • Added LuaEntity::graphics_variation read/write for simple entities and trees.
    • Added LuaEntity::shooting_target read/write for turrets.
    • Added LuaEntity::stickers read. The stickers attached to a given entity.
    • Added LuaEntityPrototype::crafting_speed read.
    • Added LuaEntityPrototype::drawing_box, sticker_box, flags, remains_when_mined, additional_pastable_entities, allow_copy_paste, shooting_cursor_size, created_smoke, created_effect, map_color, friendly_map_color, enemy_map_color, build_base_evolution_requirement read.
    • Added LuaEntityPrototype::get_inventory_size().
    • Added LuaEntityPrototype::ingredient_count read.
    • Added LuaEntityPrototype::module_inventory_size read.
    • Added LuaEquipmentGrid::get_contents, shield, and max_shield.
    • Added LuaFluidBox::owner read + get_capacity and get_connections methods.
    • Added LuaForce::evolution_factor.
    • Added LuaForce::is_chunk_visible().
    • Added LuaForce::set_friend/get_friend.
    • Added LuaGui::children read.
    • Added LuaGuiElement drop-down type.
    • Added LuaGuiElement type "camera".
    • Added LuaGuiElement type "choose-elem-button".
    • Added LuaGuiElement::children read.
    • Added LuaGuiElement::clear to remove all the contents of the element.
    • Added LuaGuiElement::single_line and want_ellipsis for the CustomLabel type.
    • Added LuaInventory::entity_owner, player_owner, and equipment_owner read.
    • Added LuaItemPrototype fuel_category, burnt_result, fuel_acceleration_multiplier, fuel_top_speed_multiplier read.
    • Added LuaLogisticNetwork::provider_points, empty_provider_points, requester_points, full_or_satisfied_requester_points, and storage_points read.
    • Added LuaLogisticPoint - read access to logistic data about provider, storage, and requester points.
    • Added LuaPlayer::add_alert, remove_alert, and get_alerts.
    • Added LuaPlayer::mute_alert, unmute_alert, is_alert_muted, enable_alert, disable_alert, is_alert_enabled.
    • Added LuaPlayer::opened write.
    • Added LuaPlayer::opened_gui_type read.
    • Added LuaRandomGenerator.
    • Added LuaSurface::destroy_decoratives and LuaSurface::create_decoratives.
    • Added LuaSurface::find_logistic_networks_by_construction_area(..).
    • Added LuaSurface::get_trains() and LuaForce::get_trains().
    • Added LuaSurface::regenerate_decorative().
    • Added LuaTrain::has_path, path_end_rail, and path_end_stop read + recalculate_path().
    • Added LuaTransportLine::operator[] and operator#.
    • Added Mod gui script for easy consistent styling of mod buttons and frames within the game.
    • Added mouse info to the gui clicked event.
    • Added on_biter_base_built - fires when biters build bases during migration.
    • Added on_entity_renamed - fires when an entity is renamed either by the player or through script.
    • Added on_gui_selection_state_changed - fires when an item in a drop-down gui element is selected.
    • Added on_market_item_purchased - fires when a player purchases something from a market entity.
    • Added on_player_changed_force - fires when a players force is changed.
    • Added on_player_dropped_item - fires when a player drops an item that results in an item-on-ground entity.
    • Added on_player_mined_entity and on_robot_mined_entity events.
    • Added on_runtime_mod_setting_changed event - fires when a player changes runtime mod settings.
    • Added on_selected_entity_changed - fires when the selected entity for a player changes.
    • Added on_surface_deleted, on_pre_surface_deleted, and on_surface_created events.
    • Added on_train_created event.
    • Added optional "surface" to LuaForce::chart_all().
    • Added optional fields "durability" and "ammo" when using SimpleItemStack definitions.
    • Added optional parameter "return_item_request_proxy" to LuaEntity::revive. If true and revive creates item request proxy, the proxy will be returned as the third value.
    • Added player_index to the entity settings pasted events.
    • Added remote interface functions for the rocket silo gui: add_tracked_item, remove_tracked_item, get_tracked_items, update_gui
    • Added remote interface to freeplay and sandbox scripts.
    • Added support for full copying LuaItemStack in most places that take the SimpleItemStack type.
    • Added support for LuaFlowStatistics read on electric poles.
    • Added support for specifying the "max_range" of a projectile when created through create_entity.
    • Added support for turret orientation read/write through LuaEntity::orientation.
    • Added the ability for mods to register commands.
    • Added the ability to read item_requests from item request proxy entities as well as ghosts.
    • Added the ability to read reach distances off the player or character entity.
    • Changed less_then to less_than in lua GUI progress bar style specification. more
    • Changed LuaEntity::item_requests to match the docs format.
    • Changed LuaEntity::passenger to work with both character entities and players.
    • Changed LuaEntityPrototype::underground_belt_distance to LuaEntityPrototype::max_underground_distance and changed it to work on both underground pipes and underground belts.
    • Changed LuaForce::clear_chart() to take an optional surface to clear the chart for.
    • Changed LuaSurface::create_entity{name="item-on-ground", stack=...} to accept the same format for item stacks as the rest of the Lua API.
    • Changed the player built event to include the item name used to do the building if possible and include the tags from the "item-with-tags" item if possible.
    • Changed LuaPlayer::clean_cursor to return true if the cursor is now empty.
    • Expanded LuaStyle read/write property support.
    • Fixed LuaSurface::spill_item_stack didn't interpret "enable_looted" parameter properly. more
    • LuaForce::reset() now resets everything about the force to the default state.
    • Mod events are now fired by the mod dependency order instead of the mod name starting with the scenario script.
    • Moved game.get_event_handler and game.raise_event to "script".
    • Removed Lua.coroutine due to potential exploits.
    • Removed LuaGameScript::evolution_factor.
    • Removed LuaGameScript::save/load.
    • Removed LuaPlayer::build_from_cursor + LuaPlayer::rotate_for_build as they aren't replay/MP safe.
    • Removed LuaSurface::get_tileproperties.
    • Removed LuaForce::item_resource_statistics and LuaForce::fluid_resource_statistics - they've been merged into the production versions.
    • The goal and left gui element has default direction vertical.
    • Utility sprites can be used in the sprite button.

    Command line interface


    • Added map-settings option when creating map, it can be used to specify a file with map settings to be used instead of the defaults.
    • Added preset option when creating map.

    Bugfixes


    • Fixed that setting LuaForce::ai_controllable to false wouldn't prevent pollution-based unit group formation. more
    • Fixed graphics settings UI scale would change just by opening the GUI. more
    • Fixed UAC prompt would cause error and application termination during sprite loading on Windows. more
    • Fixed map generation could in some instances not correctly generate entities.
    • Fixed crash when regenerating entities that are disabled by map generator settings more
    • Attempt to fix an ocasional crash when DNS lookup fails more
    • Fixed crash when ammo was consumed fully by script during shooting. more
    • The Equipment Grid GUI is now scaled with the rest of the UI. more
    • Fixed possible crash caused by improper primary display detection. more
    • Fixed occasional broadcast related crashes on OSX more
    • Fixed building train vehicle in a way, that it connects on both sides. more
    • Fixed entities with efficiency modules wouldn't consume the correct amount of energy in some cases. more
    • Fixed problems when clicking connect button in server list too fast more
    • Fixed crash when removing large-tiles from a tile prototype definition. more
    • Fixed crash when mod created exoskeleton equipment with zero energy consumption. more
    • Fixed electric pole would draw wires to invisible ghost of enemy force. more
    • Fixed crash when refreshing in the browse mods GUI in some instances. more
    • Fixed crash when clicking the same tick the map is loaded. more
    • Fixed LuaGameScript::get_event_handler not working. more
    • Fixed desync when demoting every player on a server. more
    • Fixed desync caused by incorrect sorting of items with inventories (blueprint books) in player's inventory. more
    • Fixed crash when respawning player who had any requests in personal logistic slots and was transfered to a force without logistic slots technology researched while waiting for respawn. more
    • Fixed LuaSurface::create_entity{fast_replace=true} would end up deleting items in some instances. more
    • Fixed extremely slow deleting of selection in text fields. more
    • Fixed save coruption when saving while character is in vehicle with equipment grid and roboport equipment while destructor bots are deployed.
    • Fixed rail integrity error when train crashes into itself. more
    • Fixed virtual signals wouldn't be sorted correctly by subgroup. more
    • Fixed typing in the save-replay GUI could move your player around. more
    • Fixed that manually created unit groups wouldn't be automatically removed when all their members died. more
    • Fixed crash when trying to make an entity ghost of an invalid entity through script. more
    • Fixed rail signals not reconnect after removing rails in some setups. more
    • Fixed trains switched to manual mode wouldn't trigger inserters when they coasted to a stop. more
    • Fixed lot of entities on the same tile might cause stack overflow crash when saving the map. more
    • Underground belt connects only to underground belt of the same force.
    • Fixed personal roboport ended search for nearby ghosts prematurely if a ghost found couldn't be built due to missing item. more
    • Fixed desync related to teleporting any entity with emissions-per-tick defined in the prototype. more
    • Fixed explicitly placed crafting orders were sometimes used to satisfy dependency of other crafting orders.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2017-04-24 16:20:13 CET ] [ Original post ]

    Friday Facts #187 - Space science 0.15 graphics

    Space science


    As you already know, in 0.15 we have reworked the science packs and added infinite science. Moreand different science packs make the game a lot more interesting. It reduces the complexity ofblue science (which is great for newer players) while adding complexity later, and you now haveto decide what to research first, especially with the more expensive game modes (which isinteresting for advanced players), and infinite science adds something to do forever in the game.
    However, one of my biggest complaints about Factorio always was that the rocket has nopurpose, even though it is being propagated at all the points as the final step of the game. It issaid at the trailer, at the introduction of freeplay, and by being the most advanced research,everything seems like it’s the thing to desire, but when I launched it for the first time and seeingthe victory screen, I was feeling like "And now what...". For me there is one main reason why Factorio is so awesome and why I can forget myselfplaying until 4 a.m., and that reason is the infinite loop of 'there is always a bottleneck', youalways need to fix something, you have not enough power, or your production of a particularproduct is insufficient etc.
    When you launch the rocket, you escape from this loop because it doesn’t lead anywhere. Aswe can see, we have learned to take the rocket as a measurable resource sink to quantify thesize of our factories, which is great, but I think it makes sense to us only because we got usedto it, not because it made sense in the first place, or at least it didn’t to me. Now when 0.15 adds infinite research, I started to ask myself why would I launch the rocket atall, and I have seen many of you ask similar questions. To compare the two, the infinite science is also quantifiable as I can see the amount I producedin the production screen, it also has an interesting crafting recipe (rocket parts vs. all sciencepacks together), and it is also an infinite resource sink. The main difference is, the infiniteresearch is actually useful.
    This is where the space science comes into play. We now have a space science pack,obtained by launching a rocket. You get 1000 of these science packs per rocket, and everyinfinite research requires these science packs. Such a simple feature, but it closes the infinitegame loop again. But of course in case you want to just launch rockets without worrying aboutscience, you can still do that, just like previously. We have also added more infinite researches, so now apart from worker robot speed, combatrobot follower count and mining productivity bonus researches, we also have all of thecombative damage upgrades infinite (not shooting speed as that would get ridiculous sooner orlater), however their prices increase exponentially to prevent it from getting too extreme.
    The rocket has to have a satellite in order to get the science packs (the rocket has to be ablesend back the discoveries, right?). The rocket silo now has an auto-launch checkbox so you canlaunch them automatically, and the launch is only going to happen when you insert satellite. Soyou can control the inserter with satellite to only launch rockets when you need the sciencepacks automatically through circuit network. Of course we also added support for mods, so you can define what do you get from sending arocket, and depending on what you put in the rocket - say, if you put a tank into the rocket, youreceive 100 raw fish, because that would make perfect sense. We can build up on this concept in the future, but for now this already brings a lot of sense tothe game as it is.
    As a bonus, here is a album of my factory where I tested the infinite science concept.

    Nuclear power


    There is a great amount of new graphics and high resolution translations of old ones. Thebiggest news is obviously the nuclear power, so let’s have a look at that.
    As you can see, the whole process starts with a mining drill and new uranium ore graphics (itglows at night by the way). Since mining uranium requires sulfuric acid, we needed to add anew patch for pipe connection. The acid flows between neighbouring miners, so you only needto bring pipes to the edge ones. The first step of uranium processing happens at the centrifuge, which creates U-238 and U-235in certain percentages. Most of the time you get a U-238, but sometimes you get a U-235.When you get a U-235, you can turn it into uranium fuel cell which goes to the nuclear reactor.The nuclear reactor heats up and transfers the heat to heat exchangers, optionally via heatpipes when the setup gets bigger. The heat exchanger accepts water and outputs steam whichthen goes to the steam turbines which generate power.
    The centrifuge can do a few other processes which are useful for getting more U-235 andre-utilizing burnt out fuel cells into more U-238. Even though it’s one of the most expectedthings, we probably didn’t mention before that you can make uranium ammo and tank shellsfrom U-238, and U-235 can be used to create warheads for rocket launcher missiles whicherase about 50 tile area per shot of anything in the way, including you if you don’t run fastenough. The steam comes out of the heat exchangers at 500 degrees, which is the maximum a steam turbine canutilize. A steam engine in comparison can only make use of steam up to 165 degrees - which iswhat a normal boiler produces. So if you use a steam turbine with normal boiler, it will work, butthe turbine will have a poor efficiency. And if you use steam engine with heat exchangers, it willwork, but a lot of the heat will be lost for no benefit.
    As you already know from earlier, we have also changed the boiler to be 2x3 tiles instead of 1x1which required new graphics. We also added high resolution steam engine to make them gotogether nicely. This also allows for some new designs which is very nice. The ratio of boilers tosteam engines is exactly 1 boiler to 2 steam engines now.

    High resolution graphics


    As you already see with the nuclear graphics, they all have their high resolution versions, butwhat else is there? Currently in early versions of 0.15 you can look forward to the following in high resolution:
    • Resources
    • Electric mining drill
    • Belts, splitters and underground belts
    • Pipes and pump
    • Rails, rail signals & rail station
    • Locomotive, cargo wagon and fluid wagon
    • Furnaces
    • Assembling machines
    • Refinery and chemical plant
    • Boiler & steam engine
    • Nuclear power graphics - centrifuge, nuclear reactor, heat pipe, heat exchanger, steam
    • Steam turbine
    • Car
    • Programmable speaker
    Everything in the following picture except inserters is in high resolution. The high resolution terrain integration is still in progress, so it won't make it to 0.15 right away.
    During 0.15 stabilization we will be adding more high resolution graphics, with the aim to doeverything. Let’s see how that goes, but seeing what we already have, we are confident we canget it done sooner or later.

    GUI reskin & new icons


    For a long time we have been keeping some placeholder icons and we wanted to replace theskin of the GUI in 0.13 already. Here is how it looks like now.
    The changes aren’t massive, but it has a big impact on everything. Because of that, some of ouricons needed changing so that they don’t become less visible. There are also many new iconreplacements for the old awful things like mining drill, laser turret, rail signals, and more. We willlikely tweak it further, but this is what we have for now. The technology tree looks like this.

    New map colors


    We have reworked the map colors to make them look nicer and give a little bit more info whatis what.
    As you can probably see, it has been a lot of work, and we are very proud of it.The best part is that you will all be able to help us play and test 0.15 this coming Tuesday, so let us know what you think on our forums or I personally am also active on reddit.


    [ 2017-04-21 15:48:43 CET ] [ Original post ]

    Friday Facts #186 - Marathon testing

    Hello, another week of tepid weather here, but the work on the final necessities to 0.15.0 continues with full force.

    More playtesting


    We started a new map on Monday, we wanted to see how the game feels with our new 'marathon' map preset, which (among other things) makes many recipes more expensive.
    What may seem like blasphemy to some, the expensive setting also changes a few of the normal recipe ratios, so new designs had to be thought up:

    Automated testing 2


    A long time ago we talked about our automated testing in FFF-62, and over the last 2 years and 4 major versions, we've added quite significantly to our suite of tests. https://youtu.be/erYjMMBXy7A We have our server constantly running all these tests 24/7, and when something breaks it sends our a sterny worded email to the developers who made the latest commits to the repository. Its sometimes surprisingly how some innocent change can break some wholly unrelated test, but it certainly helps us catch these issues before they make it out the door. This might be quite a short Friday facts, but we are trying to spend as much time getting things ready for release. If you have any thoughts or feedback, please let us know on our forum


    [ 2017-04-14 17:33:16 CET ] [ Original post ]

    Friday Facts #185 - Progress report

    Hello, the sunny spring weather seems to have taken a break these last few days after Denis' arrival to the office. His work continues on the belts optimization, as the rest of the team has been playtesting 0.15, as well as closing off remaining minor features on our Trello board.

    Progress report


    Internal playtesting kicked off early this week, and it seems we're either doing something right or wrong, as it doesn't seem we are finding many major bugs. Of the ones we've found, most have been fairly easy to solve after initial diagnosis, which is greatly simplified by playing on our internal 'Fast debug' build. Kovarex has polished up the 'zoom to map' feature mentioned previously, with a card of community suggestions to checkout in the future. There was some choice to make on whether to allow building from the map zoomed in or not, and in the end we decided that building ghosts/bleuprints from the map is an amazing feature. Posila and I finished our first implementation of the mini-tutorials, which are accessed in-game through a simple (for now) Gui:
    We also have a new addition to our GFX department, so please everyone give welcome to Ernestas, a talented artist from Lithuania, who has been getting acquainted with us all here in the office. Albert has been digging deeply with Cube into terrain generation fixes, while his work continues on the nuclear reactor model.

    Nightvision update


    We received a lot of community feedback about our proposal for how the nightvision could look. So now after several weeks to think upon the problem, Posila has implemented a new look, with the first use of shaders in the game:
    No doubt the art department will still want to apply some finishing touches, but we are happy with how it turned out. We hope the use of shaders could start to add some extra dimension to the way the game looks, and since their processing is done on the GPU, it should have very little impact on performance. There are still a hundred minor features I could talk about in these FFF posts, but this close to release, I would rather not spoil the surprise. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2017-04-07 15:02:23 CET ] [ Original post ]

    Friday Facts #184 - Five years of Factorio


    Today, it is exactly 5 years since the initial Factorio commit. As you may, or may not know, the first version was created in java, and it took me (kovarex) a whole 12 days to realize that it is not a good idea, and I switched to C++. As a small celebration I provide the Factorio pre-alpha version 0.1. It is a good reminder of how much the game has moved forward in all directions. The controls are cumbersome, the graphics are funny and glitchy, the GUI is horrible. The campaign has 4 levels, where the last one is quite a challenging defense mission. There are also 2 savegames with one of the first Factorio Factories ever created.

    The input action permissions system


    The improvements to how multiplayer works in 0.14 made having an open multiplayer game not out of the question. However this introduced a new problem, in that there is no way to protect yourself from people that just want to ruin the fun. To try to fix those problems I've added 3 new things for 0.15: white-list support, the ability to disable friendly fire, and an input action permissions system. Factorio handles all player actions and interactions through our system of 'input actions'. The input actions tell the game what the player is trying to do, where and what keys/clicks he is making, and basically all game state interactions are done with input actions. This makes it relatively easy to filter what players can and can't do, by limiting what input actions they can perform, which can now be controlled through the permissions system:
    The permissions system is completely optional, and it supports any number of permission groups, allowing server admins to define allowed/disallowed actions for everyone in that group. Before anybody asks: yes you can deny yourself the ability to edit permissions (after confirmation), if for some reason you wanted to do that. The server console (and RCON) have unrestricted access to edit permissions. So, if you do lock yourself out (I don't recommend you do), you can always get back in through that. Additionally, permissions can be edited through the Lua API since the next logical step would be some automated system to slowly grant players permissions on a public server. The ability to edit permissions through the Lua API is checked so a player with console access can't just give themselves permissions if they don't have the required permissions.

    Railway building optimizations


    Every so often someone would make a save file built almost exclusively around trains, and run into the same performance problem: when you've got enough trains going, the building and destruction of rail related entities starts to consume so much time that it borders on unplayable. I've known about the performance problems for a while now, but the rail system was one of the few areas I didn't have experience with (knowing how the entire rail system works from a programming perspective). I decided that during my visit to Prague I'd take the opportunity to extract as much information about the rail system as I could from the rest of the team. That led to HanziQ and I working together for a few days, to the point where we could finally address the problems. In 0.14 and previous, this is how it would work:
    • Build any rail -> tell all trains to re-path if their path is invalid
    • Destroy any rail -> tell all trains to re-path if their path is invalid
    • Build a train stop -> ...
    • Destroy a train stop -> ...
    • Do anything related to trains/rails -> tell all trains to re-path if their path is invalid
    Obviously that wasn't so great for performance. Instead of starting by fixing the obvious problem, I took advantage of the fact that building any track would cause every train to re-path. With a simple way to benchmark the performance, I set to improving the logic trains use to determine if they need to find a new path, and to optimize the path finding code. After that was done, it was just a matter of building a set of conditions of which trains need to be notified when anything rail related is changed. Some were simple: when a train stop is destroyed, only the trains currently driving to that stop are affected. Others were a little more complicated: when a rail is destroyed, unless it had a signal, train stop, or connected to two or more rails on opposite sides, nobody needs to know it was destroyed. The end result after all this is now building and managing anything in the rail system for 0.15 has almost no measurable impact on performance. As always, let us know if you have any thoughts or feedback on our Forum.


    [ 2017-03-31 17:48:07 CET ] [ Original post ]

    Friday Facts #183 - Aiming for the release date


    The 0.15


    I saw a lot of discussion where people thought that we are just adding features and delaying 0.15 by that, so I would like to describe the situation. There are several bigger things we wanted to have done for the 0.15 and are not yet ready:
    • Transport belt optimization - Which is in the process of finalization
    • Pump → fluid wagon connection - The graphics are done, the integration into the game is in progress. It was overall much more complicated than expected.
    • Internal GUI rewrite - Which is postponed to 0.16
    • Mini-tutorials - We have few example mini tutorials finished, and the integration into the game is in progress
    • Nuclear power - Only the graphics of the heat pipes are finished, the rest of the graphics are in the phase of sketching, so less than two weeks is improbable.
    Those that don't work on these tasks would have to just wait, so they do smaller tasks. This is why I was doing the map improvements, this is why Rseding is doing the optimizations and map presets etc. Once everything apart from the nuclear power graphics are done, we will start the playtesting, and we want at least a week of playtesting before considering the experimental release, but it can be more if we encounter some unforeseen problems. The graphics can be integrated just before the release, as it shouldn't introduce new bugs. After the experience with previous release date estimates, all I can say about it is: "We are working on it". When we are ready to make a release, it will be either on a Monday or a Tuesday, to give ourselves some long working days to bugfix while the reports are fresh. This means we will probably know the Friday beforehand that everything is ready, in which case we will let everyone know in the FFF. To clarify: If you don't hear us mention releasing 0.15, you can rest easy for another week that we aren't going to surprise you.

    The finalization of map improvements


    This is extension of what I did and covered the last time. More colors The next step was to work on the map color a little bit. We want to find a good balance between a lot of info provided by the map and colorful chaos. Just adding specific color to a few things (turrets, solar panels, accumulators, different shades of yellow for splitters & underground belts) to make the map much more readable. This is not the definitive version, as the colors might be tweaked, but I can already read the map better:
    Turret range option: Optionally viewable as with the other visualizations.
    Zoom from map to the world This took the most time to do, but I like it the most. When you zoom in, at a certain zoom, you just switch from the map view to the game view. We don't want the players to accidentally switch to the map view when playing normally, so it is only applicable when the player is using the map view explicitly. The first obvious problem was, that it would be too strong as you could see everywhere, so we limited this kind of view only to the area covered by radars or other players, the parts not covered still show the map view. I was afraid of how ugly it would look to combine the game view and the stretched map view, but it actually isn't that bad, and it teaches the players the colors on map as well.

    We are considering whether it should be possible or not to build ghosts, blueprints and use deconstruction planner from the map, maybe it could be unlocked by specific research, we might leave further additions like this to 0.16, but it really depends on how long we have to wait for the bigger things to be done.

    Advanced map settings


    An extension of the map settings FFF. We decided to make only the normal and expensive version of recipes and technologies. The easy/simple version would promote the automation even less, and it might even be remotely possible to finish the game by making things mainly by hand crafting, which would push the player the wrong direction. I was experimenting the Expensive recipe costs a little, and it seems that making few vital components, like iron gear wheels, circuits, steel and miners more expensive, might be enough to slow the game down. I personally found it refreshing to not jump through the early game as fast as I'm used to. To make things more graspable we defined few presets, so when you say that you finished the "death-world" settings, it means something specific.
    As always, let us know know you think on our forums.


    [ 2017-03-24 17:04:58 CET ] [ Original post ]

    Friday Facts #182 - Optimizations, always more optimizations

    I've done several optimizations around the game update over the past few game versions but in 0.15 I decided to also look at some of the game GUIs. In particular there are 3 GUIs which tend to take a large amount of time when visible: the production stats, the trains view, and blueprint tooltip previews.

    GUI performance


    The production stats GUI has to render an icon, a progress bar, and some text for every item in the view and that view changes each game tick as the stats do. I figured that the destruction and re-creation of all the widgets would be responsible for the slowness but as it turned out the graph was taking the majority of the time. Calculating the graphs is simple - we already store all that data to make the stats work. However rendering the graph was very poorly implemented in that every line in the graph (each up and down) was done one at a time and sent out to the graphics card. To fix that Posila batched all of the lines and send the final result out in one draw call. Next I moved on to the trains GUI. I did some improvements to it in the middle of the 0.13 stabilization several months ago so I already knew how it functioned internally - it doesn't create and destroy anything - it reuses all the visible widgets between updates (very efficient). So, when someone commented that the game would drop to 2 FPS when they opened the window I didn't believe them. But, when I tested their save they were right. After some debugging I found that it suffered from the same problems the production stats window did: for every visible train in the GUI it would draw the minimap and all trains visible on that section of the map. So say you have 200 trains on your map and the view is showing 50 of them: each view would render its own train + any trains in that immediate area (which ended up being roughly all of them in packed factories) and the end result was you'd get 50 * 50 trains being rendered which ends up being very slow. Cleaning up how trains are drawn on the minimap gave a nice boost to the performance here. I still have some additional ideas to improve the performance of this GUI but it's at least manageable now for 0.15 it's manageable. Finally the blueprint tooltip preview: this one stumped me for a while. I've known it was slow since I first started with Factorio 2+ years ago but could never pin-point exactly what was causing it. The drawing of the blueprint preview is near identical to what happens when you view the normal game but would always take 4-5 times as much time to render. Finally recently I found that we did zero batching of sprites to be drawn when rendering the GUI: for every sprite that we would draw it would go out to the graphics card and tell it to draw it. Fixing that was as simple as turning a flag on and now it has no measurable impact on performance when rendered.

    Weird long-standing bugs


    While working on optimizations I frequently make small tweaks and re-run the game to see what difference they make. Sometimes when I make a larger change, I want to make sure nothing broke before trying it out on a larger save file, so I'll launch a new small map and test it out. While I was working on optimizing a train-heavy map earlier this week, I did just that, except I somehow corrupted the save file. I could load the save and it would crash every time i would mine a specific cargo wagon, but nothing I had changed could possibly affect the save in this way. After a few hours of testing I found a long-standing bug with trains that has hyper-specific requirements to reproduce (that I happened to only reproduce because I had a typo in an unrelated optimization I was working on):
    • Build 2 locomotives directly next to each other
    • Disconnect the 2 locomotives so they're not one train anymore
    • Drive the front locomotive into the rear one such that it can't move backwards any more
    • Drive the rear locomotive into the front one such that it can't move forward any more
    • Build a cargo wagon attached to the rear locomotive (making sure the cursor was more towards the rear locomotive so the cargo wagon snaps behind the back locomotive)
    • Try to drive the rear locomotive (with the now attached cargo wagon) forward into the front locomotive

    In this specific setup the newly built cargo wagon will have it's connection to the rails corrupt. Any attempt to drive that train off the rails its on would crash the game. Any attempt to mine the cargo wagon would crash the game. The game still saves/loads just fine but you can't do anything with the broken cargo wagon. Finally, if you save the game and load it between steps 5 and 6 it never breaks.
    After about a hour of debugging (and fixing an unrelated different bug) I fixed the problem by adding an "else" and 1 line of code that runs when building cargo wagons. As always, if you have any thoughts or feedback, let us know on our forum.


    [ 2017-03-17 16:00:36 CET ] [ Original post ]

    Friday Facts #181 - Calm before the storm

    Work this week has been progressing nicely on 0.15. We hope we will be able to start our internal play testing soon, as the team works to close off the rest of the major features. Rseding will be arriving here in Prague next week for another of his infamous visits, and Harkonnen will be joining us shortly after, so the office will be prepared for tackling any issues that may arise. Since we are going to be spending the next period polishing and fixing what we already have, you can look forward to some less interesting FFF posts in the coming days. Take the lack of exiting new topics to cover as a good omen that the whole team's effort is on getting everything ready for the release.

    Press key & content policy


    Video and content creators are a really integral part of our success as a developer, without the exposure and feedback we receive from reviews, critique and lets plays of the game, Factorio would not be the what it is today. While this probably won't be the last time, I wanted to express our deepest gratitude to everybody who has helped to spread the word about project, and to every one of our community members and contributors. For a long time we have offered press keys on our website, for channels that meet our requirements, we give a free review key in exchange for their thoughts and coverage. This next section might not be as interesting to Factorio players, but I would like to take this opportunity to share some word of warning for any other developers or small publishers with any similar system. There are some people who will try to exploit this press key policy or ours. The simplest attempts are just straight imitation of a famous Youtube or Twitch personality, usually hoping we don't try to verify any of their information. A different approach some take is much more effective. They will have a successful channel already, and email us asking for keys to review the game and play some multiplayer. So since they have some community for their content, and it seems like a good deal for both of us, we'll give them a couple of steam keys. However they don't cover the game, and instead sell the keys. Several weeks later, they will send in another email, hoping we've forgotten about their previous requests. These cases have raised some moral question in me about whether it is acceptable to deactivate a review key. If a channel writes in and asks to cover our game, and even 6 months later they haven't shown the game at all, do they deserve to keep their free copy? I would also like to clarify our policy on Factorio content. We 100% support any and all content you make about Factorio, and fully support content creators rights to monitize this content. We don't require you to ask permission, or get a key from us directly, if you want to cover the game, we will never claim your videos or copyright strike your accounts. If you'd like some further reassurance, feel free to email us and we can provide a statement to put your mind at ease.

    Chemical plant & Refinery


    I (Vaclav) have been working on a little side-project whenever I could find an extra hour here and there. Since we made the pipes in high resolution, everything else has become visually incompatible with them (mainly in the connecting points). This motivated me to make more pipe-related entities in high resolution to get everything to match. The process was "just render it in double resolution", paste the pipe graphics in the spots where necessary, and then hardcore Photoshop paint over them. I bought a new portable Wacom device, which allows me to do exactly this kind of work whenever I'm not at the workstation (on a bus, home on a sofa, etc.), which is very time efficient and I really enjoy doing it. For now it's the refinery and chemical plant, maybe I will be able to complete the storage tank for 0.15 as well. Even if I won't, we will just update the graphics during the 0.15 experimental phase.
    As a bonus, we added a tint to the working animation of chemical plants, so you can tell what recipes are being processed. Some of them are quite similar, so it isn't as easy to tell which is which, but it's certainly clearer than it was before. As always, if you have any thoughts or feedback, let us know on our forum.


    [ 2017-03-10 17:36:19 CET ] [ Original post ]

    Friday Facts #180 - Map improvements

    Public service announcement - Possible server breach and outages


    In the past 7 days, our services (authentication, multiplayer matching, mod portal, etc.) experienced multiple outages. One of them was caused by one of our service providers and resulted in a roughly 6 hour long outage on Tuesday evening. This was a widespread outage all over the internet caused by problems with Amazon's AWS S3 and also affected other services, for example Instagram, Imgur or Trello. The other 2 outages were the result of a possible security breach of one of our servers, acting as the master content server at the time. On Friday, just before midnight UTC, we were informed by Linode (our server provider), that a brute force SSH attack was originating from that server, targeting a specific IP in the OVH network. As a precaution, the server was cut from all network traffic, which caused a short outage. We haven't managed to determine, whether that attack was caused by a bug in some software or a runaway process, or if it was caused by someone who managed to gain access to the server. We can't say if it's possible to spoof the IP address of an attack of this kind and make it look like the attack is coming from someone else. As a security measure, we have destroyed and redeployed all 3 content servers we currently operate, improved our firewall and automatic banning rules and invalidated passwords and SSH keys. All the releases that are available for download were checked and none of them were modified. We apologise for any inconvenience we might've caused by these outages.

    Additional map info


    The Trello card to improve our map has been sitting in our queue for a very long time, and since I wanted to program some low hanging fruit for 0.15, I decided to pick this. Let me present how far I got. Now when I open the map view, it shows the map view settings mini-panel on the side (icons are temporary), which can be used to toggle different kind of additional info on the map.
    The logistics area visualisation It wasn't really possible to see the roboport coverage in the scale of the whole factory and I missed that a lot, so it was the first thing to be done.
    Now I can clearly see why did I get alerts of missing construction robots in the left part of the map. It can be also used to find all these small gaps in the coverage or off-by-one alignment issues.I'm also considering to show the roboport connections in this view, or as additional option. The electric network visualisation This one might be especially useful when you want to find out the reason of electricity breach. As with the previous one, it gives even more incentive to build electric network in OCD friendly way, as all the circumstantial electric pole placements are more than visible in this view.
    The pollution The pollution works the same as before, but it can be turned on and off the same way as other things. This means you'll no longer have to toggle the detailed info to see your base clearly through the pollution.

    Map interaction


    This was the most obvious step of all. You can open locomotives and train stations from any distance, you can access them from the train manager, but you couldn't open them by clicking in the map. It is possible now.

    Custom tags


    As the map shows train station names, people were actually using stations to put markers on the map. But as its kind of a hack, and it clutters the train destination selection dialog it needs a proper solution. This is why we have the custom tags now. It can be either text only, icon or both. As you can see it can be used to mark different parts of the factory, it can be used in multiplayer to coordinate different kind of tasks and I don't doubt that people will use it to draw penises or other 'creative art' on the map as well.

    Resource patch inspection


    Searching for the best patch around was quite tedious, as you had to walk to the locations and guess how much ore it contains by hovering over several ore patches. It is not needed anymore, as a player can just hover over the patch on the map to see how much it contains. As the area was discovered by radar, or by the player manually, there is no harm in providing this information. It also helps colorblind people as they couldn't distinguish the ore types by color so well.

    Other improvements


    There are other things we are considering. Just to be sure, this doesn't mean a promise or a plan, just an idea, that might or might be not implemented:
    • Extend the custom tags, so they can refer to rectangular area.
    • Interactive (clickable) electric and logistics networks that open the window with detailed info.
    • Integrate the interaction into the train stop selection when adding new items to the train schedule
    • Integrate the interaction into the train to allow semi-automatic one-time train order that wouldn't be limited to train stations.
    • Be able to zoom from the map view directly to the world. Things not covered by radars would just be covered by some kind of blackness.
    • Better map colors, more different colors for entities, so you would see whether it is an assembling machine, electric pole or turret.
    • Option of Higher resolution of map. If we have 4 pixels per tile in the map it could be nicer and also provide more information when zoomed in
    • Smarter map info. Especially in the high resolution option, the belts could theoretically remember the resource they are used for (if it is one purpose belt), and draw line of the color on them. Assembling machines could have a pixel(s) inside the square that would depend on the recipe. Etc.
    I would actually like to know what other things you might want, or what things from this list you find the most needed. As always, we can’t wait to read your reactions and feedback on our forums.


    [ 2017-03-03 13:27:52 CET ] [ Original post ]

    Friday Facts #179 - New resource graphics concrete

    While all us minions and assembling humans are furiously working on 0.15, today I would like to present to you what I have been working on lately - new graphics for resources, of course including high res and the new uranium ore. In the second part of the article I will get to an old/new topic about concrete.

    New resources - the idea


    For 0.15, we needed uranium ore, and eventually needed all the other resources in high resolution, so we took the opportunity to rework all of them now (not oil). Most importantly, we introduce a new way of tiling - instead of a square, a resource tile is a puzzle-shaped thing. This helps to remove the top-down square nature of the old sprites, and make the ore patches much more organic.

    New resources - the process


    Since the aim is to create multiple tilesets which work similarly, I tried to save a lot of time by making one master scene (I started with copper ore), from which it would be easy to derive the rest of the ores.
    Of course the most basic way to do this would be to just recolour them in photoshop and call it a day (which would be pretty lame if you ask me), but if we are already redoing it, we might as well create a robust system which can actually change the 3D objects in a semi-automatic way. Once again, I embraced the power of python and made a script which randomizes the selected objects. More specifically, it tweaks some displacement values, changes the mesh itself, and randomly rotates+scales it in the Z axis. The material itself has some further randomization inside for even more variety.
    Making the first one took a while, most of the time I spent finetuning the amount of volumes in the density levels, and making sure they tile nicely together. After that work on the remaining ores was very fast. Still working on the uranium though, it’s very different (we want it to be very different) so it takes a lot of figuring out how it should actually look like. Please note that realism isn’t the aim of this, the main focus is to have something that intuitively looks like what it should, for example copper ore looks closer to copper plate than to real copper ore.
    With this we are also currently tweaking the map generation, so that the ore patches look nicer. They will have the same amount of resources on average so it won’t really affect gameplay.

    Concrete


    Quite some time ago we presented a new concrete tileset, way back before 0.13 was released. Although it’s much nicer than what we had previously, it introduced a new problem with the hazard concrete (concrete with stripes). You can see the problem on the left of the following picture.
    Recently Posila spent just a few hours implementing a new lua value - transition_merges_with_tile = "concrete" - which just uses a continuous border between the two tile types instead of causing the ugly behaviour. It’s still not a perfect solution because the edge doesn’t know whether it should be hazard or normal concrete, so it just searches for its neighbours in a north-east-south-west cycle - so sometimes you can get a different tile than you might expect. We believe it’s much nicer than what we had so far, and in most cases it pretty much works. One day we will have to rework the concrete to high-res anyway, so hopefully we will be able to figure out a better system by then. For now, you can look forward to it in 0.15. As always, we can’t wait to read your reactions and feedback on our forums.


    [ 2017-02-24 20:36:52 CET ] [ Original post ]

    Friday Facts #178 - Minimal mode and Mini-tutorials

    Hello, the office has had a very lively atmosphere this week. With some very productive team discussions taking place, we reach another Friday with an optimistic outlook of the weeks to come.

    Minimal mode


    There has for some time been an irritating problem which can arise in the game, specifically in the way we handle mods. With the mod portal's introduction, it became easier and more intuitive to download and install mods directly in the game. This has been really useful for a lot of players, simplifying the old system of manually dropping the mod into the correct file location. However while installation was simple, getting rid of a malfunctioning mod was not addressed in any way. I am sure anyone who has spent some time downloading some more obscure mods has had this error thrown to them before:
    Obviously the error is on behalf of the mod, and the course of action is to remove or disable the mod. I've had a lot of feedback over the course of 0.13 and 0.14, and to many users, this appears as simply a game crash. To put it in another way, a new player installs a mod, and it breaks their game. This shines especially poorly on us, as developers proud of supporting our modding community and its content, this looks like our support might not be good as we claim. So the solution is what we call 'Minimal mode', essentially just a lightweight pre-load of the game, so that if there is an error on loading, we have some way to help. With this system in place, when you load a faulty mod, you will be greeted by something like this:
    As you can see it will directly give the player the option to disable the mod, and allow them to load the game properly so they can delete it in the mod window. We hope this will all around reduce any frustrations which can occur with some mods, as well as reducing the number of emails we receive asking for help on the topic.

    Mini-tutorials & Campaign


    We mentioned a while ago about a plan for what we call 'Mini-tutorials'. The basic idea is these will be short context aware scenarios that the player will be prompted to try, which will teach the player some topic in a short period of time. For instance, when a player crafts his first rail pieces, he will be prompted to try the rail planner tutorial. We have a short list of priority tutorials planned for 0.15, which is as follows:
    • Trains
      • Rail building & manual locomotive control
      • Automated trains, train stops & schedules
      • Ghost rail planning
      • Basic signals & simple stations
      • Advanced signals, chain signals & intersections
    • Oil
      • Pumpjacks, pipe building & fluid tanker usage
      • Basic oil processing & dealing with output products
      • Advanced oil processing & cracking
    These are what we consider the major 'hiccups' in the game flow, and we hope be giving a short non-intrusive tutorial on how these systems work, it can help smooth out the sometimes intimidating complexity of the game. Further subjects we are considering include the following:
    • Construction robots & Blueprints
    • Logistic robots
    • Nuclear power
    • Circuit network
    • Advanced belt usage
    • Interface & Interactions
    We are interested to hear all community input on this, are there any topics or specific areas of the game you think would benefit from a short tutorial? Let us know. Related to these new mini-tutorials, is the status of the demo/tutorial campaign. When it was written (many years ago), it was designed specifically to act as both a playable campaign, as well as teaching the player the basics of the game. It works to serve its purpose by all means, but fails to teach the more advanced topics clearly enough while remaining fun to play. The current plan is to streamline the current demo campaign, into more specifically a tutorial campaign, and then work on a new campaign with a greater focus on gameplay. Within the gameplay campaign we will have the mini-tutorials to explain the more advanced concepts, without worrying about specifically teaching the player in the mission.

    Community spotlight


    Reddit user NiftyManiac has taken Factorio's concept of automation and ran away with it by developing what he calls 'GreyGoo Mk I': https://youtu.be/xF--1XdcOeM [quote]GreyGoo Mk I is a self-expanding factory built out of square cells. Its singular goal is to occupy as much space as possible, and it does this by autonomously traveling the landscape and seeking out ore to fuel its endless thirst for expansion. On one level, it's a way to automatically build mining outposts with no human intervention; on another level, it's the first step to a fully self-replicating factory.[/quote] You can read more about how it works here, and as always, let us know what you think on our forum.


    [ 2017-02-17 18:50:13 CET ] [ Original post ]

    Friday Facts #177 - Difficulty settings

    0.15 status


    Work has been going swiftly on 0.15, but there are still many major topics we have left to close. We mentioned previously that our estimate for release would be near the end of February, and while this has been our internal goal, we won't quite be able to make it. One of the main reasons for this delay is us underestimating how long it would take to stabilize 0.14 and the new multiplayer code. We thought that because it was a relatively small 'major' release, that it would not take much time to make it stable. However the great community members playing the experimental version kept finding bugs for us to fix, and even now there are still several 0.14 bugs being identified and fixed in 0.15. The extending bug fixing of 0.14 was no doubt necessary, but it has led us to be somewhat behind schedule on several features of 0.15. Our current optimistic estimate is that we will be able to release an experimental version of 0.15 at the end of March, and we will keep you all up to date on its progress.

    Difficulty settings


    I recently finished the backing logic changes to add the new 'advanced' section of the generate-map GUI. At the moment it includes settings to adjust pollution, evolution, biter expansion, and recipe/technology complexity. Pollution, evolution, and biter expansion have always been adjustable either through mods or console commands but recipe and technology complexity is something completely new.
    The options include: simple, normal, and complex. At the moment the base game only has definitions for 'normal' but we may expand it. The different options allow for 3 distinct technology or recipe trees. For instance complex could have technologies that don’t exist in simple/normal, with differing prerequisites and resource amounts. Another example could be a 'simple' gun turret recipe could just require iron plate and iron gear wheels. What I’m trying to say is: it’s not a simple "item craft time is twice as long" type system. The new settings are completely optional for mods so it has a no impact when not used. One of the main motivations for adjustable recipe complexity, is allowing shorter game lengths for those who can't sink 3+ hours in a single session. Especially for any competitive multiplayer, reducing the time investment for some scenarios will help bring in more players.

    Modded load-map performance


    While reading the forums recently I came across someone offering modding help that commented something along the lines of "don’t save a lot of game references because it’s really slow to load them". I quickly loaded up the game with the profiler attached and sure enough it sat for a few minutes loading a map that would normally take half a second to load. Some digging later and I found the cause: a simple Lua function 'set meta table' that we used when restoring the saved Lua 'global' table had O(N) operation time depending on the amount of other tables you created before calling it. When we load the game we end up iterating the entire 'global' table in the opposite order they’re created which ends up being the worst possible scenario for performance. Some re-working of how the Lua function works internally and now it always runs in O(1) time at the cost of a tiny amount more RAM used. The end result being: loading modded games should be faster in general and much faster if you’re using mods that save a lot of game references. So let us know if you have any thoughts and opinions you'd like to share over on our forum.


    [ 2017-02-10 16:27:02 CET ] [ Original post ]

    Friday Facts #176 - Belts optimization for 0.15

    Hi everyone. About half a year ago whenever I was sitting deeply in Factorio and when I needed to spend time in my phone, I was reading FFF or Factorio forum. Later when I decided to move - I suddenly realized that Wube is the most logical target to apply my crazy mind. All thanks to those FFF and you guys. Now I am writing another FFF myself which, looking back at those times, gives me ripping apart feelings (which I believe is a good thing :)).

    macOS developer needed


    We mentioned this quite recently, but it was semi-buried beneath the great nuclear power information. We'd quickly just like to mention again (before you get lost in this meaty FFF) that we're currently searching for a Senior macOS developer to join our team here in Prague. The role is similar to that of all the other developers on the team (working on new features, fixing bugs etc.), but with a focus on any issues relating to the Mac versions of the game. An ideal candidate would have a great passion for the game, and a strong understand and experience with C++. The full job listing can be found on our website here, and we invite anybody interested to contact us.

    Belts optimization


    After initiation process and path of trials with multithreading (more), a solution was achieved which I described briefly on the forum a few days ago. The next challenge is optimizing the very heart of Factorio - the transport belts. Many of us know that if you are going to build a huge factory, you better put as many underground belts as possible - it just gives more UPS when you start dropping below 60. That happens due to cache coherency and other issues, but it gave us idea of treating sequences of adjacent belts as one single piece, so performance-wise they behave like the underground belt's underground part. kovarex mentioned this here.
    However, this is not everything that can be done to belts. For example look at this thing:
    Currently we move every item on every belt that can move. So if you have 20,000 items on belts in your giga-factory - each of those items will consume CPU to advance its position forward. The thing to notice here is that topology of items on belts does not change all that often - i.e. when a transport belt is not blocked by something, items easily flow without changing relative position to each other, and when that belt gets blocked, that property is still true for items located before that blocked part. So in addition to uniting belts into several consecutive pieces sharing the same array of items, we decided to rethink the way we store their coordinates. We no longer store absolute coordinates of items, instead we store the distance between items. Look at this visualization:
    Here blue lines represent the distance between items, and yellow lines represent the initial and final gap to extremes of the cumulative transport line. Most of the time only those yellow things change which asks for an uber-optimization, where for every transport line of like 20-100 belt segments you only increment/decrement those terminal gap sizes, and do not touch items at all! Which technically this means incrementing/decrementing two integers instead of incrementing the position of all 200 items on those belts. The only place you waste performance is rethrowing an item from one sequence to another - that's why we want to keep transport line sequences as long as possible. There is another issue though - it's when belt gets blocked:
    When this happens you don't decrement that yellow part anymore, it's already zero. Instead you decrement size of that last non-zero gap shown with red arrow. It may seem that each time the belt is blocked, you will have to scan that sequence of items to find that last gap (which may be very far away and kill all performance at smelting lines), but here goes the obvious/unobvious kung-fu... whenever a belt compresses - it will stay that way forever. It means that once two items are stuck close together - away from inserters they will stay stuck close forever. This property allows us to cache the index of the last positive gap location, and update it on the fly because that index can never increase, only decrease. So essentially this algorithm becomes amortized constant time with respect to the number of items produced by your factory, multiplied by number of transport lines that the item has to travel. This method however has its implications. You can no longer tell the item position from its index in the transport-line array, you have to iterate all of them first to get there with the sum of all the inter-item distances. The good thing - we never actually used this property, neither did we do any binary searches. The only performance-critical thing affected by such a representation is inserters, but since they need this item-tracking information sequentially with every tick, inserters can easily track what happens inside a transport line (what was moved and what was not last tick), and update the absolute position of a tracked item still at O(1). Also there are dynamic merging/unmerging routines which keep transport lines under inserters or side-loading at some limited range, maybe 9 tiles, while inserter-free lines can be 100 tiles long. These numbers are still to be calibrated. So far overall performance gains on items movement are at x50-100 with that O(1) optimization. Though it's not everything regarding belts, so actual gains are expected to be around x5-x10. Curved and straight belts are all merged together already, the next step will be embedding underground belts as part of a single very long line. In the end only splitters should be the legitimate entities to break transport lines apart, in addition to some big 100-tile long limitation of how long transport line can be for the sake of a player picking/dropping items, rendering and other things to consider. So far factories performing at 25 ups start growing to 35-40 ups just because of that belts optimization, and belts are not everything these factories contain. With 0.15 you will never ever have to build underground belts for the sake of performance :) Factorio's heart is beating nicely now and will not distract from blueprinting the truly important things.

    The map download struggle, part 2 (Technical)


    If you remember from the previous FFF, our map downloader was having some extremely rare problems with some mysterious packets that would always get filtered over the Internet. We already had a fix for it, but I was curious what was going on. Thanks to the investigative power of the Factorio community, we found out that all those mysterious packets, before NAT, had a checksum of 0xFFFF. Admalledd from the forum sent some hand-crafted packets through his Internet connection and surprise, all packets would go through, except those with a checksum of 0xFFFF or 0x0000. At this point I would just assume this ISP(and some other few ISPs around the world) have some faulty hardware or software that do not handle these special cases of UDP checksums. We released a 0.14 hotfix release that will include a fix for the map download. It will also fix the graphical issues caused by the new Nvidia drivers. As usual, let us know what you think at the forums.


    [ 2017-02-03 18:38:08 CET ] [ Original post ]

    Version 0.14.22

    Bugfixes


    • Limit maximum texture size the game will try to use to 16384x16384 pixels.
    • Fixed desync related to building of rail signals. more
    • Fixed multiplayer map download getting stuck at 100% when using some broken routers.more


    [ 2017-02-03 17:44:08 CET ] [ Original post ]

    Friday Facts #175 - Programmable Speaker

    The programmable speaker


    There has always been some talk around the office about a music box that can be used to make simple sounds, you could even connect it to the circuit network and make simple songs. I put it on my long list of circuit network ideas, and in the past few week it has been coming to life. So today I'll be talking about an exciting new entity coming in 0.15: the Programmable Speaker. It was designed to do two main things:
    • Show configurable GUI alerts and play audio alerts based on circuit conditions.
    • Play audio samples as controlled by the circuit network in a way that simple songs can be created.
    The entity graphics are placeholder programmer graphics.
    Let's start with the useful part, it's pretty straightforward. You set your circuit condition, set the sound you want it to make, set whether the sound should be heard in that part of the factory or across the entire map and add an optional GUI alert message. When the circuit condition is true, the speaker will play the selected sound and show the optional GUI alert. You can let the sound play continuously or use simple combinator logic to make the sound at custom intervals.
    And now that fun part. We knew we wanted the Programmable Speaker to be able to make simple songs. Crazy ideas started to pour in, and it was quickly becoming a full-blown music production DAW with custom synthesizers and control over everything. But this has to be easily controlled by the circuit network without having to build real-time computers with combinators. So in the end I made the Programmable Speaker work as a step sequencer. If you send a circuit network signal pulse, an audio sample will start playing, otherwise nothing will happen. There is no control over the sample length or any special effects, but this means it is quite easy to control it using the circuit network. Enough talk. Here is a demo of a song made using the samples already included. Everything you hear is created inside Factorio. I will leave it to you to analyze the video and figure out how the song is generated. https://youtu.be/Q1fszKmpwZM Modders can easily add more audio samples to the entity, including custom alerts. I imagine there will be a voice pack mod that could be programmed using combinators to speak things like "Crude oil is low". I'm sure the Programmable Speaker will be part of some very interesting posts on the Factorio Reddit. There are some other circuit network improvements coming to 0.15, but I will talk more about them in some other FFF.

    The map download struggle (Technical)


    For as long as I can remember, our multiplayer map downloader had (among other problems) the problem that it would get stuck at 100%. It was an extremely rare problem some random person would report. We would keep ignoring the bug throwing it in ] First I was looking at the map downloader code itself, thinking surely there is something wrong there. This was a long process because I had no way of reproducing the issue, so it usually involved going back and forth with a person who was experiencing the issue. I would create an executable that would create detailed logs, that person would run the game using that, I would investigate the logs and see that our map downloader works correctly. The I would add more logging and so on. By the time I would reach some kind of conclusion that person would stop answering and probably stop playing Factorio. But near the end thanks to some helpful players, I was able to see what was happening. Looking at the wireshark capture for both the client and the server, it seems that a packet with a specific content or a specific checksum always gets filtered. Some cheeky firewall from the computer, router or ISP is looking inside the packet data and blocking the packets it does not like. No matter how many times I resend that packet, it never gets through, while all the other hundreds of thousands of game and map packets have no problem getting through. Correct me if I'm wrong, but something like this should not be happening. You can read all the details and see the packet data last posts of the forum topic or on the question I posted on Stackexchange. The issue seems to be resolved if I add one byte of random data to the packet, but I would like to know why is this happening in the first place. If you know what is happening or you know someone that might, please don't hesitate to enlighten us :) This shows how hard it is to make software that "just works" for everyone. There will always be that 0.1% of people who end up having problems that no one could have ever foreseen.Big thanks to admalledd, dadymax, Rippie and the other forum members who helped or are still helping me investigate this odd issue. In other good news, while Rseding91 was also looking at the map download code trying to investigate this problem, he found we had some slow code doing hard drive seeking, slowing down map uploads. He improved it and you should see better map transfer speeds on LAN and high speed connections. As usual, let us know what you think at the forums.


    [ 2017-01-27 17:44:44 CET ] [ Original post ]

    Graphical issues with GeForce Game Ready Driver 378.49

    We have had some reports of users experiencing an issue with the game graphics after updating to the GeForce Driver 378.49 with a GeForce 10 series video card. To workaround this issue, open the Factorio properties in steam, and set the launch options to: --max-texture-size=16384 We hope Nvidia will be able to address this issue shortly, if not we will release an update to limit the texture size by default.


    [ 2017-01-25 13:19:53 CET ] [ Original post ]

    Friday Facts #174 - Mod gui

    Hello, a wave of illness has afflicted the team these last few weeks, but things are starting to pick up again. With the collective health of the office back to normal, progress is advancing well on the features for 0.15.

    Mod gui


    We offer a lot of freedom to the modders of Factorio, this freedom has been of huge advantage to everyone involved, allowing interesting and fresh mechanics to be implemented with simple Lua script and our API. With freedoms comes the fact that we can't control everything the modders want to do. In terms of visual design we have our own GUI elements under lock down, but mods can put things together in any way they like, and with no style guides or templates, we can end up with situations like this:
    The player will understand that it isn't really our 'fault' that the buttons are not in a uniform style, but still it's an issue I wanted to try to address. Typically a mod Gui will be created something like this: function create_gui(player) player.gui.left.add { type = "sprite-button", name = "My_mod_button", sprite = "item/my-mod-item", style = "My-mod-button-style" } player.gui.left.add { type = "frame", name = "My_mod_frame", caption = "My mod frame", style = "My-mod-frame-style" } end This is very simple, and easy enough to understand, but will require each mod to define their own style, or use the LuaStyle script interface to set their style during the game. The issue of odd styling comes from perhaps there being no built in simple and effective styling mods can use. Another problem is that with multiple mods installed, there is no overall control about how and where the Gui elements interact and 'fight' with one another for space. So to begin to help this, I've implemented an optional Lua script that modders can use, which should help unify things, as well as being simple to use for anybody new. require("mod-gui") function create_gui(player) mod_gui.get_button_flow(player).add { type = "sprite-button", name = "My_mod_button", sprite = "item/my-mod-item", style = mod_gui.button_style } mod_gui.get_frame_flow(player).add { type = "frame", name = "My_mod_frame", caption = "My mod frame", style = mod_gui.frame_style } end Which can look something like this:
    While this is definitely optional, it really helps to tie together the style of the buttons.The separation of the button and frame flows will help to stop Gui fighting in the main 'left' gui. I'd also be interested in expanding the functionality of the mod-gui utility, so input and feedback from modders will be very helpful.

    Stations color


    As Vaclav was finishing up the High-res train stop and signal fixes, he enlisted the help of Rseding to add the same color selection for stations as we have for the locomotives.
    This minor addition really allows for much greater visual distinction between your different stations, and allow matching up your locomotives to their respective stations. There is also support to copy and paste the color from the train stop to the locomotive and vice-versa, so that you will always have a perfect match. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2017-01-20 17:42:01 CET ] [ Original post ]

    Friday Facts #173 - Nuclear stuff is almost done

    Hello!

    Nuclear power


    The prototyping of the nuclear power is 90% complete. Some parts of the planned stuff like cooling towers and closed water cycle were dropped. The main reason is that the jump the player needs to do when he wants to switch to the nuclear power is big enough already. The secondary goal is to not get too megalomaniac as there are lot of things our graphics department needs to handle for 0.15 already. We can always add these options later if we want to. I would like to make clear, that all the nuclear related graphics on these pictures are just a placeholders (made by me), the proper graphics will be done later. The first part of the process is mining of the uranium, which will be done exactly the same way as any other resource.
    The uranium processing requires a new entity called centrifuge, it uses 10 ores to create Uranium 238 and Uranium 235. The ratio is set to be as in reality, which means, the Uranium 235 (The better one) has only 0.7% probability. The uranium 238 itself is not enough to make the nuclear fuel, so it needs to be mixed with 235 again, but in bigger ratio than it had in the ore, specifically 5% of Uranium 235 needs to be in the mix. There are different ways to handle the problem of leftovers of Uranium 238 in the real life, but to keep things from getting too complicated, the Factorio player invented the "Kovarex enrichment process", which is able to solve this problem.
    Once the nuclear fuel is prepared, it can be inserted into the nuclear reactor, the most simple setup is one reactor with 4 boilers.
    For every neighbour reactor, there is 100% energy production bonus with the same usage of fuel. This means that 2 connected reactors are more efficient and powerful, but its heat can't be fully used without the heat pipes (the red pipe placeholder), as each reactor needs 8 boilers to be connected to it in this configuration.
    The more nuclear reactors connected, the more complex it becomes:
    At this moment, there is no danger of the reactor meltdown, there is just maximum temperature of the reactor and the rest is wasted. We might add some risk into the reactors, but we might as well leave it as it is.

    Mining productivity research


    One of the new researches in 0.15 is the mining productivity research. It is infinite and every level adds 2% bonus to the mined resources, similar to the way the productivity modules work. Its price increases linearly so its rate of return increases as well.
    It helps to greatly diminish the need to erase and build mines too often in bigger late game factories.

    Looking for Senior OS X Game developer


    We are looking for an experienced reinforcement to our programming team, who would be working mostly on Factorio Mac OS X platform. If you have strong experience in this field and love challenges, you can find more information on our website. https://www.factorio.com/job/senio-game-developer

    BW AI


    As you might or might not know, Starcraft was always one of my favorite games. I spent way more time with it than I would like to admit. Some time ago, long before I started working on Factorio, I started the bwapi project which provides C++ api to access the starcraft data (units, players, map etc.) and allows to control the units.
    I didn't do anything with that for several years, and it lived its own life in the meantime, there are people writing ai as part of the university courses or just for fun and competition. There are tournaments of the AI bots every year since 2011, and the most amazing: Server that runs the bot battles 24/7 and streams it online at twitch.tv/certicky. They even use custom Module that automatically moves the screen around to show important parts of the map as the game runs, this is the true automation spirit! Why am I writing this? Well I'm working on Factorio for almost 5 years now and I need a hobby side project, and writing the starcraft AI is perfect for it. It is fun, complex and it is automation! So if you want to compete with my future bot and the other 45 bot programmers, you are welcome. And as always let us know what you think on our forums.


    [ 2017-01-13 16:38:00 CET ] [ Original post ]

    Friday Facts #172 - Blending and Rendering

    Alpha blending and pre-multiplied alpha


    From time to time there is some confusion inside the team about how sprites are blended with the background when rendering, and what kind of effects we are able to achieve by tinting the sprites. So I (Posila) have decided to write up a few paragraphs about how alpha blending works (not only in Factorio), and what it means when someone talks about pre-multiplied alpha. When the GPU it figuring out what color it should draw on a particular pixel position, it runs a blending operation on just the computed pixel color and original color in the render target. There are several common blending operation modes (additive, multiplicative, overwrite, etc.), but the most common one used in Factorio is alpha blending. It calculates the resulting color using following equation (usually the new color is called 'source' and the background color that is being overwritten is called 'destination'):
    You can easily see that a source with alpha 0 will be fully transparent and the one with alpha 1 will be fully opaque. In games it is common to use a pre-multiplied alpha, which means the color channels of textures are stored in memory being already pre-multiplied by the alpha channel. Alpha blending with pre-multiplied alpha uses a simplified equation:
    Besides a slight performance gain from the GPU not having to do bunch of multiplication all the time, this equation allow us to do some extra effects we couldn't do without pre-multiplied alpha. Factorio renders sprites as colored polygons with texture. We usually refer to the color of a polygon as the 'tint', and every pixel of a sprite is multiplied with its tint. This is useful mainly for color masks, for example the diesel locomotive has a grayscale color mask which is tinted by the color it has set. Tints should have a pre-multiplied alpha too, but they don't have to, so we can use it to lie about the colors and alpha to the GPU. For example if we use tint {r=1,g=1,b=1,a=0} we can simplify previous equation even further and we get additive blending:
    This is great because that means we can switch between alpha and additive blending without having to change the blending state in graphics API, which would break sprite batching and result in an increase in the CPU cost of rendering. For some effects we use a tint with alpha between 0 and 1 heavily. This makes the result appear to be a combination of additive and alpha blending. For example, fire would eventually blend into a single solid color with pure additive blending, or would not look like it is emitting light with pure alpha blending. By using tint (1, 1, 1, 0.35) on the flame sprites, the brightness of overlapping flames adds up partially, but the flames don't completely lose their details. The same trick is used for smoke.
    Textures with pre-multiplied alpha also produce better results in texture filtering, which is probably the main reason why they are so widely used in the videogame industry.

    Rail related things


    Hello! Since I (V453000) last wrote the FFF about rails, I have spent a lot more time to actually work on them further. Just finishing the rails to the current state was a lot of work, and since the new angle of ties broke train signals pretty badly, it was a good time to make these in high resolution as well. Per usual, as I started digging into it deeper and deeper, I discovered more and more problems like the inconsistent order of sprites, newly appearing issues with sprite drawing (the normal resolution sprites simply didn't show it, but in high resolution old issues become visible), or ridiculous problems like straight rail having different amount of ties in vertical and horizontal, so the chain signal metal plate wouldn't fit them. Slowly but surely I went over all of the problems, the next mountain to climb was the train stop - since rail sizes changed, the train stop wouldn't fit the new rails anymore. Apart from that, the train stop is from a time when we made high resolution sprites differently, more and more reasons to do it as soon as possible. There weren't as many unexpected problems as with the signals, just a legion of super specific layering cases, which were probably solved wrongly in the previous version. There are probably going to be some small changes, but here you can see a little preview:
    As always, let us know what you think on our forums.


    [ 2017-01-06 21:02:28 CET ] [ Original post ]

    Friday Facts #171 - So long 2016

    Hello, It has been very quiet in the office this week, the calm twilight between Christmas and the New year.

    Looking back on 2016


    Its not much of an exaggeration to say that the steam launch was the biggest event in Factorio history. The many months of preparation and research really came together really well at the end of February, and with the great support from our fans, we managed to top the steam charts for several weeks after launch. To put our success in short terms, 85% of all Factorio sales have taken place in the last 12 months. We're not quite there, but we will definitely have a big celebration when we reach 1 million. Many months past after steam before our next big landmark. Along the way towards a 0.13 release, and with renewed confidence in the project, we looked at expanding the development team once again. To give a summary of our reinforcements, we welcome Honza and Denis to the C++ side, Jurek and Norbert to the GFX department, and Mishka and Jitka to reinforce me in the Support department. We've also recruited two contractors, one to help with Python related tasks, and the other to work on the new theme art. 0.13 was the largest update we've ever released, and it came at a time when we have the largest number of active players in Factorio history. After launch we had a flurry of reports of broken steam linking, troublesome multiplayer, and a nice list of bugs too. We had been preparing a long time for this, and with our full attention on the pesky bugs, it was not long before we had them in full retreat (more info). Soon though the dust had settled, and with the first waves of bug reports over, we set a good pace of further bugfix updates until it was stable just 2 months later. Kovarex's displeasure with the multiplayer was sparked into action when he saw the MangledPork MP stream. You can read the chronicle of the multiplayer rewrite if you missed it: part 1, part 2. With the new multiplayer complete, we released a small major update, 0.14. This did not add many new features, but still took a lot of time to bugfix and make stable. Up until a few weeks ago, this was our main priority. Now at the end of the year, we are making great progress on 0.15.

    The Grey market


    There was a recent article on PCGamesN about fraud, grey-market resellers and what it means for all of us. After our steam release we experienced much of the same issues as many other indie developers and publishers in these regards, so I'd like to explain the problem, our experience, and some advice for any others. In short the problem is fraud, and the process goes like this:
    • A purchase is made on our website using a stolen credit card, hacked paypal etc.
    • The purchaser sells the key on the grey market within a couple of days.
    • Some weeks later the owner of the credit card notices, and issues a chargeback to us.
    In many cases these people use a automated bot to deal with automatically purchasing the game and trying all of details in their credit card database, and then posting these keys to these 3rd party websites. We only saw this fraud happening for us after our steam release, because the real money is in selling steam keys - not many people care about website keys. On our side, the cost is very large, each chargeback costs roughly $20 in fines, effectively a negative sale, and we were seeing upwards of 10% chargebacks on our website transactions. Also each chargeback notice had to be handled on a case-by-case basis, at one point I was spending 12 or more hours a week dealing with individual purchases. A common saying I hear is that this isn't a problem, because 'The devs just revoke the keys', well that simply isn't true, we don't get notice of a fraudulent payment right away, it can take upwards of 8 weeks for the chargeback to be issued, at which time the key is obviously going to be already sold for profit and forgotten. We still revoke these keys, often to the dismay of the purchaser. So an easy solution would be to stop offering steam keys, the typical effect of some people ruining it for everyone else, but we didn't want to immediately go down that route. First we tried to add additional 'hassle' for these people. We limited transactions to 2 for each credit card, we tightened up the checks our payment provider offered, and we implemented the steam linking. Each stage of this was only effective for a short period of time, before inevitably the fraudsters adapted to the new circumstances, and our changes were circumvented. After some research, we switched from processing payments through braintree and paypal, and instead implemented the incredible Humble widget. Specifically Humble widget has a built in fraud prevention, which completely stopped all the chargebacks we were seeing. I highly recommend the Humble widget for anybody looking to process payments on their own website. In the end this fraudulent activity is only beneficial to the middlemen, in this case the fraudster and the 3rd party marketplace. For the developers, at best they are receiving the price of a normal purchase, and at worst they are charged for the privilege of being defrauded. From the consumer perspective its a bit more difficult, you receive the game for a lower cost, but run the risk of the purchase being revoked. In summary of all this, I want to list the safe and secure ways of purchasing our game: If you purchase the game through any of these sites and you have any problem, please email in to support[at]factorio.com and we can help you out.

    Kill Statistics


    To break up what is otherwise a large wall of text, I have a small preview of a 0.15 feature - the kill statistics:
    All in all its been a pretty good year for us here at Factorio. We have a lot of plans for our future, but as always, we listen to you, our community, for a lot of feedback on our direction. So drop in and give us your thoughts on our forum.


    [ 2016-12-30 22:28:13 CET ] [ Original post ]

    Friday Facts #170 - Blueprint library GUI design and redesign

    Hello. With Christmas nearly upon us, life in the office has slowed down nearlyto the point of complete hibernation. But we still bring you your scheduledprogramme to give you something to look forward to in the next year. For the past few weeks, I've been working on our shiny new blueprint library. Wealready introduced the library in FFF 161, but to briefly recapitulate: The blueprint library is a place for you to keep your blueprints, and it does twothings for you:

    • Blueprints that you save in your library are saved on your computer, and when you load a new save, those blueprints are still available in your library.
    • In multiplayer games players can see each others blueprints and can exchange them easily.

    What does the user experience?


    My task with the library is to work on the GUI to make it nice and easy to use. Even though slpwnd said in FFF 161 that the UI is “(hopefully) intuitive to work with” – my initial reaction to the GUI was that it was a cruel and unusual punishment for our users. One of my biggest gripes was that you had to open the blueprint and then click a button in order to copy it to the library. Getting a blueprint out was a similar process – open it, press a button and you get a blueprint item. On a certain level this made sense – items in the library are not items but rather special records – special in a way that they can be saved on the disk or sent over the network in multiplayer. From a UI point of view, however, it didn't make much sense. With a bit of work, we've managed to make it so that you can simply move a blueprint from the library window into your hotbar like you would any other item. Converting the blueprint record into a blueprint item is handled mostly transparently.
    This wasn't a completely trivial task (as if anything ever is): When copying ablueprint out of the library into your inventory, it might be necessary toactually download the blueprint from the player who owns the blueprint – andthat download can take some time. Our hope is that for most blueprints, thedownload time won't be much, so the download will be able to complete by thetime the user moves the icon over its destination. For big blueprints, however,this might be a problem. This problem is currently left unsolved – the libraryis very much a work in progress at the current time – but it's likely that we'lleither display a progress bar in some corner of the screen, or we'll allow theuser to drop the item, but grey it out and display a progress bar over it.

    Making things make sense


    The library window itself has received a bit of a redesign since the last time we showed it in an FFF. Here is the current look of the library:
    One of the changes is that it displays the blueprint name under its icon. Didyou know you could rename blueprints? You can, even in 0.14. Naming blueprintswill be very useful with the library, as you can stuff only so much informationinto the preview icon to help you remember which blueprint is which. Another big change is that we changed the library to a two-panel window. On theright, you can see all of your blueprints – these are the ones that are saved onyour disk and follow you from save to save. They are also automatically sharedwith others in an MP game. The left panel houses other players' blueprints, andit's there you'll be able to get someone else's blueprint from. A topic of great debate was what to do with the “Game Blueprints” section inorder to make it easy to understand what it's for and how it works. GameBlueprints are blueprints associated with the save itself – they are useful forsave-specific blueprints that you don't want to drag along with you to everysave you play. They are also useful for server-specific setups: When a newplayer joins an MP game, they can be directed to grab blueprints from thissection, rather than being told to hunt them from various other players (who maynot even be on at the time!). I'm still not completely convinced that this is the correct place for GameBlueprints to be. Game Blueprints are somewhat special in that they are tied toa specific save, and in this sense, they don't belong to the leftpanel. However, introducing a third panel would make the window too wide in myopinion. The interface is still very much work in progress, though, and perhapswe'll figure out an even better way to do it soon.

    An actual expert


    Seeing how much of a struggle a handful of GUI windows can mean for us, we'vebeen looking for a UI and UX designer. And as a bit of an early Christmas gift,we actually found one! Say hello to Norbert, our official GUI guy. Norbert is starting for real in January, but he has already spent a week withus. During his week with us he was mostly getting to grips with the rest of theteam, but even so he managed to come up with an improved design for one of ourGUIs – the blueprint preview GUI.
    This is the window you see when you first create a blueprint, or when you open ablueprint item by right-clicking it. it really is the same as it always was, butrearranged. Remember how I told you earlier in this article you could rename blueprints? In0.14, there is an icon next to the “Blueprint” title that looks like a refreshbutton. That's how you rename it. Maybe it should not have taken a UI designerto tell us that that was the wrong icon for the task, but at least someonefinally told us. Another point Norbert made was that the old GUI didn't make it entirely clearthat you could select which icons would show up on the blueprint item in yourinventory. And while we're at it, why not make the preview icon larger so youcan see the icons better? Like everything else, even this GUI is still a work in progress – the annoyinglygreen tick mark icon is my own creation – Albert will make it look good once hegets around to it, don't you worry. Still, I hope you will appreciate theimprovements being done, and maybe Factorio's GUI will be less quirky one day. So let us know if you have any thoughts and opinions you'd like to share over on our forum.


    [ 2016-12-23 20:02:45 CET ] [ Original post ]

    Friday Facts #169 - Combat revisit 2

    Combat Balance


    Twinsen here. As you might have read in Friday Facts #166, we wanted to do some combat balancing. First, to not bring the hopes of everyone up too much, this did not mean a combat overhaul. It means mostly tweaking numbers to make the game more fun and make some of the the weapons more viable. No new entities or new mechanics. As I was doing the combat balance, it was clear the everyone has their own different opinion of how combat is, how it should be and how to make it "better". It's hard to please everyone, especially when you are just tweaking numbers.To try to objectively evaluate combat I used the following methodology. As the game progresses, the player's power increases through research, but so do the biters(mainly due to evolution factor).So I split the game in 7 sections based on research progress. Each section also has the evolution factor I tested biters will approximately have in an average game.
    • Initial - 0 evolution
    • Red - 0.1 evolution
    • Red+Green - 0.3 evolution
    • Red+Green+Military - 0.4 evolution
    • Red+Green+Blue+Military - 0.7 evolution
    • Red+Green+Blue+Military+High Tech - 0.9 evolution
    • Red+Green+Blue+Military+High Tech+Production - 0.99 evolution
    Then for each section I tested both offensive combat and defensive combat using the available guns and turrets and tweaked the numbers accordingly. While tweaking the numbers, I keep this in mind (this is not a complete list):
    • Fun always wins: I prefer changes that are more fun and less annoying even if it means it could be slightly unbalanced.
    • New weapons should be slightly more powerful than old weapons, to incentivize you to experiment. So near the end game, a rocket launcher will be better than the machine gun.
    • Destroying biter bases is hard in the beginning and significantly easier toward the end game, to give the sense of combat power progression.
    • Defending is not too hard in the beginning. I try not to put a new player in the situation of "you didn't prepare properly, you have to start a new game, because no matter what you do you will get killed". Then throughout the game you have to upgrade your defenses as the biters evolve.
    So far, the changelog looks like this. There are many numbers that were tweaked and are not included in this list.
    • Player regains health at a much higher rate, but only after being out of combat for 10 seconds.
    • Discharge defense equipment pushes back, stuns and damages nearby enemies when activated by the remote.
    • Decreased the size of Discharge defense equipment from 3x3 to 2x2.
    • Greatly increased the damage of Personal Laser Defense Equipment.
    • Flamthrower gun has a minimum range of 3.
    • The flames created on ground from the flamethrower significantly increase in duration and damage when more fuel is added to them by firing at the same spot.
    • Increased fire resistance of biter bases.
    • Increased the health of player non-combat buildings.
    • Increased player health from 100 to 250.
    • Increased collected amount and effectiveness of Raw Fish.
    • Increased the damage, range and health of biters worms.
    • Decreased health and resistance of Behemoth biters.
    • Doubled the stack size of all ammos.
    • Tweaked the cost and crafting time of some ammos.
    • Increased the damage of most player ammos. Greatly increased the damage and fire rate of Rockets and Cannon Shells.
    • Increased the collision box of Cannon Shells.
    • Increased Tank health and resistances.
    • Added research for Tank Cannon Shells damage and shooting speed.
    • Tweaked research bonuses and added more end-game research for military upgrades.
    • Greatly increased the damage of Mines. They also stun nearby enemies when they explode.
    • Biters stop following player after 10 sec of not giving or receiving damage if the player is more than 50 tiles away.
    • Other minor changes.
    As usual, these changes are not final and will probably change to some degree as we playtest more. There are still many things to be done. We are always talking about more end-game weapons, so don't worry, the combat in the late-game will be even more worry-free. There is also one thing that we always talked about trying to remove: turret-creep (destroying biters base building turrets closer and closer). This method is very powerful and usually doesn't cost anything. So far I believe that we did not find a simple, fun and fair solution. Ideas include: large power-up times(annoying and also weakens base defense); simply not allowing turrets to be build near biter bases (makes the player feel cheated); underground anti-turret worms (sugar-coated version of the previous idea). With the combat changes that were done I believe there is almost always an option to destroy bases without being forced to use turret-creep.In the end maybe your ingenuity and effort of building all those electric poles should be rewarded; If the player wants to do it that way, why not let him? Let us know what you think.

    Wave defense


    With Twinsen diving into the deep end in combat, I (Klonan) started work on a new scenario. A staple of the RTS genre is some sort of a tower defense mode, where mobs spawn and move towards a key building the players must defend, so of course we had to give it a shot in Factorio and see if it works. The traditional definition of a tower defense has the mobs follow a maze like path, and they do not attack the players towers. It works really well in these games due to the mob and tower varieties, interesting upgrade systems and styles, but without these systems here, the gameplay would not be too compelling. So I opted for a more free form Factorio oriented style, that I'm calling the 'Wave defense'. The players will spawn in one corner of a square map, with biters spawning in the opposite. After some time, the biters will begin spawning for a period, and head towards the silo. After this wave, there is a short skippable intermission before the next more powerful wave starts.
    At start of each wave, the rocket silo ticks up if progress by 5%, and on wave 20 you will have to launch a satellite to win. Each unit you kill along the way will reward your team with a bounty, which you can use to purchase any number of upgrades, such as turret damage, shooting speed and more. The testing of the scenario fits in quite nicely with Twinsen's recent combat changes, it will take many hours of playtesting to find a nice balance to how difficult the scenario, especially in multiplayer. Still I am interested if any of you (the community members) had any different ideas about a 'Tower defense esque' level for the game. So let us know if you have any thoughts and opinions you'd like to share over on our forum


    [ 2016-12-16 16:09:18 CET ] [ Original post ]

    Friday Facts #168 - Nightvision Nightmare

    Nightvision nightmare


    As Twinsen continues tweaking the combat, he started to complain about the “green fog” effect that is applied during night when the player’s character has nightvision goggles equipped. Nightvison in 0.14 works in a way that it reduces the darkness of night, and then draws a transparent green overlay. This washes out the colors, reduces contrast, and makes the picture pretty unpleasant to look at.
    The first idea was to just make the green overlay be rendered around light sources, to reward players who put lights into their bases, by not making the base look worse with nightvision on. This didn’t look too good, and as we were trying to figure out how to improve it, other developers, especially artists, caught on to what we were doing, and started to provide their own ideas. Next we tried to darken only the red and blue channels when nightvision is on. This will make the picture green without losing contrast and we can drop the green overlay. We kept “not applying effect onto lighted area” logic and it started to look interesting.
    Albert wasn’t happy with the result though, so we continued experimenting. We added a soft green tint to lighted areas, and a bright green glow onto the transition between light and darkness. Then we added white highlights to light sources and it finally started to pleasant to look at.
    We will stick with this version for time being, but plan to work on it more. We can’t agree if this change is for better or worse even inside the team. It seems everybody has their own idea about how nightvision effect should look like and what benefits it should provide to players. For example it would be nice to have goggles with greyscale effect that would highlight biters. So maybe heat vision?

    Factorio developer tools


    Game developers usually boast about what great tools they have developed to help create content for their game. For Factorio so far there exists a single python script for creating sprite sheets, and the in-game map editor for creating maps, for scenarios and the campaign. We don’t have any database of all entities from which we would generate prototype definitions or anything like that. There has always been a need for some tools to help the artists with the post-production of sprites, and so we have added a developer feature that allows the Factorio engine to reload any sprite sheet within a second of it being changed. Our artists are very excited about this, as they can edit a sprite in Photoshop, save it and immediately see their changes in the game. Next we plan to add the ability to modify certain prototype values in runtime. This is again mainly intended for artists, but eventually should help balancing various aspects of the game, as we could just open a developer menu and try out several different values in matter of seconds.Hopefully both of these features are also going to be useful to modders, as it should be available to some extent in builds we release to public. As always, let us know your thoughts and opinion on our forum


    [ 2016-12-09 18:13:30 CET ] [ Original post ]

    Friday Facts #167 - Reactors Operational

    Hello, Denis has joined us for another month here in the office, a small overlap with Rseding who is flying back to the USA next week. With the festive season upon us, Tomas and Kovarex have both taken some time off for a vacation.

    Reactor heating and boiling


    As mentioned in a previous FFF, the implementation of the nuclear power will require some changes to the way the boilers currently work. Instead of heating water inside of their fluidboxes, and passing the slightly heated water along, they now output a to a seperate fluidbox. The initial result of this was a unworkable boiler, the small 1x1 size simply didn't play out to make the system intuitive enough. So the solution was to increase the size of the boiler. The new size is 3x2, significantly larger than before, and the power output and fuel consumption had to be changed to fit this new size. This means we can say goodbye to the old 1-14-10 ratio of before. What is the new ratio? We haven't calculated it, but this is what a 0.15 set up might look like.
    Kovarex has also made the first working prototype of the nuclear reactor and its associated mechanics. Each reactor has these 'heat connections', which can hookup connect with the heat pipes and boilers. Heat is than transferred through these connections, where it is used to boil the water into steam. This is all subject to change, but below is how a simple early nuclear power station could be set up.
    This design is of course very inefficient, as the steam engines cannot use all the power available in the steam. Later designs would incorporate the steam turbines and cooling towers, for greater efficiency and power output. The heat pipes will also add a layer of complexity to the puzzle, while the incentive towards larger nuclear power blocks adding to the semi-fractal nature of expanding your designs.

    Red desert biome


    Jurek was focused these days on producing a bunch of new rocks and stones with several different sizes, some new bushes and dry trees. One of the best new improvements is the decals system, a new concept that we are testing on this new biome. The theory behind it is that even having different randomized tile sizes for generating a terrain, the grid still is somehow noticeable there, not to mention the restrictions that tileability produces for achieving the desired result. So we came out with the idea of using big patches (decals) that are working independently off the grid, so by using them we can get a lot of detail for the terrain, and the artists don't have to be concerned about tileability at all. As a side effect, the square grid pattern gets broken and the feeling of the terrain is much better. In the preview we have also the new destroyed railroad, something that Vaclav is working on, he prefers not to show it yet because is not 100% finished, but it is very showable, and fits very nicely in the red desert scene.
    The most important thing in this preview, is that after several experiments, we decided not to render anymore in normal-resolution from Blender. Instead we are going to render just in high-resolution and re-scale the output bitmaps to normal-resolution using a bilinear interpolation. This gives a better result than a separate render output, it is sharper and saves us quite some time and many headaches. Next for the red desert will be finding the best rules with Kuba for generating the map, and hopefully that will be all. Honestly I (Albert) can't wait for this moment of procedural fine-tuning joy. As always, let us know your thoughts and opinion on our forum


    [ 2016-12-02 18:04:40 CET ] [ Original post ]

    Version 0.14.21

    Bugfixes


    • Fixed that the game could crash when a game disappeared from the matching server before its details were requested. more
    • Fixed that numpad numbers didn't work for any game controls. more
    • Fixed crash when merging forces while a player in one the force to be removed was crafting something. more
    • Fixed game would be stuck in main menu if Join Game on Steam failed for some reason.
    • Fixed possible save corruption when roboport was destroyed while robot was repairing it. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-11-29 16:03:37 CET ] [ Original post ]

    Friday Facts #166 - Combat Revisit

    Hello,the hopefully final 0.14 version was recently released, meanwhile most of the team have been assigned their major tasks for 0.15.

    Combat Revisit


    One of the tasks I picked up was to work on the long overdue combat balance. We identified some of the major problem areas. The most pressing issue is that many of the guns and ammo in the game are too underwhelming for their price, and others are completely useless. One example which clearly stands out if the rocket launcher ammo, rockets and explosive rockets. They cost quite a lot in terms of resources, and the time to set up their production. In combat, they are less effective then their cheaper counterparts, such as the flamethrower. To illustrate the problem, Twinsen worked on his highly scientific graph of the current combat system, with the X and Y axis representing the Elapsed time, and Power respectively.
    After some discussion for some different approaches, without much in the way of solid agreement, it was decided that we need to do some more testing. To ease this process I wrote a small internal mod that will allow us to quickly set up some consistent conditions, and see in a reliable and semi-deterministic way, what sort of effect even the smallest changes would have.
    This will hopefully help us collect some solid comparisons for how the combat changes and evolves as the game goes onward. For now I only have a shortlist of what we are trying to accomplish:
    • Nerf turret creeping
    • Generally make the mid-game combat better
    • Bring things more in line with one another in terms of damage and utility
    • Make the biters less of an irritant, but still a threat
    Community feedback will be really important for us on this topic, so please let us know your thoughts.

    Steam award nominations


    Steam has recently announced their Steam award nominations , and there are several categories you can nominate any game for. For example the "Just 5 more minutes" is for the games that keep you playing long long into the night. We think it is a really great idea, allowing the steam community to nominate titles in this way, so be sure to vote for your favorite games.

    Community Spotlight


    We had to include this week the absolutely spectacular combinator display by DaveMcW: https://youtu.be/mgfwwqwxdxY If you like to read more about his creation, you can read his thread on the forum, or even read the recent PC gamer article about it. This player also proved to be a good chance to test the circuit network optimizations in 0.15, and in comparison to 0.14, it runs about 18x faster. As always, let us know your thoughts and opinion on our forum


    [ 2016-11-25 18:38:36 CET ] [ Original post ]

    Friday Facts #165 - Death by a thousand cuts

    Mod settings


    Right now when you want to customize a particular mod you have to: [olist]
  • Know what folder the mods are stored on your computer
  • Unzip the mod
  • Figure out what line of which file has the thing you want to change
  • Save and optionally re-zip the mod
  • Hope what you changed is compatible with the way the rest of the mod works[/olist] The game also forces everyone playing on the same multiplayer session to have identical mod files so any changes you've made make it impossible for you to join others unless they also have made those changes. This also makes it difficult for mod developers to troubleshoot bug reports because they don't know what you might have changed. This is obviously not so great and I want to address the main problem: there's no good way for mod developers to give users any portable way to configure their mods. To fix this we're going to add the ability for mods to define settings that will be presented like our in-game options menu now under a new section "options -> mods". This will let mods give some basic information about what kind of setting they have and we can present it to the player in a (hopefully) nice GUI with verification and feedback about why what they've entered isn't valid (if it's not valid) as well as the ability to change them runtime should the particular setting allow it. We can then sync these settings on joining multiplayer sessions (or not should you not want your settings to carry between games) and everything will just work.

    Optimizations


    My (Rseding91) favorite tasks are still optimizations. I can sit for hours (sometimes all day) working on improving some section of the code and not get bored. 0.12 saw a major improvement in performance and during 0.13 development there were a few edge case slowdowns that got fixed but nothing much was done during 0.14 development. For 0.15 I've started looking again at performance and not at the obvious slow areas. Mostly because there aren't any obvious huge slow areas (or we already know that 25,000 belts tend to be slow) but all of the surrounding code that gets run each tick. Honza (another Factorio developer) said it best to me the other day: "I think our performance issues are death by a thousand cuts." meaning there's no one thing that's particularly slow but everything is just a little bit slow. I took a few larger save files and started looking at them and every time I would re-run the profiler some small piece of code would show up taking 1-2% of the time. I'd spend 20~ minutes re-writing it and then it takes < 0.1% of the time (not accurately measurable by the profiler). I did that for 3 days and when I finished with the saves I had the end result was almost a 2x speedup over 0.14. Our test suite was invaluable during all of this to make sure I didn't break anything in the name of performance. The great part about these "micro optimizations" is that they are almost never specific to one thing but are shared pieces of code so improvements to them gives general gains across the entire game. The save files I was testing with that would run around 30 UPS in 0.14 are now running between 55 and 60 UPS in 0.15. There are still many more areas like this that can be addressed so I'm always interested in unique save files that stress different parts of the game.

    Rendering test


    Albert has spent some time this past week making a test render to see how the new train models will hold up in higher resolution settings, and has put together this UHD render of a simple train scene.
    While the final render may look very pretty, it only has a minimal amount of post-processing applied, instead relying on the setup of the scene and the specifics of the render to really show off the latest models. As always, let us know what you think on our forums


    [ 2016-11-18 19:41:03 CET ] [ Original post ]

  • Friday Facts #164 - Nuclear power

    Hello!

    The planned release date of 0.15


    There are many things we want to have finished for 0.15, so the estimate isn't precise. The plan is to have approximately 3 months to implement all the planned changes, so it could be expected around february 2017.

    The optimisations


    The decoratives optimisations that were mentioned in the fff-157 are finished and working well. Not only the save file has been reduced (46Mb to 25 Mb on my map), but the memory footprint and overall performance is better. The reason of the performance improvement is, that once decorative isn't regular entity, it doesn't need to be iterated over when doing area based entity search (typically for collision checks) and also the memory fragmentation is not that bad. Rseding is doing a lot of small optimisations for 0.15. Each of them is usually not that big, but the overall gain starts to be noticeable. We will cover them in more details in the next fff, but I expect that the 0.15 will provide a big performance boost.

    Nuclear power


    We created the basic specification of the nuclear power this week, so we can start working on it. The plan is to implement the nuclear power in a way, that it is almost always more efficient to make bigger and more complex setup compared to just copy pasting the "standard nuclear power blueprint" over and over. This is the list of changes and additions we are planning. 1. Water and steam To make the other changes reasonable, we had to go back and change how the basic boiler->steam engine power generation works. These are the changes of rules:
    • Water above 100 degrees is considered steam.
    • Steam engines only work on steam, not hot water
    • Boilers only accept water, not steam.
    This is how the boiler works now:
    In 0.15, it will have extra output for steam at fixed temperature:
    This way, the basic setups will not change that much, as instead of this:
    The players could do something like this:
    2. Steam turbine Apart from being much more powerful version of the steam engine, the steam turbine will also work differently. The current (basic) steam engine uses the fluid it gets to generate electricity and consumes it. The steam turbine will just cool the steam down. Lets say from 500°C to 120°C. But the result will still be steam. You can either send it to the regular steam engine to get rid of it, or if you want to be more efficient, you can send it back to the boilers. But the boilers only accept water, not steam. This is where the next piece will be used. 3. Cooling tower Cooling tower mainly looks good and adds the iconic feel of power plant, but it will also have the same purpose in factorio as in real life. It accepts steam, and cools it down enough to make water out of it again, so it can be used in boilers. The main advantage is, that heating 95°C water back to steam requires much less energy compared to heating the 25°C water you get from the lake. 4. The nuclear reactor All the previous changes are usable also with the regular coal boilers and provide more efficient and powerful way to use the heating power. The nuclear reactor is just a more powerful way to generate heat. The nuclear reactor will process the nuclear fuel (Its processing isn't specified yet) and generate heat. The reactor will have several levels of production, the more active, the more energy it does and the more efficient it is. The problem is, that changing between the production levels won't be instant, so trying it shut down too late might not be enough to prevent overheating and explosion ... a big one. It will be certainly possible to make not so efficient but safe setups that will be simple to build, but the most efficient reactor will require circuit wiring that controls its production levels based on the energy storage capacities, heat and other things. We are just trying to force easy to learn hard to master again. The additional feature of reactors is, that two reactors next to each other connect. (It should be obvious, but before you ask in the comments, no this is not going to be the final look of the reactor ^^)
    Reactors support efficiency of the neighbours, so this way the production can be increased even more, but the more reactor units are connected together, the harder it is to transfer away the heat concentrated on a small place fast enough. 5. Heat pipes The heat pipes will be used to transfer the heat from the reactors to the boilers. The heat pipes will have to branch a lot to connect to enough of boilers as the efficiency of heat transfer decreases with distance quite fast. I was even considering adding option that is not realistic (at least with the current technology), but it could add a lot of interesting gameplay possibilities. Imagine that you could store the heat in some kind of item. Maybe some kind of special metal with huge heat capacity. That would mean, that you could use the logistics to transfer the heat from the central reactor place even faster using our logistics possibilities. I like the idea that the biggest possible reactor could be only done by having high capacity train stations all around transferring the heat away in a huge quantities.

    Looking for 3d artist


    We are starting the last sprint for finishing factorio 1.0 and this requires support of the graphics department so we are looking for an artist. The work is not simple, so if you are not into complicated 3d stuff, Blender, tilesets, complex pipeline with scripting, postprocessing with After Effects, you wouldn't like this position. Not the mention the understanding of aesthetics and geometrical tricks is also required. If you think your profile is fitting enough don't hesitate to send us your portfolio. And as always, stop by at our forums and let us know what you think.


    [ 2016-11-11 14:18:33 CET ] [ Original post ]

    Version 0.14.20

    Bugfixes


    • Fixed LuaSurface::can_place_entity didn't work for tile ghosts. more
    • Fixed curved rails woudln't render correctly as enemy forces.
    • Fixed searching in the technology GUI wouldn't work in some cases. more
    • Fixed that the config option other.use_version_filter_in_browse_games_gui defaulted to false on linux. more
    • Fixed "E" (close GUI) couldn't be used when numeric-input fields were focused. more
    • Fixed that disabling recipe groups in the settings disabled subgroups as well.
    • Fixed that the changelog GUI allowed editing the read-only text. more
    • Fixed (again) that the natural signal direction wasn't picked primarily when 2 way signal and normal signal can be built on the same spot.
    • Fixed that deactivated belts would sometimes still move items if connected to Underground Belts or Loaders. more
    • Fixed that the multiplayer game could crash randomly due to the packet fragmentation implementation issue.

    Scripting


    • Added LuaPlayer::disable_recipe_subgroups.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-11-10 12:56:06 CET ] [ Original post ]

    Friday Facts #163 - New rails New problems

    Hello, Rseding has just arrived for another 6 week visit here at the office, and his timing is pretty great as we start shifting the focus onto 0.15, of which our to-do list is extremely long.

    0.14 now stable


    We have just launched 0.14.18 as our stable build, this means it has been pushed to all users on steam, along with the website users being prompted to automatically update. Stable however doesn't mean we won't be releasing any further 0.14 builds, as inevitably with more people playing the release, there will be many more bugs found. In fact we are already in the process of releasing a quick fix for the stable, as people have reported that the demo does not work, a minor issue to most, but something that might not give the best first impression. Once we have all the kinks sorted out, stable release means we will be taking a look at our marketing options in the upcoming weeks. We feel that 0.14 is a good distance from the early access release, and a whole lot more improved from the stable 0.12 we initially launched with, so it is a good time to make another push to spread the word. As always, we owe much of our success to all of the players who continue to make the effort of telling their friends about the game, and we would have never come so far without such a great community supporting us.

    Rails and their problems


    As kovarex mentioned in one of the recent FFF, the current rails are using a very simple system which aims to minimize the amount of used sprites, so it only uses five sprite types: horizontal rail, vertical rail, diagonal rail, horizontal curve and vertical curve. Then these four sprite types were flipped and rotated to their positions. To ‎make this visually work, it was necessary to use top-down projection with minimal signs of perspective. Which is a gigantic limitation, especially since almost all of the entities are projected at 45 degrees. Each of the four sprite types had four layers each to prevent things from overlapping in junctions, I will describe that in more detail later down.
    Old and new basic rail rings. On the left same colour shows identical sprites. On the right all sprites are unique. Now, we are defining unique sprite for each rail piece, and for straight ones we add 2 extra variations. The main benefit of this is removing the top down limitation‎ and having the rails more consistent with the rest of the game. Another aim is getting them into high resolution - and since the old rails were made in 2D, any kind of conversion to both more resolution and a different perspective wasn't doable, so we took our chance to redesign them. The "more 3D" perspective brought new problems though. Most of them are fixable through adding more layers...
    First issue appeared fast - the vertical sides of rails would overlap the top side in junctions. I have been battling this exact problem in OpenTTD with no success for a long time, so I immediately knew that the solution is to split them into 2 layers, something I couldn't do back then, but we can in factorio.
    Proceeding further, the old rails had the ties (sleepers/ wood planks)‎ at 45degrees on diagonal tracks in order to be perpendicular to them. Which didn't look utterly wrong as the whole thing was top-down - it even made sense in that way. But now, when at 45 degrees, it suddenly looked very wrong, so it had to be redone. Another thing we don’t really know why is that the old rails had more ties in horizontal view than in vertical, which should be exactly the opposite way to make the illusion of perspective… so we fixed that, too.
    Redoing the ties was not that easy though, as they need to tile properly to all other combinations where they could connect. As I soon realized, doing this by trial and error / by eye was extremely tedious and took a long time without any results, I would fix one combination and other 2 combinations would break. Luckily, blender has a very convenient feature for this called Group instances, which lets me group objects, and the use their clones to preview all the combinations with a live preview. The slight issue was that there is 148 ties, and apart from grouping they also need to be cut by the grid to represent how the final sprite is going to look. Doing this manually is tedious and if I needed to repeat the process, my brain would probably derail. So I spent a few days getting into blender's python, and with the help of our programmers, we managed to create a script which automatically detects if an object has an intersection in a sprite, and cuts it + groups it to that sprite if it does. This creates a live preview which makes it very easy to see what is tiling with what. Automation, anyone?
    To make entities look nice, almost all of them have some kind of integration as we call it. This is usually a slight dark outline/glow where they touch the ground. As a result, it looks more connected to the ground, and makes sure that it works in all the various terrains we have (and Jurek is adding more at this very moment).Next step was to make the rails integrate with the terrain properly. The old rails had just a very binary noise without any semi-transparency, which is simple but hides yet another problem - when tracks overlap in junctions, the semi-transparency starts stacking on top of each other. In some cases there is unfortunately no systematic solution so it was solved visually to minimize the effect. As I mentioned earlier, the old rails were using 4 layers. Worth mentioning that only 3 of them were absolutely necessary to reach the same functionality. Since the rail metal parts needed splitting into two layers with the new system, we are suddenly using all 4 of them, and we are even adding a 5th layer to have junctions draw more nicely.
    Early in the process (after the first render), I quickly realized that the rails are using almost 200 images when counting both normal and high resolution. After every re-rendering, I would have to go and rename all of them because their format needs slight adjustment for our naming conventions, and I would have to crop each of them. So, for the first time I attempted to write a python script to do these things for me, and it’s magic! Automation is magic? And then I went and iterated the rails over and over again to get a nice result.
    Once again we discovered that making high resolution sprites isn’t just 'render it in double size', as you can probably tell from reading the above. Especially with something in totally different projection than the previous version. We believe the result is worth it in the end. As always, let us know what you think on our forums


    [ 2016-11-04 15:58:27 CET ] [ Original post ]

    Factorio version 0.14 - Now stable


    The latest version 0.14 of the game is now declared stable. It took us 8 months since the release on Steam Early Access. We took our time to deliver many new features, usability improvements, and also to fix all of the community reported bugs we could (and it has been a lot). Below are some of the major additions to the game since we launched on Steam Early Access:

    Reworked Multiplayer


    The multiplayer module has been completely redone, with focus on speed, scalability, and stability, along with improvements to the general user experience. The servers can now support games with hundreds of concurrent players, such as this event hosted by a player: Factorio Mass Multiplayer Session 2. Big events like these gave us a lot of feedback for user improvements, in many areas of the multiplayer game. Browsing and joining public or LAN games is now done directly from the in game dialog. We worked a lot to make the process of creating, joining and playing the game, even with a large amount of other players, as smooth as possible. As a small bonus there is now the Production challenge Multiplayer scenario shipped directly with the game.

    Train System improvements


    The train system has seen a large number of changes, both to the gameplay and user experience aspects. The model and sprite for the locomotive and cargo wagon have been completely redesigned, there is a new locomotive gui and train stop gui, a rebalanced max speed and acceleration system, and a new train overview screen. Laying new rails and junctions has been semi-automized (This is a game about automation, remember?). All these changes combined make train systems of various sizes much easier to build and manage.

    Steam achievements


    The game currently has 38 achievements you can earn, including speedrun challenges, production milestones, and limitation based accolades. If you are a completionist player, these will really give you something to strive towards.

    Technology tree


    The new techonology gui allows easy and intuitive viewing, choosing, and browsing of technologies and their prerequisites. This mod compatible system allows even the most convoluted research paths to be displayed in a simple format, making the choice of which path to take much easier.

    Circuit network extension


    The number of possiblilities with the circuit network has been exponentially increased with the addition of more circuit connectable entities. The most powerful features of this extension come from the ability to connect transport belts and inserters to the circuit network. You can also connect train stops, accumulators, power switches, gates, rail signals with more to come in the future.

    Much more


    Apart from all this there are other things waiting for you in the update: flamethrower turrets and fire spreading, more realistic map generation, in-game accessible mod portal, the blueprint book to organize your blueprints, power switches, and many others to discover... We still have more updates planned for the future, you can checkout the plan on our forum.


    [ 2016-11-03 16:04:29 CET ] [ Original post ]

    Version 0.14.18

    Bugfixes


    • Fixed Supply scenario Gui when playing in multiplayer.
    • Fixed unresearchable gates technology in New hope campaign level 1. more
    • Fixed LAN games getting deselected. more
    • Fixed crash when clearing items robots held through script. more
    • Possibly fixed xrandr related crash on Linux. more

    Minor features


    • Added minimum_latency_in_ticks to server settings (for headless server) and into config (for starting game from gui).
    • Enemy players are shown on the map when the chunk is being charted (a radar or player is exposing it).
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-11-03 10:37:04 CET ] [ Original post ]

    Friday Facts #162 - Theme Art Again

    Hello, the 0.14 stabilization is still ongoing, we are in the final stretch now and hope our latest release might be declared stable soon, along with a marketing push on steam. Until then here is some news about ongoing developments this week:

    The great fluid multiplier


    So the fluids within the game are measured in somewhat arbitrary units, for the most part is doesn't matter so much which units the volume is measured in. However over the past couple of major versions there has been some back and fourth about how we count these units. To keep it brief, the problem is whether to floor to the nearest significant figure, or to round to it, further reading here. Another issue was that the circuit network works in integers, and which way the fluid count should be rounded as it is outputted as a signal. This great inconsistency didn't sit right with Twinsen, so he took it upon himself to sort it all out. First thing was to decide how to round it, flooring it was an easy choice, and was already how most of the counts in the game work. But this led to a noticeable issue, pumpjacks would show as "0.0/s" when depleted. It was clear that at low values the system was not very intuitive, so next was to try adding a suffix to the low values, such as m for 1/1000 of a unit, and n for 1/1000000 etc. This would fit with the rest of the game, in that we have K, M and T suffixes for large numbers. There was some worry however, as several member of the team disagreed as to at which point the lower suffix should be used, and if it was even worth it for such a minor issue. After long discussion a more novel solution was decided on. From 0.15 all the fluid values in the game will be multiplied by 10. This was not as simple as changing a single variable though, as many many aspects of the fluid system interact with other parts of the game. For instance, hot fluid is consumed by steams engines to generate power, so they would need to consume 10x as much fluid, yet only generate the same amount of power. In total there were close to 50 different prototype values (recipes, items etc.) that needed to be adjusted, along with the engine logic and tests. The change will allow much greater precision in the display and logic of the fluids, along with mitigating the rounding issues and circuit network interactions.

    So long and thanks for all the science


    Kovarex's playthrough of the current 0.15 has been continued in good form early this week, with him making the transition from a main bus to a station/outpost based factory. Feeding his factories growing thirst has meant a lot of time is spent out in the wilderness securing greater and greater areas of land, to exploit for its mineral worth. As a consequence of the research overhaul, the alien artifacts are no longer used for research. This has been a really well received change, allowing players to finished the game without the need to engage the biters. The motivation for expansion is really clear in the game now, you need to expand to secure more resources. A secondary consequence of this is that sometimes the biters are in your way, so you get rid of them. However without the research needed them, the artifacts are only used in a few niche products, namely the fusion reactor and level 3 modules. The requirements of these few recipes was not very great, and very quickly the artifacts start accumulating in large numbers. When the player has his late game armor and weaponry, the clearing of biters nests becomes very quick, and it happens on a larger and larger scale. Such the number of artifacts you need to pickup increases. It becomes then that the process of clearing nests and destroying the spawners is very fast, but the time spent collecting all the loot becomes a tediously long and monotonous task after each victory. So after some thought, it was decided the alien artifacts that spawners drop are no longer needed. Their original purpose was to add them as a sort of 'RPG' layer to the game, such that combat would reward you with the artifacts to upgrade your character. In the latest state of the game this motivation just doesn't work, they serve more as a distraction than an addition to the combat. We hope this comes as good news to a lot of players, please let us know your thoughts on this, as it is quite a big change.

    Theme art revisited


    Long time ago we have mentioned that we are working on new theme art series with external artist. Unfortunately that cooperation has failed but we never abandoned the idea of having high quality Factorio theme art for online presence propagation, wallpapers or maybe printable posters one day. We were (well still are) looking to produce a series of about 12 theme pictures kind of telling a story of a factory evolution in the game. Recently things have started moving in this area again. We have teamed up with an italian artist Marco Turini living in Prague. Marco has rich experience in the comics industry (he worked for Marvel, DC Comics or Top Cow to name a few), he made official covers for some game-inspired comics (Assassin's Creed, Dark Souls and Deus Ex) and he has also experience from movie production both in Italy and Hollywood. So far it seems like we are a good fit. From his side, he is interested in the job both from the perspective of getting deeper into the games industry as well as general Factorio ambience. And from our side he possesses all the qualities to produce what we are after. Below you can check out a concept that Marco made as a testing project for us. This is NOT one of the pictures for the final collection, it is just a test to see whether our cooperation makes sense. That is why there is not too much sense in the picture with "cloned" objects in line. However the style is what matters here and that we find very fitting.
    Oh and by the way, Marco is running a project to launch his 2017 Scifi girl calendar on Indiegogo at the moment. It is not Factorio related and some of the pictures are rather "spicy", but feel free to check it out, if that is your cup of tea ... As always, let us know about your thoughts on our forums.


    [ 2016-10-28 16:43:09 CET ] [ Original post ]

    Friday Facts #162 - Theme Art Again

    Hello, the 0.14 stabilization is still ongoing, we are in the final stretch now and hope our latest release might be declared stable soon, along with a marketing push on steam. Until then here is some news about ongoing developments this week:

    The great fluid multiplier


    So the fluids within the game are measured in somewhat arbitrary units, for the most part is doesn't matter so much which units the volume is measured in. However over the past couple of major versions there has been some back and fourth about how we count these units. To keep it brief, the problem is whether to floor to the nearest significant figure, or to round to it, further reading here. Another issue was that the circuit network works in integers, and which way the fluid count should be rounded as it is outputted as a signal. This great inconsistency didn't sit right with Twinsen, so he took it upon himself to sort it all out. First thing was to decide how to round it, flooring it was an easy choice, and was already how most of the counts in the game work. But this led to a noticeable issue, pumpjacks would show as "0.0/s" when depleted. It was clear that at low values the system was not very intuitive, so next was to try adding a suffix to the low values, such as m for 1/1000 of a unit, and n for 1/1000000 etc. This would fit with the rest of the game, in that we have K, M and T suffixes for large numbers. There was some worry however, as several member of the team disagreed as to at which point the lower suffix should be used, and if it was even worth it for such a minor issue. After long discussion a more novel solution was decided on. From 0.15 all the fluid values in the game will be multiplied by 10. This was not as simple as changing a single variable though, as many many aspects of the fluid system interact with other parts of the game. For instance, hot fluid is consumed by steams engines to generate power, so they would need to consume 10x as much fluid, yet only generate the same amount of power. In total there were close to 50 different prototype values (recipes, items etc.) that needed to be adjusted, along with the engine logic and tests. The change will allow much greater precision in the display and logic of the fluids, along with mitigating the rounding issues and circuit network interactions.

    So long and thanks for all the science


    Kovarex's playthrough of the current 0.15 has been continued in good form early this week, with him making the transition from a main bus to a station/outpost based factory. Feeding his factories growing thirst has meant a lot of time is spent out in the wilderness securing greater and greater areas of land, to exploit for its mineral worth. As a consequence of the research overhaul, the alien artifacts are no longer used for research. This has been a really well received change, allowing players to finished the game without the need to engage the biters. The motivation for expansion is really clear in the game now, you need to expand to secure more resources. A secondary consequence of this is that sometimes the biters are in your way, so you get rid of them. However without the research needed them, the artifacts are only used in a few niche products, namely the fusion reactor and level 3 modules. The requirements of these few recipes was not very great, and very quickly the artifacts start accumulating in large numbers. When the player has his late game armor and weaponry, the clearing of biters nests becomes very quick, and it happens on a larger and larger scale. Such the number of artifacts you need to pickup increases. It becomes then that the process of clearing nests and destroying the spawners is very fast, but the time spent collecting all the loot becomes a tediously long and monotonous task after each victory. So after some thought, it was decided they are no longer needed. Their original purpose was to add them as a sort of 'RPG' layer to the game, such that combat would reward you with the artifacts to upgrade your character. In the latest state of the game this motivation just doesn't work, they serve more as a distraction than an addition to the core gameplay. We hope this comes as good news to a lot of players, please let us know your thoughts on this, as it is quite a big change.

    Theme art revisited


    Long time ago we have mentioned that we are working on new theme art series with external artist. Unfortunately that cooperation has failed but we never abandoned the idea of having high quality Factorio theme art for online presence propagation, wallpapers or maybe printable posters one day. We were (well still are) looking to produce a series of about 12 theme pictures kind of telling a story of a factory evolution in the game. Recently things have started moving in this area again. We have teamed up with an italian artist Marco Turini living in Prague. Marco has rich experience in the comics industry (he worked for Marvel, DC Comics or Top Cow to name a few), he made official covers for some game-inspired comics (Assassin's Creed, Dark Souls and Deus Ex) and he has also experience from movie production both in Italy and Hollywood. So far it seems like we are a good fit. From his side, he is interested in the job both from the perspective of getting deeper into the games industry as well as general Factorio ambience. And from our side he possesses all the qualities to produce what we are after. Below you can check out a concept that Marco made as a testing project for us. This is NOT one of the pictures for the final collection, it is just a test to see whether our cooperation makes sense. That is why there is not too much sense in the picture with "cloned" objects in line. However the style is what matters here and that we find very fitting.
    Oh and by the way, Marco is running a project to launch his 2017 Scifi girl calendar on Indiegogo at the moment. It is not Factorio related and some of the pictures are rather "spicy", but feel free to check it out, if that is your cup of tea ... As always, let us know about your thoughts on our forums.


    [ 2016-10-28 16:36:39 CET ] [ Original post ]

    Version 0.14.17

    Bugfixes


    • Fixed quickbar clearing wouldn't work when taking part of the stack. more
    • Fixed that mod browser sorting column would be ignored after using the search. more
    • Actually fixed Has Mods filter in browse games GUI more
    • Fixed that the "can't open enemy structures" error would show when it was never possible to open any GUI for the entity. more
    • It's now not possible to switch to the install-mods screen while there are mods pending deletion. more
    • Fix constant combinator ignoring item_slot_count prototype change after creation more

    Changes


    • Tweaked map transfer algorithm.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-10-28 10:56:31 CET ] [ Original post ]

    Version 0.14.16

    Bugfixes


    • Fixed crash related to technology migration. more
    • Fixed item sub groups wouldn't be used in the recipe GUI when item groups were disabled. more
    • Public and LAN game visibility are now separate settings (in GUI and in server-settings.json), and they can be toggled runtime with the /config command. See data/server-settings.example.json for a way to specify the visibility, as the old one will not work anymore.
    • Fixed has password/mods filters not working.
    • Fixed problems with determining external IP address for MP games. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-10-25 16:33:10 CET ] [ Original post ]

    Version 0.14.15

    Changes


    • Improved the browse-mods GUI by downloading mods while browsing the mods list.
    • Improved the delete-mod functionality in the installed-mods GUI.
    • Achievements unlocked locally without using steam get unlocked on steam once the game is started in steam mode.
    • Storage tanks connected to the circuit network will output floored fluid values instead of rounding them.

    Bugfixes


    • Fixed that biters would sometimes attack non-polluting entities more
    • Added commandline option --bind to select an ip address to host a game at more
    • Fixed that different capitalisation of the same username could be used to: 1. join the game twice 2. evade the ban list 3. evade admin list.
    • Fixed fluid info would get rendered twice when alt-info was on while hovering the mouse over assembling machines. more
    • Fixed that it wasn't possible to connect with too many mods. more
    • Fixed crash when pasting huge strings into mod GUIs. more
    • Changed the clear blueprint icon to the trashcan icon and moved ot on the left of the cancel button, so it is less confusing.
    • Fix of possible leak of information box windows when closing game. more
    • Fix PRINTSCREEN and SCROLLLOCK not working as keybinds. more
    • Fix map download limit not working for speeds under 101KB/s. more

    Scripting


    • Added LuaSurface.set_chunk_generated_status().
    • Added defines.chunk_generated_status.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-10-24 20:00:03 CET ] [ Original post ]

    Friday Facts #161 - Infinite Research and Blueprint Library

    Hello, pretty much half of the office has been sick in the past week, but that still hasn't stopped us from progressing in the development of your favourite pollution-generating game (though I have been playing some Cities skyline recently and there you can screw the nature around quite creatively as well).

    Infinite research


    The reason for infinite research is mainly to give some optional resource sinks for people that like to make huge factories. The research cost/gain ratio is going to have diminishing returns so the player bonuses don't become too absurd. The main problem was to define the way to specify the research requirements growth. Sometimes it should be linear, sometimes quadratic, sometimes exponential. To make the modding of it free enough, we allowed to specify it via a formula, so for example, the Worker robot speed research 6+ has the formula specified like this: count_formula = "1000*2^(l-6)" where the l stands for the level of the research. I wrote our own small math formula parser for Factorio, so the formula is parsed only once and stored internally as the graph of the expression, so it can be evaluated quickly for different values. We might find handy usages of this on other places in Factorio later on as well. Anyway, the formula as it stands means, that the level 6 costs 1000:
    As every other level costs twice of the previous one, the level 10 costs already a ton:
    This change was easier than I expected and the plan is to have infinite research for most of the upgrade technologies in the game, which is now very simple to add to the game. I'm looking forward to see how far I can go with my playtesting base with these. I'm thinking of a way to improve the circuit production already :)

    Blueprint Library


    We have made quite some progress on the Blueprint Library, which will be one of the bigger 0.15 features. Check out the introduction in the FFF-156 if you need. At the moment the basics for the singleplayer usage are finished. You can have blueprints stored locally in the game as well as in the persistent (across saves) storage. There is (hopefully) intuitive gui to work with the library. You can export blueprints and blueprint books from the game to the library. There it is possible to move the blueprints around simply by dragging either within the same storage or for instance from game storage to the persistent storage or vice versa. Of course you can move the blueprints in and out of the blueprint books as well. Detail guis for blueprints and blueprint books are very similar to the guis already in the game with additional possibility of (instant) crafting and deleting the blueprint / book from the library. Screenshots show the proof of concept with details of a single blueprint book and then a blueprint within that blueprint book opened.

    The next point in the Todo list is to make the whole thing work for the multiplayer as well - you can see other players' blueprints and download them. This will require some fragmentation tricks to avoid hiccups when sending a lot of blueprint data over the network.

    Yet another 0.15 optimisation


    As part of multithreading update preparations, another nice little optimisation came up. It is related to situations like this:
    The problem is, that there are a lot of chunks where nothing happens, only pollution needs to be calculated.The pollution simulation is written in a way, that every chunk updates its pollution spread only once per 60 ticks (once per second). Every chunk updates at different moments of the 60 tick cycle, so the cpu drain is distributed.The problem is, that the code was written in this way: // handle pollution (every second for performance reasons) if (tick % 60 == uint32_t(abs(this->position.x) + abs(this->position.y)) % 60) ... handling pollution logic ... This means, that for all of those chunks that have nothing else but pollution, the game has to go through and check whether its pollution shouldn't be updated this particular tick or not. As I know when the chunk is going to be updated next time (in 60 ticks), I can just add it to the particular queue of chunks to be updated in the 60 ticks ahead. This means that these particular chunks (as long as something else doesn't interfere) will not have to be accessed at all in the meantime:
    This change itself improved the performance of big factories by something like 7%.

    UX designer hunt


    As you probably know we intend to polish the game and user experience within the coming releases. This includes the GUI overhaul, improving the existing missions and adding the so called mini-tutorials or interactive tips and tricks (mentioned in the previous FFF) - Scott has actually started to work on these and he will bring some news soon. With all these plans ahead we have figured that we really need a dedicated UI/UX designer to work with us on these projects (and maybe some others). As the situation stands all the work would be done by Albert, however finding a contractor who would come here to Prague and cooperated with us on these would be a big relief of workload for Albert and it would allow him to focus on improving the in-game content. Not mentioning that professional UI/UX designer would ideally have the skills to start working on this immediately, while Albert would need some time to do his research. Long story short, if someone you know (or you yourself =)) would fit the job description and find the work interesting, send him our way=) It will most probably end up being a couple of months cooperation when we will require the designer to come to Prague occasionally to discuss the progress. And as always, stop by at our forums and let us know what you think.


    [ 2016-10-21 15:19:36 CET ] [ Original post ]

    Version 0.14.14

  • Changes


    • Added "Show player names on minimap" option to graphics settings.
    • Added multiplayer server option "Autosave only on server".
    • Deconstructing/canceling deconstruction sets the "last user" on an entity.
  • Optimizations


    • Further performance improvements to the trains GUI.
    • Improved performance in the browse-mods GUI when filtering/sorting.
  • Bugfixes


    • Factorio is now per-monitor DPI-aware on Windows 8.1 and Windows 10. (https://forums.factorio.com/33948)
    • Decreased the size of connection accept message with lot of mod which could help some people with 50+ mod multiplayer games. (https://forums.factorio.com/33662)
    • Fixed Alt+Tab while holding right mouse button down made the game GUI unresponsive. (https://forums.factorio.com/33328)
    • Fixed missing localised name definition. (https://forums.factorio.com/33847)
    • Fixed tightspot level 5 recipes. (https://forums.factorio.com/33833)
    • Possible fix for crash when initializing mouse-like devices on some Mac OSX computers. (https://forums.factorio.com/33854) This is followup to bugfix (https://forums.factorio.com/32515)
    • Fixed problems with "The connection has been broken due to keep-alive activity" (https://forums.factorio.com/33310)
    • Fixed wrong calculation of resistances for small damage values. (https://forums.factorio.com/33568)
    • Fixed the trains GUI schedules would force scroll to the current train stop with a large amount of trains.
    • Fixed crash when using LuaGameScript::remove_offline_players. (https://forums.factorio.com/33599)
    • Fixed crash when setting invalid sprite parameters. (https://forums.factorio.com/33868)
    • Fixed crash when loading save with removed entities. (https://forums.factorio.com/33912)
    • Fixed mining drills would keep putting items on belts marked for deconstruction. (https://forums.factorio.com/33911)
    • Fixed crash when removing rails with signals reserved by the circuit network. (https://forums.factorio.com/33910)
    • Fixed that ammo wouldn't be placed in the quickbar even when a quickbar filter was set for it. (https://forums.factorio.com/34020)
    • Fixed very small numbers saved in script state would produce unloadable save. (https://forums.factorio.com/34029)
    • Fixed stuck key in CMD combinations on Mac (hopefully). (https://forums.factorio.com/33572)
  • Scripting


    • Renamed LuaInventory::has_filters to LuaInventory::supports_filters.
    • Added LuaInventory::is_filtered.
    • Removed LuaEntity::has_direction as LuaEntity::supports_direction already exists and does the same thing.
    Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.


    [ 2016-10-14 20:49:27 CET ] [ Original post ]

  • Friday facts #160 - Playtesting

    Hello, once I changed the science packs for 0.15, I had to do a playtest to have a feel of how the changes affect the game. I finished it just before writing this post:
    This was the first single player playthrough in a long time, so there was a lot of new findings. I also enjoyed all the new features, like blueprint book, auto trash, train conditions etc. These were little things but they helped a lot.

    Finding 1 - the game contains a lot already


    The game took me 46 hours to finish. I didn't hurry too much, but it is still quite a long time, considering I played the game several times from start to finish already. It is not always so obvious to me when we are doing little iterative additions one by one, but when playing from start to finish, there are a lot of things to do. I like the moments when I have dozens of improvements to do and I need to choose the most important one for the moment. The complete change of playstyle in different phases of the game (Burner → research → mass production → trains → multibelt setups → construction robots → even bigger mass production → automated delivery → modules → multi platform stations → rocket) felt right. The overall feeling was, that we shouldn't add much to the game content anymore or it will become too complex and big for the newcomers. This means, that when we add nuclear power, dirty mining, and a few little things, that will be it for the vanilla part of the game. We can still do the expansion pack with additional stages of the game and space exploration later, but that is a different story. The additional complexity will have to be optionally available via modding, this is why we have the native mod support. There are still a lot of things to be done even if we don't want to drown the player in features, like optimisations to make bigger factories run smoother, as a big part of the fun comes from organizing logistics of huge quantities.

    Finding 2 - The effects of research changes


    The higher tiers of the research were more expensive and slower (compared to the current 0.14) which I believe is a good thing. Choosing what to research felt more important and as things were unlocked slower. I had enough time to go through almost all the stages of the military options as the game progressed, which felt right.

    Finding 3 - the most needed changes


    The best way to improve the game as I see it, is to minimise the annoying parts of the gameplay. This is the list of changes for 0.15 I decided to do based on this playthrough:
    • Decrease the bounding box of burner mining drills,chemical plants and pumpjacks so walking in between them is possible.
    • Increase stack sizes of belts,walls and pipes from 50 to 100, this is mainly for the later stage of the game with personal roboports, where making train stations and expansions meant having not enough of belts and walls way too often.
    • Figure some way to have low level personal construction robots earlier in the game.
    • Change the oil so the minimum yield is dependent on the starting yield so better fields are also better later on.
    • There are more oil fields (compared to 0.13) which is a good change, but setting them up is quite a chore for big ones, so having fewer of them with higher yield would be better.
    • MK2 personal roboport is a must, as the limit of 10 robots per roboport is not enough in later stages of the game when building bigger setups.
    • Concrete shouldn't be blue science (green only)
    • The electric furnace should be somewhat cheaper. (Especially when it is used in science packs now)
    • Shift click (ghost placement) should go through trees and rocks as blueprints with shift do.
    • Enhancement to the belt building mechanics, so building by dragging makes continuous belt.
    • Limit turret creep as it is way too powerful now (especially with personal roboport) with a turret activation time. As it makes the expansion harder, the resource growth from the center should be higher.
    • Merging items with different health. - We didn't do the item merging, as we didn't want the player lose his precious items as two 49% items would merge into one, which would prevent the player from repairing both for just a few repair. In reality, I feel that the annoyance of having 8 different stacks of laser turrets/walls in my inventory is not worth the rare possibility of losing an item or two.
    • MK2 version of boiler and steam engine. It is going to be a must with the nuclear power, but it should be usable with conventional coal power generation as well.

    Finding 4 - The interactive tips and tricks is a must


    There are many tricks and shortcuts in the game that make the gameplay so much easier. As we don't want to overwhelm the players with huge tutorials in the start, we need to teach them those as the game progresses. This would be done by the little interactive tutorials that would unlock only when it is relevant. Something like this:
    • You build the first locomotive → Tutorial to setup a train schedule unlocked.
    • You build a second locomotive → Tutorial of rail signals unlocked.
    • You build 50 rail signals → Tutorial of chain signals unlocked.
    • You build 10 requester chests → Tutorial that copy paste from assembler to requester chest does exactly what you need.
    • etc. etc.
    • As the tricks would be given to the player in small doses as he plays through the game and mainly when the player is probably just about to use it, we might add lots of these without the fear of overwhelming the player.
    As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-10-14 17:01:07 CET ] [ Original post ]

    Friday Facts #159 - Research revolution

    Hello!

    Research revolution


    As the 0.15 work started, the first thing I wanted to do was to rebalance the science packs. We feel that the science pack 1 and 2 balance is just right, but the level 3 (blue) is quite a large jump in complexity, while the alien science pack is trivial. Then I checked that the last time we changed something about the science packs was 2.5 years ago, so it might be the time to try to be more creative. After some discussions, we decided to make the science packs not so linear and more iterative, the current working version looks something like this:
    The prices of the science packs are subject to change as we need to playtest it, but the first version is this:
    To make the work of reassigning the science packs to technologies easier, I decided to finally implement the so long postponed feature of showing the needed science packs on the technology icon. We also sort the technologies by the highest science pack needed:
    The icons might change, but a late game science setup might look something like this.
    On top of that, I would like to implement the infinite research. It would give smaller and smaller gains, but people could spend the resources on something after finishing the regular research if they wanted to.

    PvP scenario


    This paragraph is brought to you by Klonan. The concept of a player versus player experience in factorio has been around since we introduced multiplayer in version 0.11. Initially there was a small mod which places players alternately on the player and enemy force, the players would then fight it out, with the addition of some craftable biter capsules. With 0.12 we expanded the forces system, to allow creating and assigning forces to players, allowing the possibility of up to 254 different teams in a single game. However PvP attempts quickly fell at the first hurdle: multiple players were needed. With the issues of the peer-to-peer multiplayer, the actual experience was not ideal. With the recent success of the team production challenge and the MMO server tests, we decided the conditions were right to create an official PvP mode. This last week I have been working on the foundation for this new scenario, along with ideas about how specifically it will work, this is what we have so far:
    • The first player to create the scenario will be the gamemaster. He will set some configuration options, such as how many teams, the starting tech level etc.
    • The original starting area will be copied to the new teams spawn positions, each identical to the other.
    • Each starting area will contain a rocket silo.
    • If your rocket silo is destroyed, your team has lost.
    • If you launch a rocket, your team wins.
    • If all other teams silos have been destroyed, you win.
    • When you destroy another team's silo, all their base are belong to you.
    For other specifics we don't have a good idea, such as what to do with the players of defeated teams. The two main ideas were to allow them to spectate players, or allow them to join another team (which didn't defeat them). Another issue is that copying the starting area directly would obviously look odd:
    I had some discussion with Cube about possible solutions, but these would be some large changes to the internal map generator code, so will have to wait for 0.15. Custom maps could be nice and simple solution, especially if someone from the community would come up with proposals. In the end these small issues aside, we think it will be quite an enjoyable gameplay mode, and something for the more competitive players to sink their teeth into.

    Liquid wagon


    Look:
    As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-10-07 20:29:59 CET ] [ Original post ]

    Version 0.14.13

    Changes


    • The /config command now operates through /config get and /config set.
    • Added additional options to the /config comand: allow-commands, max-upload-speed, autosave-interval, afk-auto-kick, verify-user-identity, only-admins-can-pause, ignore-player-limit-for-returning-players.
    • Added tab-complete parameters logic to the commands: config, color, and help.
    • Updated Team production challenge with 2 new challenge modes and a new map set.
    • Reconnecting to multiplayer game that the player already is in (being dropped probably) instantly closes the previous connection and connects the player.

    Optimizations


    • Improved performance when using a lot of vehicles with equipment grids in multiplayer. (https://forums.factorio.com/33688)
    • Improved performance in the Trains GUI when trains have large schedules. (https://forums.factorio.com/33421)

    Bugfixes


    • Fixed desync loop related to solar panels in more than one electric network.
    • Fixed desyncs related to movement of damaged vehicle.
    • Fixed module requests getting removed if concrete was built under them. (https://forums.factorio.com/33655)
    • Possibly fixed hang in stopping sounds when exiting Factorio on Windows. (https://forums.factorio.com/33639)
    • Fixed the small errors of movement in latency hiding.
    • Fixed Gui related script error in team production challenge scenario.
    • Fixed crash when attempting to set belt directions to diagonal directions. (https://forums.factorio.com/33641)
    • Fixed duplicate grenade damage 5 research. (https://forums.factorio.com/33606)
    • Fixed car/tank rotation speed was half what it should be. (https://forums.factorio.com/31815)
    • Fixed map downloader getting stuck and flooding the network after a big timeout.
    • Fixed rotating of placed flamethrower turret. (https://forums.factorio.com/33700)
    • Fixed that /command would warn about disabling achievements even in situations where achievements weren't possible. (https://forums.factorio.com/33597)
    • Fixed that custom gui input was processed even when the game was being saved in singleplayer. (https://forums.factorio.com/33682)
    • Fixed that boiler wouldn't work after being replaced by bots. (https://forums.factorio.com/33723)
    • Fixed possible desync when boiler would get destroyed and created a ghost.
    • Fixed crash when destroying fire during the entity_died event. (https://forums.factorio.com/33763)
    • Fixed that error messages of wrong zip files in the mod folder weren't giving error message that would be informative enough. (https://forums.factorio.com/33790)

    Scripting


    • Added read property LuaEntity::has_direction.
    • Added LuaTile::hidden_tile.
    • Added the ability to use LuaSurface::get_tile(0, 0) or LuaSurface::get_tile({0, 0}) when getting tiles.
    • Added LuaGameScript::connected_players read and LuaForce::connected_players read.

    Modding


    • Added check that the selection box contains the [0, 0] point.
    Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.


    [ 2016-10-05 19:36:38 CET ] [ Original post ]

    Version 0.14.12

    Changes


    • The following settings are now settable only in server-settings: allow_commands - default is "admins-only" autosave_interval - default is 10 autosave_slots - default is 5 afk_autokick_interval - default is 0 auto_pause - default is true
    • Added /toggle-heavy-mode command. It can be used to generate files that help us to investigate server in a state where all new players get a desync loop.
    • Desync reports are now much bigger, but have bigger chance of being useful.

    Bugfixes


    • Fixed trains slowly moving forward when stopped on a signal more
    • Hopefully fixed Lua desyncs caused by string formatting functions behaving differently on different platforms.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-30 18:20:57 CET ] [ Original post ]

    Friday facts #158 - The end of the 32 bit era

    Hello, another friday and another Facts. It has been 3 years already without a single friday facts missing. I didn't expect that!

    32 bit


    Our automated integration test count just reached 800. We have several modes to run these. One of the modes is to generate crc hash values of all the steps, which can be compared with values when the tests are started on different platform, or release type. When doing this, I noticed that there are several problems related to difference between 32 and 64 bits and after solving few of them, I realized that doing this kind of work might be actually not useful usage of our time. So I made a list of reasons to not have 32 bit support anymore:
    • Extra issues related to determinism between 32 bit and 64 bit systems that would have to be solved.
    • Release times (compile, upload, updates, server storage space)
    • Occasional bugs that we don't notice as no one uses 32 bit system here.
    • Confusion of some people that download 32 bit by accident and run out of memory soon.
    As steam allows me to check the hardware survey of users playing factorio, I did that and found out that less than 1% of people playing Factorio have 32 bit system. That is not that much considering, that a lot of them have different device capable to run the game as well. I believe, that saving our time so we can spend it on things the 99% of our players appreciate more is the right decision. The conclusion is to disable multiplayer in 32 bit version right away (0.14.10), so we don't have to deal with desync reports related to 32 versus 64 bit systems and since 0.15 we won't release 32 bit version at all.

    Desync report improvement


    Desyncs are not that common, but it still happens from time to time, and if it is a desync loop (anyone new that joins the game desyncs until server is restarted) it is definitely annoying problem. It is probably caused by last few determinism oversights which are harder to find, but had to be solved anyway. There are 2 fundamental problems with our desync reports now: 1) When the desync happens in multiplayer game, the player needs to tell the server that it desynced. This takes time as the packet has to travel to the server. Then the client has to update the game until it is in the same tick as the server at the time of receiving the desync alarm. At this point, client and server have the map in the same tick, and this is the version saved in the desync report. The problem is, that it is quite long time since the first original difference between server and client happened, so huge amount of other differences accumulated as the butterfly effect was spreading the difference. It is mostly nearly impossible the find the original cause of the problem from such a desync report most of the time. We will solve this problem by a change in the server logic. Whenever the server encounters the desync, it will try to check the save-load stability locally. We actually use this in the tests. This means that the server will save the current version of the map, it then loads and saves second instance of the map from it and compares if it stays the same. This report will not contain any accumulated changes from running different version of the save, so only the original cause of the problems will appear in the diff. This will help us to discover the cyclic desync loops, as they are almost always related to the fact that load-save changes some internal state. 2) We have a special tool that can add human readable tags to the binary files, so we can actually see what kind of data is different. This code is not part of the binary we release, so we have to add these tags to the desync report by loading the save and saving it with the tags. The problem is, that some of the desync issues (especially those related to desync loop) are related to the save-load stability, so the information gets lost in this process. So we will make a change, that in the future versions of Factorio we release will be able to save the desync report in the human readable format directly. I hope that these changes should make it possible for us to solve the rest of the desync problems with much less effort.

    Rails


    The rail sprites we used had one big problem. To save some video memory we were flipping the pictures:

    The problem is, that as the pictures need to be flippable, they need to be very flat, or it would look too weird. We decided to fix it for 0.15 while doing the high res version of the rails. This is a work in progress of the new rail sprites. Please note that it is at a very raw stage that doesn't even have textures, but it can be used to demonstrate how important it is to have specific pictures for different rotations:
    We will show the final version of rails in some of the future friday facts. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-09-30 15:47:54 CET ] [ Original post ]

    Version 0.14.11 - experimental build

    • Changes
      • Server started with --start-server-load-scenario will now save to saves/ upon exit.
      • Multiplayer usernames can only consist of letters, numbers and -_. characters.
    • Bugfixes
      • Possible fix for a server not responding error.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-30 09:33:12 CET ] [ Original post ]

    Version 0.14.10 - experimental build

    • Changes
      • Disabled multiplayer support in the 32 bit version of the game.
      • Multiplayer map downloading GUI shows average over the last 2 seconds instead of 20 seconds.
    • Bugfixes
      • Potential fix of the crash after desync.
      • Fixed desync related to electric network statistics of accumulators.
      • Fixed assertion fail in tightspot level-05 more
      • Removed 2 redundant research prerequisites. more
      • Fixed non even selection boxes of locomotive versus cargo wagon. more
      • Fixed that Factorio would crash when unable to delete a mod. more
      • Fixed that the chart would display user's names from other surfaces. more
      • Fixed blueprint tiles alignment inside preview/editor. more
      • Fixed player limit disallowing connection attempt in public server list. more
      • Fixed mod browser filters and ordering being lost. more
      • Fixed freshly installed mods not being marked in the mod browser. more
      • Fixed signals sometimes not finding their child signals properly. more
      • Fixed up/down keys in schedule gui were not selecting properly. more
      • Additional keys ignored when the console is opened. more
      • Fixed that aliens would ignore very narrow paths they could barely fit through. more
      • Fixed that numbers were sometimes rounded differently on 32 bit systems in lua.
      • Fixed that the game would freeze when game.speed was set to a value less than 0.2. more
      • Fixed cargo wagon air resistance being smaller than that of the locomotive.
      • Fixed of loading "require_user_verification" from server-settings (It was called verify_user_identity at one place and require_user_verification at other).
      • Fixed underground belt fast replace when replacing the same belt multiple times. more
      • Fixed rendering of turret range when construction network area overlay is also being drawn. more
      • Temporary decrease of decorative entities counts.
      • Fixed server max upload speed.
      • Fixed that Factorio wouldn't give an error when --start-server-load-scenario was combined with --start-server or --start-server-load-latest. more
      • Fixed beam would apply one extra damage tick. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-28 18:54:12 CET ] [ Original post ]

    Friday Facts #157 - We are able to eat paper, but we don't do it

    Hello, we have written a lot about multiplayer in the past weeks, it started by the reports at the beginning of the rewrite, and now it finishes with our reports of mega games being played. But as most of our time still goes to bug hunting to achieve 0.14 stable as soon as possible, I just can't help myself:

    You don't want me to bother you with multiplayer, but I will do it anyway


    As we watched the stream of big multiplayer we mentioned in the last fff, we decided to participate and help organize another big multiplayer event. Even though the server provider we rented from for the event was DDoS'd at that time, it was still a success. During the event, we did profiling as the game was running, and we learned a lot of valuable information.
    The Factorio internals always have to be programmed with knowledge of quantities. Transport belts need to be optimised a lot, as there are tons of those on the map and they eat a lot of the CPU time. On the other hand, the time to simulate the players was never really a problem, since there were always at most a few players on the map at the same time. This paradigm was changed a lot when we profiled a replay with 300 players and found out that big part of the CPU time is spent on things like searching for gates to be opened or searching for items to be looted etc. These things are not hard to optimise, but we just didn't know we should do it until now, so it is work in progress. Several other needs emerged, like changing the server settings (password/max upload rate/max players) on the fly as the game is played. Postponement of the map saving for incoming players, so the server saves once in a while for more people at the same time, instead of saving every 3 seconds when someone wants to join a crowded game. The admin options also had to be improved etc. etc. Then it comes to further and further optimisations of the network traffic so more and more people can play at the same time. The problem with this is, that we could do it forever, we wanted 20 or at most 50 players to be able to play in the new multiplayer, but we reached 350 and now we are optimising it so more than 400 could join, and if we achieved that, we would go for 1000. But are we still doing something that improves the gameplay, or just trying to win the race with ourselves at this point? We need to realize that our goal is not to make some MMO, but to have a good single player game, that also have a decent multiplayer. So the conclusion is, that if the game supports 200 players with a good connection it is more than enough. It can go higher but we won't aim to increase it much anymore. After hour or two, the main bottleneck is not the players or the network traffic. The factory grows at a cosmic speed in these megagames, so the CPU time needed to simulate it becomes the problem. By changing our focus to general factory simulation optimisations, we not only make it possible to play massive multiplayer games better, but we also allow to build much bigger bases in singleplayer as well. The belts optimisations and multithreading are worked on, but far from being finished.

    Everything is more complicated than expected, even the pump


    As we have been asked many times, I probably need to answer again: Yes, we will add the liquid wagons in 0.15, but it won't be that simple. As we want to have the pump and wagon connection to be organic, we need the pump to connect to the wagon. But as the geometry of our trains is wicked the connection points on the wagon won't be regular in vertical directions. We are making a 2d game so we have to prepare 6 different animations for every relative position of the pump. Albert had doubts if it is worth it as we always have to try to keep our video memory bill reasonable, but I believe it will add a nice touch to the game.

    The problem with decoratives


    One of the 0.13 changes was change of the map generation. As part of it, it happened that the game is suddenly generating a lot of more of the decorative entities. It often looks like this:
    It looks nicer, but the problem is that there could be tens of millions of these on big maps, which can multiply the size of the save and ram required to hold it.There is even a mod that removes them completely to solve the issue. We were discussing solutions of this, and we will probably just change decoratives so they are not regular entities anymore. They would be a special type of an object that is not saved in the map, but generated on the fly when the player walks around. They would be saved per chunk in a very compressed format so it only takes 3 bytes of memory per decorative instead of approximately 300 bytes when it exists as an entity. This will also improve performance, as when some code is checking entities in some perimeter, it wouldn't have to iterate through tons of these decoratives uselessly. As these changes are too big to be added into the 0.14, we will probably just reduce decorative generation in 0.14 and do this change for 0.15. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-09-23 17:59:01 CET ] [ Original post ]

    Version 0.14.9 - experimental build

    • Changes
      • Added admin field to server-settings.json, list of case-sensitive usernames that will become admins on connecting.
      • Admins are exempt from player count limit.
    • Bugfixes
      • Fixed that the server could be running even if it was supposed to be stopped.
      • Fixed Modded key bindings would fire extra times if 2 mods had the same keybinding. more
      • Fixed that parsing players by index in scripts didn't work correctly. more
      • Fixed that Factorio wouldn't release memory back to the OS after unloading a large save on Linux. more
      • Fixed crash when restarting Factorio due to mod change when executable is read-only on Linux. more
      • Game will no longer be capped at 300UPS when using high game.speed and vsync. New cap is FPS*5*game.speed. more
      • Fixed possible crashes when setting combinator parameters.
      • Fixed that clients could send a lot of useless data when recovering after connectiontion problems while playing multiplayer game.
      • Fixed that recipe overload_multiplier wasn't used for furnaces. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-23 08:55:57 CET ] [ Original post ]

    Scheduled service maintenance - September 22

    On September 22, starting at 7:00 am UTC (9:00 am CEST, 12:00 am PDT, 3:00 am EDT, http://everytimezone.com/#2016-9-21,1140,cn3), lasting approximately 30-60 minutes, we will be conducting a database maintenance, resulting in the outage of the following services:

    • Main website - factorio.com
    • Authentication services
    • Mod portal
    • Public server browser
    • Standalone game updater
    The following services will not be affected:
    • Factorio Forums
    • Factorio Wiki
    Thank you for understanding


    [ 2016-09-21 14:37:16 CET ] [ Original post ]

    Version 0.14.8 - Experimental release

    • Optimizations
      • The crc check cycles between sets of 10 players, reducing the time of it in crowded games.
    • Minor features
      • Disconnecting wires now updates the "last user" tag.
      • Technology progress is preverved when the research is changed before it is completed.
      • Added ignore_player_limit_for_returning_players option to the server-settings and equivalent when hosting from the game.
      • Added in game command /config password . It allows server admins to change the server password.
      • Added in game command /config max-players . It allows server admins to change the maximum number of players.
      • With more than 10 players in multiplayer game, the server only saves the map for joining players once in a while, so the game isn't interrupted by saving every couple of seconds in bigger games. It goes from 1s with 10 players up to 45s with 450 players (which is the maximum).
      • Added only_admins_can_pause_the_game into the server-settings.
    • Bugfixes
      • Fixed that you could enter enemy vehicles. more
      • Fixed that zooming the view during pause (via Shift-Space) would teleport the player. more
      • Fixed vehicle machine guns not showing bonuses. more
      • Fixed performance issue on maps with lot of surfaces (for example maps with Factorissimo mod.)
      • Fixed gates not opening for characters soon enough. more
      • Fixed some campaign levels didn't allow interacting with any entities at some places. more
      • Fixed crash when opening the character GUI in the map editor. more
      • Fixed redundant technology requirement. more
      • Fixed server browser playtime column formatting more
      • Fixed crash related to rail-signal connection. more
      • Fixed crash when reconnection attempt is refused. more
      • Fixed that when server quit/dropped, the dialog could be hidden behind menu. more
      • Optimized inserting items to chests with large inventories; this will boost performance for some games with Warehousing mod. more
      • Fixed duplicate mods crashing the game on startup (https://forums.factorio.com/31790) Instead, a notice box is displayed and the highest (possibly unzipped) version is preferred.
      • Moved the downloading/saving/loading progress bar of other people in a scroll pane so it doesn't cover the whole left part of the screen with a lot of people.
      • Fixed the quickbar selection wouldn't properly update when interacting with other entities in some cases. more
      • Fixed that --benchmark would process its argument differently than all other command-line parameters more
      • Fixed crash when loading game with character in flying vehicle from mod that is over water. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-20 18:39:59 CET ] [ Original post ]

    Friday Facts #156 - Massive Multiplayer

    Hi all, sometimes, writing FFF feels like spitting out blood - there is simply very little to write about. Yet the Factorio blog subscriber crowd is there and waiting ... Sometimes it is the opposite and there is abundance of interesting topics available. Today it is the latter case. Enjoy!

    Factorio Massive Multiplayer


    So all the effort that Kovarex put to rewriting the Multiplayer for the pure server-client model (communication wise) with added speed optimisations and minimisation of the data sent over network has paid off royally. Surpassing our wildest estimates it has been actually shown that the latest 0.14 (still experimental atm) can support a couple of hundreds of players in the game (I believe the current record is about 400 players) while still being playable. If I remember correctly, the best case scenario (when Kovarex started with changes) was hoped to be 50 people in the game ... Arumba (with Steejo and friends) has started a new stream series where he creates an open game and a bunch of people get together and start building a factory. Below is the first episode which was streamed on Tuesday. There were about 150 people online at one point I believe and still the game was running smooth. Factory grows up really fast (though often in uncontrolled ways) with that amount of players. I personally find interesting all the "social / group" peculiarities arising from this kind of event - ranging from how to organise such a crowd to work together all the way to persuading people not to shoot each other or build useless ghost entities all over the place (because "it is pretty"). https://youtube.com/embed/LeHEj_sEKnw The series continued yesterday night with couple of people from the office (well from their homes because it was at 2 a.m. local time) joining as well - namely kovarex, twinsen and posila. This time there were some technical problems - server overload / lags / desyncs - simply because there were crazy amounts of people (those mentioned 400 online players). But it is amazing to see what the technical limits of the game are (could it be even more than 400?). And as a bonus you can hear Twinsen / Robert joining the skype chat with the organisers and sharing some of his insights. I believe Arumba plans to continue with the series (though restricting the amount of people to a reasonable amount) and see how the factory develops. So check out his channel if you are interested in watching / playing with many players. Below is a screenshot from the imgur gallery created by one of the players based on the second ("the 400") game - to give you a feel of what you are up to.
    We shall see, but MMORTS could be another area Factorio will venture too. The technical background is more or less there. Now it might be the time to come up with scenarios / game modes that build on the possibility of having hundreds of players in the game. We have already started playing with this with the Team Production Challenge (that is a bit less massive) mentioned in the previous FFF ...

    UI rewrite


    And now for something completely different. Making a game is a broad topic and often involves elements which end up being overlooked (people often don't notice things until they are not broken). One of the areas in this realm is IMHO good gui design and layout. Honza recently took the challenge to improve our current gui code and prepare it for further gui improvements that he will work on together with Albert. So below he writes about what he has been up to. Factorio is a dialog-heavy game, so the GUI code needs to be easy to write.At the same time, we want complex GUI layouts that don't break under different translations and mods. With that in mind, I've been cleaning up the internal GUI implementation.While the old code sometimes needs a lot of persuation to do exactly what we want,the new shiny code will use a two-phase layout algorithm:
    • All of the GUI elements look at their contents and report their optimal size and stretching potential.
    • GUI containers take whatever space is available and, based on the reports, tell their sub-elements how much they should grow or shrink.
    Looks simple, but it should solve most of our problems with nested containers. We also need to be able to override the automatic stuff: limit the minimum or maximum size, grow only in discrete steps,constrain some elements to be the same size, or just set the position and size manually. Let's look at a pretty ASCII-art example. The elements A and B start the same, but B grows twice as fast and has its maximum width limited:
    Another example: Here the vowels may not grow, but the width of each block must be the same:
    The last one: we have two buttons that can't stretch, but one must stay centered and one right-aligned (assuming they won't overlap).There's a ghost on the left side with the same size as button 2 that makes it possible:
    The GUI containers will also get an overhaul: right now we're using a one-size-fits-all layout with automatic row breaking,which is overkill for most uses. The new GUI will use simple rows, columns, and the occasional table. There are other things in the works: improved GUI scaling, rich text, data-driven layouts, better line breaking for long texts, or support for right-to-left languages.And when all the boring internal stuff is done, you can look forward to a complete GUI facelift.

    Blueprint Library


    While 0.14 is getting stable we are already working on 0.15. One of the bigger features there would be the blueprint library. The idea is to allow blueprints (and blueprint books) to be stored outside of the players inventory - in a blueprint library. This way the blueprint (or book) can still be accessed even if player actually removes / loses (i.e. when dying) the item from his inventory. The library will be accessible via a global dialog (in a similar fashion like overview of trains / production statistics / etc.). At the moment we plan to have three basic library sections:
    • Blueprints stored locally in the game. Here the use case is simply not to lose (as mentioned above) blueprints for the current game when their respective items are lost.
    • Player's personal blueprint collection accessible in all of his games. Here we are pretty sure (=)) that players will build their own collections of favourite setups which they use over and over.
    • Access to other players' personal blueprint collections in multiplayer games. This is the same as point 2 but for multiplayer.
    The work on this feature is at the moment in progress so it is a good idea to post ideas (or link existing ideas - hello Factorio ideas & suggestions overflow) on the topic. There will be more detailed information coming in the future (both on the user side as well as challenging technical aspects - yes everything is more work than expected =))) when the work has progressed. The promise of the blueprint library is that it should make blueprints even more useful by removing frustration from losing existing blueprints and repetitive work of creating the same blueprints over and over again. Also who knows, maybe we end up with a Factorio blueprints portal - something like a global database accessible to all the players. That would be an interesting way to share the setups.

    Terrain news


    In one of the previous FFF editions we have shown first attempts on a new terrain, the red desert. Jurek is still working on this and today you can see how he has progressed. It is not yet finished as we will be tweaking it and adding specific doodads and patches. That means it should get only better=)
    And now in an action with some entities:
    If all goes well (that is a big if) you can look forward to a new pump connection to liquid wagon preview in the next FFF episode. That is what Albert has been up to recently. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-09-16 15:57:14 CET ] [ Original post ]

    Version 0.14.7 - experimental build

    • Bugfixes
      • Fixed technology GUI in single player.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-15 21:58:12 CET ] [ Original post ]

    Version 0.14.6 - experimental build

    • Changes
      • Drop detection got little bit strictier so the drop timeout was increased from 10 to 20 seconds.
      • If you log in with your email, your multiplayer username gets set to your actual username, not your email address.
    • Minor features
      • Added --start-server-load-scenario command to start scenario with the given name.
      • As a tribute to Arumbas mega-game, the "build by" was renamed to "last user" and it is updated whenever the entity is: rotated, has circuit condition changed, setting pasted, recipe changed, filter changed, output signal changed, cominbator settings changed,
      • Added speed change based on zoom when in god mode into the latency hiding.
      • The player was killed messages now contain a name of entity or player who caused that.
    • Bugfixes
      • Player killed messages are shown only to players of the same force.
      • Fixed that zoom to cursor didn't work in ghost/god controller.
      • Fixed that player dropped, but it shown the "the can't keep up message" instead.
      • Fixed that server got deselected when changing sorting or filters in public game list. more
      • Additional attempt to make the keyboard settings compatibile between linux and windows. more
      • Fixed that player crafting categories accepted empty string as value, which resulted in crash later. more
      • Fixed that progress bar during updating mods wasn't moving more
      • Fixed beam damage_interval of 0 would crash the game. more
      • Fixed gates wouldn't open while in a vehicle without a character. more
      • Fixed GUI scaling in the mod browser. more
      • Fixed (hopefully) that wrong server details were displayed more
      • Fixed that it wasn't possible to build rail blueprint over floor-tile ghost. more
      • Fluid status icons will display floored values, same as all other icons. more
      • Fixed crash that prevented the game to start on some OS X configurations. more
      • Fixed that changing character direction from script didn't work. more
      • Fixed game getting stuck when a new account was created from the Steam version more
      • Additional signal/rail building fix. more
      • Fixed that some entities would not remember their circuit parameters in the map editor. more
      • Fixed blueprint tooltip wouldn't update when clearing a blueprint. more
      • Fixed crash when loading some old save files containing circuit connections to be removed. more
      • Fixed crash when removing migrated equipment grids due to mod removal while mods had references to the grids. more
      • Fixed wires wouldn't get applied to inserters through blueprints in some cases. more
      • Fixed that player could get unkickable under specific circumstances.
      • Fixed train crash when it found a path in the opposide direction that it just started moving. more
      • Fixed Factorio updater didn't pass command line arguments when restarting the game after update. more
      • Fixed crashes when loading old or some invalid maps in the map editor. more
      • Clearer error messages and interaction when loading old or invalid maps.
      • Fixed curved rail bounding box not allowing large electric poles to be build in specific configurations. more
      • Fixed that joining games through Steam wouldn't work. more
      • Fixed not being able to interact with the error dialog when an error happens while interacting with GUIs. more
      • Fixed UI not responding to input in some situations when progress guis were shown. more
      • Fixed personal roboport wouldn't update properly when modded equipment was used in some cases.
      • Fixed train ignoring wait conditions in some cases more
      • Fixed chain signal visual state right before a station more
      • Fixed that the client was stuck when he disconnected after a reconnect.
      • Fixed Save As GUI not responding to input after multiplayer disconnect with chat open. more
      • Fixed inserter placement in the 2nd level of new hope campaign mission. more
      • Server automatically deletes temporary save files once the upload of finishes.
      • Fixed recipe tooltips containing fluid in assembling machines wouldn't show the available fluids properly. more
      • Fixed desync when placing floor blueprint and mining placed ghosts at the same time. more
      • Fixed that you could disconnect wires in from Transport Belt Madness scenario's Electric Poles. more
      • Potential fix of crash after desync.
      • Attempted to handle socket unblock error in a way that won't crash the game. more
    • Scripting
      • Added LuaGameScript::print - print to all players.
      • Added LuaForce::print - print to all players on the force.
      • Added LuaSurface::print - print to all players on the surface.
      • Fixed entities with positive emissions_per_tick would generate pollution even when pollution was disabled. more
      • Renamed LuaEntity::built_by to LuaEntity::last_user
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-15 19:28:04 CET ] [ Original post ]

    Friday Facts #155 - Settling into fall

    Hello, Bugfixing for 0.14 has been going quite well this week, and while its still in experimental we've been adding some supplementary features before programming work begins properly on 0.15. With the summer ending, things have been settling back into a nice rhythm here in the office.

    Improvements to scenarios


    We have been playtesting and bugfixing all number of issues that the team challenge has shown us, the aspect of hosting our own server and constantly having people play has really shed some light on those more difficulties, as well as give us a lot thought for tweaks and optimizations. Some of these changes you might has spotted in the recent change logs, including default team chat, player tags, AFK detection and the latency hiding of god/ghost controllers. A major change we introduced is the sending/saving of the scenarios when you join a server. This means that when you join a server with a custom scenario, you can then play that scenario from the start and host it yourself. We really hope this will generate some greater interest in the development of scenarios. Before it was quite difficult, in that even if you create an amazing scenario, it was often hard for players to actually find and play it.

    Production challenge results - Week 1


    We have had a lot of fun here at the office playing on the team challenge server. A lot of wasted hours and late nights in some cases. However we were impressed/embarrassed to find that there are a lot of players who simply demolished us in every round. Their playtime has definitely helped us identify a lot of issues, so special thanks to these top 5 players:
    • EricWong
    • MotionBlur
    • AntiElite
    • xenocyber
    • NearlyDutch
    It's been a really interesting and intense way to play Factorio, and these guys really showed us how high the skill ceiling can be, but surely there are some more players up for the challenge out there.We're going to be continuing our updates and fixes of the scenario, with possible extensions for new challenge types and other fun tasks. Below is an example of the entity spawning we worked on so that slower computers would not freeze for a moment while the round was started:
    Its also incredibly interesting to see the different ways the teams build their setups, when given identical starting conditions. With the task items quite variable, along with the amount required, the styles and meta-game we've been seeing in just a single week is really exiting. If you'd like to join in, simply find "Official Factorio Team Challenge" in the matching server (version 0.14 required) and click join. At the moment teams are random, so hope that you get some good teammates.

    Circuit network optimizations for 0.15


    Twinsen here again with more boring circuit network stuff. This time I talk bout how the circuit network got a lot faster for 0.15. The way the circuit network worked before the optimization was something like this:
    • Every connected entity that has signals to send would sent the signals every game tick.
    • All these signals would get summed together based on how they are connected.
    • Finally any entity that reads signals will read from this sum and react accordingly, in every tick,.
    This didn't change since it was added in December 2012. And it worked well, until people started making combinator contraptions with 40,000 lamps and 6,000 combinators, slowing down the game significantly. Because of the way it worked, the circuit network would use almost the same amount of CPU even if nothing was happening(no signals were transmitted), so the first optimization is that, instead of transmitting, summing signals and evaluating circuit conditions every single tick, this is only done once signals are changed. This unfortunately meant that the circuit network code for all the connectable entities had to be partially rewritten, but it lead to UPS increasing 12 times in some circuit network-only saves. Second thing was a simple optimization of the internal structure. Signals in a circuit network were stored as a std::map. I sometimes heard opinions about how C++'s std::map is ridiculously slow and unoptimized, but I never really believed it. In my specific case, boost::container::flat_map not only was significantly faster but it also used less than half the memory. Finally this simple change lead to UPS doubling in some circuit network-only save. The final result is that the game will be up to 2478% faster and the memory usage up to 10% lower. For benchmarking, I used a save with a version of Xeteth's Combinator Display(used by Colonelwill's hall of fame). I also used the save used in the "Early Steam Build" video. So special thanks to the creators of those contraptions.

    New Pump and HD pipes


    A much anticipated feature of the last few Factorio versions has been the idea of a fluid wagon for transporting fluid via railway. Currently the only way of transporting fluids a long distance is through the use of a lot of pipes or by barreling them up, neither of which is incredibly interesting gameplay wise. However before work can begin on the wagon itself, the small pump had to redesigned, to fit with the developing art style, and to integrate effectively with the gameplay mechanics the wagon will introduce. These past weeks Albert has been working on a new 2x1 pump, which will replace the current 1x1 pump for pipes, which will also be used for filling the fluid wagon at the station.
    Also shown to are the HD pipes, which after a long fight with various technical issues, Vaclav has made ready for integration to version 0.15. For those of you running any older or less powerful machines, you won't have to worry about the new high fidelity graphics leaving you unable to update, as the HD sprites will be completely optional. As always, if you have any comments or otherwise, please let us know on our forums.


    [ 2016-09-09 18:01:14 CET ] [ Original post ]

    Version 0.14.5 - experimental build

    • Feature
      • Added Team Production Challenge scenario to the base game.
    • Minor features
      • It is possible to /ban players who aren't present in the map.
      • The headless server saves the banlist in banlist.json file, so a server owner can maintain a single banlist across multiple maps.
      • Added /silent-command: Same as /c, but doesn't print the command ran to every player's console. Available only to server admins and over RCON or server console.
      • Added /purge : removes all messages by the given player from chat. Admin only command.
      • Added /clear - clears your chat window.
      • Added /mute and unmute : prevents the given player from talking in chat. Admin only commands.
      • Added /mutes: displays all muted players.
      • Added /ignore and unignore : ignores messages from the given player. Admin and RCON messages are still shown.
      • Added /ignores: displays all players you're ignoring.
      • Command names in the console can be tab-completed.
      • Player names in the console can be tab-completed.
      • Added AFK Auto kick interval to multiplayer host settings (with never as default).
    • Bugfixes
      • Fixed that the headless server would create a character when run with --no-auto-pause. This prevented people from joining their own servers. more
      • Fixed that the game could desync when LuaForce::players was used, as the order was not in well defined order.
      • Fixed making blueprints wouldn't reset the build rotation. more
      • Fixed that input actions were triggered even though a text box was focused. more
      • Fixed that blueprint/deconstruction would run while on the map view. more
      • Fixed train getting stuck on a yellow signal more
      • Fixed that the notification about changed research was shown even when the other player selected the same research as already in progress. more
      • Fixed that underground belt "teleported" few items when the connection was built. more
      • Fixed that the mod info gui wasn't scrollable, so it didn't fit the screen sometimes. more
      • Fixed that saving scenario to the same directory it was loaded for resulted in deleting all the script and locale files. more
      • Fixed that the menu wasn't accessible when the respawn countdown was there, until the menu was closed and opened again.
      • Fixed inserters sometimes taking items from cargo wagons not in front of it. more
      • Fixed that clicking a mod's GUI during an autosave would crash the game. more
      • Fixed /reply wouldn't work properly when players have names with tags.
      • Fixed shadows being drawn over pipe and storage tank windows.
    • Scripting
      • Added LuaEntity::supports_direction
      • Changed LuaEntity::direction write to not error if the entity doesn't support directions.
      • Moved the top gui to be above the left gui as in 0.13 more
      • Added LuaPlayer::afk_ticks and LuaPlayer::online_ticks.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-09 09:40:46 CET ] [ Original post ]

    Version 0.14.4 - experimental build

    • Minor features
      • Included the ghost/god controller movement in the latency hiding.
    • Changes
      • Research notifications are only printed to players of the same force.
      • Removed the /team command, chat is team only by default, added /shout (/s) command to speak to everyone.
      • Tweaked the /help command, so it prints just the list of commands, and it is required to write /help to get details
      • Fixed crash when entities are migrated across types while in blueprints. more
      • Fixed crash when setting filters in the map editor. more
      • Don't allow to deconstruct tiles that have nothing under it.
    • Scripting
      • Added read/write of LuaPlayer::tag. This tag is added to the player username in chat and on map.
      • Added LuaEntityPrototype::logistic_mode read.
      • Added a 4th (optional) parameter to LuaGameScript::write_file to write only for a specific player (or the server).
    • Bugfixes
      • Fixed crash when entities are migrated across types while in blueprints. more
      • Fixed crash when setting filters in the map editor. more
      • Additional desync fix related to selection of trains. more
      • Fixed crash when canceling deconstruction of tiles of other force.
      • Fixed crash related to reconnecting to a game after 3 desyncs
      • Fixed crash when using quickbar shortcuts in ghost mode in multiplayer. more
      • Fixed crash when changing player's controller in multiplayer while the player opens entity GUI with inventory. more
      • Fixed crash when opening entities that only exist in the latency hiding. more
      • Additional latency state fixes related to lag spikes and latency changes.
      • Fix of one way (hopefully the only one), the ghost player could appear.
      • Fixed freeze with specific modded recipes. more
      • Fixed LuaForce::research_progress could return invalid values in specific cases. more
      • Fixed error when manually calling LuaGameScript::raise_event(). more
      • Added additional inventory defines: car_fuel, car_trunk, car_ammo, and cargo_wagon. more
      • Fixed that the server commands didn't work when there was noone online and the autostop was on (again) more
      • Fixed that LuaUnitGroup::set_command wouldn't update the command of its members.
      • Fixed that mod GUIs would get left behind if the mod was disabled due to an invalid factorio_version. more
      • Fxied that the Lua console would ignore first pressed key if the "toggle console" control was bound to a mouse button. more
      • Fixed wrong fonts used for languages using non-latin characters. more
      • Fixed crash on blueprint placement with rail signals with connected wires. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-06 13:27:31 CET ] [ Original post ]

    Friday facts #154 - Challenge us

    Hello, we are in the phase of finishing the bug report stream, we expect to smoothly transition from the bug fixing phase to the work on 0.15 in the upcoming weeks.

    Team production challenge


    We talked about the idea in the fff-152 and the first version is working now. We tested it in the office, and I found it pretty fun to try outperform the other team, restart, and try to optimise tactics. We have decided to test it publicly now when the 0.14.3 release is out. Just search for the Team production challenge on the matching server and hope to get there before it crashes. Some of us will be there playing it, do you dare to challenge us? :) To make it more practical to host and spread scenarios, we made it possible to host custom scenario directly when hosting a multiplayer game, and also, whenever you load a save game that is a scenario, the original scenario of the game will be saved in your scenario folder, so you can host and spread it further.

    Automation of creation of automated tests


    Big part of the pain when writing automated test in C++ is to have to guess the positions of entities correctly when building a setup to test, especially if they interact (rails, inserter, belts, etc). This is why Michal made an internal mod to generate the C++ code that generates entities based on setup in the game. We can just selected it like this:
    And the scripts generates the C++ code to create the entities, which we copy in the code and work with.
    It has saved us a lot of frustration already.

    The high res pack (for 0.15)


    We shown the high res graphics almost 2 years ago in fff-64. We have been busy with other things since then, but we finally found manpower (thanks to Vaclav) to go back and improve some of the existing graphics. This is the comparison of the old and new belts, the difference might not be so clear to see on the first sight, but once I zoomed in and compared to some other low res entities in game, I suddenly wanted everything to be high res.

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


    [ 2016-09-02 20:26:48 CET ] [ Original post ]

    Version 0.14.3

    • Minor features
      • When selecting anything that uses item/signal filters the filter is automatically set to the item in the cursor if any.
      • When save of scenario is loaded in multiplayer, it's scenario is saved in user scenarios.
      • Added /time command to print the current map age.
      • Added option to host multiplayer game with scenario (it only had new game/load game there).
    • Changes
      • server-settings.json are automatically used if they are in the write path and not specified on the command line.
      • Fonts specified in a locale configuration now have to specify the mod name in their paths. For example, the default font is now specified as "default=__core__/fonts/TitilliumWeb-Regular.ttf".
    • Bugfixes
      • Fixed desync related to selection of trains. more
      • Fixed slowdown in recipe tooltips with large amounts of recipes. more
      • Fixed show_gui not working with game.take_screenshot.
      • Fixed accidentally turned on graphics safe mode for all Steam users, which set graphics settings to low values. more
      • Fixed that the game eated all the CPU in headless mode when no player was there. This also fixed that the memory used grew few bytes per tick when being a server.
      • Fixed console commands not working when entered directly on Windows headless server. more
      • Fixed that the server would ignore specified username when given a login token. more
      • Fixed that it wasn't possible for mods to use custom fonts. more
      • Fixed crash when removing mods that had items on transport belts that were connected to the circuit network. more
      • Fixed that right clicking in the craftign menu to craft 5 items wouldn't de-focus the search widget. more
      • Fixed that joining paused game resulted in a black screen that was there until someone else unpaused it. more
      • Fixed that map2scenario errors when loading an edited save file that contained assembling machines connected to inserters. more
      • Fixed that the exit message was wrong when the person just dropped. (saying he couldn't keep up)
      • Fixed that after reconnecting to server using the small save/quit/reconnect window didn't close the window. more
      • Potential desync fix related to locomotives being selected in the same tick they are mined by someone else.
      • Potential fix of crash after a desync.
    • Scripting
      • Moved LuaControlBehavior::disabled to LuaGenericOnOffControlBehavior::disabled and fixed it to work correctly. more
      • Fixed crash after confirming other settings as a server in multiplayer game. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-09-02 20:02:44 CET ] [ Original post ]

    Version 0.14.2

    • Minor features
      • Notify when someone starts or changes the research in the console.
      • Allowed to specify limit of the upload speed when hosting a multiplayer game. This can be also specified when creating the headless server in the sserver-settings file by setting the max_upload_in_kilobytes_per_second
      • When selecting player logistic requests and auto-trash filters the filter is automatically set to the item in the cursor if any.
    • Changes
      • Increased the time the text written in the console (chat/commands) stay on the screen fully visible.
      • Increased the distance of rail direction check for signal building from 3 to 5 rail segments. more
    • Bugfixes
      • Fixed signal to rail connection in junctions when rails are build after signals. more
      • Potential fix of desyncs related to transport belts and circuit network.
      • Experimental attempt to limit server upload speed when it is too high and it causes all other players to have their latency increased. This logic is only used when the "max_upload_in_kilobytes_per_second" is not specified.
      • The download speed starts at higher value and grows faster.
      • Fixed that personal logistics would stop working. more
      • Fixed crash related to removing progress bars when exiting the multiplayer.
      • Fixed constant combinator description not showing negative signals. more
      • Fixed missing "saving-local-variant-of-mp" key.
      • Fixed that rail remnants were not always properly removed when horizontal rails were built over.
      • Fixed that server would crash on second RCON connection. more
      • Fixed that --allow-commands sometimes wouldn't take effect. more
      • Fixed that attacking an enemy spawner with the flamethrower wouldn't aggravate enemies. more
      • Fixed the drag-map control defaulting to shift + mouse button 1. more
      • Fixed achievement layout problems. more
      • Fixed logging in with an email address for mod/server browser wasn't working.
      • Fixed ping in the server browser not working.
      • Don't offer to save after server drop/quit when the map isn't actually loaded. more
      • Fixed trains GUI wouldn't scroll correctly when searching. more
      • Fixed crash when mining a vehicle the character was in while over water. more
      • Fixed that it was possible to put more energy into accumulator than its capacity through the script. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-30 20:20:56 CET ] [ Original post ]

    Version 0.14.2

    • Minor features
      • Notify when someone starts or changes the research in the console.
      • Allowed to specify limit of the upload speed when hosting a multiplayer game. This can be also specified when creating the headless server in the sserver-settings file by setting the max_upload_in_kilobytes_per_second
      • When selecting player logistic requests and auto-trash filters the filter is automatically set to the item in the cursor if any.
    • Changes
      • Increased the time the text written in the console (chat/commands) stay on the screen fully visible.
      • Increased the distance of rail direction check for signal building from 3 to 5 rail segments. more
    • Bugfixes
      • Fixed signal to rail connection in junctions when rails are build after signals. more
      • Potential fix of desyncs related to transport belts and circuit network.
      • Experimental attempt to limit server upload speed when it is too high and it causes all other players to have their latency increased. This logic is only used when the "max_upload_in_kilobytes_per_second" is not specified.
      • The download speed starts at higher value and grows faster.
      • Fixed that personal logistics would stop working. more
      • Fixed crash related to removing progress bars when exiting the multiplayer.
      • Fixed constant combinator description not showing negative signals. more
      • Fixed missing "saving-local-variant-of-mp" key.
      • Fixed that rail remnants were not always properly removed when horizontal rails were built over.
      • Fixed that server would crash on second RCON connection. more
      • Fixed that --allow-commands sometimes wouldn't take effect. more
      • Fixed that attacking an enemy spawner with the flamethrower wouldn't aggravate enemies. more
      • Fixed the drag-map control defaulting to shift + mouse button 1. more
      • Fixed achievement layout problems. more
      • Fixed logging in with an email address for mod/server browser wasn't working.
      • Fixed ping in the server browser not working.
      • Don't offer to save after server drop/quit when the map isn't actually loaded. more
      • Fixed trains GUI wouldn't scroll correctly when searching. more
      • Fixed crash when mining a vehicle the character was in while over water. more
      • Fixed that it was possible to put more energy into accumulator than its capacity through the script. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-30 20:20:56 CET ] [ Original post ]

    Version 0.13.20

    • Bugfixes
      • Fixed the demo wasn't working.
      • Fixed equipment grid GUI didn't size properly in some cases. more
    • Modding
      • Fixed "factorio_version" not being checked correctly in some cases. more
    • Scripting
      • Fixed "unknown" error in some cases when using radio button GUI elements.
      • Fixed crash when a mod custom event event would error. more
      • Added LuaGuiElement::type read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-29 17:12:02 CET ] [ Original post ]

    Version 0.13.19

    • Bugfixes
      • Fixed that the Golem, Watch your step and doing it right didn't activate from steam cloud on new factorio installation.
      • Fixed selection boxes of trains in specific situations. more
      • Fixed that unclosable character window was opened when it was ordered to open exactly at the same tick when the character died. more
      • Fixed possible desync caused by inserters disabled by circuit network. more
    • Scripting
      • Added LauSurface::regenerate_entity(...)
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-26 22:01:16 CET ] [ Original post ]

    Version 0.14.1 - experimental build

    • Bugfixes
      • Fixed that exiting hosting game could stuck Factorio forever.
      • Possible fix game not showing in browse game list. (If it happens anyway, we will have more info)
      • Fixed that a very big number of biters on a map could cause very significant UPS drop. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-26 18:13:11 CET ] [ Original post ]

    Friday facts #153 - 0.13 Stable, 0.14 Experimental

    Hello, Albert is back this week, and has resumed his work on the liquid wagon and associated accessories, as well as offering his guidance to some visual related programming tasks. Kuba and Honza are also both back from their respective holidays, and overall the office is feeling much more full than last week.

    0.13 Stable


    This week we have declared 0.13.18 as the stable release, which means that any steam users on 0.12 will be automatically updated, as well as standalone version users being prompted to upgrade. From the first 0.13 experimental release there have been some hiccups with the administration and support side. Most of these arise from now requiring a login to access the matching server and mod portal, with interactions between steam and our website being a big source of problems. Since release about 2 months ago, I have answered over 800 support emails, but with a lot of work done to streamline our systems by Tomas and Martin, the recent weeks have been significantly quieter. Apart from those issues, we've had strong and consistent success is fixing as many bugs as we can, be these small bugs, from the capitalisation of technologies, to big ones, like terrain generation issues. We've also had some time to add a few new features during stabilization, mostly scripting and modding requests, along with other changes to some mechanics. Community feedback has been really valuable to us once again, so thank you all.

    0.14 Experimental


    Early this afternoon we released version 0.14.0 into experimental testing.This is a small 'major' update, as opposed to the huge major update that was 0.13. You may have heard in a recent Friday facts about the huge multiplayer rewrite Kovarex was undertaking, and at last his work in complete, at only the cost of his sanity. On Wednesday there was a big test of this new system and seems to work pretty well, I bet that we made a new record by having 67 players in one map at the same time.
    You can see the new systems at work, with gameplay uninterrupted while people join, the progress bars for map downloading and catching up, as well as the smooth performance even with a large number of players. We consider this a pretty big success, and feel it is worth it now to release it for testing by the community. So if you're feeling brave, and want to help us out, you can try the new update by selecting it in the steam betas tab, or by enabling experimental updates in the standalone game. If you are just playing in the relaxed solitude of singleplayer, then 0.14 won't feel that much different to 0.13, but might be a good opportunity to test out a collaborative factory. If you do find any bugs, please report them on the bug forum, but make sure to check nobody has reported your bug already, by checking the confirmed bugs and resolved bugs subforums. If all the reshuffling of the planned features has you somewhat unsure of whats going on, you can check out the updated roadmap.

    Vehicle equipment grid support


    Another feature of 0.14 is support for equipment grids in vehicles. Initially none of the base game vehicles have equipment grids, but the hardest part is already done: making them work in vehicles. Vehicles that have equipment grids can use all of the current equipment; tanks can go faster, have shields, provide night vision to any players in them and so on. The only equipment that doesn't function "fully" is the roboport equipment in Locomotives and only because the locomotive has no inventory to store robots or items.
    Cars, Tanks, and Cargo wagons all work fully with the roboport equipment. By default cargo wagons won't deploy robots while the train is in automatic mode and not in station or while under manual control while moving (this can be toggled if that's desired). When a vehicle with a non-empty equipment grid is picked up it retains the equipment so you don't need to re-insert it all when built again. No doubt modders will go crazy with all the new possibilities, which will help us test and bugfix any potential issues. From the start equipment grids were designed to do far more than they do in armor. With 0.12 came the addition of the Personal roboport equipment, but other than that they haven't had any significant changes or additions. There may be additional equipment modules coming in the future, but for now we are unsure of what functionality they could provide, so we'd like to hear your ideas. As always, if you have any comments, suggestions, critiques or otherwise, please let us know on our forums.


    [ 2016-08-26 16:16:16 CET ] [ Original post ]

    Version 0.14.0 - experimental build

    • Features
      • Fixed multiplayer
        • 1) Internal reliability and stability improvements.
        • 2) Players don't have to wait for other clients to download and load the game.
        • 3) Decreased network traffic.
        • 4) It is possible to use menu and quit the game when connecting to the game.
        • 5) Server doesn't stop/slow down the game when some client is too slow, stops communicating or saves the game longer than the server.
        • 6) Players automatically quit game after 3 desyncs.
        • 7) Download speed tweaks.
      • Added /team command that messages all players from the same force.
    • Minor Features
      • When selecting inventory filters the filter is automatically set to the item in the cursor if any.
    • Changes
      • Disabled loading of saves before 0.11.0 version (You can use 0.11.22 to load older saves and re-save them).
      • Removed the option to enable/disable latency hiding, it is always on on clients (and off on the server).
    • Bugfixes
      • Factorio shouldn't crash anymore when Direct3D device is lost due to locking screen or entering sleep mode.
    • Modding
      • Added support for equipment grids in cars, tanks, locomotives, and cargo wagons.
      • Changed equipment grids to work as protoypes: defined and referenced by things that use them.
      • Changed equipment and equipment grids to have categories that define what equipment can go in what equipment grid.
    • Scripting
      • Fixed game freeze when an error was thrown during the player left game event.
      • Removed LuaItemStack::has_grid.
      • Removed LuaItemPrototype::equipment_grid_size.
      • Changed LauItemStack::grid to return nil if the item doesn't have a grid.
      • Added LuaItemPrototype::equipment_grid.
      • Added LuaEntity::grid read.
      • Added Added LuaEquipmentGridPrototype.
      • Added LuaEquipmentGrid::prototype read.
      • Added LuaEquipmentPrototype::equipment_categories read.
      • Added LauForce::unchart_chunk()
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-26 11:29:29 CET ] [ Original post ]

    Version 0.13.18

    • Changes
      • Changed train wait conditions to use standard boolean precedence for evaluation, instead of a simple left to right accumulative evaluation.
    • Balancing
      • Increased tank machine gun range to 20.
    • Bugfixes
      • Fixed console command warning not sticking through save-load. more
      • Fixed that vehicle machine guns would show in the logistics request and inventory filter selections.
      • Fixed crash when number animation variations of unit-spawner entity is reduced. more
      • Fixed clearing blueprints didn't clear the label. more
      • Fixed crash when removing entities that had active alerts. more
      • Fixed that sending random garbage to the RCON port could crash Factorio. more
      • Fixed GUI size issues with modded recipes that have a ton of effects. more
      • Fixed script errors with tight spot level 5. more
      • Fixed the market entity not migrating/handling removed items it was offering. more
      • Fixed sound settings not applying when pressing escape. more
      • Fixed a crash that would happen after changing UI scale with the inventory open. more
      • Fixed deconstruction would reset the build rotation value. more
      • Fixed copy-paste between inventory sizes applying the inventory restriction oddly. more
      • fixed game.regenerate_entitiy() not working at all. more
      • Fixed that it was possible to create an assembling machine with zero energy usage. more
    • Modding
      • Fixed crash when trying to connect wires to entities with 0 wire connection distance. more
    • Scripting
      • Fixed LuaSurface::map_gen_settings.shift not working. more
      • Fixed chunk positions would get improperly rounded instead of floored. more
      • Added LuaConstantCombinatorControlBehavior::enabled read/write.
      • Added upper limit to resolution parameter of LuaGameScript::take_screenshot function. Limit for width and height is 16384.
      • Added LuaStyle::visible read/write.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-25 17:08:09 CET ] [ Original post ]

    Friday facts #152 - Team production challenge

    Hello, it has been quiet here the last week, Rseding is back in America, Albert is in Spain, and some pople have holidays. I have been programming until 9:30pm and then I realized I have to write Friday Facts, so it is going to be shorter today, although this happens quite often to me.

    Testing the new multiplayer


    We wanted to use 0.13 stable release as an opportunity to test the marketing benefits steam offers, but since a big part of the update is the introduction of the matching server, which might lure some people to try multiplayer, it needs to be really solid. Playing over an ip with a friend is working quite fine 0.13 already, but hosting a public game to which anyone with unpredictable network properties and computer speeds can join, requires a much more robust system. Since we don't want to put the rewritten multiplayer into our almost stable 0.13 and we don't want to wait with the update too long either, we decided that the 0.14 will contain only the multiplayer rewrite and it will be released as experimental very soon, and all the planned features for 0.14 will be just shifted to 0.15, which doesn't mean it should be delayed much. All the planned features of the multiplayer rewrite are finished, including delaying input of slow players, dynamic changes of latencies of clients depending on their internet connection speed and more. So now is the time for hard testing and tweaking the details. I started using the great clumsy tool which helps me a lot to simulate different network problems locally, but being able to test it with the community will be invaluable.

    The multiplayer testing map idea


    We want to host a multiplayer map with a big player limit (like a 50) 24/7. People could drop in/drop out all the time and still have some fun even if they didn't play for a very long time. So we decided to make a scenario map where people will be assigned to small teams and each team will have it's own space, something like this:
    The teams will get randomly generated production challenges, like produce x of something, research something etc. The first 3 teams to achieve that will get some points and the game is reset. The game could keep some global statistics of player performance and show some leaderboards as well. Scott is working on this and you should be able to test it soon hopefully. If the server game manages to run good even under this load, the work on multiplayer would be finished to our satisfaction. I also hope, that this will motivate people to make these kind of multiplayer scenarios for Factorio, because the possibilities are broad. As always, let us know what you think on our forums.


    [ 2016-08-19 20:41:41 CET ] [ Original post ]

    Version 0.13.17

    • Bugfixes
      • Fixed a crash caused by enemy AI. more
      • Fixed crash due to false-positive detection of a save corruption. more
      • Fixed circuit network controlled signal penalty once more more
      • Fixed crash when removing mod with modded rocket silo. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-17 22:06:51 CET ] [ Original post ]

    Version 0.13.16

    • Changes
      • Changed the personal roboport so it reacts faster to jobs in range.
      • Added graphics option "Enable tree sprite mipmaps" that should reduce GPU load when drawing large forests.
      • Changed default value of "Lights render resolution" graphics option to 0.25. High values of this setting have negative performance impact on drawing lamps.
      • When the first LUA command is used, players are warned that it would disable achievements.
      • Changed default renderer for AMD GPUs back to DirectX.
      • Rewritten sandbox scenario to work in multiplayer.
    • Bugfixes
      • Fixed rail signals getting sometimes stuck as reserved. more
      • Fixed that the game would crash when trying to load a save that contained unit groups with members in different surfaces. more
      • Fixed combinators not drawing lights for the activity led.
      • Reverted the change from Version: 0.13.12 that would disable and hide vsync in some cases. more
      • Fix that biters wouldn't become aggravated when damaged by the flamethrower. more
      • Fixed game sometimes not being focused properly on OS X. more
      • Fixed that the car could shoot itself. more
      • Fixed desync related to fast-replacing filter inserters with other inserters. more
      • Don't remove a wall's circuit connection when gate is destroyed and ghost is created. more
      • Fixed opened machine sound sometimes being high-pitched. more
      • Fixed that some keybindings wouldn't register properly after a game restart. more
      • Fixed that it would be possible to manually craft items the player does not have enough ingredients for. more
      • Fixed playtime in public game browser being 0 for the first minute the server is up.
      • Fixed train path finding penalty for circuit network disabled signals.
      • Fixed rail planner collision checks for rails in west and south direction. more
      • Fixed requester chest was missing vehicle impact sound. more
      • Fixed that dragging the research button would drag and move the technology tree. more
      • Fixed that the selected slot wouldn't update properly when the quickbar was rotated. more
    • Modding
      • Fixed crash when mods use tables as key values in prototype data. more
      • Added example definition of an electric energy interface.
      • Fixed copy&paste on modded constant combinator would copy also number of item slots. more
      • Fixed possible desync caused by inserters putting items directly to loaders.
      • Fixed loader wouldn't stop loading to chest marked for deconstruction.
    • Scripting
      • Fixed LuaEntityPrototype::resource_category crash. more
      • Fixed changing force of construction or logistic robot would cause game state corruption. more
      • Added LuaEntity::get_fuel_inventory().
      • Added event on_player_changed_surface.
      • Added LuaInventory::find_item_stack(...).
      • Added LuaControlBehavior::disabled read.
      • Added LuaVirtualSignalPrototype and LuaGameScript::virtual_signal_prototypes read.
      • Changed LuaEntity::get_filter()/set_filter()/filter_slot_count to work on both inserters and loaders.
      • Added an optional boolean to LuaSurface::spill_item_stack to mark the created items with the to-be-looted flag.
      • Added LuaSurface::get_connected_tiles(...).
      • Added LuaSurface::get_hidden_tile(...).
      • Changed Product::type to string containing "item" or "fluid".
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-16 21:42:53 CET ] [ Original post ]

    Friday Facts #151 - The plans for 0.14

    Hello!

    0.14 plans


    Most of the list of 0.14 plans won't be a big surprise as most of it was discussed in the past:
    • Multiplayer rewrite
    • Circuit network improvements
    • Update optimizations
    • Nuclear power
    • Liquid wagon + universal barrelling
    • High res graphics introduction
    • Gui reskin and possible improvements
    • Multithreaded update
    We expect this update to take less time compared to 0.13, so November might be a realistic estimate.

    Multiplayer rewrite


    I dedicated fff-147 and fff-149 to these. All of the big changes are finished and all of the previously written automated tests are passing. The rewrite has been merged into our master branch so it can be tested by team members from now on. All the remaining changes and tweaks to be done should be possible without any additional deep changes, so it should go smoothly from now on. This means, that I will have time to get to work on the next 0.14 subject soon, which is:

    Circuit networks and 0.14


    Over time Twinsen made quite a list of features or improvements worth considering to be added to the circuit network. It's time to look at that list and see what should be done for 0.14 Right now, the trello card looks something like this:
    So what better way to decide than ask the community. There's a poll at the forums where you can vote for your favorite features. Of course, keep in mind that these are not fleshed out ideas, some of them might turn out to be completely wrong and not worth implementing.

    The nuclear power


    The relatively short-term (steam) vs long-term (solar) power generation options work quite well, but we are well aware that more possibilities to generate power should have existed for a long time already. The main reason why we postponed it so many times, is that we wanted to do it properly. Some kind of "mine uranium -> put it into boiler" wouldn't be a proper use of the potential at all. I can't say anything more specific on the subject, as we still have to invent the nuclear power plant mechanics, and design them to be interesting while properly fitting the existing Factorio gameplay. I welcome any good ideas on the topic.

    High res graphics introduction


    We have been asked about this many times already since the first example from quite a long time ago. We didn't forget it, and as we want this to be done prior the 1.0 version, it is the latest possible time to start working on it. All of the newly created entities are already created with high res variant in mind, but some of the older ones, like pipes or belts need to be tweaked and post processed again to be compatible with the rest. This is what Vaclav is working on these days. We should hopefully be able to show some examples of the work soon. We will cover just part of the graphics in 0.14, but you will have the chance to use them when you select the new graphics option. But beware, the graphics memory requirements will grow a lot.

    Update optimisations


    The belt and pipe optimisation have been described in the fff-148, on top of it, we would like to take a look on some of the biggest cpu eaters in big factories. It depends on the type of the factory, but train pathfinding/movement, flying robots logic and inserters are the next most probable candidates. Additionally, we would like to try out the multithreaded update, which is covered in the next part.

    Multithreaded update


    As it is always better to improve the performance without the need to use more threads, there is always a limit. This is why we would like to try experiment with the multithreaded update. We already use multithreading in Factorio, but only for certain tasks. To update the game at the same time when it is rendered, to speed up the render prepare (this is how we call gathering of the data for render), and to generate the map in the background. So it looks like this:
    There are other threads, like sound or network packet processing, but these are not related to this. Multithreading the update itself, which is the real bottleneck in big factories is the most needed step currently, but it is also the most complicated. Factorio needs to be fully deterministic and many things are tightly related across the whole map. This is why we won't just make the whole update run in threads as it would be huge amount of work that would break almost everything. We will just pick some specific processing tasks suitable for multithreading and implement these, while the rest of the logic will run in single thread as before:
    If it works well, we will be able to put more and more things into the multithreaded updates one by one, so we have it under control. The first testing entity that will be ran in parallel is inserter. The selection is logical, they are tens of thousands of inserters in Factories regularly, they are usually one of the most cpu hoggers right after belts and they have limited operational range, meaning, one inserter can't directly access something 2 chunks away. The main problem when dealing with parallelism is access to shared resources, eg. when two different threads write to the same piece of memory. This is either solved by locks, which is not really an option on the entity level, or by strategy that prevents the threads to write to the same piece of memory. Our planned strategy is to divide the chunks (32X32 tiles of map) into 3X3 grids and number these from 1 to 9 like this:
    No, it is not a sudoku :), all the chunks with number 1 can be updated at the same time, as long as the logic doesn't change anything further than the neighbour chunks. Then we update chunks 2, 3 up to 9. We don't really have to wait for all of the 1s to be finished to start 2, but I don't want to run into details. This strategy has also the additional needed property, which is that the neighbours of the chunks are updated always in the same order. Without it, the game wouldn't be deterministic. But even inserters affect global state of the map, mainly:
    • Circuit network can span across the whole map - when the inserter adds/removes from a chest connected to circuit network it could access the same data as other thread.
    • Logistic network
    • Production statistics (Burner inserter can use coal)
    These changes can't be applied instantly anymore, but every thread keeps its own list of changes to be applied later, we call these deltas. These deltas are merged at the end of the multithreaded phase, and applied in a single thread later on. This is the plan, and our new potential programmer (say hello to Denis) is doing it as his testing task. Our testing task difficulty kind of increased, but he was asking for it :). It could actually be working quite soon, I can't wait for it!

    Overall plan


    Our overall plan is to have Factorio 1.0 finished next summer. This most probably means, that 0.15 would become 1.0 once it gets stable. We have not decided what will go into 0.15 yet, but the current plans contain the ideas of the dirty mining and artillery train, but this is all subject to change. We will mainly try to polish the corners, so the overall result is balanced solid and finished game. This will be the result of 5 years long hell of a ride, from home garage developement, through crowdfunding to our offices and steam. Finishing the game will be important step for us and our conscience, as all the promises we gave on the way will be delivered. After that, we will probably take a reasonably long vacation to clear our heads and then ... well, I find it very probable that we will still want to work on the game. The meaningful possibility as I see it would be to make proper expansion. That way we could implement the ideas like the space platform, biter farms and more with energy and time it deserves. As always, let us know what you think on our forums.


    [ 2016-08-12 15:42:26 CET ] [ Original post ]

    Version 0.13.15

    • Bugfixes
      • Fixed that rotating the quickbar would make the headless server crash. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-06 14:19:47 CET ] [ Original post ]

    Version 0.13.14

    • Changes
      • Surplus items from crafting are again available for crafting other items. For example, crafting two green circuits will no longer result in two extra copper wires in the player's inventory. This only applies to items that are automatically crafted as a prerequisite; items the player has explicitly requested to craft will not be used to satisfy the dependencies of any further orders.
      • Factorio will output to console window in UTF8 on Windows.
    • Bugfixes
      • Fixed crash when trying to connect copper wire to invalid entities out of range in the latency state. more
      • Fixed burner fuel sources would keep their energy when dying and being rebuilt by robots. more
      • Fixed inserters would try to grab items from rails instead of chests/entities when build in specific setups. more
      • Fixed disconnecting chests or constant combinators not correctly clearing circuit network. more
      • Fixed a crash that sometimes happened after canceling manual crafting. more
      • Fixed a bug where canceling a prerequisite product would cancel more than necessary. more
      • Fixed crash when trying to connect power switches in map editor. more
      • Don't force Vsync off on OpenGL. more
      • Fixed error in tight spot level 5. more
      • Fixed a bug where a player's GUI would be reset when any other player in MP pressed the "switch active quickbar" button. more
      • Don't allow sideloading onto a disabled belt. more
      • Fixed game hanging with certain train configurations (loop where last rolling stock touches the first).
      • Fixed chain signal colors not being updated when setting signal states from the circuit network more
      • Fixed mod updates sometimes not being found with a large amount of mods.
      • Fixed mods browser not being sorted after searching. more
      • Fixed regenerating entities on map more
      • Fixed watch-your-step achievement for real this time. more
      • Fixed "failed to create display" error when switching to another window immediately after launching Factorio. more
      • Fixed isses with saving to NTFS junctions. more
    • Optimizations
      • Significantly reduced the high CPU usage caused by the main loop logic from 0.13.10.
    • Modding
      • Fixed input loader didn't resume loading after being deactivated due to full target container. more
      • Fixed crash when loader connected to splitter is destroyed. more
    • Scripting
      • Fixed map corruption and crashes caused by some API functions allowing entities to be used across surfaces when they aren't setup to handle it. more
      • Fixed evolution_factor could be set to a negative number resulting in base build errors. more
      • Fixed crash when using entity of type 'flame-thrower-explosion' with 'create-entity' trigger effect. more
      • Fixed LuaGameScript::take_screenshot() would fail if destination file contained non-english character in its path. more
      • Added LuaEntity::filter_slot_count read.
      • Added LuaEntityPrototype::mining_drill_radius read.
      • Added LuaTrain::station read.
      • Added LuaDamagePrototype and LuaGameScript::damage_prototypes read.
      • Added LuaEntity::loader_type read.
      • Added LuaRemote::remove_interface(name).
      • Changed LuaRemote so interface names must be unique to maintain save/load determinism.
      • LuaEntity::revive() will return the revived entity as a second return value if successful and if the ghost was an entity.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-08-05 19:21:36 CET ] [ Original post ]

    Friday Facts #150 - New Terrain Experiments

    Hello all,

    0.14 dreams


    The 0.13 stabilisation process has been going on much smoother than expected. This was due to the focused bug fixing efforts of majority of the dev team. It seems realistic that we could have a stable 0.13 version within a week or two. Naturally this brings the question what will be in the box for 0.14. We have had a chat about this with kovarex and came up with a specific (yet very rough or high-level) road plan for 0.14 (and subsequently 0.15). However this will be the content of the next FFF where kovarex will present you a more detailed list of things that you might (most probably - as always) expect. Apart from bugfixing not much has been happening lately. Rseding is getting ready for his way back home to the US (2 months flew by really fast). Kovarex is still deep down in Multiplayer rewrite. I have been refactoring our webpage from Clojure to Python (to make it more accessible and consistent with the rest of our web applications). In general there is a summer chill atmosphere in the office. One of the bigger fixes in recent 0.13 releases has been the main loop. Robert (aka Twinsen) writes more about it:

    Main Loop Again


    Something that happened in 0.13.10 is that the game's main loop was partially rewritten. I'll explain a bit how our game loop works. For those who don't know, a Game Loop, or Main Loop is a small part of the game's code that is responsible for telling the game when to process the user input, update the game state and render. It tracks the passage of time to control the rate of gameplay. In its simplest theoretical form it looks like this: while (!exit) { processInput(); update(); render(); } And as usual, things in Factorio are more complicated. The way we do game updates and rendering is a bit different than most games. They way our previous game loop worked was explained briefly in FFF-70. Our main loop code is about 800 lines, but in it's simplest form the new and old game loops look something like this: while (!exit) { processInput(); if (didGameUpdate) prepare(); //go though all the entities and collect draw orders start update thread(); //update all the entities: update the game state for 0, 1 or more ticks so we get 60 UPS if (didGameUpdate) render(); wait for update thread to finish(); } The nice thing about Factorio is that we can do the rendering in parallel to the game updates. The only thing that needs to be synchronized is what we call the prepare step, that goes though entities and asks what sprites need to be drawn (and where). Once that data is collected, the render step deals with the actual textures and tells the GPU what to do. Another thing that is very different than most games and some people find it hard to understand is that there is at the moment no point in rendering more frames than game updates. This is because our animations and entity movements are part of the game state (for many reasons, but mostly for simplification). So if you call prepare() and render() two times in a row, you and up drawing two absolutely identical frames. I won't go into deep technical details (that would mean talking about barriers, thread conditions, vsyncs, etc.), but our old game loop had a couple of problems:
    • it was trying to be too smart and solve too many different edge cases (what do we do when rendering takes too much time, what do we do when we have have update time spikes, how do we synchronise game updates with vsync, etc)
    • it did not work well with monitors that refresh faster than 60hz (144hz monitors) so some tweaks and hacks were put in place to make it sort of work
    • some of its timings were based on the precision of thread sleep
    • the update rates did not average out at a precise 60UPS even on small maps, meaning that in multiplayer games some players would run the game slightly faster than others
    • it was tweaked and changed over the years to fix various things to the point where no one could really understand what was happening anymore.
    Although it still worked fine in most cases, I decided to rewrite it and address the issues above. And on top of that see if I can maybe squeeze more UPS(game updates per second). I took inspiration from some articles and also from Unity's game loop. In the end the simplified main loop made its way into 0.13.10. The result is:
    • performance wise almost identical solution (or better - in some special cases we now get 20% more UPS)
    • above mentioned problems were solved
    • it leaves possibility to free the FPS and UPS, so we can have for example 144 FPS/60 UPS. We briefly talked about the possibility of interpolating the position of the player sprite and camera, so very hight framerates could make sense.

    To eat CPU or not to eat CPU


    Because of the way it was written initially, the loop would eat up 100% of one CPU core. While it was quickly fixed for the headless server, our office was divided into two camps that would argue whether the main game should use as much CPU as possible to squeeze the best performance possible or sleep when possible to conserve CPU. You can read some more about this problematics. In 0.13.14 there will be a solution which uses much less CPU while sacrificing very little UPS.

    New Terrain Experiments


    At the moment, our art director (Albert) is back home in Spain, however the work still continues with him communicating with the rest of the team. One of the topics in the gfx world nowadays are new terrains. Jurek has been experimenting with these for some time. Basically we are looking into adding 2 new biomes each with 3 variations. The biomes would be the tundra/taiga inspired environment with 3 different levels of "snowiness". And also the "red desert" with 3 different levels of "rockiness". The red desert can be considered a hybrid between the Australian outback and Martian landscapes. Work on the biome contains working simultaneously on multiple elements, which need to work together giving a good impression:
    • tiles
    • doodads (plants, rocks)
    • tile patches (decals, holes, rigs, etc.) - these are technically doodads too
    • even specific trees for the terrain
    The biggest challenge is to make the terrain look smooth and "authentic" in different zoom levels. A certain solution might look good when zoomed in, but it reveals repeating patterns when zoomed out.Creation of the terrain is kind of a permanent search for the best compromise among different zoom levels. Of course in the final "product" it all needs to come together (probabilities of tiles with different sizes, doodads and tile patches distribution, sizes of biomes, etc.) to give the best feeling. This requires cooperation with dev team as well. Here you can see proposals for the tile patches in the red desert terrain
    And here you can see some proposed doodads for the same terrain:
    The commenting thread is ready at our forums as usual.


    [ 2016-08-05 16:21:54 CET ] [ Original post ]

    Version 0.13.13

    • Bugfixes
      • Fixed OpenSSL launch issues on Linux more
      • Fixed crash on Windows after multiple restarts when installing mods
    • Modding
      • Added entity prototype flags "not-blueprintable" and "not-deconstructable".
    • Scripting
      • Changed LuaEntity::order_deconstruction() to return true/false if it did the deconstruction instead of throwing errors.
      • Added LuaPlayer::entity_copy_source - the source entity used during entity settings copy paste.
      • Added LuaEntity::request_slot_count read - the number of request slots on the entity or 0 if none.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-30 21:12:37 CET ] [ Original post ]

    Version 0.13.12

    • Changes
      • Vsync will be automatically turned off and hidden from the options menu if desktop composition(windows aero) is on.
    • Small changes
      • - Locale additions and improvements.
    • Bugfixes
      • Fixed auto trash slots were lost when player died in multiplayer. more
      • Fixed that the headless server would consume 100% CPU. more
      • Fixed that --mod-directory and other command-line arguments would be forgotten on Factorio restart through the mod manager. more
      • Fixed that technology name and description locales didn't work correctly for tiered technologies.
      • Fixed using flamethrower and slowdown capsule at the same time could ignite biter more than once and corrupt save.
      • Fixed modules could end up in the input slot on furnaces. more
      • Fixed unsightly message when changing player colour in singleplayer. more
      • Fixed inserter circuit "hold" read mode sending the signal 1 tick too late. more
      • Fixed transport belt circuit condition ignoring 1 tick duration signals. more
      • Fixed crash when saving the game fails due to the disk being full. more
      • Fixed the "watch your step" achievement would get triggered by random source-less damage. more
      • Fixed the render layer for turret range visualizations. more
      • Fixed that an inserter could hold more items than its stack-size bonus, if it was created by fast-replacing a stack inserter. more
      • Fixed automated fuel insertion into cars wouldn't fill the fuel inventory. more
    • Modding
      • Fixed crash when technology prerequisites ended up being recursive. more
      • Fixed crash caused by destroyer robot beams when compression was enabled for all sprites. more
      • Fixed inserters with stack bonus not dropping the item to it's destination when deactivated. more
      • The fluid icon for the storage tank now scales with the size of the storage tank. more
    • Scripting
      • Fixed error when attempting to interact with LuaInventory that has a size > 255. more
      • Fixed crash when robots charging would get disabled through mods. more
      • Fixed wrong error when setting durability of an item. more
      • Added LuaItemPrototype read properties: localised_description, place_as_equipment_result, place_as_tile_result, flags equipment_grid_size, inventory_size_bonus, capsule_action, attack_parameters, inventory_size, item_filters group_filters, sub_group_filters, filter_mode, insertion_priority_mode, localised_filter_message, extend_inventory_by_default default_label_color, draw_label_for_cursor_render, attack_result, attack_range, category, tier, limitations, limitation_message_key straight_rail, curved_rail, repair_result, selection_border_color, alt_selection_border_color, selection_mode_flags, alt_selection_mode_flags selection_cursor_box_type, alt_selection_cursor_box_type, always_include_tiles, durability_description_key, durability.
      • Added LuaItemStack::add_durability()/drain_durability().
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-30 10:52:44 CET ] [ Original post ]

    Friday Facts #149 - Deep down in multiplayer

    Hello! I have been deep down in the multiplayer internals the whole time since the last Friday facts. I think about multiplayer when I eat, I think about it when I ride my bike, I even have dreams about packets travelling from place to place, when my wife asks me what do I think about, I'm almost afraid to tell the truth. So obviously there is nothing else I could write about than the multiplayer in this Friday facts. This is going to be somewhat technical.

    The connection - the Router layer


    This is the old way of connecting to the game:
    The first problem is the possible abuse of the server to ddos someone. As it is possible to send packets with fake sender IP. The "hacker" can just send the connection request to the server, where the IP is the target . The server will eventually connect the target of the ddos attack to the game, and it will send him heartbeats until it gets disconnected. It takes 10 seconds to disconnect a peer so the attacker can flood the target with 700 packets by sending a single packet to the server. So the new way of connecting is like this:
    The client first generates (randomly) his id, and sends it to the server as part of the request. The server generates his unique random id as well, and sends it back to the client. The first response from the server is very small packet containing just the two ids and application version, so the reply is not effective for the ddos.The server then waits for the reply from the client, if the IP of the connection request was hacked to not be real, the client will simply not respond and the connection ends. The serverID is required as proof, that the sender of the ConnectionReplyConfirm is really the source of connection request. Several smaller problems of the connection logic were solved as well, such as possibility that the server connected a client twice (even without any hacking) and others.

    Synchronisation - the Synchronizer layer


    Once the player is connected, he will receive heartbeat packets from the server, and is expected to send his own. In the old multiplayer model that was based on the peer-to-peer, we had something called network-tick. It was a number used to identify sequential heartbeat messages. It could be used as a means of identification when packets where lost and when when peers needed to synchronize during connection/disconnection/map upload etc. As the peer-to-peer network model is being removed, this is not needed anymore and every communication has it's own numbering, I call it a sequence number. This allows players with big latency and lower internet connection speed to send their messages less often while sending more user actions in one message. It can be also used in the state where client is trying to catch up the game without making his own actions (more later). A Side effect of redoing the synchronisation logic is better resistance to hacking. There was thing called "session magic"; a randomly generated number given to players as they connected to the game. Every packet sent to the server needed to provide this number as a key. But once it was shared, it was possible to send message as it was from a different player. This is now (almost) not possible as the session magic is different for every client.

    Multiplayer states - the Multiplayer manager layer


    The trying to catch up mentioned in previous multiplayer post is now fully functional. Map upload is done in in the background, while others are playing the game. The new player is also receiving all the player input, that is saved for the next phase. Once the client downloads and loads the map, it tries to update it as fast as possible to catch up with the server. If he can't catch up or his upload is too slow and he decides to cancel the connection, other clients are not bothered.

    Overall progress update


    I have already added+removed more than 20 000 lines of code in my git branch called "fixed-multiplayer", so the changes are quite huge, but it feels good to dive into something completely new to me (networking), and get an understanding of it. As we have some nicely written tests for the multiplayer already, I could just make them work one by one from the lower layers (router, synchronizer) up to the higher layer (multiplayer manager). All the lower level tests are now working flawlessly, the higher level is being worked on, but simple connection to the game with 3 players was just fixed today. Because the multiplayer network model is far easier to understand and doesn't contain as many weird corner case issues I think it will be possible to have the finished version in weeks instead of months which makes me very positive. To give you better idea of how much is happening under the hood, this is the diagram of the action path from when a key is pressed until it's applied on the local peer in a multiplayer game.
    As always, let us know what you think on our forums


    [ 2016-07-30 10:14:57 CET ] [ Original post ]

    Version 0.13.11

    • Small changes
      • Further locale changes and polish.
      • Horizontal mouse wheel scrolling is now translated to vertical scrolling, because of key binding problems on OS X. OS X blueprint book binding is changed back to Shift + Mouse wheel up/down, other custom horizontal mouse wheel bindings are changed to vertical.
    • Bugfixes
      • Fixed that the Linux binaries would crash after handcrafting finishes. more
      • Fixed offshore pump could be built on top of other offshore pumps. more
      • Fixed pumjack output would show 0.0/s. more
      • Fixed that "show pollution on minimap" didn't work when "show pollution on map" was not enabled. more
      • Fixed scrolling on OS X.
      • Fixed exploit of connecting energy producer to more networks and connecting them by switches. more
      • Fixed long handed inserters couldn't pick up from the ends of cargo wagons. more
      • Fixed that when a mod defined a technology with an invalid recipe, it could crash the game. more
    • Scripting
      • Fixed accumulators with circuit connectors not working correctly when exported through get_blueprint_entities(). more
      • Changed LuaSurface::find_entities/filtered to take either area, position, or neither instead of just area.
      • Added LuaGroup::order read.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-25 22:41:52 CET ] [ Original post ]

    Version 0.13.10

    • Minor Features
      • Added logistics auto-trash slots: the opposite of logistic request slots.
      • Added --mod-directory: Specifies which mod directory to use
    • Changes
      • Increased the size of the curved rail bounding boxes slightly so trains won't damage things built next to them.
      • Server stdout messages now contain timestamps and message-type tags
      • Biters and other units won't become aggressive as a result of friendly-fire.
    • Bugfixes
      • Fixed golem achievement incorrectly showing as not-obtained when loading pre 0.13.9 saves in 0.13.9. more
      • Fixed crash related to wire rendering after switching to copper wire while dragging wire. more
      • Map generator tweaks (predictable starting area resources, water only in starting area works now, fixed a few bugs in biome generation).
      • Fixed chat message rainbow when the game tick would go past 2147483648. more
      • Fixed password field not being focused when connecting to a game. more
      • Fixed rocket silo moving slow when using efficiency modules.more
      • Fixed pressing Escape in multiplayer connect password dialog closed all gui windows. more
      • Fixed gates sometimes not opening soon enough. more
      • Fixed side menu buttons being focusable. more
      • Fixed numbers display rounding up when it shouldn't. more
      • Fixed constant combinator GUI slider sometimes showing different value than the number of items. more
      • Fixed assembling machine GUI progress bars not sizing correctly. more
      • Fixed tight-spot scenario missing walls around trees. more
      • Narrower descriptions with more line breaking opportunities (mod list, roboport). more
      • Fixed that cunning cancellation of crafting orders could result in free items. (https://forums.factorio.com/27459) As a result of this fix, your entire crafting queue will be lost when loading a save from 0.13.9 or earlier. We suggest that you finish or cancel all your crafting before upgrading.
      • Fixed crash related to custom units. more
      • Fixed mod enabling/disabling sometimes didn't restart the game. more
      • Fixed several issues with buildability checks returning false but entities actually being buildable. more
      • Fix that aggroing a huge amount of biters would cause UPS drop for a long time. more
      • Fixed freeze when dragging sound sliders in some instances. more
      • Fixed bullet shooting speed not working properly. more
    • Optimizations
      • Improved performance when building large electric poles in the latency state by click-and-drag. more
      • The game's main loop has been rewritten. This should increase performance in some cases and fixes some freezes and stability issues. For example game freezing when changing system time.
    • Modding
      • Starting area is now 1.5x the size in tiles (also affects tier_from_start).
      • Fixed manually defining the localised_name of an item didn't work correctly. more
    • Scripting
      • Added LuaEntity::copy_settings() - copies settings from one entity to another as if the player did it.
      • Changed LuaSurface::find_entities/count_entities/filtered to search the entire surface if the area isn't defined.
      • Fixed crash when trying to set compound command with missing list of commands. more
      • Fixed technology effects are now applied before the research_completed event is fired. more
      • Added LuaGameScript::direction_to_string(...) - converts a defines.direction to the string name.
      • Added LuaPlayer::clean_cursor() - acts as if the player pressed the "clean cursor" key.
      • Added LuaEntity::mining_target read.
      • Added properties to LuaSurface::create_entity to make the creation act as fast-replace building.
      • LuaGameScript::take_screenshot now has an additional field "by_player" that when set will cause the screenshot to only be taken on that players local game.
      • Added LuaEntity::circuit_connected_entities - the entities directly connected to an entity by the circuit network.
      • Added LuaEntity::circuit_connection_definitions - the connection definitions for all wires connected to an entity.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-22 22:30:36 CET ] [ Original post ]

    Friday Facts #148 - Optimizations for 0.14

    Greetings!

    My visit to Prague


    Todays Friday Facts are brought to you by Rseding91. I live in the USA and normally work remotely for Wube but I've been visiting Prague for the past 2 months. Since I'm not the touristy kind of person (I'm a programmer) and I love working on Factorio; I've spent almost all of my time here in the office. I've been in Prague since June 6 and my current time sheet says I've logged 568.55 hours.

    The bugs


    0.13.0 was released 4 weeks ago and we've had 9 releases since with 280+ bugs fixed of which I've personally fixed 99. We've still got 60+ confirmed bugs to work through however the bug reports are coming in less frequently as time passes. The reported bugs have also changed from "the game crashed, my map is corrupt, my computer exploded" style bugs to this kind of bug. While yes, it's still a bug, it doesn't break gameplay at all so it's far less critical to get fixed immediately. The number of repeat bugs (bugs reported, fixed, and then broken again later) is near zero and of the bugs reported and fixed in 0.13 almost all of them where preexisting issues or introduced from features added in 0.13. That means that our automated tests are working and we aren't fighting against ourselves fixing issues we've already fixed. Other than the outstanding multiplayer issues mentioned in last week's Friday Facts 0.13 is looking great and baring any major bugs we're planning for a stable release August 1st..

    0.14 and optimizations


    As of now, there hasn't been any concrete plan as to what will go into 0.14. There are still enough bugs to fix that everyone's busy working on those. However, when optimization was mentioned it immediately got my attention and was assigned to myself for 0.14. Because we put no limits on what you're allowed to build in Factorio and the nature of the game encourages expansion and large factories even the best computers will eventually struggle to keep the game simulation running at the desired 60 updates per second as you expand. So far our main method for addressing slowdown has been "do less". It sounds simple but it rarely is. A few examples of past performance improvements:
    • Transport belts in 0.12 onward only check item collision against the item directly in front of the item being moved. (More in FF #83)
    • Solar panels where grouped so regardless of how many you build the calculation is: N * light * power
    • Accumulators are grouped similar to solar panels
    • Logistic/construction robots don't do any collision checks when moving since they can't ever hit anything anyway
    • Most entities will "go to sleep" when they have nothing to do - consuming zero processing time when asleep
    Two of the most frequently built entities and subsequently two of the most CPU consuming entities are: transport belts and pipes. The vast majority of them are large section of simple belts without intersections splitters inserters or so. The player simply needed more throughput and so they built 5-10 parallel lines of belts/pipes. Right now each belt and each pipe is updated individually piece by piece. That means the cost to run those increases as the count of entities does. The other cost is also the transition of fluid/items from each pipe/belt to another.

    The plan



    The belt/pipe lines would be merged and act as series of segments. This allows the items on the segment to be saved in one continuous piece of memory, which not only improves memory locality, but allows us to use tricks to move the items on the belts smarter, instead of moving every item in the segment, we can just change the overall segment offset as long as the belt exit is not blocked. On top of that, the individual belts and pipes wouldn't have to be updated, as their animation can be simply tick-based. In the ideal case, this could improve the performance of transport belts many times! Again, that sounds simple enough when stated but as I've started to look into what will be required it becomes more and more complex. This is just the initial list of questions that I need to solve before work can really begin on this:
    • How is the "other movable" logic meant to be handled for belts and splitters if they aren't going to be updatable
    • Right now splitters operate by doing: move items on input lines -> split -> move items on output lines. How will this logic be done when the lines have no knowledge of the splitter or its mechanics?
    • Who's responsible for saving transport line data?
    • Custom render logic, so the segments draws it items in one go instead of individual items drawing them.
    • How is save-load stability going to be maintained for merged transport belts? When a set of belts is merged runtime and then that data is saved how do we ensure the loaded and re-setup belts re-merge in the same way?
    • Segment creating/merging/splitting logic. When belts are build/destroyed.
    • How will migrations of belts in segment work?
    • How will we handle underground belt connection distance changes between save load?
    • And many others.
    Nothing is ever as simple as you think it should be :) Between working on bugs and thinking about optimizations in 0.14 I've been working on some smaller features for 0.14. One of them I really like won't change the gameplay but just gives some fun data for multiplayer games: train kills.
    As always, let us know what you think on our forums


    [ 2016-07-22 18:15:41 CET ] [ Original post ]

    Version 0.13.9

    • Changes
      • Updated demo campaign tips images.
      • Updated/Fixed locale entries.
      • Removed --mp-load-game
      • Default value for "Lights render quality" graphics options was changed to 1.0. If config.ini contains value lower than new minimum (0.25) it will be reset to the default value.
      • Lights are rendered with linear filtering to improve quality for lower "Lights render quality" settings. (https://forums.factorio.com/28892)
      • Added tips and tricks for pasting wagon slots and cycling in blueprint book.
      • Mods are now sorted alphabetically in the mods list.
    • Bugfixes
      • Fixed transport belt madness map showing an empty message dialog out of nowhere.
      • Fixed transport belt madness being impossible. (https://forums.factorio.com/28703)
      • Fixed crash on Linux when stdout was closed after starting Factorio. (https://forums.factorio.com/28590)
      • Fixed trains of other forces could be seen in the Trains GUI. (https://forums.factorio.com/28799)
      • Fixed inserters not saving custom pickup/dropoff when exported through the Lua blueprint interface.
      • Fixed robots delivering modules into the recipe input slots instead of the module inventory. (https://forums.factorio.com/28722)
      • Fixed performance issue caused by alt mode when some mods are installed and linear filtering is enabled. (https://forums.factorio.com/28789)
      • Items stop correctly before a belt deactivated using the circuit network. (https://forums.factorio.com/28766)
      • Fixed another case where a biter could get stuck. (https://forums.factorio.com/28893)
      • Fixed crash when using --mp-connect to join a game that requires user verification. (https://forums.factorio.com/28500)
      • Fixed train GUI would be too big to fit on screen with a large amount of character inventory slots. (https://forums.factorio.com/28855)
      • Buildings with backer names containing non-ASCII charecters are generated properly.
      • Fixed logistic counts when changing stack sizes of items the player was holding.
      • Fixed crash when right-clicking electric pole in Map Editor. (https://forums.factorio.com/28983)
      • Fixed crash when building tiles would result in you dying. (https://forums.factorio.com/28948)
      • Fixed disabled belts would still move the player. (https://forums.factorio.com/28947)
      • Fixed crashes related to changing train conditions in the latency state.
      • Fixed line breaking in description titles. (https://forums.factorio.com/27128)
      • Fixed typo in description of flooring items. (https://forums.factorio.com/28704)
      • Fixed blueprint icons not working as desired when paths where part of the selected area. (https://forums.factorio.com/28884)
      • Fixed that a username change wouldn't save if the game crashed. (https://forums.factorio.com/17837)
      • Fixed that clicking an alert button could show the wrong alert. (https://forums.factorio.com/28913)
      • Fixed flooring placement preview rendered on top of turret base. (https://forums.factorio.com/28894)
      • Fixed numpad home/end/other keys not working when numlock was off. (https://forums.factorio.com/28934)
      • Fixed that the game password dialog showed the password. (https://forums.factorio.com/29002)
      • Fixed that inserters at the very front of trains would sometimes not get enabled when a train would stop. (https://forums.factorio.com/28964)
      • Fixed the difficutly settings for scenarios not working. (https://forums.factorio.com/27976)
      • Fixed alignment of some pipe covers. (https://forums.factorio.com/28785)
      • Fixed the watch-your-step achievement not working. (https://forums.factorio.com/27710)
      • Rocket parts from building rockets in the rocket silo now show in production stats. (https://forums.factorio.com/29001)
      • Fixed tracked achievements scrolling off screen when un-tracking them. (https://forums.factorio.com/27922)
      • Fixed inserter sometimes only dropping one item on the ground before going back. (https://forums.factorio.com/28046#p183886)
      • Fixed LuaGameScript::active_mods not showing the correct list of mods. (https://forums.factorio.com/29088)
      • Fixed signals letting trains pass when the circuit network changes. (https://forums.factorio.com/28923)
    • Scripting
      • Fixed SpritePath to recipe that inherits icon from its result would not be considered valid. (https://forums.factorio.com/28867)
      • Fixed crash when setting new research in the on_research_completed event. (https://forums.factorio.com/28968)
      • Fixed error during the research completed event being un-clickable. (https://forums.factorio.com/27803)
      • Added LuaTile::position read.
    Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.


    [ 2016-07-15 18:09:23 CET ] [ Original post ]

    Friday Facts #147 - Multiplayer rewrite

    Hello!

    Multiplayer - new field for me


    Once we started the matching server, we finally had to face the reality of the multiplayer over the internet with people around the world. We realised there are A LOT of problems rising to the surface, and that it needs to be worked on. I left all the multiplayer logic to be done by cube and tomas until now, and I had only a very simplistic idea how it works. With tomas on holiday and cube busy with other tasks, I realized how big of a problem it is that no one else has a clue how it works under the hood, so I took this opportunity to dive into it personally. After a week of reading, discussions with cube and partial rewrites, I can present you with my findings and a roadmap of ongoing changes.

    From the Peer-to-peer model to the server-client model that is still kind of peer-to-peer


    As some of you might know, the Factorio multiplayer was originally written to be always peer-to-peer. The motivation was to minimize the latency, as in the theoretical case of everyone having the same connection with everyone else in the game, the latency would actually be smaller compared to the server-client model. The problem is, that there are many things that had to be paid as a price.
    • Everyone needs to be actually sending packets to everyone else, which isn't that easy in the current world, where IPv6 isn't everywhere, and public IPv4 address is becoming quite a luxury. This can be solved by nat punching, but it also isn't 100% reliable.
    • The logic of events, like joining, quitting, disconnecting, is very complex, as it always has to be discussed by the peers before anything can be done. And as we have the lock-step simulation, it always has to be ensured, that these actions are performed in perfect synchrony. Complexity means bugs, and in this case, some of them are hard to fix. On top of that, even if it was written perfectly, it wouldn't feel perfect.
    • Everyone needs to have the same latency.
    • No defence from lag spikes of individual players.
    • One packet per player per tick sent and received by everyone, so the amount of packets sent is O(n^2)
    So once we encountered the "real internet" network communication, these problems shown to be too serious. We could have anticipated this if we had only listened to the people warning us that peer to peer will lead to trouble when we were first writing about the implementation more than a year ago. But sometimes, you just have to learn from your own mistakes. So we added an additional option to run in the Server mode, which became the only option later on. But our server mode only solved the first problem, as it was just a patch that re-routed all the communication between peers to go through the server, but all of the peer discussion related complexities stayed. The original peer to peer model:
    The new server model:
    In other words, we took the worst from both of the models and combined it.

    The real server-client architecture version 1.0 (to be done)


    The current state can't be solved by just small fixes and tweaks, fundamental changes in the internals of the multiplayer logic on almost all of the layers has to be done to take advantage of the possible simplifications implied from the fact that peer to peer isn't supported anymore. Let me present the most important changes that I'm working on:

    Clients receive merged package once per tick.


    One of the most obvious changes is, that instead of re-sending all the packets, the server is unpacking these and merging them. He first waits to get the actions of all players in a certain tick, and then sends it to all the clients as a single message. This not only reduces the number of packets sent (from O(n^2) to O(n)), but it also keeps the clients from having to deal with the synchronisation and shit. They just accept the package as it is and apply it. If they miss something due to the packet loss, the client just asks the server for the whole package to be resent, in other words, the clients don't communicate with each other at all.

    Clients don't know about other clients (network wise)


    As clients don't need to communicate, they don't even need to know about their existence in the game. This doesn't mean that you wouldn't know about other players in the game. When a player joins, clients receive an input action Player joined as part of the merged package, so the player is created on the map and in the player list, but this is not related to network logic, and it is a different layer that works like this already. The difference is, that the clients don't need to know what network entity is related to what player, they don't care. Ignorance is bliss!

    Server is the only Input action authority


    The clients are also sending input actions, but only to the server, and it is up to the server to decide whether it should be included in the merged package or not. As the merged package is the only source of the actions to be applied, the server can safely omit a player from the package if he has a lag spike, so the lag spike is isolated from the rest of the game. This is not possible in the peer to peer model.

    Removal of strange freezes on network events


    Currently, when player wants to join a game, first it had to be discussed to stop the game at a certain tick. This tick had to be at least one latency step in the future, as other players could already be ahead of us, and you can't go backwards in Factorio state (Yes entropy works the same way in Factorio world). This is the strange freeze that happens when someone is connecting, disconnecting etc. During this time, the new client is introduced to others so they know they have to count with him. But as we decided that clients know nothing about other clients, this can be removed completely. Once the server agrees on the new player to join the game, it can just start sending his actions as part of the merged package without any interruption. The save-game still needs to be uploaded by the server, so there will still be waiting, but there shouldn't be any strange freezes inbetween the download progress bar and normal game anymore.

    Internal code simplification


    As all the logic is straightened, the internal code will get actually much more simple as well. Simplier code means less bugs. Also this should mean, that if we want someone else to tweak the internals of the multiplayer, it shouldn't take him 3 weeks of study to understand what is going on.

    The possible improvements (version 2.0)


    Once this is all implemented and working, which will take some weeks, we could use this architecture as a reliable base to make additional improvements. These are ideas that shouldn't be that hard to do, but can't be promised.

    Individual latency


    The latency is now a global parameter of the multiplayer game, and it is the delay between creation of the user action (Input action), and it's execution, the bigger the latency is, the more time to deliver the actions between players, so the game might be less laggy. Big latency is bad for gameplay, small latency is bad for distant players. But with the proper server-client architecture and the server being the only input action authority, everyone can have different latency. The guy in the same street as the server only needs 30ms to send the package to the server to be included in the next merged package and next 30ms to get his action back to see it on the screen. But someone from the other part of the world in the same game might need 500ms to send the message, so his actions will just be packed into the merged package with bigger delay. The latency of individual players should be tweaked automatically during the game by the server, so it could make sure that it is as small as possible for a flawless game. An implication of this would be, that the server would have 0 latency, this would be unfair in a competitive game, but in Factorio, there is no reason to drag everyone down just to make it fair.

    Don't wait for upload


    This feature could also be added. When someone joins the game, the server needs to save it, and others have to wait for it, this can't be removed, but once it starts uploading the game, other players (including the server) could just continue playing, while the server is providing the map. On top of that, the server would save all the actions made by the players in the meantime. Once the map is uploaded, the server would send these actions and the client would fast-forward to catch up. The only limitation is, that the client has to be able to run the map in faster speed, so he can catch up.

    Auto kick based on network speed or CPU limits


    Apart from the latency tweaking based on the network roundrip time of individual peers, the server could also measure slowdown related to CPU lag. CPU lag means, that some of the players computers are not able to simulate the Factorio map fast enough, so others have to slow down their simulation and wait for him. It should be possible to set an option to auto-kick players who drag down the game too much. A similar limitation could be applied to upload speed.

    Translations for Factorio


    Scott and Mishka have been spending this week working through the crowdin, this is the website we use to allow the community to help us translate the game. To this date the community on crowdin has helped us translate the game into dozens of languages, along with the subtitles for the trailer and other related media. We'd like to take an opportunity to thank all the translators, as their contribution really has a great impact on the game, and their perspective often helps us in understanding how terms and descriptions we write in the game are interpreted by the players. We still have many untranslated languages on crowdin, so if you think you might be able to help out with the translation for your language, please checkout the factorio project. As always, let us know what you think on our forums


    [ 2016-07-15 15:27:48 CET ] [ Original post ]

    Version 0.13.8

    • Bugfixes
      • Fixed craftable unit entities desyncing when held over belts. (https://forums.factorio.com/28730)
      • Fixed character inventory size was limited at 255 instead of the correct 65536. (https://forums.factorio.com/28717)
      • Fixed mouse wheel left/right bindings not working. Changed default blueprint book switching shortcut on OS X to Command + Mouse Wheel up/down
      • Fixed aliens getting stuck sometimes. (https://forums.factorio.com/28653)
      • Fixed inserters not putting fuel in modded burner assemblers in some situations (https://forums.factorio.com/28196)
      • Fixed headless server would crash when loading save containing sprite-button. (https://forums.factorio.com/28736)
      • Fixed maps loaded from versions < 0.13.7 not generating any more chunks (https://forums.factorio.com/28760)
      • Fixed First Steps campaign character death error. (https://forums.factorio.com/27926)
    • Scripting
      • Reverted changes related to 0.13.7 fix for (https://forums.factorio.com/28564). If entity specified in sprite path doesn't have an icon, button will be created anyway, but no sprite will be drawn inside of it.
      • Added LuaGui::is_valid_sprite_path() function
      • Fixed that if a land mine got blown up and replaced by a robot, it wouldn't arm itself. (https://forums.factorio.com/28761)
      • Added LuaPlayer::admin read - if the player is an admin.
    Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.


    [ 2016-07-11 19:22:33 CET ] [ Original post ]

    Version 0.13.7

    • Minor Features
      • Holding the "drop item" key will keep dropping items.
      • Rocks can be mined while holding blueprints. Graphics;
      • Updated the stack inserter technology icon.
    • Balancing
      • Medium and large worms spawn further from the starting area.
    • Bugfixes
      • Connect game dialog remembers DNS the address as written rather than only IP more
      • Science packs and ammo are now recorded in the items consumed portion of production stats.
      • Fixed the mysterious crash when building rails. more
      • Unified the mass production 3 achievement to 20 M (it was 10M in game and 100M on steam). more
      • Fixed rendering layer of gate wall. more
      • Fixed fullscreen toggle in graphics options. more
      • Fixed mining drills using slightly too much energy per item mined.
      • Fixed that rail signals connectable to two rails at the same time were marked as buildable even when the buildability was valid only for one of the rails. more
      • Fixed burner inserters sometimes getting stuck. more
      • Fixed inserters with stack bonus waiting for stacks indefinitely when there's nothing to take from. more
      • Fixed blueprint previews with tiles and rails vs tiles with no rails. more
      • Fixed crash that could sometimes happen when a biter couldn't reach a target for a long time. more
      • Fixed on_player_placed_equipment was not called when quick transferring equipment into armor. more
      • Fixed map generator problems very far from the start.
      • Map size is now limited to 2000 km by 2000 km with a black bar rather than crashing when reaching this distance
      • Fixed clean-cursor with armor not putting it into filtered slots in your quickbar. more
      • Fixed that expansion chunk candidates values weren't updated properly. more
      • Fixed landfills could be included in blueprints. more
      • Fixed multiple instances of walls blocking movement when they shouldn't. more
      • Fixed that the solaris achievement unobtainable.
      • Fixed flamethrower turret would cause blueprint preview move up and down.
      • Fixed crash when the currently-playing folder can't be deleted when exiting game. more
      • Fixed crash when connection to the mod portal fails more
      • Fixed Update Mods button being sometimes disabled more
      • Fixed that LuaGameScript::write_file treated data as null-terminated byte string. more
      • Fixed entities marked with "not-repairable" still being repairable manually. more
      • Attempt to fix "Access is denied" error message during autosaves. more
      • Fixed desync caused by transport belt connected to circuit network reading in pulse mode.
      • Fixed save corruption when driving vehicles on transport belts in some instances. more
      • Fixed copy-paste not waking up inserters when copying filters between different inerter types. more
      • Fixed error when biters tried to expand while evolution factor was 0. more
      • Fixed building paths not refilling the cursor in some instances. more
      • Fixed unlocked achievements blinking too quickly. more
      • Fixed crash when setting the force of a logistic container in ghost form. more
    • Scripting
      • Fixed label size issues when using different font sizes or resizing the game window. more
      • Fixed crash when trying to create sprite-button with valid SpritePath to sprite that doesn't exist. (https://forums.factorio.com/28564) LuaGuiElement::add won't create sprite-button and returns nil if invalid SpritePath is passed.
      • Added an option to LuaSurface::set_tiles() to disable the correction logic for total control of what the tiles end up as.
      • Added item-group, fluid, tile, virtual-signal and achievement icons to be accessible by the SpritePath used in the sprite-button element. Added SpriteButton to the scripting documentation.
      • Added "grid" to the on_player_placed_equipment event.
      • Added LuaRecipe::localised_name read.
      • Added LuaGuiElement type "scroll-pane".
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-11 10:24:56 CET ] [ Original post ]

    Friday facts #146 - The GFX workflow

    Hello again Factorians! The GFX department is back today for covering the process of making graphics for Factorio. I'll get a bit technical, but not too much in order to don't be absolutely boring. Next comes a resumed description of the actual process, so if you are a Factorio modder this might be interesting for you.

    The start of a new entity


    The Game designer (kovarex) realizes that Factorio will be better with the addition of a new entity, he speaks with the team about it, most of the time he makes a prototype with a placeholder graphic, he improves the behaviour of the new entity by observing it and playing with it. Once the entity is solid we have a meeting together. We speak about guidelines and I make my contributions concerning visual requirements, colours, animations, different layers, mood, etc. Right now I'm in the middle of this process with the new pumps. See the starting of the sketching for a new entity:

    3D modeling with Blender


    Once the concept and the technical requirements are clear we jump into Blender for modeling. Blender is a great software which allows us to have a very flexible workflow, taking care of all our needs for the Factorio engine. Most of the time, a single entity in Factorio is pretty complex, rendered in multiple layers, and assembled again in the engine in order to work as we want. So for this we'll require multiple layers and outputs in Blender. It is very common also that once the renders are finished and all the process is done, the entity is integrated into the game and some changes are necessary, so it's very convenient to have the blend file ready to changes with the minimum effort. In order to be able to re-render by clicking just one button, we need to use RenderLayers, and/or separate scenes, possibly with addition of linking Group instances.
    Scenes are always split to MODEL scene(s), and RENDER scene(s). The RENDER scene then links to all necessary scene RenderLayers via compositor nodes. It is necessary to split the scenes as compositor nodes are activated even when pressing F12, which would overwrite the render outputs accidentally, etc. Another option is batch rendering through a .bat command, but since that doesn't support RenderLayers, it is not viable for us yet.

    Photoshop post-production


    Almost every one of our sprites have went through Photoshop at some point, we paint hand-drawn masks to enforce contrast, make edges clearer, define shape of entities better and so on. In Photoshop, the general approach is that we take the rendered image (preferably by Place Linked function), duplicate it twice, set the duplicates to Multiply and/or Screen blend modes and give them empty(black) masks. Always is better to have the best render results directly from Blender, but reality is that many times we need a second round of tweaks. Here an example of the importance of post-production:

    After effects processing


    But because projects often get very large, with many output sprites, we need to automate the rendering process, for which we use After Effects. We can combine both the hand-drawn post-production in Photoshop with After Effects by importing the PSD files and/or separate layers from it. The biggest hurdle in adopting Ae workflow tends to be getting used to the layering system when putting compositions in other compositions. A good comparison is using Groups in Photoshop. In After Effects this is called pre-composing. Often you need to pre-compose / create multiple levels of compositions in order to reach desired results. Such a thing is likely to happen when: You want to treat something like 1 unit - when moving, rotating, scaling, ... You want to render some things separately. You want to apply an effect to just some layers below, but not all. You want to apply additive blending to some layer which should affect something else than just the entity (like fire on flamethrower turret). You want to use multiple layers as a matte. You want to render various time regions from the same composition (if you have multiple different outputs in one time sequence like cargo wagon, or when rendering shiftings).

    Python, the final step


    As the last step of our process, we use a python script spritesheeter.py made by the Factorio coders to create spritesheets ready to the engine with relevant pieces of lua code in text files, alongside with gif previews.
    Now we have everything ready to put the new entity into the game and see how it goes, but as I said before it is very probable that something is not exactly as we want and we have to come back to Blender in order to tweak it again. That's the reason of having a flexible system. I need to say that this entire system is new for us, and now, since we are more artists in the department we had to standardize it. Also big thanks to Vaclav for his hard work on documenting the entire process, and also for his contribution to the system with his knowledge of After Effects which demonstrates that can make the workflow very effective once is setted up. I still working on this part :) As usual comments and thoughts in the forums


    [ 2016-07-08 19:51:43 CET ] [ Original post ]

    Version 0.13.6

    • Changes
      • Stack inserters are unlocked by their own research that is dependent on advanced electronics and logistics 2. This also solves that stack inserters were available but not buildable in the campaign.
      • Deconstructing and cancel deconstruction can be toggled between by using the modifer key. more
    • Bugfixes
      • Fixed desync when inserters would insert things directly onto splitters. more
      • Fixed that manipulating the fuel inventory of locomotives didn't count towards the inactivity condition. more
      • A train with a circuit condition will now always stay at the station if no wire is connected. more
      • Fixed that steamrolled achievement was obtainable by just killing the spawner, not only by killing it by impact. more
      • Fixed the player getting stuck in some instances when using landfills. more
      • Fixed crash when train stop that is in train schedule of some train was opened in the map editor. more
      • Fixed crash when the player would equip power armor they currently had open while in the same tick a robot delivered items to the player which would end up in the new slots added by the power armor. more
      • Fixed crash when mining tiles you're standing on that results in you being killed.
      • Fixed load game GUI size issues when trying to load invalid save files. more
      • Fixed fuel and water from pumps not being counted in the production stats consumed/produced items. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-06 18:54:59 CET ] [ Original post ]

    Version 0.13.5

    • Minor Features
      • Blueprints with labels will now show the label when holding them to-be-built.
      • Once mining is started over non-resources, resources are ignored until the mine button is released. more
    • Changes
      • Attempting to mutate the 'global' table of a mod in the 'on_load' event handler will result in an error. The 'on_load' event handler is *only* meant for re-registering conditional event handlers and setting up meta-tables. Use 'on_configuration_changed', 'on_init', and migration scripts in all other instances.
      • When connecting circuit wires, the wire will re-anchor to the last entity clicked. more
      • Increased collision box of stone walls slightly, to prevent the player getting stuck. more
    • Bugfixes
      • Fixed the add-trains list treating stations with the same spelling but different case as the same station. more
      • Fixed circuit network signals not properly migrating when removing mods. more
      • Fixed incorrect pollution rendering. more
      • When showing the count of entities in the network, it is now showing all entities connected in the network including sub-networks connected to power switches.
      • crash when getting killed by a locomotive you currently had the GUI open for (for real this time). more
      • When splitting electric networks because switch was turned off, the network with more entities is considered the "master one" which keeps the statistics.
      • Fixed entity power bars in the electric network statistics gui being sometimes scaled and colored improperly.
      • Fixed the electric network statistics merging when networks are connected by turning power switch on.
      • Fixed that the last train inserter didn't grab from the cargo wagon sometimes. more
      • Fixed crashes related to bad circuit network state caused by old mods. more
      • Fixed that biters couldn't find a path through a thick wall of trains. more
      • Fixed that some of the achievements didn't get reported to steam. All the achievements data are reset when migrated to this version, those reported on steam will get reloaded.
      • Fixed crafting machines using slightly too much energy per recipe crafted. more
      • Fixed that the drop item doesn't consume the key event when there is nothing in cursor, so it works properly when the same control is used for something else.
      • Fixed crashes related to bad circuit network state caused by old mods. more
      • Fixed that enemies would start attacking rails and other nearby structures after the player passed by in a train. more
      • Fixed chests in circuit network showing double their contents after fast replace. more
      • Fixed that changing rails while trains where waiting on circuit conditions would cause the train to leave the station. more
      • Fixed crash when 2 or more people would manipulate train schedules at the same time. more
      • Fixed on_marked_for_deconstruction with tiles not including the player that marked the tile for deconstruction. more
      • Fixed tile rendering off by half a tile in blueprint previews. more
      • Fixed non ASCII characters didn't work in train stop names. more
      • Fixed of the rail signal/train stop visualization planner in specific cases. more
      • Fixed crash when opening train stops in the map editor. more
      • Fixed missaligned blueprint entities when editing blueprints and removing rails/roboports. more
    • Optimizations
      • Improved performance when there are a large (4000+) amount of alerts going off at the same time. more
      • Power switch will not show electric sparks in some situations. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-05 21:27:47 CET ] [ Original post ]

    Version 0.13.5

    • Minor Features
      • Blueprints with labels will now show the label when holding them to-be-built.
      • Once mining is started over non-resources, resources are ignored until the mine button is released. more
    • Changes
      • Attempting to mutate the 'global' table of a mod in the 'on_load' event handler will result in an error. The 'on_load' event handler is *only* meant for re-registering conditional event handlers and setting up meta-tables. Use 'on_configuration_changed', 'on_init', and migration scripts in all other instances.
      • When connecting circuit wires, the wire will re-anchor to the last entity clicked. more
      • Increased collision box of stone walls slightly, to prevent the player getting stuck. more
    • Bugfixes
      • Fixed the add-trains list treating stations with the same spelling but different case as the same station. more
      • Fixed circuit network signals not properly migrating when removing mods. more
      • Fixed incorrect pollution rendering. more
      • When showing the count of entities in the network, it is now showing all entities connected in the network including sub-networks connected to power switches.
      • crash when getting killed by a locomotive you currently had the GUI open for (for real this time). more
      • When splitting electric networks because switch was turned off, the network with more entities is considered the "master one" which keeps the statistics.
      • Fixed entity power bars in the electric network statistics gui being sometimes scaled and colored improperly.
      • Fixed the electric network statistics merging when networks are connected by turning power switch on.
      • Fixed that the last train inserter didn't grab from the cargo wagon sometimes. more
      • Fixed crashes related to bad circuit network state caused by old mods. more
      • Fixed that biters couldn't find a path through a thick wall of trains. more
      • Fixed that some of the achievements didn't get reported to steam. All the achievements data are reset when migrated to this version, those reported on steam will get reloaded.
      • Fixed crafting machines using slightly too much energy per recipe crafted. more
      • Fixed that the drop item doesn't consume the key event when there is nothing in cursor, so it works properly when the same control is used for something else.
      • Fixed crashes related to bad circuit network state caused by old mods. more
      • Fixed that enemies would start attacking rails and other nearby structures after the player passed by in a train. more
      • Fixed chests in circuit network showing double their contents after fast replace. more
      • Fixed that changing rails while trains where waiting on circuit conditions would cause the train to leave the station. more
      • Fixed crash when 2 or more people would manipulate train schedules at the same time. more
      • Fixed on_marked_for_deconstruction with tiles not including the player that marked the tile for deconstruction. more
      • Fixed tile rendering off by half a tile in blueprint previews. more
      • Fixed non ASCII characters didn't work in train stop names. more
      • Fixed of the rail signal/train stop visualization planner in specific cases. more
      • Fixed crash when opening train stops in the map editor. more
      • Fixed missaligned blueprint entities when editing blueprints and removing rails/roboports. more
    • Optimizations
      • Improved performance when there are a large (4000+) amount of alerts going off at the same time. more
      • Power switch will not show electric sparks in some situations. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-05 21:27:30 CET ] [ Original post ]

    Version 0.13.4

    • Changes
      • For performance reasons: latency state blueprint building is automatically disabled if building blueprints with a combined total of more than 300 entities + tiles.
      • Player names are now shown in the description pane instead of just "player". more
    • Bugfixes
      • Fixed the "No such node (application_version)" error when starting a headless server
      • Fixed modules could get into assembling machines that didn't allow them for the current recipe. more
      • Fixed desync when holding most rotatable items for building in the latency state. more
      • Fixed build-by-moving logic for underground belts and underground pipes. more
      • Fixed construction robots grabbing items from the player cursor and trying to use them as repair packs. more
      • Fixed killed entities not keeping modules to-be-delivered in some cases. more
      • Fixed headless server being counted as a player for the player limit. more
      • Fixed crash when belts would die due in some instances. more
      • Fixed Lua GUI events getting fired before the actual GUI element was modified. more
      • Fixed crash when getting killed by a locomotive you currently had the GUI open for. more
      • Fixed fluid temperature restricted recipes didn't work when fluid flowed in from the left side of the machine.
      • Fixed server crashing when starting a LAN game with no internet connection. more
      • Fixed crash when modded walls didn't have a definition for connected gate visualization.
      • Fixed energy bar on battery equipment. more
      • Fixed bonus GUI size issues with lots of entities using the bonuses. more
      • Fixed mod hotkeys not working when you'd have more than 1. more
    • Scripting
      • LuaEntity::built_by can be used with ghosts if the inner ghost supports built_by. more
      • LuaEntity::recipe can be read off furnaces as well as assembling machines.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-03 15:13:35 CET ] [ Original post ]

    Version 0.13.3

    • Changes
      • Slightly reduced big electric pole collision box to allow squeezing between big pole and accumulator.
      • Increased the distance between items on the belt from 0.28 to 0.28125. This way the the circuit network pulse for items will be every 9/4.5/3 ticks for normal/fast/express compressed belts. more
    • Gui
      • Only games with the same application version are displayed in Browse Games screen.
      • Removed tabs from Browse Games and Browse Mods screens and tweaked column widths.
    • Bugfixes
      • Fixed mods directory not being created when installing mods more
      • Fixed lab bonus speed not showing correctly in the bonus GUI sometimes. more
      • Fixed crash related to killed flamethrower turrets in ghost mode. more
      • Fixed that the game crashed in the user login dialog when the steam connection was not available.
      • Yet another research window resizing fix.
      • Fixed desync related to building-while-moving underground belts and pipe-to-ground.
      • Fixed Steel chest recipe in New hope mission 02. more
      • Fixed projectiles with negative accelerations 'hitting' at the incorrect position.
      • Fixed bug related to building/removing poles connected to network with power switch. more
      • Fixed that some items seemed to be repairable in multiplayer. more
      • Fixed that modules could get lost when upgrading them. more
      • Fixed timezone issues with the browse mods gui.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-07-01 19:36:35 CET ] [ Original post ]

    Friday facts #145 - 0.13 experimental is out

    Hello!

    0.13 is here!


    If you don't want to read the changelog, you can either take look at our update summary page or check out the video that summarizes it as well: https://www.youtube.com/embed/JCYfO6UPhes We released version 0.12.0 on 17. 07. 2015 so it took us almost a year. We made a lot of changes in that time.The commit count increased from 15967 to 22980, which is more than 40% increase. This means, that we also created a lot of new bugs. We are working as hard as we can to fix the bugs and we'll have 0.13.3 today, which means we've made 4 releases in 5 days just to make sure we'll fix as many bugs for the weekend as we can.

    Please be benevolent


    This is an early experimental release, so there are a lot of issues we are aware of, and we will do what we can in the future weeks to solve them, if you want to avoid bugs, wait for few weeks until the 0.13 is semi-stable, the stable stable version might take a long time, so we can't really give any estimate. There have been many complains regarding the terrain generation, we didn't encounter these problems in our games, but we should probably go back to it and tweak it a little. We are also aware, that the mod portal (both the site and the in-game access) is very simplistic, we just wanted to have it, so the new 0.13 mods are there, so we could move them away from the forum eventually. We will improve the portal continuously (more in the fff 141).

    Multiplayer problems


    Now, when we can connect to public games on the internet, we found out, there are lot of issues with the multiplayer server that weren't apparent when we were lan-testing it. One of the issues is, that even when we use the one center player (the server) to resend the packages of individual players, the server still sends one packet per player to everyone. This means, that with 10 players, the server sends 10 packets to every player every tick, which results in 6000 packets per second to be processed by every player. The obvious solution will be, that the server will merge the messages from individual players into one package. We also plan to reduce the network transfer by sending only 30 updates per second (once per two ticks) over the multiplayer. This will reduce the network problems related to packet throughput a lot. Apart from this, we found out, there are few bugs in the internal multiplayer state logic. We will look at these problems once the main bug report wave is tamed, so consider the current multiplayer very experimental.

    0.14 plans are not set yet


    As 0.13 is freshly out and we were already asked about 0.14 plans. We have a lot of things we would like to do in 0.14 but nothing is official yet. In about a month from now, we will sit down and make a specific plan for 0.14, so don't ask us about it until we declare it please :)

    The good deals that are not so good.


    One of the problems we had in the past months were the credit card frauds, so let me explain how exactly it works.
    • Someone obtains credit card numbers somehow.
    • He buys Factorio keys (among other things) with these cards on our site
    • Then these keys are transferred somehow to these "good deal" sites where they can be bought for cheaper price.
    • Eventually, the card owner finds out and cancels all the transactions, we get a notice about every faulty transaction
    • Not only we don't get the money paid, but we have to pay extra $20 fee per every transaction that was cancelled.
    • As reaction to this, we have to deactivate all keys bought this way, which results in steam key deactivations as well.
    • So in the end, we are 20$ short and we lost time dealing with it and the buyer doesn't have the game he paid for.
    Although it is a giant inconvenience for all parties involved, it is not currently a large financial burden for us, I don't want to guild trip anyone, just to get the message out. The conclusion is, that we strongly advice to buy Factorio, or any other game just from reliable sources. In our case, it is factorio.com, steam, gog, and humble store currently. Pirating the game hurts us less than using these sites.

    Community spotlight


    I have to share the fantastic video with rube goldberg machine done in Factorio. https://www.youtube.com/embed/4mGdL4XKXew We would also like to thank the brunzenstein. He sent us the most luxurious cake I have ever seen, which gave us some extra energy to dig deep into the bugfixing:
    As always, let us know what you think on our forums


    [ 2016-07-01 18:15:36 CET ] [ Original post ]

    Version 0.13.2

    • Changes
      • Damage bonus in turret tooltip will now show both basic turret damage multiplier and turret damage bonus from research. more
      • Limited multiplayer game name length to 60 characters.
      • Moved the copper wire back to the intermidiate category in the recipes.
      • Inserters connected to the circuit network now have the option to only read hand contents.
      • During biter migration, medium worms can now only spawn if the evolution factor is greater than 0.3, and big worms require evolution factor of 0.5.
    • Bugfixes
      • Fixed occasional crash when downloading map. more
      • Fixed rail signals set to red by circuit network going green in some situations. more
      • Fixed rail signals not going back to green when when deselectiog "Close Signal" option.
      • Fixed that running a command via stdin or RCON would crash the game if commands were allowed for admins-only. more
      • Localized hardcoded strings in power switch GUI. more
      • Fixed enemy turrets would show player's damage bonuses in tooltip.
      • Fixed repair packs (and mergable items in general) under flowing and making millions of items. more
      • Added missing Lua defines for the rocket silo rocket inventory.
      • Fixed train minimap preview schedule box not allowing scrolling. more
      • Fixed game restarting after installing only one mod.
      • Fixed game crashing when viewing info about a mod with space in its name (hopefully) more
      • Fixed checking for mod updates taking very long.
      • Fixed low framerate when pasting long text into console.
      • Fixed filter inserter sometimes taking an extra item after the filter was unset. more
      • Fixed inserter arrows in blueprints. more
      • Fixed that it wasn't possible to require verification of user identity in server-settings.json.
      • Fixed migration of internal circuit network signals. more
      • Fixed some oddities when using the rail planner and quickbar-selecting other items.
      • Fixed desync when building rail signals in close rail setups. more
      • Fixed crash when reviving ghosts built by blueprints in the entity built Lua event handler. more
      • Fixed LuaEntityPrototype::result_units spawn points only ever giving the last spawn point. more
      • Fixed stack filter inserter sometimes showing more than one filter in alt mode.
      • Research button position fix.
      • Changed the technology prerequisite of solar panel from advanced-electronics to electronics. This also fixes the 2nd mission of the new hope campaign.
      • Fixed that the headless server wouldn't be able to save the map if started like --start-server save.zip. more
      • Fixed unminable rails when migrating saves to 0.13. more
      • Fixed that the gate didn't open when it was on the same rail as the locomotive front joint. more
      • Fixed that game name and description in the game browser didn't wrap.
      • Fixed game did not run on Windows XP. more
      • Fixed the ElectricEnergyInterface entity not drawing low power/no power icons.
      • Fixed requester chest filters getting cleared when changing the force of the chest. more
      • Fixed rocks not being ignored when rail planner ghost building. more
      • Fixed that when a transport belt got destroyed and turned into a ghost, it wouldn't drop items on ground. more
      • Fixed occasional random browse game gui crash when moving close to the end of the list.
      • Fixed script error in supply challenge. more
      • Fixed that rail signal visualization helper was not working properly in some specific cases. more
      • Fixed construction robots getting stuck when they return for repair pack to passive/active provider chest. more
    • Optimisations
      • Optimised rendering of huge pollution clouds on map.
    • Scripting
      • Added LuaEntityPrototype::spawn_cooldown - the spawn cooldown for enemy spawners.
      • Added LuaEntity::power_production and power_usage read/write for the ElectricEnergyInterface type entity.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-06-30 23:25:50 CET ] [ Original post ]

    Version 0.13.1

    • Changes
      • Added /demote to demote players from admins
    • Bugfixes
      • Fixed crash when shift right clicking furnace fuel slots. more
      • Fixed not being able to rename train stops. more
      • Fixed stack filter inserters taking too many filters when building them by fast replace. more
      • Fixed automatic insertion of satellites into rocket silos.
      • Fixed flamethrower not unlocking on loading old saves in 0.13.
      • Fixed map corruption and possible crashes when damaged stone rocks migrated from 0.12 saves got destroyed in 0.13. more
      • Fixed that saving a map could crash under some circumstances. more
      • Fixed that locomotives were not moving enough in reverse.
      • Fixed that --create didn't work with just a filename. more
      • Fixed that disabled and invalid mods were still marking the game as modded for the achievements.
      • Fixed headless server crashed when launched with closed stdin. more
      • Fixed that stack transfering (shift clicking) armor off your player could end up deleting the armor if you lost inventory space. more
      • Fixed the watch your step achievement.
      • Fixed downloading mods crashed the game more
      • Fixed that starting with modded game still activated achievements from steam. more
      • Fixed the kick message. more
      • Fixed technology effects translation of worker robot storage and speed.
      • Fixed crash when the game tries to remove old version of mod that is unpacked directory instead of a zip package. more
      • Fixed that max player count was ignored when joining multiplayer game.
      • Fixed that attempting to connect with 0.12 client to a 0.13 server wouldn't display the proper error message for the client and would display "unknown message type received" for the server. more
      • Fixed too large capacity of internal pipe in flamethrower turret. more
      • Fixed inserters and belts connected to circuit network turning on for one tick when something is disconnected or fast replaced in from the network. more
      • Fixed that the technology description didn't wrap when it was too long, which also made the research button unreachable. more
      • Fixed that there were walls over water in the tight spot scenario. more
      • Fixed that can_build_entity command didn't check tile collisions.
      • Fixed that the Research Finished text could flash too fast sometimes. more
      • Fixed that failed attempt to determine public IP address crashes the headless server more
      • Fixed graphical issue with lights when light render quality was set to low. more
      • Fixed steel chests getting disabled when migrating 0.12 saves to 0.13 when the 0.12 save didn't have smart chests unlocked. more
      • Fixed crash when using LuaForce::entity_build_count_statistics. more
      • Possibly fixed hang when closing the Steam overlay on some Linux systems. more
    • Modding
      • Added mandatory reversing_power_modifier property into locomotive prototype definition.
      • Changed the logistic-robot-storage and logistic-robot-speed modifiers to worker-robot-storage and worker-robot-speed
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-06-29 10:52:05 CET ] [ Original post ]

    Version 0.13.0

    Here is a summary of the New features of 0.13


    • Major features
      • Improved Multiplayer game UX (see https://www.factorio.com/blog/post/fff-139 and https://www.factorio.com/blog/post/fff-116). Server games are published to the server and clients can browse existing games. Automatic discovery for the LAN games.
      • Mod Portal integration. Factorio can list and install mods from the mod portal. more
      • Achievements and Steam Achievements integration. (https://www.factorio.com/blog/post/fff-125) Modded games won't have the achievements recorded on steam.
      • Rail planner tool simplifies the rail building. (https://www.factorio.com/blog/post/fff-113)
      • Added fire. Fire will spread between trees and cause forest fires, causing a large amount of pollution to be released.
      • Power switch. It can be used to control the energy flow. Power switch can be connected to the circuit network. (https://www.factorio.com/blog/post/fff-115)
      • Added the Stack inserter - an expensive upgrade over fast inserters that can move several more items at a time.
      • Flamethrower turret. Fueled with fluid, shoots a stream of burning oil towards oncoming enemies.
      • Bonus gui (accessible from sidebar gui) showing bonuses the force has researched.
      • Train station window contains a list of all trains (each can be opened) that have that station on their schedule.
      • Single train gui now has an additional panel which shows the minimap/camera view of the given train.
      • Search field to the filter selection and recipes selection windows.
      • Trains gui. It displays all the trains as small minimaps with schedules, which can be searched.
      • Extension of the train wait conditions. (https://www.factorio.com/blog/post/fff-114)
      • New locomotive, cargo wagon and train stop graphics. Locomotives can be colored. The trains are a consistent size in horizontal and vertical orientations.
      • New technology tree gui. (https://www.factorio.com/blog/post/fff-128)
    • Minor Features
      • Blueprints can be now edited.
      • Added the Blueprint Book item - an item to manage blueprints. The book can be renamed and only holds blueprints.
      • Map generator algorithm changed, further resource field now have greater richness.
      • Added landfill, it can be used to replace water areas with grass.
      • Added yellow/black striped concrete tile that is rotatable.
      • Small sidebar gui containing buttons for main menu, production statistics, etc.
      • Armors have inventory size bonuses (10 for modular armor, 20 for power armor, 30 for power armor mk2).
      • Underground pipes and belts are placed at max connecting distance apart when built by dragging.
      • --scenario2map: Creates a save from a custom scenario, without initialising the graphics.
      • The lamp can change it's color based on circuit network signals.
      • Roboport is connectable to the circuit network. It sends the logistic network contents or the robot statistics of the network.
      • Accumulator is connectable to the circuit network. It sends it's charge level as a percentage.
      • Transport Belt is connectable to the circuit network. It can be turned on or off and it can send it's contents to the circuit network.
      • Rail Signal is connectable to the circuit network. It will send the signal's state and can block trains from passing.
      • Gate can be controlled through the circuit network by connecting to the wall next to it. It can be opened manually or send a signal if the player is nearby.
      • Requester chest's requested items can be set automatically from the circuit network.
      • Inserters can now send the item held in hand to the circuit network. Filter inserters can have their filters set automatically from the circuit network.
      • Most entities that can be turned on or off by the circuit network can also be turned on or off by directly using a logistic condition.
      • Circuit network and logistic network conditions can now be accessed by icons in the top-right corner of the entity's GUI, for all connectable entities.
      • Connected Red/Green wires are highlighted when hovering over a combinator or entity connected to the circuit network.
      • Wire disconnecting is incorporated in the latency hiding.
      • Crafting machine item/fluid total craft counts are recorded per force.
      • Intro sound in the loading screen.
      • Improvements to the statistics GUI (electric network/production info). Added the ability to filter out things. Added the ability to view "all" information recorded. Made the GUI scrollable.
      • Added /ban /kick /bans /admins and /admin commands.
      • Added /color command, so changing color doesn't require access to lua commands.
      • When running as a server, Factorio now accepts console commands on standard input.
      • When running as a server, Factorio can be told to listen for RCON connections. To use this, specify both the --rcon-port and --rcon-password parameters on the command line. The network protocol is specified here: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
      • New parameter to start the headless server: --start-server-load-latest. Instead of accepting a save name, it will automatically load the latest save in the saves folder.
      • The "disallow-commands" flag has been changed to "allow-commands" and accepts "true", "false", and "admins-only" for values.
      • It is stored and shown which player built each of the machines.
      • Added cluster grenades and grenade upgrades.
      • Added flamethrower and flamethrower turret damage upgrades.
      • When creating a new map using the --create command-line option, --map-gen-settings can be used to specify the map generation settings.
      • Log file reopening on SIGUSR1 and a commandline option to disable log rotation.
      • The default font looks better (improved hinting for the thinnest weight).
      • Labels and values in descriptions have different colors.
      • Item health bars are rendered green, yellow, red based off the % health remaining like entities.
      • Modules support in blueprints.
      • Equipment can be put in open equipment grids using standard inventory shortcuts (shift + click, ctrl + click).
    • Ease of use
      • Turret displays its range when you hover over it.
      • Rail signal/train stop placement indicator. (https://www.factorio.com/blog/post/fff-134)
      • Indicator of train vehicle positions in a station when building next to track where would the train stop.
      • It is possible to change the module in the slot to different one without having to clear it first.
      • It is possible to upgrade modules to more powerful variant in machine by fast entity transfer.
      • Clear cursor first cancels the current action (rail building, wire dragging, blueprint/deconstruction), and only removes the item from the cursor when pressed again.
      • Saving a game changes selected name and directory for next saves. more
      • Clicking different filtered slot in quickbar will try to clear the currently selected quickbar item if possible.
      • Cleaning item in cursor that is taken from quickbar slot will try to refill the slot from the inventory if possible.
      • Clicking on the warning icon will open the location on the map.
      • Pressing E/Escape will close the map mode.
      • It is possible to move the map by clicking and dragging.
      • Hovering mouse over inventory logistic request slots makes matching items in inventory be highlighted.
      • Fixed the zoom to cursor feature introduced in 0.8 that was non functional since 0.10.
      • Improved the rail selection logic in junctions.
      • Stone Rock can now be mined and deconstructed by robots. It gives some stone as resource.
      • Combinators input and output arrows in alt mode. Additional alt mode information can be turned on in the options menu.
      • The constant combinator has an on/off switch.
      • Several non-stackable items can be swapped directly with counterparts (power armor, deconstruction planner, selection tools).
      • Inventory filter slots can be copy-pasted from empty slots onto empty slots using the stack transfer/split controls (shift + left click, shift + right click by default).
    • Balancing
      • The productivity module pollution addition was lowered (30%->5%, 40%->7.5%, 50%->10%), as the pollution generated by the machine is already increased by the additional energy production and time, it doesn't need to be so high as the modules are quite expensive already.
      • Repair packs have double durability (100->200) and stack size (50->100).
      • Changed stack size of raw wood (50->100) so it doesn't fill the inventory so quickly.
      • Roboport have decreased transmition power consumption (200kw->50kw) while the robots (and their recharging) has increased power consumption (200kW per recharge slot to 1Mw per slot) Basically, covering area by roboports is cheaper, but using robots for transport is more expensive. To keep the personal roboport usefulness, energies used in personal roboport have been all multiplied by 10.
      • Inserters are able to squeeze things "slightly" better to belts. more resources.
      • Increased size of several green science and few blue science technologies.
      • Increased inventory size of cargo wagon. (30->40)
      • Oil yield drains to 10% two times slower.
      • Big and behemoth enemies spawn 50% slower.
      • Armor resistances are applied before the energy shield is used.
      • Increased the ghost time to live when something is destroyed from 5 + 5 minutes to 30 + 30 minutes.
      • Halved the mining time of rails, rail signals and walls.
      • Changed the way evolution factor approaches the maximum (1). The addition of evolution factor was changed from addition * (1 - evolution) to addition * (1 - evolution)^2 This means that the progress gets more slower towards the high values.
      • Balanced train acceleration and top speed, additional wagons no longer slow trains so strongly.
      • Changed the amount of items requested when copy-pasting assembling machines to requester chests for several recipes.
      • Express underground belts require lubricant to match the express belts and express splitters.
      • Increased battery equipment power storage, input, and output by a factor of 20.
    • Changes
      • Reduced number of connections drawn between roboports in blueprint and roboports on map.
      • More virtual signals for combinators.
      • Vitual signals can be used in blueprint icons.
      • Disabled loading of saves before 0.10.0 version (You can use 0.10.12 to load older saves and re-save them).
      • Removed multiplayer peer-to-peer mode.
      • Ghosts created by player no longer expire and can be placed before researching any technologies.
      • Ghosts are brighter and easier to see.
      • Alert of destroyed entity exists 2 times longer.
      • Quickbar filters are set and unset using the same key.
      • Loading a scenario without control.lua will automatically load the freeplay game mode scripts. This means new maps created in the map editor will get the freeplay game mode.
      • Loading a scenario in the map editor will preserve it's scripts. This means custom freeplay/sandbox maps can be created in-game.
      • Constant combinator can be rotated.
      • All types of inserters can be controlled by the circuit and logistic network, once the respective network is researched.
      • All types of chests can be connected to the circuit network. Smart Chest was removed from the game.
      • Decider combinator "input count" option makes the combinator copy the count of the specified output signal from the input signals, instead of copying the count from the condition. This might break some setups. https://forums.factorio.com/13706
      • Transport belt connectable entities will disconnect from incoming (and all other) belts when marked for deconstruction. The problem is solves is described in this bug report: https://forums.factorio.com/19038
      • Spaces are now allowed in file names when saving.
      • Changed the fluid color of heavy oil to match the icon color.
      • Alert beep sound is activated only when something is destroyed, not by something damaged.
      • Spitter attack distance is randomised slightly to make them look more organic.
      • Rocket fuel can now be used as fuel.
      • Saves given on command line (to options --start-server, --mp-load-game, --load-game, --create) are always absolute or relative paths. If the path is relative, it is relative to the current directory (where the binary is run from).
      • Main menu background image is scaled proportionally now. more
      • Renamed "research-effectivity" to "research-speed".
      • Removed light entity info background option.
      • Cleaned up freeplay and sandbox scenario scripts.
      • Exiting vehicles now puts you to the left of the vehicle with respect to the orientation of the vehicle.
    • Graphics
      • Health bars are partially visible when obstructed.
      • High resolution ingame indicators.
      • New fire graphics for Stone Furnace, Steel Furnace and Boiler.
      • New icons for rocket fuel, low density structure, rocket control unit, satellite, car and tank.
      • Entities show a circuit connector when connected to the circuit or logistics network.
      • Added compression for some sprites to save video memory. This can be enabled in Graphics options.
      • Added linear filtering for GUI icons. This can be disabled in Graphics options.
      • New combinator graphics.
    • Optimisations
      • Optimised gui render.
      • Minimap is rendered in 16bit colors to reduce memory usage.
      • Less memory usage for entities that are connectable to the circuit network.
      • Faster map unload on Quit to Main Menu or closing the game.
      • Optimised pollution rendering on map and minimap.
      • Optimised roboport radius rendering.
      • Optimised biter pathfinding. (https://www.factorio.com/blog/post/fff-117 https://www.factorio.com/blog/post/fff-121)
      • Optimised save file times by doing compression in parallel.
    • Bugfixes
      • Fixed recipe ordering when recipes had the same group and group order string.
      • Limited number of explosion sounds for grenade, explosive cannon shells, explosive rockets.
      • Underground belts won't connect if underground belt ghost is in the way. more
      • File saving is done in a safer, more atomic way. This should help prevent some cases where a safe file or the config file can go missing.
      • Building sound is played also for other players in multiplayer.
      • Red/green wires change electric pole orientation the same way normal connections do. more
      • Fixed the rotation of train vehicles to be built.
      • Fixed clearing the player cursor stack and then inserting into the player quickbar in the same tick not preferring filtered slots. more
      • Fixed unrecognizable item icons when playing on very low graphics settings. more
      • Fixed that ghost building on power poles disconnects them, as it is the same shortcut. more
      • Fixed multiple construction bots could be sent out to mine single tree. more
      • Fixed that LuaGameScript::take_screenshot could take negative values of zoom or resolution. more
      • Fixed robots would carry items from active provider chests to storage chests even when requester chest needed those items. more
      • Fixed setting the cursor stack from script when having a selection from a filtered slot allowing the wrong item in the slot. more
      • Items inserted into assemblers now update tooltips. more
      • Map editor save GUI now always fits on the screen.
      • Will explicitly show system mouse cursor when exiting Steam Overlay, just in case Steam forgets to do it. more
      • Fixed that commands would still be disabled in single-player after loading a map created in MP with commands disabled. more
      • Fixed that a biter could get stuck trying to attack a building in some cases. more
      • Fixed unclear error message when attempting to run multiple instances of Factorio with same write-path. more
      • Fixed the space key animating buttons. more
      • Fixed fluid getting into the wrong inputs on assembling machines. more
      • Long tooltip descriptions (below the minimap) won't stretch the whole right column.
      • Fixed being able to copy settings onto and rotate entities marked as non-operable. more
      • Fixed that player names wouldn't show up on the chart when UI scale was set to 100% or less. more
      • Fixed that the same error message could appear twice in multiplayer. more
      • Fixed equipment tooltips in equipment grids not showing when putting new equipment into the grid.
      • Command key can be now used as a modifier in controls on Mac OSXmore
      • Fixed that a peer could kick every other peer from an MP game. more
      • Fixed train air resistance calculation.
      • Fixed wire drawing in the right-pane description for electric poles. more
      • Fixed freeplay and sandbox scenario initial rocket count. more
      • Fixed sandbox scenario wouldn't recognize rocket launches.
      • Fixed modifying item stacks directly in the player wouldn't trigger an inventory sort in some instances.
      • Fixed crash when modded locomotive uses other than burner energy source. more
    • Modding
      • Mods need to have factorio_version value in their info which specifies major Factorio version they are suited for, default value is 0.12. Mods with non fitting version are not loaded.
      • Added item_pickup_distance and loot_pickup_distance to player definition.
      • Added invalid parameter error for data.extend function.
      • Added the ability to define additional_pastable_entities for an entity which allows copy-paste between that entity type and the defined destination types. Useful in conjunction with the new copy-paste events.
      • Added a new item type "selection-tool" that fires the events on_player_selected_area and on_player_alt_selected_area.
      • Unified prototype names to be consistant with ingame names. (basic-transport-belt->transport-belt, *transport-belt-to-ground->*underground-belt, basic-splitter->splitter, basic-inserter->inserter, basic-mining-drill->electric-mining-drill, basic_beacon->beacon, basic-bullet-magazine->firearm-magazine, piercing-bullet-magazine->piercing-rounds-magazine, basic-grenade->grenade, basic-armor->light-armor, basic-modular-armor->modular-armor, basic-laser-defense-equipment->personal-laser-defense-equipment, basic-exoskeleton-equipment->exoskeleton-equipment)
      • Construction robots will now use any available repair tool items instead of a fixed single item defined in the prototype for the robot.
      • Various indicator and game icons are defined in the utility-sprites objects, so it is now moddable.
      • Added new research options: character-crafting-speed, character-mining-speed, character-running-speed, character-build-distance, character-item-drop-distance, character-reach-distance, character-resource-reach-distance, character-item-pickup-distance, character-loot-pickup-distance, character-inventory-slots-bonus, deconstruction-time-to-live, character-health-bonus
      • Sticker entity can deal damage.
      • Added a new entity type "electric-energy-interface" that can consume, produce, and accept energy while also allowing all of its electric network parameters to be configured runtime.
      • Added flags to energy_source prototypes "render_no_network_icon" and "render_no_power_icon" to prevent rendering those icons when set.
      • Removed "inventory_order" prototype property as it wasn't actually used and isn't needed.
      • Removed "radius_visualisation_picture" and "construction_radius_visualisation_picture" from roboport and roboport-equipment prototypes. The pictures were moved to core. If needed you can use "draw_logistic_radius_visualization" and "draw_construction_radius_visualization" boolean properties to disable drawing radius in your prototype.
    • Scripting
      • Moved LuaGame::daytime/wind/wind_orientation/wind_orientation_change/peaceful_mode to LuaSurface.
      • Added LuaEntity::held_stack_position. It tells you the world position of the inserter arm.
      • Added LuaGame::delete_surface. Deletes the surface passed in if the surface is deletable.
      • Added LuaItemStack::create_blueprint() - sets up a blueprint as if a player did it.
      • Added LuaItemStack::build_blueprint() - builds a blueprint as if the player built it in the world.
      • Added LuaSurface::deconstruct_area() - deconstructs an area as if the player did it.
      • Added LuaSurface::cancel_deconstruct_area() - cancels deconstruction over an area as if the player did it.
      • Added on_pre_entity_settings_pasted and on_entity_settings_pasted events that pass the source and destination entities involved.
      • Added "robot" to the robot related events.
      • Added "chunk_position" to the on_sector_scanned event.
      • Added optional "player_index" to on_marked_for_deconstruction/on_canceled_deconstruction when fired due to player actions. This field is nil when fired from from script/non player action.
      • Added LuaEntity::crafting_progress/bonus_progress write.
      • Added LuaForce:: item/fluid/resource/build counterparts to kill_counts.
      • Added LuaFlowStatistics - used to read/write statistics data related to a given force (production, kills, etc).
      • Removed LuaForce:: set_kill_count/get_kill_count/kill_counts - these are now readable through LuaFlowStatistics.
      • Added LuaGame::disable_replay() - disables the replay for the current save game.
      • Added several player related events: on_player_cursor_stack_changed, on_player_main_inventory_changed, on_player_quickbar_inventory_changed, on_player_tool_inventory_changed, on_player_armor_inventory_changed, on_player_ammo_inventory_changed, on_player_gun_inventory_changed, on_player_placed_equipment, on_player_removed_equipment, on_pre_player_died, on_player_died, on_player_respawned, on_player_joined_game, on_player_left_game
      • Added events for tile building: on_player_built_tile, on_player_mined_tile, on_robot_built_tile, on_robot_mined_tile
      • Added LuaEntity::damage_dealt/kills read/write - usable with turrets.
      • Added LuaGameScript::active_mods - a table of active mod names to mod versions.
      • Added LuaEquipmentGrid::get - gets the equipment at the given equipment grid position or nil if none.
      • Added LuaEntity::player, returns the player connected to the character entity.
      • Added LuaInventory::get_filter, set_filter, has_filters, can_set_filter methods to set/get/clear filters on inventories that support them.
      • Changed LuaEntity::get_filter/set_filter parameters around to match the inventory versions. They also now only work on inserter filters.
      • Added LuaPlayer::get_craftable_count/begin_crafting/cancel_crafting/crafting_queue to read/write crafting information for a player.
      • Added modifiers to the character entity that stack with the force research bonuses but are unique to the character: character_crafting_speed_modifier, character_mining_speed_modifier, character_running_speed_modifier, character_build_distance_bonus, character_item_drop_distance_bonus, character_reach_distance_bonus, character_resource_reach_distance_bonus, character_item_pickup_distance_bonus, character_loot_pickup_distance_bonus, quickbar_count_bonus, character_inventory_slots_bonus, character_logistic_slot_count_bonus, character_trash_slot_count_bonus, character_maximum_following_robot_count_bonus, character_health_bonus
      • Added LuaTilePrototype accessible from LuaTile::prototype and LuaGameScript::tile_prototypes.
      • Added LuaEquipmentPrototype accessible from LuaEquipment::prototype and LuaGameScript::equipment_prototypes.
      • Added LuaGuiElement::tooltip read/write - a localised tooltip for any GUI element.
      • Added LuaCircuitNetwork readable off entities with circuit network connections and through control behaviours.
      • Changed StickerPrototype::magnitude to StickerPrototype::target_movement_modifier. Speed of a Unit is not multiplied by value of target_movement_modifier.
      • Added optional "limit" field to find_entities_filtered and count_entities_filtered to limit the results.
      • Added "force" to the entity_died event when the killing force is known - nil otherwise.
      • Added LuaEntity::unit_number - read - a unique ID field used by all entities having owners.
      • Added LuaInventory::index - the inventory index the inventory reference uses.
      • Added LuaEntity::supports_backer_name() - true when an entity supports a backer name.
      • Added LuaEntityPrototype::belt_speed and underground_belt_distance read.
      • Added LuaEntityPrototype::result_units the result units a biter spawner can spawn.
      • Added LuaItemPrototype::ammo_type read.
      • Multiple stickers (i.e. slowdown capsule + fire) can be applied to a unit entity.
      • Added LuaEntity::get_quickbar() - gets the quickbar of the character or player.
      • Changed LuaEntity::color to work for locomotives, cargo wagons, and characters - it will return nil if used on other entities.
      • Added LuaEntity::mining_progress/bonus_mining_progress read write - for mining drill entities.
      • Added LuaEntityPrototype::attack_result - the attack result for entities using attacks (beams, fire, landmines, projectiles).
      • Added LuaEntityPrototype::final_attack_result - the final attack result of a projectile.
      • Added LuaFluidPrototype::base_color + flow_color read.
      • The Train changed state event now fires when a train goes from stationary to moving or from moving to stationary while under manual control.
      • Prototypes can have the optional properites "localised_name" and "localised_description" to manually define the localised keys instead of using the auto generated keys.
      • Added sprite-button gui element, works the same way as button, but it can have sprite name assigned.
      • Added sprite gui element, can have the sprite name assigned/changed and has no interaction logic.
      • Custom sprites can be defined in lua data definition (type = sprite, the rest is sprite definition).
      • Sprite identifier can either point to custom definition from the data, or have form /, type can be (item, entity, recipe and technology), for example button.sprite = "item/iron-plate"
      • Renamed some defines (groupstate->group_state, circuitconnector->circuit_connector, circuitconditionindex->circuit_condition_index, trainstate->train_state)
      • Removed game.regenerate_tiles().
      • Removed game.get_player() and game.get_surface(): game.players[] and game.surfaces[] can be used instead.
      • Changed game.players, game.surfaces, game.entity_prototypes, game.item_prototypes, game.fluid_prototypes, force.recipes, force,technologies to use custom access + iterator objects for improved performance.
      • Changed game.players[] to work with both the player index and the player name.
      • Added on_gui_text_changed and on_gui_checked_state_changed events.
      • Changed "defines" so they're available by default and removed the defines.lua file.
      • Renamed LuaForce::logistic_robot_storage_modifier -> logistic_robot_storage_bonus to better match what it does
      • LuaEntity has built_by read/write.
      • game.player has been removed (use game.players[#] and associated event.player_index during events).
      • game.local_player has been renamed to game.player and now works through remote calls.
      • Offline players can be teleported anywhere (between surfaces or just around).
      • entity.get_inventory(index) returns nil if it doesn't have an inventory for the given index instead of giving an error.
      • entity.riding_state can be set on cars without players and the car will act as if it's being driven by a player (consume fuel).
      • Changed LuaForce::current_research to accept "nil" to stop the current research.
      • Added LuaTrain::front_stock and back_stock the front and back rolling stock entities of the train.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-06-27 18:44:02 CET ] [ Original post ]

    Friday Facts #144 - The gfx report

    Hello Factorians, Most of the week has been spent by tweaking and fixing stuff that keeps coming up for the Monday release. Even though things seem to work reasonably well for us a lot of the reported issues are to be expected. Especially regarding the Matching Server and the Mod Portal. It is quite tricky to test these things in our limited environment. So please keep calm and report the bugs=) Some time ago we came up with an idea of involving more people from the team in writing Friday Facts than just kovarex or tomas. The motivation was to take off quite some responsibility from our shoulders but also to give other team members the opportunity to present their work - which we believe can be interesting to the readers. So slowly, posts written mostly by other developers (related to what they currently work on) started appearing. We would like to go in this one even further. So today, the post is written by Albert, our art director, who will give some introduction into the project from the point of view of the graphics creation and where he is going to steer the project art-wise in the future.

    The process


    Factorio is made in a way that I consider very organic. What I mean is that we have a general plan, a goal. But in the way of approaching this goal we are able to sit and watch, and see how it goes and tweak it if necessary. Always with the intention of being honest with the project and ourselves, in a realistic way, we see if the plan is working or not. Normally it works but not fully 100%. Or it works just on paper but it won't work in the reality. So at that point is where we need to accomplish the plan by having modifications and inserting unexpected additions. These unexpected additions can be the difference in between bad, regular, good or fantastic. So they are very important for all of us. One significant example of what I mean is the entire train system. After having it working since long and playing with it and observing how you players use it, we come out with huge improvements and additions. I'm not saying that the entire train system is now perfect, but it is much better. I hope you will feel it (see the comparison below). After all that time of development, and experimenting, Factorio is in a stage where we can see less or more easily how to improve it, and this is the point I wanted to get in. The plans for the future visuals can be separated in 4 main branches:

    1. Graphical User Interface (GUI)


    Let's face it, we can do it better, and we want to. GUI shouldn't be improvised anymore, now we have the big picture. I'm going to be focused in this task together with Jan, our new programmer who has shown the skills and sensitivity to take care of this delicate matter. Together and with the feedback of the entire team we will rethink and re-shape the whole GUI in order to go for the final version.

    2. High resolution graphics


    Kovarex said long time ago that we are preparing the engine for playing in high-res. Since then, every new entity we do is designed and rendered for having 2 versions: normal and HR. Now, we have to move backwards in order to have the old entities like inserters, transport-belts, pipes, terrains, doodads, and a huge etc., in HR also. This is not a matter of just render it in double resolution, many things won't work with double size because the original design was meant to be just normal resolution. This can be bad, but I prefer to take it in the good way because now we have the chance to improve the design of many of the old entities and give them the modern and final direction we want for the game. So this subject is divided into re-render in HR and redesign old entities also. There' another subcategory in this subject, the icons. The plan is to to have all the icons in HR.

    3. Terrain and environment


    The actual terrain we use now is fine to me, but we would like to expand it in order to get more variety in the final picture. Jurek is our new 3d artist, he started this week in the studio and he's now playing and experimenting with terrain in order to get this variety of environment we want for the game. Good luck for Jurek : )

    4. New entities


    The studio is plenty of programmers, really, if you go to the toilette or the kitchen or anywhere, you will find some programmer there doing programmer stuff. That's great because the huge task of bug-fixing can be covered by a big part of them, and the game designer - kovarex - can be free to invent and prototype new entities. This means a stream of tasks for the graphic department. This will be covered by Vaclav and me, So I will take the concept and work on it, and once it is ready, Vaclav can work on 3d for making it real and introduce it into the game. Until here the big picture of the general plan for the art side of Factorio, we can cover them in more detail, and probably we will. Also there's some other secondary tasks but it looks that the GFX reports will happen more often, so let's take them for another day. Also do not expect to have all this ready immediately, we would love to have them ASAP, but if something I learned from Factorio is that there's no easy stuff. What it looks easy, probably will take more than what you expect. So no promises, but very good intentions.
    If you want to comment anything about the ideas above exposed, please use the regular channel in the forums as always. Thanks for the interest and see you in future posts.


    [ 2016-06-25 10:44:53 CET ] [ Original post ]

    Friday Facts #143 - Matching server and UDP NAT punching

    Hello all,

    About 0.13.0


    The hype for the upcoming 0.13.0 release has been growing. There are two news I can give you at the moment. As usual one is "bad" and the other is "good". So let's start with the bad one. The release has been postponed. Now the good one. The release has a fixed and specific date now (as opposed to "yeah soonish ..."). The date is 27th of June (a week from Monday). This is a hard deadline. Basically unless something very unexpected happens (i.e. the office being hit by the meteor and our release server not surviving the impact=)) that is when the release will be. There are a few good reasons for us to postpone the release.
    • The NAT punching (see the rest of the post) has been just finished and we need to do some testing of it.
    • The mod portal requires some final tweaks to be at least basically functional.
    • Issues are still being found during internal playtesting.
    • kovarex is away for holidays and in his words "he prefers to relax without worrying about all the bug reports coming up after the release"
    Just to share one of the many many issues / details that we came across during the playtesting. Below you can see a debugging visualisation for the smoke animation. Michal (posila) has been using it to figure out if the smoke animation is not getting stuck (which it was) and if the sprites are being drawn in the proper order (z axis wise).

    Matching server


    In FFF 139 we talked abouta matching server that is going to be integrated in 0.13.0.The matching server will allow you to mark your multiplayer game as public andannounce it to other players, you know how it usually works. Tomas implemented the server and it's counterpart in Factorio itself, but wedidn't get around to testing it as a whole for a long time.Eventually (while still not testing the feature), we figured that the server willnot work for us here at the office, because we are hopelessly behind NAT (and withUPnP disabled, before you even ask).This realisation made us move the "NAT punching" card from "Ideas for 0.14" to "Priority".

    NAT punching and how it works


    When a client wants to connect to a server, the server needs to somehow announceits IP address and port for the client to connect to.For a web server this is done using DNS (and pre-determined port numbers), forFactorio multiplayer the matching server has the same role. With the server behind NAT there are two problems. First there is no way for the server to determine its IP address and port withoutexternal help and the IP address and port might not be the same for everyone onthe internet. To solve this we have yet another two servers (called pingpong1 and pingpong2!).When a server starts it asks both of them "What is my IP address?".If we get an answer from both and the answers are the same, it means that the addressreceived should work for all other clients on the internet.If we receive only one of the answers or if the answers differ, then something iswrong and you're out of luck :-)
    The second problem is that most NATs in use will not allow an incoming packetunless there have already been some data sent to the address and port that originatedthe packet. After some time We avoid this problem by keeping a connection open between the game server andpingpong with periodic keepalive packets.When a client wants to connect to the server through matching server, it firstsends a message to the server through pingpong which makes the game server senda first packet to the client and open the mapping in its NAT.
    The behavior we use is actually a specialised version of STUNand ICEadapted to run over Factorio protocol.And it looks like it's working :).Unfortunately it will not work under all circumstances (we expect about 70%), butbetter than nothing, right? :-). The comment thread at our forums is ready. Next FFF edition will most probably be written by Albert about recent changes and progress in our graphics department.


    [ 2016-06-17 18:35:38 CET ] [ Original post ]

    Friday Facts #142 - Playtesting

    Hello!

    Playtesting


    Most of this week was spent by switching between playtesting and fixing bugs/issues found when doing so. We get little bit further in the technology tree every day as we play our multiplayer playtest game, it always uncovers few bugs or desyncs which we fix immediately so we can continue playing. We also tweak some inconvenient things. For example, once we are able to build rails fast with the rail builder, it was annoying to mine these when you misaligned them, so we just halved the mining time of rails. The inventory space was running out in the later game, so we made the armor give the character an inventory size bonuses (up to 30). We felt that the evolution factor growth doesn't slow down enough towards the higher value. In our specific game, it probably grew faster than usually as Scott was more than eager to test the new fire mechanics by setting every forest he found on fire. So we couldn't know what affected the evolution factor the most. We changed the formula of the evolution factor growth and added command /evolution. The game now tracks which factors contributed to the evolution, so you can get something like this: Evolution factor 0.8702 (Time 9%)(Pollution 57%)(Spawner kills 32%) It is great for balancing, but the players can use it as well, so they have a better clue of what is going on. At this stage it is still faster to fix bugs internally rather than going through the bug section on the forums, that is why we didn't released so far, but it is starting to be quite playable these days, so there is a good chance for release next week :)

    Circuit connection graphics


    Once we decided that everything will be circuit connectable, Robert and Albert agreed that the wire can't just end in the middle of the entity, that it needs something more. So there is a small circuit box sprite attached when the entity is connected. I have to say, that it adds a nice touch to it.
    As always, let us know what you think on our forums


    [ 2016-06-10 19:41:25 CET ] [ Original post ]

    Friday Facts #141 - Mod Portal

    Hello!

    0.13 Progress report


    I guess that not so many people really expected that the target day of the 1st of June might be the actual release day. The day was mainly a psychological trick for us to finish all the little fixes and not to start any new projects, so we might be only week or two late instead of months. We started the first multiplayer play-tests last week, but they didn't last long. After the first hour of connection issue fixes, the game desynced every 15 seconds. The process of determinism fixing that we first experienced when stabilizing 0.11 is now well known to us. With the tools we prepared and partially explained in friday facts 63, we were able to identify and fix determinism issues much much faster than before. It took just a few days compared to several months back then. The last playtest day was 2 days ago, and we were able to play a game where Linux, Mac and Windows players were all present. It lasted a few hours and no major issues were found so we are getting there. I also have to admit, that the discovery of slither.io stole approximately 2 days of our dev time, as the game is really really great :) So if you can't wait for Factorio release, I advice you to try the game in the meantime. TL;DR If the further playtesting goes well, the release could happen next week, but you never know.

    Mod portal


    The information about the mod portal is brought to you by Martin, the train guy and recently also the mod portal guy. The mod portal is a long awaited feature and it is finally happening! With the release of 0.13, we will be launching the mod portal website, along with an in-game integration. The base of the project was created by the original creator of factoriomods.com. The mod portal can be viewed by anyone, but you will have to log in with your factorio account to download mods, same goes for the in-game version.

    Disclaimer


    Mostly due to lack of time and the size of the project, it is not in a finished state (and will not be completely finished with the 0.13 release). It contains many bugs and it's missing a fair amount of features that will be coming with later updates. All the graphics of the website or the in-game GUI are subject to change.

    Basic features


    Mods can be sorted and filtered, they are grouped into categories.
    You will be able to rate mods, probably using a 5-star scale and filter/sort mods by rating.

    Discussions


    Every mod has a discussion with multiple categories - announcements, bug reports, etc. This should help with the clutter we currently have on the forums.

    Licensing


    We will be requiring every mod to specify a license - either one of the common licenses (like MIT, (L)GPL, Apache, public domain) or a custom one, where you can specify the exact things people are and are not allowed to do with your content.

    In-game browser


    The in-game browser allows you to do most of the important things like filtering/searching for mods, it also allows you to install a mod with just a single click, same goes for updating mods that are already installed.

    Further development


    There are a lot of features that we want to still add to all this and they will be slowly appearing with 0.13.x patches. This is more a list of ideas, than a list of confirmed features, some of them might not be implemented.
    • Automatic installation of mods when loading a modded save
    • Automatic installation of mods when connecting to a modded multiplayer game
    • Grouping mods into modpacks
    • Integrating with Github for release management
    • Automatic compatibility testing
    • Various download/usage statistics

    The first 0.14 project


    One of the first 0.14 projects is the attempt to fix the determinism problems of mods. The issue with mods and determinism is, that lua script as it is doesn't allow us to save everything from its internal state into the save file. When the modder puts pointer to method to a variable or uses variable that is not in the scope of the global, it is not saved. If the mod uses these values to do any changes to the game, it will desynchronize. This not only makes potential problem for modders, but drains our developement time, as we can't just ignore all the desync reports, but reading scripts of modders and searching for mistakes there is not really in our capabilities. The plan is to enhance the script serialization in a way, that modder basically can't make a faulty mod, as all values will be always saved. This requires some low level hacking, so the lua functions, closures and other internal stuff is saved as a byte code as part of the script. But if it could be done, it would increase the usefulness of mods a lot. The research of whether this is possible will be one of the first task of our new Programmer in the team. Say hello to Honza :)

    The locomotive


    The train project is almost done as well, let me show you the side view of our new locomotive:
    Once we were already working on the train graphics, we had to solve the annoying problem of train wheels not matching the rails in curves. This was obviously not solvable as we rendered the train wagons as one sprite. So we fixed it by drawing the wheels separately, so they can have different orientation than the locomotive itself. The result gives much more organic feeling of the locomotive movement.
    As always, let us know what you think on our forums


    [ 2016-06-04 11:19:49 CET ] [ Original post ]

    Friday Facts #140 - Soon

    Hello, the struggle to finish the latest features and fixes so 0.13 can be in time, or just reasonable delayed, goes on. There is always last missing icon or tweak that was hiding around the corner. It is still not certain whether we can really deliver next week, but we will certainly try to.

    No Factorio sale


    We state it on our steam page, but people are still asking about it so I want to state it officially. We don't plan any Factorio sale. I'm aware, that the sale can make a lot of money in a short period of time, but I believe that it is not worth it in the long run, and since we are not in financial pressure we can afford to think in the long run. We don't like sales for the same reason we don't like the 9.99 prices. We want to be honest with our customers. When it costs 20, we don't want to make it feel like 10 and something. The same is with the sale, as you are basically saying, that someone who doesn't want to waste his time by searching for sales or special offers has to pay more.

    Flame thrower


    Michal almost finished the overall flame related work. Part of it is, that the flame thrower uses the same logic as the flame turret. The whole fire mechanics consist of many factors. The flamethrower arc, flame on the ground, running biters/trees on fire, the smoke, burnt patches on ground, burnt trees etc. But from what I could try, the overall feeling of destruction was worth the trouble. This is just a small example:

    Circuit network examples


    The circuit network additions were explained in the previous fff, but I wanted to show at least few useful examples of the new features in real Factories. I would like to note that I found and fixed several bugs by building just these examples :) The typical problem is the supply train. In the later game, you have several mining expansions connected by rails. You would like to resupply these by different kind of materials, as the expansion might get under attack from time to time, and different kind of things might get destroyed. This was possible to do in 0.12, but you would have to have 1 chest + smart inserter per item type in every expansion to make it work. With the circuit network extension, there is now much more practical way to implement it. The expansion:
    The supply train can come in regular intervals. Its cargo wagon has one filter slot per item, so it will come with all different kind of items. The constant combinator specifies which items should be kept in the expansion, and how much. From these numbers I subtract the items I already have by multiplying them by -1. Then I simply set the filter inserter to the set the filters mode. It filter items by circuit network values greater than 0. So once there are 100 walls in the chest, the filter inserter will not move more. This means I can use this simplistic setup with one chest to supply everything the expansion needs.
    Another example is the safe rail crossing. Here the player can't go in when the train has the rails reserved. When the player is on the rails, the signals are reserved by the circuit network, and the train has to wait until the player leaves. Also when the player is inside the area, the train gates are closed so he can't get on the tracks outside the crossing.
    I didn't show actual train in both of these examples, as the train graphics is in the middle of rework, I will show more in the next FFF or the 0.13 release, it depends what will be sooner. All I can say now is, that there is little bit more than a new graphics and you will like it :) As always, let us know what you think on our forums.


    [ 2016-05-27 22:13:33 CET ] [ Original post ]

    Friday Facts #139 - Wrapping Up MP UI

    Hello everybody,


    the work on the 0.13 is slowly getting to the final phase and hence it feels like a good time to give an overview of actual multiplayer changes that have been implemented over past couple of weeks. This is a recap and extension of a FFF post that mentioned the Multiplayer improvements while there were in progress.

    Browsing games


    Probably the biggest change is implementation of a service that holds available Multiplayer games. We call this service Multiplayer Matching Server even though the name doesn't precisely describe what it does. This service greatly simplifies the game discovery and connectability. Player hosting the game (or a headless server) will simply publish the game to the Multiplayer Matching Server. This makes the game available to other players via the Browse Games Gui. This will make the clumsy connecting directly to the server pretty much obsolete (though the functionality stays). As mentioned earlier there are quite a few little features to make the user experience smooth. Just to recap:
    • Games can be created as publicly listed / unlisted / LAN only
    • LAN supports automatic discovery without internet connection
    • Games can be protected by password.
    • Browse Games Gui supports searching in name of the game / description / tags.
    • Browse Games Gui shows some basic game information (game length, player names, etc.) and allows directly join the game.

    User Verification


    The usage (creating games as well as listing games) of our Multiplayer Matching Server will require user to be logged in with his Factorio username. If you have a Factorio account you can simply use those credentials in the in-game login dialog. If you are coming from Steam there will be an in game Factorio account creation dialog that creates a Factorio account for you the first time you need to use it. The reasons to use strictly Factorio usernames are mostly technical. However also we have been from the beginning committed to provide all our services both to people using the Steam and those not using it as well. The same will hold for Mod Portal and other services coming in the future. Another advantage of having user verification is that when creating the game it can be requested that all the users connecting to the game needs to be verified. Which basically means that they are connecting with their Factorio username and they don't pretend to be someone else.

    Technical background for user verification


    Just a little technical rant about how user verification works behind the scenes. This is to show that even a minor feature might get quite interesting. The diagrams show graphically what is happening.

    • When the server (Factorio game) is started it requests a server_padlock from the Auth Server. This is a hash of random server generated server_identifier and secret Auth Server value.
    • New players receive server_identifier when connecting to the game. With the server_identifier, its username and password (or token if he logged in previously) the player goes to the Auth Server and obtains the user_server_key. This is a hash of server_padlock (generated again on the Auth Server from server_identifier) + player's username + timestamp.
    • The User then sends its user_server_key to the Server together with its username and timestamp.
    • Server regenerates its own version of user_server_key from its padlock + given username + given timestamp
    • If the server calculated user_server_key and provided one match, the user is accepted to the game.
    In this protocol the server_padlock is private information shared between server and Auth Server. The server_padlock allows to verify that the user coming with user_server_key was successfully verified by the Auth Server.All this hassle is to avoid too many requests to the auth server. This way there is one request when the game is created and one request for every new player connecting to the game while keeping a good level (in our opinion) of security.

    Steam Friends


    An often asked for convenience for the Multiplayer is the integration with Steam Friends. Thanks to Ondra this has been already implemented. In the Browse Games Gui you can filter games that have some of your Steam friends in them. Then in the game details you would see your friends highlighted. But more importantly (and conveniently) you can use this feature directly via Steam. In your steam client you will see your friends that are currently playing Factorio and you can just click and join them in the game. This translates to our internal game connection mechanism which might still ask you for a password if the game requires one.

    NAT punching


    The final "cherry on the top" which is still in progress is NAT punching via the matching server. Basically this will allow the servers without public IP address (they are behind a NAT) to host the game. The idea is simple: The Matching Server (or a standalone service) will provide a simple UDP API which can be pinged and it will respond with the IP address it sees the incoming packets to come from. This will be our little imitation of the STUN. The application (Factorio client hosting the game) will receive the reply with the public IP address it is visible to the Matching Server (Matching server has a public IP). This "punches" the hole to the NAT the Factorio client is behind. The game is then published with the IP address returned by the STUN-like service and hence when players connect to the game, they are connecting to the public IP address on the outside of the NAT (if there is any). The packets are then forwarded to the actual Factorio client hosting the game via internal NAT mechanisms. As usual this might not work in 100% cases because of the special cases and oddities in NATs but should cover most of the scenarios.

    Other


    0.13 is a big big release. The biggest so far. So there are quite a few more "little" features that make the MP experience smoother.
    • Admin system will allow the player hosting the game to give admin commands, most importantly kicking out and banning (potentially annoying) players.
    • Console commands for the server (also via RCON connections).
    • Peer2Peer mode has been removed. This simplifies the guis as well as internal coding solutions. The player starting the game is always the server. We have thought about this quite a bit and the potential upsides of peer2peer (possibly faster on LAN and more "robust") are just not worth the hassle. For the future we might look into some peer 2 peer communication optimisations behind the scenes but there are more urgent things to be solved now.
    • Entity info shows which player has built given entity.
    If you have some more ideas what how the MP User Experience could be improved please let us know at our forums. For 0.13 we are pretty much set, but we will gladly consider the ideas for the future. For instance the observer mode has been on our TODO list for a while and it is slowly getting to the top.


    [ 2016-05-20 17:40:09 CET ] [ Original post ]

    Friday Facts #138 - Better Circuit Network III

    0.13 release is getting close. The programming guys are trying to finish the features so we can start internal playtesting and bugfixing next week. The art guys are working hard on the new trains graphics. In the meantime, here's some more information about the circuit network.

    Circuit Network Connector Discarded


    If you remember my last FFF I wrote about adding a new entity called Circuit Network Connector that would have been used for connecting normal entities to the circuit network. The community had some good examples of why it was a bad idea, so we went back to the way it worked before. This means that you can continue to connect entities to the circuit network directly.

    Consistent GUI


    One of the problems that had to be solved was GUI interaction. Sprinkling circuit network related GUI elements randomly in the entity GUI looked pretty bad and was hard to understand. The solution is 2 small buttons in the top-right of circuit connectable entities GUI, they will appear when you research the circuit network and the logistic network respectively. Clicking the circuit network icon will open a window that lets you set up how you want the entity to interact with the circuit network. The logistic network button works in a similar way. The window is usually separated into 3 parts:
    • Connection information: if and what it's connected to.
    • Mode of operation: sets how you want this entity to interact with the circuit network. Tooltips briefly explain what each mode does.
    • Mode of operation settings: various settings depending on the selected mode of operation.

    Everyone gets a logistic condition!


    The good thing about this GUI separation is that it also allows finer control, so most entities that can be turned on or off by the circuit network can also be turned on or off by directly using a logistic condition. You can now turn off pumps, offshore pumps, inserters, transport belts, lamps and power switches directly using a logistic condition, no new entities required, just click the magic button after researching the logistic network.

    Wire highlights


    This is something for those who make huge combinator networks. It's really easy to get lost in wires when making complicated setups. Now hovering over entities that have red/green wires connected to them will highlight the wire network.

    Accumulators and Transport belts


    Probably one of the more interesting entities that can now be connected to the circuit network are Accumulators and Transport belts. Accumulators send the current charge level, so you can finally easily turn off steam engines at night or activate backup power based on accumulator charge levels. Transport belts can be turned on or off based on circuit or logistic condition. You can also read the contents of the belt in 2 ways: pulse mode and hold mode. Pulse mode sends a signal for 1 tick when an item enters the belt. Hold mode will send the number of items on the current belt as long as they sit there. Those familiar with combinators will probably figure out that pulse mode is very useful for calculating the throughput of the belt or calculating the total number of items that passed though that belt. This logic works for one belt tile, not for the whole length of belt.

    Performance and how it works [Technical]


    Previously, the way the circuit network worked was that every entity that could be connected to the circuit network had all network connection information, circuit conditions, logistic conditions, etc inside of it. That meant that if you had thousands of inserters in your map that were not connected to the circuit or logistic network, some RAM and savegame space was wasted. This was not really a problem, but if it would have been done the same to all the new entities, especially transport belts, it would have become a problem. The solution is simple. The relevent data(network connection information, circuit conditions, logistic conditions) is packed into something I call 'control behaviors' (because they tell the entity how to behave when they are controlled by the circuit or logistic network). These behaviors are only created when it's required: when you connect a circuit wire or when you want to set a logistic condition. This is relevant to modders. Modders have access to these behaviors. To get a behavior instance you call luaEntity.get_control_behavior() or luaEntity.get_or_create_control_behavior(). The second method creates the behavior instance if it does not exist.

    TLDR version of all the circuit network changes implemented and coming to 0.13


    • Power switch, which can turn electricity on or off automatically based on circuit condition.
    • You can turn off pumps, offshore pumps, insertes, belts, lamps and power switches directly using a logistic condition.
    • The lamp can change it's color based on circuit network signals.
    • Roboport is connectable to the circuit network. It sends the logistic network contents.
    • Accumulator is connectable to the circuit network. It sends it's charge level as a percentage.
    • Transport Belt is connectable to the circuit network. It can be turned on or off and it can send it's contents to the circuit network.
    • Requester chest's requested items can be set automatically from the circuit network.
    • Inserters can now send the item held in hand to the circuit network. Smart inserter can have it's filters set automatically from the circuit network.
    • Connected Red/Green wires are highlighted when hovering over a combinator or entity connected to the circuit network.
    • Combinators show some information in alt mode, including input and output arrows.
    • More virtual signals.
    • The constant combinator has an on/off switch.
    • New combinator graphics and graphical improvements.
    • Constant combinator can be rotated.
    • All types of inserters can be controlled by the circuit and logistic network, once the respective network is researched.
    • All types of chests can be connected to the circuit network. Smart Chest was removed from the game.
    • Circuit network and logistic network conditions can now be accessed by icons in the top-right corner of the entity's GUI, for all entities.
    • Decider combinator "input count" option makes the combinator copy the count of the specified output signal from the input signals, instead of copying the count from the condition. This might break some setups. https://forums.factorio.com/13706
    The plan is to release 0.13 soon. I'll try to get more things ready. The list of plans now is as follows(in no particular order)
    • Mining drill - read the amount of resources remaining, read the Pumpjack resources per minute
    • Gate - Detect if a player is nearby, close and open the gate
    • Train Station - read the contents of the stopped train and control trains by disabling/enabling the station
    • Train Signals - still in the process of designing it. Basically be able to stop trains or see if a train is about to arrive

    Czech game of the year awards


    Last week some of us went to some Czech game of the year awards ceremony. And good news, we managed to win not one, but two of the four awards. Factorio won Best Technical Award and Best Gameplay Award.
    As usual, PM me or reply at the forums for suggestions, complaints and comments.


    [ 2016-05-13 15:41:44 CET ] [ Original post ]

    Friday Facts #137 - The release scarecrow

    Hello, the 1st of June, which is the goal of the 0.13 release is starting to feel uncomfortably close, especially if I want to start play-testing 2 weeks before the release date. There are a lot of bigger and smaller tasks appearing all over the place. It is now the time of moving some of them to the next release again. Many of them are moved like this for years already.

    Czech game of the year


    I have to finish the Friday facts soon today, as we are going on a trip to Třeboň, where the Czech game of the year ceremony is held. Factorio is nominated on 3 categories, so there is a chance to win something, but mainly, we will have the opportunity to talk and party with other game developers, which doesn't happen often.

    Rapid inserter


    The final decision has been made and instead of a loader, we will have not heavy, but rapid inserter. To make things straightforward, I decided to limit the inserter stack size bonus to the rapid inserter only. Some people certainly won't like it, as they won't be able to use long handed inserters or burner inserters to take advantage of this bonus, but the advantages outweigh it.
    • Streamlined definition of the inserter stack size bonus, now it increases rapid inserter capacity whatever is it doing.
    • The rapid inserter will have its specific usages. As the rapid inserter currently waits until its hand is filled with items, it is not clearly better than fast inserter. When the bonus is 5, and it has 4 items in hand, it can wait minutes (or forever) for the last item, which might be undesirable especially with expensive, low throughput items. This implies that rapid inserters will eventually become stuck on mixed belts as long as some explicit mechanism to prevent it won't be there.
    To make it useful, we will increase the maximum rapid inserter capacity (instead of inserter stack size bonus) from 4 to 11, so it can hold up to 12 items of the same kind. Four fast inserters can be easily matched by one fully upgraded rapid inserter:
    Four fully upgraded rapid inserters can almost fully compress an express belt:

    Train station visualizations


    Another one of the ease of use additions for 0.13, is the train station visualization. Whenever you are building next to a rail that leads to a station, you can see the future train wagon positions. This simplifies the building of the stations a lot.
    The visualization is also helpful when building the train stop. You can immediately see, how many wagons can fit in the platform. It is combined with the indicator of possible train station placements. These are limited by the direction in a similar way as rail signals are. With this you won't build the station on the other side of the rail by accident anymore.

    Fanart


    I encountered this cute picture by ironhand on our forums, and I just had to share it with you.
    As always, let us know what you think on our forums.


    [ 2016-05-06 13:29:16 CET ] [ Original post ]

    0.12.33 - bugfix release

    • Bugfixes
      • Fixed tiles in blueprints. more
      • Fixed the duplicated message on load error in multiplayer. more
      • Fluid values are rounded to the closest value instead of rounding down when transmitted to circuit network. more
      • Fixed that switching brush shape in the map editor didn't update the selected icon highlight. more
      • Fixed that label/checkbox padding was applied twice, moving the rendered text to be out of place. more
      • Fixed that map (chart) wasn't properly updated when existing map was edited in the map editor. more
      • Fixed crash when the character would die from mining something. more
      • Fixed crash when robot can't find charging spot when stationing. more
      • Fixed crash in multiplayer that could happen when 2 people are editing the same train schedule. more
      • Unified the electric network statistics production/consumption values to be avarage of the shown timeframe. more
      • Solved small numerical text box editing issue. more
    • Scripting
      • Added LuaStyle::cell_padding/horizontal_spacing/vertical_spacing.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-05-03 13:14:35 CET ] [ Original post ]

    0.12.32 - Bugfix release

    Bugfixes


    • Fixed loading of electric network of pre 0.12 saves.
    • Fixed blueprint building. Blueprints are migrated as long as you load the version 0.12.30 or earlier, existing bluepritns might be off if you resaved in 0.12.31 already.

    Scripting


    • Lua interface to create blueprint now expects the entity positions to be relative to center exactly, so in rail-less blueprints, the position 0.0 translates to center of the tile when the blueprint is built.
    Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.


    [ 2016-04-30 21:44:39 CET ] [ Original post ]

    Friday Facts #136 - Map Transfers

    Hello all,


    This week's instance of FFF is brought to you by cube, your friendly neighbor clueless network programmer. This post will be more technical than usual, so let us know if you found it interesting.

    Things go on


    The week has been spent mostly on pushing forward in multiple of ongoing areas in the development for 0.13. Robert is working on Combinators, Posila and Vaclav on Fire and Flamethrower Turret, Martin is immersed in Factorio modportal and its integration and Tomas and Ondra have been tweaking some Multiplayer Matching server stuff. While Kovarex has spent most time on the 0.12 bugfixing. Albert is back home for a week so the full speed gfx work will happen from next week on.

    The Problem


    Factorio has long had problems with map upload speed. As usual the hard problems they always appear "out there" and never when you're looking for them, so while we were getting a steady stream of bug reports about this problem, we could never replicate it. You might ask why do we even need to upload the whole map when the player might end up seeing just a tiny part of the world anyway. AAAAnd the answer is: That's just how it works :-). Essentially it's because Factorio runs a lockstep simulation and every player needs to have complete information about the whole map. This has been discussed in slightly more detail in an older blogpost. Now that we know that we really must copy all the data, the question is how to do it well.

    Packets, TCP and elfs


    As you probably already knew, the Internet works by passing small chunks of data called packets (or frames or segments or datagrams, depending on where exactly you look). These are nothing special, just some bytes wrapped in an envelope made out of other bytes. The network that these packets travel is a dangerous place, packet can get lost, delayed, or even duplicated along the way. To keep people sane and networks fast, someone came up with a way to hide all these complications (because that's what programmers do) and invented the TCP protocol. Instead of transferring unreliable packets, it provides a stream of bytes and the machinery inside wraps pieces of the stream to packets and makes sure that all bytes arrive as sent. Which sounds suspiciously similar to moving files over the network, right? Just pop the whole thing into the stream and let the elfs do their magic.

    Differences between Factorio map transfers and UDP


    Unfortunately in Factorio nothing is ever easy :-). Using TCP would have three important consequences: It would force players to open TCP ports as well as UDP ports in firewalls and NAT servers, it would remove the possibility of using NAT punching now or later with MP matching server and it would cause problems with downloading from multiple players at the same time. So we decided to have file transfers done over UDP, even though it means reimplementing a significant part of TCP functionality. To make downloading from several other players possible in peer to peer mode, the file transfers work by requesting individual blocks from peers and waiting for the data, instead of sending data and waiting for acknowledgements. Also we don't really care about ordering of the data blocks as long as all of them are eventually transmitted.

    The story so far


    When we started implementing the file transfer all I had was a rough idea of "we're sending some packets and waiting for confirmations, somehow we know how many unconfirmed packets there should be at one time and that value is called cWnd". So Wikipedia came to the rescue and told me that a prety decent algorithm to determine cWnd is called CUBIC. So I read an article or two, coded it up and ... it worked! Let's ship it! A few releases, a few fixes, and a few desperate kludges later it worked very reliably on my machine and the code got kind of forgotten. About three weeks ago we decided to revisit the map transfers and I've spent two fun weeks in TCP land.

    Congestion avoidance


    The significant part of TCP functionality mentioned earlier is called congestion avoidance. When you are sending some packets into the network you usually don't know in advance how fast the network is or how long it will take to reach the other end and if too many packets are stuffed into the connection not only some of them will be dropped, but also packets belonging to other connections that go through the same part of network will get dropped. This situation is called network congestion and generally it's a thing we want to avoid, because it slows the available transfer speed for everyone. So the main idea behind congestion avoidance TCP is to send some amount data and wait for acknowledgements before sending more. If the acknowledgement arrives, we know that sending this amount of data is OK and we try to send a little more next time, if on the other hand the packets start disappearing we know we are sending too much and we should slow down. Because of only a little complicated reasons, the increase of the window size is a roughly linear function of time and the decrease is immediate halving, this algorithm is called AIMD (additive increase, multiplicative decrease). This way the amount of data in the network is oscillating between no congestion at all and very minor congestion, slowly going up and then suddenly jumping down to half speed.

    It's all in the details


    Our first guess for the reasons of the slow transfer speeds was packet loss. Both AIMD and CUBIC decrease the transfer speed drastically after a packet is lost so when your microwave decides that the WiFi connection is its mortal enemy, the congestion avoidance algorithm will slow down. The measurements confirmed this, but compared to TCP, our file transfers were always a little bit faster when packet loss was artificially added. After an embarrassingly long period of experimentation I was left with two implementations. AIMD, based mainly on RFC 5681 and my own attempt slightly inspired by Sync-TCP and LEDBAT, but other than that completely original. And neither of them worked too well :-). With my custom protocol that was not unexpected, it was mostly meant for experimenting and to get a feeling for all the different behaviors the network can cause. On the other hand why the AIMD implementation was not working was a mystery. Finally after finding RFC 2525 (thank you, internet people from 1999), I figured out that all problems in my life were caused by a missing fast retransmit / fast recovery mechanism. Fast retransmit and fast recovery work by marking a packet as lost not when its timeout expires, but when three packets sent later are confirmed instead of the packet in question. In this case the packet is retransmitted and fast recovery mode is entered instead of waiting a whole second, overflowing the network with extra packets the whole time. After these changes we've upgraded the algorithm to be very similar to TCP Westwood which finally gave us the improved behavior on lossy networks. So TADAAA, here we are now. The map transfer protocol is less tested than the previous one, but we feel more certain about it, so let's hope that it's going to be the last change necessary to this part of networking code.

    TL;DR


    Map download was slow, cube spent some time doing computer stuff, now it should be faster. Let us know what you think at the forum.


    [ 2016-04-29 16:03:31 CET ] [ Original post ]

    0.12.31 - bugfix release

    • Bugfixes
      • Fixed crash when script errors occurs while loading game while in game. more
      • Fixed that attempting to connect to Factorio 0.12.30 with an old client wouldn't produce the correct error message. more
      • Fixed that modded roboports with no charging slots were still considering as charging candidates. more
      • Fixed that item icon variant for dark background was not used when showing cargo of logistic robots. more
      • Fixed crash with "Unblock sendto failed: The operation completed successfully." more
      • Human readable error notice when multiplayer connection wasn't successful. more
      • Fixed that headless server wouldn't save the map after Control-C. more
      • Fixed that attacking biters with a mining tool wouldn't aggro them.
      • Improved map download speed when connecting to multiplayer game. more
      • Fixed that assigning units to a unit group of a different force would corrupt the save. more
      • Fixed crash when using can_insert on the quickbar from the Lua APi.
      • Fixed tight spot scenario crash. more
      • Fixed sort order for recipes in the recipe display.
      • Fixed incorrect error message, when setting the number of filters on an inserter. more
      • Fixed flame from rafineries that are marked for deconstruction was frozen in mid air. more
      • Fixed that odd sized blueprints were shifted when rotated. more
      • Fixed crash when clearing modded blueprint that doesn't need item to be cleared. more
      • Fixed crash in arithmetic combinator when calculating -2147483648/-1. more
      • Fixed crash when assigning a character as a passenger of a vehicle when that character already is a passenger of another vehicle. more
      • Fixed dealing damage could sometimes corrupt game state and saves. more
      • Fixed modded save could not be loaded when a modded inserter gained abilities of smart inserter. more
      • Fixed unknown-key message on the third level of first-steps. more
      • Fixed cursor-split transfer (right click) not working when putting items into assembling machine stacks over normal stack size. more
      • Fixed remote.call() from within the same mod. more
      • Fixed inconsistent inserter behaviour when inserting into a splitter from the side. more
      • Fixed train trying to turn around on a single rail. more
      • Fixed internal electric network problems when mod specified irregular number as supply reach of power pole. more
      • Fixed crash when lua script appears in specific state in multiplayer. more
      • Fixed another crash than can happen when train destroys itself. more
      • Fixed rare multiplayer crash "server is missing in the crcs". more
      • Fixed several GUI problems on high DPI displays more
    • Optimisations
      • Improved performance when using landmines. more
    • Scripting
      • LuaUnitGroup::add_member now requires that the new member's force be the same as the UnitGroup's.
      • Added LuaUnitGroup::force read-only attribute.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-04-27 07:06:05 CET ] [ Original post ]

    Friday Facts #135 - Getting Organized

    Hello all, Originally I intended to dedicate most of the post to the technical aspect of our new Multiplayer User Authorization mechanism that I have been working on in my programming time. Then I thought, hmm it would be nice to start with some project management changes that we are looking into and experimenting with. Then I pretty much ended up making a full blog post about that =) It might give you an interesting insight into issues that we are dealing with. The Multiplayer User Authorization mechanism will definitely be described in one of the future FFFs.

    Slowly growing


    As mentioned in the previous FFF there is a new team member here with us. Her name is Michaela (or Mishka) and one of her main responsibilities is to get us a bit more organised=) At the moment we are 11 people in the office with 2 external collaborators. Our short/midterm goal is to grow to about 15 people in the office (we are still looking for good C++ programmers ideally from Europe!). Our approach to "project management" so far has been very loose and organic. Somehow we feel that we have reached a boundary here and need to start working a little bit on our methods of working together, sharing the results of work, etc. This especially holds true with our (moderate=)) growing ambitions.

    Defining the areas


    So we spend quite some time brainstorming and figuring out what we believe is working well, what could be improved and where we want the things to go. We came up with 3 basic themes / areas for getting organised. In short these areas are: Transparency and knowledge sharing, Direction vs. management, Productivity. Let's have a look at the descriptions for all of these. The next step was internally clarifying three aspects for every area:
    • What is the current situation and why we want to change it.
    • What is our goal.
    • What tools and processes can we use to achieve the goal.
    We are very aware that changes like these can be sensitive. Especially when we start using words like project management, goals, processes, etc. So our main criteria for the whole set of changes is to not overdo things. This means make small changes step by step and stop when we have achieved our goals. Also we are aware that processes and tools are here to serve us and not the other way around so we will try to keep our minds open and abandon things that won't work for us.

    Area 1: Transparency and knowledge sharing


    Till now, often a developer would work on a task for quite some time without too much interaction with others. Hence there was a lack of feedback on how he is doing, if he is stuck or not, if what he is working on might be related to what a different dev is doing, etc. So far our main tool of communication has been talking in the office / at lunch and Trello cards. Trello has worked really well for us, but it is getting full of cards, generally messy and often there is little information for particular cards and so on. Ideally we are after a situation when people have a general overview of what others are working on. We are still small enough to do this for the team as the whole (imho it becomes harder for teams of 20 or more people). This should also improve productivity (people can help each other in case they know how to solve an issue someone else is stuck with). We started by having a short stand-up meeting twice a week (currently Monday and Thursday at 1 p.m.). The meeting (ideally) takes about 15 minutes, requires all the team members to be present and standing (to keep the pace going). We start by announcements if there are any (this and this person is coming for probation, we have made this and this presentation, etc.). Afterwards we go in a round and everyone gives a brief status. This means: what he is working on, if he is doing ok or is stuck, if he needs to communicate with other people, etc. This takes (ideally) less than a minute for a person. In the near future we intend to have "minutes" (short transcript) from the meeting in the written form to inform (and gather feedback) from the members not present. The main inspiration for stand-up meetings came from my pre-Factorio (so long ago :D) programming job in Amsterdam, where it really helped us as a team of about 12 developers. Another potential change we are looking into here is become more verbose in our Trello cards. This would mean giving proper description to cards, links to forums or other related cards, using checkbox lists, etc.

    Area 2: Direction vs. management


    So far the project direction and project management "roles" have been concentrated in the hands of the same people (kovarex, me and Albert). This makes sense for very small teams however it is also quite limiting. The basic issue here is that the direction is more like a vision (I imagine a person who knows where the ship should go) while management is more like an every day task making sure that the ship actually goes where the direction has been set. So we want to split the direction of the project from its management. The three of us would still be giving the project direction however the part of the management would be given to Mishka and part to team members themselves. This should free up some of our time which we can dedicate to programming / art as well as allow us to be outside of the office more (summer is coming =)). We imagine that this would be achieved partly by cleaning up the Trello a bit. We (product owners) will need to spend more dedicated time making sure that the cards, priorities and assigned devs / artists in the Trello are well defined. On the other hands this frees our hand because when a person is finished with a task he / she will know what to do next. Another thing we intend to improve in this area (overlapping with the next area) is the code reviewing process. At the moment most of the code reviewing is done by Michal in a kind of random manner (he reads some commits but not all of them). The goal would be to have code reviewing across the team. We are still looking for a simple and efficient tool to achieve this (let us know if you have any recommendations).

    Area 3: Productivity


    We are not after moving forward as fast as possible at every cost. Balance is more important in our eyes - moving forward while still enjoying the work. However recently there has been quite a lot of distractions around the office and we feel it is time to start looking into this. Haha, a good example from the real life. Just before I was about to write the next paragraph, in the room next doors there were two people programming and one shooting nerf gun bullets around (consistently hitting monitor of his college who was coding =))). This can be a good fun now and then, things like these decrease productivity not only of people involved but pretty much of all the people in the vicinity (most of the office). Again it is about finding balance. So we are after decreasing distractions in the office a bit. We have started using Slack and encouraged people to use it to communicate to others when the face-to-face talking is not necessary. Besides that, it comes down to being mindful about whether my actions (i.e. sharing the latest news from the web by shouting them out in the room, having fun with colleague at his computer) are not disturbing others too much. Another aspect would be the oblivious "fight against procrastination". However we don't feel this is such a big issue at the moment. Hopefully all of the people here have a strong internal motivation to work on the game and make it as good as possible which should take care of this on its own.

    Back to the game


    Ok so let's have a look at some progress at actually making Factorio and not only trying to get real making it. For quite some time Michal (posila) has been playing with fire and flamethrower turrets. Vaclav has been doing the art for these. This is quite a big subject which deservers a blog post (or substantial part of it) of its own and it will come in the near future. But to give you a bit of a sneak peek into the process you can checkout the hi-res render of a model of the flamethrower turret below:
    Maybe more than usual, we are curious about what you think. If you have any comments or tips regarding the areas mentioned above please let us know on our forums.


    [ 2016-04-22 14:43:31 CET ] [ Original post ]

    Friday Facts #134 - Signal placement indicator

    Hello Factorio players!

    The fast progress report


    Cube is working on the udp download rate with high packet loss. Michal and Vaclav are tweaking the flamethrower mechanics (You will like this one). Robert is working on the circuit network improvements. Tomas is working on the authentication service. Albert is preparing the new train graphics which will solve the horizontal/vertical inconsistency explained in the last Friday facts. Ondra is implementing control interface of the headless server and Martin is mainly cooperating on the integration of the mod portal. Most of these topics will be described in detail in a future Friday facts once they are finished.

    Welcome Mishka


    Miska is our now project manager on a testing period. We (Tomas and Me) decided to delegate some of our responsibilities to someone else, so we have more time for programming and game design. Her responsibilities will be to keep the track of the ongoing projects in Wube, help us to optimize our working processes, help with administrative and business tasks, possibly help us to optimize the bug fixing process and other similar tasks.

    Signal placement indicator


    Let me explain the process of a small task I decided to do during Sunday afternoon for 0.13, which grew to a week of work. The problem with signal building, is that it is not clear where can the signal be built, especially on turns like this:
    So the first obvious step was to show the possible positions of the signal placement, to spare the player searching for those by moving the cursor around. The indicator shows only positions around the cursor (20 tiles radius) and it looks like this.
    This is a nice improvement already, but once we have it, we can go further. The typical misunderstanding, is that people don't understand why is this signal blinking:
    Signals as well as junctions always divide rails into segments. A segment is a rail with one beginning and one end, with no junctions and these segments are grouped into blocks. Two distinct blocks need to have signals on the border with the other blocks, and can't have any collisions with rails of another block. This is to make sure that a train on one block can never collide with a train on another block.
    The problem with the junction, is that the curved rail collides with both the left and right segments, so it merges all of the segments into one block. This renders the signal to be useless, as it is not dividing anything.
    Placing signals on these positions makes no sense, so I extended the indication and building checks, to not allow the building of useless signals in junctions. This also makes it perfectly clear, what is the closest safe location after a junction to build the signal:
    Once I was done with that, I remembered another annoying issue that arises when building signals. The direction problems. One small and often hard to find error can cause a lot of confusion. It is especially important with a one way rail system, which is used by most people in the late game stage. Signals like this make no sense, as there is no exit point from the center segment:
    So I decided, that it won't be possible to place a signal in the opposite direction as long as there is no exit from the block in that direction. The signal can be always upgraded to a 2-way signal, by building a signal on the opposite side (the grey marks). As long as it is not done, the indicator will only show the placement on the correct side of the rail and won't allow incorrect placements by accident. This is especially useful when signaling junctions like this:
    From the little testing I did, this is going to be one of those changes that will make us wonder, how could we play without it before? As always, let us know what you think on our forums.


    [ 2016-04-15 11:09:53 CET ] [ Original post ]

    Friday Facts #133 - The train struggle

    Hello Factorio players!

    Steam Account Linking


    We recently launched a new system on our webpage for linking a Factorio website account with a steam account. This will be used from now on to verify that the user making the key request is legitimate, and it should help reduce the amount of fraud we have been seeing on our website. Another feature of this is that now users who purchased the game on steam, can link their accounts and allow them to download the website versions of the game. This is all in preparation for 0.13 where account will be used to access the modding portal and the multiplayer matching server and the authentication service:

    Authentication service


    Now, when you are playing a multiplayer game and someone joins, the username he has could be anything he would like. This can be obviously used to cause havoc. To solve this, the servers will have an option (on by default) to require authentication by the Factorio website before users can connect. This will be essential for implementing the admin system. The plan of the admin system is quite simple, the player starting the game is admin by default, and he can promote other to admins, kick and ban other people.

    The train struggle


    The promise to solve the irregular size of the train wagons, mainly the difference between vertical and horizontal size, put a lot of wrinkles on our faces. We had countless discussions with Albert about the possible solutions. Our goal is to make the vertical and horizontal train stations, to have the same dimensions, something like this:

    But the problem is the transition between these two directions. The core of the whole problem is, that the Factorio grid is squares, but the game isn't a top down view. The game uses a dimetric projection at an angle of 45 degrees. This means that the top down view of the Factorio tile is actually a rectangle with a dimensions of 1 by 1.414 (square root of 2 ). It was probably a mistake to make it this way, if I could go back in time 4 years and give myself advice to not do it this way, I would, but I have no time machine so we have to live with it as it is. This leads to the problem with trains, when you rotate the train wagon, the vertical variant occupies less tiles, so we compensated for this by making the train tighter in the vertical direction, which results in different lengths of the train stations.
    The first solution we thought about, was to just stretch the train secretly as it is rotated. But as the difference is 41%, it would really not be hideable and it would make it look like it was made of rubber.
    We were also considering different options, such as a piston in the middle of the train wagons that would extend when it rotates to vertical direction and similar crazy ideas. But nothing really made any sense to us. The solution came from the idea to use the gap. The inserter wouldn't be able to access the train in the gap, which would be a clear rule that could be easily applied even when the gap is tiny in the horizontal direction. If we make the length of the wagon 6 and the gap 1, we can make the gap look really tiny in horizontal direction, but extend it in vertical.

    These are far from perfect, but with some little adjustments, like a connection rod, and slight stretching , it might actually work, which is a big relief.

    Loader part 2


    I have been thinking about the loader every other day since the last introduction of the idea. There are so many aspects to it, as it affects core parts of the game, and it can potentially destroy a lot of small optimisation puzzles. The main reason why I wanted the loader, is to lower the gap between transport belts and logistic robots in the late game. The solution that I'm considering now is the Heavy Inserter. It would be just a different kind of inserter, that would apply the stack size bonus also when putting things from/to transport belts. Programming wise this is very simple to do, and it would also not drain the precious time of our graphics department. Apart the different color/graphics of the inserter it would look as this:

    Ease of use 2


    In the meantime, we are still adding nice little improvements to the ui. It is now possible to click the alert icon to open the map to the location of the alert. The map now zooms towards the cursor rather than the center of the screen. It is also possible to right-click and drag to move the map around. The blueprint icon can now use both fluid and circuit (virtual) signal icons. The production statistics now contain the overall sum. It is now also possible to select individual items in the production/electric statistics, to limit the graph to only show these items. As the graph is now, it doesn't show the production for small scale items well, when the production of the other items is so large. As always, let us know what you think on our forums.


    [ 2016-04-08 22:14:21 CET ] [ Original post ]

    0.12.30 - bugfix release

    • Changes
      • Mod checksums are calculated when the game starts and are compared with other peers when joining a multiplayer game. This is to ensure everyone has exactly the same mod in order to prevent desyncs caused by local changes made to mod files.
    • Bufixes
      • Fixed strange outer corner rendering for terrains with the same layer. more
      • Fixed Factorio timing out of a multiplayer game when closed by pressing the X button more
      • Building things after quitting a multiplayer game is no longer possible and no longer crashes the game. more
      • Fixed memory leak with special signals in the circuit network.
      • Fixed crash when killing the player in on_built_entity. more
      • Fixed crash when making blueprints of ghosts with some now-invalid circuit connections to other ghosts. more
      • Fixed player's shooting target not updating properly when the target's force became friendly more
      • Fixed the documentation of CircuitCondition more
      • Fixed that the ignore_planner field of Command would expect an integer instead of a boolean. more
      • Starting value of progress bar is now properly set based on the input. more
      • Fixed crash when destroying entity with empty corpse string. more
      • Fixed mining drills getting stuck when built pointing at rails and then rotated. more
      • Fixed remote.call() within the same mod passing invalid data. more
      • Fixed the typo in the error "mulitplayer.cannot-load-downloaded-map", the cause of the error wasn't displayed because of it. more
      • Fixed that the server could get desynced and in a state where he has no one to download from. more
      • Fixed that the train tooltip was showing the current station as the next one when in the station. more
      • Fixed crash when a Lua function was used as a value in a table in data.raw more
      • Fixed the tooltip of the inventory limit feature to "Limit the inventory part to be filled by machines.", so it is clear, it limits only input, but not output.
      • Fixed that cancelling a recipe in the crafting queue would reset the crafting timer unnecessarily more
      • Fixed crash when a force other than player, enemy or neutral was used in autoplace specification more
      • Fixed crash when a network interface is deactivated during multiplayer game more
      • Fixed white bar on top of the screen was sometimes present in fullscreen on OS X more
      • Unified the processing of savegame name in --load-game --start-server and --mp-load-game. It can all be supplied with or without the .zip
      • Fixed that collision with point wasn't working properly for curved rail. more
    • Modding
      • Added LuaEntity::unit_group read-only attribute
      • Proper error message when subgroup specified by empty string. more
      • Fixed projectiles with negative acceleration would turn around, fly back and break the game. more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-04-05 21:19:26 CET ] [ Original post ]

    Friday Facts #131 - Roadmap shuffle

    Hello Factory builders.

    0.12 to be finished soon


    We thought that 0.12 was over, but with the influx of new players, there are always more people trying different kinds of ways to crash the game. Like connecting/disconnecting monitors while playing, changing wifi connection while in multiplayer, or changing the system time. Yes, the system time is used on few places and its sudden change can freeze Factorio currently. I had to spend 2 hours investigating a corrupt save, just to find it to be a hardware issue. This reminded me of the blog post by Patrick Wyatt, where he explains that they did a mem/cpu tests when the game started, so they could ignore bogus crash reports. We might consider this in the future. Long story short, only half of the dev time is now spent on bugfixing (This is an improvement), and it should become less after next week. Let's hope 0.12.30 will be the last stable of 0.12.

    0.13 Roadmap


    After some discussions, we decided that our goal of 0.13.0 release date is 1. June, which is 2 months and a week from now. I would like to make clear that it is not a promise but a goal. It seems like a lot of time, but as we already know, things take longer than expected. I had a meeting with our graphics department yeasterday, which is just Albert and Vaclav. We had to make final plans of what we can actually finish and what we can't: Let me summarize the current state of the 0.13 roadmap: Things that are done or almost done:
    • Tech tree
    • Additional train conditions
    • Turrets revisit - Minimised to flame thrower turret and fire system.
    • Better rail building
    • Achievements
    • Multiplayer matching server - more about it in future FFF
    • Better train management possibilities.
    • Modules in blueprints.
    • Power switch.
    • Blueprint book
    • Search field (recipes, technologies, filters, stations and maybe more)
    • and a lot of small things
    These are to be finished:
    • Circuit network additions
    • Redo of the train graphics and fixing the train distances, so they are whole tiles and vertical and horizontal distances are the same.
    • Graphical gui redesign - one of the big things that just had to be done sooner or later, we will definitely talk about it in detail in the future FFF
    • Native mod portal integration
    • Resource generation overhaul.
    • The loader.
    • and a lot of small things as well
    Stuff that had to be postponed to 0.14, so we can deliver the rest:
    • Spidertron
    • Fluid wagon
    • Artillery turret
    • Higher tier mining drill

    Ease of use


    The work on improving the comfort is important and shouldn't be neglected because of features. Some of the changes are really simple, but can help a lot in later stages of the game, like the possibility to put a different module into the slot, without having to clear it first, and the exchanged module goes into the inventory.
    The way to upgrade modules using control click also helps a lot:
    Thanks to Rseding91, modules can be also part of a blueprint:
    Underground pipes and belts can also be built the same way as poles in 0.13: [table] [tr][td]
    [/td][td]
    [/td][/tr][/table]

    We need people


    It is more than obvious, that we should get more people now. We can afford it, there is practically infinite amount of improvements or additions we could work on, and we feel there isn't enough of us. So if you know a good C++ programmer or 3D artist, please send him/her our way, specifically to https://www.factorio.com/jobs

    Achievements will be finished soon


    Albert finished the first pack of icons and I like them a lot. A nice icon can definitely increase the enjoyment of getting an achievement.
    As always, let us know what you think on our forums.


    [ 2016-03-25 16:47:16 CET ] [ Original post ]

    0.12.29 - Bufix release

    It seems like almost all of the new problems are solved. I expect 0.12.30 to solve few smaller issues to be the last 0.12 update. We are starting to spend most of our time on 0.13 again, so stay tuned :)

    • Changes
      • When the game starts with the base mod disabled, it asks you, if you want to enable it.
    • Bugfixes
      • Fixed construction robot crash. more
      • Fixed that multiplayer progress bar windows were blocked by currently opened window. more
      • Fixed another inconsistency with zero signals in combinators more
      • Fixed crash when Steam API intialization failed. more
      • Fixed random crashes when mining/closing and autosave happens at the same tick.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-03-24 10:38:32 CET ] [ Original post ]

    0.12.29 - Bufix release

    It seems like almost all of the new problems are solved. I expect 0.12.30 to solve few smaller issues to be the last 0.12 update. We are starting to spend most of our time on 0.13 again, so stay tuned :)

    • Changes
      • When the game starts with the base mod disabled, it asks you, if you want to enable it.
    • Bugfixes
      • Fixed construction robot crash. more
      • Fixed that multiplayer progress bar windows were blocked by currently opened window. more
      • Fixed another inconsistency with zero signals in combinators more
      • Fixed crash when Steam API intialization failed. more
      • Fixed random crashes when mining/closing and autosave happens at the same tick.
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-03-24 10:38:18 CET ] [ Original post ]

    0.12.28 - Bugfix release

    • Changes
      • Added --port to specify which network port the game should use, when hosting with --start-server or --mp-load-game. This overrides the port specified in the config file.
    • Bugfixes
      • Explosion sounds are now not deafeningly load, when multiple things explode at once.
      • Fixed LuaForce::clear_chart() would crash game if called while chart was refreshing. more
      • Fixed crash when refreshing chart while Direct3D device is lost. more
      • Fixed --config option not complaining about nonexistent file. more
      • Fixed crash when clicking on electric pole that was still in latency state more
      • Fixed freeze of server with more than 255 different players in the savegame.
      • Fixed crash when exiting the map editor while holding power armor on the cursor. more
      • Fixed map exchange string not using segmentation or water size correctly. more
      • Fixed Lua game_view_settings::showentityinfo read/write issues. more
      • Fixed fog-of-war does not work correctly in New Hope level 1. more
      • Fixed inconsistent Offshore Pump collision when building. more
      • Fixed desync reports were not generated. more
      • Fixed that non destructible entities get attacked, so biters could get stuck while trying to attack rails under train. more
      • Control settings window is now scrollable when it can't fit the window. more
      • Fixed Factorio hanging on exit on Linux after copying or pasting more
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-03-22 19:03:56 CET ] [ Original post ]

    0.12.27 - Bugfix release

    • Changes
      • The area of 400X400 tiles is explored when the game starts.
    • Bufixes
      • Fixed that merging two electric network didn't merge the statistics. more
      • Fixed the cyclic/overlaping win/lost sound sample when the game is finished in multiplayer. more
      • Fixed that extra pipe covers could be drawn on top of connected pipes. more
      • Fixed misaligned turrets in the 4. New hope mission. more
      • Fixed some inconsistencies related to zero-signals in circuit networks. more
      • Fixed inconstency between the way inserters and logistic robots picked items from inventories. Logistic robots now prefer items at the end of the inventory and ignore inventory limit. more
      • Fixed LuaForce::clear_chart() would crash game. more
      • The report of different mods when trying to connect to multiplayer game is now scrollable when needed. more
      • Fixed Cargo Wagon Inserter input output inconsistency. more
      • Fixed the mod difference reporting when connecting to multiplayer game. more
      • Found workaround for issue in Visual C++ math library that was causing crashes on unpatched Windows 7. Service Pack 1 for Windows 7 is no longer required.
      • Fixed that placing a rotated blueprint containing a splitter was not possible in some cases more
      • Fixed crash after revive by player port when personal roboport is equipped more
      • Optimised the map bitmap refresh logic 16 times. (the freeze after loading a game or resizing window while playing big saves).
      • Fixed that the "you joined a paused game" message would display on all peers, rather than just the peer who just joined more
      • Fixed slow sprite loading on Direct3D more
      • Fixed the documentation of LuaGameScript::show_message_dialog more
      • Fixed the order of parameters of some functions in the documentation more
      • Fixed that the research screen would pre-select Automation even though it was disabled more
      • Fixed rare crash that could happen when assembling machine recipe was reset the same tick as autosave started. more
      • Fixed the laser/discharge defense names in the set filter dialog. more
      • Better error when wrong bounding box definition is given. more
      • Creating message dialog with non existent image doesn't crash the game anymore. more
      • Localisation errors will no longer stop the game, the result string will just contain the error. more
      • Fixed that the stone wall research was disabled in the New hope campaign level 4, so gates weren't researchable. more
      • The starting value of text property of textfield is properly set based on the input. more
      • Fixed that changing request slots of opened entity through script didn't update the ui. more
      • Fixed map exchange string problems with mods more
      • Fixed freezes on exit with recent NVidia drivers on Gentoo and Arch Linux more
      • Proper notification when quick bar slot can't be selected as there is no place to put the item in the cursor.
      • Fixed crash on Linux after running xrandr --off more
      • Fixed Rocket Silo GUI skipping 53%. more
      • Another attempt at fixing X11 copy/paste more
      • Better message when the server leaves a multiplayer game more
      • Fixed the bad values of defines.furnace_source, defines.furnace_result and added missing defines.furnace_modules. more
      • Fixed that modded saves could get unloadable without mods when they have entities removed in the loading transitions that were in more than one network.
      • Fixed that it was possible to have unlimited range with melee weapon after running out of ammo. more
      • Fixed that LuaPlayer::remove_item didn't remove from cursor stack when the player was using god controller. This also fixes the bug in the tight spot scenario. more
      • Fixed black screen after UAC poped up in main menu more
    • Scripting
      • Documented extra unit group status return values. more
    • Modding
      • Added action_range to mining tool prototype (with the default of 1.5).
    You can get experimental releases by selecting the 'experimental' beta branch under Factorio's properties in Steam.


    [ 2016-03-18 20:45:31 CET ] [ Original post ]

    Factorio
    Wube Software LTD. Developer
    Wube Software LTD. Publisher
    2020-08-14 Release
    Game News Posts: 506
    🎹🖱️Keyboard + Mouse
    Overwhelmingly Positive (150963 reviews)
    The Game includes VR Support
    Public Linux Depots:
    • Factorio Linux64 [306.86 M]
    • Factorio Linux32 [300.1 M]
    Available DLCs:
    • Factorio: Space Age
    Factorio is a game in which you build and maintain factories. You will be mining resources, researching technologies, building infrastructure, automating production and fighting enemies. In the beginning you will find yourself chopping trees, mining ores and crafting mechanical arms and transport belts by hand, but in short time you can become an industrial powerhouse, with huge solar fields, oil refining and cracking, manufacture and deployment of construction and logistic robots, all for your resource needs. However this heavy exploitation of the planet's resources does not sit nicely with the locals, so you will have to be prepared to defend yourself and your machine empire.

    Join forces with other players in cooperative Multiplayer, create huge factories, collaborate and delegate tasks between you and your friends. Add mods to increase your enjoyment, from small tweak and helper mods to complete game overhauls, Factorio's ground-up Modding support has allowed content creators from around the world to design interesting and innovative features. While the core gameplay is in the form of the freeplay scenario, there are a range of interesting challenges in the form of the Scenario pack, available as free DLC. If you don't find any maps or scenarios you enjoy, you can create your own with the in-game Map Editor, place down entities, enemies, and terrain in any way you like, and even add your own custom script to make for interesting gameplay.

    Discount Disclaimer: We don't have any plans to take part in a sale or to reduce the price for the foreseeable future.

    What people say about Factorio


    • No other game in the history of gaming handles the logistics side of management simulator so perfectly. - Reddit
    • I see conveyor belts when I close my eyes. I may have been binging Factorio lately. - Notch, Mojang
    • Factorio is a super duper awesome game where we use conveyor belts to shoot aliens. - Zisteau, Youtube

    MINIMAL SETUP
    • OS: Linux (tarball installation)
    • Processor: Dual core 3Ghz+Memory: 4 GB RAM
    • Memory: 4 GB RAM
    • Graphics: OpenGL 3.3 core. DirectX 10.1 capable GPU with 512 MB VRAM - GeForce GTX 260. Radeon HD 4850 or Intel HD Graphics 5500
    • Storage: 3 GB available space
    RECOMMENDED SETUP
    • OS: Linux (tarball installation)
    • Processor: Quad core 3GHz+Memory: 8 GB RAM
    • Memory: 8 GB RAM
    • Graphics: OpenGL 4.3 core. DirectX 11 capable GPU with 2 GB VRAM - GeForce GTX 750 Ti. Radeon R7 360
    • Storage: 3 GB available space
    GAMEBILLET

    [ 6019 ]

    6.79$ (15%)
    16.79$ (16%)
    16.57$ (17%)
    16.99$ (15%)
    33.59$ (16%)
    24.87$ (17%)
    8.47$ (15%)
    8.29$ (17%)
    8.39$ (16%)
    20.00$ (50%)
    8.27$ (17%)
    25.19$ (16%)
    30.99$ (38%)
    16.97$ (15%)
    34.61$ (12%)
    16.96$ (15%)
    42.49$ (15%)
    16.79$ (16%)
    33.97$ (15%)
    8.59$ (14%)
    25.46$ (15%)
    41.49$ (17%)
    42.46$ (15%)
    16.52$ (17%)
    12.71$ (15%)
    12.71$ (15%)
    16.59$ (17%)
    42.99$ (14%)
    4.12$ (17%)
    12.74$ (15%)
    GAMERSGATE

    [ 1366 ]

    7.5$ (85%)
    2.13$ (96%)
    7.5$ (85%)
    7.49$ (63%)
    0.3$ (92%)
    0.38$ (92%)
    1.5$ (90%)
    0.75$ (85%)
    1.5$ (92%)
    11.25$ (77%)
    1.13$ (92%)
    17.99$ (10%)
    5.25$ (74%)
    11.99$ (40%)
    8.44$ (66%)
    11.89$ (30%)
    1.69$ (81%)
    3.94$ (74%)
    3.67$ (47%)
    9.37$ (63%)
    6.56$ (81%)
    2.69$ (91%)
    15.0$ (70%)
    6.44$ (82%)
    0.9$ (85%)
    0.9$ (91%)
    0.75$ (92%)
    5.84$ (55%)
    8.5$ (79%)
    3.38$ (62%)

    FANATICAL BUNDLES

    Time left:

    1 days, 20 hours, 16 minutes


    Time left:

    14 days, 20 hours, 16 minutes


    Time left:

    20 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    17 days, 20 hours, 16 minutes


    Time left:

    42 days, 20 hours, 16 minutes


    Time left:

    22 days, 20 hours, 16 minutes


    Time left:

    14 days, 20 hours, 16 minutes


    Time left:

    49 days, 20 hours, 16 minutes


    Time left:

    38 days, 20 hours, 16 minutes


    HUMBLE BUNDLES

    Time left:

    0 days, 14 hours, 16 minutes


    Time left:

    1 days, 14 hours, 16 minutes


    Time left:

    2 days, 14 hours, 16 minutes


    Time left:

    9 days, 14 hours, 16 minutes

    by buying games/dlcs from affiliate links you are supporting tuxDB
    🔴 LIVE