Satisfactory
gamesSatisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!
README
Satisfactory
[!IMPORTANT] Updating for v1.0?
- Ensure any existing servers have the updated Startup Command applied!
- TCP is now required! (See Server Ports for details)
- While not required, it's recommended existing servers delete the
LinuxServerdirectory under~/FactoryGame/Saved/Config/to remove depreciated settings, and reconfigure the settings via the in-game Server Manager.
Authors / Contributors
Game Description
From Coffee Stain's Website:
Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!
Egg Capabilities
- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable.
- Configurable number of rotating autosaves.
- [Experimental] Configurable maximum number of players.
- [Advanced] Configurable networking and server branch settings.
[!NOTE] As of Satisfactory v1.0, most server settings have moved from being configured in the Egg to being configured via the in-game Server Manager.
Please see Server Initialization for what settings can be configured in-game.
Server Ports
| Port | Default | Protocol | Required | Notes |
|---|---|---|---|---|
| Primary | 7777 | UDP & TCP | Yes | Clients connect using this port. UDP is un-encrypted game traffic. TCP is also required for the in-game Server Manager & API, and it is TLS encrypted. |
| Reliable Messaging | 8888 | TCP | Yes | Reliable messaging port. Required for Satisfactory version 1.1 and above. |
[!TIP] *Your internal ports must match your external ports on your network (ie. you can't have an external port of 7778 forwarded to your 7777 internal port; they must match).
Installation/System Requirements
| Bare Minimum | Recommended | |
|---|---|---|
| Processor | Recent x86/64 (AMD/Intel) processor that supports modern instructions (ie. AVX, AES, etc.). No 32 bit or ARM support. | Favours higher single-core performance over multiple cores. If you are running Wings via Proxmox, you may need to set the VM's CPU Type to "host" to avoid session save/load crashes. |
| RAM | 4608 MiB | 8192-12288 MiB (especially for 4 players or large save files) |
| Storage | 5120 MiB | 7168-10240 MiB (or more, depending on save size or frequency) |
| Network | 1 Mbit/s | 1-5 Mbit/s (may require server and client config tweaks) |
| Host OS | Most stable Linux OS branches should work | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. |
| Game Ownership | Not required to start. | Required to fully "initialize" (see Server Initialization below) |
Server Initialization
[!WARNING] The server cannot be joined for the first time via "Join Game -> Join game directly..." on the main menu due to the TLS certificate not being trusted yet. Instead, join via "Server Manager -> Add Server" and you will be prompted to trust the certificate and initialize the server.
For a server to be fully "initialized", a client who owns the game must log into the server to "claim" it and create an administrator password. Then, a new session can be created via the "Create Game" tab in-game, or an existing save file can be uploaded (see Save Files below).
Misc. settings listed below can be configured by an admin client via the Server Manager's "Server Settings" tab, and are currently not set via the Egg:
- Server Name
- Admin Password
- Player Password Protection
- Auto-Load Session Name
- Auto Pause (when no players are online)
- Auto-Save on Player Disconnect
- Disable Seasonal Events
- Autosave Interval
- Server Restart Interval
- Send Gameplay Data (Crash Reports)
- Network Quality
[!NOTE] Currently, Tier 0 (Onboarding) is not possible to play on a dedicated server and it will be automatically unlocked, even if you upload a save in Tier 0. If you would like to play the beginning of the game with Onboarding, it is recommended you play local multiplayer first, and then upload your save after completing Tier 0.
Save Files
[!CAUTION] Stopping the server does not currently save your game! Ensure it is saved before stopping the server!
Save files are located in the following directory, but can be more easily downloaded to your local computer in-game via the Server Manager under the "Manage Saves" tab (admins only).
/home/container/.config/Epic/FactoryGame/Saved/SaveGames/server
An existing save file (including single-player saves) can be uploaded to the server via the Server Manager as well and loaded under the same tab.
If you have forgotten your administrator password or would generally like to reset your server as if it were new, you can delete the following file:
/home/container/.config/Epic/FactoryGame/Saved/SaveGames/ServerSettings.<your_server_query_port>.sav
Console Commands
The "Console" tab in the in-game Server Manager is the only way to execute commands. Entering commands via the Panel do nothing.
List of known commands can be found via the Wiki.
Known Errors/Warnings
The following errors or warnings you see in the console can safely be ignored:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/container/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
LogSteamShared: Warning: Steam Dedicated Server API failed to initialize.
↑ The local file of 'steamclient.so' was attempted to be loaded, but could not because it is not present, causing the warning message. However, the backup /home/container/.steam/sdk64/steamclient.so is loaded successfully (this is the correct behavior according to the Wiki).
Warning: failed to init SDL thread priority manager: SDL not found
↑ This is a common error with Steam related software on Linux, but can safely be ignored.
Exiting abnormally (error code: 130)
↑ This misleading message occurs when stopping the server. It is printed by the Unreal Engine because it doesn't know why it was interrupted (even though it was expected by us). This can be safely ignored if you notice normal engine shutdown logs above.
...Error: Couldn't find file for package...
...Error: Navmesh bounds are too large!...
...Warning: NiagaraSystem...
LogStreaming: Warning: Failed to read file '../../../FactoryGame/Saved/SaveGames/GameAnalytics.sav' error.
↑ These seem to be common error messages with the current experimental version of the game.
Docker Images (1)
| Name | Image |
|---|---|
ghcr.io/ptero-eggs/steamcmd:debian | ghcr.io/ptero-eggs/steamcmd:debian |
Startup Command
./Engine/Binaries/Linux/*-Linux-Shipping FactoryGame -Port={{SERVER_PORT}} -ReliablePort={{RELIABLE_PORT}} Variables (9)
Automatic Updates
Quickly checks for any server updates on startup, and updates if necessary. (1 Enable | 0 Disable)
- Environment:
AUTO_UPDATE- Default:
1- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
boolean
[Repair] Validate Server Files
Leave empty (no value) for OFF or type "true" or "1" for ON. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.
- Environment:
VALIDATE- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
string|nullable
Number of Rotating Autosaves
Number of session auto-saves for the server to keep before the oldest save is deleted and the others are moved down the list.
- Environment:
NUM_AUTOSAVES- Default:
3- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|integer|min:0
[Experimental] Max Players
The server and client are currently not optimized to support more than 4 players. However, you can override this value here at your own risk of poor performance.
- Environment:
MAX_PLAYERS- Default:
4- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|integer|min:1
[Advanced] Client Initial Connection Timeout
Time in seconds to wait for a new client connection to be established before destroying the connection.
- Environment:
INIT_CONNECT_TIMEOUT- Default:
30- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|numeric|min:1
[Advanced] Client Established Connection Timeout
Time in seconds to wait before considering an established client connection timed out. Typically shorter than the time to wait on an initial connection because this connection should already have been setup and any interruption should be trapped quicker.
- Environment:
CONNECT_TIMEOUT- Default:
20- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|numeric|min:1
[Advanced] Branch Name
[Accepted Values: "public", "experimental", or leave empty to use the primary branch of the server] Used to download or switch to a non-primary branch of the game server. "Automatic Updates" and "Validate Server Files" must be set to "1" to switch branches if the server is already installed. NOTE: Any non-primary branches may not be fully compatible/stable!
- Environment:
SRCDS_BETAID- Default:
None- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
string|nullable|in:public,experimental
[Advanced] Satisfactory Dedicated Server App ID
Steam App ID used for installation and updates.
- Environment:
SRCDS_APPID- Default:
1690800- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|integer|in:1690800
Reliable Port
Reliable messaging port. Required for version 1.1 or above.
- Environment:
RELIABLE_PORT- Default:
8888- User Viewable:
- ❌
- User Editable:
- ❌
- Rules:
required|integer|min:0|max:65535
Installation Script
ghcr.io/ptero-eggs/installers:debian/bin/bash#!/bin/bash
# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json
# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord
# Date: 2024/09/10
# License: MIT License
## Download and install SteamCMD
cd /tmp
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
mkdir -p /mnt/server/steamcmd
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
cd /mnt/server/steamcmd
# SteamCMD fails otherwise for some reason, even running as root.
chown -R root:root /mnt
export HOME=/mnt/server
# Install game server using SteamCMD
./steamcmd.sh +force_install_dir /mnt/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) validate +exit
# Set up 32 and 64 bit libraries
mkdir -p /mnt/server/.steam/sdk{32,64}
cp -v linux32/steamclient.so /mnt/server/.steam/sdk32/steamclient.so
cp -v linux64/steamclient.so /mnt/server/.steam/sdk64/steamclient.so
## Satisfactory setup
# Check for successful installation and make the server binary executable.
# Use `find` to see if a valid server binary exists using a wildcard, because
# the binary name may change in the future.
# (eg. it changed when the engine was updated from UE4 to UE5)
cd /mnt/server/Engine/Binaries/Linux
count=$(find . -maxdepth 1 -name '*-Linux-Shipping' -type f -executable | wc -l)
if [[ $count -eq 0 ]]; then
echo -e "\n\nSteamCMD failed to install the Satisfactory Dedicated Server!"
echo -e "\tTry reinstalling the server again.\n"
exit 1
else
chmod +x *-Linux-Shipping
fi
echo -e "\nSatisfactory Dedicated Server successfully installed!\n"