[GH-ISSUE #4819] [Bug]: Core Keeper - Seems to ignore options in config files. #2987

Closed
opened 2026-02-27 03:06:38 +03:00 by kerem · 0 comments
Owner

Originally created by @Kylindrias on GitHub (Sep 2, 2025).
Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/4819

User story

Core Keeper seems to ignore config file settings such as password, IP and port. Must be set as launch parameters instead.

Game

Core Keeper

Linux distro

Ubuntu 24.04

Command

command: start

Further information

So I spent hours last night struggling to play this game with my son - That's not a fault of LGSM, unfortunately this game while fun just happens to have some of THE WORST multiplayer features of any game I have ever player (I have played C&C using a null modem if that gives you any indication of how bad this games MP is...)

Anyway, the game simply seems to ignore any of the config file options and instead these options MUST be set as launch parameters. If you attempt to do something like change the port the game will just ignore this and launch the game using a random port of its choosing using the garbage PlayFab system or something like that which doesn't allow cross-play and requires you to join via random code (more on this in a sec).

The game ALSO generates a random password and it doesn't tell you what this password is... So you need to go hunting for it under the GameID.txt file hidden inside the games server folder.

To fix this instead of specifying a port in the config file set it with -port 1234 as a launch parameter and then check the UDP connections and you'll see the game is now running with that specified port as expected.

As the patch allowing crossplay just came out recently LGSM doesn't do a great job of documenting what needs to be done to get this game working properly (Again, I'm not faulting LGSM here, the developers of Core Keeper did a poor job with the dedicated server).

So I'm not really sure what the best solution for this would be and I realise this is an edge case, but perhaps...

Many configs for this game need to be set as launch parameters instead.

Also when you run 'ckserver details' the details give you incorrect information. Eg, I thought the game was launching on port 1234 because LGSM SAID it was running on port 1234, but it's just giving you the information from the config file, which we have established is actually just ignored, so instead LGSM needs to provide the port specified in the launch parameters.

Providing the password as well in the game details would be useful as again, I had a password specified in the config file and kept trying it over and over until I realised the game had generated a random password in the GameID.TXT file which worked.

Giving the GameID in the Game Details is probably a good idea too. I'm not 100% sure if you can use the GameID and the IP/Port/Password at the same time, but for people that want to use that method instead they'll need to know the GameID they should be providing other players.

Example of my working command-line parameters:

xvfb-run ./CoreKeeperServer -batchmode -datapath -port 1234 /home/ckserver/serverfiles/gamedata/ckserver -logfile /home/ckserver/serverfiles/logs/ckserver-game.log

cat ServerConfig.json
{
    "gameId": "qkZKFS44B5wTUggmEg1v23qvvcbh",
    "password": "Icecream34",
    "world": 0,
    "worldName": "LinuxGSM",
    "worldSeed": "0",
    "hashedWorldSeed": 0,
    "maxNumberPlayers": 100,
    "maxNumberPacketsSentPerFrame": 1,
    "networkSendRate": 20,
    "worldMode": 0,
    "seasonOverride": -1
}

Don't worry that code and password don't work anyway. Censored the ones below. =)

cat GameInfo.txt 
No GameID found. Creating new GameID for the session.
No proper Password found. Creating new Password for the session.

Allowed platforms: All
GameID: Atbxxxxxxxxxxx3LH
Local IP: 0.0.0.0
Public IP: xxx.xxx.xxx.xxx
Port: 1234
Password: 7xxxxxxxxxxx6

Paste to ip-field in "join via IP" menu to easily fill all values
xxx.xxx.xxx.xxx:1234::7xxxxxxxxxxw6

Here you can see what I had set in the server config which was ignored compared to what the server generated automatically (I think putting password and gameID as command line parameters is possible too.

Here is the contents of ARGUMENTS.TXT which describes the launch parameter options.

## World Index

USAGE: -world INDEX

Select the world index to use. Setting this parameter allows you to have multiple save files in your data path and switch between them. INDEX may take any value between 0 and 29, inclusive

EXAMPLE: -world 3

## World Name

USAGE: -worldname NAME

Select the world name to use. This is the name that connecting clients will see in their network settings. If NAME contains spaces it must be place in quotation mark.

EXAMPLE: -worldname "Core Keeper Server"

## World Seed

USAGE: -worldseed SEED

Select the world seed to use. This is the seed that is used to determine most random behavior in the game, most notably world generation and dungeon placement. SEED is an arbitrary string. If SEED contains spaces it must be placed in quotation marks. The seed behaves the same as if it was set during world creation in the regular game client. Only takes effect if set when the world is first created. Omit to generate a random seed.

EXAMPLE: -worldseed "Nice World"

## Hashed World Seed

USAGE: -hashedworldseed SEED

Similar to -worldseed, but specifies an already hashed seed. This is useful if you have lost access to the original seed string and only have the hashed version. Must be an unsigned 32-bit integer in the range 0 to 4294967295 (inclusive). Ignored if-worldseed is set.

EXAMPLE: -hashedworldseed 42

## World Mode

USAGE: -worldmode MODE

Select the world mode to use. Corresponds to the same setting when creating a world using the regular game client. Default is Normal. Changing between creative and non-creative modes after the world has been created is not supported.

Possible values are (both names and indices are valid):
- Normal (0): Face balanced monsters for a fair and engaging challenge.
- Hard (1): Tackle tougher monsters and reap greater rewards.
- Creative (2): Set your imagination free in an empty, limitless world.
- Casual (4): Encounter gentler monsters in a relaxed, enjoyable setting.

EXAMPLE 1: -worldmode 1
EXAMPLE 2: -worldmode Hard

## Season

USAGE: -season SEASON

Set the server season. If omitted, the season is set based on the current system date.

Possible values are (both names and indices are valid):
- None (0)
- Easter (1)
- Halloween (2)
- Christmas (3)
- Valentine (4)
- Anniversary (5)
- CherryBlossom (6)
- LunarNewYear (7)

EXAMPLE 1: -season 1
EXAMPLE 2: -season Easter

## Content Bundle

USAGE: -activatecontent BUNDLE1,BUNDLE2,...

Activate new content bundles if not already active for this game world. Once activated, the content bundle will stay active permanently for this world. There is no way to undo this. Multiple bundles may be activated at the same time by listing them separated by commas.

Possible values are (both names and indices are valid):
- GiantCicadaBossDungeon (2): A dangerous enemy has appeared! Adding them may overwrite some already explored areas in the Desert of Beginnings.
- NatureBiomeCicadas (3): The Queen's influence extends into nearby areas as well. Adding this bundle introduces a new enemy type to Azeos' Wilderness, which might overwrite some already explored areas in this biome.
- GuaranteedOases (4): Adding this bundle guarantees that this world gets at least a few Oases biomes in the Desert of Beginnings, even if it has already been fully explored. Doing so will overwrite everything in the areas where they appear.
- AbioticFactor (6): A fragment of a research facility has appeared through an extradimensional rift! Adding it may overwrite an already explored area in the Forgotten Ruins.

EXAMPLE 1: -activatecontent GiantCicadaBossDungeon
EXAMPLE 2: -activatecontent GiantCicadaBossDungeon,GuaranteedOases
EXAMPLE 3: -activatecontent 2,3

## Data Path

USAGE: -datapath PATH

Set the save file location. If omitted, the server will default to a subfolder named "DedicatedServer" at the default Core Keeper save location.

EXAMPLE: -datapath "C:/Users/MyUser/Desktop/CKServerSaves"

## Game ID

USAGE: -gameid ID

Select the game ID clients use to connect to this server. Game ID Needs to be at least 15 but at max 28 alphanumeric characters, and may not include Y,y,x,0, or O. If omitted or invalid, a random game ID will be generated.

EXAMPLE: -gameid WH3rhzuk5TfbA4jFuZPg7SmbCHES

## Password

USAGE: -password "Password"

Select the password players should use when trying to join using direct connections. Most characters are allowed if provided between "quotation marks", and maximum length password can be 28 characters. If omitted or invalid, a random password will be generated. Argument only valid when using Direct Connections.

EXAMPLE: -password "PleaseChangeMe"

## Port

USAGE: -port PORT

Select a port to bind to. Setting the port will make the server accept direct connections, effectively enabling cross-play. The port must be open to accept incoming connections. Use -port 27015 to connect to a server on the same LAN. If omitted, the server will instead use the Steam relay network and won't accept direct connections using IP. This argument may only be set using command line arguments. Setting it in ServerConfig.json has no effect.

EXAMPLE: -port 7778

## IP

USAGE: -ip IP

Sets the IP address that the server binds to. Has no effect unless -port is also set. This argument may only be set using command line arguments. Setting it in ServerConfig.json has no effect. If not set, default value 0.0.0.0 is used, which will accept connections from any internal ip.

EXAMPLE: -ip 0.0.0.0

## Max Players

USAGE: -maxplayers COUNT

Set the maximum number of players that can connect to the server. If omitted, the server will default to 8 players. Setting a higher player count may require more server resources or make the session unstable.

EXAMPLE: -maxplayers 16

## Platform

USAGE: -allowonlyplatform PLATFORM

Set the server only allow players from given platform. Effectively disables the cross-play from server. Has no effect unless -port is also set enabling Direct Connections.

Possible values are (both names and indices are valid):
- Steam (1)
- Epic (2)
- Microsoft (3)
- GOG (4)

EXAMPLE 1: -allowonlyplatform 1
EXAMPLE 2: -allowonlyplatform Steam

Relevant log output


Steps to reproduce

  1. Setup CoreKeeper the same way you'd expect any dedicated server to work.
  2. It doesn't work because the developers of this game did everything in their power to ruin multiplayer.
  3. Set options as launch parameters instead and that seems to work.
Originally created by @Kylindrias on GitHub (Sep 2, 2025). Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/4819 ### User story Core Keeper seems to ignore config file settings such as password, IP and port. Must be set as launch parameters instead. ### Game Core Keeper ### Linux distro Ubuntu 24.04 ### Command command: start ### Further information So I spent hours last night struggling to play this game with my son - That's not a fault of LGSM, unfortunately this game while fun just happens to have some of THE WORST multiplayer features of any game I have ever player (I have played C&C using a null modem if that gives you any indication of how bad this games MP is...) Anyway, the game simply seems to ignore any of the config file options and instead these options MUST be set as launch parameters. If you attempt to do something like change the port the game will just ignore this and launch the game using a random port of its choosing using the garbage PlayFab system or something like that which doesn't allow cross-play and requires you to join via random code (more on this in a sec). The game ALSO generates a random password and it doesn't tell you what this password is... So you need to go hunting for it under the GameID.txt file hidden inside the games server folder. To fix this instead of specifying a port in the config file set it with `-port 1234` as a launch parameter and then check the UDP connections and you'll see the game is now running with that specified port as expected. As the patch allowing crossplay just came out recently LGSM doesn't do a great job of documenting what needs to be done to get this game working properly (Again, I'm not faulting LGSM here, the developers of Core Keeper did a poor job with the dedicated server). So I'm not really sure what the best solution for this would be and I realise this is an edge case, but perhaps... Many configs for this game need to be set as launch parameters instead. Also when you run 'ckserver details' the details give you incorrect information. Eg, I thought the game was launching on port 1234 because LGSM SAID it was running on port 1234, but it's just giving you the information from the config file, which we have established is actually just ignored, so instead LGSM needs to provide the port specified in the launch parameters. Providing the password as well in the game details would be useful as again, I had a password specified in the config file and kept trying it over and over until I realised the game had generated a random password in the GameID.TXT file which worked. Giving the GameID in the Game Details is probably a good idea too. I'm not 100% sure if you can use the GameID and the IP/Port/Password at the same time, but for people that want to use that method instead they'll need to know the GameID they should be providing other players. Example of my working command-line parameters: ```xvfb-run ./CoreKeeperServer -batchmode -datapath -port 1234 /home/ckserver/serverfiles/gamedata/ckserver -logfile /home/ckserver/serverfiles/logs/ckserver-game.log``` ``` json cat ServerConfig.json { "gameId": "qkZKFS44B5wTUggmEg1v23qvvcbh", "password": "Icecream34", "world": 0, "worldName": "LinuxGSM", "worldSeed": "0", "hashedWorldSeed": 0, "maxNumberPlayers": 100, "maxNumberPacketsSentPerFrame": 1, "networkSendRate": 20, "worldMode": 0, "seasonOverride": -1 } ``` Don't worry that code and password don't work anyway. Censored the ones below. =) ``` cat GameInfo.txt No GameID found. Creating new GameID for the session. No proper Password found. Creating new Password for the session. Allowed platforms: All GameID: Atbxxxxxxxxxxx3LH Local IP: 0.0.0.0 Public IP: xxx.xxx.xxx.xxx Port: 1234 Password: 7xxxxxxxxxxx6 Paste to ip-field in "join via IP" menu to easily fill all values xxx.xxx.xxx.xxx:1234::7xxxxxxxxxxw6 ``` Here you can see what I had set in the server config which was ignored compared to what the server generated automatically (I think putting password and gameID as command line parameters is possible too. Here is the contents of ARGUMENTS.TXT which describes the launch parameter options. ``` ARGUMENTS.TXT ## World Index USAGE: -world INDEX Select the world index to use. Setting this parameter allows you to have multiple save files in your data path and switch between them. INDEX may take any value between 0 and 29, inclusive EXAMPLE: -world 3 ## World Name USAGE: -worldname NAME Select the world name to use. This is the name that connecting clients will see in their network settings. If NAME contains spaces it must be place in quotation mark. EXAMPLE: -worldname "Core Keeper Server" ## World Seed USAGE: -worldseed SEED Select the world seed to use. This is the seed that is used to determine most random behavior in the game, most notably world generation and dungeon placement. SEED is an arbitrary string. If SEED contains spaces it must be placed in quotation marks. The seed behaves the same as if it was set during world creation in the regular game client. Only takes effect if set when the world is first created. Omit to generate a random seed. EXAMPLE: -worldseed "Nice World" ## Hashed World Seed USAGE: -hashedworldseed SEED Similar to -worldseed, but specifies an already hashed seed. This is useful if you have lost access to the original seed string and only have the hashed version. Must be an unsigned 32-bit integer in the range 0 to 4294967295 (inclusive). Ignored if-worldseed is set. EXAMPLE: -hashedworldseed 42 ## World Mode USAGE: -worldmode MODE Select the world mode to use. Corresponds to the same setting when creating a world using the regular game client. Default is Normal. Changing between creative and non-creative modes after the world has been created is not supported. Possible values are (both names and indices are valid): - Normal (0): Face balanced monsters for a fair and engaging challenge. - Hard (1): Tackle tougher monsters and reap greater rewards. - Creative (2): Set your imagination free in an empty, limitless world. - Casual (4): Encounter gentler monsters in a relaxed, enjoyable setting. EXAMPLE 1: -worldmode 1 EXAMPLE 2: -worldmode Hard ## Season USAGE: -season SEASON Set the server season. If omitted, the season is set based on the current system date. Possible values are (both names and indices are valid): - None (0) - Easter (1) - Halloween (2) - Christmas (3) - Valentine (4) - Anniversary (5) - CherryBlossom (6) - LunarNewYear (7) EXAMPLE 1: -season 1 EXAMPLE 2: -season Easter ## Content Bundle USAGE: -activatecontent BUNDLE1,BUNDLE2,... Activate new content bundles if not already active for this game world. Once activated, the content bundle will stay active permanently for this world. There is no way to undo this. Multiple bundles may be activated at the same time by listing them separated by commas. Possible values are (both names and indices are valid): - GiantCicadaBossDungeon (2): A dangerous enemy has appeared! Adding them may overwrite some already explored areas in the Desert of Beginnings. - NatureBiomeCicadas (3): The Queen's influence extends into nearby areas as well. Adding this bundle introduces a new enemy type to Azeos' Wilderness, which might overwrite some already explored areas in this biome. - GuaranteedOases (4): Adding this bundle guarantees that this world gets at least a few Oases biomes in the Desert of Beginnings, even if it has already been fully explored. Doing so will overwrite everything in the areas where they appear. - AbioticFactor (6): A fragment of a research facility has appeared through an extradimensional rift! Adding it may overwrite an already explored area in the Forgotten Ruins. EXAMPLE 1: -activatecontent GiantCicadaBossDungeon EXAMPLE 2: -activatecontent GiantCicadaBossDungeon,GuaranteedOases EXAMPLE 3: -activatecontent 2,3 ## Data Path USAGE: -datapath PATH Set the save file location. If omitted, the server will default to a subfolder named "DedicatedServer" at the default Core Keeper save location. EXAMPLE: -datapath "C:/Users/MyUser/Desktop/CKServerSaves" ## Game ID USAGE: -gameid ID Select the game ID clients use to connect to this server. Game ID Needs to be at least 15 but at max 28 alphanumeric characters, and may not include Y,y,x,0, or O. If omitted or invalid, a random game ID will be generated. EXAMPLE: -gameid WH3rhzuk5TfbA4jFuZPg7SmbCHES ## Password USAGE: -password "Password" Select the password players should use when trying to join using direct connections. Most characters are allowed if provided between "quotation marks", and maximum length password can be 28 characters. If omitted or invalid, a random password will be generated. Argument only valid when using Direct Connections. EXAMPLE: -password "PleaseChangeMe" ## Port USAGE: -port PORT Select a port to bind to. Setting the port will make the server accept direct connections, effectively enabling cross-play. The port must be open to accept incoming connections. Use -port 27015 to connect to a server on the same LAN. If omitted, the server will instead use the Steam relay network and won't accept direct connections using IP. This argument may only be set using command line arguments. Setting it in ServerConfig.json has no effect. EXAMPLE: -port 7778 ## IP USAGE: -ip IP Sets the IP address that the server binds to. Has no effect unless -port is also set. This argument may only be set using command line arguments. Setting it in ServerConfig.json has no effect. If not set, default value 0.0.0.0 is used, which will accept connections from any internal ip. EXAMPLE: -ip 0.0.0.0 ## Max Players USAGE: -maxplayers COUNT Set the maximum number of players that can connect to the server. If omitted, the server will default to 8 players. Setting a higher player count may require more server resources or make the session unstable. EXAMPLE: -maxplayers 16 ## Platform USAGE: -allowonlyplatform PLATFORM Set the server only allow players from given platform. Effectively disables the cross-play from server. Has no effect unless -port is also set enabling Direct Connections. Possible values are (both names and indices are valid): - Steam (1) - Epic (2) - Microsoft (3) - GOG (4) EXAMPLE 1: -allowonlyplatform 1 EXAMPLE 2: -allowonlyplatform Steam ``` ### Relevant log output ```shell ``` ### Steps to reproduce 1. Setup CoreKeeper the same way you'd expect any dedicated server to work. 2. It doesn't work because the developers of this game did everything in their power to ruin multiplayer. 3. Set options as launch parameters instead and that seems to work.
Sign in to join this conversation.
No labels
Atomic
Epic
cannot reproduce
command: backup
command: console
command: debug
command: details
command: fast-dl
command: install
command: mods
command: monitor
command: post-details
command: restart
command: send
command: start
command: stop
command: update
command: update-lgsm
command: validate
command: wipe
distro: AlmaLinux
distro: Arch Linux
distro: CentOS
distro: Debian
distro: Fedora
distro: RedHat
distro: Rocky Linux
distro: Ubuntu
distro: openSUSE
engine: goldsrc
engine: source
game: 7 Days to Die
game: ARMA 3
game: Ark: Survival Evolved
game: Assetto Corsa
game: Avorion
game: BATTALION: Legacy
game: Barotrauma
game: Battalion 1944
game: Battlefield 1942
game: Black Mesa: Deathmatch
game: Blade Symphony
game: Call of Duty 2
game: Call of Duty 4
game: Call of Duty: United Offensive
game: Counter-Strike 1.6
game: Counter-Strike 2
game: Counter-Strike: Global Offensive
game: Counter-Strike: Source
game: Day of Infamy
game: Dayz
game: Death Match Classic
game: Don't Starve Together
game: ET: Legacy
game: Eco
game: Factorio
game: Factorio
game: Garry's Mod
game: Half-Life
game: Hurtword
game: Insurgecy
game: Insurgecy
game: Insurgency: Sandstorm
game: Just Cause 3
game: Killing Floor
game: Killing Floor 2
game: Left 4 Dead 2
game: Minecraft
game: Minecraft Bedrock
game: Mordhau
game: Multi Theft Auto
game: Mumble
game: Natural Selection 2
game: No More Room in Hell
game: Pavlov VR
game: Post Scriptum
game: Project Zomboid
game: Quake 3
game: QuakeWorld
game: Red Orchestra: Ostfront 41-45
game: Return to Castle Wolfenstein
game: Rising World
game: Rust
game: San Andreas Multiplayer
game: Satisfactory
game: Soldat
game: Soldier of Fortune 2
game: Squad
game: Squad 44
game: Starbound
game: Stationeers
game: Sven Co-op
game: Team Fortress 2
game: Teamspeak 3
game: Teeworlds
game: Terraria
game: The Front
game: Unreal Tournament 2004
game: Unreal Tournament 3
game: Unreal Tournament 99
game: Unturned
game: Valheim
game: Wurm Unlimited
game: Zombie Master Reborn
game: label missing
good first issue
help wanted
info: alerts
info: dependency
info: docker
info: docs
info: email
info: query
info: steamcmd
info: systemd
info: tmux
info: website
info: website
needs more info
outcome: duplicate
outcome: issue resolved
outcome: issue resolved
outcome: issue unresolved
outcome: pr accepted
outcome: pr rejected
outcome: unconfirmed
outcome: wontfix
outcome: wrong forum
potential-duplicate
priority
pull-request
type: bug
type: feature
type: feature
type: feature request
type: game server request
type: refactor
waiting response
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/LinuxGSM#2987
No description provided.