Multiplayer: Difference between revisions
Line 242: | Line 242: | ||
* [http://www.factorio.com/blog/post/fff-76 Lock step architecture] | * [http://www.factorio.com/blog/post/fff-76 Lock step architecture] | ||
* [http://www.factorio.com/blog/post/fff-99 Client-server connections] | * [http://www.factorio.com/blog/post/fff-99 Client-server connections] | ||
* [http://www.factorio.com/blog/post/fff-143 NAT punching, | * [http://www.factorio.com/blog/post/fff-143 NAT punching, introduced in 0.13] | ||
== More Guides == | == More Guides == |
Revision as of 17:03, 30 December 2016
Factorio supports multiplayer games in additional to the single-player campaign and scenarios. By default, multiplayer games run the CO-OP freeplay scenario where all players work together to launch a rocket with a satellite into space. Other scenarios, including PvP maps, are available for download from the Maps and Scenarios forum.
Currently, joining a multiplayer game requires either that all players be on the same LAN or that the host have a public IP address. The next version of Factorio, 0.13, will support a public multiplayer game lobby for locating games as well as NAT punching to make connecting to a server without a public IP address more seamless.
History
Because of the potentially immense amount of activity on a map, the game engine utilizes a lock step architecture. All instances of the game run full simulations of the entire world and only player actions are transferred across the network.
Multiplayer games were introduced to Factorio with version 0.11.0. The only connection method available was peer-to-peer mode which meant every player had to be able to directly communicate with every other player. In version 0.12.4, a client-server mode of communication was introduced in which the server (either a dedicated one or the player who hosted the game) relays messages to all peers. This means that direct connection between all players is no longer necessary. The client-server mode will be the only available in 0.13.
As of version 0.12.0, the game features "latency hiding" mechanics where the game simulates some of the player's actions locally to make some common interactions (such as moving the player's character) more fluid. Latency hiding is enabled by default, but it can be enabled or disabled in Options → Other → Enable multiplayer latency hiding. Not every action is a part of latency hiding – most notably, car or train driving and shooting are not a part of it.
Setting Up a Multiplayer Game
Use the Multiplayer button in the game menu to start a multiplayer game. One player starts the game and acts as the host. That player should provide the other players with his or her IP address. They can then use that IP address to join the host's game.
Other notes and tips:
- All game instances need the installation of exactly the same game-versions and mods.
- Factorio uses the port 34197. The port can be changed in the config file.
- Factorio uses UDP only. Make sure you configure your router's port forwarding correctly. (The game builds it's own "reliable delivery" layer built on UDP to deal with packet loss and reordering issues.)
- Make sure there is no firewall or anti-virus blocking the UDP-packets.
- See the section below for help configuring your networking set up.
- The hard limit for the number of players is 65535. :)
Voice Chat
- It is recommended that players use voice chat (TeamSpeak, Skype) because you need to talk a lot to coordinate connections, building, handling attacks, etc. TeamSpeak servers are posted in the multiplayer forum.
Finding Other Players
- Use the multiplayer board in the forum.
- Many players use other software like Evolve to meet other players. This also has the "advantage" of creating a virtual LAN among the players. See down under software.
- Some also use Steam to find other players.
- There is an external server browser with various search options.
- Tell your friends to buy Factorio, then play with them!
Connecting to a Server Behind NAT
Factorio requires that the server (in client-server mode) or all peers (in peer-to-peer mode) have a publicly accessible IP address or that all players are on the same LAN. If you are behind NAT, you must set up port forwarding (see above for port number) or use virtual LAN software such as Hamachi or Evolve.
By default, multiplayer games will be launched in client-server mode (also multiplayer forwarding mode). In this mode, all clients send their network traffic to the server and the server forwards the traffic to the other clients. The advantage of this is that it allows games where some players are inside a LAN and others are outside. The disadvantage may be slightly more lag as packets must travel an extra hop (through the server). Multiplayer games may be launched in peer-to-peer mode to disable this forwarding behavior by checking the Use peer-to-peer communication box when starting the game as the host. Using peer-to-peer is no longer recommended and will be removed entirely in 0.13.
- Forwarding ports without logging into your router
- A guide for connecting with Evolve
- A guide for connecting with Hamachi
Game Types
Co-op
In co-op mode, all players are on the same force which means all players share the same research progression, any player can access items stored in a container built by any other player, and defensive structures built by any player will not target any other player.
To start a co-op game:
- Launch Factorio
- Click Play
- Click Multiplayer
- Click New game
- Select map generator options, then click Generate
- Choose latency and other settings, then click Play
- Other players can now join the game
PvP
In PvP mode, players can be on different forces. Each force can have one (free-for-all) or more players (teams). Each force has its own independent research progression. Additionally, each force's turrets and combat bots will attack other players as enemies, unless a cease fire is set. Note that, depending on the scenario, cease fires may be unidirectional — setting a cease fire with an opposing force does not guarantee a cease fire from them in return.
To start a PvP game, you must have a PvP-compatible scenario downloaded (or use the console commands to manually assign players to different forces, see below). PvP scenarios can be found in the Maps and Scenarios forum.
Example PvP scenarios:
After downloading a PvP scenario, you need to move it to your application directory, and create the multiplayer game using the scenario.
- Download the scenario and place the scenario directory in the scenarios directory within your user data directory.
- Launch Factorio
- Click Play
- Click Multiplayer
- Click Custom scenario
- Choose the PvP scenario you want under User scenarios and click Create
- Choose latency and other settings, then click Play
- Other players can now join the game
Forces
Forces can be manually created via the console. This allows any map/scenario to be used for PvP. This may not be as convenient as a pre-made PvP scenario, as there will be no way for players to turn on/off cease fires other than through the console.
Each created force has its own research progression and different forces may attack each other.
The console commands for setting up and controlling forces are below:
game.create_force("Name") --Creates the force "Name" game.players["Player_name"].force = game.forces["Name"] --Sets this player to the new force game.forces["Name"].set_cease_fire("Other_force_name", true) --Sets the new force ceasefire to the "other force" game.forces["Name"].set_spawn_position({x = 10, y = 20}, game.surfaces[1]) --Sets the spawn position of the force game.print(#game.forces) --Prints the number of forces for name, force in pairs (game.forces) do game.print(name) end --Prints the name of all the forces
Dedicated/Headless server
As of Factorio version 0.12.0 onwards, a dedicated (or headless) server can be started using the --start-server command line option. You can run factorio --help to get a list of all command-line arguments that Factorio accepts.
In the headless mode:
- Graphics are not initialized (faster start up, less memory usage, works on completely headless servers)
- Game starts immediately and loads a save given as a parameter to the command
- The server has no character in game
- Game is paused while there are no players connected (though this can be overridden using the --no-auto-pause option)
- Saves the game on exit (and autosaves normally)
Please note that there has been a slight change between 0.12, 0.13 and 0.14 in how --start-server (and others) interpret the given parameter. Version 0.12 expected --start-server to be followed by a save name, that was to be found in the saves directory. 0.13 instead expects --start-server to be followed by a path to a save file. I.e. if you did factorio --start-server foo in 0.12, you probably want to use factorio --start-server saves/foo.zip in 0.13.
You will need to create your save file before you start the server, as the dedicated server REQUIRES a save file to be provided. This can easily be done using the --create command-line argument. For example:
./bin/x64/factorio --create ./saves/my-save.zip # This creates a new save, as if by clicking the New Game button in the GUI ./bin/x64/factorio --start-server ./saves/my-save.zip # This starts a server that will host the file created on the previous line
Starting with version 0.13, --create also accepts --map-gen-settings if you want to use non-default map generation. To use it, create a file with the desired map settings (see the file data/map-gen-settings.example.json for an example), and run:
factorio --create saves/my-save.zip --map-gen-settings path-to-file-with-desired-map-generation-settings.json
Starting with version 0.14.12, factorio has moved some command-line options into the server-settings.json file. Starting factorio server requires you to specify the location of the server-settings.json file. By default this is in the factorio data folder. For example to start factorio using the most recent saved map, you would run:
./factorio --start-server-load-latest --server-settings ./data/server-settings.json
Below are basic instructions for starting a dedicated server on Windows and Linux.
Windows
- Go to your Factorio.exe folder (Probably 'C:\Program Files\Factorio\bin\x64\')
- Create a text document, paste the following and make appropriate entries:
@echo off ::============================================================================================================== :: Replace the appropriate entries below to suit your installation (Default install example shown) ::============================================================================================================== set FactorioExeLocation=C:\Program Files\Factorio\bin\x64\ set SaveFileName=YOURSAVENAME.zip set SaveLocation=C:\Users\YOURWINDOWSUSERACCOUNT\AppData\Roaming\Factorio\saves\ set ServerSettingsFileName=server-settings.json set ServerSettingsLocation=C:\Program Files\Factorio\data\ ::============================================================================================================== cd %FactorioExeLocation% echo. echo. echo PREPARING TO LAUNCH FACTORIO SERVER... echo. echo Save to be loaded: echo %SaveLocation%%SaveFileName% echo. echo Server Settings to load: echo %ServerSettingsLocation%%ServerSettingsFileName% echo. echo. echo *** Remember to use Ctrl+C to ensure saving when finished instead of simply closing this of this window *** echo. echo. pause 3 ::============================================================================================================== :: ***NOTE: The line below launches factorio in headless mode with desired server settings, add any other :: desired arguments to end of the line. Use "factorio.exe --help" for a list of all supported arguments. ::============================================================================================================== factorio.exe --start-server "%SaveLocation%%SaveFileName%" --server-settings "%ServerSettingsLocation%%ServerSettingsFileName%" pause 3
- Save the file as server.bat. Important: At 'Save as type:' select 'All Files'
- Reminder: Be sure to have replaced YOURSAVENAME and YOURWINDOWSACCOUNTNAME with correct information.
- Use the server.bat to start your server.
- The console log will be shown in the window.
- To close the server, select the console window press Control+C. If you just close it without pressing this, it will not save your game.
- Forward Ports: You will find detailed instructions for your specific router on the web
Linux
This step-by-step guide has been verified on fresh CentOS 7 and RHEL 7 installs but should be applicable with little to no changes on most distribution.
The guide assumes you will install the headless server under /opt/factorio, adjust paths according to your own setup. We will also suggest that you run the Factorio server as a separate user to harden security of your setup.
Note that there are two distinct packages for Linux that can be used to run a headless server. First is the usual Linux download, that contains the full game. The other is the special headless package. The headless package does not contain any files irrelevant for a pure server, such as graphics and sounds. It is also not linked against libraries that may not be present on a server machine, such as Xlib, libGL or libasound.
This guide does not handle firewall/port forwarding since this can be done in various ways on Linux (make sure to read up how this is done as a Linux admin on your particular distribution)
You can use the Linux factorio-init script to start/stop your headless server in a much better way. The script will ensure you only ever use the most recent save when your server starts (even if that was an auto-save) while also letting you set a number of other settings like Autosave frequency and Latency settings. This script will also simplify updating the server when combined with the Linux factorio-updater script.
- Download the selected package -- either full game or the headless package -- and upload the linux tar.gz package to your server /tmp
- Extract the package in /tmp to /opt/factorio
#cd /opt/ #tar -xzf /tmp/factorio.tar.gz # Use the correct filename. It includes the factorio version number
- Add a new user to your system and assign ownership of the factorio dir to it (please, do not run as the root user)
#useradd factorio #chown -R factorio:factorio /opt/factorio
- Try the binary
#su factorio #/opt/factorio/bin/x64/factorio --start-server savename
As long as it fails saying it cannot find/open the savename.zip you are set! Just upload a save from your own computer and put it in the /opt/factorio/saves directory, or use the --create ./saves/newgame.zip argument
How to List Your Server-Hosted Game on the Matching Server
In order to publish the game to the matching server, Factorio needs to be given some more information than just the save file location. These information are provided in a server settings file.
To create a server settings file, look at the example file located in data/server-settings.example.json in the Factorio Application Directory. The recommended way is to make a copy of this example file and edit the copy.
The following values can be changed:
- Name: This will be the name under which the server will be listed in the server browser
- Description: A brief description of your server
- Tags: A list of game tags
- Max Players: Allows you to limit the number of players that can be connected to the server at the same time. If you want no limit, just set max_players to 0.
- Visibility for server browser: May be either public, lan or hidden.
- Public: The server will appear in the public server list. This requires the login credentials below to be filled in.
- LAN: The server will not appear in the public server list, but will be available through the Play On LAN button
- Hidden: Clients will have to connect using the server's IP address
- User credentials using a username and password or authentication token: These are necessary if you wish to make the server public. Otherwise, they can be left empty.
- For security reasons it is recommended to use authentication token as this document is stored as plaintext. Though it should be noted that an authentication token is a sensitive piece of information as well, and you are well-advised to keep it secret.
- Server Password
- Field name is game_password
- Whether to verify user identity
(There are additional values in v0.14 of factorio.)
Technical Implementation Details
Notes about some technical details surrounding multiplayer have been published by the development team in several Friday Facts blog posts:
More Guides
- How to set up Factorio server with cookbook
- How To set up a Factorio Multiplayer Server | Guide | Tutorial, by Teaspoon
- Tips to connect in multiplayer, by Nondre
Miscellaneous Tips
- The key for Console commands is also used initiate chat in multiplayer. To execute a command instead of chatting, you need to type /c before the command. Commands executed are visible to all players. Additionally, the multiplayer game must have been started with commands allowable for commands to work.
- Set the player's color using the command
/c game.players["player_name"].color = {r=0.7, g=0.5, b=0.1, a=0.9}
r, g and b are for red, green and blue respectively (possible values are between 0 and 1, use the right-most column on http://prideout.net/archive/colors.php to convert colors to rgb numbers). a is alpha channel aka Transparency of the color to the base texture.
History
Maintainer note: The following history may not be fully up to date, or comprehensive. Factorio's multiplayer has undergone a great deal of small changes since its inception.
- 0.14.14:
- Added multiplayer server option "Autosave only on server".
- Deconstructing/canceling deconstruction sets the "last user" on an entity.
- Decreased the size of connection accept message with lot of mod which could help some people with 50+ mod multiplayer games.
- 0.14.13:
- Reconnecting to multiplayer game that the player is already in (due to being dropped, most often) instantly closes the previous connection and connects the player.
- 0.14.11:
- Multiplayer usernames can only consist of letters, and
-_.
characters.
- Multiplayer usernames can only consist of letters, and
- 0.14.10:
- Disabled 32bit (x86) multiplayer. All hosts and members must be running the 64bit (x86_64) version of the game.
- 0.14.8:
- More than 10 players in one game will reduce the rate the game is saved to the server.
- 0.14.6:
- Username is now set to username setting, not email.
- 0.14.5:
- Added AFK Auto kick interval to multiplayer host settings (with never as default).
- 0.14.3:
- 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).
- 0.14.2:
- Can specify limit of upload speed when hosting.
- 0.14.0:
- Server doesn't stop/slow down the game when some client is too slow, stops communicating or saves the game longer than the server.
- Players automatically quit game after 3 desyncs.
- Removed the option to enable/disable latency hiding, it is always on on clients (and off on the server).
- 0.13.10:
- Server stdout messages now contain timestamps and message-type tags
- 0.13.2:
- Limit multiplayer player name to 60 characters.
- 0.13.0:
- Improved Multiplayer game UX
- Server games are published to the server and clients can browse existing games.
- Removed multiplayer peer-to-peer mode.
- Building sound is played also for other players in multiplayer.
- 0.12.31:
- Human readable error notice when multiplayer connection wasn't successful. (https://forums.factorio.com/23132)
- Improved map download speed when connecting to multiplayer game.
- 0.12.30:
- 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.
- 0.12.28:
- Added --port to specify which network port the game should use, when hosting with --start-server or --mp-load-game.
- 0.12.27:
- The report of different mods when trying to connect to multiplayer game is now scrollable when needed.
- Better message when the server leaves a multiplayer game
- 0.12.11:
- Added --no-auto-pause: When running as a server, --no-auto-pause will prevent stopping the game when no players are connected.
- 0.12.9:
- Added resume button to multiplayer game menu
- 0.12.7:
- New command line options for the headless server: --disallow-commands and --peer-to-peer
- 0.12.5:
- Multiplayer broadcast (heartbeats) is done via a single message when not using peer2peer.
- Further optimizations in size of the Multiplayer heartbeat (message sent every tick).
- LatencyState is suspended when player is killed (and waiting for respawn) in Multiplayer.
- 0.12.4:
- Simple mechanism for multiplayer relaying via the server.
- Less annoying glitches when running and shooting in multiplayer with latency hiding.
- 0.12.0: {{{2}}}
- 0.11.19:
- Multiplayer dropping threshold is doubled during map upload / download.
- 0.11.17:
- Autosaves in multiplayer are performed at the same time by all clients (interval is set by hosting player).
- Progress bar is shown when non-responsive peers are about to be dropped from the game in the Multiplayer.
- Progress bar is shown when other peers in multiplayer are saving map.
- 0.11.16:
- Revived character (after dying in multiplayer) are placed on the spawn point instead of the center of the map.
- 0.11.2:
- Mods that don't affect game state are not needed to be synchronised when playing multiplayer game or replaying game.
- 0.11.0:
- Introduced