Sunkenland Co-Op Server Configuration via Pterodactyl
Sunkenland is a water based Unity survival title with a small but extremely active modding community. The dedicated server itself is straightforward, but the gameplay levers that operators actually care about (raid frequency, faction aggression, world seed, day length) are buried in two config files and a launch argument string. Pterodactyl is the right surface for this: lift those levers out of the config and expose them as panel startup variables so operators can change a raid timer through a textbox instead of an SFTP round trip.
Prerequisites
- Ubuntu 24.04 with Pterodactyl panel and at least one Wings node.
- The community Sunkenland egg, or the willingness to author one from the steamcmd egg template.
- 6 GB RAM, 4 vCPU, 10 GB disk for a single instance.
- UDP 27015 and UDP 27016 open and routed to the container.
Step 1: Author the Egg Startup Block
Open the Sunkenland egg in Nests, Survival and replace the startup command with a parameterized version that reads from environment variables. Pterodactyl will surface every {{VARIABLE}} placeholder as an editable field on the server settings page.
./SunkenlandServer.x86_64 \ -batchmode -nographics \ -name "{{SERVER_NAME}}" \ -slots {{MAX_PLAYERS}} \ -seed {{WORLD_SEED}} \ -raid_interval {{RAID_INTERVAL_MIN}} \ -faction_aggression {{FACTION_AGGRESSION}} \ -port {{SERVER_PORT}} \ -query_port {{QUERY_PORT}}Step 2: Register the Panel Variables
SERVER_NAME | string | required | "Vardoran Reef"MAX_PLAYERS | int 2-8 | required | 6WORLD_SEED | int | required | 12345678RAID_INTERVAL_MIN | int | required | 90 # minutes between raidsFACTION_AGGRESSION | float | required | 1.0 # 0.5 calm, 2.0 brutalSERVER_PORT | int | required | 27015QUERY_PORT | int | required | 27016Step 3: Create the Server
Create a new server using the egg, allocate UDP 27015 as the primary port, attach 6 GB of memory, and fill in the variables on the settings page. The operator now has a complete control surface without ever opening a config file.
Step 4: Verify First Boot
[info] Sunkenland dedicated server starting[info] Seed: 12345678[info] Slots: 6[info] Raid interval: 90m[info] Listening on 0.0.0.0:27015 (query 27016)[info] Server registered: Vardoran ReefStep 5: Persistent Config Overrides
Anything not exposed as a launch argument lives in server_config.json under the world directory. Mount the file outside of the launch args so it survives variable changes.
{ "dayLengthMinutes": 30, "nightLengthMinutes": 15, "lootMultiplier": 1.25, "buildingDecayMultiplier": 0.5, "pvpEnabled": false, "friendlyFire": false, "autoSaveIntervalSeconds": 300}Step 6: Scheduled Backups
Schedule: every 4 hoursTask 1: Send Console Command -> saveTask 2: Wait 15sTask 3: Backup -> include "worlds/", exclude "worlds/**/temp/*"Performance and Tuning
- Keep
MAX_PLAYERSat 6 unless your host has high single thread clocks, the Unity physics step on water tiles is expensive. - Lower
FACTION_AGGRESSIONto 0.75 for casual servers, raise to 1.5 for hardcore. 2.0 makes the early game unplayable. - Drop
buildingDecayMultiplierto 0.0 only for short term events, otherwise abandoned bases stay forever.
Conclusion
Exposing the meaningful Sunkenland gameplay levers as Pterodactyl startup variables turns the dedicated server from a fixed appliance into a per server tunable instance, without forcing operators to learn the file layout. The panel becomes the entire interface.